From d7c7457186a4fa43eb122ac93d4dedf86a3bb9f1 Mon Sep 17 00:00:00 2001 From: Saksham Gupta Date: Fri, 13 Sep 2024 12:16:26 +0530 Subject: [PATCH 1/4] fix: removed extra log --- lib/utils/HttpXMLUtil.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/utils/HttpXMLUtil.js b/lib/utils/HttpXMLUtil.js index 7d9a525..7c6efef 100644 --- a/lib/utils/HttpXMLUtil.js +++ b/lib/utils/HttpXMLUtil.js @@ -104,7 +104,6 @@ const HttpXMLUtil = { xhr.setRequestHeader(headerName, customHeaders[headerName]); } } - console.log('Headers added to the request:', xhr.getAllResponseHeaders()); xhr.onload = function() { if (xhr.status >= 200 && xhr.status < 300) { From 657b7ba7b08bfdb2ecd5df647021019d212a5a0f Mon Sep 17 00:00:00 2001 From: Saksham Gupta Date: Mon, 16 Sep 2024 12:12:56 +0530 Subject: [PATCH 2/4] fix: js files build --- dist/vwo-javascript-sdk.js | 1909 +++++++++++++++++++--------- dist/vwo-javascript-sdk.js.map | 2 +- dist/vwo-javascript-sdk.min.js | 4 +- dist/vwo-javascript-sdk.min.js.map | 2 +- 4 files changed, 1324 insertions(+), 593 deletions(-) diff --git a/dist/vwo-javascript-sdk.js b/dist/vwo-javascript-sdk.js index 1e0db6a..3c77558 100644 --- a/dist/vwo-javascript-sdk.js +++ b/dist/vwo-javascript-sdk.js @@ -1,5 +1,5 @@ /*! - * vwo-javascript-sdk - v1.69.0 + * vwo-javascript-sdk - v1.70.0 * URL - https://github.com/wingify/vwo-node-sdk * * Copyright 2019-2022 Wingify Software Pvt. Ltd. @@ -131,12 +131,12 @@ return /******/ (function(modules) { // webpackBootstrap /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -152,61 +152,81 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * See the License for the specific language governing permissions and * limitations under the License. */ - var api = __webpack_require__(/*! ./api */ "./lib/api/index.js"); + var FileNameEnum = __webpack_require__(/*! ./enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var ApiEnum = __webpack_require__(/*! ./enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var DataTypeUtil = __webpack_require__(/*! ./utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var FunctionUtil = __webpack_require__(/*! ./utils/FunctionUtil */ "./lib/utils/FunctionUtil.js"); + var VWOFeatureFlags = __webpack_require__(/*! ./utils/VWOFeatureFlags */ "./lib/utils/VWOFeatureFlags.js"); + var EventQueue = __webpack_require__(/*! ./services/EventQueue */ "./lib/services/EventQueue.js"); + var SettingsFileService = __webpack_require__(/*! ./services/SettingsFileManager */ "./lib/services/SettingsFileManager.js"); + var logging = __webpack_require__(/*! ./services/logging */ "./lib/services/logging/index.js"); + var HooksManager = __webpack_require__(/*! ./services/HooksManager */ "./lib/services/HooksManager.js"); + var UrlService = __webpack_require__(/*! ./services/UrlService */ "./lib/services/UrlService.js"); + var UsageStats = __webpack_require__(/*! ./services/UsageStats */ "./lib/services/UsageStats.js"); + var BatchEventsDispatcher; var customEventUtil; var BatchEventsQueue; + if (false) {} + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.VWO; -var VWO = /*#__PURE__*/function () { + +var VWO = +/*#__PURE__*/ +function () { // Setting various services on the instance to be accessible by its member functions function VWO() { var _this = this; + var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + _classCallCheck(this, VWO); + this.getVariation = this.getVariationName; // to be backward compatible + this.userStorageService = config.userStorageService; this.logger = config.logger; this.returnPromiseFor = config.returnPromiseFor; this.asyncStorageConfig = config.asyncStorageConfig; this.optOut = false; + if (this.userStorageService === undefined && config.asyncStorageConfig) { // replace the userStorageService with the redisObject passed in asyncStorageConfig this.userStorageService = config.asyncStorageConfig.redisStorage; config.userStorageService = this.userStorageService; } - var settingsFileManager = new SettingsFileService(config); - // Validate the config file i.e. check if required fields contain appropriate data + var settingsFileManager = new SettingsFileService(config); // Validate the config file i.e. check if required fields contain appropriate data + if (!settingsFileManager.isSettingsFileValid()) { this.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_INVALID, { file: file })); return; } + this.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_VALID, { file: file - })); + })); // Initialize Hooks manager so that callbacks can be invoked - // Initialize Hooks manager so that callbacks can be invoked - HooksManager.init(config); + HooksManager.init(config); // Setup event quque for sending impressions to VWO server - // Setup event quque for sending impressions to VWO server this.eventQueue = new EventQueue(); this.usageStats = new UsageStats(); this.SettingsFileManager = settingsFileManager; @@ -214,21 +234,19 @@ var VWO = /*#__PURE__*/function () { if (!config.isDevelopmentMode) { this.usageStats.collectUsageStats(settingsFileManager.getConfig()); - } + } // Only for Node.js SDK + + + if (false) { var sdkKey, accountId; } // Process settingsFile for various things. For eg: assign bucket range to variation, etc. - // Only for Node.js SDK - if (false) { var sdkKey, accountId; } - // Process settingsFile for various things. For eg: assign bucket range to variation, etc. this.SettingsFileManager.processSettingsFile(); this.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SDK_INITIALIZED, { file: file })); this.UrlService = UrlService.init(config.settingsFile); this.VWOFeatureFlags = VWOFeatureFlags.init(config.settingsFile); - } - - // PUBLIC METHODS + } // PUBLIC METHODS /** * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server @@ -239,13 +257,18 @@ var VWO = /*#__PURE__*/function () { * * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part */ + + _createClass(VWO, [{ key: "activate", value: function activate(campaignKey, userId) { var _this2 = this; + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + try { var self = this; + if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, { file: file, @@ -257,6 +280,7 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.ACTIVATE })); + resolve(null); } else { return api.activate(self, campaignKey, userId, options).then(function (data) { @@ -268,10 +292,10 @@ var VWO = /*#__PURE__*/function () { }); } }); - } - - // Check if returnPromiseFor is provided. If yes, return a promise instead of value + } // Check if returnPromiseFor is provided. If yes, return a promise instead of value // i.e. wait till the network call is not successful + + if (self.returnPromiseFor && (self.returnPromiseFor.activate || self.returnPromiseFor.all)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, { file: file, @@ -283,16 +307,18 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.ACTIVATE })); + resolve(null); } else { var variationName; + options.responseCallback = function (_error, _response) { resolve(variationName); }; - variationName = api.activate(self, campaignKey, userId, options); - // If we get null from the API i.e. no tracking call was sent + variationName = api.activate(self, campaignKey, userId, options); // If we get null from the API i.e. no tracking call was sent // In this case, responseCallback will not be fired and hence we have to manually resolve the promise + if (!variationName) { resolve(variationName); } else if (DataTypeUtil.isObject(variationName)) { @@ -301,6 +327,7 @@ var VWO = /*#__PURE__*/function () { } }); } + if (this.optOut) { this.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, { file: file, @@ -308,10 +335,13 @@ var VWO = /*#__PURE__*/function () { })); return null; } + var apiResponse = api.activate(self, campaignKey, userId, options); + if (DataTypeUtil.isObject(apiResponse)) { return apiResponse.variationName; } + return apiResponse; } catch (err) { this.logger.log(LogLevelEnum.ERROR, err.message); @@ -327,13 +357,17 @@ var VWO = /*#__PURE__*/function () { * * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part */ + }, { key: "getVariationName", value: function getVariationName(campaignKey, userId) { var _this3 = this; + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + try { var self = this; + if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, { file: file, @@ -345,6 +379,7 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.GET_VARIATION_NAME })); + resolve(null); } else { return api.getVariation(self, campaignKey, userId, options).then(function (data) { @@ -356,9 +391,9 @@ var VWO = /*#__PURE__*/function () { }); } }); - } + } // Check if returnPromiseFor is provided. If yes, return a promise instead of value + - // Check if returnPromiseFor is provided. If yes, return a promise instead of value if (self.returnPromiseFor && (self.returnPromiseFor.getVariationName || self.returnPromiseFor.all)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, { file: file, @@ -370,6 +405,7 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.GET_VARIATION_NAME })); + resolve(null); } else { // since this API does not send any async call, we can simply resolve the returned value @@ -377,6 +413,7 @@ var VWO = /*#__PURE__*/function () { } }); } + if (this.optOut) { this.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, { file: file, @@ -384,6 +421,7 @@ var VWO = /*#__PURE__*/function () { })); return null; } + return api.getVariation(self, campaignKey, userId, options); } catch (err) { this.logger.log(LogLevelEnum.ERROR, err.message); @@ -398,15 +436,17 @@ var VWO = /*#__PURE__*/function () { * @param {String} goalIdentifier unique campaign's goal identifier * @param {Object} options optional params - customVariables, variationTargetingVariables, revenueValue */ + }, { key: "track", value: function track(campaignSpecifier, userId, goalIdentifier) { var _this4 = this; + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + try { - var self = this; + var self = this; // In case we use any asyncStorage like redis, promisify track - // In case we use any asyncStorage like redis, promisify track if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, { file: file, @@ -418,6 +458,7 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.TRACK })); + resolve(null); } else { return api.track(self, campaignSpecifier, userId, goalIdentifier, options).then(function (trackResponse) { @@ -425,10 +466,10 @@ var VWO = /*#__PURE__*/function () { }); } }); - } - - // Check if returnPromiseFor is provided. If yes, return a promise instead of value + } // Check if returnPromiseFor is provided. If yes, return a promise instead of value // i.e. wait till the network call is not successful + + if (self.returnPromiseFor && (self.returnPromiseFor.track || self.returnPromiseFor.all)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, { file: file, @@ -440,14 +481,16 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.TRACK })); + resolve(null); } else { var trackResponse; var counter = 0; + options.responseCallback = function (_error, _response) { - counter += 1; - // For Data360, one single call is there to track multiple metrices + counter += 1; // For Data360, one single call is there to track multiple metrices // For global goals, we are now sending one single batch-events call + if (self.isEventArchEnabled || DataTypeUtil.isArray(campaignSpecifier) || (DataTypeUtil.isUndefined(campaignSpecifier) || DataTypeUtil.isNull(campaignSpecifier)) && FunctionUtil.objectValues(trackResponse).filter(Boolean).length) { resolve(trackResponse); } else if (counter === FunctionUtil.objectValues(trackResponse).filter(Boolean).length) { @@ -456,10 +499,11 @@ var VWO = /*#__PURE__*/function () { resolve(trackResponse); } }; - trackResponse = api.track(self, campaignSpecifier, userId, goalIdentifier, options); - // If we get null/false from the API i.e. no tracking call was sent + + trackResponse = api.track(self, campaignSpecifier, userId, goalIdentifier, options); // If we get null/false from the API i.e. no tracking call was sent // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise // Or, in case of global goals, if none campaign got success, manually resolve + if (!trackResponse || !FunctionUtil.objectValues(trackResponse).some(Boolean)) { resolve(trackResponse); } else if (trackResponse && trackResponse.isDevelopmentMode) { @@ -469,6 +513,7 @@ var VWO = /*#__PURE__*/function () { } }); } + if (this.optOut) { this.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, { file: file, @@ -476,6 +521,7 @@ var VWO = /*#__PURE__*/function () { })); return null; } + return api.track(self, campaignSpecifier, userId, goalIdentifier, options); } catch (err) { this.logger.log(LogLevelEnum.ERROR, err.message); @@ -491,13 +537,17 @@ var VWO = /*#__PURE__*/function () { * * @return {Boolean} true if feature enabled, false otherwise */ + }, { key: "isFeatureEnabled", value: function isFeatureEnabled(campaignKey, userId) { var _this5 = this; + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + try { var self = this; + if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, { file: file, @@ -509,6 +559,7 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.IS_FEATURE_ENABLED })); + resolve(null); } else { return api.isFeatureEnabled(self, campaignKey, userId, options).then(function (data) { @@ -520,10 +571,10 @@ var VWO = /*#__PURE__*/function () { }); } }); - } - - // Check if returnPromiseFor is provided. If yes, return a promise instead of value + } // Check if returnPromiseFor is provided. If yes, return a promise instead of value // i.e. wait till the network call is not successful + + if (self.returnPromiseFor && (self.returnPromiseFor.isFeatureEnabled || self.returnPromiseFor.all)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, { file: file, @@ -535,15 +586,18 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.IS_FEATURE_ENABLED })); + resolve(false); } else { var isFeatureEnabledApiResponse; + options.responseCallback = function (_error, _response) { resolve(!!isFeatureEnabledApiResponse); }; - isFeatureEnabledApiResponse = api.isFeatureEnabled(self, campaignKey, userId, options); - // If we get null from the API i.e. no tracking call was sent + + isFeatureEnabledApiResponse = api.isFeatureEnabled(self, campaignKey, userId, options); // If we get null from the API i.e. no tracking call was sent // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise + if (DataTypeUtil.isNull(isFeatureEnabledApiResponse)) { resolve(false); } else if (DataTypeUtil.isObject(isFeatureEnabledApiResponse)) { @@ -552,6 +606,7 @@ var VWO = /*#__PURE__*/function () { } }); } + if (this.optOut) { this.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, { file: file, @@ -559,10 +614,13 @@ var VWO = /*#__PURE__*/function () { })); return false; } + var apiResponse = api.isFeatureEnabled(self, campaignKey, userId, options); + if (DataTypeUtil.isObject(apiResponse)) { return !!apiResponse.isFeatureEnabled; } + return !!apiResponse; } catch (err) { this.logger.log(LogLevelEnum.ERROR, err.message); @@ -582,13 +640,17 @@ var VWO = /*#__PURE__*/function () { * maintaining the data-type, * null if anything fails like campaign / variable not found */ + }, { key: "getFeatureVariableValue", value: function getFeatureVariableValue(campaignKey, variableKey, userId) { var _this6 = this; + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + try { var self = this; + if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, { file: file, @@ -600,6 +662,7 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.GET_FEATURE_VARIABLE_VALUE })); + resolve(null); } else { return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options).then(function (data) { @@ -611,9 +674,9 @@ var VWO = /*#__PURE__*/function () { }); } }); - } + } // Check if returnPromiseFor is provided. If yes, return a promise instead of value + - // Check if returnPromiseFor is provided. If yes, return a promise instead of value if (self.returnPromiseFor && (self.returnPromiseFor.getFeatureVariableValue || self.returnPromiseFor.all)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, { file: file, @@ -625,6 +688,7 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.GET_FEATURE_VARIABLE_VALUE })); + resolve(null); } else { // since this API does not send any async call, we can simply resolve the returned value @@ -632,6 +696,7 @@ var VWO = /*#__PURE__*/function () { } }); } + if (this.optOut) { this.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, { file: file, @@ -639,6 +704,7 @@ var VWO = /*#__PURE__*/function () { })); return null; } + return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options); } catch (err) { this.logger.log(LogLevelEnum.ERROR, err.message); @@ -654,13 +720,16 @@ var VWO = /*#__PURE__*/function () { * * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable */ + }, { key: "push", value: function push(tagKey, tagValue, userId) { var _this7 = this; + try { var self = this; var customDimensionMap; + if (arguments.length === 2) { // Argument reshuffling. customDimensionMap = tagKey; @@ -675,10 +744,10 @@ var VWO = /*#__PURE__*/function () { api: ApiEnum.PUSH })); return false; - } - - // Check if returnPromiseFor is provided. If yes, return a promise instead of value + } // Check if returnPromiseFor is provided. If yes, return a promise instead of value // i.e. wait till the network call is not successful + + if (self.returnPromiseFor && (self.returnPromiseFor.push || self.returnPromiseFor.all)) { self.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, { file: file, @@ -690,27 +759,27 @@ var VWO = /*#__PURE__*/function () { file: file, api: ApiEnum.PUSH })); + resolve(null); } else { var apiResponse; var counter = 0; var options = { responseCallback: function responseCallback(_error, _response) { - counter += 1; - // In case of multiple custom dimensions, when all are tracked, then only resolve + counter += 1; // In case of multiple custom dimensions, when all are tracked, then only resolve // if customDimensionMap is used + if (customDimensionMap && DataTypeUtil.isObject(customDimensionMap) && FunctionUtil.objectValues(customDimensionMap).filter(Boolean).length > 1) { resolve(apiResponse); - } - // else if custom dimensions are sent with tag key and value instead of a map + } // else if custom dimensions are sent with tag key and value instead of a map else if (counter === FunctionUtil.objectValues(apiResponse).filter(Boolean).length) { - resolve(apiResponse); - } + resolve(apiResponse); + } } }; - apiResponse = api.push(self, tagKey, tagValue, userId, customDimensionMap, options); - // If we get false from the API i.e. no tracking call was sent + apiResponse = api.push(self, tagKey, tagValue, userId, customDimensionMap, options); // If we get false from the API i.e. no tracking call was sent // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise + if (!apiResponse) { resolve(false); } else if (apiResponse && apiResponse.isDevelopmentMode) { @@ -720,6 +789,7 @@ var VWO = /*#__PURE__*/function () { } }); } + if (this.optOut) { this.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, { file: file, @@ -727,6 +797,7 @@ var VWO = /*#__PURE__*/function () { })); return null; } + return api.push(self, tagKey, tagValue, userId, customDimensionMap); } catch (err) { this.logger.log(LogLevelEnum.ERROR, err.message); @@ -737,12 +808,15 @@ var VWO = /*#__PURE__*/function () { key: "setOptOut", value: function setOptOut() { var _this8 = this; + this.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OPT_OUT_API_CALLED, { file: file })); + if (this.returnPromiseFor && (this.returnPromiseFor.optOut || this.returnPromiseFor.all)) { return new Promise(function (resolve) { _this8._destroyInstanceVariables(); + if (_this8.batchEventsQueue) { _this8.flushEvents().then(function () { _this8.batchEventsQueue = undefined; @@ -753,22 +827,28 @@ var VWO = /*#__PURE__*/function () { } }); } + if (this.batchEventsQueue) { this.flushEvents().then(function () { _this8.batchEventsQueue = undefined; }); } + this._destroyInstanceVariables(); + return true; } /** * Manually flush impression events to VWO which are queued in batch queue as per batchEvents config */ + }, { key: "flushEvents", value: function flushEvents() { var _this9 = this; + var accountId = this.SettingsFileManager.getSettingsFile().accountId; + if (false) {} } /** @@ -780,6 +860,7 @@ var VWO = /*#__PURE__*/function () { * * @return {Promise} */ + }, { key: "getAndUpdateSettingsFile", value: function getAndUpdateSettingsFile(accountId, sdkKey) { @@ -792,6 +873,7 @@ var VWO = /*#__PURE__*/function () { resolve(null); }); } + return this.SettingsFileManager.getAndUpdateSettingsFile(accountId, sdkKey); } }, { @@ -804,8 +886,10 @@ var VWO = /*#__PURE__*/function () { this.optOut = true; } }]); + return VWO; }(); + module.exports = VWO; /***/ }), @@ -832,22 +916,30 @@ module.exports = VWO; * See the License for the specific language governing permissions and * limitations under the License. */ - var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var ApiEnum = __webpack_require__(/*! ../enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var DecisionUtil = __webpack_require__(/*! ../utils/DecisionUtil */ "./lib/utils/DecisionUtil.js"); + var CampaignUtil = __webpack_require__(/*! ../utils/CampaignUtil */ "./lib/utils/CampaignUtil.js"); + var ImpressionUtil = __webpack_require__(/*! ../utils/ImpressionUtil */ "./lib/utils/ImpressionUtil.js"); + var ValidateUtil = __webpack_require__(/*! ../utils/ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var EventEnum = __webpack_require__(/*! ../enums/EventEnum */ "./lib/enums/EventEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.Activate; - /** * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server * @@ -864,22 +956,23 @@ var file = FileNameEnum.Activate; * * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part */ + function activate(vwoInstance, campaignKey, userId) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var api = ApiEnum.ACTIVATE; var areParamsValid = false; + if (DataTypeUtil.isObject(options)) { var customVariables = options.customVariables, - variationTargetingVariables = options.variationTargetingVariables, - userStorageData = options.userStorageData, - shouldTrackReturningUser = options.shouldTrackReturningUser, - metaData = options.metaData, - responseCallback = options.responseCallback, - userAgent = options.userAgent, - userIpAddress = options.userIpAddress; - var visitorUserAgent = userAgent; - - // Check if arguments have valid data-type + variationTargetingVariables = options.variationTargetingVariables, + userStorageData = options.userStorageData, + shouldTrackReturningUser = options.shouldTrackReturningUser, + metaData = options.metaData, + responseCallback = options.responseCallback, + userAgent = options.userAgent, + userIpAddress = options.userIpAddress; + var visitorUserAgent = userAgent; // Check if arguments have valid data-type + if (ValidateUtil.areValidParamsForAPIMethod({ method: ApiEnum.ACTIVATE, campaignKey: campaignKey, @@ -896,36 +989,35 @@ function activate(vwoInstance, campaignKey, userId) { areParamsValid = true; } } + if (areParamsValid === false) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, { file: file, api: ApiEnum.ACTIVATE })); return null; - } + } // Get the cached configuration + - // Get the cached configuration var config = vwoInstance.SettingsFileManager.getConfig(); - var settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api); + var settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api); // If no settings are found, simply return no variation - // If no settings are found, simply return no variation if (!settingsFile) { return null; } - shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false; - // Get the campaign settings based on campaignKey from the settings - var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); + shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false; // Get the campaign settings based on campaignKey from the settings + + var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); // check if MAB enabled, if yes, then userStorage must be defined - // check if MAB enabled, if yes, then userStorage must be defined if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) { if (vwoInstance.userStorageService === undefined) { vwoInstance.logger.log(LogLevelEnum.ERROR, '(' + file + ') This campaign: ' + campaignKey + ' has MAB configured. Please configure User Storage to proceed.'); return null; } - } + } // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation + - // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation if (!campaign || campaign.status !== Constants.STATUS_RUNNING) { vwoInstance.logger.log(LogLevelEnum.WARN, LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, { file: file, @@ -934,6 +1026,7 @@ function activate(vwoInstance, campaignKey, userId) { })); return null; } + if (!CampaignUtil.isAbCampaign(campaign)) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, { file: file, @@ -943,21 +1036,25 @@ function activate(vwoInstance, campaignKey, userId) { api: api })); return null; - } + } // Once the matching RUNNING campaign is found, assign the deterministic variation to the userId provided + - // Once the matching RUNNING campaign is found, assign the deterministic variation to the userId provided var result = DecisionUtil.getVariation(config, settingsFile, campaign, campaignKey, userId, customVariables, variationTargetingVariables, userStorageData, metaData, true, false, undefined, api); + if (DataTypeUtil.isPromise(result)) { return result.then(function (data) { return _validateAndReturnVariation(vwoInstance, campaignKey, userId, config, api, shouldTrackReturningUser, settingsFile, campaign, visitorUserAgent, userIpAddress, responseCallback, data); }); } + return _validateAndReturnVariation(vwoInstance, campaignKey, userId, config, api, shouldTrackReturningUser, settingsFile, campaign, visitorUserAgent, userIpAddress, responseCallback, result); } + function _validateAndReturnVariation(vwoInstance, campaignKey, userId, config, api, shouldTrackReturningUser, settingsFile, campaign, visitorUserAgent, userIpAddress, responseCallback, result) { var variationId = result.variationId, - variationName = result.variationName, - isStoredVariation = result.isStoredVariation; // Check if variation-name has been assigned to the userId. If not, return no variation + variationName = result.variationName, + isStoredVariation = result.isStoredVariation; // Check if variation-name has been assigned to the userId. If not, return no variation + if (!ValidateUtil.isValidValue(variationName)) { vwoInstance.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.DECISION_NO_VARIATION_ALLOTED, { file: file, @@ -965,9 +1062,9 @@ function _validateAndReturnVariation(vwoInstance, campaignKey, userId, config, a campaignKey: campaignKey })); return null; - } + } // check if variation found from storage. return it without sending a call to VWO server + - // check if variation found from storage. return it without sending a call to VWO server if (isStoredVariation && !shouldTrackReturningUser) { vwoInstance.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, { file: file, @@ -978,14 +1075,15 @@ function _validateAndReturnVariation(vwoInstance, campaignKey, userId, config, a return { variationName: variationName }; - } + } // Variation found...let VWO server knows about it to show report stats + - // Variation found...let VWO server knows about it to show report stats if (config.batchEvents) { var properties = ImpressionUtil.buildBatchEventForTrackingUser(settingsFile, campaign.id, variationId, userId, visitorUserAgent, userIpAddress); vwoInstance.batchEventsQueue.enqueue(properties); } else if (settingsFile.isEventArchEnabled) { var _properties = ImpressionUtil.getEventsBaseProperties(settingsFile, EventEnum.VWO_VARIATION_SHOWN, vwoInstance.usageStats.getUsageStats(), visitorUserAgent, userIpAddress); + var payload = ImpressionUtil.getTrackUserPayloadData(settingsFile, userId, EventEnum.VWO_VARIATION_SHOWN, campaign.id, variationId); vwoInstance.eventQueue.process(config, _properties, vwoInstance, { payload: payload, @@ -993,17 +1091,21 @@ function _validateAndReturnVariation(vwoInstance, campaignKey, userId, config, a }); } else { var _properties2 = ImpressionUtil.buildEventForTrackingUser(settingsFile, campaign.id, variationId, userId, vwoInstance.usageStats.getUsageStats(), visitorUserAgent, userIpAddress); + vwoInstance.eventQueue.process(config, _properties2, vwoInstance, { responseCallback: responseCallback }); } + if (config.isDevelopmentMode) { return { variationName: variationName }; } + return variationName; } + module.exports = activate; /***/ }), @@ -1030,22 +1132,30 @@ module.exports = activate; * See the License for the specific language governing permissions and * limitations under the License. */ - var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var ApiEnum = __webpack_require__(/*! ../enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var DecisionUtil = __webpack_require__(/*! ../utils/DecisionUtil */ "./lib/utils/DecisionUtil.js"); + var CampaignUtil = __webpack_require__(/*! ../utils/CampaignUtil */ "./lib/utils/CampaignUtil.js"); + var ValidateUtil = __webpack_require__(/*! ../utils/ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var FeatureUtil = __webpack_require__(/*! ../utils/FeatureUtil */ "./lib/utils/FeatureUtil.js"); + var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var ObjectUtil = __webpack_require__(/*! ../utils/ObjectUtil */ "./lib/utils/ObjectUtil.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.GetFeatureVariableValue; - /** * This API method: * @@ -1064,16 +1174,20 @@ var file = FileNameEnum.GetFeatureVariableValue; * maintaining the data-type, * null if anything fails like campaign / variable not found */ + function getFeatureVariableValue(vwoInstance, campaignKey, variableKey, userId) { var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + try { var api = ApiEnum.GET_FEATURE_VARIABLE_VALUE; var areParamsValid = false; + if (DataTypeUtil.isObject(options)) { var customVariables = options.customVariables, - variationTargetingVariables = options.variationTargetingVariables, - userStorageData = options.userStorageData, - metaData = options.metaData; // Check if arguments have valid data-type + variationTargetingVariables = options.variationTargetingVariables, + userStorageData = options.userStorageData, + metaData = options.metaData; // Check if arguments have valid data-type + if (ValidateUtil.areValidParamsForAPIMethod({ method: ApiEnum.GET_FEATURE_VARIABLE_VALUE, campaignKey: campaignKey, @@ -1087,24 +1201,26 @@ function getFeatureVariableValue(vwoInstance, campaignKey, variableKey, userId) areParamsValid = true; } } + if (areParamsValid === false) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, { file: file, api: ApiEnum.GetFeatureVariableValue })); return null; - } + } // Get the cached configuration + - // Get the cached configuration var config = vwoInstance.SettingsFileManager.getConfig(); var settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api); - config.apiName = api; + config.apiName = api; // If no settings are found, simply return no variation - // If no settings are found, simply return no variation if (!settingsFile) { return null; } + var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); + if (!campaign || campaign.status !== Constants.STATUS_RUNNING) { vwoInstance.logger.log(LogLevelEnum.WARN, LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, { file: file, @@ -1113,6 +1229,7 @@ function getFeatureVariableValue(vwoInstance, campaignKey, variableKey, userId) })); return null; } + if (CampaignUtil.isAbCampaign(campaign)) { // API not allowed for full-stack AB campaigns vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, { @@ -1124,22 +1241,27 @@ function getFeatureVariableValue(vwoInstance, campaignKey, variableKey, userId) })); return null; } + var result = DecisionUtil.getVariation(config, settingsFile, campaign, campaignKey, userId, customVariables, variationTargetingVariables, userStorageData, metaData, false, false, undefined, api); + if (DataTypeUtil.isPromise(result)) { return result.then(function (data) { return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, data); }); } + return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result); } catch (err) { vwoInstance.logger.log(LogLevelEnum.ERROR, err.message); return null; } } + function _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result) { var variable; var variation = result.variation, - variationName = result.variationName; + variationName = result.variationName; + if (!variationName) { vwoInstance.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, { file: file, @@ -1149,10 +1271,12 @@ function _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, })); return null; } + if (CampaignUtil.isFeatureRolloutCampaign(campaign)) { variable = FeatureUtil.getVariableForFeature(campaign, variableKey); } else if (CampaignUtil.isFeatureTestCampaign(campaign)) { variable = FeatureUtil.getVariableValueForVariation(campaign, variation, variableKey); + if (ObjectUtil.areObjectKeys(variable) && variation.isFeatureEnabled) { vwoInstance.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_VARIABLE_VALUE, { file: file, @@ -1169,6 +1293,7 @@ function _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, })); } } + if (!ObjectUtil.areObjectKeys(variable)) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.VARIABLE_NOT_FOUND, { file: file, @@ -1177,10 +1302,12 @@ function _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, })); return null; } + var variableValue = variable.value; var typeCastedValue = FeatureUtil.getTypeCastVariableValue(variableValue, variable.type); return typeCastedValue; } + module.exports = getFeatureVariableValue; /***/ }), @@ -1207,20 +1334,26 @@ module.exports = getFeatureVariableValue; * See the License for the specific language governing permissions and * limitations under the License. */ - var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var ApiEnum = __webpack_require__(/*! ../enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var DecisionUtil = __webpack_require__(/*! ../utils/DecisionUtil */ "./lib/utils/DecisionUtil.js"); + var CampaignUtil = __webpack_require__(/*! ../utils/CampaignUtil */ "./lib/utils/CampaignUtil.js"); + var ValidateUtil = __webpack_require__(/*! ../utils/ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.GetVariation; - /** * This API method: Gets the variation assigned for the user for the campaign * @@ -1236,15 +1369,18 @@ var file = FileNameEnum.GetVariation; * * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part */ + function getVariation(vwoInstance, campaignKey, userId) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var api = ApiEnum.GET_VARIATION_NAME; var areParamsValid = false; + if (DataTypeUtil.isObject(options)) { var customVariables = options.customVariables, - variationTargetingVariables = options.variationTargetingVariables, - userStorageData = options.userStorageData, - metaData = options.metaData; // Check if arguments have valid data-type + variationTargetingVariables = options.variationTargetingVariables, + userStorageData = options.userStorageData, + metaData = options.metaData; // Check if arguments have valid data-type + if (ValidateUtil.areValidParamsForAPIMethod({ method: ApiEnum.GET_VARIATION_NAME, campaignKey: campaignKey, @@ -1257,28 +1393,27 @@ function getVariation(vwoInstance, campaignKey, userId) { areParamsValid = true; } } + if (areParamsValid === false) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, { file: file, api: ApiEnum.GET_VARIATION_NAME })); return null; - } + } // Get the cached configuration + - // Get the cached configuration var config = vwoInstance.SettingsFileManager.getConfig(); var settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api); - config.apiName = api; + config.apiName = api; // If no settings are found, simply return no variation - // If no settings are found, simply return no variation if (!settingsFile) { return null; - } + } // Get the campaign settings based on campaignKey from the settings - // Get the campaign settings based on campaignKey from the settings - var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); - // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation + var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation + if (!campaign || campaign.status !== Constants.STATUS_RUNNING) { vwoInstance.logger.log(LogLevelEnum.WARN, LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, { file: file, @@ -1287,6 +1422,7 @@ function getVariation(vwoInstance, campaignKey, userId) { })); return null; } + if (CampaignUtil.isFeatureRolloutCampaign(campaign)) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, { file: file, @@ -1297,17 +1433,22 @@ function getVariation(vwoInstance, campaignKey, userId) { })); return null; } + var result = DecisionUtil.getVariation(config, settingsFile, campaign, campaignKey, userId, customVariables, variationTargetingVariables, userStorageData, metaData, false, false, undefined, api); + if (DataTypeUtil.isPromise(result)) { return result.then(function (data) { return data; }); } + if (!result.variationName) { return null; } + return result.variationName; } + module.exports = getVariation; /***/ }), @@ -1334,13 +1475,18 @@ module.exports = getVariation; * See the License for the specific language governing permissions and * limitations under the License. */ - var activate = __webpack_require__(/*! ./activate */ "./lib/api/activate.js"); + var getVariation = __webpack_require__(/*! ./getVariation */ "./lib/api/getVariation.js"); + var track = __webpack_require__(/*! ./track */ "./lib/api/track.js"); + var isFeatureEnabled = __webpack_require__(/*! ./isFeatureEnabled */ "./lib/api/isFeatureEnabled.js"); + var getFeatureVariableValue = __webpack_require__(/*! ./getFeatureVariableValue */ "./lib/api/getFeatureVariableValue.js"); + var push = __webpack_require__(/*! ./push */ "./lib/api/push.js"); + module.exports = { activate: activate, getVariation: getVariation, @@ -1374,22 +1520,30 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var ApiEnum = __webpack_require__(/*! ../enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var DecisionUtil = __webpack_require__(/*! ../utils/DecisionUtil */ "./lib/utils/DecisionUtil.js"); + var CampaignUtil = __webpack_require__(/*! ../utils/CampaignUtil */ "./lib/utils/CampaignUtil.js"); + var ImpressionUtil = __webpack_require__(/*! ../utils/ImpressionUtil */ "./lib/utils/ImpressionUtil.js"); + var ValidateUtil = __webpack_require__(/*! ../utils/ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var EventEnum = __webpack_require__(/*! ../enums/EventEnum */ "./lib/enums/EventEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.IsFeatureEnabled; - /** * This API checks: Whether a feature is enabled or not for the given user * @@ -1404,21 +1558,23 @@ var file = FileNameEnum.IsFeatureEnabled; * * @return {Boolean} true if feature enabled, false otherwise */ + function isFeatureEnabled(vwoInstance, campaignKey, userId) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var api = ApiEnum.IS_FEATURE_ENABLED; var areParamsValid = false; + if (DataTypeUtil.isObject(options)) { var customVariables = options.customVariables, - variationTargetingVariables = options.variationTargetingVariables, - userStorageData = options.userStorageData, - shouldTrackReturningUser = options.shouldTrackReturningUser, - metaData = options.metaData, - responseCallback = options.responseCallback, - userAgent = options.userAgent, - userIpAddress = options.userIpAddress; - var visitorUserAgent = userAgent; - // Check if arguments have valid data-type + variationTargetingVariables = options.variationTargetingVariables, + userStorageData = options.userStorageData, + shouldTrackReturningUser = options.shouldTrackReturningUser, + metaData = options.metaData, + responseCallback = options.responseCallback, + userAgent = options.userAgent, + userIpAddress = options.userIpAddress; + var visitorUserAgent = userAgent; // Check if arguments have valid data-type + if (ValidateUtil.areValidParamsForAPIMethod({ method: ApiEnum.IS_FEATURE_ENABLED, campaignKey: campaignKey, @@ -1435,34 +1591,34 @@ function isFeatureEnabled(vwoInstance, campaignKey, userId) { areParamsValid = true; } } + if (areParamsValid === false) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, { file: file, api: ApiEnum.isFeatureEnabled })); return null; - } + } // Get the cached configuration + - // Get the cached configuration var config = vwoInstance.SettingsFileManager.getConfig(); - var settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api); + var settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api); // If no settings are found, simply log and return false - // If no settings are found, simply log and return false if (!settingsFile) { return null; } - shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false; - // Get the campaign settings based on campaignKey from the settings - var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); + shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false; // Get the campaign settings based on campaignKey from the settings + + var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); // check if MAB enabled, if yes, then userStorage must be defined - // check if MAB enabled, if yes, then userStorage must be defined if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) { if (vwoInstance.userStorageService === undefined) { vwoInstance.logger.log(LogLevelEnum.ERROR, '(' + file + ') This campaign: ' + campaignKey + ' has MAB configured. Please configure User Storage to proceed.'); return null; } } + if (!campaign || campaign.status !== Constants.STATUS_RUNNING) { vwoInstance.logger.log(LogLevelEnum.WARN, LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, { file: file, @@ -1471,6 +1627,7 @@ function isFeatureEnabled(vwoInstance, campaignKey, userId) { })); return null; } + if (CampaignUtil.isAbCampaign(campaign)) { // API not allowed for full-stack AB campaigns vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, { @@ -1482,24 +1639,28 @@ function isFeatureEnabled(vwoInstance, campaignKey, userId) { })); return null; } - var result = DecisionUtil.getVariation(config, settingsFile, campaign, campaignKey, userId, customVariables, variationTargetingVariables, userStorageData, metaData, true, false, undefined, api); - // check if result is a promise, if yes then wait for it untill it resolves, then only proceed further + var result = DecisionUtil.getVariation(config, settingsFile, campaign, campaignKey, userId, customVariables, variationTargetingVariables, userStorageData, metaData, true, false, undefined, api); // check if result is a promise, if yes then wait for it untill it resolves, then only proceed further + if (DataTypeUtil.isPromise(result)) { return result.then(function (data) { return _validateAndReturnFeatureEnabled(vwoInstance, campaignKey, userId, config, api, shouldTrackReturningUser, settingsFile, campaign, responseCallback, visitorUserAgent, userIpAddress, data); }); } + return _validateAndReturnFeatureEnabled(vwoInstance, campaignKey, userId, config, api, shouldTrackReturningUser, settingsFile, campaign, responseCallback, visitorUserAgent, userIpAddress, result); } + function _validateAndReturnFeatureEnabled(vwoInstance, campaignKey, userId, config, api, shouldTrackReturningUser, settingsFile, campaign, responseCallback, visitorUserAgent, userIpAddress, result) { var variation = result.variation, - variationId = result.variationId, - variationName = result.variationName, - isStoredVariation = result.isStoredVariation; + variationId = result.variationId, + variationName = result.variationName, + isStoredVariation = result.isStoredVariation; var isFeatureEnabled = false; + if (variationName) { isFeatureEnabled = CampaignUtil.isFeatureRolloutCampaign(campaign) || variation.isFeatureEnabled; + if (isStoredVariation && !shouldTrackReturningUser) { vwoInstance.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, { file: file, @@ -1514,6 +1675,7 @@ function _validateAndReturnFeatureEnabled(vwoInstance, campaignKey, userId, conf vwoInstance.batchEventsQueue.enqueue(properties); } else if (settingsFile.isEventArchEnabled) { var _properties = ImpressionUtil.getEventsBaseProperties(settingsFile, EventEnum.VWO_VARIATION_SHOWN, vwoInstance.usageStats.getUsageStats(), visitorUserAgent, userIpAddress); + var payload = ImpressionUtil.getTrackUserPayloadData(settingsFile, userId, EventEnum.VWO_VARIATION_SHOWN, campaign.id, variationId); vwoInstance.eventQueue.process(config, _properties, vwoInstance, { payload: payload, @@ -1521,39 +1683,47 @@ function _validateAndReturnFeatureEnabled(vwoInstance, campaignKey, userId, conf }); } else { var _properties2 = ImpressionUtil.buildEventForTrackingUser(settingsFile, campaign.id, variationId, userId, vwoInstance.usageStats.getUsageStats(), visitorUserAgent, userIpAddress); + vwoInstance.eventQueue.process(config, _properties2, vwoInstance, { responseCallback: responseCallback }); } + vwoInstance.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, { file: file, campaignKey: campaignKey, userId: userId, status: isFeatureEnabled ? 'enabled' : 'disabled' })); + if (config.isDevelopmentMode) { return { isFeatureEnabled: isFeatureEnabled }; } + return isFeatureEnabled; } } + vwoInstance.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, { file: file, campaignKey: campaignKey, userId: userId, status: isFeatureEnabled ? 'enabled' : 'disabled' })); + if (isStoredVariation || config.isDevelopmentMode) { return { isFeatureEnabled: isFeatureEnabled }; } + return { isFeatureEnabled: isFeatureEnabled }; } + module.exports = isFeatureEnabled; /***/ }), @@ -1580,21 +1750,28 @@ module.exports = isFeatureEnabled; * See the License for the specific language governing permissions and * limitations under the License. */ - var ApiEnum = __webpack_require__(/*! ../enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var EventEnum = __webpack_require__(/*! ../enums/EventEnum */ "./lib/enums/EventEnum.js"); + var ValidateUtil = __webpack_require__(/*! ../utils/ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var ImpressionUtil = __webpack_require__(/*! ../utils/ImpressionUtil */ "./lib/utils/ImpressionUtil.js"); + var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var BatchEventsDispatcher; + if (false) {} + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.Push; - /** * This API method: Pushes the key-value tag pair for a particular user * @@ -1608,10 +1785,13 @@ var file = FileNameEnum.Push; * * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable */ + function push(vwoInstance, tagKey, tagValue, userId, customDimensionMap) { var _ref = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}, - responseCallback = _ref.responseCallback; + responseCallback = _ref.responseCallback; + var api = ApiEnum.PUSH; + if (!ValidateUtil.areValidParamsForAPIMethod({ method: ApiEnum.PUSH, tagKey: tagKey, @@ -1626,6 +1806,7 @@ function push(vwoInstance, tagKey, tagValue, userId, customDimensionMap) { })); return false; } + if (tagKey.length > 255) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_KEY_LENGTH_EXCEEDED, { file: file, @@ -1634,6 +1815,7 @@ function push(vwoInstance, tagKey, tagValue, userId, customDimensionMap) { })); return false; } + if (tagValue.length > 255) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_VALUE_LENGTH_EXCEEDED, { file: file, @@ -1643,6 +1825,7 @@ function push(vwoInstance, tagKey, tagValue, userId, customDimensionMap) { })); return false; } + if (tagKey === ' ' && tagValue === ' ' && (!customDimensionMap || Object.keys(customDimensionMap).length === 0)) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.PUSH_INVALID_PARAMS, { file: file, @@ -1650,19 +1833,21 @@ function push(vwoInstance, tagKey, tagValue, userId, customDimensionMap) { })); return false; } + if (tagKey !== ' ' && tagValue !== ' ') { customDimensionMap[tagKey] = tagValue; - } + } // Get the cached configuration + - // Get the cached configuration var config = vwoInstance.SettingsFileManager.getConfig(); - var settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api); + var settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api); // If no settings are found, simply false - // If no settings are found, simply false if (!settingsFile) { return false; } + var result = {}; + if (config.batchEvents) { Object.keys(customDimensionMap).forEach(function (key) { var tagValue = DataTypeUtil.isString(customDimensionMap[key]) ? customDimensionMap[key] : JSON.stringify(customDimensionMap[key]); @@ -1684,24 +1869,30 @@ function push(vwoInstance, tagKey, tagValue, userId, customDimensionMap) { customDimensionKeys.forEach(function (key) { var properties; var tagValue = DataTypeUtil.isString(customDimensionMap[key]) ? customDimensionMap[key] : JSON.stringify(customDimensionMap[key]); + if (true) { properties = ImpressionUtil.buildEventForPushing(settingsFile, key, tagValue, userId); vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback: responseCallback }); } else {} + events.push(properties); result[key] = true; }); + if (false) {} } + if (config.isDevelopmentMode) { return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode }); } + return result; } + module.exports = push; /***/ }), @@ -1713,10 +1904,8 @@ module.exports = push; /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -1732,29 +1921,39 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * See the License for the specific language governing permissions and * limitations under the License. */ - var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var GoalTypeEnum = __webpack_require__(/*! ../enums/GoalTypeEnum */ "./lib/enums/GoalTypeEnum.js"); + var ApiEnum = __webpack_require__(/*! ../enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var DecisionUtil = __webpack_require__(/*! ../utils/DecisionUtil */ "./lib/utils/DecisionUtil.js"); + var CampaignUtil = __webpack_require__(/*! ../utils/CampaignUtil */ "./lib/utils/CampaignUtil.js"); + var _require = __webpack_require__(/*! ../utils/ObjectUtil */ "./lib/utils/ObjectUtil.js"), - objectValues = _require.objectValues; + objectValues = _require.objectValues; + var ImpressionUtil = __webpack_require__(/*! ../utils/ImpressionUtil */ "./lib/utils/ImpressionUtil.js"); + var ValidateUtil = __webpack_require__(/*! ../utils/ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.Track; var GOAL_TYPE_TO_TRACK_DEFAULT = GoalTypeEnum.ALL; var GOAL_IDENTIFIER_SEPERATOR = '_vwo_'; var api = ApiEnum.TRACK; var BatchEventsDispatcher; -if (false) {} +if (false) {} /** * This API method: Marks the conversion of the campaign for a particular goal * @@ -1769,23 +1968,26 @@ if (false) {} * @param {String} goalIdentifier unique campaign's goal identifier * @param {Object} options Optional params */ + + function track(vwoInstance, campaignKey, userId, goalIdentifier) { var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; var areParamsValid = false; + if (DataTypeUtil.isObject(options)) { var revenueValue = options.revenueValue, - customVariables = options.customVariables, - variationTargetingVariables = options.variationTargetingVariables, - userStorageData = options.userStorageData, - goalTypeToTrack = options.goalTypeToTrack, - shouldTrackReturningUser = options.shouldTrackReturningUser, - metaData = options.metaData, - responseCallback = options.responseCallback, - eventProperties = options.eventProperties, - userAgent = options.userAgent, - userIpAddress = options.userIpAddress; - var visitorUserAgent = userAgent; - // Check if arguments have valid data-type + customVariables = options.customVariables, + variationTargetingVariables = options.variationTargetingVariables, + userStorageData = options.userStorageData, + goalTypeToTrack = options.goalTypeToTrack, + shouldTrackReturningUser = options.shouldTrackReturningUser, + metaData = options.metaData, + responseCallback = options.responseCallback, + eventProperties = options.eventProperties, + userAgent = options.userAgent, + userIpAddress = options.userIpAddress; + var visitorUserAgent = userAgent; // Check if arguments have valid data-type + if (ValidateUtil.areValidParamsForAPIMethod({ method: ApiEnum.TRACK, campaignKey: campaignKey, @@ -1805,34 +2007,37 @@ function track(vwoInstance, campaignKey, userId, goalIdentifier) { areParamsValid = true; } } + if (areParamsValid === false) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, { file: file, api: ApiEnum.TRACK })); return null; - } + } // Get the cached configuration + - // Get the cached configuration var config = vwoInstance.SettingsFileManager.getConfig(); var settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api); config.apiName = api; - var revenuePropList = new Set(); + var revenuePropList = new Set(); // If no settings are found, simply do not track goal and return false - // If no settings are found, simply do not track goal and return false if (!settingsFile) { return null; } - var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); - // check if MAB enabled, if yes, then userStorage must be defined + + var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); // check if MAB enabled, if yes, then userStorage must be defined + if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) { if (vwoInstance.userStorageService === undefined) { vwoInstance.logger.log(LogLevelEnum.ERROR, '(' + file + ') This campaign: ' + campaignKey + ' has MAB configured. Please configure User Storage to proceed.'); return null; } } + var campaigns = []; goalTypeToTrack = goalTypeToTrack || config.goalTypeToTrack || GOAL_TYPE_TO_TRACK_DEFAULT; // priority order - options > launchConfig > default + if (DataTypeUtil.isUndefined(shouldTrackReturningUser)) { // if shouldTrackReturningUser is not given in options if (DataTypeUtil.isBoolean(config.shouldTrackReturningUser)) { @@ -1842,6 +2047,7 @@ function track(vwoInstance, campaignKey, userId, goalIdentifier) { shouldTrackReturningUser = false; } } + if (!DataTypeUtil.isString(campaignKey)) { if (DataTypeUtil.isArray(campaignKey)) { campaigns = CampaignUtil.getCampaignsForKeys(settingsFile, campaignKey); @@ -1851,25 +2057,25 @@ function track(vwoInstance, campaignKey, userId, goalIdentifier) { } else { // Get the campaign settings based on campaignKey from the settings var _campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); + campaigns.push(_campaign || { key: campaignKey }); } + var result = {}; var metricMap = {}; var events = []; var areGlobalGoals = true ? false : undefined; campaigns.forEach(function (campaign) { return result[campaign.key] = trackCampaignGoal(vwoInstance, campaign, campaign.key, userId, settingsFile, goalIdentifier, revenueValue, config, customVariables, variationTargetingVariables, userStorageData, goalTypeToTrack, shouldTrackReturningUser, metaData, metricMap, revenuePropList, events, areGlobalGoals, eventProperties, visitorUserAgent, userIpAddress); - }); - - // Check if each object in result is a promise + }); // Check if each object in result is a promise // in case of asyncStorageConfig, each object would be a promise only // Check if result is a non-empty object + var areAllPromises = result && Object.keys(result).length > 0 ? Object.values(result).every(function (item) { return DataTypeUtil.isPromise(item); - }) : false; - // const areAllPromises = Object.values(result).every(item => DataTypeUtil.isPromise(item)); + }) : false; // const areAllPromises = Object.values(result).every(item => DataTypeUtil.isPromise(item)); if (areAllPromises) { // Promise.all - This method takes an array of promises and returns a new promise that resolves to an array of the resolved values when all of the input promises have resolved. @@ -1877,18 +2083,23 @@ function track(vwoInstance, campaignKey, userId, goalIdentifier) { return Promise.all(Object.values(result)).then(function (dataArray) { dataArray.forEach(function (data, index) { var campaignKey = Object.keys(result)[index]; + var ans = _validateAndReturnTrackValue(vwoInstance, config, settingsFile, revenuePropList, userId, goalIdentifier, revenueValue, metricMap, events, areGlobalGoals, responseCallback, eventProperties, visitorUserAgent, userIpAddress, _defineProperty({}, campaignKey, data)); + result[campaignKey] = ans[campaignKey]; }); return result; }); } + return _validateAndReturnTrackValue(vwoInstance, config, settingsFile, revenuePropList, userId, goalIdentifier, revenueValue, metricMap, events, areGlobalGoals, responseCallback, eventProperties, visitorUserAgent, userIpAddress, result); } + function _validateAndReturnTrackValue(vwoInstance, config, settingsFile, revenuePropList, userId, goalIdentifier, revenueValue, metricMap, events, areGlobalGoals, responseCallback, eventProperties, visitorUserAgent, userIpAddress, result) { if (!Object.keys(result).length) { return null; } + if (true) { if (events && events.length) { for (var k = 0; k < events.length; k++) { @@ -1898,28 +2109,31 @@ function _validateAndReturnTrackValue(vwoInstance, config, settingsFile, revenue } } } else {} + if (settingsFile.isEventArchEnabled && Object.keys(metricMap).length > 0) { var properties = ImpressionUtil.getEventsBaseProperties(settingsFile, goalIdentifier, {}, visitorUserAgent, userIpAddress); var payload = ImpressionUtil.getTrackGoalPayloadData(settingsFile, userId, goalIdentifier, metricMap, revenueValue, revenuePropList, eventProperties); vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload: payload, responseCallback: responseCallback - }); + }); // save to user storage if not event arch - // save to user storage if not event arch if (!settingsFile.isEventArchEnabled) { Object.keys(metricMap).forEach(function (key) { DecisionUtil._saveUserData(config, metricMap[key].campaign, metricMap[key].variationName, metricMap[key].userId, metricMap[key].metaData, goalIdentifier); }); } } + if (config.isDevelopmentMode) { return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode }); } + return result; } + function trackCampaignGoal(vwoInstance, campaign, campaignKey, userId, settingsFile, goalIdentifier, revenueValue, config, customVariables, variationTargetingVariables, userStorageData, goalTypeToTrack, shouldTrackReturningUser, metaData, metricMap, revenuePropList, events, areGlobalGoals, eventProperties, visitorUserAgent, userIpAddress) { // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation if (!campaign || campaign.status !== Constants.STATUS_RUNNING) { @@ -1930,6 +2144,7 @@ function trackCampaignGoal(vwoInstance, campaign, campaignKey, userId, settingsF })); return false; } + if (CampaignUtil.isFeatureRolloutCampaign(campaign)) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, { file: file, @@ -1940,10 +2155,11 @@ function trackCampaignGoal(vwoInstance, campaign, campaignKey, userId, settingsF })); return false; } - var campaignId = campaign.id; - // Get the campaign goal settings based on goalIdentifier + var campaignId = campaign.id; // Get the campaign goal settings based on goalIdentifier + var goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier); + if (!goal) { // If no goal is found, something is wrong with the goalIdentifier vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_GOAL_NOT_FOUND, { @@ -1988,31 +2204,38 @@ function trackCampaignGoal(vwoInstance, campaign, campaignKey, userId, settingsF return false; } } + if (goal.type === GoalTypeEnum.REVENUE && goal.revenueProp) { revenuePropList.add(goal.revenueProp); } + var result = DecisionUtil.getVariation(config, settingsFile, campaign, campaignKey, userId, customVariables, variationTargetingVariables, userStorageData, metaData, false, true, goalIdentifier, api); + if (DataTypeUtil.isPromise(result)) { return result.then(function (data) { if (!Object.keys(data).length) { return null; } + return _validateAndReturnTrackEvent(vwoInstance, campaignKey, campaignId, userId, config, goal, shouldTrackReturningUser, settingsFile, campaign, goalIdentifier, revenueValue, metaData, metricMap, events, areGlobalGoals, eventProperties, visitorUserAgent, userIpAddress, data); }); } + return _validateAndReturnTrackEvent(vwoInstance, campaignKey, campaignId, userId, config, goal, shouldTrackReturningUser, settingsFile, campaign, goalIdentifier, revenueValue, metaData, metricMap, events, areGlobalGoals, eventProperties, visitorUserAgent, userIpAddress, result); } + function _validateAndReturnTrackEvent(vwoInstance, campaignKey, campaignId, userId, config, goal, shouldTrackReturningUser, settingsFile, campaign, goalIdentifier, revenueValue, metaData, metricMap, events, areGlobalGoals, eventProperties, visitorUserAgent, userIpAddress, result) { var variationId = result.variationId, - variationName = result.variationName, - storedGoalIdentifier = result.storedGoalIdentifier; // Is User is a part of Campaign and has been decided to be a part of particular variation + variationName = result.variationName, + storedGoalIdentifier = result.storedGoalIdentifier; // Is User is a part of Campaign and has been decided to be a part of particular variation + if (variationName) { if (storedGoalIdentifier) { var identifiers = storedGoalIdentifier.split(GOAL_IDENTIFIER_SEPERATOR); + if (!identifiers.includes(goalIdentifier)) { - storedGoalIdentifier += GOAL_IDENTIFIER_SEPERATOR + goalIdentifier; + storedGoalIdentifier += GOAL_IDENTIFIER_SEPERATOR + goalIdentifier; // save to user storage if not event arch - // save to user storage if not event arch if (!settingsFile.isEventArchEnabled) { DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, storedGoalIdentifier); } @@ -2025,8 +2248,9 @@ function _validateAndReturnTrackEvent(vwoInstance, campaignKey, campaignId, user })); return false; } - } - // If goal is found, send an impression to VWO server for report stats + } // If goal is found, send an impression to VWO server for report stats + + if (config.batchEvents) { var properties = ImpressionUtil.buildBatchEventForTrackingGoal(settingsFile, campaignId, variationId, userId, goal, revenueValue, eventProperties, visitorUserAgent, userIpAddress); vwoInstance.batchEventsQueue.enqueue(properties); @@ -2042,22 +2266,27 @@ function _validateAndReturnTrackEvent(vwoInstance, campaignKey, campaignId, user return true; } else { var _properties = {}; + if (areGlobalGoals) { _properties = ImpressionUtil.buildBatchEventForTrackingGoal(settingsFile, campaignId, variationId, userId, goal, revenueValue, visitorUserAgent, userIpAddress); } else { _properties = ImpressionUtil.buildEventForTrackingGoal(settingsFile, campaignId, variationId, userId, goal, revenueValue, visitorUserAgent, userIpAddress); } + events.push(_properties); - } + } // save to user storage if not event arch + - // save to user storage if not event arch if (!settingsFile.isEventArchEnabled) { DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, goalIdentifier); } + return true; } + return false; } + function logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey) { vwoInstance.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL, { file: file, @@ -2066,6 +2295,7 @@ function logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, c campaignKey: campaignKey })); } + module.exports = track; /***/ }), @@ -2092,18 +2322,18 @@ module.exports = track; * See the License for the specific language governing permissions and * limitations under the License. */ -/* global SDK_NAME, SDK_VERSION */ - -var packageFile = {}; -// For javascript-sdk, to keep the build size low +/* global SDK_NAME, SDK_VERSION */ +var packageFile = {}; // For javascript-sdk, to keep the build size low // avoid adding the whole package file in the file + if (true) { packageFile = { name: "vwo-javascript-sdk", - version: "1.69.0" + version: "1.70.0" }; } else {} + module.exports = { SDK_NAME: packageFile.name, SDK_VERSION: packageFile.version, @@ -2115,7 +2345,6 @@ module.exports = { DEFAULT_EVENTS_PER_REQUEST: 100, DEFAULT_REQUEST_TIME_INTERVAL: 600, // 10 * 60(secs) = 600 secs i.e. 10 minutes - STATUS_RUNNING: 'RUNNING', SEED_URL: 'https://vwo.com', HTTP_PROTOCOL: 'http://', @@ -2148,17 +2377,23 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - var Hasher = __webpack_require__(/*! murmurhash */ "./node_modules/murmurhash/murmurhash.js"); + var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var ValidateUtil = __webpack_require__(/*! ../utils/ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var VWOFeatureFlags = __webpack_require__(/*! ../utils/VWOFeatureFlags */ "./lib/utils/VWOFeatureFlags.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var CampaignUtil = __webpack_require__(/*! ../utils/CampaignUtil */ "./lib/utils/CampaignUtil.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var logger = logging.getLogger(); var file = FileNameEnum.BucketingService; var BucketingService = { @@ -2179,6 +2414,7 @@ var BucketingService = { var value = Math.floor(multipliedValue); return value; }, + /** * Returns the Variation by checking the Start and End Bucket Allocations of each Variation * @@ -2190,12 +2426,15 @@ var BucketingService = { _getVariation: function _getVariation(variations, bucketValue) { for (var i = 0; i < Object.keys(variations).length; i++) { var variation = variations[i]; + if (bucketValue >= variation.startVariationAllocation && bucketValue <= variation.endVariationAllocation) { return variation; } } + return null; }, + /** * Validates the User ID and generates Bucket Value of the User by hashing the userId by murmurHash and scaling it down. * @@ -2205,7 +2444,9 @@ var BucketingService = { */ _getBucketValueForUser: function _getBucketValueForUser(seed, userId, disableLog) { var hashValue = Hasher.v3(seed, Constants.SEED_VALUE); + var bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_PERCENT); + logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_HASH_BUCKET_VALUE, { file: file, hashValue: hashValue, @@ -2214,6 +2455,7 @@ var BucketingService = { }), disableLog); return bucketValue; }, + /** * Calculate if this user should become part of the campaign or not * @@ -2224,11 +2466,15 @@ var BucketingService = { */ isUserPartOfCampaign: function isUserPartOfCampaign(userId, campaign) { var disableLog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (!campaign) { return false; } + var trafficAllocation = campaign.percentTraffic; + var valueAssignedToUser = BucketingService._getBucketValueForUser(CampaignUtil.getBucketingSeed(userId, campaign), userId, disableLog); + var isUserPart = valueAssignedToUser !== 0 && valueAssignedToUser <= trafficAllocation; logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_CAMPAIGN_ELIGIBILITY, { file: file, @@ -2238,6 +2484,7 @@ var BucketingService = { }), disableLog); return isUserPart; }, + /** * Validates the User ID and generates Variation into which the User is bucketed in. * @@ -2251,12 +2498,15 @@ var BucketingService = { var isNBv2 = VWOFeatureFlags.getAll().isNBv2; var multiplier; var seed; + if (!ValidateUtil.isValidValue(userId)) { return null; } + if (!campaign) { return null; } + if ((!isNB && !isNBv2 || isNB && campaign.isOB) && campaign.percentTraffic) { // Old bucketing logic if feature flag is OFF or // Feature flag is ON and campaign is old i.e. created before feature flag was turned ON @@ -2271,8 +2521,11 @@ var BucketingService = { multiplier = 1; seed = CampaignUtil.getBucketingSeed(accountId + '_' + userId, campaign); } + var hashValue = BucketingService._generateHashValue(seed); + var bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier); + logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_CAMPAIGN_BUCKET_VALUES, { file: file, userId: userId, @@ -2285,7 +2538,9 @@ var BucketingService = { }, calculateBucketValue: function calculateBucketValue(seed) { var multiplier = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + var hashValue = BucketingService._generateHashValue(seed); + return BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier); }, _generateHashValue: function _generateHashValue(userId) { @@ -2318,26 +2573,31 @@ module.exports = BucketingService; * See the License for the specific language governing permissions and * limitations under the License. */ - var SegmentEnum = __webpack_require__(/*! ../enums/segment */ "./lib/enums/segment/index.js"); + var _require = __webpack_require__(/*! ../utils/ObjectUtil */ "./lib/utils/ObjectUtil.js"), - getKeyValue = _require.getKeyValue; + getKeyValue = _require.getKeyValue; + var _require2 = __webpack_require__(/*! ../utils/SegmentUtil */ "./lib/utils/SegmentUtil.js"), - operandCustomVariablesParser = _require2.operandCustomVariablesParser, - operandUserParser = _require2.operandUserParser; + operandCustomVariablesParser = _require2.operandCustomVariablesParser, + operandUserParser = _require2.operandUserParser; + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var _SegmentEnum$SegmentO = SegmentEnum.SegmentOperatorTypes, - AND = _SegmentEnum$SegmentO.AND, - OR = _SegmentEnum$SegmentO.OR, - NOT = _SegmentEnum$SegmentO.NOT; + AND = _SegmentEnum$SegmentO.AND, + OR = _SegmentEnum$SegmentO.OR, + NOT = _SegmentEnum$SegmentO.NOT; var _SegmentEnum$SegmentO2 = SegmentEnum.SegmentOperandTypes, - CUSTOM_VARIABLE = _SegmentEnum$SegmentO2.CUSTOM_VARIABLE, - USER = _SegmentEnum$SegmentO2.USER; + CUSTOM_VARIABLE = _SegmentEnum$SegmentO2.CUSTOM_VARIABLE, + USER = _SegmentEnum$SegmentO2.USER; var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.SegmentEvaluator; var logger = logging.getLogger(); module.exports = SegmentEvaluator; @@ -2349,27 +2609,34 @@ module.exports = SegmentEvaluator; * * @return {Boolean} true if user is to be made part of campaign, else false */ + function evaluator(dsl, customVariables) { var _getKeyValue = getKeyValue(dsl), - key = _getKeyValue.key, - value = _getKeyValue.value; + key = _getKeyValue.key, + value = _getKeyValue.value; + var operator = key; var subDsl = value; + if (operator === NOT) { return !evaluator(subDsl, customVariables); } else if (operator === AND) { var list = []; + for (var i = 0; i < subDsl.length; i++) { list.push(evaluator(subDsl[i], customVariables)); } + return list.every(function (val) { return val; }); } else if (operator === OR) { var _list = []; + for (var _i = 0; _i < subDsl.length; _i++) { _list.push(evaluator(subDsl[_i], customVariables)); } + return _list.some(function (val) { return val; }); @@ -2379,12 +2646,14 @@ function evaluator(dsl, customVariables) { return operandUserParser(subDsl, customVariables); } } + function SegmentEvaluator(dsl) { var customVariables = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var campaignKey = arguments.length > 2 ? arguments[2] : undefined; var userId = arguments.length > 3 ? arguments[3] : undefined; var variation = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; var disableLogs = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; + try { if (DataTypeUtil.isObject(dsl) && !Object.keys(dsl).length) { logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, { @@ -2394,9 +2663,11 @@ function SegmentEvaluator(dsl) { }), disableLogs); return true; } + if (DataTypeUtil.isObject(dsl) && Object.keys(dsl).length) { return evaluator(dsl, customVariables); } + return true; } catch (err) { logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_ERROR, { @@ -2435,14 +2706,17 @@ function SegmentEvaluator(dsl) { * See the License for the specific language governing permissions and * limitations under the License. */ - var ValidateUtil = __webpack_require__(/*! ../utils/ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var Bucketer = __webpack_require__(/*! ./BucketingService */ "./lib/core/BucketingService.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var logger = logging.getLogger(); var file = FileNameEnum.VariationDecider; var VariationDecider = { @@ -2460,6 +2734,7 @@ var VariationDecider = { variationId: null, variationName: null }; + if (!ValidateUtil.isValidValue(userId)) { logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_ID_INVALID, { file: file, @@ -2467,6 +2742,7 @@ var VariationDecider = { })); return response; } + if (Bucketer.isUserPartOfCampaign(userId, campaign)) { var variation = VariationDecider.getVariationOfCampaignForUser(userId, campaign, accountId) || {}; response.variation = variation; @@ -2479,8 +2755,10 @@ var VariationDecider = { campaignKey: campaign.key })); } + return response; }, + /** * Assigns random variation ID to a particular user depending on the PercentTraffic. * Makes user a part of campaign if user's included in Traffic. @@ -2494,7 +2772,9 @@ var VariationDecider = { if (!campaign) { return null; } + var variation = Bucketer.bucketUserToVariation(userId, campaign, accountId); + if (variation && variation.name) { logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, { file: file, @@ -2508,6 +2788,7 @@ var VariationDecider = { id: variation.id }; } + logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, { file: file, userId: userId, @@ -2543,7 +2824,6 @@ module.exports = VariationDecider; * See the License for the specific language governing permissions and * limitations under the License. */ - var AnsiColorEnum = { BOLD: '\x1b[1m', CYAN: '\x1b[36m', @@ -2580,7 +2860,6 @@ module.exports = AnsiColorEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - var ApiEnum = { LAUNCH: 'launch', ACTIVATE: 'activate', @@ -2616,7 +2895,6 @@ module.exports = ApiEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - var CampaignTypeEnum = { FEATURE_TEST: 'FEATURE_TEST', FEATURE_ROLLOUT: 'FEATURE_ROLLOUT', @@ -2648,7 +2926,6 @@ module.exports = CampaignTypeEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - var DataTypeEnum = { NUMBER: 'number', STRING: 'string', @@ -2682,7 +2959,6 @@ module.exports = DataTypeEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - var EventEnum = { VWO_VARIATION_SHOWN: 'vwo_variationShown', VWO_SYNC_VISITOR_PROP: 'vwo_syncVisitorProp' @@ -2713,7 +2989,6 @@ module.exports = EventEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - var FeatureVariableTypeEnum = { BOOLEAN: 'boolean', DOUBLE: 'double', @@ -2747,7 +3022,6 @@ module.exports = FeatureVariableTypeEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - var LIB_PATH = 'lib'; var CORE_PATH = 'lib/core'; var UTIL_PATH = 'lib/util'; @@ -2810,7 +3084,6 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - var GoalTypeEnum = { REVENUE: 'REVENUE_TRACKING', CUSTOM: 'CUSTOM_GOAL', @@ -2842,7 +3115,6 @@ module.exports = GoalTypeEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - var HeadersEnum = { USER_AGENT: 'X-Device-User-Agent', IP: 'VWO-X-Forwarded-For' @@ -2873,7 +3145,6 @@ module.exports = HeadersEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - var HooksEnum = { DECISION_TYPES: { CAMPAIGN_DECISION: 'CAMPAIGN_DECISION' @@ -2891,10 +3162,9 @@ module.exports = HooksEnum; /***/ (function(module, exports, __webpack_require__) { var _LogLevelColorInfoEnu, _LogLevelInfoEnum; -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -2910,8 +3180,8 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * See the License for the specific language governing permissions and * limitations under the License. */ - var AnsiColorEnum = __webpack_require__(/*! ./AnsiColorEnum */ "./lib/enums/AnsiColorEnum.js"); + var LogNumberLevel = { _0: 'NOTSET', _1: 'DEBUG', @@ -2959,7 +3229,6 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - module.exports = { PASSED: 'passed', FAILED: 'failed' @@ -2989,7 +3258,6 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - var UrlEnum = { BASE_URL: 'dev.visualwebsiteoptimizer.com', SETTINGS_URL: '/server-side/settings', @@ -3026,7 +3294,6 @@ module.exports = UrlEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - module.exports = { CUSTOM_VARIABLE: 'custom_variable', USER: 'user' @@ -3056,7 +3323,6 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - module.exports = { LOWER: /^lower/, LOWER_MATCH: /^lower\((.*)\)/, @@ -3096,7 +3362,6 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - module.exports = { LOWER_VALUE: 1, STARTING_ENDING_STAR_VALUE: 2, @@ -3134,7 +3399,6 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - module.exports = { AND: 'and', NOT: 'not', @@ -3165,11 +3429,14 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - var SegmentOperandTypes = __webpack_require__(/*! ./SegmentOperandTypesEnum */ "./lib/enums/segment/SegmentOperandTypesEnum.js"); + var SegmentOperatorTypes = __webpack_require__(/*! ./SegmentOperatorTypesEnum */ "./lib/enums/segment/SegmentOperatorTypesEnum.js"); + var SegmentOperandValueTypeRegexes = __webpack_require__(/*! ./SegmentOperandValueTypeRegexesEnum */ "./lib/enums/segment/SegmentOperandValueTypeRegexesEnum.js"); + var SegmentOperandValues = __webpack_require__(/*! ./SegmentOperandValuesEnum */ "./lib/enums/segment/SegmentOperandValuesEnum.js"); + var SegmentEnum = { SegmentOperandTypes: SegmentOperandTypes, SegmentOperatorTypes: SegmentOperatorTypes, @@ -3202,30 +3469,39 @@ module.exports = SegmentEnum; * See the License for the specific language governing permissions and * limitations under the License. */ - var VWO = __webpack_require__(/*! ./VWO */ "./lib/VWO.js"); + var DataTypeUtil = __webpack_require__(/*! ./utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var FunctionUtil = __webpack_require__(/*! ./utils/FunctionUtil */ "./lib/utils/FunctionUtil.js"); + var _require = __webpack_require__(/*! ./utils/ObjectUtil */ "./lib/utils/ObjectUtil.js"), - objectValues = _require.objectValues; + objectValues = _require.objectValues; + var SettingsFileUtil = __webpack_require__(/*! ./utils/SettingsFileUtil */ "./lib/utils/SettingsFileUtil.js"); + var GoalTypeEnum = __webpack_require__(/*! ./enums/GoalTypeEnum */ "./lib/enums/GoalTypeEnum.js"); + var _require2 = __webpack_require__(/*! ./constants */ "./lib/constants/index.js"), - MAX_EVENTS_PER_REQUEST = _require2.MAX_EVENTS_PER_REQUEST; + MAX_EVENTS_PER_REQUEST = _require2.MAX_EVENTS_PER_REQUEST; + var logging = __webpack_require__(/*! ./services/logging */ "./lib/services/logging/index.js"); + var ApiEnum = __webpack_require__(/*! ./enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var FileNameEnum = __webpack_require__(/*! ./enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var file = FileNameEnum.INDEX; var setLogHandler = logging.setLogHandler, - setLogLevel = logging.setLogLevel, - LogLevelEnum = logging.LogLevelEnum, - LogNumberLevel = logging.LogNumberLevel, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; -var logger = logging.getLogger(); + setLogLevel = logging.setLogLevel, + LogLevelEnum = logging.LogLevelEnum, + LogNumberLevel = logging.LogNumberLevel, + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; +var logger = logging.getLogger(); // By default, all ERRORS should be logged -// By default, all ERRORS should be logged logging.setLogLevel(LogLevelEnum.ERROR); + function logError() { var parameter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; @@ -3237,6 +3513,7 @@ function logError() { }); throw new Error(logger.log(LogLevelEnum.ERROR, log)); } + function logInfo() { var parameter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; @@ -3247,6 +3524,7 @@ function logInfo() { }); console.info("VWO-SDK - [INFO]: ".concat(FunctionUtil.getCurrentTime(), " ").concat(log)); } + module.exports = { logging: logging, setLogger: setLogHandler, @@ -3254,6 +3532,7 @@ module.exports = { getSettingsFile: SettingsFileUtil.get, GoalTypeEnum: GoalTypeEnum, LogLevelEnum: LogLevelEnum, + /** * Initializes the SDK and parses the settingsfile * @@ -3261,73 +3540,87 @@ module.exports = { */ launch: function launch(sdkConfig) { var config = {}; + try { // validating config schema FunctionUtil.cloneObject(sdkConfig); + if (!DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser) && !DataTypeUtil.isBoolean(sdkConfig.shouldTrackReturningUser)) { logError('shouldTrackReturningUser', 'boolean'); } else if (!DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser)) { logInfo('shouldTrackReturningUser', 'boolean'); } + if (!DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode) && !DataTypeUtil.isBoolean(sdkConfig.isDevelopmentMode)) { logError('isDevelopmentMode', 'boolean'); } else if (!DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode)) { logInfo('isDevelopmentMode', 'boolean'); } + if (sdkConfig.goalTypeToTrack && !objectValues(GoalTypeEnum).includes(sdkConfig.goalTypeToTrack)) { logError('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)'); } else if (sdkConfig.goalTypeToTrack) { logInfo('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)'); } + if (sdkConfig.logging && sdkConfig.logging.level && !objectValues(LogLevelEnum).includes(sdkConfig.logging.level)) { logError('logLevel', 'number(1,2,3,4)'); } else if (sdkConfig.logging && sdkConfig.logging.level) { logInfo('logLevel', 'number(1,2,3,4)'); } + if (sdkConfig.pollingInterval && !DataTypeUtil.isNumber(sdkConfig.pollingInterval)) { logError('pollingInterval', 'number(in miliiseconds)'); } else if (sdkConfig.pollingInterval) { logInfo('pollingInterval', 'number(in miliiseconds)'); } + if (sdkConfig.pollingInterval && DataTypeUtil.isUndefined(sdkConfig.sdkKey)) { logError('sdkKey(required for polling)', 'string'); } + if (sdkConfig.pollingInterval && !DataTypeUtil.isString(sdkConfig.sdkKey)) { logError('sdkKey', 'string'); } + if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents) && !DataTypeUtil.isObject(sdkConfig.batchEvents)) { logError('batchEvents', 'object'); } else if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents)) { logInfo('batchEvents', 'object'); } + if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor) && !DataTypeUtil.isObject(sdkConfig.returnPromiseFor)) { logError('returnPromiseFor', 'object'); } else if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor)) { logInfo('returnPromiseFor', 'object'); } + if (!DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig) && !DataTypeUtil.isObject(sdkConfig.asyncStorageConfig)) { logError('asyncStorageConfig', 'object'); } else if (!DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig)) { logInfo('asyncStorageConfig', 'object'); } + if (!DataTypeUtil.isUndefined(sdkConfig.integrations) && !DataTypeUtil.isObject(sdkConfig.integrations)) { logError('integrations', 'object'); } else if (!DataTypeUtil.isUndefined(sdkConfig.integrations)) { logInfo('integrations', 'object'); } + if (!DataTypeUtil.isUndefined(sdkConfig.userStorageService) && !DataTypeUtil.isObject(sdkConfig.userStorageService)) { logError('userStorageService', 'object'); } else if (!DataTypeUtil.isUndefined(sdkConfig.userStorageService)) { logInfo('userStorageService', 'object'); - } + } // For JavaScript SDK, batching is not required and is not available + - // For JavaScript SDK, batching is not required and is not available if (DataTypeUtil.isObject(sdkConfig.batchEvents) && "undefined" === 'undefined') { sdkConfig.batchEvents = null; - } + } // For Node.js SDK + - // For Node.js SDK if (false) {} + config = sdkConfig; } catch (err) { logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CONFIG_CORRUPTED, { @@ -3335,18 +3628,19 @@ module.exports = { api: ApiEnum.LAUNCH })); config = {}; - } + } // If DEV mode, set colorful logs to true + - // If DEV mode, set colorful logs to true if (config.isDevelopmentMode) { logging.setLogColorMode(true); - } + } // If logging is enabled, use the logger and logLevel defined by the client + - // If logging is enabled, use the logger and logLevel defined by the client if (config.logging && DataTypeUtil.isObject(config.logging)) { if (config.logging.haveColoredLogs !== undefined) { logging.setLogColorMode(config.logging.haveColoredLogs); } + if (config.logging.logger && DataTypeUtil.isObject(config.logging.logger) && DataTypeUtil.isFunction(config.logging.logger.log)) { logging.setLogHandler(config.logging.logger); logging.setLogLevel(logging.LogLevelEnum.NOTSET); @@ -3356,6 +3650,7 @@ module.exports = { } else if (config.logging.logger) { logError('logging.logger', 'object'); } + if (config.logging.level !== undefined) { logging.setLogLevel(config.logging.level); logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_LOG_LEVEL_SET, { @@ -3363,19 +3658,18 @@ module.exports = { level: LogNumberLevel['_' + config.logging.level] })); } - } + } // DEBUG log for knowing whether it's DEV mode + - // DEBUG log for knowing whether it's DEV mode if (config.isDevelopmentMode) { logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, { file: file })); - } + } // Set logger on config Obkect, to be required later - // Set logger on config Obkect, to be required later - config.logger = config.logging && config.logging.logger || logger; - // Create an instance of VWO class which exposes API methods + config.logger = config.logging && config.logging.logger || logger; // Create an instance of VWO class which exposes API methods + return new VWO(config); } }; @@ -3389,12 +3683,14 @@ module.exports = { /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) { n[e] = r[e]; } return n; } -function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0) { ; } } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } -function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } + +function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -3411,16 +3707,17 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } * limitations under the License. */ var _require = __webpack_require__(/*! superstruct */ "./node_modules/superstruct/lib/index.es.js"), - validate = _require.validate, - number = _require.number, - string = _require.string, - _boolean = _require["boolean"], - array = _require.array, - object = _require.object, - optional = _require.optional, - union = _require.union, - type = _require.type, - record = _require.record; + validate = _require.validate, + number = _require.number, + string = _require.string, + _boolean = _require["boolean"], + array = _require.array, + object = _require.object, + optional = _require.optional, + union = _require.union, + type = _require.type, + record = _require.record; + var campaignGoalSchema = type({ id: union([number(), string()]), identifier: string(), @@ -3478,12 +3775,15 @@ var settingsFileSchema = type({ collectionPrefix: optional(string()), groups: optional(union([object(), record(string(), groupSchema)])) }); + var validateSettingsFile = function validateSettingsFile(settings) { var _validate = validate(settings, settingsFileSchema), - _validate2 = _slicedToArray(_validate, 1), - error = _validate2[0]; + _validate2 = _slicedToArray(_validate, 1), + error = _validate2[0]; + return !error; }; + module.exports = validateSettingsFile; /***/ }), @@ -3495,12 +3795,12 @@ module.exports = validateSettingsFile; /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -3516,44 +3816,58 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * See the License for the specific language governing permissions and * limitations under the License. */ - var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var EventDispatcher = __webpack_require__(/*! ../utils/EventDispatcherUtil */ "./lib/utils/EventDispatcherUtil.js"); + var logging = __webpack_require__(/*! ./logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var HeadersEnum = __webpack_require__(/*! ../enums/HeadersEnum */ "./lib/enums/HeadersEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var logger = logging.getLogger(); var file = FileNameEnum.EventQueue; -var EventQueue = /*#__PURE__*/function () { + +var EventQueue = +/*#__PURE__*/ +function () { function EventQueue() { _classCallCheck(this, EventQueue); + this.running = false; this.queue = []; } + _createClass(EventQueue, [{ key: "process", value: function process(config, properties, vwoInstance) { var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}, - payload = _ref.payload, - responseCallback = _ref.responseCallback; + payload = _ref.payload, + responseCallback = _ref.responseCallback; + var customHeaders = {}; + if (properties && properties.visitor_ua) { customHeaders[HeadersEnum.USER_AGENT] = encodeURIComponent(properties.visitor_ua); properties.visitor_ua = customHeaders[HeadersEnum.USER_AGENT]; } + if (properties && properties.visitor_ip) { customHeaders[HeadersEnum.IP] = encodeURIComponent(properties.visitor_ip); properties.visitor_ip = customHeaders[HeadersEnum.IP]; } + if (config && config.isDevelopmentMode) { logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, { file: file })); return; } + this.enqueue(properties, vwoInstance, { payload: payload, responseCallback: responseCallback @@ -3563,7 +3877,7 @@ var EventQueue = /*#__PURE__*/function () { key: "enqueue", value: function enqueue(properties, vwoInstance, _ref2) { var payload = _ref2.payload, - responseCallback = _ref2.responseCallback; + responseCallback = _ref2.responseCallback; var customHeaders = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; this.queue.push({ eventName: properties.eventName, @@ -3586,22 +3900,25 @@ var EventQueue = /*#__PURE__*/function () { event: 'VWO_MASKED_PAYLOAD' })); vwoInstance.eventQueue.executeNext(properties); + if (!this.running) { // if nothing is running, then start the engines! this.executeNext(properties); } + return this; } }, { key: "executeNext", value: function executeNext(properties) { - this.running = false; + this.running = false; // get the first element off the queue - // get the first element off the queue if (this.queue && this.queue.length) { var event = this.queue.shift(); + if (event) { this.running = true; + if (event.callback && DataTypeUtil.isFunction(event.callback)) { event.callback(properties); } @@ -3609,8 +3926,10 @@ var EventQueue = /*#__PURE__*/function () { } } }]); + return EventQueue; }(); + module.exports = EventQueue; /***/ }), @@ -3637,13 +3956,13 @@ module.exports = EventQueue; * See the License for the specific language governing permissions and * limitations under the License. */ - var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); - /** * Hooks Manager is responsible for triggering callbacks useful to the end-user based on certain lifecycle events. * Possible use with integrations when the user intends to send an event when a visitor is part of the experiment. */ + + var HooksManager = { /** * Initializes with configuration from VWO Object. @@ -3653,6 +3972,7 @@ var HooksManager = { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.callback = config.integrations && config.integrations.callback; }, + /** * Executes the callback * @param {Object} properties Properties from the callback @@ -3674,12 +3994,12 @@ module.exports = HooksManager; /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -3695,28 +4015,38 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * See the License for the specific language governing permissions and * limitations under the License. */ - var CampaignUtil = __webpack_require__(/*! ../utils/CampaignUtil */ "./lib/utils/CampaignUtil.js"); + var FunctionUtil = __webpack_require__(/*! ../utils/FunctionUtil */ "./lib/utils/FunctionUtil.js"); + var SettingsFileUtil = __webpack_require__(/*! ../utils/SettingsFileUtil */ "./lib/utils/SettingsFileUtil.js"); + var logging = __webpack_require__(/*! ./logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var validateSettingsFile = __webpack_require__(/*! ../schemas/SettingsFileSchema */ "./lib/schemas/SettingsFileSchema.js"); + var _require = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"), - isObject = _require.isObject; + isObject = _require.isObject; + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.SettingsFileManager; -var SettingsFileManager = /*#__PURE__*/function () { - // PRIVATE METHODS +var SettingsFileManager = +/*#__PURE__*/ +function () { + // PRIVATE METHODS function SettingsFileManager(config) { _classCallCheck(this, SettingsFileManager); + if (config) { if (config.settingsFile && isObject(config.settingsFile.campaigns) || config.settingsFile && !config.settingsFile.campaigns) { config.settingsFile.campaigns = []; } + this._configObj = config; this._clonedSettingsFile = config.settingsFile ? FunctionUtil.cloneObject(config.settingsFile) : null; } else { @@ -3724,33 +4054,41 @@ var SettingsFileManager = /*#__PURE__*/function () { this._clonedSettingsFile = null; } } + _createClass(SettingsFileManager, [{ key: "_setVariationBucketing", value: function _setVariationBucketing(campaign) { CampaignUtil.setVariationAllocation(campaign); } // PUBLIC METHODS + }, { key: "isSettingsFileValid", value: function isSettingsFileValid() { if (!this._configObj || !this._clonedSettingsFile) { return false; } + var isValidSettingsFile = validateSettingsFile(this._clonedSettingsFile); + if (!isValidSettingsFile) { this._configObj.logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_CORRUPTED, { file: file })); + return false; } + return true; } }, { key: "checkAndPoll", value: function checkAndPoll() { var _this = this; + if (!this._configObj.pollingInterval || !this._configObj.sdkKey) { return; } + var lastSettingsFile = JSON.stringify(this._clonedSettingsFile); setInterval(function () { SettingsFileUtil.get(_this._clonedSettingsFile.accountId, _this._configObj.sdkKey).then(function (latestSettingsFile) { @@ -3758,10 +4096,14 @@ var SettingsFileManager = /*#__PURE__*/function () { file: file, accountId: _this._clonedSettingsFile.accountId })); + var stringifiedLatestSettingsFile = JSON.stringify(latestSettingsFile); + if (stringifiedLatestSettingsFile !== lastSettingsFile) { lastSettingsFile = stringifiedLatestSettingsFile; + _this.updateSettingsFile(latestSettingsFile); + _this._configObj.logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SETTINGS_FILE_UPDATED, { file: file, accountId: _this._clonedSettingsFile.accountId @@ -3779,6 +4121,7 @@ var SettingsFileManager = /*#__PURE__*/function () { })); }); }, this._configObj.pollingInterval); + this._configObj.logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.POLLING_SETTINGS_FILE_REGISTERED, { file: file, pollingInterval: this._configObj.pollingInterval @@ -3788,14 +4131,18 @@ var SettingsFileManager = /*#__PURE__*/function () { key: "processSettingsFile", value: function processSettingsFile() { var settingsFile = this._clonedSettingsFile; + for (var i = 0; i < settingsFile.campaigns.length; i++) { var campaign = settingsFile.campaigns[i]; + this._setVariationBucketing(campaign); } + this._configObj.logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SETTINGS_FILE_PROCESSED, { file: file, accountId: this._clonedSettingsFile.accountId })); + return settingsFile; } /** @@ -3807,10 +4154,12 @@ var SettingsFileManager = /*#__PURE__*/function () { * * @return {Promise} */ + }, { key: "getAndUpdateSettingsFile", value: function getAndUpdateSettingsFile() { var _this2 = this; + var accountId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._clonedSettingsFile.accountId; var sdkKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._clonedSettingsFile.sdkKey; return new Promise(function (resolve, _reject) { @@ -3818,6 +4167,7 @@ var SettingsFileManager = /*#__PURE__*/function () { isViaWebhook: true }).then(function (settings) { _this2.updateSettingsFile(settings); + resolve(settings); })["catch"](function (_err) {}); }); @@ -3826,6 +4176,7 @@ var SettingsFileManager = /*#__PURE__*/function () { * Update the settings-file on the instance so that latest settings could be used from next hit onwards * @param {Object} settings */ + }, { key: "updateSettingsFile", value: function updateSettingsFile(settings) { @@ -3846,11 +4197,14 @@ var SettingsFileManager = /*#__PURE__*/function () { api: api })); } + return this._clonedSettingsFile; } }]); + return SettingsFileManager; }(); + module.exports = SettingsFileManager; /***/ }), @@ -3877,24 +4231,29 @@ module.exports = SettingsFileManager; * See the License for the specific language governing permissions and * limitations under the License. */ - var UrlEnum = __webpack_require__(/*! ../enums/UrlEnum */ "./lib/enums/UrlEnum.js"); + var _require = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"), - isString = _require.isString; + isString = _require.isString; + var UrlService = { init: function init() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - collectionPrefix = _ref.collectionPrefix; + collectionPrefix = _ref.collectionPrefix; + if (collectionPrefix && isString(collectionPrefix)) { UrlService.collectionPrefix = collectionPrefix; } + return UrlService; }, getBaseUrl: function getBaseUrl() { var baseUrl = UrlEnum.BASE_URL; + if (UrlService.collectionPrefix) { return "".concat(baseUrl, "/").concat(UrlService.collectionPrefix); } + return baseUrl; } }; @@ -3909,12 +4268,12 @@ module.exports = UrlService; /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -3931,17 +4290,22 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * limitations under the License. */ var _require = __webpack_require__(/*! ./logging */ "./lib/services/logging/index.js"), - LogManager = _require.LogManager; -var UsageStats = /*#__PURE__*/function () { + LogManager = _require.LogManager; + +var UsageStats = +/*#__PURE__*/ +function () { function UsageStats() { _classCallCheck(this, UsageStats); + this.data = {}; } - /** * Collect the usage stats from the params passed at the time of instantiating VWO and send them to VWO Server * @param {Object} config config passed at the time of instantiation. */ + + _createClass(UsageStats, [{ key: "collectUsageStats", value: function collectUsageStats(config) { @@ -3963,17 +4327,21 @@ var UsageStats = /*#__PURE__*/function () { * Get the collected usage stats. * @returns collected usage stats data */ + }, { key: "getUsageStats", value: function getUsageStats() { if (Object.keys(this.data).length > 0) { this.data['_l'] = 1; } + return this.data; } }]); + return UsageStats; }(); + module.exports = UsageStats; /***/ }), @@ -3985,12 +4353,12 @@ module.exports = UsageStats; /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -4007,30 +4375,39 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * limitations under the License. */ var _require = __webpack_require__(/*! ../../utils/FunctionUtil */ "./lib/utils/FunctionUtil.js"), - getCurrentTime = _require.getCurrentTime; + getCurrentTime = _require.getCurrentTime; + var _require2 = __webpack_require__(/*! ../../enums/LogLevelEnum */ "./lib/enums/LogLevelEnum.js"), - LogLevelEnum = _require2.LogLevelEnum, - LogLevelInfoEnum = _require2.LogLevelInfoEnum, - LogLevelColorInfoEnum = _require2.LogLevelColorInfoEnum; -var ConsoleLogManager = /*#__PURE__*/function () { + LogLevelEnum = _require2.LogLevelEnum, + LogLevelInfoEnum = _require2.LogLevelInfoEnum, + LogLevelColorInfoEnum = _require2.LogLevelColorInfoEnum; + +var ConsoleLogManager = +/*#__PURE__*/ +function () { function ConsoleLogManager() { _classCallCheck(this, ConsoleLogManager); + this.logLevel = LogLevelEnum.NOTSET; this.prefix = "VWO-SDK"; this.isColoredLogEnabled = false; } + _createClass(ConsoleLogManager, [{ key: "log", value: function log(level, message) { if (!this.shouldLog(level)) { return; } + var logMessage; + if (this.isColoredLogEnabled) { logMessage = "".concat(this.prefix, " - ").concat(LogLevelColorInfoEnum[level], " ").concat(getCurrentTime(), " ").concat(message); } else { logMessage = "".concat(this.prefix, " - ").concat(LogLevelInfoEnum[level], " ").concat(getCurrentTime(), " ").concat(message); } + this.consoleLog(level, [logMessage]); } }, { @@ -4054,20 +4431,25 @@ var ConsoleLogManager = /*#__PURE__*/function () { case LogLevelEnum.INFO: console.info.apply(console, logArguments); break; + case LogLevelEnum.WARN: console.warn.apply(console, logArguments); break; + case LogLevelEnum.ERROR: console.error.apply(console, logArguments); break; + default: console.log.apply(console, logArguments); break; } } }]); + return ConsoleLogManager; }(); + module.exports = ConsoleLogManager; /***/ }), @@ -4079,12 +4461,12 @@ module.exports = ConsoleLogManager; /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -4113,7 +4495,6 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * Local Modifications: This library is not used as a dependency. Source code was referenced and is modified as per requirements. * */ - // TODO: change path var LogMessageEnum = { DEBUG_MESSAGES: __webpack_require__(/*! vwo-sdk-log-messages/src/debug-messages.json */ "./node_modules/vwo-sdk-log-messages/src/debug-messages.json"), @@ -4121,35 +4502,47 @@ var LogMessageEnum = { WARNING_MESSAGES: __webpack_require__(/*! vwo-sdk-log-messages/src/warning-messages.json */ "./node_modules/vwo-sdk-log-messages/src/warning-messages.json"), ERROR_MESSAGES: __webpack_require__(/*! vwo-sdk-log-messages/src/error-messages.json */ "./node_modules/vwo-sdk-log-messages/src/error-messages.json") }; + var _require = __webpack_require__(/*! ../../enums/LogLevelEnum */ "./lib/enums/LogLevelEnum.js"), - LogLevelEnum = _require.LogLevelEnum, - LogNumberLevel = _require.LogNumberLevel; + LogLevelEnum = _require.LogLevelEnum, + LogNumberLevel = _require.LogNumberLevel; + var LogMessageUtil = __webpack_require__(/*! ../../utils/LogMessageUtil */ "./lib/utils/LogMessageUtil.js"); + var ConsoleLogManager = __webpack_require__(/*! ./ConsoleLogManager */ "./lib/services/logging/ConsoleLogManager.js"); + var globalLogLevel = LogLevelEnum.NOTSET; var isColoredLogEnabled = false; var globalLogHandler = new ConsoleLogManager(); -var LogManager = /*#__PURE__*/function () { + +var LogManager = +/*#__PURE__*/ +function () { function LogManager(name) { _classCallCheck(this, LogManager); + this.name = name; this.isColoredLogEnabled = isColoredLogEnabled; } + _createClass(LogManager, [{ key: "_customLog", value: function _customLog(level, message) { if (level < globalLogLevel) { return; } + globalLogHandler.log(level, message); } }, { key: "log", value: function log(level, message) { var disableLogs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (disableLogs) { return; } + try { this._customLog(level, message); } catch (err) { @@ -4177,14 +4570,18 @@ var LogManager = /*#__PURE__*/function () { this._customLog(LogLevelEnum.ERROR, message); } }]); + return LogManager; }(); + function getLogger(name) { return new LogManager(name); } + function setLogHandler(logger) { globalLogHandler = logger; } + function setLogLevel(level) { if (level === undefined) { globalLogLevel = LogLevelEnum.ERROR; @@ -4192,16 +4589,20 @@ function setLogLevel(level) { globalLogLevel = level; } } + function getLogLevel() { return globalLogLevel; } + function setLogColorMode(value) { isColoredLogEnabled = value; globalLogHandler.isColoredLogEnabled = isColoredLogEnabled; } + function getLogColorMode() { return isColoredLogEnabled; } + module.exports = { LogLevelEnum: LogLevelEnum, LogNumberLevel: LogNumberLevel, @@ -4241,8 +4642,8 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - var logging = __webpack_require__(/*! ./LoggingManager */ "./lib/services/logging/LoggingManager.js"); + module.exports = logging; /***/ }), @@ -4269,17 +4670,23 @@ module.exports = logging; * See the License for the specific language governing permissions and * limitations under the License. */ - var ValidateUtil = __webpack_require__(/*! ./ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var VWOFeatureFlags = __webpack_require__(/*! ./VWOFeatureFlags */ "./lib/utils/VWOFeatureFlags.js"); + var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var GoalTypeEnum = __webpack_require__(/*! ../enums/GoalTypeEnum */ "./lib/enums/GoalTypeEnum.js"); + var CampaignTypeEnum = __webpack_require__(/*! ../enums/CampaignTypeEnum */ "./lib/enums/CampaignTypeEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var logger = logging.getLogger(); var CampaignUtil = { /** @@ -4293,9 +4700,11 @@ var CampaignUtil = { if (!variationWeight || variationWeight === 0) { return 0; } + var startRange = Math.ceil(variationWeight * 100); return Math.min(startRange, Constants.MAX_TRAFFIC_VALUE); }, + /** * Get the campaign on the basis of campaign id * @@ -4306,14 +4715,17 @@ var CampaignUtil = { */ getCampaignBasedOnId: function getCampaignBasedOnId(settingsFile, campaignId) { var campaign; + for (var i = 0; i < settingsFile.campaigns.length; i++) { if (parseInt(settingsFile.campaigns[i].id, 10) === parseInt(campaignId, 10)) { campaign = settingsFile.campaigns[i]; break; } } + return campaign; }, + /** * It extracts the weights from all the variations inside the campaign and scales them so that the total sum of eligible variations' weights become 100% @@ -4323,6 +4735,7 @@ var CampaignUtil = { var totalWeight = variations.reduce(function (acc, variation) { return acc + variation.weight; }, 0); + if (!totalWeight) { var weight = 100 / variations.length; variations.forEach(function (variation) { @@ -4336,14 +4749,17 @@ var CampaignUtil = { }, getCampaign: function getCampaign(settingsFile, campaignKey) { var campaign; + for (var i = 0; i < settingsFile.campaigns.length; i++) { if (settingsFile.campaigns[i].key === campaignKey) { campaign = settingsFile.campaigns[i]; break; } } + return campaign; }, + /** * Gets campaigns for corresponding campaignKeys * @@ -4356,6 +4772,7 @@ var CampaignUtil = { var campaigns = []; campaignKeys.forEach(function (key) { var campaign = CampaignUtil.getCampaign(settingsFile, key); + if (campaign) { campaigns.push(campaign); } else { @@ -4366,6 +4783,7 @@ var CampaignUtil = { }); return campaigns; }, + /** * Gets campaigns which have the goalIdentifier present * @@ -4379,29 +4797,35 @@ var CampaignUtil = { var campaigns = []; settingsFile.campaigns.forEach(function (campaign) { var goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier); + if (goal && (goalTypeToTrack === GoalTypeEnum.ALL || goal.type === goalTypeToTrack)) { campaigns.push(campaign); } }); + if (!campaigns.length) { logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CAMPAIGN_NOT_FOUND_FOR_GOAL, { file: FileNameEnum.CampaignUtil, goalIdentifier: goalIdentifier })); } + return campaigns; }, getCampaignStatus: function getCampaignStatus(settingsFile, campaignKey) { var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); + if (!campaign || !campaign.status) { // log error return ''; } + return campaign.status.toLowerCase(); }, isCampaignRunning: function isCampaignRunning(settingsFile, campaignKey) { return CampaignUtil.getCampaignStatus(settingsFile, campaignKey) === 'running'; }, + /** * Validates the campaign * @@ -4412,6 +4836,7 @@ var CampaignUtil = { validateCampaign: function validateCampaign(campaign) { return ValidateUtil.isValidValue(campaign) && campaign.variations && Object.keys(campaign.variations).length > 0; }, + /** * Assigns the buckets to the Variations of the campaign * depending on the traffic allocation @@ -4421,6 +4846,7 @@ var CampaignUtil = { setVariationAllocation: function setVariationAllocation(campaign) { var numberOfVariations = campaign.variations.length; var stepFactor = 0; + for (var i = 0, currentAllocation = 0; i < numberOfVariations; i++) { var variation = campaign.variations[i]; stepFactor = CampaignUtil.assignRangeValues(variation, currentAllocation); @@ -4435,6 +4861,7 @@ var CampaignUtil = { })); } }, + /** * Assign range allocation to the campaigns in the list to decide which campaign to choose out of the Mutually Exclusive group * @@ -4442,6 +4869,7 @@ var CampaignUtil = { */ setCampaignAllocation: function setCampaignAllocation(campaigns) { var stepFactor = 0; + for (var i = 0, currentAllocation = 0; i < campaigns.length; i++) { var campaign = campaigns[i]; stepFactor = CampaignUtil.assignRangeValues(campaign, currentAllocation); @@ -4451,6 +4879,7 @@ var CampaignUtil = { assignRangeValues: function assignRangeValues(variation, currentAllocation) { var stepFactor; stepFactor = CampaignUtil._getVariationBucketRange(variation.weight); + if (stepFactor) { variation.startVariationAllocation = currentAllocation + 1; variation.endVariationAllocation = currentAllocation + stepFactor; @@ -4458,75 +4887,95 @@ var CampaignUtil = { variation.startVariationAllocation = -1; variation.endVariationAllocation = -1; } + return stepFactor; }, getCampaignGoal: function getCampaignGoal(settingsFile, campaignKey, goalIdentifier) { var desiredCampaignGoal = null; + if (!settingsFile || !campaignKey || !goalIdentifier) { return desiredCampaignGoal; } + var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); + if (!campaign) { return desiredCampaignGoal; } + for (var i = 0; i < campaign.goals.length; i++) { var goal = campaign.goals[i]; + if (goal.identifier === goalIdentifier) { desiredCampaignGoal = goal; break; } } + return desiredCampaignGoal; }, getCampaignVariation: function getCampaignVariation(settingsFile, campaignKey, variationName) { var desiredVariation = null; + if (!settingsFile || !campaignKey || !variationName) { return desiredVariation; } + var campaign = CampaignUtil.getCampaign(settingsFile, campaignKey); + if (!campaign) { return desiredVariation; } + for (var i = 0; i < campaign.variations.length; i++) { var variation = campaign.variations[i]; + if (variation.name === variationName) { desiredVariation = variation; break; } } + return desiredVariation; }, getControlForCampaign: function getControlForCampaign(campaign) { var control = {}; + if (!campaign || !campaign.variations) { return control; } + for (var i = 0; i < campaign.variations.length; i++) { if (campaign.variations[i].id === 1) { control = campaign.variations[i]; break; } } + return control; }, isFeatureTestCampaign: function isFeatureTestCampaign(campaign) { if (campaign && campaign.type === CampaignTypeEnum.FEATURE_TEST) { return true; } + return false; }, isFeatureRolloutCampaign: function isFeatureRolloutCampaign(campaign) { if (campaign && campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT) { return true; } + return false; }, isAbCampaign: function isAbCampaign(campaign) { if (campaign && campaign.type === CampaignTypeEnum.AB) { return true; } + return false; }, + /** * Check if the campaign is a part of mutually exclusive group * @@ -4542,8 +4991,10 @@ var CampaignUtil = { groupName: settingsFile.groups[settingsFile.campaignGroups[campaignId]].name }; } + return {}; }, + /** * Get the list of campaigns on the basis of their id * @@ -4554,16 +5005,20 @@ var CampaignUtil = { */ getGroupCampaigns: function getGroupCampaigns(settingsFile, groupId) { var campaigns = []; + if (Object.prototype.hasOwnProperty.call(settingsFile.groups, groupId)) { settingsFile.groups[groupId].campaigns.forEach(function (campaignId) { var campaign = CampaignUtil.getCampaignBasedOnId(settingsFile, campaignId); + if (campaign) { campaigns.push(campaign); } }); } + return campaigns; }, + /** * Decide the Seed for murmurhash to bucket user. * @param {string} userId @@ -4576,8 +5031,10 @@ var CampaignUtil = { if (groupId) { return "".concat(groupId, "_").concat(userId); } + var isNB = VWOFeatureFlags.getAll().isNB; var isNBv2 = VWOFeatureFlags.getAll().isNBv2; + if (isNB || isNBv2 || campaign && campaign.isBucketingSeedEnabled) { return "".concat(campaign.id, "_").concat(userId); } else { @@ -4611,7 +5068,6 @@ module.exports = CampaignUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var DataTypeUtil = { _toStringValue: function _toStringValue(val) { return Object.prototype.toString.call(val); @@ -4635,8 +5091,7 @@ var DataTypeUtil = { return DataTypeUtil._toStringValue(val) === '[object Promise]'; }, isUndefined: function isUndefined(val) { - return DataTypeUtil._toStringValue(val) === '[object Undefined]' || - // A third-party library sometimes overrides and returns [object Window] + return DataTypeUtil._toStringValue(val) === '[object Undefined]' || // A third-party library sometimes overrides and returns [object Window] // therefore, adding a fallback as well typeof val === 'undefined'; }, @@ -4673,26 +5128,41 @@ module.exports = DataTypeUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var VariationDecider = __webpack_require__(/*! ../core/VariationDecider */ "./lib/core/VariationDecider.js"); + var BucketingService = __webpack_require__(/*! ../core/BucketingService */ "./lib/core/BucketingService.js"); + var CampaignUtil = __webpack_require__(/*! ./CampaignUtil */ "./lib/utils/CampaignUtil.js"); + var DataTypeUtil = __webpack_require__(/*! ./DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var FunctionUtil = __webpack_require__(/*! ./FunctionUtil */ "./lib/utils/FunctionUtil.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var StatusEnum = __webpack_require__(/*! ../enums/StatusEnum */ "./lib/enums/StatusEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var logger = logging.getLogger(); + var SegmentEvaluator = __webpack_require__(/*! ../core/SegmentEvaluator */ "./lib/core/SegmentEvaluator.js"); + var HooksManager = __webpack_require__(/*! ../services/HooksManager */ "./lib/services/HooksManager.js"); + var HooksEnum = __webpack_require__(/*! ../enums/HooksEnum */ "./lib/enums/HooksEnum.js"); + var UuidUtil = __webpack_require__(/*! ./UuidUtil */ "./lib/utils/UuidUtil.js"); + var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var CampaignTypeEnum = __webpack_require__(/*! ../enums/CampaignTypeEnum */ "./lib/enums/CampaignTypeEnum.js"); + var ApiEnum = __webpack_require__(/*! ../enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var RandomAlgo = 1; var file = FileNameEnum.DecisionUtil; var SegmentationTypeEnum = { @@ -4701,6 +5171,7 @@ var SegmentationTypeEnum = { }; var DecisionUtil = { // PUBLIC METHODS + /** * 1. Checks if there is a variation stored in userStorage, returns it * 2. If Whitelisting is applicable, evaluate it, if any eligible variation is found, store it in User Storage service and return, otherwise skip it. @@ -4757,23 +5228,24 @@ var DecisionUtil = { variationTargetingVariables: variationTargetingVariables, // VWO generated UUID based on passed UserId and Account ID vwoUserId: vwoUserId - }; + }; // check if the campaign is a part of group - // check if the campaign is a part of group var _CampaignUtil$isPartO = CampaignUtil.isPartOfGroup(settingsFile, campaign.id), - groupId = _CampaignUtil$isPartO.groupId, - groupName = _CampaignUtil$isPartO.groupName; + groupId = _CampaignUtil$isPartO.groupId, + groupName = _CampaignUtil$isPartO.groupName; + if (groupId) { // append groupId and groupName, if campaign is a part of group decision['groupId'] = groupId; decision['groupName'] = groupName; } + variationTargetingVariables = Object.assign({}, variationTargetingVariables, { _vwoUserId: campaign.isUserListEnabled ? vwoUserId : userId - }); + }); // check if tbe campaign satisfies the whitelisting before checking for the group - // check if tbe campaign satisfies the whitelisting before checking for the group var whitelistedVariation = DecisionUtil._checkForWhitelisting(config, campaign, campaignKey, userId, variationTargetingVariables, decision); + if (whitelistedVariation) { if (DataTypeUtil.isPromise(whitelistedVariation)) { return whitelistedVariation.then(function (data) { @@ -4784,12 +5256,11 @@ var DecisionUtil = { } else { return whitelistedVariation; } - } + } // check if the campaign is present in the storage before checking for the group - // check if the campaign is present in the storage before checking for the group - var storedVariation; - // check if asyncStorage, if yes then synchronously get the data and return promise + var storedVariation; // check if asyncStorage, if yes then synchronously get the data and return promise + if (config.asyncStorageConfig) { return new Promise(function (resolve) { return DecisionUtil._checkForUserStorage(config, settingsFile, campaign, campaignKey, userId, userStorageData, isTrackUserAPI, decision).then(function (response) { @@ -4808,9 +5279,11 @@ var DecisionUtil = { } else { storedVariation = DecisionUtil._checkForUserStorage(config, settingsFile, campaign, campaignKey, userId, userStorageData, isTrackUserAPI, decision); } + if (storedVariation) { return storedVariation; } + return DecisionUtil.evaluateAndGetVariationWithoutStorage(config, settingsFile, campaign, campaignKey, userId, customVariables, variationTargetingVariables, userStorageData, metaData, isTrackUserAPI, newGoalIdentifier, decision, groupId, groupName); }, evaluateAndGetVariationWithoutStorage: function evaluateAndGetVariationWithoutStorage(config, settingsFile, campaign, campaignKey, userId, customVariables, variationTargetingVariables, userStorageData, metaData, isTrackUserAPI, newGoalIdentifier, decision, groupId, groupName) { @@ -4818,18 +5291,20 @@ var DecisionUtil = { if (!(DecisionUtil._checkForPreSegmentation(campaign, campaignKey, userId, customVariables, decision) && BucketingService.isUserPartOfCampaign(userId, campaign, true))) { return {}; } + if (groupId) { // mutually exclusive group exists - // get the list of the all the campaigns in a group var campaignList = CampaignUtil.getGroupCampaigns(settingsFile, groupId); + if (campaignList.length === 0) { // return if no campaigns are active in a group return {}; - } + } // checking other campaigns for whitelisting and user storage. + - // checking other campaigns for whitelisting and user storage. var isWhitelistedOrStoredVariation = DecisionUtil._checkForStorageAndWhitelisting(config, settingsFile, groupName, campaignList, campaign, userId, userStorageData, variationTargetingVariables, isTrackUserAPI); + if (isWhitelistedOrStoredVariation) { // other campaigns satisfy the whitelisting or storage, therfore returning logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, { @@ -4838,21 +5313,25 @@ var DecisionUtil = { file: file, campaignKey: campaignKey })); + if (DataTypeUtil.isPromise(isWhitelistedOrStoredVariation)) { return new Promise(function (resolve) { resolve(Object.assign({})); }); } - return {}; - } - // none of the group campaigns satisfy whitelisting or user storage + return {}; + } // none of the group campaigns satisfy whitelisting or user storage // check each campaign for pre-segmentation and traffic allocation. + + var inEligibleCampaignKeys = ''; var eligibleCampaignKeys = ''; + var _DecisionUtil$getElig = DecisionUtil.getEligbleCampaigns(campaignList, userId, customVariables), - eligibleCampaigns = _DecisionUtil$getElig.eligibleCampaigns, - inEligibleCampaigns = _DecisionUtil$getElig.inEligibleCampaigns; + eligibleCampaigns = _DecisionUtil$getElig.eligibleCampaigns, + inEligibleCampaigns = _DecisionUtil$getElig.inEligibleCampaigns; + inEligibleCampaigns.forEach(function (campaign) { inEligibleCampaignKeys = inEligibleCampaignKeys + campaign.key + ','; }); @@ -4872,10 +5351,10 @@ var DecisionUtil = { file: file, noOfEligibleCampaigns: eligibleCampaigns.length, noOfGroupCampaigns: inEligibleCampaigns.length + eligibleCampaigns.length - })); + })); // Whether normalised/random implementation has to be done or advanced - // Whether normalised/random implementation has to be done or advanced var megAlgoNumber = typeof settingsFile.groups[groupId].et !== 'undefined' ? settingsFile.groups[groupId].et : RandomAlgo; + if (eligibleCampaigns.length === 1) { // if the called campaign is the only winner. return DecisionUtil.evaluateTrafficAndGetVariation(config, eligibleCampaigns[0], eligibleCampaigns[0].key, userId, metaData, newGoalIdentifier, decision); @@ -4894,7 +5373,6 @@ var DecisionUtil = { } }, // PRIVATE METHODS - _evaluateWhitelisting: function _evaluateWhitelisting(campaign, campaignKey, userId, variationTargetingVariables) { var disableLogs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; var whitelistedVariation; @@ -4910,12 +5388,14 @@ var DecisionUtil = { }), disableLogs); return; } + if (DataTypeUtil.isObject(variation.segments) && SegmentEvaluator(variation.segments, variationTargetingVariables, campaignKey, userId, variation.name)) { status = StatusEnum.PASSED; targetedVariations.push(FunctionUtil.cloneObject(variation)); } else { status = StatusEnum.FAILED; } + logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_STATUS, { campaignKey: campaignKey, userId: userId, @@ -4926,16 +5406,20 @@ var DecisionUtil = { variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT && status === StatusEnum.PASSED ? 'and becomes part of the rollout' : "for ".concat(variation.name) }), disableLogs); }); + if (targetedVariations.length > 1) { CampaignUtil.scaleVariationWeights(targetedVariations); + for (var i = 0, currentAllocation = 0, stepFactor = 0; i < targetedVariations.length; i++) { stepFactor = CampaignUtil.assignRangeValues(targetedVariations[i], currentAllocation); currentAllocation += stepFactor; } + whitelistedVariation = BucketingService._getVariation(targetedVariations, BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, campaign))); } else { whitelistedVariation = targetedVariations[0]; } + if (whitelistedVariation) { return { variation: whitelistedVariation, @@ -4944,6 +5428,7 @@ var DecisionUtil = { }; } }, + /** * Get the User Variation mapping by calling get method of UserStorageService being provided * @@ -4960,12 +5445,14 @@ var DecisionUtil = { campaignKey: campaignKey, goalIdentifier: null }; + if (!config.userStorageService) { logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, { file: file }), disableLogs); return userStorageMap; } + if (config.asyncStorageConfig) { try { return config.userStorageService.get(userId, campaignKey).then(function (data) { @@ -4991,9 +5478,8 @@ var DecisionUtil = { } } else { try { - var data = config.userStorageService.get(userId, campaignKey) || {}; + var data = config.userStorageService.get(userId, campaignKey) || {}; // if data found - // if data found logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GETTING_DATA_USER_STORAGE_SERVICE, { file: file, userId: userId, @@ -5010,6 +5496,7 @@ var DecisionUtil = { } } }, + /** * If UserStorageService is provided and variation was stored, save the assigned variation * @@ -5021,24 +5508,29 @@ var DecisionUtil = { */ _saveUserData: function _saveUserData(config, campaign, variationName, userId, metaData, goalIdentifier) { var isSaved = false; + if (!config.userStorageService) { logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, { file: file })); return isSaved; } + try { var properties = { userId: userId, variationName: variationName, campaignKey: campaign.key }; + if (!DataTypeUtil.isUndefined(goalIdentifier)) { properties.goalIdentifier = goalIdentifier; } + if (!DataTypeUtil.isUndefined(metaData)) { properties.metaData = metaData; } + config.userStorageService.set(properties); logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SETTING_DATA_USER_STORAGE_SERVICE, { file: file, @@ -5054,8 +5546,10 @@ var DecisionUtil = { })); isSaved = false; } + return isSaved; }, + /** * Evaluate the campaign for whitelisting and store * This method would be run only for MEG campaigns @@ -5076,11 +5570,13 @@ var DecisionUtil = { campaignList.some(function (groupCampaign) { if (groupCampaign.id === calledCampaign.id) { return; - } - // create a local copy of the campaigns + } // create a local copy of the campaigns // groupCampaign = FunctionUtil.cloneObject(groupCampaign); // checking other campaigns for whitelisting or user storage. + + var whitelistedVariation = DecisionUtil._checkForWhitelisting(config, groupCampaign, groupCampaign.key, userId, variationTargetingVariables); + if (whitelistedVariation) { if (DataTypeUtil.isPromise(whitelistedVariation)) { return whitelistedVariation.then(function (data) { @@ -5109,7 +5605,9 @@ var DecisionUtil = { return true; } } + var storedVariation = DecisionUtil._checkForUserStorage(config, settingsFile, groupCampaign, groupCampaign.key, userId, userStorageData, isTrackUserAPI); + if (storedVariation && DataTypeUtil.isPromise(storedVariation)) { otherCampaignWinner = true; logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, { @@ -5118,12 +5616,13 @@ var DecisionUtil = { groupName: groupName, userId: userId, type: 'user storage' - })); - // return true; + })); // return true; + return new Promise(function (resolve) { resolve(true); }); } + if (storedVariation && DataTypeUtil.isObject(storedVariation) && Object.keys(storedVariation).length > 0) { // other campaign satisfy the user storage otherCampaignWinner = true; @@ -5137,13 +5636,16 @@ var DecisionUtil = { return true; } }); + if (config.asyncStorageConfig) { return new Promise(function (resolve) { resolve(otherCampaignWinner); }); } + return otherCampaignWinner; }, + /** * Evaluate a campaign for pre-segmentation. * @@ -5157,6 +5659,7 @@ var DecisionUtil = { */ _checkForPreSegmentation: function _checkForPreSegmentation(campaign, campaignKey, userId, customVariables, decision) { var status; + if (DataTypeUtil.isObject(campaign.segments) && !Object.keys(campaign.segments).length) { logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, { campaignKey: campaignKey, @@ -5166,11 +5669,13 @@ var DecisionUtil = { return true; } else { var preSegmentationResult = SegmentEvaluator(campaign.segments, customVariables, campaignKey, userId, !decision); + if (!preSegmentationResult) { status = StatusEnum.FAILED; } else { status = StatusEnum.PASSED; } + logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, { campaignKey: campaignKey, userId: userId, @@ -5180,6 +5685,7 @@ var DecisionUtil = { segmentationType: SegmentationTypeEnum.PRE_SEGMENTATION, variation: '' }), !decision); + if (status === StatusEnum.FAILED) { return false; } else { @@ -5187,6 +5693,7 @@ var DecisionUtil = { } } }, + /** * Check if user is eligible for the camapign based on traffic percentage and assign variation. * @param {Object} config @@ -5199,9 +5706,10 @@ var DecisionUtil = { * @returns {Object} variation assigned to the user */ evaluateTrafficAndGetVariation: function evaluateTrafficAndGetVariation(config, campaign, campaignKey, userId, metaData, newGoalIdentifier, decision) { - var variation, variationName, variationId; - // Use our core's VariationDecider utility to get the deterministic variation assigned to the userId for that campaign + var variation, variationName, variationId; // Use our core's VariationDecider utility to get the deterministic variation assigned to the userId for that campaign + var _VariationDecider$get = VariationDecider.getVariationAllotted(userId, campaign, config.settingsFile.accountId); + variation = _VariationDecider$get.variation; variationName = _VariationDecider$get.variationName; variationId = _VariationDecider$get.variationId; @@ -5210,15 +5718,14 @@ var DecisionUtil = { campaignKey: campaignKey, userId: userId, status: variationName ? "got variation:".concat(variationName) : 'did not get any variation' - })); + })); // Check if variation-name has been assigned to the userId. If not, return no variation - // Check if variation-name has been assigned to the userId. If not, return no variation if (variationName) { // If userStorageService is provided, look into it for the saved variation for the campaign and userId DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, newGoalIdentifier); - } + } // Executing the callback when SDK makes the decision + - // Executing the callback when SDK makes the decision HooksManager.execute(Object.assign({ fromUserStorageService: false, isUserWhitelisted: false @@ -5234,6 +5741,7 @@ var DecisionUtil = { variationId: variationId }; }, + /** * Evaluate a campaign for whitelisting * @@ -5248,9 +5756,12 @@ var DecisionUtil = { _checkForWhitelisting: function _checkForWhitelisting(config, campaign, campaignKey, userId, variationTargetingVariables, decision) { var status; var variationName, variationId; + if (campaign.isForcedVariationEnabled) { var whitelistingResult = DecisionUtil._evaluateWhitelisting(campaign, campaignKey, userId, variationTargetingVariables, !decision); + var variationString; + if (whitelistingResult) { status = StatusEnum.PASSED; variationString = whitelistingResult.variationName; @@ -5258,6 +5769,7 @@ var DecisionUtil = { status = StatusEnum.FAILED; variationString = ''; } + logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, { campaignKey: campaignKey, userId: userId, @@ -5267,10 +5779,11 @@ var DecisionUtil = { segmentationType: SegmentationTypeEnum.WHITELISTING, variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT ? '' : "for variation: ".concat(variationString) }), !decision); + if (whitelistingResult) { variationName = whitelistingResult.variationName; - variationId = whitelistingResult.variationId; - // Executing the callback when SDK has made a decision in case of whitelisting + variationId = whitelistingResult.variationId; // Executing the callback when SDK has made a decision in case of whitelisting + if (decision) { HooksManager.execute(Object.assign({ fromUserStorageService: false, @@ -5282,11 +5795,13 @@ var DecisionUtil = { variationId: variationId }, decision)); } + if (config.asyncStorageConfig) { return new Promise(function (resolve) { return resolve(whitelistingResult); }); } + return whitelistingResult; } } else { @@ -5297,6 +5812,7 @@ var DecisionUtil = { }), !decision); } }, + /** * Check if the variation is present in the user storage * @@ -5313,6 +5829,7 @@ var DecisionUtil = { */ _checkForUserStorage: function _checkForUserStorage(config, settingsFile, campaign, campaignKey, userId, userStorageData, isTrackUserAPI, decision) { var userData; + if (config.asyncStorageConfig) { return DecisionUtil._getStoredUserData(config, userId, campaignKey, userStorageData, !decision).then(function (userData) { userData = userData || { @@ -5328,8 +5845,9 @@ var DecisionUtil = { }, _processAfterGettingFromStorage: function _processAfterGettingFromStorage(config, settingsFile, campaign, campaignKey, userId, isTrackUserAPI, decision, userData) { var variationName = userData.variationName, - goalIdentifier = userData.goalIdentifier; + goalIdentifier = userData.goalIdentifier; var storedVariation; + if (userData && userData.campaignKey && variationName) { storedVariation = CampaignUtil.getCampaignVariation(settingsFile, campaignKey, variationName); } else { @@ -5340,9 +5858,9 @@ var DecisionUtil = { userId: userId }), !decision); } - var variationId; - // If stored variation is found, simply return the same + var variationId; // If stored variation is found, simply return the same + if (storedVariation) { variationName = storedVariation.name; variationId = storedVariation.id; @@ -5351,9 +5869,8 @@ var DecisionUtil = { campaignKey: campaignKey, userId: userId, variationName: variationName - }), !decision); + }), !decision); // Executing the callback when SDK gets the decision from user storage service - // Executing the callback when SDK gets the decision from user storage service if (decision) { HooksManager.execute(Object.assign({ fromUserStorageService: !!variationName, @@ -5365,6 +5882,7 @@ var DecisionUtil = { variationId: variationId }, decision)); } + return { variation: storedVariation, variationName: variationName, @@ -5388,6 +5906,7 @@ var DecisionUtil = { return {}; } }, + /** * Evaluate the list of campaigns for pre-segmentation and campaign traffic allocation and assign variation to the user. * This method will be used for MEG campaigns @@ -5406,9 +5925,10 @@ var DecisionUtil = { var inEligibleCampaigns = []; campaignList.forEach(function (groupCampaign) { var isPartOfCampaign = DecisionUtil._checkForPreSegmentation(groupCampaign, groupCampaign.key, userId, customVariables) && BucketingService.isUserPartOfCampaign(userId, groupCampaign, true); + if (isPartOfCampaign) { - groupCampaign = FunctionUtil.cloneObject(groupCampaign); - // campaign satisfies the pre-segmentation + groupCampaign = FunctionUtil.cloneObject(groupCampaign); // campaign satisfies the pre-segmentation + eligibleCampaigns.push(groupCampaign); } else { inEligibleCampaigns.push(groupCampaign); @@ -5419,6 +5939,7 @@ var DecisionUtil = { inEligibleCampaigns: inEligibleCampaigns }; }, + /** * Equally distribute the traffic of campaigns and assign a winner campaign by murmur hash. * @@ -5436,17 +5957,19 @@ var DecisionUtil = { // normalise the weights of all the shortlisted campaigns shortlistedCampaigns.forEach(function (campaign) { campaign.weight = Math.floor(100 / shortlistedCampaigns.length); - }); + }); // re-distribute the traffic for each camapign - // re-distribute the traffic for each camapign CampaignUtil.setCampaignAllocation(shortlistedCampaigns); + var winnerCampaign = BucketingService._getVariation(shortlistedCampaigns, BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))); + logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, { userId: userId, groupName: groupName, file: file, campaignKey: winnerCampaign.key })); + if (winnerCampaign.id === calledCampaign.id) { // if called campaign is the winner campaign, get the variation for the campaign return DecisionUtil.evaluateTrafficAndGetVariation(config, winnerCampaign, winnerCampaign.key, userId, metaData, newGoalIdentifier, decision); @@ -5461,6 +5984,7 @@ var DecisionUtil = { return {}; } }, + /** Assign the winner campaign by checking priority order and/or weightage distribution * @param {Object} config * @param {Object} settingsFile @@ -5476,8 +6000,10 @@ var DecisionUtil = { _advancedAlgoFindWinningCampaign: function _advancedAlgoFindWinningCampaign(config, settingsFile, calledCampaign, shortlistedCampaigns, userId, groupName, groupId, metaData, newGoalIdentifier, decision) { var winnerCampaign = null; var found = false; // flag to check whether winnerCampaign has been found or not and helps to break from the outer loop + var priorityOrder = typeof settingsFile.groups[groupId].p !== 'undefined' ? settingsFile.groups[groupId].p : {}; var wt = typeof settingsFile.groups[groupId].wt !== 'undefined' ? settingsFile.groups[groupId].wt : {}; + for (var i = 0; i < priorityOrder.length; i++) { for (var j = 0; j < shortlistedCampaigns.length; j++) { if (shortlistedCampaigns[j].id === priorityOrder[i]) { @@ -5486,16 +6012,18 @@ var DecisionUtil = { break; } } - if (found === true) break; - } - // If winnerCampaign not found through Priority, then go for weighted Random distribution and for that, + if (found === true) break; + } // If winnerCampaign not found through Priority, then go for weighted Random distribution and for that, // Store the list of campaigns (participatingCampaigns) out of shortlistedCampaigns and their corresponding weights present in weightage distribution array (wt) + + if (winnerCampaign === null) { - var participatingCampaignList = []; - // iterate over shortlisted campaigns and add weights from the weight array + var participatingCampaignList = []; // iterate over shortlisted campaigns and add weights from the weight array + for (var _i = 0; _i < shortlistedCampaigns.length; _i++) { var campaignId = shortlistedCampaigns[_i].id; + if (typeof wt[campaignId] !== 'undefined') { var clonedCampaign = FunctionUtil.cloneObject(shortlistedCampaigns[_i]); clonedCampaign.weight = wt[campaignId]; @@ -5508,9 +6036,11 @@ var DecisionUtil = { 3. Get the winnerCampaign by checking the Start and End Bucket Allocations of each campaign */ + CampaignUtil.setCampaignAllocation(participatingCampaignList); winnerCampaign = BucketingService._getVariation(participatingCampaignList, BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))); } + if (winnerCampaign != null) { logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, { userId: userId, @@ -5518,9 +6048,10 @@ var DecisionUtil = { file: file, campaignKey: winnerCampaign.key })); - } - // WinnerCampaign should not be null, in case when winnerCampaign hasn't been found through PriorityOrder and + } // WinnerCampaign should not be null, in case when winnerCampaign hasn't been found through PriorityOrder and // also shortlistedCampaigns and wt array does not have a single campaign id in common + + if (winnerCampaign != null && winnerCampaign.id === calledCampaign.id) { // if called campaign is the winner campaign, get the variation for the campaign return DecisionUtil.evaluateTrafficAndGetVariation(config, winnerCampaign, winnerCampaign.key, userId, metaData, newGoalIdentifier, decision); @@ -5562,25 +6093,31 @@ module.exports = DecisionUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var logger = logging.getLogger(); + var FunctionUtil = __webpack_require__(/*! ./FunctionUtil */ "./lib/utils/FunctionUtil.js"); + var EventEnum = __webpack_require__(/*! ../enums/EventEnum */ "./lib/enums/EventEnum.js"); + var excludedProperties = ['url']; var file = FileNameEnum.EventDispatcherUtil; var EventDispatcher = { dispatchGetCall: function dispatchGetCall(properties, _ref) { var _this = this; + var responseCallback = _ref.responseCallback; var customHeaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var parsedUrl; var queryParams = '?'; queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties); + try { // Require files only if required in respective Engine i.e. Node / Browser if (true) { @@ -5596,6 +6133,7 @@ var EventDispatcher = { err: err })); } + return false; }, handleGetResponse: function handleGetResponse(properties, error, response) { @@ -5613,6 +6151,7 @@ var EventDispatcher = { accountId: properties && properties.account_id }; var params = {}; + if (baseParams.endPoint.includes('push')) { var customVariables = JSON.parse(properties.tags).u; params = Object.assign({}, baseParams, { @@ -5626,20 +6165,22 @@ var EventDispatcher = { }); params.mainKeys = "campaignId:".concat(params.campaignId, " and variationId:").concat(params.variationId); } + logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params)); return true; } }, dispatchPostCall: function dispatchPostCall(properties, payload, _ref2) { var _this2 = this; + var responseCallback = _ref2.responseCallback; var customHeaders = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var parsedUrl; var queryParams = '?'; queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties); + try { // Require files only if required in respective Engine i.e. Node / Browser - if (true) { if (typeof XMLHttpRequest === 'undefined') { return __webpack_require__(/*! ./FetchUtil */ "./lib/utils/FetchUtil.js").send({ @@ -5649,6 +6190,7 @@ var EventDispatcher = { customHeaders: customHeaders }).then(function () { _this2.handlePostResponse(properties, payload); + if (responseCallback) { responseCallback(null, { status: 'success' @@ -5656,11 +6198,13 @@ var EventDispatcher = { } })["catch"](function (error) { _this2.handlePostResponse(properties, payload, error); + responseCallback(error, { status: 'failure' }); }); } + return __webpack_require__(/*! ./XhrUtil */ "./lib/utils/XhrUtil.js").send({ method: 'POST', url: "".concat(properties.url).concat(queryParams), @@ -5669,6 +6213,7 @@ var EventDispatcher = { logger: logger }).then(function () { _this2.handlePostResponse(properties, payload); + if (responseCallback) { responseCallback(null, { status: 'success' @@ -5676,6 +6221,7 @@ var EventDispatcher = { } })["catch"](function (error) { _this2.handlePostResponse(properties, payload, error); + responseCallback(error, { status: 'failure' }); @@ -5689,10 +6235,12 @@ var EventDispatcher = { err: err })); } + return Promise.resolve(false); }, handlePostResponse: function handlePostResponse(properties, payload, error) { var endPoint = properties.url; + if (error) { logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, { file: file, @@ -5702,10 +6250,12 @@ var EventDispatcher = { return false; } else { var event = "".concat(properties.en, " event"); + if (properties.en === EventEnum.VWO_SYNC_VISITOR_PROP) { delete payload.d.visitor.props.vwo_fs_environment; event = "visitor property:".concat(JSON.stringify(payload.d.visitor.props)); } + logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS_FOR_EVENT_ARCH, { file: file, endPoint: endPoint, @@ -5742,56 +6292,71 @@ module.exports = EventDispatcher; * See the License for the specific language governing permissions and * limitations under the License. */ - var CampaignUtil = __webpack_require__(/*! ./CampaignUtil */ "./lib/utils/CampaignUtil.js"); + var DataTypeUtil = __webpack_require__(/*! ./DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var FeatureVariableTypeEnum = __webpack_require__(/*! ../enums/FeatureVariableTypeEnum */ "./lib/enums/FeatureVariableTypeEnum.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var logger = logging.getLogger(); var file = FileNameEnum.FeatureUtil; var FeatureUtil = { getVariableForFeature: function getVariableForFeature(campaign, variableKey) { var variableData = {}; + if (CampaignUtil.isFeatureRolloutCampaign(campaign)) { var variables = campaign.variables || []; + for (var i = 0; i < variables.length; i++) { if (variables[i].key === variableKey) { variableData = variables[i]; break; } } + return variableData; } + return variableData; }, getVariableValueForVariation: function getVariableValueForVariation(campaign, variation, variableKey) { var variationVariable = {}; + if (CampaignUtil.isFeatureTestCampaign(campaign)) { if (!variation || !variation || !variation.variables) { return variationVariable; } + if (!variation.isFeatureEnabled) { variation = CampaignUtil.getControlForCampaign(campaign); } + for (var i = 0; i < variation.variables.length; i++) { var variable = variation.variables[i]; + if (variableKey === variable.key) { variationVariable = variable; break; } } } + return variationVariable; }, getTypeCastVariableValue: function getTypeCastVariableValue(variableValue, variableType) { var typeCastedValue; + switch (variableType) { case FeatureVariableTypeEnum.INTEGER: typeCastedValue = parseInt(variableValue, 10); + if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) { logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, { file: file, @@ -5800,9 +6365,12 @@ var FeatureUtil = { })); typeCastedValue = null; } + break; + case FeatureVariableTypeEnum.DOUBLE: typeCastedValue = parseFloat(variableValue); + if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) { logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, { file: file, @@ -5811,7 +6379,9 @@ var FeatureUtil = { })); typeCastedValue = null; } + break; + case FeatureVariableTypeEnum.BOOLEAN: if (!DataTypeUtil.isBoolean(variableValue)) { logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, { @@ -5823,7 +6393,9 @@ var FeatureUtil = { } else { typeCastedValue = variableValue; } + break; + case FeatureVariableTypeEnum.JSON: if (!DataTypeUtil.isObject(variableValue)) { logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, { @@ -5835,11 +6407,14 @@ var FeatureUtil = { } else { typeCastedValue = variableValue; } + break; + default: typeCastedValue = variableValue; break; } + return typeCastedValue; } }; @@ -5870,18 +6445,22 @@ module.exports = FeatureUtil; * limitations under the License. */ var _require = __webpack_require__(/*! ./FunctionUtil */ "./lib/utils/FunctionUtil.js"), - getCurrentTime = _require.getCurrentTime; + getCurrentTime = _require.getCurrentTime; + var _require2 = __webpack_require__(/*! ./DataTypeUtil */ "./lib/utils/DataTypeUtil.js"), - isObject = _require2.isObject, - isFunction = _require2.isFunction; + isObject = _require2.isObject, + isFunction = _require2.isFunction; + var FetchUtil = { _getStoredSettings: function _getStoredSettings(userStorageService) { var isStoredData = false; var parsedSettings; + if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) { try { var settings = userStorageService.getSettings(); parsedSettings = JSON.parse(settings); + if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) { var info = "VWO-SDK - [INFO]: ".concat(getCurrentTime(), " VWO settings found in Storage Service."); console.info(info); @@ -5895,10 +6474,12 @@ var FetchUtil = { } } catch (err) { var _error = "VWO-SDK - [ERROR]: ".concat(getCurrentTime(), " VWO settings found in Storage Service is not valid. ").concat(err); + console.error(_error); isStoredData = false; } } + return { isStoredData: isStoredData, parsedSettings: parsedSettings @@ -5906,19 +6487,22 @@ var FetchUtil = { }, send: function send() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - method = _ref.method, - url = _ref.url, - payload = _ref.payload, - userStorageService = _ref.userStorageService, - _ref$customHeaders = _ref.customHeaders, - customHeaders = _ref$customHeaders === void 0 ? {} : _ref$customHeaders; + method = _ref.method, + url = _ref.url, + payload = _ref.payload, + userStorageService = _ref.userStorageService, + _ref$customHeaders = _ref.customHeaders, + customHeaders = _ref$customHeaders === void 0 ? {} : _ref$customHeaders; + if (!url || !method) { return; } + return new Promise(function (resolve, reject) { var _FetchUtil$_getStored = FetchUtil._getStoredSettings(userStorageService), - isStoredData = _FetchUtil$_getStored.isStoredData, - parsedSettings = _FetchUtil$_getStored.parsedSettings; + isStoredData = _FetchUtil$_getStored.isStoredData, + parsedSettings = _FetchUtil$_getStored.parsedSettings; + if (isStoredData) { resolve(parsedSettings); } else { @@ -5926,22 +6510,27 @@ var FetchUtil = { method: method, headers: customHeaders }; + if (method === 'POST') { options.body = JSON.stringify(payload); } + return fetch(url, options).then(function (res) { // Some endpoints return empty strings as the response body; treat // as raw text and handle potential JSON parsing errors below return res.text().then(function (text) { var jsonData = {}; + try { jsonData = JSON.parse(text); } catch (err) { console.info("VWO-SDK - [INFO]: ".concat(getCurrentTime(), " VWO didn't send JSON response which is expected: ").concat(err)); } + if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) { userStorageService.setSettings(jsonData); } + if (res.status === 200) { resolve(jsonData); } else { @@ -5985,12 +6574,12 @@ module.exports = FetchUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var FunctionUtil = { cloneObject: function cloneObject(obj) { if (!obj) { return obj; } + var clonedObj = JSON.parse(JSON.stringify(obj)); return clonedObj; }, @@ -6008,11 +6597,13 @@ var FunctionUtil = { return string.match(new RegExp(regex)); } catch (err) { var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var logger = logging.getLogger(); var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var file = FileNameEnum.FunctionUtil; logger.log(LogLevelEnum.ERROR, LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_REGEX_CREATION_FAILED, { file: file, @@ -6027,6 +6618,7 @@ var FunctionUtil = { convertObjectKeysToString: function convertObjectKeysToString(properties, excludedProperties) { var queryParams = ''; excludedProperties = excludedProperties || []; + for (var prop in properties) { if (properties.hasOwnProperty(prop)) { if (excludedProperties.indexOf(prop) === -1) { @@ -6034,13 +6626,16 @@ var FunctionUtil = { } } } + return queryParams; }, objectValues: function objectValues(obj) { var values = []; + for (var prop in obj) { values.push(obj[prop]); } + return values; } }; @@ -6071,13 +6666,17 @@ module.exports = FunctionUtil; * limitations under the License. */ var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var logger = logging.getLogger(); var file = FileNameEnum.HttpXMLUtil; + var noop = function noop() {}; + var printLog = function printLog(properties) { var baseParams = { file: file, @@ -6085,6 +6684,7 @@ var printLog = function printLog(properties) { accountId: properties && properties.account_id }; var params = {}; + if (baseParams.endPoint.includes('push')) { var customVariables = JSON.parse(properties.tags).u; params = Object.assign({}, baseParams, { @@ -6098,17 +6698,20 @@ var printLog = function printLog(properties) { }); params.mainKeys = "campaignId:".concat(params.campaignId, " and variationId:").concat(params.variationId); } + logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params)); }; + var HttpXMLUtil = { sendCall: function sendCall(properties, queryParams) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var customHeaders = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var endPoint = "".concat(properties.url).concat(queryParams); var successCallback = options.successCallback, - errorCallback = options.errorCallback; + errorCallback = options.errorCallback; errorCallback = errorCallback || successCallback; var isCallbackCalled = false; + if (typeof XMLHttpRequest === 'undefined') { // if (typeof Image === 'undefined') { fetch(endPoint, { @@ -6118,6 +6721,7 @@ var HttpXMLUtil = { if (isCallbackCalled) { return; } + isCallbackCalled = true; successCallback(null, { status: 'success' @@ -6126,6 +6730,7 @@ var HttpXMLUtil = { if (isCallbackCalled) { return; } + isCallbackCalled = true; errorCallback(null, { status: 'success' @@ -6134,6 +6739,7 @@ var HttpXMLUtil = { }); return; } + this.handleGetCall(properties, queryParams, successCallback, errorCallback, endPoint, isCallbackCalled, customHeaders); }, handleGetCall: function handleGetCall(properties, queryParams, successCallback, errorCallback, endPoint, isCallbackCalled) { @@ -6141,14 +6747,14 @@ var HttpXMLUtil = { successCallback = successCallback || noop; errorCallback = errorCallback || noop; var xhr = new XMLHttpRequest(); - xhr.open('GET', endPoint, true); - // Set custom headers using setRequestHeader + xhr.open('GET', endPoint, true); // Set custom headers using setRequestHeader + for (var headerName in customHeaders) { if (customHeaders.hasOwnProperty(headerName)) { xhr.setRequestHeader(headerName, customHeaders[headerName]); } } - console.log('Headers added to the request:', xhr.getAllResponseHeaders()); + xhr.onload = function () { if (xhr.status >= 200 && xhr.status < 300) { var response = xhr.responseText; @@ -6159,10 +6765,12 @@ var HttpXMLUtil = { printLog(properties); } }; + xhr.onerror = function () { errorCallback(xhr.statusText); printLog(properties); }; + xhr.send(); } }; @@ -6177,10 +6785,8 @@ module.exports = HttpXMLUtil; /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -6196,20 +6802,29 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * See the License for the specific language governing permissions and * limitations under the License. */ - var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var UrlEnum = __webpack_require__(/*! ../enums/UrlEnum */ "./lib/enums/UrlEnum.js"); + var GoalTypeEnum = __webpack_require__(/*! ../enums/GoalTypeEnum */ "./lib/enums/GoalTypeEnum.js"); + var UuidUtil = __webpack_require__(/*! ./UuidUtil */ "./lib/utils/UuidUtil.js"); + var ValidateUtil = __webpack_require__(/*! ./ValidateUtil */ "./lib/utils/ValidateUtil.js"); + var FunctionUtil = __webpack_require__(/*! ./FunctionUtil */ "./lib/utils/FunctionUtil.js"); + var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var FileNameEnum = __webpack_require__(/*! ../enums/FileNameEnum */ "./lib/enums/FileNameEnum.js"); + var DataTypeUtil = __webpack_require__(/*! ./DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var LogLevelEnum = logging.LogLevelEnum, - LogMessageEnum = logging.LogMessageEnum, - LogMessageUtil = logging.LogMessageUtil; + LogMessageEnum = logging.LogMessageEnum, + LogMessageUtil = logging.LogMessageUtil; var logger = logging.getLogger(); + var UrlService = __webpack_require__(/*! ../services/UrlService */ "./lib/services/UrlService.js"); /** * Return primary properties required for every network call to VWO server @@ -6218,13 +6833,14 @@ var UrlService = __webpack_require__(/*! ../services/UrlService */ "./lib/servic * * @returns primary properties */ + + function getPrimaryProperties(configObj, userId) { return { sId: FunctionUtil.getCurrentUnixTimestamp(), u: UuidUtil.generateFor(userId, configObj.accountId) }; } - /** * Return base properties required for every network call to VWO server * @param {Object} configObj @@ -6232,6 +6848,8 @@ function getPrimaryProperties(configObj, userId) { * * @returns base properties */ + + function getBaseProperties(configObj, userId) { var accountId = configObj.accountId; return Object.assign({}, getPrimaryProperties(configObj, userId), ImpressionUtil.getReportingProperties(configObj), { @@ -6240,6 +6858,7 @@ function getBaseProperties(configObj, userId) { ap: Constants.PLATFORM }); } + var ImpressionUtil = { /** * Build properties for the impression event @@ -6260,6 +6879,7 @@ var ImpressionUtil = { })); return properties; }, + /** * Build properties for the bulk impression event * @@ -6270,6 +6890,7 @@ var ImpressionUtil = { buildBatchEventForPushing: function buildBatchEventForPushing(configObj, tagKey, tagValue, userId) { if (false) { var properties; } }, + /** * Build properties for the impression event * @@ -6298,6 +6919,7 @@ var ImpressionUtil = { })); return properties; }, + /** * Build properties for the bulk impression event * @@ -6312,8 +6934,10 @@ var ImpressionUtil = { buildBatchEventForTrackingUser: function buildBatchEventForTrackingUser(configObj, campaignKey, variationId, userId) { var visitorUserAgent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; var userIpAddress = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : ''; + if (false) { var properties; } }, + /** * Build properties for the impression event * @@ -6339,15 +6963,18 @@ var ImpressionUtil = { properties.visitor_ip = userIpAddress; properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.TRACK_GOAL; properties['goal_id'] = goalId; + if (goal.type === GoalTypeEnum.REVENUE && ValidateUtil.isValidValue(revenue)) { properties['r'] = revenue; } + logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL, { file: FileNameEnum.ImpressionUtil, properties: this._getStringifiedLogProperties(properties) })); return properties; }, + /** * Build properties for the bulk impression event * @@ -6365,8 +6992,10 @@ var ImpressionUtil = { var eventProperties = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}; var visitorUserAgent = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : ''; var userIpAddress = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : ''; + if (false) { var properties; } }, + /** * Return an object containing properties required for segmenting reports * @param {Object} configObj @@ -6374,9 +7003,11 @@ var ImpressionUtil = { */ getReportingProperties: function getReportingProperties(configObj) { var _ref; + var sdkKey = configObj.sdkKey; return _ref = {}, _defineProperty(_ref, Constants.SDK_QUERY_PARAM, Constants.SDK_NAME), _defineProperty(_ref, Constants.SDK_VERSION_QUERY_PARAM, Constants.SDK_VERSION), _defineProperty(_ref, "env", sdkKey), _ref; }, + /** * Builds generic properties for different tracking calls required by VWO servers. * @param {Object} configObj @@ -6401,6 +7032,7 @@ var ImpressionUtil = { properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.EVENTS; return properties; }, + /** * Builds generic payload required by all the different tracking calls. * @param {Object} configObj @@ -6416,9 +7048,7 @@ var ImpressionUtil = { vwo_sdkName: Constants.SDK_NAME, vwo_sdkVersion: Constants.SDK_VERSION, vwo_envKey: sdkKey - }; - - // if (usageStats) { + }; // if (usageStats) { // props = Object.assign({}, props, usageStats); // } @@ -6441,6 +7071,7 @@ var ImpressionUtil = { }; return properties; }, + /** * Builds payload to track the visitor. * @param {Object} configObj @@ -6453,9 +7084,8 @@ var ImpressionUtil = { getTrackUserPayloadData: function getTrackUserPayloadData(configObj, userId, eventName, campaignId, variationId) { var properties = this.getEventBasePayload(configObj, userId, eventName); properties.d.event.props.id = campaignId; - properties.d.event.props.variation = variationId; + properties.d.event.props.variation = variationId; // this is currently required by data-layer team, we can make changes on DACDN and remove it from here - // this is currently required by data-layer team, we can make changes on DACDN and remove it from here properties.d.event.props.isFirst = 1; logger.log(LogLevelEnum.DEBUG, LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_USER, { file: FileNameEnum.ImpressionUtil, @@ -6465,6 +7095,7 @@ var ImpressionUtil = { })); return properties; }, + /** * Builds payload to track the Goal. * @param {Object} configObj @@ -6491,19 +7122,24 @@ var ImpressionUtil = { properties.d.event.props.vwoMeta = { metric: metric }; + if (revenuePropList && revenueValue && revenuePropList.size > 0) { revenuePropList.forEach(function (revenueProp) { properties.d.event.props.vwoMeta[revenueProp] = revenueValue; }); } + properties.d.event.props.isCustomEvent = true; + if (Object.keys(eventProperties).length > 0) { for (var prop in eventProperties) { properties.d.event.props[prop] = eventProperties[prop]; } } + return properties; }, + /** * Builds payload to appply post segmentation on VWO campaign reports. * @param {Object} configObj @@ -6527,6 +7163,7 @@ var ImpressionUtil = { })); return properties; }, + /** * Remove the sensitive keys from the properties to te displayed in the log. * @param {Object} properties @@ -6564,8 +7201,8 @@ module.exports = ImpressionUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var DataTypeUtil = __webpack_require__(/*! ./DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var nargs = /\{([0-9a-zA-Z_]+)\}/g; var LogMessageUtil = { /** @@ -6585,22 +7222,28 @@ var LogMessageUtil = { return template.replace(nargs, function (match, key, index) { var result; var isKey; + if (template[index - 1] === '{' && template[index + match.length] === '}') { return key; } else { isKey = data.hasOwnProperty(key); + if (isKey) { var value = data[key]; + if (DataTypeUtil.isFunction(value)) { value = data[key](); } + result = value; } else { result = null; } + if (result === null || result === undefined) { return ''; } + return result; } }); @@ -6635,7 +7278,6 @@ module.exports = LogMessageUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var ObjectUtil = { areObjectKeys: function areObjectKeys() { var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -6645,6 +7287,7 @@ var ObjectUtil = { if (!ObjectUtil.areObjectKeys(obj)) { return; } + var key = Object.keys(obj)[0]; var value = obj[key]; return { @@ -6684,66 +7327,77 @@ module.exports = ObjectUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var DataTypeUtil = __webpack_require__(/*! ../utils/DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var _require = __webpack_require__(/*! ../utils/FunctionUtil */ "./lib/utils/FunctionUtil.js"), - matchWithRegex = _require.matchWithRegex; + matchWithRegex = _require.matchWithRegex; + var _require2 = __webpack_require__(/*! ../utils/ObjectUtil */ "./lib/utils/ObjectUtil.js"), - getKeyValue = _require2.getKeyValue; + getKeyValue = _require2.getKeyValue; + var SegmentEnum = __webpack_require__(/*! ../enums/segment */ "./lib/enums/segment/index.js"); + var _SegmentEnum$SegmentO = SegmentEnum.SegmentOperandValueTypeRegexes, - LOWER_MATCH = _SegmentEnum$SegmentO.LOWER_MATCH, - WILDCARD_MATCH = _SegmentEnum$SegmentO.WILDCARD_MATCH, - REGEX_MATCH = _SegmentEnum$SegmentO.REGEX_MATCH, - STARTING_STAR = _SegmentEnum$SegmentO.STARTING_STAR, - ENDING_STAR = _SegmentEnum$SegmentO.ENDING_STAR, - GREATER_THAN_MATCH = _SegmentEnum$SegmentO.GREATER_THAN_MATCH, - GREATER_THAN_EQUAL_TO_MATCH = _SegmentEnum$SegmentO.GREATER_THAN_EQUAL_TO_MATCH, - LESS_THAN_MATCH = _SegmentEnum$SegmentO.LESS_THAN_MATCH, - LESS_THAN_EQUAL_TO_MATCH = _SegmentEnum$SegmentO.LESS_THAN_EQUAL_TO_MATCH; + LOWER_MATCH = _SegmentEnum$SegmentO.LOWER_MATCH, + WILDCARD_MATCH = _SegmentEnum$SegmentO.WILDCARD_MATCH, + REGEX_MATCH = _SegmentEnum$SegmentO.REGEX_MATCH, + STARTING_STAR = _SegmentEnum$SegmentO.STARTING_STAR, + ENDING_STAR = _SegmentEnum$SegmentO.ENDING_STAR, + GREATER_THAN_MATCH = _SegmentEnum$SegmentO.GREATER_THAN_MATCH, + GREATER_THAN_EQUAL_TO_MATCH = _SegmentEnum$SegmentO.GREATER_THAN_EQUAL_TO_MATCH, + LESS_THAN_MATCH = _SegmentEnum$SegmentO.LESS_THAN_MATCH, + LESS_THAN_EQUAL_TO_MATCH = _SegmentEnum$SegmentO.LESS_THAN_EQUAL_TO_MATCH; var _SegmentEnum$SegmentO2 = SegmentEnum.SegmentOperandValues, - LOWER_VALUE = _SegmentEnum$SegmentO2.LOWER_VALUE, - STARTING_ENDING_STAR_VALUE = _SegmentEnum$SegmentO2.STARTING_ENDING_STAR_VALUE, - STARTING_STAR_VALUE = _SegmentEnum$SegmentO2.STARTING_STAR_VALUE, - ENDING_STAR_VALUE = _SegmentEnum$SegmentO2.ENDING_STAR_VALUE, - REGEX_VALUE = _SegmentEnum$SegmentO2.REGEX_VALUE, - EQUAL_VALUE = _SegmentEnum$SegmentO2.EQUAL_VALUE, - GREATER_THAN_VALUE = _SegmentEnum$SegmentO2.GREATER_THAN_VALUE, - GREATER_THAN_EQUAL_TO_VALUE = _SegmentEnum$SegmentO2.GREATER_THAN_EQUAL_TO_VALUE, - LESS_THAN_VALUE = _SegmentEnum$SegmentO2.LESS_THAN_VALUE, - LESS_THAN_EQUAL_TO_VALUE = _SegmentEnum$SegmentO2.LESS_THAN_EQUAL_TO_VALUE; + LOWER_VALUE = _SegmentEnum$SegmentO2.LOWER_VALUE, + STARTING_ENDING_STAR_VALUE = _SegmentEnum$SegmentO2.STARTING_ENDING_STAR_VALUE, + STARTING_STAR_VALUE = _SegmentEnum$SegmentO2.STARTING_STAR_VALUE, + ENDING_STAR_VALUE = _SegmentEnum$SegmentO2.ENDING_STAR_VALUE, + REGEX_VALUE = _SegmentEnum$SegmentO2.REGEX_VALUE, + EQUAL_VALUE = _SegmentEnum$SegmentO2.EQUAL_VALUE, + GREATER_THAN_VALUE = _SegmentEnum$SegmentO2.GREATER_THAN_VALUE, + GREATER_THAN_EQUAL_TO_VALUE = _SegmentEnum$SegmentO2.GREATER_THAN_EQUAL_TO_VALUE, + LESS_THAN_VALUE = _SegmentEnum$SegmentO2.LESS_THAN_VALUE, + LESS_THAN_EQUAL_TO_VALUE = _SegmentEnum$SegmentO2.LESS_THAN_EQUAL_TO_VALUE; + function extractOperandValue(operand, regex) { return matchWithRegex(operand, regex) && matchWithRegex(operand, regex)[1]; } + function processValues(operandValue, tagValue) { // this is atomic, either both will be processed or none var processedOperandValue = parseFloat(operandValue, 10); var processedTagValue = parseFloat(tagValue, 10); + if (!processedOperandValue || !processedTagValue) { return { operandValue: operandValue, tagValue: tagValue }; - } - // now we have surity that both are numbers + } // now we have surity that both are numbers // now we can convert them independently to int type if they // are int rather than floats + + if (processedOperandValue === Math.floor(processedOperandValue)) { processedOperandValue = parseInt(processedOperandValue, 10); } + if (processedTagValue === Math.floor(processedTagValue)) { processedTagValue = parseInt(processedTagValue, 10); - } - // convert it back to string and return + } // convert it back to string and return + + return { operandValue: processedOperandValue.toString(), tagValue: processedTagValue.toString() }; } + function preProcessTagValue(tagValue) { if (tagValue === undefined) { tagValue = ''; } + if (DataTypeUtil.isBoolean(tagValue)) { if (tagValue) { tagValue = true; @@ -6751,25 +7405,28 @@ function preProcessTagValue(tagValue) { tagValue = false; } } + if (tagValue !== null) { tagValue = tagValue.toString(); } + return tagValue; } + function preProcessOperandValue(operand) { var operandType; var operandValue; var startingStar; - var endingStar; - // Pre process operand value + var endingStar; // Pre process operand value + if (matchWithRegex(operand, LOWER_MATCH)) { operandType = LOWER_VALUE; operandValue = extractOperandValue(operand, LOWER_MATCH); } else if (matchWithRegex(operand, WILDCARD_MATCH)) { operandValue = extractOperandValue(operand, WILDCARD_MATCH); startingStar = matchWithRegex(operandValue, STARTING_STAR); - endingStar = matchWithRegex(operandValue, ENDING_STAR); - // In case of wildcard, the operand type is further divided into contains, startswith and endswith + endingStar = matchWithRegex(operandValue, ENDING_STAR); // In case of wildcard, the operand type is further divided into contains, startswith and endswith + if (startingStar && endingStar) { operandType = STARTING_ENDING_STAR_VALUE; } else if (startingStar) { @@ -6777,6 +7434,7 @@ function preProcessOperandValue(operand) { } else if (endingStar) { operandType = ENDING_STAR_VALUE; } + operandValue = operandValue.replace(STARTING_STAR, '').replace(ENDING_STAR, ''); } else if (matchWithRegex(operand, REGEX_MATCH)) { operandType = REGEX_VALUE; @@ -6797,64 +7455,85 @@ function preProcessOperandValue(operand) { operandType = EQUAL_VALUE; operandValue = operand; } + return { operandType: operandType, operandValue: operandValue }; } + function operandCustomVariablesParser(operand, customVariables) { // Extract custom_variable_key and custom_variable_value from operand var _getKeyValue = getKeyValue(operand), - key = _getKeyValue.key, - value = _getKeyValue.value; + key = _getKeyValue.key, + value = _getKeyValue.value; + var operandKey = key; operand = value; + if (!customVariables.hasOwnProperty(key)) { // For handling ".*" regex case when key is not present in customVariables and matches regex is used. return false; } - var tagValue = customVariables[operandKey]; - // Pre process tag value + + var tagValue = customVariables[operandKey]; // Pre process tag value + tagValue = preProcessTagValue(tagValue); + var _preProcessOperandVal = preProcessOperandValue(operand), - operandType = _preProcessOperandVal.operandType, - operandValue = _preProcessOperandVal.operandValue; // Process both operand and tag values + operandType = _preProcessOperandVal.operandType, + operandValue = _preProcessOperandVal.operandValue; // Process both operand and tag values + + var processedValues = processValues(operandValue, tagValue); tagValue = processedValues.tagValue; return extractResult(operandType, processedValues.operandValue, tagValue); } + function operandUserParser(operand, customVariables) { var users = operand.split(','); + for (var i = 0; i < users.length; i++) { if (users[i].trim() === customVariables._vwoUserId) { return true; } } + return false; } + function extractResult(operandType, operandValue, tagValue) { var result; + switch (operandType) { case LOWER_VALUE: if (tagValue !== null) { result = operandValue.toLowerCase() === tagValue.toLowerCase(); } + break; + case STARTING_ENDING_STAR_VALUE: if (tagValue !== null) { result = tagValue.indexOf(operandValue) > -1; } + break; + case STARTING_STAR_VALUE: if (tagValue !== null) { result = tagValue.endsWith(operandValue); } + break; + case ENDING_STAR_VALUE: if (tagValue !== null) { result = tagValue.startsWith(operandValue); } + break; + case REGEX_VALUE: try { var pattern = new RegExp(operandValue, 'g'); @@ -6862,7 +7541,9 @@ function extractResult(operandType, operandValue, tagValue) { } catch (err) { result = false; } + break; + case GREATER_THAN_VALUE: if (tagValue !== null) { try { @@ -6871,7 +7552,9 @@ function extractResult(operandType, operandValue, tagValue) { result = false; } } + break; + case GREATER_THAN_EQUAL_TO_VALUE: if (tagValue !== null) { try { @@ -6880,7 +7563,9 @@ function extractResult(operandType, operandValue, tagValue) { result = false; } } + break; + case LESS_THAN_VALUE: if (tagValue !== null) { try { @@ -6889,7 +7574,9 @@ function extractResult(operandType, operandValue, tagValue) { result = false; } } + break; + case LESS_THAN_EQUAL_TO_VALUE: if (tagValue !== null) { try { @@ -6898,12 +7585,16 @@ function extractResult(operandType, operandValue, tagValue) { result = false; } } + break; + default: result = tagValue === operandValue; } + return result; } + module.exports = { extractOperandValue: extractOperandValue, processValues: processValues, @@ -6937,33 +7628,41 @@ module.exports = { * See the License for the specific language governing permissions and * limitations under the License. */ - var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var UrlEnum = __webpack_require__(/*! ../enums/UrlEnum */ "./lib/enums/UrlEnum.js"); + var _require = __webpack_require__(/*! ./FunctionUtil */ "./lib/utils/FunctionUtil.js"), - getRandomNumber = _require.getRandomNumber, - getCurrentTime = _require.getCurrentTime; + getRandomNumber = _require.getRandomNumber, + getCurrentTime = _require.getCurrentTime; + var SettingsFileUtil = { get: function get(accountId, sdkKey, userStorageService) { var config = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + if (!accountId || !sdkKey) { console.error('AccountId and sdkKey are required for fetching account settings. Aborting!'); return; } + var protocol = 'https'; var port; var hostname = UrlEnum.BASE_URL; var path = UrlEnum.SETTINGS_URL; + if (config.isViaWebhook) { path = UrlEnum.WEBHOOK_SETTINGS_URL; } + path += "?a=".concat(accountId, "&") + "i=".concat(sdkKey, "&") + "r=".concat(getRandomNumber(), "&") + "platform=".concat(Constants.PLATFORM, "&") + "".concat(Constants.SDK_QUERY_PARAM, "=").concat(Constants.SDK_NAME, "&") + "".concat(Constants.SDK_VERSION_QUERY_PARAM, "=").concat(Constants.SDK_VERSION); + if (config.hostname && config.path) { protocol = config.protocol; port = config.port; hostname = config.hostname || hostname; path = config.path || path; } + if (true) { if (typeof XMLHttpRequest === 'undefined') { return __webpack_require__(/*! ./FetchUtil */ "./lib/utils/FetchUtil.js").send({ @@ -6972,6 +7671,7 @@ var SettingsFileUtil = { userStorageService: userStorageService }); } + return __webpack_require__(/*! ./XhrUtil */ "./lib/utils/XhrUtil.js").send({ method: 'GET', url: "".concat(protocol, "://").concat(hostname).concat(path), @@ -6984,16 +7684,19 @@ var SettingsFileUtil = { var contentType = res.headers['content-type']; var error; var rawData = ''; + if (!/^application\/json/.test(contentType)) { error = "Invalid content-type.\nExpected application/json but received ".concat(contentType); } + if (error) { - console.error(error.message); - // Consume response data to free up memory + console.error(error.message); // Consume response data to free up memory + res.resume(); reject(error); return; } + res.setEncoding('utf8'); res.on('data', function (chunk) { rawData += chunk; @@ -7005,12 +7708,14 @@ var SettingsFileUtil = { handleHttpResponse: function handleHttpResponse(statusCode, rawData, resolve, reject) { try { var parsedData = JSON.parse(rawData); + if (statusCode !== 200) { var error = "VWO-SDK - [ERROR]: ".concat(getCurrentTime(), " Request failed for fetching account settings. Got Status Code: ").concat(statusCode, " and message: ").concat(rawData); console.error(error); reject(error); return; } + resolve(parsedData); } catch (err) { console.error("VWO-SDK - [ERROR]: ".concat(getCurrentTime(), " Request failed for fetching account settings - ").concat(err.message)); @@ -7044,13 +7749,15 @@ module.exports = SettingsFileUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var uuidv5 = __webpack_require__(/*! uuid/v5 */ "./node_modules/uuid/v5.js"); + var Constants = __webpack_require__(/*! ../constants */ "./lib/constants/index.js"); + var VWO_NAMESPACE = uuidv5(Constants.SEED_URL, uuidv5.URL); var UuidUtil = { generateFor: function generateFor(userId, accountId) { userId = "".concat(userId); // type-cast + var hash = "".concat(accountId); var userIdNamespace = UuidUtil.generate(hash, VWO_NAMESPACE); var uuidForUserIdAccountId = UuidUtil.generate(userId, userIdNamespace); @@ -7061,6 +7768,7 @@ var UuidUtil = { if (!name || !namespace) { return; } + return uuidv5(name, namespace); } }; @@ -7090,7 +7798,6 @@ module.exports = UuidUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var VWOFeatureFlags = { init: function init(settingsFile) { VWOFeatureFlags.isEventArchEnabled = settingsFile.isEventArchEnabled; @@ -7117,10 +7824,9 @@ module.exports = VWOFeatureFlags; /***/ (function(module, exports, __webpack_require__) { var _APIMethodArgumentsVa; -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** * Copyright 2019-2022 Wingify Software Pvt. Ltd. * @@ -7136,24 +7842,27 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e * See the License for the specific language governing permissions and * limitations under the License. */ - var DataTypeUtil = __webpack_require__(/*! ./DataTypeUtil */ "./lib/utils/DataTypeUtil.js"); + var DataTypeEnum = __webpack_require__(/*! ../enums/DataTypeEnum */ "./lib/enums/DataTypeEnum.js"); + var ApiEnum = __webpack_require__(/*! ../enums/ApiEnum */ "./lib/enums/ApiEnum.js"); + var GoalTypeEnum = __webpack_require__(/*! ../enums/GoalTypeEnum */ "./lib/enums/GoalTypeEnum.js"); + var APIMethodArgumentsValidationEnum = (_APIMethodArgumentsVa = {}, _defineProperty(_APIMethodArgumentsVa, ApiEnum.ACTIVATE, function (_ref) { var campaignKey = _ref.campaignKey, - userId = _ref.userId, - _ref$customVariables = _ref.customVariables, - customVariables = _ref$customVariables === void 0 ? {} : _ref$customVariables, - _ref$variationTargeti = _ref.variationTargetingVariables, - variationTargetingVariables = _ref$variationTargeti === void 0 ? {} : _ref$variationTargeti, - _ref$userStorageData = _ref.userStorageData, - userStorageData = _ref$userStorageData === void 0 ? {} : _ref$userStorageData, - _ref$shouldTrackRetur = _ref.shouldTrackReturningUser, - shouldTrackReturningUser = _ref$shouldTrackRetur === void 0 ? false : _ref$shouldTrackRetur, - _ref$metaData = _ref.metaData, - metaData = _ref$metaData === void 0 ? {} : _ref$metaData; + userId = _ref.userId, + _ref$customVariables = _ref.customVariables, + customVariables = _ref$customVariables === void 0 ? {} : _ref$customVariables, + _ref$variationTargeti = _ref.variationTargetingVariables, + variationTargetingVariables = _ref$variationTargeti === void 0 ? {} : _ref$variationTargeti, + _ref$userStorageData = _ref.userStorageData, + userStorageData = _ref$userStorageData === void 0 ? {} : _ref$userStorageData, + _ref$shouldTrackRetur = _ref.shouldTrackReturningUser, + shouldTrackReturningUser = _ref$shouldTrackRetur === void 0 ? false : _ref$shouldTrackRetur, + _ref$metaData = _ref.metaData, + metaData = _ref$metaData === void 0 ? {} : _ref$metaData; return [{ key: 'campaignKey', value: campaignKey, @@ -7185,20 +7894,20 @@ var APIMethodArgumentsValidationEnum = (_APIMethodArgumentsVa = {}, _definePrope }]; }), _defineProperty(_APIMethodArgumentsVa, ApiEnum.TRACK, function (_ref2) { var campaignKey = _ref2.campaignKey, - userId = _ref2.userId, - goalIdentifier = _ref2.goalIdentifier, - _ref2$customVariables = _ref2.customVariables, - customVariables = _ref2$customVariables === void 0 ? {} : _ref2$customVariables, - _ref2$variationTarget = _ref2.variationTargetingVariables, - variationTargetingVariables = _ref2$variationTarget === void 0 ? {} : _ref2$variationTarget, - _ref2$userStorageData = _ref2.userStorageData, - userStorageData = _ref2$userStorageData === void 0 ? {} : _ref2$userStorageData, - _ref2$goalTypeToTrack = _ref2.goalTypeToTrack, - goalTypeToTrack = _ref2$goalTypeToTrack === void 0 ? GoalTypeEnum.ALL : _ref2$goalTypeToTrack, - _ref2$shouldTrackRetu = _ref2.shouldTrackReturningUser, - shouldTrackReturningUser = _ref2$shouldTrackRetu === void 0 ? false : _ref2$shouldTrackRetu, - _ref2$metaData = _ref2.metaData, - metaData = _ref2$metaData === void 0 ? {} : _ref2$metaData; + userId = _ref2.userId, + goalIdentifier = _ref2.goalIdentifier, + _ref2$customVariables = _ref2.customVariables, + customVariables = _ref2$customVariables === void 0 ? {} : _ref2$customVariables, + _ref2$variationTarget = _ref2.variationTargetingVariables, + variationTargetingVariables = _ref2$variationTarget === void 0 ? {} : _ref2$variationTarget, + _ref2$userStorageData = _ref2.userStorageData, + userStorageData = _ref2$userStorageData === void 0 ? {} : _ref2$userStorageData, + _ref2$goalTypeToTrack = _ref2.goalTypeToTrack, + goalTypeToTrack = _ref2$goalTypeToTrack === void 0 ? GoalTypeEnum.ALL : _ref2$goalTypeToTrack, + _ref2$shouldTrackRetu = _ref2.shouldTrackReturningUser, + shouldTrackReturningUser = _ref2$shouldTrackRetu === void 0 ? false : _ref2$shouldTrackRetu, + _ref2$metaData = _ref2.metaData, + metaData = _ref2$metaData === void 0 ? {} : _ref2$metaData; return [{ key: 'campaignKey', value: campaignKey, @@ -7238,17 +7947,17 @@ var APIMethodArgumentsValidationEnum = (_APIMethodArgumentsVa = {}, _definePrope }]; }), _defineProperty(_APIMethodArgumentsVa, ApiEnum.IS_FEATURE_ENABLED, function (_ref3) { var campaignKey = _ref3.campaignKey, - userId = _ref3.userId, - _ref3$customVariables = _ref3.customVariables, - customVariables = _ref3$customVariables === void 0 ? {} : _ref3$customVariables, - _ref3$variationTarget = _ref3.variationTargetingVariables, - variationTargetingVariables = _ref3$variationTarget === void 0 ? {} : _ref3$variationTarget, - _ref3$userStorageData = _ref3.userStorageData, - userStorageData = _ref3$userStorageData === void 0 ? {} : _ref3$userStorageData, - _ref3$shouldTrackRetu = _ref3.shouldTrackReturningUser, - shouldTrackReturningUser = _ref3$shouldTrackRetu === void 0 ? false : _ref3$shouldTrackRetu, - _ref3$metaData = _ref3.metaData, - metaData = _ref3$metaData === void 0 ? {} : _ref3$metaData; + userId = _ref3.userId, + _ref3$customVariables = _ref3.customVariables, + customVariables = _ref3$customVariables === void 0 ? {} : _ref3$customVariables, + _ref3$variationTarget = _ref3.variationTargetingVariables, + variationTargetingVariables = _ref3$variationTarget === void 0 ? {} : _ref3$variationTarget, + _ref3$userStorageData = _ref3.userStorageData, + userStorageData = _ref3$userStorageData === void 0 ? {} : _ref3$userStorageData, + _ref3$shouldTrackRetu = _ref3.shouldTrackReturningUser, + shouldTrackReturningUser = _ref3$shouldTrackRetu === void 0 ? false : _ref3$shouldTrackRetu, + _ref3$metaData = _ref3.metaData, + metaData = _ref3$metaData === void 0 ? {} : _ref3$metaData; return [{ key: 'campaignKey', value: campaignKey, @@ -7280,16 +7989,16 @@ var APIMethodArgumentsValidationEnum = (_APIMethodArgumentsVa = {}, _definePrope }]; }), _defineProperty(_APIMethodArgumentsVa, ApiEnum.GET_FEATURE_VARIABLE_VALUE, function (_ref4) { var campaignKey = _ref4.campaignKey, - variableKey = _ref4.variableKey, - userId = _ref4.userId, - _ref4$customVariables = _ref4.customVariables, - customVariables = _ref4$customVariables === void 0 ? {} : _ref4$customVariables, - _ref4$variationTarget = _ref4.variationTargetingVariables, - variationTargetingVariables = _ref4$variationTarget === void 0 ? {} : _ref4$variationTarget, - _ref4$userStorageData = _ref4.userStorageData, - userStorageData = _ref4$userStorageData === void 0 ? {} : _ref4$userStorageData, - _ref4$metaData = _ref4.metaData, - metaData = _ref4$metaData === void 0 ? {} : _ref4$metaData; + variableKey = _ref4.variableKey, + userId = _ref4.userId, + _ref4$customVariables = _ref4.customVariables, + customVariables = _ref4$customVariables === void 0 ? {} : _ref4$customVariables, + _ref4$variationTarget = _ref4.variationTargetingVariables, + variationTargetingVariables = _ref4$variationTarget === void 0 ? {} : _ref4$variationTarget, + _ref4$userStorageData = _ref4.userStorageData, + userStorageData = _ref4$userStorageData === void 0 ? {} : _ref4$userStorageData, + _ref4$metaData = _ref4.metaData, + metaData = _ref4$metaData === void 0 ? {} : _ref4$metaData; return [{ key: 'campaignKey', value: campaignKey, @@ -7321,9 +8030,9 @@ var APIMethodArgumentsValidationEnum = (_APIMethodArgumentsVa = {}, _definePrope }]; }), _defineProperty(_APIMethodArgumentsVa, ApiEnum.PUSH, function (_ref5) { var tagKey = _ref5.tagKey, - tagValue = _ref5.tagValue, - userId = _ref5.userId, - customDimensionMap = _ref5.customDimensionMap; + tagValue = _ref5.tagValue, + userId = _ref5.userId, + customDimensionMap = _ref5.customDimensionMap; return [{ key: 'tagKey', value: tagKey, @@ -7341,8 +8050,8 @@ var APIMethodArgumentsValidationEnum = (_APIMethodArgumentsVa = {}, _definePrope value: customDimensionMap, type: DataTypeEnum.OBJECT }]; -}), _APIMethodArgumentsVa); -// both have same +}), _APIMethodArgumentsVa); // both have same + APIMethodArgumentsValidationEnum[ApiEnum.GET_VARIATION_NAME] = APIMethodArgumentsValidationEnum[ApiEnum.ACTIVATE]; var ValidateUtil = { isValidValue: function isValidValue(value) { @@ -7367,28 +8076,32 @@ var ValidateUtil = { var isValid = false; var args = APIMethodArgumentsValidationEnum[argsObj.method](argsObj); var validators = []; + for (var i = 0; i < args.length; i++) { var argConfig = args[i]; var argValue = argConfig.value; - var dataType = argConfig.type; - // let value; + var dataType = argConfig.type; // let value; switch (dataType) { case DataTypeEnum.NUMBER: validators.push(ValidateUtil.isValidNumber(argValue)); break; + case DataTypeEnum.STRING: validators.push(ValidateUtil.isValidString(argValue)); break; + case DataTypeEnum.BOOLEAN: validators.push(ValidateUtil.isValidBoolean(argValue)); break; // case DataTypeEnum.FUNCTION: // validators.push(ValidateUtil.isValidFunction(argValue)); // break; + case DataTypeEnum.OBJECT: validators.push(ValidateUtil.isValidObject(argValue)); break; + case DataTypeEnum.STRING_NULL_UNDEFINED_ARRAY: var value = ValidateUtil.isValidString(argValue) || DataTypeUtil.isUndefined(argValue) || DataTypeUtil.isNull(argValue) || DataTypeUtil.isArray(argValue); validators.push(value); @@ -7399,6 +8112,7 @@ var ValidateUtil = { // break; } } + isValid = validators.every(function (val) { return val; }); @@ -7431,22 +8145,27 @@ module.exports = ValidateUtil; * See the License for the specific language governing permissions and * limitations under the License. */ - var logging = __webpack_require__(/*! ../services/logging */ "./lib/services/logging/index.js"); + var LogLevelEnum = logging.LogLevelEnum; + var _require = __webpack_require__(/*! ./FunctionUtil */ "./lib/utils/FunctionUtil.js"), - getCurrentTime = _require.getCurrentTime; + getCurrentTime = _require.getCurrentTime; + var _require2 = __webpack_require__(/*! ./DataTypeUtil */ "./lib/utils/DataTypeUtil.js"), - isObject = _require2.isObject, - isFunction = _require2.isFunction; + isObject = _require2.isObject, + isFunction = _require2.isFunction; + var XhrUtil = { _getStoredSettings: function _getStoredSettings(userStorageService) { var isStoredData = false; var parsedSettings; + if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) { try { var settings = userStorageService.getSettings(); parsedSettings = JSON.parse(settings); + if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) { var info = "VWO-SDK - [INFO]: ".concat(getCurrentTime(), " VWO settings found in Storage Service."); console.info(info); @@ -7460,10 +8179,12 @@ var XhrUtil = { } } catch (err) { var _error = "VWO-SDK - [ERROR]: ".concat(getCurrentTime(), " VWO settings found in Storage Service is not valid. ").concat(err); + console.error(_error); isStoredData = false; } } + return { isStoredData: isStoredData, parsedSettings: parsedSettings @@ -7471,24 +8192,29 @@ var XhrUtil = { }, send: function send() { var _this = this; + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - method = _ref.method, - url = _ref.url, - payload = _ref.payload, - userStorageService = _ref.userStorageService, - customHeaders = _ref.customHeaders, - logger = _ref.logger; + method = _ref.method, + url = _ref.url, + payload = _ref.payload, + userStorageService = _ref.userStorageService, + customHeaders = _ref.customHeaders, + logger = _ref.logger; + if (!url || !method) { return; } + return new Promise(function (resolve, reject) { var _XhrUtil$_getStoredSe = XhrUtil._getStoredSettings(userStorageService), - isStoredData = _XhrUtil$_getStoredSe.isStoredData, - parsedSettings = _XhrUtil$_getStoredSe.parsedSettings; + isStoredData = _XhrUtil$_getStoredSe.isStoredData, + parsedSettings = _XhrUtil$_getStoredSe.parsedSettings; + if (isStoredData) { resolve(parsedSettings); } else { var xhr = new XMLHttpRequest(); + _this.xhrHandler(xhr, method, url, payload, userStorageService, customHeaders, logger, resolve, reject); } }); @@ -7496,23 +8222,21 @@ var XhrUtil = { // send request function definition (to allow for retries) sendRequest: function sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject) { var _this2 = this; + var delay = 1000 * (retries + 1); - var xhr = new XMLHttpRequest(); + var xhr = new XMLHttpRequest(); // Configure timeout - // Configure timeout xhr.timeout = 5000; // Set timeout to 5 seconds (5000 ms) - // onload event + xhr.onload = function () { // retry if error and less than max retries if (xhr.status < 200 || xhr.status >= 300) { if (retries < maxRetries) { - retries++; + retries++; // log retried times - // log retried times - logger.log(LogLevelEnum.ERROR, "Retrying with Status Code : ".concat(xhr.status, ", and Response : ").concat(xhr.responseText)); + logger.log(LogLevelEnum.ERROR, "Retrying with Status Code : ".concat(xhr.status, ", and Response : ").concat(xhr.responseText)); // call send request again, after delay - // call send request again, after delay setTimeout(function () { _this2.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject); }, delay); @@ -7525,9 +8249,9 @@ var XhrUtil = { // resolve the promise if all well resolve(xhr.responseText); } - }; + }; // onerror event + - // onerror event xhr.onerror = function () { if (retries < maxRetries) { retries++; @@ -7538,9 +8262,9 @@ var XhrUtil = { } else { reject("Network error: ".concat(xhr.statusText, ", Status Code: ").concat(xhr.status)); } - }; + }; // ontimeout event + - // ontimeout event xhr.ontimeout = function () { if (retries < maxRetries) { retries++; @@ -7551,37 +8275,45 @@ var XhrUtil = { } else { reject("Timeout error: ".concat(xhr.statusText, ", Status Code: ").concat(xhr.status)); } - }; + }; // open connection and add headers if any, and then send + - // open connection and add headers if any, and then send xhr.open(method, url, true); + for (var newHeaderName in customHeaders) { if (customHeaders.hasOwnProperty(newHeaderName)) { xhr.setRequestHeader(newHeaderName, customHeaders[newHeaderName]); } } + xhr.send(JSON.stringify(payload)); }, xhrHandler: function xhrHandler(xhr, method, url, payload, userStorageService) { var _this3 = this; + var customHeaders = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; var logger = arguments.length > 6 ? arguments[6] : undefined; var resolve = arguments.length > 7 ? arguments[7] : undefined; var reject = arguments.length > 8 ? arguments[8] : undefined; + if (method === 'GET') { try { xhr.onload = function () { _this3.xhrOnLoad(xhr, userStorageService, resolve); }; + xhr.onerror = function () { _this3.xhrOnError(xhr, reject); }; + xhr.open(method, url); + for (var headerName in customHeaders) { if (customHeaders.hasOwnProperty(headerName)) { xhr.setRequestHeader(headerName, customHeaders[headerName]); } } + xhr.send(); } catch (e) { console.log(e.message); @@ -7589,18 +8321,19 @@ var XhrUtil = { } else if (method === 'POST') { // retry params var retries = 0; - var maxRetries = 5; + var maxRetries = 5; // send request - // send request this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject); } }, xhrOnLoad: function xhrOnLoad(xhr, userStorageService, resolve) { try { var parsedXhrResponse = JSON.parse(xhr.response); + if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) { userStorageService.setSettings(xhr.response); } + resolve(parsedXhrResponse); } catch (err) { console.error(err); @@ -8605,16 +9338,14 @@ function bytesToUuid(buf, offset) { var i = offset || 0; var bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 - return ([ - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]] - ]).join(''); + return ([bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]]]).join(''); } module.exports = bytesToUuid; diff --git a/dist/vwo-javascript-sdk.js.map b/dist/vwo-javascript-sdk.js.map index cb4b47d..d54f9bc 100644 --- a/dist/vwo-javascript-sdk.js.map +++ b/dist/vwo-javascript-sdk.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://vwoSdk/webpack/universalModuleDefinition","webpack://vwoSdk/webpack/bootstrap","webpack://vwoSdk/./lib/VWO.js","webpack://vwoSdk/./lib/api/activate.js","webpack://vwoSdk/./lib/api/getFeatureVariableValue.js","webpack://vwoSdk/./lib/api/getVariation.js","webpack://vwoSdk/./lib/api/index.js","webpack://vwoSdk/./lib/api/isFeatureEnabled.js","webpack://vwoSdk/./lib/api/push.js","webpack://vwoSdk/./lib/api/track.js","webpack://vwoSdk/./lib/constants/index.js","webpack://vwoSdk/./lib/core/BucketingService.js","webpack://vwoSdk/./lib/core/SegmentEvaluator.js","webpack://vwoSdk/./lib/core/VariationDecider.js","webpack://vwoSdk/./lib/enums/AnsiColorEnum.js","webpack://vwoSdk/./lib/enums/ApiEnum.js","webpack://vwoSdk/./lib/enums/CampaignTypeEnum.js","webpack://vwoSdk/./lib/enums/DataTypeEnum.js","webpack://vwoSdk/./lib/enums/EventEnum.js","webpack://vwoSdk/./lib/enums/FeatureVariableTypeEnum.js","webpack://vwoSdk/./lib/enums/FileNameEnum.js","webpack://vwoSdk/./lib/enums/GoalTypeEnum.js","webpack://vwoSdk/./lib/enums/HeadersEnum.js","webpack://vwoSdk/./lib/enums/HooksEnum.js","webpack://vwoSdk/./lib/enums/LogLevelEnum.js","webpack://vwoSdk/./lib/enums/StatusEnum.js","webpack://vwoSdk/./lib/enums/UrlEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandTypesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandValueTypeRegexesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandValuesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperatorTypesEnum.js","webpack://vwoSdk/./lib/enums/segment/index.js","webpack://vwoSdk/./lib/index.js","webpack://vwoSdk/./lib/schemas/SettingsFileSchema.js","webpack://vwoSdk/./lib/services/EventQueue.js","webpack://vwoSdk/./lib/services/HooksManager.js","webpack://vwoSdk/./lib/services/SettingsFileManager.js","webpack://vwoSdk/./lib/services/UrlService.js","webpack://vwoSdk/./lib/services/UsageStats.js","webpack://vwoSdk/./lib/services/logging/ConsoleLogManager.js","webpack://vwoSdk/./lib/services/logging/LoggingManager.js","webpack://vwoSdk/./lib/services/logging/index.js","webpack://vwoSdk/./lib/utils/CampaignUtil.js","webpack://vwoSdk/./lib/utils/DataTypeUtil.js","webpack://vwoSdk/./lib/utils/DecisionUtil.js","webpack://vwoSdk/./lib/utils/EventDispatcherUtil.js","webpack://vwoSdk/./lib/utils/FeatureUtil.js","webpack://vwoSdk/./lib/utils/FetchUtil.js","webpack://vwoSdk/./lib/utils/FunctionUtil.js","webpack://vwoSdk/./lib/utils/HttpXMLUtil.js","webpack://vwoSdk/./lib/utils/ImpressionUtil.js","webpack://vwoSdk/./lib/utils/LogMessageUtil.js","webpack://vwoSdk/./lib/utils/ObjectUtil.js","webpack://vwoSdk/./lib/utils/SegmentUtil.js","webpack://vwoSdk/./lib/utils/SettingsFileUtil.js","webpack://vwoSdk/./lib/utils/UuidUtil.js","webpack://vwoSdk/./lib/utils/VWOFeatureFlags.js","webpack://vwoSdk/./lib/utils/ValidateUtil.js","webpack://vwoSdk/./lib/utils/XhrUtil.js","webpack://vwoSdk/./node_modules/murmurhash/murmurhash.js","webpack://vwoSdk/./node_modules/superstruct/lib/index.es.js","webpack://vwoSdk/./node_modules/uuid/lib/bytesToUuid.js","webpack://vwoSdk/./node_modules/uuid/lib/sha1-browser.js","webpack://vwoSdk/./node_modules/uuid/lib/v35.js","webpack://vwoSdk/./node_modules/uuid/v5.js"],"names":["api","require","FileNameEnum","ApiEnum","DataTypeUtil","FunctionUtil","VWOFeatureFlags","EventQueue","SettingsFileService","logging","HooksManager","UrlService","UsageStats","BatchEventsDispatcher","customEventUtil","BatchEventsQueue","LogLevelEnum","LogMessageEnum","LogMessageUtil","file","VWO","_this","config","arguments","length","undefined","_classCallCheck","getVariation","getVariationName","userStorageService","logger","returnPromiseFor","asyncStorageConfig","optOut","redisStorage","settingsFileManager","isSettingsFileValid","log","ERROR","build","ERROR_MESSAGES","SETTINGS_FILE_INVALID","INFO","INFO_MESSAGES","CONFIG_VALID","init","eventQueue","usageStats","SettingsFileManager","checkAndPoll","isDevelopmentMode","collectUsageStats","getConfig","processSettingsFile","SDK_INITIALIZED","settingsFile","_createClass","key","value","activate","campaignKey","userId","_this2","options","self","isObject","CONFIG_ASYNC_RETURN_PROMISE","method","ACTIVATE","Promise","resolve","API_NOT_ENABLED","then","data","variationName","all","CONFIG_RETURN_PROMISE","responseCallback","_error","_response","apiResponse","err","message","_this3","GET_VARIATION_NAME","track","campaignSpecifier","goalIdentifier","_this4","TRACK","trackResponse","counter","isEventArchEnabled","isArray","isUndefined","isNull","objectValues","filter","Boolean","some","isFeatureEnabled","_this5","IS_FEATURE_ENABLED","isFeatureEnabledApiResponse","getFeatureVariableValue","variableKey","_this6","GET_FEATURE_VARIABLE_VALUE","typeCastedValue","push","tagKey","tagValue","_this7","customDimensionMap","API_BAD_PARAMETERS","PUSH","setOptOut","_this8","OPT_OUT_API_CALLED","_destroyInstanceVariables","batchEventsQueue","flushEvents","_this9","accountId","getSettingsFile","getAndUpdateSettingsFile","sdkKey","module","exports","Constants","DecisionUtil","CampaignUtil","ImpressionUtil","ValidateUtil","EventEnum","Activate","vwoInstance","areParamsValid","customVariables","variationTargetingVariables","userStorageData","shouldTrackReturningUser","metaData","userAgent","userIpAddress","visitorUserAgent","areValidParamsForAPIMethod","campaign","getCampaign","hasOwnProperty","isMAB","status","STATUS_RUNNING","WARN","WARNING_MESSAGES","CAMPAIGN_NOT_RUNNING","isAbCampaign","API_NOT_APPLICABLE","campaignType","type","result","isPromise","_validateAndReturnVariation","variationId","isStoredVariation","isValidValue","DECISION_NO_VARIATION_ALLOTED","CAMPAIGN_USER_ALREADY_TRACKED","batchEvents","properties","buildBatchEventForTrackingUser","id","enqueue","getEventsBaseProperties","VWO_VARIATION_SHOWN","getUsageStats","payload","getTrackUserPayloadData","process","buildEventForTrackingUser","FeatureUtil","ObjectUtil","GetFeatureVariableValue","apiName","_validateAndReturnFeaureVariable","variable","variation","FEATURE_STATUS","isFeatureRolloutCampaign","getVariableForFeature","isFeatureTestCampaign","getVariableValueForVariation","areObjectKeys","FEATURE_VARIABLE_VALUE","variableValue","FEATURE_VARIABLE_DEFAULT_VALUE","VARIABLE_NOT_FOUND","getTypeCastVariableValue","GetVariation","IsFeatureEnabled","_validateAndReturnFeatureEnabled","Push","_ref","PUSH_INVALID_PARAMS","TAG_KEY_LENGTH_EXCEEDED","TAG_VALUE_LENGTH_EXCEEDED","Object","keys","forEach","isString","JSON","stringify","buildBatchEventForPushing","VWO_SYNC_VISITOR_PROP","getPushPayloadData","success","events","customDimensionKeys","buildEventForPushing","assign","GoalTypeEnum","_require","Track","GOAL_TYPE_TO_TRACK_DEFAULT","ALL","GOAL_IDENTIFIER_SEPERATOR","revenueValue","goalTypeToTrack","eventProperties","includes","revenuePropList","Set","campaigns","isBoolean","getCampaignsForKeys","getCampaignsForGoal","metricMap","areGlobalGoals","trackCampaignGoal","areAllPromises","values","every","item","dataArray","index","ans","_validateAndReturnTrackValue","_defineProperty","k","getTrackGoalPayloadData","_saveUserData","campaignId","goal","getCampaignGoal","TRACK_API_GOAL_NOT_FOUND","REVENUE","mca","revenueProp","logIncorrectParamsForRevenueGoal","add","_validateAndReturnTrackEvent","storedGoalIdentifier","identifiers","split","CAMPAIGN_GOAL_ALREADY_TRACKED","buildBatchEventForTrackingGoal","buildEventForTrackingGoal","TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL","packageFile","name","SDK_NAME","version","SDK_VERSION","PLATFORM","SEED_VALUE","MAX_TRAFFIC_PERCENT","MAX_TRAFFIC_VALUE","MAX_EVENTS_PER_REQUEST","DEFAULT_EVENTS_PER_REQUEST","DEFAULT_REQUEST_TIME_INTERVAL","SEED_URL","HTTP_PROTOCOL","HTTPS_PROTOCOL","SDK_QUERY_PARAM","SDK_VERSION_QUERY_PARAM","Hasher","getLogger","BucketingService","_generateBucketValue","hashValue","maxValue","multiplier","ratio","Math","pow","multipliedValue","floor","_getVariation","variations","bucketValue","i","startVariationAllocation","endVariationAllocation","_getBucketValueForUser","seed","disableLog","v3","DEBUG","DEBUG_MESSAGES","USER_HASH_BUCKET_VALUE","isUserPartOfCampaign","trafficAllocation","percentTraffic","valueAssignedToUser","getBucketingSeed","isUserPart","USER_CAMPAIGN_ELIGIBILITY","bucketUserToVariation","isNB","getAll","isNBv2","isOB","isOBv2","_generateHashValue","USER_CAMPAIGN_BUCKET_VALUES","calculateBucketValue","SegmentEnum","getKeyValue","_require2","operandCustomVariablesParser","operandUserParser","_SegmentEnum$SegmentO","SegmentOperatorTypes","AND","OR","NOT","_SegmentEnum$SegmentO2","SegmentOperandTypes","CUSTOM_VARIABLE","USER","SegmentEvaluator","evaluator","dsl","_getKeyValue","operator","subDsl","list","val","disableLogs","SEGMENTATION_SKIPPED","SEGMENTATION_ERROR","Bucketer","VariationDecider","getVariationAllotted","response","USER_ID_INVALID","getVariationOfCampaignForUser","USER_NOT_PART_OF_CAMPAIGN","USER_VARIATION_STATUS","concat","AnsiColorEnum","BOLD","CYAN","GREEN","LIGHTBLUE","RED","RESET","WHITE","YELLOW","LAUNCH","CampaignTypeEnum","FEATURE_TEST","FEATURE_ROLLOUT","AB","DataTypeEnum","NUMBER","STRING","BOOLEAN","OBJECT","FeatureVariableTypeEnum","DOUBLE","INTEGER","LIB_PATH","CORE_PATH","UTIL_PATH","SERVICES_PATH","INDEX","API","ConsoleLogManager","LoggingManager","EventDispatcher","EventDispatcherUtil","Functionutil","UuidUtil","HttpHandlerUtil","HttpImageUtil","HttpXMLUtil","UsageStatsUtil","CUSTOM","HeadersEnum","USER_AGENT","IP","HooksEnum","DECISION_TYPES","CAMPAIGN_DECISION","LogNumberLevel","_0","_1","_2","_3","_4","NOTSET","LogLevelColorInfoEnum","_LogLevelColorInfoEnu","LogLevelInfoEnum","_LogLevelInfoEnum","PASSED","FAILED","UrlEnum","BASE_URL","SETTINGS_URL","WEBHOOK_SETTINGS_URL","TRACK_USER","TRACK_GOAL","BATCH_EVENTS","EVENTS","LOWER","LOWER_MATCH","WILDCARD","WILDCARD_MATCH","REGEX","REGEX_MATCH","STARTING_STAR","ENDING_STAR","GREATER_THAN_MATCH","GREATER_THAN_EQUAL_TO_MATCH","LESS_THAN_MATCH","LESS_THAN_EQUAL_TO_MATCH","LOWER_VALUE","STARTING_ENDING_STAR_VALUE","STARTING_STAR_VALUE","ENDING_STAR_VALUE","REGEX_VALUE","EQUAL_VALUE","GREATER_THAN_VALUE","GREATER_THAN_EQUAL_TO_VALUE","LESS_THAN_VALUE","LESS_THAN_EQUAL_TO_VALUE","SegmentOperandValueTypeRegexes","SegmentOperandValues","SettingsFileUtil","setLogHandler","setLogLevel","logError","parameter","CONFIG_PARAMETER_INVALID","Error","logInfo","CONFIG_PARAMETER_USED","console","info","getCurrentTime","setLogger","get","launch","sdkConfig","cloneObject","level","pollingInterval","isNumber","integrations","CONFIG_CORRUPTED","setLogColorMode","haveColoredLogs","isFunction","CONFIG_CUSTOM_LOGGER_USED","CONFIG_LOG_LEVEL_SET","CONFIG_DEVELOPMENT_MODE_STATUS","validate","number","string","boolean","array","object","optional","union","record","campaignGoalSchema","identifier","variableObjectSchema","campaignVariationSchema","weight","changes","segments","variables","campaignObjectSchema","isBucketingSeedEnabled","goals","isForcedVariationEnabled","isUserListEnabled","groupSchema","et","p","wt","groupName","settingsFileSchema","campaignGroups","collectionPrefix","groups","validateSettingsFile","settings","_validate","_validate2","_slicedToArray","error","running","queue","customHeaders","visitor_ua","encodeURIComponent","visitor_ip","_ref2","eventName","callback","dispatchPostCall","dispatchGetCall","EVENT_QUEUE","queueType","event","executeNext","shift","execute","_configObj","_clonedSettingsFile","_setVariationBucketing","setVariationAllocation","isValidSettingsFile","SETTINGS_FILE_CORRUPTED","lastSettingsFile","setInterval","latestSettingsFile","POLLING_SUCCESS","stringifiedLatestSettingsFile","updateSettingsFile","POLLING_SETTINGS_FILE_UPDATED","POLLING_SETTINGS_FILE_NOT_UPDATED","_e","POLLING_FAILED","POLLING_SETTINGS_FILE_REGISTERED","SETTINGS_FILE_PROCESSED","_reject","isViaWebhook","_err","API_HAS_CORRUPTED_SETTINGS_FILE","getBaseUrl","baseUrl","LogManager","Number","logLevel","prefix","isColoredLogEnabled","shouldLog","logMessage","consoleLog","targetLogLevel","logArguments","apply","warn","globalLogLevel","globalLogHandler","_customLog","debug","getLogLevel","getLogColorMode","_getVariationBucketRange","variationWeight","startRange","ceil","min","getCampaignBasedOnId","parseInt","scaleVariationWeights","totalWeight","reduce","acc","campaignKeys","CAMPAIGN_NOT_FOUND_FOR_GOAL","getCampaignStatus","toLowerCase","isCampaignRunning","validateCampaign","numberOfVariations","stepFactor","currentAllocation","assignRangeValues","VARIATION_RANGE_ALLOCATION","start","end","setCampaignAllocation","desiredCampaignGoal","getCampaignVariation","desiredVariation","getControlForCampaign","control","isPartOfGroup","prototype","call","groupId","getGroupCampaigns","_toStringValue","toString","StatusEnum","RandomAlgo","SegmentationTypeEnum","WHITELISTING","PRE_SEGMENTATION","isTrackUserAPI","isTrackGoalAPI","newGoalIdentifier","vwoUserId","generateFor","USER_UUID","uuid","decision","campaignName","sdkVersion","source","_CampaignUtil$isPartO","_vwoUserId","whitelistedVariation","_checkForWhitelisting","storedVariation","_checkForUserStorage","variationWithoutStorageLookup","evaluateAndGetVariationWithoutStorage","_checkForPreSegmentation","campaignList","isWhitelistedOrStoredVariation","_checkForStorageAndWhitelisting","MEG_CALLED_CAMPAIGN_NOT_WINNER","inEligibleCampaignKeys","eligibleCampaignKeys","_DecisionUtil$getElig","getEligbleCampaigns","eligibleCampaigns","inEligibleCampaigns","MEG_ELIGIBLE_CAMPAIGNS","slice","inEligibleText","noOfEligibleCampaigns","noOfGroupCampaigns","megAlgoNumber","evaluateTrafficAndGetVariation","_normalizeAndFindWinningCampaign","_advancedAlgoFindWinningCampaign","_evaluateWhitelisting","targetedVariations","SEGMENTATION_STATUS","segmentationType","_getStoredUserData","userStorageMap","USER_STORAGE_SERVICE_NOT_CONFIGURED","GETTING_DATA_USER_STORAGE_SERVICE","finalData","USER_STORAGE_SERVICE_GET_FAILED","isSaved","set","SETTING_DATA_USER_STORAGE_SERVICE","USER_STORAGE_SERVICE_SET_FAILED","calledCampaign","otherCampaignWinner","groupCampaign","OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE","preSegmentationResult","_VariationDecider$get","USER_VARIATION_ALLOCATION_STATUS","fromUserStorageService","isUserWhitelisted","whitelistingResult","variationString","WHITELISTING_SKIPPED","userData","_processAfterGettingFromStorage","USER_STORAGE_SERVICE_NO_STORED_DATA","GOT_STORED_VARIATION","CAMPAIGN_NOT_ACTIVATED","reason","isPartOfCampaign","shortlistedCampaigns","winnerCampaign","MEG_GOT_WINNER_CAMPAIGN","found","priorityOrder","j","participatingCampaignList","clonedCampaign","excludedProperties","parsedUrl","queryParams","convertObjectKeysToString","sendCall","successCallback","endPoint","url","IMPRESSION_FAILED","handleGetResponse","baseParams","account_id","params","parse","tags","u","mainKeys","experiment_id","combination","IMPRESSION_SUCCESS","XMLHttpRequest","send","handlePostResponse","en","d","visitor","props","vwo_fs_environment","IMPRESSION_SUCCESS_FOR_EVENT_ARCH","a","variableData","variationVariable","variableType","isNaN","UNABLE_TO_CAST_VALUE","parseFloat","FetchUtil","_getStoredSettings","isStoredData","parsedSettings","getSettings","warning","_ref$customHeaders","reject","_FetchUtil$_getStored","headers","body","fetch","res","text","jsonData","setSettings","obj","clonedObj","getRandomNumber","random","getCurrentUnixTimestamp","Date","getCurrentUnixTimestampInMillis","matchWithRegex","regex","match","RegExp","SEGMENTATION_REGEX_CREATION_FAILED","toISOString","prop","indexOf","noop","printLog","errorCallback","isCallbackCalled","handleGetCall","xhr","open","headerName","setRequestHeader","getAllResponseHeaders","onload","responseText","statusText","onerror","getPrimaryProperties","configObj","sId","getBaseProperties","getReportingProperties","ap","IMPRESSION_FOR_PUSH","_getStringifiedLogProperties","ed","IMPRESSION_FOR_TRACK_USER","revenue","goalId","IMPRESSION_FOR_TRACK_GOAL","env","eTime","getEventBasePayload","vwo_sdkName","vwo_sdkVersion","vwo_envKey","msgId","visId","sessionId","time","isFirst","IMPRESSION_FOR_EVENT_ARCH_TRACK_USER","metric","IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL","goalName","vwoMeta","size","isCustomEvent","IMPRESSION_FOR_EVENT_ARCH_PUSH","property","logProperties","nargs","template","replace","isKey","map","extractOperandValue","operand","processValues","operandValue","processedOperandValue","processedTagValue","preProcessTagValue","preProcessOperandValue","operandType","startingStar","endingStar","operandKey","_preProcessOperandVal","processedValues","extractResult","users","trim","endsWith","startsWith","pattern","test","protocol","port","hostname","path","handleHttpRequest","statusCode","contentType","rawData","resume","setEncoding","on","chunk","handleHttpResponse","parsedData","uuidv5","VWO_NAMESPACE","URL","hash","userIdNamespace","generate","uuidForUserIdAccountId","desiredUuid","toUpperCase","namespace","APIMethodArgumentsValidationEnum","_APIMethodArgumentsVa","_ref$customVariables","_ref$variationTargeti","_ref$userStorageData","_ref$shouldTrackRetur","_ref$metaData","_ref2$customVariables","_ref2$variationTarget","_ref2$userStorageData","_ref2$goalTypeToTrack","_ref2$shouldTrackRetu","_ref2$metaData","STRING_NULL_UNDEFINED_ARRAY","_ref3","_ref3$customVariables","_ref3$variationTarget","_ref3$userStorageData","_ref3$shouldTrackRetu","_ref3$metaData","_ref4","_ref4$customVariables","_ref4$variationTarget","_ref4$userStorageData","_ref4$metaData","_ref5","isValidString","isValidNumber","isValidFunction","isValidBoolean","isValidObject","argsObj","isValid","args","validators","argConfig","argValue","dataType","XhrUtil","_XhrUtil$_getStoredSe","xhrHandler","sendRequest","retries","maxRetries","delay","timeout","setTimeout","ontimeout","newHeaderName","xhrOnLoad","xhrOnError","e","parsedXhrResponse"],"mappings":"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ACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,cAAc,OAAO;AACrB;AACA;AACA;;AAEA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,MAAM,IAA6B;AACnC;AACA,GAAG,MAAM,sBAON;AACH,CAAC;;;;;;;;;;;;;ACnID;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,aAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,eAAe,6BAA6B;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,kDAAkD,KAAK,IAAI,wBAAwB,eAAe,SAAS,kBAAkB,sBAAsB;AACnJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD,aAAa;AACjE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAmC;;AAEnC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,OAAO;AACjC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,OAAO,YAAY,IAAI,GAAG,IAAI;AACxD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,OAAO,aAAa,cAAc;AAC5D;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD,aAAa;AACjE;;AAEA;AACA;AACA;AACA;;AAEA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mCAAmC;AACtD;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,WAAW;AACzC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,SAAS,GAAG,WAAW;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,6BAA6B,EAAE,kBAAkB;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,EAAE,kBAAkB;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,SAAS,GAAG,WAAW;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB,oCAAoC;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,EAAE,gBAAgB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,qCAAqC;AACxD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,yBAAyB,QAAQ,MAAM;AAChF;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEgU;AAChU;;;;;;;;;;;;AC7wBA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACzBA;AACA;AACa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAkD;AAClD;AACA,mBAAmB,gBAAgB;AACnC;;AAEA;;AAEA;AACA;AACA;;AAEA,eAAe,KAAK;AACpB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB;AACpB;;AAEA,eAAe,KAAK;AACpB;;AAEA,iBAAiB,MAAM;AACvB,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxFA,kBAAkB,mBAAO,CAAC,6DAAe;;AAEzC;AACA;AACA;AACA,4BAA4B,EAAE;AAC9B;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,UAAU;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACxDA,UAAU,mBAAO,CAAC,oDAAc;AAChC,WAAW,mBAAO,CAAC,2DAAY;AAC/B","file":"vwo-javascript-sdk.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\t// CommonJS2\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\t// AMD\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\t// CommonJS\n\telse if(typeof exports === 'object')\n\t\texports[\"vwoSdk\"] = factory();\n\t// Root\n\telse\n\t\troot[\"vwoSdk\"] = factory();\n})(this, 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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = \"./lib/index.js\");\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst api = require('./api');\n\nconst FileNameEnum = require('./enums/FileNameEnum');\nconst ApiEnum = require('./enums/ApiEnum');\n\nconst DataTypeUtil = require('./utils/DataTypeUtil');\nconst FunctionUtil = require('./utils/FunctionUtil');\nconst VWOFeatureFlags = require('./utils/VWOFeatureFlags');\n\nconst EventQueue = require('./services/EventQueue');\nconst SettingsFileService = require('./services/SettingsFileManager');\nconst logging = require('./services/logging');\nconst HooksManager = require('./services/HooksManager');\nconst UrlService = require('./services/UrlService');\nconst UsageStats = require('./services/UsageStats');\n\nlet BatchEventsDispatcher;\nlet customEventUtil;\nlet BatchEventsQueue;\n\nif (typeof process.env !== 'undefined') {\n BatchEventsQueue = require('./services/BatchEventsQueue');\n BatchEventsDispatcher = require('./utils/BatchEventsDispatcher').dispatch;\n customEventUtil = require('./utils/CustomEventUtil');\n}\n\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst file = FileNameEnum.VWO;\n\nclass VWO {\n // Setting various services on the instance to be accessible by its member functions\n constructor(config = {}) {\n this.getVariation = this.getVariationName; // to be backward compatible\n this.userStorageService = config.userStorageService;\n this.logger = config.logger;\n this.returnPromiseFor = config.returnPromiseFor;\n this.asyncStorageConfig = config.asyncStorageConfig;\n this.optOut = false;\n\n if (this.userStorageService === undefined && config.asyncStorageConfig) {\n // replace the userStorageService with the redisObject passed in asyncStorageConfig\n this.userStorageService = config.asyncStorageConfig.redisStorage;\n config.userStorageService = this.userStorageService;\n }\n let settingsFileManager = new SettingsFileService(config);\n\n // Validate the config file i.e. check if required fields contain appropriate data\n if (!settingsFileManager.isSettingsFileValid()) {\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_INVALID, {\n file\n })\n );\n\n return;\n }\n\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_VALID, {\n file\n })\n );\n\n // Initialize Hooks manager so that callbacks can be invoked\n HooksManager.init(config);\n\n // Setup event quque for sending impressions to VWO server\n this.eventQueue = new EventQueue();\n this.usageStats = new UsageStats();\n\n this.SettingsFileManager = settingsFileManager;\n settingsFileManager.checkAndPoll(); // Checks if pollingInterval is passed then starts polling settingsFile\n\n if (!config.isDevelopmentMode) {\n this.usageStats.collectUsageStats(settingsFileManager.getConfig());\n }\n\n // Only for Node.js SDK\n if (typeof process.env !== 'undefined') {\n if (config.batchEvents) {\n const accountId = settingsFileManager.getSettingsFile().accountId;\n const sdkKey = settingsFileManager.getSettingsFile().sdkKey;\n\n this.batchEventsQueue = new BatchEventsQueue(\n Object.assign(\n {},\n config.batchEvents,\n { isDevelopmentMode: config.isDevelopmentMode },\n {\n accountId,\n dispatcher: (events, callback) =>\n BatchEventsDispatcher(\n {\n ev: events\n },\n callback,\n Object.assign(\n {},\n {\n a: accountId\n },\n this.usageStats.getUsageStats()\n ),\n sdkKey\n )\n }\n )\n );\n\n this.batchEventsQueue.flushAndClearTimer.bind(this.batchEventsQueue);\n }\n }\n\n // Process settingsFile for various things. For eg: assign bucket range to variation, etc.\n this.SettingsFileManager.processSettingsFile();\n\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SDK_INITIALIZED, {\n file\n })\n );\n\n this.UrlService = UrlService.init(config.settingsFile);\n this.VWOFeatureFlags = VWOFeatureFlags.init(config.settingsFile);\n }\n\n // PUBLIC METHODS\n\n /**\n * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server\n *\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\n activate(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.ACTIVATE\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n resolve(null);\n } else {\n return api.activate(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.variationName);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.activate || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.ACTIVATE\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n resolve(null);\n } else {\n let variationName;\n options.responseCallback = (_error, _response) => {\n resolve(variationName);\n };\n variationName = api.activate(self, campaignKey, userId, options);\n\n // If we get null from the API i.e. no tracking call was sent\n // In this case, responseCallback will not be fired and hence we have to manually resolve the promise\n if (!variationName) {\n resolve(variationName);\n } else if (DataTypeUtil.isObject(variationName)) {\n resolve(variationName.variationName);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n return null;\n }\n\n const apiResponse = api.activate(self, campaignKey, userId, options);\n\n if (DataTypeUtil.isObject(apiResponse)) {\n return apiResponse.variationName;\n }\n\n return apiResponse;\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Gets the variation assigned for the user for the campaign\n *\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\n getVariationName(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_VARIATION_NAME\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n resolve(null);\n } else {\n return api.getVariation(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.variationName);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n if (self.returnPromiseFor && (self.returnPromiseFor.getVariationName || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_VARIATION_NAME\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n resolve(null);\n } else {\n // since this API does not send any async call, we can simply resolve the returned value\n resolve(api.getVariation(self, campaignKey, userId, options));\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n return null;\n }\n\n return api.getVariation(self, campaignKey, userId, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Marks the conversion of the campaign for a particular goal\n *\n * @param {String/Array/null/undefined} campaignSpecifier campaign keys to track unique campaignSpecifier\n * @param {String} userId ID assigned to a user\n * @param {String} goalIdentifier unique campaign's goal identifier\n * @param {Object} options optional params - customVariables, variationTargetingVariables, revenueValue\n */\n track(campaignSpecifier, userId, goalIdentifier, options = {}) {\n try {\n let self = this;\n\n // In case we use any asyncStorage like redis, promisify track\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.TRACK\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n resolve(null);\n } else {\n return api.track(self, campaignSpecifier, userId, goalIdentifier, options).then(function(trackResponse) {\n resolve(trackResponse);\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.track || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.TRACK\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n resolve(null);\n } else {\n let trackResponse;\n let counter = 0;\n options.responseCallback = (_error, _response) => {\n counter += 1;\n // For Data360, one single call is there to track multiple metrices\n // For global goals, we are now sending one single batch-events call\n if (\n self.isEventArchEnabled ||\n (DataTypeUtil.isArray(campaignSpecifier) ||\n ((DataTypeUtil.isUndefined(campaignSpecifier) || DataTypeUtil.isNull(campaignSpecifier)) &&\n FunctionUtil.objectValues(trackResponse).filter(Boolean).length))\n ) {\n resolve(trackResponse);\n } else if (counter === FunctionUtil.objectValues(trackResponse).filter(Boolean).length) {\n // In case of global goals, when all campaigns are tracked, then only resolve\n // TODO: verify if this can be removed as we are sending batch events call always for non-Data360 accounts\n resolve(trackResponse);\n }\n };\n trackResponse = api.track(self, campaignSpecifier, userId, goalIdentifier, options);\n // If we get null/false from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n // Or, in case of global goals, if none campaign got success, manually resolve\n if (!trackResponse || !FunctionUtil.objectValues(trackResponse).some(Boolean)) {\n resolve(trackResponse);\n } else if (trackResponse && trackResponse.isDevelopmentMode) {\n delete trackResponse.isDevelopmentMode;\n resolve(trackResponse);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n return null;\n }\n\n return api.track(self, campaignSpecifier, userId, goalIdentifier, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method checks: Whether a feature is enabled or not for the given user\n *\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} userId Unique identifier for the user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {Boolean} true if feature enabled, false otherwise\n */\n isFeatureEnabled(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n resolve(null);\n } else {\n return api.isFeatureEnabled(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.isFeatureEnabled);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.isFeatureEnabled || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n resolve(false);\n } else {\n let isFeatureEnabledApiResponse;\n options.responseCallback = (_error, _response) => {\n resolve(!!isFeatureEnabledApiResponse);\n };\n isFeatureEnabledApiResponse = api.isFeatureEnabled(self, campaignKey, userId, options);\n // If we get null from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n if (DataTypeUtil.isNull(isFeatureEnabledApiResponse)) {\n resolve(false);\n } else if (DataTypeUtil.isObject(isFeatureEnabledApiResponse)) {\n resolve(!!isFeatureEnabledApiResponse.isFeatureEnabled);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n return false;\n }\n\n const apiResponse = api.isFeatureEnabled(self, campaignKey, userId, options);\n\n if (DataTypeUtil.isObject(apiResponse)) {\n return !!apiResponse.isFeatureEnabled;\n }\n\n return !!apiResponse;\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return false;\n }\n }\n\n /**\n * This API method: Return the variable for that variation(if Feature Test),\n * otherwise the default values being set in Feature\n *\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} variableKey Unique key for a feature's variable\n * @param {String} userId Unique identifier for the user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {string|number|double|boolean|null} Variable value as is set in the VWO app i.e.\n * maintaining the data-type,\n * null if anything fails like campaign / variable not found\n */\n getFeatureVariableValue(campaignKey, variableKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n resolve(null);\n } else {\n return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.typeCastedValue);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n if (self.returnPromiseFor && (self.returnPromiseFor.getFeatureVariableValue || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n resolve(null);\n } else {\n // since this API does not send any async call, we can simply resolve the returned value\n resolve(api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options));\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n return null;\n }\n\n return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Pushes the key-value tag pair for a particular user\n *\n * @param {String} tagKey tag key\n * @param {String} tagValue tag Value\n * @param {String} userId ID assigned to a user\n *\n * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable\n */\n push(tagKey, tagValue, userId) {\n try {\n let self = this;\n let customDimensionMap;\n\n if (arguments.length === 2) {\n // Argument reshuffling.\n customDimensionMap = tagKey;\n userId = tagValue;\n\n tagKey = ' ';\n tagValue = ' ';\n } else if (arguments.length === 3) {\n customDimensionMap = {};\n } else {\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.PUSH\n })\n );\n return false;\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.push || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.PUSH\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.PUSH\n })\n );\n resolve(null);\n } else {\n let apiResponse;\n let counter = 0;\n\n const options = {\n responseCallback: (_error, _response) => {\n counter += 1;\n // In case of multiple custom dimensions, when all are tracked, then only resolve\n // if customDimensionMap is used\n if (\n customDimensionMap &&\n DataTypeUtil.isObject(customDimensionMap) &&\n FunctionUtil.objectValues(customDimensionMap).filter(Boolean).length > 1\n ) {\n resolve(apiResponse);\n }\n // else if custom dimensions are sent with tag key and value instead of a map\n else if (counter === FunctionUtil.objectValues(apiResponse).filter(Boolean).length) {\n resolve(apiResponse);\n }\n }\n };\n apiResponse = api.push(self, tagKey, tagValue, userId, customDimensionMap, options);\n // If we get false from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n if (!apiResponse) {\n resolve(false);\n } else if (apiResponse && apiResponse.isDevelopmentMode) {\n delete apiResponse.isDevelopmentMode;\n resolve(apiResponse);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.PUSH\n })\n );\n return null;\n }\n\n return api.push(self, tagKey, tagValue, userId, customDimensionMap);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return false;\n }\n }\n\n setOptOut() {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OPT_OUT_API_CALLED, {\n file\n })\n );\n\n if (this.returnPromiseFor && (this.returnPromiseFor.optOut || this.returnPromiseFor.all)) {\n return new Promise(resolve => {\n this._destroyInstanceVariables();\n if (this.batchEventsQueue) {\n this.flushEvents().then(() => {\n this.batchEventsQueue = undefined;\n resolve(true);\n });\n } else {\n resolve(true);\n }\n });\n }\n\n if (this.batchEventsQueue) {\n this.flushEvents().then(() => {\n this.batchEventsQueue = undefined;\n });\n }\n\n this._destroyInstanceVariables();\n\n return true;\n }\n /**\n * Manually flush impression events to VWO which are queued in batch queue as per batchEvents config\n */\n flushEvents() {\n const accountId = this.SettingsFileManager.getSettingsFile().accountId;\n\n if (typeof process.env !== 'undefined') {\n this.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.EVENT_BATCH_FLUSH, {\n file,\n accountId\n })\n );\n\n return new Promise((resolve, _reject) => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: 'flushEvents'\n })\n );\n resolve({\n status: false,\n message: 'opted out'\n });\n } else {\n if (this.batchEventsQueue) {\n customEventUtil.getInstance().once('batchCallCompleteion', (status, message) => {\n if (status) {\n resolve({\n status: true,\n message: message || 'Batch call sent to VWO'\n });\n } else {\n resolve({\n status: false,\n message: message || 'Batch call could not be processed'\n });\n }\n });\n\n this.batchEventsQueue.flushAndClearTimer();\n\n return;\n }\n\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.NO_BATCH_QUEUE, {\n file,\n accountId\n })\n );\n\n resolve({\n status: false,\n message: 'No batchEvents config present in launch API'\n });\n }\n });\n }\n }\n\n /**\n * Fetch latest settings-file and update so that vwoClientInstance could use latest settings\n * Helpful especially when using webhooks\n *\n * @param {Number} accountId\n * @param {String} sdkKey\n *\n * @return {Promise}\n */\n getAndUpdateSettingsFile(accountId, sdkKey) {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: 'getAndUpdateSettingsFile'\n })\n );\n return new Promise(resolve => {\n resolve(null);\n });\n }\n return this.SettingsFileManager.getAndUpdateSettingsFile(accountId, sdkKey);\n }\n\n _destroyInstanceVariables() {\n this.userStorageService = undefined;\n this.SettingsFileManager = undefined;\n this.usageStats = undefined;\n this.eventQueue = undefined;\n this.optOut = true;\n }\n}\n\nmodule.exports = VWO;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Activate;\n\n/**\n * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Assigns the determinitic variation to the user(based on userId), if user becomes part of campaign\n * If userStorageService is used, it will look into it for the variation and if found, no further processing is done\n * 4. Sends an impression call to VWO server to track user\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options Optional params\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\nfunction activate(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.ACTIVATE;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n userAgent,\n userIpAddress\n } = options;\n\n var visitorUserAgent = userAgent;\n\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.ACTIVATE,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n visitorUserAgent,\n userIpAddress\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false;\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (!CampaignUtil.isAbCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n // Once the matching RUNNING campaign is found, assign the deterministic variation to the userId provided\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n true,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n data\n );\n });\n }\n\n return _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n result\n );\n}\n\nfunction _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n result\n) {\n var { variationId, variationName, isStoredVariation } = result;\n\n // Check if variation-name has been assigned to the userId. If not, return no variation\n if (!ValidateUtil.isValidValue(variationName)) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.DECISION_NO_VARIATION_ALLOTED, {\n file,\n userId,\n campaignKey\n })\n );\n\n return null;\n }\n\n // check if variation found from storage. return it without sending a call to VWO server\n if (isStoredVariation && !shouldTrackReturningUser) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, {\n file,\n userId,\n campaignKey,\n api\n })\n );\n return { variationName };\n }\n\n // Variation found...let VWO server knows about it to show report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n EventEnum.VWO_VARIATION_SHOWN,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackUserPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_VARIATION_SHOWN,\n campaign.id,\n variationId\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n } else {\n let properties = ImpressionUtil.buildEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n }\n\n if (config.isDevelopmentMode) {\n return { variationName };\n }\n\n return variationName;\n}\nmodule.exports = activate;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst FeatureUtil = require('../utils/FeatureUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst ObjectUtil = require('../utils/ObjectUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.GetFeatureVariableValue;\n\n/**\n * This API method:\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible for campaign and check if feature is enabled for the user.\n * 4. If feature enabled, return the variable for that variation(if Feature Test),\n * otherwise the default values being set in Feature\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} variableKey Unique key for a feature's variable\n * @param {String} userId Unique identifier for the user\n * @param {Object} options Optional params\n *\n * @return {string|number|double|boolean|null} Variable value as is set in the VWO app i.e.\n * maintaining the data-type,\n * null if anything fails like campaign / variable not found\n */\nfunction getFeatureVariableValue(vwoInstance, campaignKey, variableKey, userId, options = {}) {\n try {\n const api = ApiEnum.GET_FEATURE_VARIABLE_VALUE;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var { customVariables, variationTargetingVariables, userStorageData, metaData } = options;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE,\n campaignKey,\n variableKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.GetFeatureVariableValue\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isAbCampaign(campaign)) {\n // API not allowed for full-stack AB campaigns\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, data);\n });\n }\n\n return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result);\n } catch (err) {\n vwoInstance.logger.log(LogLevelEnum.ERROR, err.message);\n\n return null;\n }\n}\n\nfunction _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result) {\n let variable;\n var { variation, variationName } = result;\n\n if (!variationName) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: 'disabled'\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n variable = FeatureUtil.getVariableForFeature(campaign, variableKey);\n } else if (CampaignUtil.isFeatureTestCampaign(campaign)) {\n variable = FeatureUtil.getVariableValueForVariation(campaign, variation, variableKey);\n\n if (ObjectUtil.areObjectKeys(variable) && variation.isFeatureEnabled) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_VARIABLE_VALUE, {\n file,\n variableKey,\n campaignKey: campaign.key,\n variableValue: variable.value,\n userId\n })\n );\n } else if (ObjectUtil.areObjectKeys(variable) && !variation.isFeatureEnabled) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_VARIABLE_DEFAULT_VALUE, {\n file,\n variableKey,\n variationName\n })\n );\n }\n }\n\n if (!ObjectUtil.areObjectKeys(variable)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.VARIABLE_NOT_FOUND, {\n file,\n variableKey,\n userId\n })\n );\n\n return null;\n }\n\n let variableValue = variable.value;\n let typeCastedValue = FeatureUtil.getTypeCastVariableValue(variableValue, variable.type);\n\n return typeCastedValue;\n}\n\nmodule.exports = getFeatureVariableValue;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.GetVariation;\n\n/**\n * This API method: Gets the variation assigned for the user for the campaign\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Assigns the determinitic variation to the user(based on userId), if user becomes part of campaign\n * If userStorageService is used, it will look into it for the variation and if found, no further processing is done\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options Optional params\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\nfunction getVariation(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.GET_VARIATION_NAME;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var { customVariables, variationTargetingVariables, userStorageData, metaData } = options;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.GET_VARIATION_NAME,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey: campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return data;\n });\n }\n\n if (!result.variationName) {\n return null;\n }\n\n return result.variationName;\n}\n\nmodule.exports = getVariation;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst activate = require('./activate');\nconst getVariation = require('./getVariation');\nconst track = require('./track');\nconst isFeatureEnabled = require('./isFeatureEnabled');\nconst getFeatureVariableValue = require('./getFeatureVariableValue');\nconst push = require('./push');\n\nmodule.exports = {\n activate,\n getVariation,\n track,\n isFeatureEnabled,\n getFeatureVariableValue,\n push\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.IsFeatureEnabled;\n\n/**\n * This API checks: Whether a feature is enabled or not for the given user\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible for campaign and check if feature is enabled for the user.\n * 4. If feature enabled, sends a call to VWO server for tracking visitor\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} userId Unique identifier for the user\n * @param {Object} options Optional params\n *\n * @return {Boolean} true if feature enabled, false otherwise\n */\nfunction isFeatureEnabled(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.IS_FEATURE_ENABLED;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n userAgent,\n userIpAddress\n } = options;\n var visitorUserAgent = userAgent;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.IS_FEATURE_ENABLED,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n visitorUserAgent,\n userIpAddress\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.isFeatureEnabled\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply log and return false\n if (!settingsFile) {\n return null;\n }\n\n shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false;\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isAbCampaign(campaign)) {\n // API not allowed for full-stack AB campaigns\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n true,\n false,\n undefined,\n api\n );\n\n // check if result is a promise, if yes then wait for it untill it resolves, then only proceed further\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n data\n );\n });\n }\n\n return _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n var { variation, variationId, variationName, isStoredVariation } = result;\n\n let isFeatureEnabled = false;\n\n if (variationName) {\n isFeatureEnabled = CampaignUtil.isFeatureRolloutCampaign(campaign) || variation.isFeatureEnabled;\n\n if (isStoredVariation && !shouldTrackReturningUser) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, {\n file,\n userId,\n campaignKey,\n api\n })\n );\n } else {\n // Variation found...let VWO server knows about it to show report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n EventEnum.VWO_VARIATION_SHOWN,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackUserPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_VARIATION_SHOWN,\n campaign.id,\n variationId\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n } else {\n let properties = ImpressionUtil.buildEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n }\n\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: isFeatureEnabled ? 'enabled' : 'disabled'\n })\n );\n\n if (config.isDevelopmentMode) {\n return { isFeatureEnabled };\n }\n\n return isFeatureEnabled;\n }\n }\n\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: isFeatureEnabled ? 'enabled' : 'disabled'\n })\n );\n\n if (isStoredVariation || config.isDevelopmentMode) {\n return { isFeatureEnabled };\n }\n\n return { isFeatureEnabled };\n}\n\nmodule.exports = isFeatureEnabled;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ApiEnum = require('../enums/ApiEnum');\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nlet BatchEventsDispatcher;\n\nif (typeof process.env !== 'undefined') {\n BatchEventsDispatcher = require('../utils/BatchEventsDispatcher');\n}\n\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Push;\n\n/**\n * This API method: Pushes the key-value tag pair for a particular user\n *\n * 1. validates the arguments being passed\n * 2. Sends a call to VWO push api\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} tagKey tag key\n * @param {String} tagValue tag Value\n * @param {String} userId ID assigned to a user\n *\n * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable\n */\nfunction push(vwoInstance, tagKey, tagValue, userId, customDimensionMap, { responseCallback } = {}) {\n const api = ApiEnum.PUSH;\n\n if (\n !ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.PUSH,\n tagKey,\n tagValue,\n userId,\n customDimensionMap,\n responseCallback\n })\n ) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.PUSH_INVALID_PARAMS, {\n file,\n method: api\n })\n );\n return false;\n }\n\n if (tagKey.length > 255) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_KEY_LENGTH_EXCEEDED, {\n file,\n tagKey,\n userId\n })\n );\n return false;\n }\n\n if (tagValue.length > 255) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_VALUE_LENGTH_EXCEEDED, {\n file,\n tagKey,\n userId,\n tagValue\n })\n );\n return false;\n }\n\n if (tagKey === ' ' && tagValue === ' ' && (!customDimensionMap || Object.keys(customDimensionMap).length === 0)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.PUSH_INVALID_PARAMS, {\n file,\n method: api\n })\n );\n return false;\n }\n\n if (tagKey !== ' ' && tagValue !== ' ') {\n customDimensionMap[tagKey] = tagValue;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply false\n if (!settingsFile) {\n return false;\n }\n\n let result = {};\n if (config.batchEvents) {\n Object.keys(customDimensionMap).forEach(key => {\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n let properties = ImpressionUtil.buildBatchEventForPushing(settingsFile, key, tagValue, userId);\n vwoInstance.batchEventsQueue.enqueue(properties);\n\n result[key] = true;\n });\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(settingsFile, EventEnum.VWO_SYNC_VISITOR_PROP);\n let payload = ImpressionUtil.getPushPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_SYNC_VISITOR_PROP,\n customDimensionMap\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n\n result.success = true;\n } else {\n const events = [];\n const customDimensionKeys = Object.keys(customDimensionMap);\n\n customDimensionKeys.forEach(key => {\n let properties;\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n\n if (typeof process.env === 'undefined') {\n properties = ImpressionUtil.buildEventForPushing(settingsFile, key, tagValue, userId);\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n } else if (customDimensionKeys.length === 1) {\n properties = ImpressionUtil.buildEventForPushing(settingsFile, key, tagValue, userId);\n } else {\n properties = ImpressionUtil.buildBatchEventForPushing(settingsFile, key, tagValue, userId);\n }\n\n events.push(properties);\n result[key] = true;\n });\n\n if (typeof process.env !== 'undefined') {\n if (customDimensionKeys.length === 1) {\n vwoInstance.eventQueue.process(config, events[0], vwoInstance, { responseCallback });\n } else {\n if (!config.isDevelopmentMode) {\n BatchEventsDispatcher.dispatch(\n {\n ev: events\n },\n responseCallback,\n Object.assign(\n {},\n {\n a: vwoInstance.SettingsFileManager.getSettingsFile().accountId\n },\n vwoInstance.usageStats.getUsageStats()\n ),\n vwoInstance.SettingsFileManager.getSettingsFile().sdkKey\n );\n }\n }\n }\n }\n\n if (config.isDevelopmentMode) {\n return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode });\n }\n\n return result;\n}\n\nmodule.exports = push;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst { objectValues } = require('../utils/ObjectUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\n\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Track;\nconst GOAL_TYPE_TO_TRACK_DEFAULT = GoalTypeEnum.ALL;\nconst GOAL_IDENTIFIER_SEPERATOR = '_vwo_';\nconst api = ApiEnum.TRACK;\n\nlet BatchEventsDispatcher;\nif (typeof process.env !== 'undefined') {\n BatchEventsDispatcher = require('../utils/BatchEventsDispatcher');\n}\n\n/**\n * This API method: Marks the conversion of the campaign for a particular goal\n *\n * 1. validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Gets the assigned determinitic variation to the user(based on userId), if user becomes part of campaign\n * 4. Sends an impression call to VWO server to track goal data\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {Number} campaignKey unique campaign test key\n * @param {String} userId ID assigned to a user\n * @param {String} goalIdentifier unique campaign's goal identifier\n * @param {Object} options Optional params\n */\nfunction track(vwoInstance, campaignKey, userId, goalIdentifier, options = {}) {\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n revenueValue,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n eventProperties,\n userAgent,\n userIpAddress\n } = options;\n var visitorUserAgent = userAgent;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.TRACK,\n campaignKey,\n userId,\n goalIdentifier,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n }) &&\n (!goalTypeToTrack || (goalTypeToTrack && objectValues(GoalTypeEnum).includes(goalTypeToTrack)))\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.TRACK\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n let revenuePropList = new Set();\n\n // If no settings are found, simply do not track goal and return false\n if (!settingsFile) {\n return null;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n let campaigns = [];\n goalTypeToTrack = goalTypeToTrack || config.goalTypeToTrack || GOAL_TYPE_TO_TRACK_DEFAULT; // priority order - options > launchConfig > default\n if (DataTypeUtil.isUndefined(shouldTrackReturningUser)) {\n // if shouldTrackReturningUser is not given in options\n if (DataTypeUtil.isBoolean(config.shouldTrackReturningUser)) {\n // if shouldTrackReturningUser is given in config at launch\n shouldTrackReturningUser = config.shouldTrackReturningUser;\n } else {\n shouldTrackReturningUser = false;\n }\n }\n if (!DataTypeUtil.isString(campaignKey)) {\n if (DataTypeUtil.isArray(campaignKey)) {\n campaigns = CampaignUtil.getCampaignsForKeys(settingsFile, campaignKey);\n } else {\n campaigns = CampaignUtil.getCampaignsForGoal(settingsFile, goalIdentifier, goalTypeToTrack);\n }\n } else {\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n campaigns.push(campaign || { key: campaignKey });\n }\n const result = {};\n let metricMap = {};\n let events = [];\n let areGlobalGoals = typeof process.env === 'undefined' ? false : campaigns.length > 1;\n\n campaigns.forEach(\n campaign =>\n (result[campaign.key] = trackCampaignGoal(\n vwoInstance,\n campaign,\n campaign.key,\n userId,\n settingsFile,\n goalIdentifier,\n revenueValue,\n config,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n metricMap,\n revenuePropList,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n ))\n );\n\n // Check if each object in result is a promise\n // in case of asyncStorageConfig, each object would be a promise only\n // Check if result is a non-empty object\n const areAllPromises =\n result && Object.keys(result).length > 0\n ? Object.values(result).every(item => DataTypeUtil.isPromise(item))\n : false;\n // const areAllPromises = Object.values(result).every(item => DataTypeUtil.isPromise(item));\n\n if (areAllPromises) {\n // Promise.all - This method takes an array of promises and returns a new promise that resolves to an array of the resolved values when all of the input promises have resolved.\n // If any of the promises in the array reject, the whole Promise.all is rejected.\n return Promise.all(Object.values(result)).then(dataArray => {\n dataArray.forEach((data, index) => {\n const campaignKey = Object.keys(result)[index];\n const ans = _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n { [campaignKey]: data }\n );\n result[campaignKey] = ans[campaignKey];\n });\n return result;\n });\n }\n return _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n if (!Object.keys(result).length) {\n return null;\n }\n\n if (typeof process.env === 'undefined') {\n if (events && events.length) {\n for (let k = 0; k < events.length; k++) {\n vwoInstance.eventQueue.process(config, events[k], vwoInstance, { responseCallback });\n }\n }\n } else if (!settingsFile.isEventArchEnabled && events && events.length) {\n if (!areGlobalGoals) {\n vwoInstance.eventQueue.process(config, events[0], vwoInstance, { responseCallback });\n } else if (!config.isDevelopmentMode) {\n BatchEventsDispatcher.dispatch(\n {\n ev: events\n },\n responseCallback,\n Object.assign(\n {},\n {\n a: vwoInstance.SettingsFileManager.getSettingsFile().accountId\n },\n vwoInstance.usageStats.getUsageStats()\n ),\n vwoInstance.SettingsFileManager.getSettingsFile().sdkKey\n );\n }\n }\n\n if (settingsFile.isEventArchEnabled && Object.keys(metricMap).length > 0) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n goalIdentifier,\n {},\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackGoalPayloadData(\n settingsFile,\n userId,\n goalIdentifier,\n metricMap,\n revenueValue,\n revenuePropList,\n eventProperties\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n Object.keys(metricMap).forEach(function(key) {\n DecisionUtil._saveUserData(\n config,\n metricMap[key].campaign,\n metricMap[key].variationName,\n metricMap[key].userId,\n metricMap[key].metaData,\n goalIdentifier\n );\n });\n }\n }\n\n if (config.isDevelopmentMode) {\n return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode });\n }\n\n return result;\n}\n\nfunction trackCampaignGoal(\n vwoInstance,\n campaign,\n campaignKey,\n userId,\n settingsFile,\n goalIdentifier,\n revenueValue,\n config,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n metricMap,\n revenuePropList,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n) {\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey: campaignKey,\n api\n })\n );\n\n return false;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return false;\n }\n\n let campaignId = campaign.id;\n\n // Get the campaign goal settings based on goalIdentifier\n let goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier);\n\n if (!goal) {\n // If no goal is found, something is wrong with the goalIdentifier\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_GOAL_NOT_FOUND, {\n file,\n userId,\n goalIdentifier,\n campaignKey: campaignKey\n })\n );\n return false;\n } else if (goalTypeToTrack !== GOAL_TYPE_TO_TRACK_DEFAULT && goal.type !== goalTypeToTrack) {\n return false;\n } else if (goal.type === GoalTypeEnum.REVENUE && !ValidateUtil.isValidValue(revenueValue)) {\n if (settingsFile.isEventArchEnabled) {\n /* \n If it's a metric of type - value of an event property and calculation logic is first Value (mca != -1 )\n */\n if (goal.mca !== -1) {\n /*\n In this case it is expected that goal will have revenueProp\n Error should be logged if eventProperties is not Defined ` OR ` eventProperties does not have revenueProp key\n */\n if (DataTypeUtil.isUndefined(eventProperties) || !eventProperties.hasOwnProperty(goal.revenueProp)) {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n } else {\n /*\n here mca == -1 so there could only be 2 scenarios, \n 1. If revenueProp is defined then eventProperties should have revenueProp key\n 2. if revenueProp is not defined then it's a metric of type - Number of times an event has been triggered.\n */\n if (goal.revenueProp) {\n // Error should be logged if eventProperties is not Defined ` OR ` eventProperties does not have revenueProp key\n if (DataTypeUtil.isUndefined(eventProperties) || !eventProperties.hasOwnProperty(goal.revenueProp)) {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n }\n }\n } else {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n }\n\n if (goal.type === GoalTypeEnum.REVENUE && goal.revenueProp) {\n revenuePropList.add(goal.revenueProp);\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n true,\n goalIdentifier,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n if (!Object.keys(data).length) {\n return null;\n }\n return _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n data\n );\n });\n }\n\n return _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n var { variationId, variationName, storedGoalIdentifier } = result;\n // Is User is a part of Campaign and has been decided to be a part of particular variation\n if (variationName) {\n if (storedGoalIdentifier) {\n const identifiers = storedGoalIdentifier.split(GOAL_IDENTIFIER_SEPERATOR);\n if (!identifiers.includes(goalIdentifier)) {\n storedGoalIdentifier += GOAL_IDENTIFIER_SEPERATOR + goalIdentifier;\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, storedGoalIdentifier);\n }\n } else if (!shouldTrackReturningUser && goal.mca !== -1) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_GOAL_ALREADY_TRACKED, {\n file,\n userId,\n goalIdentifier,\n campaignKey\n })\n );\n return false;\n }\n }\n // If goal is found, send an impression to VWO server for report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n metricMap[campaign.id] = {\n config,\n campaign,\n variationName,\n userId,\n metaData,\n goal\n };\n return true;\n } else {\n let properties = {};\n\n if (areGlobalGoals) {\n properties = ImpressionUtil.buildBatchEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n visitorUserAgent,\n userIpAddress\n );\n } else {\n properties = ImpressionUtil.buildEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n visitorUserAgent,\n userIpAddress\n );\n }\n\n events.push(properties);\n }\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, goalIdentifier);\n }\n return true;\n }\n\n return false;\n}\n\nfunction logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL, {\n file,\n userId,\n goalIdentifier,\n campaignKey\n })\n );\n}\n\nmodule.exports = track;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* global SDK_NAME, SDK_VERSION */\n\nlet packageFile = {};\n\n// For javascript-sdk, to keep the build size low\n// avoid adding the whole package file in the file\nif (typeof process.env === 'undefined') {\n packageFile = {\n name: SDK_NAME,\n version: SDK_VERSION\n };\n} else {\n packageFile = require('../../package.json');\n}\n\nmodule.exports = {\n SDK_NAME: packageFile.name,\n SDK_VERSION: packageFile.version,\n\n PLATFORM: 'server',\n\n SEED_VALUE: 1,\n\n MAX_TRAFFIC_PERCENT: 100,\n MAX_TRAFFIC_VALUE: 10000,\n MAX_EVENTS_PER_REQUEST: 5000,\n\n DEFAULT_EVENTS_PER_REQUEST: 100,\n DEFAULT_REQUEST_TIME_INTERVAL: 600, // 10 * 60(secs) = 600 secs i.e. 10 minutes\n\n STATUS_RUNNING: 'RUNNING',\n\n SEED_URL: 'https://vwo.com',\n\n HTTP_PROTOCOL: 'http://',\n HTTPS_PROTOCOL: 'https://',\n\n SDK_QUERY_PARAM: 'sdk',\n SDK_VERSION_QUERY_PARAM: 'sdk-v'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Hasher = require('murmurhash');\n\nconst Constants = require('../constants');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst VWOFeatureFlags = require('../utils/VWOFeatureFlags');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.BucketingService;\n\nlet BucketingService = {\n /**\n * Generates Bucket Value of the User by hashing the User ID by murmurHash\n * and scaling it down.\n *\n * @param {Number} hashValue the hashValue generated after hashing\n * @param {Number} maxValue the value up-to which hashValue needs to be scaled\n * @param {Number} multiplier multiplier in case the traffic allocation is less than 100\n *\n * @return {Number} bucket Value of the User\n */\n _generateBucketValue: (hashValue, maxValue, multiplier = 1) => {\n const ratio = hashValue / Math.pow(2, 32);\n const multipliedValue = (maxValue * ratio + 1) * multiplier;\n const value = Math.floor(multipliedValue);\n\n return value;\n },\n\n /**\n * Returns the Variation by checking the Start and End Bucket Allocations of each Variation\n *\n * @param {Object} campaign which contains the variations\n * @param {Number} bucketValue the bucket Value of the user\n *\n * @return {Object|null} variation data allotted to the user or null if not\n */\n _getVariation: (variations, bucketValue) => {\n for (let i = 0; i < Object.keys(variations).length; i++) {\n let variation = variations[i];\n\n if (bucketValue >= variation.startVariationAllocation && bucketValue <= variation.endVariationAllocation) {\n return variation;\n }\n }\n\n return null;\n },\n\n /**\n * Validates the User ID and generates Bucket Value of the User by hashing the userId by murmurHash and scaling it down.\n *\n * @param {String} userId the unique ID assigned to User\n *\n * @return {Number} the bucket Value allotted to User (between 1 to $this->$MAX_TRAFFIC_PERCENT)\n */\n _getBucketValueForUser: (seed, userId, disableLog) => {\n let hashValue = Hasher.v3(seed, Constants.SEED_VALUE);\n let bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_PERCENT);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_HASH_BUCKET_VALUE, {\n file,\n hashValue,\n bucketValue,\n userId\n }),\n disableLog\n );\n\n return bucketValue;\n },\n\n /**\n * Calculate if this user should become part of the campaign or not\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {Object} campaign fot getting the value of traffic allotted to the campaign\n *\n * @return {Boolean} if User is a part of Campaign or not\n */\n isUserPartOfCampaign: (userId, campaign, disableLog = false) => {\n if (!campaign) {\n return false;\n }\n\n let trafficAllocation = campaign.percentTraffic;\n let valueAssignedToUser = BucketingService._getBucketValueForUser(\n CampaignUtil.getBucketingSeed(userId, campaign),\n userId,\n disableLog\n );\n let isUserPart = valueAssignedToUser !== 0 && valueAssignedToUser <= trafficAllocation;\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_CAMPAIGN_ELIGIBILITY, {\n file,\n userId,\n campaignKey: campaign.key,\n status: isUserPart ? 'eligible' : 'not eligible'\n }),\n disableLog\n );\n\n return isUserPart;\n },\n\n /**\n * Validates the User ID and generates Variation into which the User is bucketed in.\n *\n * @param {String} userId the unique ID assigned to User\n * @param {Object} campaign the Campaign of which User is a part of\n *\n * @return {Object|null} variation data into which user is bucketed in or null if not\n */\n bucketUserToVariation: (userId, campaign, accountId) => {\n const isNB = VWOFeatureFlags.getAll().isNB;\n const isNBv2 = VWOFeatureFlags.getAll().isNBv2;\n let multiplier;\n let seed;\n\n if (!ValidateUtil.isValidValue(userId)) {\n return null;\n }\n\n if (!campaign) {\n return null;\n }\n\n if (((!isNB && !isNBv2) || (isNB && campaign.isOB)) && campaign.percentTraffic) {\n // Old bucketing logic if feature flag is OFF or\n // Feature flag is ON and campaign is old i.e. created before feature flag was turned ON\n multiplier = Constants.MAX_TRAFFIC_VALUE / campaign.percentTraffic / 100;\n seed = CampaignUtil.getBucketingSeed(userId, campaign);\n } else if ((isNB && !campaign.isOB && !isNBv2) || (isNBv2 && campaign.isOBv2)) {\n // New bucketing logic if feature flag is ON and campaign is new i.e. created after feature flag was turned ON\n multiplier = 1;\n seed = userId;\n } else {\n // new bucketing V2 Logic\n multiplier = 1;\n seed = CampaignUtil.getBucketingSeed(accountId + '_' + userId, campaign);\n }\n\n const hashValue = BucketingService._generateHashValue(seed);\n const bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_CAMPAIGN_BUCKET_VALUES, {\n file,\n userId,\n campaignKey: campaign.key,\n percentTraffic: campaign.percentTraffic,\n bucketValue,\n hashValue\n })\n );\n\n return BucketingService._getVariation(campaign.variations, bucketValue);\n },\n calculateBucketValue: (seed, multiplier = 1) => {\n const hashValue = BucketingService._generateHashValue(seed);\n return BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier);\n },\n _generateHashValue: userId => {\n return Hasher.v3(userId, Constants.SEED_VALUE);\n }\n};\n\nmodule.exports = BucketingService;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst SegmentEnum = require('../enums/segment');\nconst { getKeyValue } = require('../utils/ObjectUtil');\nconst { operandCustomVariablesParser, operandUserParser } = require('../utils/SegmentUtil');\nconst logging = require('../services/logging');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst FileNameEnum = require('../enums/FileNameEnum');\n\nconst { AND, OR, NOT } = SegmentEnum.SegmentOperatorTypes;\nconst { CUSTOM_VARIABLE, USER } = SegmentEnum.SegmentOperandTypes;\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst file = FileNameEnum.SegmentEvaluator;\n\nconst logger = logging.getLogger();\n\nmodule.exports = SegmentEvaluator;\n/**\n * This method: A parser which recursively evaluates the expression tree represented by dsl\n *\n * @param {Object} dsl The segments defined in the campaing\n * @param {Object} customVariables Key/value pair of custom_attributs properties\n *\n * @return {Boolean} true if user is to be made part of campaign, else false\n */\nfunction evaluator(dsl, customVariables) {\n let { key, value } = getKeyValue(dsl);\n let operator = key;\n let subDsl = value;\n if (operator === NOT) {\n return !evaluator(subDsl, customVariables);\n } else if (operator === AND) {\n let list = [];\n for (let i = 0; i < subDsl.length; i++) {\n list.push(evaluator(subDsl[i], customVariables));\n }\n\n return list.every(val => val);\n } else if (operator === OR) {\n let list = [];\n for (let i = 0; i < subDsl.length; i++) {\n list.push(evaluator(subDsl[i], customVariables));\n }\n\n return list.some(val => val);\n } else if (operator === CUSTOM_VARIABLE) {\n return operandCustomVariablesParser(subDsl, customVariables);\n } else if (operator === USER) {\n return operandUserParser(subDsl, customVariables);\n }\n}\n\nfunction SegmentEvaluator(dsl, customVariables = {}, campaignKey, userId, variation = '', disableLogs = false) {\n try {\n if (DataTypeUtil.isObject(dsl) && !Object.keys(dsl).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n disableLogs\n );\n return true;\n }\n if (DataTypeUtil.isObject(dsl) && Object.keys(dsl).length) {\n return evaluator(dsl, customVariables);\n }\n return true;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_ERROR, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(customVariables),\n file,\n err,\n variation\n }),\n disableLogs\n );\n return false;\n }\n}\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ValidateUtil = require('../utils/ValidateUtil');\n\nconst Bucketer = require('./BucketingService');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.VariationDecider;\n\nconst VariationDecider = {\n /**\n * Returns the Variation Allotted to User\n *\n * @param {String} userId the unique ID assigned to User\n * @param {Object} campaign\n *\n * @return {Object} Variation object allotted to User\n */\n getVariationAllotted: (userId, campaign, accountId) => {\n let response = {\n variation: null,\n variationId: null,\n variationName: null\n };\n\n if (!ValidateUtil.isValidValue(userId)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_ID_INVALID, {\n file,\n userId\n })\n );\n\n return response;\n }\n\n if (Bucketer.isUserPartOfCampaign(userId, campaign)) {\n let variation = VariationDecider.getVariationOfCampaignForUser(userId, campaign, accountId) || {};\n response.variation = variation;\n response.variationId = variation.id;\n response.variationName = variation.name;\n } else {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_NOT_PART_OF_CAMPAIGN, {\n file,\n userId,\n campaignKey: campaign.key\n })\n );\n }\n\n return response;\n },\n\n /**\n * Assigns random variation ID to a particular user depending on the PercentTraffic.\n * Makes user a part of campaign if user's included in Traffic.\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {Object} campaign the Campaign of which user is to be made a part of\n *\n * @return {Object|null} Variation allotted to User\n */\n getVariationOfCampaignForUser: (userId, campaign, accountId) => {\n if (!campaign) {\n return null;\n }\n\n let variation = Bucketer.bucketUserToVariation(userId, campaign, accountId);\n\n if (variation && variation.name) {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, {\n file,\n userId,\n campaignKey: campaign.key,\n status: `got Varation:${variation.name}`\n })\n );\n return {\n variation,\n name: variation.name,\n id: variation.id\n };\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, {\n file,\n userId,\n campaignKey: campaign.key,\n status: 'got no variation'\n })\n );\n\n return null;\n }\n};\n\nmodule.exports = VariationDecider;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst AnsiColorEnum = {\n BOLD: '\\x1b[1m',\n CYAN: '\\x1b[36m',\n GREEN: '\\x1b[32m',\n LIGHTBLUE: '\\x1b[94m',\n RED: '\\x1b[31m',\n RESET: '\\x1b[0m',\n WHITE: '\\x1b[30m',\n YELLOW: '\\x1b[33m'\n};\n\nmodule.exports = AnsiColorEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ApiEnum = {\n LAUNCH: 'launch',\n ACTIVATE: 'activate',\n GET_VARIATION_NAME: 'getVariation',\n TRACK: 'track',\n IS_FEATURE_ENABLED: 'isFeatureEnabled',\n GET_FEATURE_VARIABLE_VALUE: 'getFeatureVariableValue',\n PUSH: 'push'\n};\n\nmodule.exports = ApiEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignTypeEnum = {\n FEATURE_TEST: 'FEATURE_TEST',\n FEATURE_ROLLOUT: 'FEATURE_ROLLOUT',\n AB: 'VISUAL_AB'\n};\n\nmodule.exports = CampaignTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeEnum = {\n NUMBER: 'number',\n STRING: 'string',\n // FUNCTION: 'function',\n BOOLEAN: 'boolean',\n OBJECT: 'object'\n};\n\nmodule.exports = DataTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst EventEnum = {\n VWO_VARIATION_SHOWN: 'vwo_variationShown',\n VWO_SYNC_VISITOR_PROP: 'vwo_syncVisitorProp'\n};\n\nmodule.exports = EventEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst FeatureVariableTypeEnum = {\n BOOLEAN: 'boolean',\n DOUBLE: 'double',\n INTEGER: 'integer',\n STRING: 'string',\n JSON: 'json'\n};\n\nmodule.exports = FeatureVariableTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst LIB_PATH = 'lib';\nconst CORE_PATH = 'lib/core';\nconst UTIL_PATH = 'lib/util';\nconst SERVICES_PATH = 'lib/services';\n\nmodule.exports = {\n INDEX: `${LIB_PATH}/index`,\n\n VWO: `${LIB_PATH}/VWO`,\n\n API: `${LIB_PATH}/api/index`,\n\n Activate: `${LIB_PATH}/api/activate`,\n GetVariation: `${LIB_PATH}/api/getVariation`,\n Track: `${LIB_PATH}/api/track`,\n IsFeatureEnabled: `${LIB_PATH}/api/isFeatureEnabled`,\n GetFeatureVariableValue: `${LIB_PATH}/api/getFeatureVariableValue`,\n Push: `${LIB_PATH}/api/push`,\n\n SegmentEvaluator: `${CORE_PATH}/SegmentEvaluator`,\n BucketingService: `${CORE_PATH}/BucketingService`,\n VariationDecider: `${CORE_PATH}/VariationDecider`,\n\n ConsoleLogManager: `${SERVICES_PATH}/ConsoleLogManager`,\n EventQueue: `${SERVICES_PATH}/EventQueue`,\n LoggingManager: `${SERVICES_PATH}/LoggingManager`,\n SettingsFileManager: `${SERVICES_PATH}/SettingsFileManager`,\n BatchEventsQueue: `${SERVICES_PATH}/BatchEventsQueue`,\n\n CampaignUtil: `${UTIL_PATH}/CampaignUtil`,\n DataTypeUtil: `${UTIL_PATH}/DataTypeUtil`,\n EventDispatcher: `${UTIL_PATH}/EventDispatcher`,\n EventDispatcherUtil: `${UTIL_PATH}/EventDispatcherUtil`,\n FeatureUtil: `${UTIL_PATH}/FeatureUtil`,\n Functionutil: `${UTIL_PATH}/Functionutil`,\n ImpressionUtil: `${UTIL_PATH}/ImpressionUtil`,\n UuidUtil: `${UTIL_PATH}/UuidUtil`,\n ValidateUtil: `${UTIL_PATH}/ValidateUtil`,\n DecisionUtil: `${UTIL_PATH}/DecisionUtils`,\n HttpHandlerUtil: `${UTIL_PATH}/HttpHandlerUtil`,\n HttpImageUtil: `${UTIL_PATH}/HttpImageUtil`,\n HttpXMLUtil: `${UTIL_PATH}/HttpXMLUtil`,\n\n UsageStatsUtil: `${SERVICES_PATH}/UsageStats`\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst GoalTypeEnum = {\n REVENUE: 'REVENUE_TRACKING',\n CUSTOM: 'CUSTOM_GOAL',\n ALL: 'ALL'\n};\n\nmodule.exports = GoalTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst HeadersEnum = {\n USER_AGENT: 'X-Device-User-Agent',\n IP: 'VWO-X-Forwarded-For'\n};\n\nmodule.exports = HeadersEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst HooksEnum = {\n DECISION_TYPES: {\n CAMPAIGN_DECISION: 'CAMPAIGN_DECISION'\n }\n};\n\nmodule.exports = HooksEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst AnsiColorEnum = require('./AnsiColorEnum');\n\nconst LogNumberLevel = {\n _0: 'NOTSET',\n _1: 'DEBUG',\n _2: 'INFO',\n _3: 'WARN',\n _4: 'ERROR'\n};\n\nconst LogLevelEnum = {\n NOTSET: 0,\n DEBUG: 1,\n INFO: 2,\n WARN: 3,\n ERROR: 4\n};\n\nconst LogLevelColorInfoEnum = {\n [LogLevelEnum.NOTSET]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.WHITE}[NOTSET]:${AnsiColorEnum.RESET}`,\n [LogLevelEnum.DEBUG]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.LIGHTBLUE}[DEBUG]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.INFO]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.CYAN}[INFO]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.WARN]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.YELLOW}[WARN]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.ERROR]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.RED}[ERROR]: ${AnsiColorEnum.RESET}`\n};\n\nconst LogLevelInfoEnum = {\n [LogLevelEnum.NOTSET]: `[NOTSET]:`,\n [LogLevelEnum.DEBUG]: `[DEBUG]: `,\n [LogLevelEnum.INFO]: `[INFO]: `,\n [LogLevelEnum.WARN]: `[WARN]: `,\n [LogLevelEnum.ERROR]: `[ERROR]: `\n};\n\nmodule.exports = {\n LogLevelEnum,\n LogNumberLevel,\n LogLevelInfoEnum,\n LogLevelColorInfoEnum\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n PASSED: 'passed',\n FAILED: 'failed'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst UrlEnum = {\n BASE_URL: 'dev.visualwebsiteoptimizer.com',\n SETTINGS_URL: '/server-side/settings',\n WEBHOOK_SETTINGS_URL: '/server-side/pull',\n TRACK_USER: '/server-side/track-user',\n TRACK_GOAL: '/server-side/track-goal',\n PUSH: '/server-side/push',\n BATCH_EVENTS: '/server-side/batch-events',\n EVENTS: '/events/t'\n};\n\nmodule.exports = UrlEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n CUSTOM_VARIABLE: 'custom_variable',\n USER: 'user'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n LOWER: /^lower/,\n LOWER_MATCH: /^lower\\((.*)\\)/,\n WILDCARD: /^wildcard/,\n WILDCARD_MATCH: /^wildcard\\((.*)\\)/,\n REGEX: /^regex/,\n REGEX_MATCH: /^regex\\((.*)\\)/,\n STARTING_STAR: /^\\*/,\n ENDING_STAR: /\\*$/,\n GREATER_THAN_MATCH: /^gt\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n GREATER_THAN_EQUAL_TO_MATCH: /^gte\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n LESS_THAN_MATCH: /^lt\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n LESS_THAN_EQUAL_TO_MATCH: /^lte\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n LOWER_VALUE: 1,\n STARTING_ENDING_STAR_VALUE: 2,\n STARTING_STAR_VALUE: 3,\n ENDING_STAR_VALUE: 4,\n REGEX_VALUE: 5,\n EQUAL_VALUE: 6,\n GREATER_THAN_VALUE: 7,\n GREATER_THAN_EQUAL_TO_VALUE: 8,\n LESS_THAN_VALUE: 9,\n LESS_THAN_EQUAL_TO_VALUE: 10\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n AND: 'and',\n NOT: 'not',\n OR: 'or'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst SegmentOperandTypes = require('./SegmentOperandTypesEnum');\nconst SegmentOperatorTypes = require('./SegmentOperatorTypesEnum');\nconst SegmentOperandValueTypeRegexes = require('./SegmentOperandValueTypeRegexesEnum');\nconst SegmentOperandValues = require('./SegmentOperandValuesEnum');\n\nconst SegmentEnum = {\n SegmentOperandTypes,\n SegmentOperatorTypes,\n SegmentOperandValueTypeRegexes,\n SegmentOperandValues\n};\n\nmodule.exports = SegmentEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VWO = require('./VWO');\n\nconst DataTypeUtil = require('./utils/DataTypeUtil');\nconst FunctionUtil = require('./utils/FunctionUtil');\nconst { objectValues } = require('./utils/ObjectUtil');\nconst SettingsFileUtil = require('./utils/SettingsFileUtil');\nconst GoalTypeEnum = require('./enums/GoalTypeEnum');\nconst { MAX_EVENTS_PER_REQUEST } = require('./constants');\n\nconst logging = require('./services/logging');\nconst ApiEnum = require('./enums/ApiEnum');\nconst FileNameEnum = require('./enums/FileNameEnum');\nconst file = FileNameEnum.INDEX;\nconst { setLogHandler, setLogLevel, LogLevelEnum, LogNumberLevel, LogMessageEnum, LogMessageUtil } = logging;\n\nconst logger = logging.getLogger();\n\n// By default, all ERRORS should be logged\nlogging.setLogLevel(LogLevelEnum.ERROR);\n\nfunction logError(parameter = '', type = '') {\n const log = LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CONFIG_PARAMETER_INVALID, {\n file: file,\n parameter,\n type,\n api: ApiEnum.LAUNCH\n });\n\n throw new Error(logger.log(LogLevelEnum.ERROR, log));\n}\n\nfunction logInfo(parameter = '', type = '') {\n const log = LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_PARAMETER_USED, {\n file: file,\n parameter,\n type\n });\n\n console.info(`VWO-SDK - [INFO]: ${FunctionUtil.getCurrentTime()} ${log}`);\n}\n\nmodule.exports = {\n logging,\n setLogger: setLogHandler,\n setLogLevel,\n getSettingsFile: SettingsFileUtil.get,\n GoalTypeEnum,\n LogLevelEnum,\n /**\n * Initializes the SDK and parses the settingsfile\n *\n * @param {Object} config configuration for the SDK\n */\n launch: function(sdkConfig) {\n let config = {};\n try {\n // validating config schema\n FunctionUtil.cloneObject(sdkConfig);\n if (\n !DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser) &&\n !DataTypeUtil.isBoolean(sdkConfig.shouldTrackReturningUser)\n ) {\n logError('shouldTrackReturningUser', 'boolean');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser)) {\n logInfo('shouldTrackReturningUser', 'boolean');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode) &&\n !DataTypeUtil.isBoolean(sdkConfig.isDevelopmentMode)\n ) {\n logError('isDevelopmentMode', 'boolean');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode)) {\n logInfo('isDevelopmentMode', 'boolean');\n }\n\n if (sdkConfig.goalTypeToTrack && !objectValues(GoalTypeEnum).includes(sdkConfig.goalTypeToTrack)) {\n logError('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)');\n } else if (sdkConfig.goalTypeToTrack) {\n logInfo('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)');\n }\n\n if (\n sdkConfig.logging &&\n sdkConfig.logging.level &&\n !objectValues(LogLevelEnum).includes(sdkConfig.logging.level)\n ) {\n logError('logLevel', 'number(1,2,3,4)');\n } else if (sdkConfig.logging && sdkConfig.logging.level) {\n logInfo('logLevel', 'number(1,2,3,4)');\n }\n\n if (sdkConfig.pollingInterval && !DataTypeUtil.isNumber(sdkConfig.pollingInterval)) {\n logError('pollingInterval', 'number(in miliiseconds)');\n } else if (sdkConfig.pollingInterval) {\n logInfo('pollingInterval', 'number(in miliiseconds)');\n }\n\n if (sdkConfig.pollingInterval && DataTypeUtil.isUndefined(sdkConfig.sdkKey)) {\n logError('sdkKey(required for polling)', 'string');\n }\n\n if (sdkConfig.pollingInterval && !DataTypeUtil.isString(sdkConfig.sdkKey)) {\n logError('sdkKey', 'string');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents) && !DataTypeUtil.isObject(sdkConfig.batchEvents)) {\n logError('batchEvents', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents)) {\n logInfo('batchEvents', 'object');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor) && !DataTypeUtil.isObject(sdkConfig.returnPromiseFor)) {\n logError('returnPromiseFor', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor)) {\n logInfo('returnPromiseFor', 'object');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig) &&\n !DataTypeUtil.isObject(sdkConfig.asyncStorageConfig)\n ) {\n logError('asyncStorageConfig', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig)) {\n logInfo('asyncStorageConfig', 'object');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.integrations) && !DataTypeUtil.isObject(sdkConfig.integrations)) {\n logError('integrations', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.integrations)) {\n logInfo('integrations', 'object');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.userStorageService) &&\n !DataTypeUtil.isObject(sdkConfig.userStorageService)\n ) {\n logError('userStorageService', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.userStorageService)) {\n logInfo('userStorageService', 'object');\n }\n\n // For JavaScript SDK, batching is not required and is not available\n if (DataTypeUtil.isObject(sdkConfig.batchEvents) && typeof process.env === 'undefined') {\n sdkConfig.batchEvents = null;\n }\n\n // For Node.js SDK\n if (typeof process.env !== 'undefined') {\n if (\n DataTypeUtil.isObject(sdkConfig.batchEvents) &&\n (!(\n (DataTypeUtil.isNumber(sdkConfig.batchEvents.eventsPerRequest) &&\n sdkConfig.batchEvents.eventsPerRequest > 0 &&\n sdkConfig.batchEvents.eventsPerRequest <= MAX_EVENTS_PER_REQUEST) ||\n (DataTypeUtil.isNumber(sdkConfig.batchEvents.requestTimeInterval) &&\n sdkConfig.batchEvents.requestTimeInterval >= 1)\n ) ||\n (sdkConfig.batchEvents.flushCallback && !DataTypeUtil.isFunction(sdkConfig.batchEvents.flushCallback)))\n ) {\n logError('batchEvents', 'object');\n }\n }\n\n config = sdkConfig;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CONFIG_CORRUPTED, {\n file: file,\n api: ApiEnum.LAUNCH\n })\n );\n\n config = {};\n }\n\n // If DEV mode, set colorful logs to true\n if (config.isDevelopmentMode) {\n logging.setLogColorMode(true);\n }\n\n // If logging is enabled, use the logger and logLevel defined by the client\n if (config.logging && DataTypeUtil.isObject(config.logging)) {\n if (config.logging.haveColoredLogs !== undefined) {\n logging.setLogColorMode(config.logging.haveColoredLogs);\n }\n\n if (\n config.logging.logger &&\n DataTypeUtil.isObject(config.logging.logger) &&\n DataTypeUtil.isFunction(config.logging.logger.log)\n ) {\n logging.setLogHandler(config.logging.logger);\n logging.setLogLevel(logging.LogLevelEnum.NOTSET);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_CUSTOM_LOGGER_USED, {\n file: file\n })\n );\n } else if (config.logging.logger) {\n logError('logging.logger', 'object');\n }\n\n if (config.logging.level !== undefined) {\n logging.setLogLevel(config.logging.level);\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_LOG_LEVEL_SET, {\n file: file,\n level: LogNumberLevel['_' + config.logging.level]\n })\n );\n }\n }\n\n // DEBUG log for knowing whether it's DEV mode\n if (config.isDevelopmentMode) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, {\n file: file\n })\n );\n }\n\n // Set logger on config Obkect, to be required later\n config.logger = (config.logging && config.logging.logger) || logger;\n\n // Create an instance of VWO class which exposes API methods\n return new VWO(config);\n }\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet { validate, number, string, boolean, array, object, optional, union, type, record } = require('superstruct');\n\nconst campaignGoalSchema = type({\n id: union([number(), string()]),\n identifier: string(),\n type: string(),\n revenueProp: optional(string()),\n mca: optional(union([number(), string()]))\n});\n\nconst variableObjectSchema = type({\n id: union([number(), string()]),\n type: string(),\n key: string(),\n value: union([number(), string(), boolean()])\n});\n\nconst campaignVariationSchema = type({\n id: union([number(), string()]),\n name: string(),\n weight: union([number(), string()]),\n changes: optional(object()),\n segments: optional(object()),\n variables: optional(union([object(), array(variableObjectSchema)])),\n isFeatureEnabled: optional(boolean()),\n startVariationAllocation: optional(number()),\n endVariationAllocation: optional(number())\n});\n\nconst campaignObjectSchema = type({\n id: union([number(), string()]),\n type: string(),\n key: string(),\n status: string(),\n name: optional(string()),\n isBucketingSeedEnabled: optional(boolean()),\n percentTraffic: number(),\n goals: union([object(), array(campaignGoalSchema)]),\n variations: union([object(), array(campaignVariationSchema)]),\n variables: optional(union([object(), array(variableObjectSchema)])),\n segments: object(),\n isForcedVariationEnabled: optional(boolean()),\n isUserListEnabled: optional(boolean()),\n isMAB: optional(boolean())\n});\n\nconst groupSchema = type({\n et: optional(string()),\n p: optional(array(number())),\n wt: optional(record(string(), number())),\n groupName: string(),\n campaigns: array(number())\n});\n\nconst settingsFileSchema = type({\n sdkKey: optional(string()),\n version: union([number(), string()]),\n accountId: union([number(), string()]),\n campaigns: array(campaignObjectSchema),\n campaignGroups: optional(record(string(), number())),\n isEventArchEnabled: optional(boolean()),\n collectionPrefix: optional(string()),\n groups: optional(union([object(), record(string(), groupSchema)]))\n});\n\nconst validateSettingsFile = function(settings) {\n const [error] = validate(settings, settingsFileSchema);\n return !error;\n};\n\nmodule.exports = validateSettingsFile;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst EventDispatcher = require('../utils/EventDispatcherUtil');\n\nconst logging = require('./logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst HeadersEnum = require('../enums/HeadersEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.EventQueue;\n\nclass EventQueue {\n constructor() {\n this.running = false;\n this.queue = [];\n }\n\n process(config, properties, vwoInstance, { payload, responseCallback } = {}) {\n let customHeaders = {};\n\n if (properties && properties.visitor_ua) {\n customHeaders[HeadersEnum.USER_AGENT] = encodeURIComponent(properties.visitor_ua);\n properties.visitor_ua = customHeaders[HeadersEnum.USER_AGENT];\n }\n if (properties && properties.visitor_ip) {\n customHeaders[HeadersEnum.IP] = encodeURIComponent(properties.visitor_ip);\n properties.visitor_ip = customHeaders[HeadersEnum.IP];\n }\n\n if (config && config.isDevelopmentMode) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, {\n file\n })\n );\n return;\n }\n\n this.enqueue(properties, vwoInstance, { payload, responseCallback }, customHeaders);\n }\n\n enqueue(properties, vwoInstance, { payload, responseCallback }, customHeaders = {}) {\n this.queue.push({\n eventName: properties.eventName,\n properties: properties,\n callback: () => {\n if (payload) {\n EventDispatcher.dispatchPostCall(properties, payload, { responseCallback }, customHeaders);\n } else {\n EventDispatcher.dispatchGetCall(properties, { responseCallback }, customHeaders);\n }\n }\n });\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.EVENT_QUEUE, {\n file,\n queueType: 'normal',\n event: 'VWO_MASKED_PAYLOAD'\n })\n );\n\n vwoInstance.eventQueue.executeNext(properties);\n\n if (!this.running) {\n // if nothing is running, then start the engines!\n this.executeNext(properties);\n }\n\n return this;\n }\n\n executeNext(properties) {\n this.running = false;\n\n // get the first element off the queue\n if (this.queue && this.queue.length) {\n let event = this.queue.shift();\n\n if (event) {\n this.running = true;\n if (event.callback && DataTypeUtil.isFunction(event.callback)) {\n event.callback(properties);\n }\n }\n }\n }\n}\n\nmodule.exports = EventQueue;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\n/**\n * Hooks Manager is responsible for triggering callbacks useful to the end-user based on certain lifecycle events.\n * Possible use with integrations when the user intends to send an event when a visitor is part of the experiment.\n */\nconst HooksManager = {\n /**\n * Initializes with configuration from VWO Object.\n * @param {Object} config\n */\n init(config = {}) {\n this.callback = config.integrations && config.integrations.callback;\n },\n /**\n * Executes the callback\n * @param {Object} properties Properties from the callback\n */\n execute(properties) {\n if (DataTypeUtil.isFunction(this.callback)) {\n this.callback(properties);\n }\n }\n};\n\nmodule.exports = HooksManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst FunctionUtil = require('../utils/FunctionUtil');\nconst SettingsFileUtil = require('../utils/SettingsFileUtil');\n\nconst logging = require('./logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst validateSettingsFile = require('../schemas/SettingsFileSchema');\nconst { isObject } = require('../utils/DataTypeUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.SettingsFileManager;\n\nclass SettingsFileManager {\n // PRIVATE METHODS\n\n constructor(config) {\n if (config) {\n if (\n (config.settingsFile && isObject(config.settingsFile.campaigns)) ||\n (config.settingsFile && !config.settingsFile.campaigns)\n ) {\n config.settingsFile.campaigns = [];\n }\n\n this._configObj = config;\n this._clonedSettingsFile = config.settingsFile ? FunctionUtil.cloneObject(config.settingsFile) : null;\n } else {\n this._configObj = null;\n this._clonedSettingsFile = null;\n }\n }\n\n _setVariationBucketing(campaign) {\n CampaignUtil.setVariationAllocation(campaign);\n }\n\n // PUBLIC METHODS\n\n isSettingsFileValid() {\n if (!this._configObj || !this._clonedSettingsFile) {\n return false;\n }\n let isValidSettingsFile = validateSettingsFile(this._clonedSettingsFile);\n\n if (!isValidSettingsFile) {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_CORRUPTED, {\n file\n })\n );\n\n return false;\n }\n\n return true;\n }\n\n checkAndPoll() {\n if (!this._configObj.pollingInterval || !this._configObj.sdkKey) {\n return;\n }\n\n let lastSettingsFile = JSON.stringify(this._clonedSettingsFile);\n setInterval(() => {\n SettingsFileUtil.get(this._clonedSettingsFile.accountId, this._configObj.sdkKey)\n .then(latestSettingsFile => {\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SUCCESS, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n const stringifiedLatestSettingsFile = JSON.stringify(latestSettingsFile);\n\n if (stringifiedLatestSettingsFile !== lastSettingsFile) {\n lastSettingsFile = stringifiedLatestSettingsFile;\n\n this.updateSettingsFile(latestSettingsFile);\n\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SETTINGS_FILE_UPDATED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n } else {\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SETTINGS_FILE_NOT_UPDATED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n }\n })\n .catch(_e => {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.POLLING_FAILED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n });\n }, this._configObj.pollingInterval);\n\n this._configObj.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.POLLING_SETTINGS_FILE_REGISTERED, {\n file,\n pollingInterval: this._configObj.pollingInterval\n })\n );\n }\n processSettingsFile() {\n let settingsFile = this._clonedSettingsFile;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n let campaign = settingsFile.campaigns[i];\n\n this._setVariationBucketing(campaign);\n }\n\n this._configObj.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SETTINGS_FILE_PROCESSED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n\n return settingsFile;\n }\n\n /**\n * Fetch latest settings-file and update so that vwoClientInstance could use latest settings\n * Helpful especially when using webhooks\n *\n * @param {Number} accountId\n * @param {String} sdkKey\n *\n * @return {Promise}\n */\n getAndUpdateSettingsFile(accountId = this._clonedSettingsFile.accountId, sdkKey = this._clonedSettingsFile.sdkKey) {\n return new Promise((resolve, _reject) => {\n SettingsFileUtil.get(accountId, sdkKey, null, { isViaWebhook: true })\n .then(settings => {\n this.updateSettingsFile(settings);\n resolve(settings);\n })\n .catch(_err => {});\n });\n }\n\n /**\n * Update the settings-file on the instance so that latest settings could be used from next hit onwards\n * @param {Object} settings\n */\n updateSettingsFile(settings) {\n this._clonedSettingsFile = FunctionUtil.cloneObject(settings);\n this.processSettingsFile();\n }\n\n getConfig() {\n return this._configObj;\n }\n\n getSettingsFile(api) {\n if (!this._clonedSettingsFile) {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_HAS_CORRUPTED_SETTINGS_FILE, {\n file,\n api\n })\n );\n }\n return this._clonedSettingsFile;\n }\n}\nmodule.exports = SettingsFileManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst UrlEnum = require('../enums/UrlEnum');\nconst { isString } = require('../utils/DataTypeUtil');\n\nconst UrlService = {\n init({ collectionPrefix } = {}) {\n if (collectionPrefix && isString(collectionPrefix)) {\n UrlService.collectionPrefix = collectionPrefix;\n }\n\n return UrlService;\n },\n\n getBaseUrl() {\n const baseUrl = UrlEnum.BASE_URL;\n\n if (UrlService.collectionPrefix) {\n return `${baseUrl}/${UrlService.collectionPrefix}`;\n }\n\n return baseUrl;\n }\n};\n\nmodule.exports = UrlService;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { LogManager } = require('./logging');\n\nclass UsageStats {\n constructor() {\n this.data = {};\n }\n\n /**\n * Collect the usage stats from the params passed at the time of instantiating VWO and send them to VWO Server\n * @param {Object} config config passed at the time of instantiation.\n */\n collectUsageStats(config) {\n this.data['eb'] = Number(!!config.batchEvents);\n this.data['ig'] = Number(!!config.integrations);\n this.data['ss'] = Number(!!config.userStorageService);\n this.data['cl'] = Number(!(config.logger instanceof LogManager));\n this.data['ll'] = Number(config.logging && config.logging.level);\n this.data['tr'] = Number(config.shouldTrackReturningUser);\n this.data['gt'] = Number(!!config.goalTypeToTrack);\n this.data['pi'] = Number(!!config.pollingInterval);\n\n Object.keys(this.data).forEach(function(key) {\n if (!this.data[key]) {\n delete this.data[key];\n }\n }, this);\n }\n\n /**\n * Get the collected usage stats.\n * @returns collected usage stats data\n */\n getUsageStats() {\n if (Object.keys(this.data).length > 0) {\n this.data['_l'] = 1;\n }\n return this.data;\n }\n}\n\nmodule.exports = UsageStats;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { getCurrentTime } = require('../../utils/FunctionUtil');\nconst { LogLevelEnum, LogLevelInfoEnum, LogLevelColorInfoEnum } = require('../../enums/LogLevelEnum');\n\nclass ConsoleLogManager {\n constructor() {\n this.logLevel = LogLevelEnum.NOTSET;\n this.prefix = `VWO-SDK`;\n this.isColoredLogEnabled = false;\n }\n\n log(level, message) {\n if (!this.shouldLog(level)) {\n return;\n }\n\n let logMessage;\n if (this.isColoredLogEnabled) {\n logMessage = `${this.prefix} - ${LogLevelColorInfoEnum[level]} ${getCurrentTime()} ${message}`;\n } else {\n logMessage = `${this.prefix} - ${LogLevelInfoEnum[level]} ${getCurrentTime()} ${message}`;\n }\n\n this.consoleLog(level, [logMessage]);\n }\n\n shouldLog(targetLogLevel) {\n return targetLogLevel >= this.logLevel;\n }\n\n setLogLevel(level) {\n if (level === undefined) {\n this.logLevel = LogLevelEnum.ERROR;\n } else {\n this.logLevel = level;\n }\n }\n\n consoleLog(level, logArguments) {\n switch (level) {\n case LogLevelEnum.INFO:\n console.info.apply(console, logArguments);\n break;\n case LogLevelEnum.WARN:\n console.warn.apply(console, logArguments);\n break;\n case LogLevelEnum.ERROR:\n console.error.apply(console, logArguments);\n break;\n default:\n console.log.apply(console, logArguments);\n break;\n }\n }\n}\n\nmodule.exports = ConsoleLogManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Took reference from: \"loglevel\" - https://github.com/pimterry/loglevel\n *\n * Name: loglevel\n * Published Name: loglevel\n * URL: https://github.com/pimterry/loglevel\n * Description: Minimal lightweight logging for JavaScript, adding reliable log level methods to wrap any available console.log methods\n * Author: Tim Perry (https://github.com/pimterry)\n * LICENSE: MIT License\n * Local Modifications: This library is not used as a dependency. Source code was referenced and is modified as per requirements.\n *\n */\n\n// TODO: change path\nconst LogMessageEnum = {\n DEBUG_MESSAGES: require('vwo-sdk-log-messages/src/debug-messages.json'),\n INFO_MESSAGES: require('vwo-sdk-log-messages/src/info-messages.json'),\n WARNING_MESSAGES: require('vwo-sdk-log-messages/src/warning-messages.json'),\n ERROR_MESSAGES: require('vwo-sdk-log-messages/src/error-messages.json')\n};\n\nconst { LogLevelEnum, LogNumberLevel } = require('../../enums/LogLevelEnum');\nconst LogMessageUtil = require('../../utils/LogMessageUtil');\n\nconst ConsoleLogManager = require('./ConsoleLogManager');\n\nlet globalLogLevel = LogLevelEnum.NOTSET;\nlet isColoredLogEnabled = false;\nlet globalLogHandler = new ConsoleLogManager();\n\nclass LogManager {\n constructor(name) {\n this.name = name;\n this.isColoredLogEnabled = isColoredLogEnabled;\n }\n\n _customLog(level, message) {\n if (level < globalLogLevel) {\n return;\n }\n\n globalLogHandler.log(level, message);\n }\n\n log(level, message, disableLogs = false) {\n if (disableLogs) {\n return;\n }\n try {\n this._customLog(level, message);\n } catch (err) {\n console.error('VWO: Could not log.', err);\n }\n }\n\n info(message) {\n this._customLog(LogLevelEnum.INFO, message);\n }\n debug(message) {\n this._customLog(LogLevelEnum.DEBUG, message);\n }\n warn(message) {\n this._customLog(LogLevelEnum.WARN, message);\n }\n error(message) {\n this._customLog(LogLevelEnum.ERROR, message);\n }\n}\n\nfunction getLogger(name) {\n return new LogManager(name);\n}\n\nfunction setLogHandler(logger) {\n globalLogHandler = logger;\n}\n\nfunction setLogLevel(level) {\n if (level === undefined) {\n globalLogLevel = LogLevelEnum.ERROR;\n } else {\n globalLogLevel = level;\n }\n}\n\nfunction getLogLevel() {\n return globalLogLevel;\n}\n\nfunction setLogColorMode(value) {\n isColoredLogEnabled = value;\n globalLogHandler.isColoredLogEnabled = isColoredLogEnabled;\n}\n\nfunction getLogColorMode() {\n return isColoredLogEnabled;\n}\n\nmodule.exports = {\n LogLevelEnum,\n LogNumberLevel,\n LogMessageUtil,\n LogMessageEnum,\n getLogger,\n setLogHandler,\n setLogLevel,\n getLogLevel,\n LogManager,\n setLogColorMode,\n getLogColorMode,\n globalLogHandler\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('./LoggingManager');\n\nmodule.exports = logging;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ValidateUtil = require('./ValidateUtil');\nconst VWOFeatureFlags = require('./VWOFeatureFlags');\nconst Constants = require('../constants');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\nconst CampaignTypeEnum = require('../enums/CampaignTypeEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nlet CampaignUtil = {\n /**\n * Returns the bucket size of variation.\n *\n * @param {Number/Float} - weight of variation\n *\n * @return {Number} bucket start range of Variation\n */\n _getVariationBucketRange: variationWeight => {\n if (!variationWeight || variationWeight === 0) {\n return 0;\n }\n\n const startRange = Math.ceil(variationWeight * 100);\n\n return Math.min(startRange, Constants.MAX_TRAFFIC_VALUE);\n },\n\n /**\n * Get the campaign on the basis of campaign id\n *\n * @param {Object} settingsFile\n * @param {Number} campaignId\n *\n * @returns {Object} campaign object\n */\n getCampaignBasedOnId: (settingsFile, campaignId) => {\n let campaign;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n if (parseInt(settingsFile.campaigns[i].id, 10) === parseInt(campaignId, 10)) {\n campaign = settingsFile.campaigns[i];\n\n break;\n }\n }\n\n return campaign;\n },\n /**\n * It extracts the weights from all the variations inside the campaign\n and scales them so that the total sum of eligible variations' weights become 100%\n\n 1. variations\n */\n scaleVariationWeights: variations => {\n const totalWeight = variations.reduce((acc, variation) => {\n return acc + variation.weight;\n }, 0);\n if (!totalWeight) {\n const weight = 100 / variations.length;\n variations.forEach(variation => (variation.weight = weight));\n } else {\n variations.forEach(variation => (variation.weight = (variation.weight / totalWeight) * 100));\n }\n },\n\n getCampaign: (settingsFile, campaignKey) => {\n let campaign;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n if (settingsFile.campaigns[i].key === campaignKey) {\n campaign = settingsFile.campaigns[i];\n\n break;\n }\n }\n\n return campaign;\n },\n /**\n * Gets campaigns for corresponding campaignKeys\n *\n * @param {Object} settingsFile\n * @param {Array} campaignKeys\n *\n * @return {Array} Campaigns\n */\n getCampaignsForKeys: (settingsFile, campaignKeys) => {\n const campaigns = [];\n campaignKeys.forEach(key => {\n let campaign = CampaignUtil.getCampaign(settingsFile, key);\n if (campaign) {\n campaigns.push(campaign);\n } else {\n campaigns.push({\n key\n });\n }\n });\n return campaigns;\n },\n /**\n * Gets campaigns which have the goalIdentifier present\n *\n * @param {settingsFile}\n * @param {String} goalIdentifier\n * @param {String} goalTypeToTrack type of goal to track\n *\n * @return {Array} Campaigns\n */\n getCampaignsForGoal: (settingsFile, goalIdentifier, goalTypeToTrack) => {\n let campaigns = [];\n settingsFile.campaigns.forEach(campaign => {\n const goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier);\n if (goal && (goalTypeToTrack === GoalTypeEnum.ALL || goal.type === goalTypeToTrack)) {\n campaigns.push(campaign);\n }\n });\n if (!campaigns.length) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CAMPAIGN_NOT_FOUND_FOR_GOAL, {\n file: FileNameEnum.CampaignUtil,\n goalIdentifier\n })\n );\n }\n return campaigns;\n },\n getCampaignStatus: (settingsFile, campaignKey) => {\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign || !campaign.status) {\n // log error\n return '';\n }\n\n return campaign.status.toLowerCase();\n },\n\n isCampaignRunning: (settingsFile, campaignKey) => {\n return CampaignUtil.getCampaignStatus(settingsFile, campaignKey) === 'running';\n },\n /**\n * Validates the campaign\n *\n * @param {Campaign} campaign the campaign to be validated\n *\n * @return {Boolean} true is campaign is valid\n */\n validateCampaign: campaign => {\n return ValidateUtil.isValidValue(campaign) && campaign.variations && Object.keys(campaign.variations).length > 0;\n },\n\n /**\n * Assigns the buckets to the Variations of the campaign\n * depending on the traffic allocation\n *\n * @param {Campaign} campaign whose Variations are to be allocated\n */\n setVariationAllocation: campaign => {\n const numberOfVariations = campaign.variations.length;\n let stepFactor = 0;\n\n for (let i = 0, currentAllocation = 0; i < numberOfVariations; i++) {\n let variation = campaign.variations[i];\n\n stepFactor = CampaignUtil.assignRangeValues(variation, currentAllocation);\n currentAllocation += stepFactor;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.VARIATION_RANGE_ALLOCATION, {\n file: FileNameEnum.CampaignUtil,\n campaignKey: campaign.key,\n variationName: variation.name,\n variationWeight: variation.weight,\n start: variation.startVariationAllocation,\n end: variation.endVariationAllocation\n })\n );\n }\n },\n\n /**\n * Assign range allocation to the campaigns in the list to decide which campaign to choose out of the Mutually Exclusive group\n *\n * @param {Array} campaigns\n */\n setCampaignAllocation: campaigns => {\n let stepFactor = 0;\n\n for (let i = 0, currentAllocation = 0; i < campaigns.length; i++) {\n let campaign = campaigns[i];\n\n stepFactor = CampaignUtil.assignRangeValues(campaign, currentAllocation);\n currentAllocation += stepFactor;\n }\n },\n\n assignRangeValues: (variation, currentAllocation) => {\n let stepFactor;\n stepFactor = CampaignUtil._getVariationBucketRange(variation.weight);\n\n if (stepFactor) {\n variation.startVariationAllocation = currentAllocation + 1;\n variation.endVariationAllocation = currentAllocation + stepFactor;\n } else {\n variation.startVariationAllocation = -1;\n variation.endVariationAllocation = -1;\n }\n return stepFactor;\n },\n getCampaignGoal: (settingsFile, campaignKey, goalIdentifier) => {\n let desiredCampaignGoal = null;\n\n if (!settingsFile || !campaignKey || !goalIdentifier) {\n return desiredCampaignGoal;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign) {\n return desiredCampaignGoal;\n }\n\n for (let i = 0; i < campaign.goals.length; i++) {\n let goal = campaign.goals[i];\n\n if (goal.identifier === goalIdentifier) {\n desiredCampaignGoal = goal;\n break;\n }\n }\n\n return desiredCampaignGoal;\n },\n getCampaignVariation: (settingsFile, campaignKey, variationName) => {\n let desiredVariation = null;\n\n if (!settingsFile || !campaignKey || !variationName) {\n return desiredVariation;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign) {\n return desiredVariation;\n }\n\n for (let i = 0; i < campaign.variations.length; i++) {\n let variation = campaign.variations[i];\n\n if (variation.name === variationName) {\n desiredVariation = variation;\n\n break;\n }\n }\n\n return desiredVariation;\n },\n getControlForCampaign: campaign => {\n let control = {};\n\n if (!campaign || !campaign.variations) {\n return control;\n }\n\n for (let i = 0; i < campaign.variations.length; i++) {\n if (campaign.variations[i].id === 1) {\n control = campaign.variations[i];\n break;\n }\n }\n\n return control;\n },\n isFeatureTestCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.FEATURE_TEST) {\n return true;\n }\n\n return false;\n },\n isFeatureRolloutCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT) {\n return true;\n }\n\n return false;\n },\n isAbCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.AB) {\n return true;\n }\n\n return false;\n },\n\n /**\n * Check if the campaign is a part of mutually exclusive group\n *\n * @param {Object} settingsFile\n * @param {Number} campaignId\n *\n * @returns {Number} group id of the campaign.\n */\n isPartOfGroup: (settingsFile, campaignId) => {\n if (settingsFile.campaignGroups && Object.prototype.hasOwnProperty.call(settingsFile.campaignGroups, campaignId)) {\n return {\n groupId: settingsFile.campaignGroups[campaignId],\n groupName: settingsFile.groups[settingsFile.campaignGroups[campaignId]].name\n };\n }\n return {};\n },\n\n /**\n * Get the list of campaigns on the basis of their id\n *\n * @param {Object} settingsFile\n * @param {Number} groupId\n *\n * @returns {Array} list of campaigns\n */\n getGroupCampaigns: (settingsFile, groupId) => {\n const campaigns = [];\n if (Object.prototype.hasOwnProperty.call(settingsFile.groups, groupId)) {\n settingsFile.groups[groupId].campaigns.forEach(campaignId => {\n let campaign = CampaignUtil.getCampaignBasedOnId(settingsFile, campaignId);\n if (campaign) {\n campaigns.push(campaign);\n }\n });\n }\n return campaigns;\n },\n\n /**\n * Decide the Seed for murmurhash to bucket user.\n * @param {string} userId\n * @param {object} campaign\n * @param {number} groupId\n *\n * @returns {string} Seed value\n */\n getBucketingSeed: (userId, campaign, groupId) => {\n if (groupId) {\n return `${groupId}_${userId}`;\n }\n\n const isNB = VWOFeatureFlags.getAll().isNB;\n const isNBv2 = VWOFeatureFlags.getAll().isNBv2;\n\n if (isNB || isNBv2 || (campaign && campaign.isBucketingSeedEnabled)) {\n return `${campaign.id}_${userId}`;\n } else {\n return userId;\n }\n }\n};\n\nmodule.exports = CampaignUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = {\n _toStringValue: function(val) {\n return Object.prototype.toString.call(val);\n },\n isNumber: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Number]';\n },\n isString: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object String]';\n },\n isObject: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Object]';\n },\n isFunction: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Function]';\n },\n isBoolean: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Boolean]';\n },\n isPromise: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Promise]';\n },\n isUndefined: function(val) {\n return (\n DataTypeUtil._toStringValue(val) === '[object Undefined]' ||\n // A third-party library sometimes overrides and returns [object Window]\n // therefore, adding a fallback as well\n typeof val === 'undefined'\n );\n },\n isNull: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Null]';\n },\n isArray: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Array]';\n }\n};\n\nmodule.exports = DataTypeUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VariationDecider = require('../core/VariationDecider');\nconst BucketingService = require('../core/BucketingService');\n\nconst CampaignUtil = require('./CampaignUtil');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst FunctionUtil = require('./FunctionUtil');\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst StatusEnum = require('../enums/StatusEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst SegmentEvaluator = require('../core/SegmentEvaluator');\nconst HooksManager = require('../services/HooksManager');\nconst HooksEnum = require('../enums/HooksEnum');\nconst UuidUtil = require('./UuidUtil');\nconst Constants = require('../constants');\nconst CampaignTypeEnum = require('../enums/CampaignTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\nconst RandomAlgo = 1;\n\nconst file = FileNameEnum.DecisionUtil;\n\nconst SegmentationTypeEnum = {\n WHITELISTING: 'whitelisting',\n PRE_SEGMENTATION: 'pre-segmentation'\n};\n\nlet DecisionUtil = {\n // PUBLIC METHODS\n /**\n * 1. Checks if there is a variation stored in userStorage, returns it\n * 2. If Whitelisting is applicable, evaluate it, if any eligible variation is found, store it in User Storage service and return, otherwise skip it.\n * 3. Check if the campaign is part of mutually exclusive group, if yes, get the winner campaign using campaign traffic normalization.\n * 4. If Pre-segmentation is applied and passes then go further otherwise return early and no further processing\n * 5. If no user storage value, no whitelisted variation and pre-segmentation evaluates to true, get variation using hashing logic if campaign traffic passes for that userId\n *\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} campaign\n * @param {Object} campaignKey\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} variationTargetingVariables\n *\n * @return {Object|null} - Object if a variation is assigned, otherwise null\n */\n getVariation: (\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables = {},\n userStorageData = {},\n metaData,\n isTrackUserAPI,\n isTrackGoalAPI,\n newGoalIdentifier,\n api = ''\n ) => {\n let vwoUserId = UuidUtil.generateFor(userId, settingsFile.accountId);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_UUID, {\n file: FileNameEnum.UuidUtil,\n userId,\n accountId: settingsFile.accountId,\n uuid: vwoUserId\n })\n );\n\n let decision = {\n // campaign info\n campaignId: campaign.id,\n campaignKey,\n campaignType: campaign.type,\n campaignName: campaign.name,\n // campaign segmentation conditions\n customVariables,\n // event name\n event: HooksEnum.DECISION_TYPES.CAMPAIGN_DECISION,\n // goal tracked in case of track API\n goalIdentifier: newGoalIdentifier,\n // campaign whitelisting flag\n isForcedVariationEnabled: campaign.isForcedVariationEnabled,\n sdkVersion: Constants.SDK_VERSION,\n // API name which triggered the event\n source: api,\n // Passed in API\n userId,\n // Campaign Whitelisting conditions\n variationTargetingVariables,\n // VWO generated UUID based on passed UserId and Account ID\n vwoUserId\n };\n\n // check if the campaign is a part of group\n const { groupId, groupName } = CampaignUtil.isPartOfGroup(settingsFile, campaign.id);\n\n if (groupId) {\n // append groupId and groupName, if campaign is a part of group\n decision['groupId'] = groupId;\n decision['groupName'] = groupName;\n }\n\n variationTargetingVariables = Object.assign({}, variationTargetingVariables, {\n _vwoUserId: campaign.isUserListEnabled ? vwoUserId : userId\n });\n\n // check if tbe campaign satisfies the whitelisting before checking for the group\n const whitelistedVariation = DecisionUtil._checkForWhitelisting(\n config,\n campaign,\n campaignKey,\n userId,\n variationTargetingVariables,\n decision\n );\n if (whitelistedVariation) {\n if (DataTypeUtil.isPromise(whitelistedVariation)) {\n return whitelistedVariation.then(data => {\n if (Object.keys(data).length > 0) {\n return data;\n }\n });\n } else {\n return whitelistedVariation;\n }\n }\n\n // check if the campaign is present in the storage before checking for the group\n\n let storedVariation;\n // check if asyncStorage, if yes then synchronously get the data and return promise\n if (config.asyncStorageConfig) {\n return new Promise(resolve => {\n return DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n ).then(function(response) {\n if (response && DataTypeUtil.isObject(response) && Object.keys(response).length > 0) {\n resolve(Object.assign({}, { isStoredVariation: true }, response));\n } else if (isTrackGoalAPI) {\n resolve(Object.assign({}));\n } else {\n const variationWithoutStorageLookup = DecisionUtil.evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n );\n resolve(variationWithoutStorageLookup);\n }\n });\n });\n } else {\n storedVariation = DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n );\n }\n\n if (storedVariation) {\n return storedVariation;\n }\n\n return DecisionUtil.evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n );\n },\n\n evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n ) {\n // check if the called campaign satisfies the pre-segmentation before further processing.\n if (\n !(\n DecisionUtil._checkForPreSegmentation(campaign, campaignKey, userId, customVariables, decision) &&\n BucketingService.isUserPartOfCampaign(userId, campaign, true)\n )\n ) {\n return {};\n }\n\n if (groupId) {\n // mutually exclusive group exists\n\n // get the list of the all the campaigns in a group\n const campaignList = CampaignUtil.getGroupCampaigns(settingsFile, groupId);\n\n if (campaignList.length === 0) {\n // return if no campaigns are active in a group\n return {};\n }\n\n // checking other campaigns for whitelisting and user storage.\n let isWhitelistedOrStoredVariation = DecisionUtil._checkForStorageAndWhitelisting(\n config,\n settingsFile,\n groupName,\n campaignList,\n campaign,\n userId,\n userStorageData,\n variationTargetingVariables,\n isTrackUserAPI\n );\n\n if (isWhitelistedOrStoredVariation) {\n // other campaigns satisfy the whitelisting or storage, therfore returning\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: campaignKey\n })\n );\n if (DataTypeUtil.isPromise(isWhitelistedOrStoredVariation)) {\n return new Promise(resolve => {\n resolve(Object.assign({}));\n });\n }\n return {};\n }\n\n // none of the group campaigns satisfy whitelisting or user storage\n // check each campaign for pre-segmentation and traffic allocation.\n let inEligibleCampaignKeys = '';\n let eligibleCampaignKeys = '';\n const { eligibleCampaigns, inEligibleCampaigns } = DecisionUtil.getEligbleCampaigns(\n campaignList,\n userId,\n customVariables\n );\n\n inEligibleCampaigns.forEach(campaign => {\n inEligibleCampaignKeys = inEligibleCampaignKeys + campaign.key + ',';\n });\n eligibleCampaigns.forEach(campaign => {\n eligibleCampaignKeys = eligibleCampaignKeys + campaign.key + ',';\n });\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS, {\n userId,\n groupName,\n file,\n eligibleCampaignKeys: eligibleCampaignKeys.slice(0, -1),\n inEligibleText:\n inEligibleCampaignKeys === '' ? 'no campaigns' : `campaigns: ${inEligibleCampaignKeys.slice(0, -1)}`\n })\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS, {\n userId,\n groupName,\n file,\n noOfEligibleCampaigns: eligibleCampaigns.length,\n noOfGroupCampaigns: inEligibleCampaigns.length + eligibleCampaigns.length\n })\n );\n\n // Whether normalised/random implementation has to be done or advanced\n let megAlgoNumber =\n typeof settingsFile.groups[groupId].et !== 'undefined' ? settingsFile.groups[groupId].et : RandomAlgo;\n\n if (eligibleCampaigns.length === 1) {\n // if the called campaign is the only winner.\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n eligibleCampaigns[0],\n eligibleCampaigns[0].key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n if (megAlgoNumber === RandomAlgo) {\n // normalize the eligible campaigns and decide winner\n return DecisionUtil._normalizeAndFindWinningCampaign(\n config,\n campaign,\n eligibleCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n return DecisionUtil._advancedAlgoFindWinningCampaign(\n config,\n settingsFile,\n campaign,\n eligibleCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n );\n }\n }\n } else {\n // campaign is not a part of mutually exclusive group\n // check if the user is eligible to become part of the campaign and assign variation.\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n campaign,\n campaignKey,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n }\n },\n // PRIVATE METHODS\n\n _evaluateWhitelisting: (campaign, campaignKey, userId, variationTargetingVariables, disableLogs = false) => {\n let whitelistedVariation;\n let status;\n const targetedVariations = [];\n campaign.variations.forEach(variation => {\n if (DataTypeUtil.isObject(variation.segments) && !Object.keys(variation.segments).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file,\n variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT ? '' : `, for ${variation.name}`\n }),\n disableLogs\n );\n return;\n }\n if (\n DataTypeUtil.isObject(variation.segments) &&\n SegmentEvaluator(variation.segments, variationTargetingVariables, campaignKey, userId, variation.name)\n ) {\n status = StatusEnum.PASSED;\n targetedVariations.push(FunctionUtil.cloneObject(variation));\n } else {\n status = StatusEnum.FAILED;\n }\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(variationTargetingVariables),\n file,\n status,\n segmentationType: SegmentationTypeEnum.WHITELISTING,\n variation:\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT && status === StatusEnum.PASSED\n ? 'and becomes part of the rollout'\n : `for ${variation.name}`\n }),\n disableLogs\n );\n });\n\n if (targetedVariations.length > 1) {\n CampaignUtil.scaleVariationWeights(targetedVariations);\n for (let i = 0, currentAllocation = 0, stepFactor = 0; i < targetedVariations.length; i++) {\n stepFactor = CampaignUtil.assignRangeValues(targetedVariations[i], currentAllocation);\n currentAllocation += stepFactor;\n }\n whitelistedVariation = BucketingService._getVariation(\n targetedVariations,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, campaign))\n );\n } else {\n whitelistedVariation = targetedVariations[0];\n }\n\n if (whitelistedVariation) {\n return {\n variation: whitelistedVariation,\n variationName: whitelistedVariation.name,\n variationId: whitelistedVariation.id\n };\n }\n },\n /**\n * Get the User Variation mapping by calling get method of UserStorageService being provided\n *\n * @param {Object} config\n * @param {String} UserID\n * @param {String} campaignKey\n *\n * @return {Object} - User Campaign Mapping\n */\n _getStoredUserData: function(config, userId, campaignKey, userStorageData, disableLogs) {\n let userStorageMap = {\n userId: userId,\n variationName: null,\n campaignKey: campaignKey,\n goalIdentifier: null\n };\n\n if (!config.userStorageService) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, {\n file\n }),\n disableLogs\n );\n return userStorageMap;\n }\n\n if (config.asyncStorageConfig) {\n try {\n return config.userStorageService\n .get(userId, campaignKey)\n .then(data => {\n // if data found\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey\n }),\n disableLogs\n );\n\n let finalData = Object.assign({}, data, userStorageData);\n\n return finalData;\n })\n .catch(_error => {\n // TODO: add log for failed fetch\n console.log('Failed to fetch data from Storage Service', _error);\n });\n } catch (err) {\n // if no data found\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_GET_FAILED, {\n file,\n userId,\n error: err\n }),\n disableLogs\n );\n }\n } else {\n try {\n let data = config.userStorageService.get(userId, campaignKey) || {};\n\n // if data found\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey\n }),\n disableLogs\n );\n\n return Object.assign({}, data, userStorageData);\n } catch (err) {\n // if no data found\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_GET_FAILED, {\n file,\n userId,\n error: err\n }),\n disableLogs\n );\n }\n }\n },\n\n /**\n * If UserStorageService is provided and variation was stored, save the assigned variation\n *\n * @param {Object} campaign\n * @param {String} variationName\n * @param {String} userId\n *\n * @return {Boolean} - true if found otherwise false\n */\n _saveUserData: function(config, campaign, variationName, userId, metaData, goalIdentifier) {\n let isSaved = false;\n\n if (!config.userStorageService) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, {\n file\n })\n );\n return isSaved;\n }\n\n try {\n const properties = {\n userId: userId,\n variationName,\n campaignKey: campaign.key\n };\n\n if (!DataTypeUtil.isUndefined(goalIdentifier)) {\n properties.goalIdentifier = goalIdentifier;\n }\n\n if (!DataTypeUtil.isUndefined(metaData)) {\n properties.metaData = metaData;\n }\n\n config.userStorageService.set(properties);\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey: campaign.key\n })\n );\n\n isSaved = true;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_SET_FAILED, {\n file,\n userId,\n error: err\n })\n );\n\n isSaved = false;\n }\n\n return isSaved;\n },\n\n /**\n * Evaluate the campaign for whitelisting and store\n * This method would be run only for MEG campaigns\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Array} campaignList\n * @param {Object} calledCampaign\n * @param {String} userId\n * @param {Object} userStorageData\n * @param {Object} variationTargetingVariables\n * @param {Boolean} isTrackUserAPI\n *\n * @returns {Boolean} - true, if whitelisting/storage is satisfied for any campaign\n */\n _checkForStorageAndWhitelisting(\n config,\n settingsFile,\n groupName,\n campaignList,\n calledCampaign,\n userId,\n userStorageData,\n variationTargetingVariables,\n isTrackUserAPI\n ) {\n let otherCampaignWinner = false;\n campaignList.some(groupCampaign => {\n if (groupCampaign.id === calledCampaign.id) {\n return;\n }\n // create a local copy of the campaigns\n // groupCampaign = FunctionUtil.cloneObject(groupCampaign);\n // checking other campaigns for whitelisting or user storage.\n const whitelistedVariation = DecisionUtil._checkForWhitelisting(\n config,\n groupCampaign,\n groupCampaign.key,\n userId,\n variationTargetingVariables\n );\n if (whitelistedVariation) {\n if (DataTypeUtil.isPromise(whitelistedVariation)) {\n return whitelistedVariation.then(data => {\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'whitelisting'\n })\n );\n return new Promise(resolve => {\n resolve(true);\n });\n });\n } else {\n // other campaign satisfy the whitelisting\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'whitelisting'\n })\n );\n return true;\n }\n }\n\n const storedVariation = DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n groupCampaign,\n groupCampaign.key,\n userId,\n userStorageData,\n isTrackUserAPI\n );\n\n if (storedVariation && DataTypeUtil.isPromise(storedVariation)) {\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'user storage'\n })\n );\n // return true;\n return new Promise(resolve => {\n resolve(true);\n });\n }\n if (storedVariation && DataTypeUtil.isObject(storedVariation) && Object.keys(storedVariation).length > 0) {\n // other campaign satisfy the user storage\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'user storage'\n })\n );\n return true;\n }\n });\n if (config.asyncStorageConfig) {\n return new Promise(resolve => {\n resolve(otherCampaignWinner);\n });\n }\n return otherCampaignWinner;\n },\n\n /**\n * Evaluate a campaign for pre-segmentation.\n *\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} decision\n *\n * @returns {Boolean} true, if the pre-segmentation is satisfied.\n */\n _checkForPreSegmentation: (campaign, campaignKey, userId, customVariables, decision) => {\n let status;\n if (DataTypeUtil.isObject(campaign.segments) && !Object.keys(campaign.segments).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n !decision\n );\n return true;\n } else {\n const preSegmentationResult = SegmentEvaluator(\n campaign.segments,\n customVariables,\n campaignKey,\n userId,\n !decision\n );\n if (!preSegmentationResult) {\n status = StatusEnum.FAILED;\n } else {\n status = StatusEnum.PASSED;\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(customVariables || {}),\n file,\n status,\n segmentationType: SegmentationTypeEnum.PRE_SEGMENTATION,\n variation: ''\n }),\n !decision\n );\n\n if (status === StatusEnum.FAILED) {\n return false;\n } else {\n return true;\n }\n }\n },\n\n /**\n * Check if user is eligible for the camapign based on traffic percentage and assign variation.\n * @param {Object} config\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n * @returns {Object} variation assigned to the user\n */\n evaluateTrafficAndGetVariation(config, campaign, campaignKey, userId, metaData, newGoalIdentifier, decision) {\n let variation, variationName, variationId;\n // Use our core's VariationDecider utility to get the deterministic variation assigned to the userId for that campaign\n ({ variation, variationName, variationId } = VariationDecider.getVariationAllotted(\n userId,\n campaign,\n config.settingsFile.accountId\n ));\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_ALLOCATION_STATUS, {\n file,\n campaignKey,\n userId,\n status: variationName ? `got variation:${variationName}` : 'did not get any variation'\n })\n );\n\n // Check if variation-name has been assigned to the userId. If not, return no variation\n if (variationName) {\n // If userStorageService is provided, look into it for the saved variation for the campaign and userId\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, newGoalIdentifier);\n }\n\n // Executing the callback when SDK makes the decision\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: false,\n isUserWhitelisted: false\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n\n return {\n variation: variation && variation.variation,\n variationName,\n variationId\n };\n },\n\n /**\n * Evaluate a campaign for whitelisting\n *\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} variationTargetingVariables\n * @param {Object} decision\n *\n * @returns {Object} whitelisted variation\n */\n _checkForWhitelisting: (config, campaign, campaignKey, userId, variationTargetingVariables, decision) => {\n let status;\n let variationName, variationId;\n if (campaign.isForcedVariationEnabled) {\n let whitelistingResult = DecisionUtil._evaluateWhitelisting(\n campaign,\n campaignKey,\n userId,\n variationTargetingVariables,\n !decision\n );\n let variationString;\n if (whitelistingResult) {\n status = StatusEnum.PASSED;\n variationString = whitelistingResult.variationName;\n } else {\n status = StatusEnum.FAILED;\n variationString = '';\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(variationTargetingVariables),\n file,\n status,\n segmentationType: SegmentationTypeEnum.WHITELISTING,\n variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT ? '' : `for variation: ${variationString}`\n }),\n !decision\n );\n\n if (whitelistingResult) {\n variationName = whitelistingResult.variationName;\n variationId = whitelistingResult.variationId;\n // Executing the callback when SDK has made a decision in case of whitelisting\n if (decision) {\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: false,\n isUserWhitelisted: !!variationName\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n }\n if (config.asyncStorageConfig) {\n return new Promise(resolve => resolve(whitelistingResult));\n }\n return whitelistingResult;\n }\n } else {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.WHITELISTING_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n !decision\n );\n }\n },\n\n /**\n * Check if the variation is present in the user storage\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} userStorageData\n * @param {Boolean} isTrackUserAPI\n * @param {Object} decision\n *\n * @returns {Object} stored variaition\n */\n _checkForUserStorage: (\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n ) => {\n let userData;\n\n if (config.asyncStorageConfig) {\n return DecisionUtil._getStoredUserData(config, userId, campaignKey, userStorageData, !decision).then(function(\n userData\n ) {\n userData = userData || { variationName: null, goalIdentifier: null };\n\n return DecisionUtil._processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n );\n });\n } else {\n userData = DecisionUtil._getStoredUserData(config, userId, campaignKey, userStorageData, !decision);\n\n return DecisionUtil._processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n );\n }\n },\n\n _processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n ) {\n let { variationName, goalIdentifier } = userData;\n let storedVariation;\n\n if (userData && userData.campaignKey && variationName) {\n storedVariation = CampaignUtil.getCampaignVariation(settingsFile, campaignKey, variationName);\n } else {\n // Log if stored variation is not found even after implementing UserStorageService\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NO_STORED_DATA, {\n file,\n campaignKey,\n userId\n }),\n !decision\n );\n }\n\n let variationId;\n\n // If stored variation is found, simply return the same\n if (storedVariation) {\n variationName = storedVariation.name;\n variationId = storedVariation.id;\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GOT_STORED_VARIATION, {\n file,\n campaignKey,\n userId,\n variationName\n }),\n !decision\n );\n\n // Executing the callback when SDK gets the decision from user storage service\n if (decision) {\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: !!variationName,\n isUserWhitelisted: false\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n }\n\n return {\n variation: storedVariation,\n variationName,\n variationId,\n storedGoalIdentifier: goalIdentifier,\n isStoredVariation: true\n };\n } else if (\n !DataTypeUtil.isUndefined(config.userStorageService) &&\n !isTrackUserAPI &&\n DataTypeUtil.isUndefined(storedVariation)\n ) {\n logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_ACTIVATED, {\n file,\n campaignKey,\n userId,\n api: config.apiName\n }),\n !decision\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_NOT_ACTIVATED, {\n file,\n campaignKey,\n userId,\n reason: config.apiName === ApiEnum.TRACK ? 'track it' : 'get the decision/value'\n }),\n !decision\n );\n return {};\n }\n },\n\n /**\n * Evaluate the list of campaigns for pre-segmentation and campaign traffic allocation and assign variation to the user.\n * This method will be used for MEG campaigns\n *\n * @param {Object} config\n * @param {Array} campaignList\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n *\n * @returns {Array} list of campaigns which satisfies the conditions.\n */\n getEligbleCampaigns(campaignList, userId, customVariables) {\n let eligibleCampaigns = [];\n let inEligibleCampaigns = [];\n\n campaignList.forEach(groupCampaign => {\n const isPartOfCampaign =\n DecisionUtil._checkForPreSegmentation(groupCampaign, groupCampaign.key, userId, customVariables) &&\n BucketingService.isUserPartOfCampaign(userId, groupCampaign, true);\n if (isPartOfCampaign) {\n groupCampaign = FunctionUtil.cloneObject(groupCampaign);\n // campaign satisfies the pre-segmentation\n eligibleCampaigns.push(groupCampaign);\n } else {\n inEligibleCampaigns.push(groupCampaign);\n }\n });\n\n return {\n eligibleCampaigns,\n inEligibleCampaigns\n };\n },\n\n /**\n * Equally distribute the traffic of campaigns and assign a winner campaign by murmur hash.\n *\n * @param {Object} config\n * @param {Object} calledCampaign\n * @param {Array} shortlistedCampaigns\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n *\n * @returns {Object} variation of the winner campaign\n */\n _normalizeAndFindWinningCampaign(\n config,\n calledCampaign,\n shortlistedCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n ) {\n // normalise the weights of all the shortlisted campaigns\n shortlistedCampaigns.forEach(campaign => {\n campaign.weight = Math.floor(100 / shortlistedCampaigns.length);\n });\n\n // re-distribute the traffic for each camapign\n CampaignUtil.setCampaignAllocation(shortlistedCampaigns);\n\n let winnerCampaign = BucketingService._getVariation(\n shortlistedCampaigns,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, {\n userId,\n groupName,\n file,\n campaignKey: winnerCampaign.key\n })\n );\n\n if (winnerCampaign.id === calledCampaign.id) {\n // if called campaign is the winner campaign, get the variation for the campaign\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n winnerCampaign,\n winnerCampaign.key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n // if winning campaign not the called camapaign, return\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: calledCampaign.key\n })\n );\n return {};\n }\n },\n /** Assign the winner campaign by checking priority order and/or weightage distribution\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} calledCampaign\n * @param {Array} shortlistedCampaigns\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n *\n * @returns {Object} variation of the winner campaign\n */\n _advancedAlgoFindWinningCampaign: (\n config,\n settingsFile,\n calledCampaign,\n shortlistedCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n ) => {\n let winnerCampaign = null;\n let found = false; // flag to check whether winnerCampaign has been found or not and helps to break from the outer loop\n let priorityOrder = typeof settingsFile.groups[groupId].p !== 'undefined' ? settingsFile.groups[groupId].p : {};\n let wt = typeof settingsFile.groups[groupId].wt !== 'undefined' ? settingsFile.groups[groupId].wt : {};\n\n for (let i = 0; i < priorityOrder.length; i++) {\n for (let j = 0; j < shortlistedCampaigns.length; j++) {\n if (shortlistedCampaigns[j].id === priorityOrder[i]) {\n winnerCampaign = FunctionUtil.cloneObject(shortlistedCampaigns[j]);\n found = true;\n break;\n }\n }\n if (found === true) break;\n }\n\n // If winnerCampaign not found through Priority, then go for weighted Random distribution and for that,\n // Store the list of campaigns (participatingCampaigns) out of shortlistedCampaigns and their corresponding weights present in weightage distribution array (wt)\n if (winnerCampaign === null) {\n let participatingCampaignList = [];\n // iterate over shortlisted campaigns and add weights from the weight array\n for (let i = 0; i < shortlistedCampaigns.length; i++) {\n let campaignId = shortlistedCampaigns[i].id;\n if (typeof wt[campaignId] !== 'undefined') {\n let clonedCampaign = FunctionUtil.cloneObject(shortlistedCampaigns[i]);\n clonedCampaign.weight = wt[campaignId];\n participatingCampaignList.push(clonedCampaign);\n }\n }\n /* Finding winner campaign using weighted Distibution :\n 1. Re-distribute the traffic by assigning range values for each camapign in particaptingCampaignList \n 2. Calculate bucket value for the given userId and groupId\n 3. Get the winnerCampaign by checking the Start and End Bucket Allocations of each campaign\n */\n\n CampaignUtil.setCampaignAllocation(participatingCampaignList);\n\n winnerCampaign = BucketingService._getVariation(\n participatingCampaignList,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))\n );\n }\n\n if (winnerCampaign != null) {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, {\n userId,\n groupName,\n file,\n campaignKey: winnerCampaign.key\n })\n );\n }\n // WinnerCampaign should not be null, in case when winnerCampaign hasn't been found through PriorityOrder and\n // also shortlistedCampaigns and wt array does not have a single campaign id in common\n if (winnerCampaign != null && winnerCampaign.id === calledCampaign.id) {\n // if called campaign is the winner campaign, get the variation for the campaign\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n winnerCampaign,\n winnerCampaign.key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n // if winning campaign not the called camapaign, return\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: calledCampaign.key\n })\n );\n return {};\n }\n }\n};\n\nmodule.exports = DecisionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst FunctionUtil = require('./FunctionUtil');\nconst EventEnum = require('../enums/EventEnum');\nconst excludedProperties = ['url'];\n\nconst file = FileNameEnum.EventDispatcherUtil;\n\nlet EventDispatcher = {\n dispatchGetCall: function(properties, { responseCallback }, customHeaders = {}) {\n let parsedUrl;\n let queryParams = '?';\n\n queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties);\n\n try {\n // Require files only if required in respective Engine i.e. Node / Browser\n if (typeof process.env === 'undefined') {\n require('./HttpXMLUtil').sendCall(\n properties,\n queryParams,\n { successCallback: responseCallback },\n customHeaders\n );\n } else {\n const url = require('url');\n\n parsedUrl = url.parse(properties.url);\n\n require('./HttpHandlerUtil').sendGetCall(\n parsedUrl,\n queryParams,\n null,\n (error, response) => {\n this.handleGetResponse(properties, error, response);\n if (responseCallback) {\n responseCallback(error, response);\n }\n },\n customHeaders\n );\n }\n } catch (err) {\n let endPoint = properties.url;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file: FileNameEnum.EventDispatcher,\n endPoint,\n err\n })\n );\n }\n\n return false;\n },\n\n handleGetResponse: function(properties, error, response) {\n if (error) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file,\n endPoint: response.endPoint,\n err: error\n })\n );\n return false;\n } else {\n const baseParams = {\n file,\n endPoint: response.endPoint,\n accountId: properties && properties.account_id\n };\n let params = {};\n if (baseParams.endPoint.includes('push')) {\n let customVariables = JSON.parse(properties.tags).u;\n params = Object.assign({}, baseParams, { customVariables: customVariables });\n params.mainKeys = `customDimension:${JSON.stringify(params.customVariables)}`;\n } else {\n params = Object.assign({}, baseParams, {\n campaignId: properties && properties.experiment_id,\n variationId: properties && properties.combination\n });\n params.mainKeys = `campaignId:${params.campaignId} and variationId:${params.variationId}`;\n }\n logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params));\n return true;\n }\n },\n\n dispatchPostCall: function(properties, payload, { responseCallback }, customHeaders = {}) {\n let parsedUrl;\n let queryParams = '?';\n\n queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties);\n\n try {\n // Require files only if required in respective Engine i.e. Node / Browser\n\n if (typeof process.env === 'undefined') {\n if (typeof XMLHttpRequest === 'undefined') {\n return require('./FetchUtil')\n .send({\n method: 'POST',\n url: `${properties.url}${queryParams}`,\n payload,\n customHeaders\n })\n .then(() => {\n this.handlePostResponse(properties, payload);\n if (responseCallback) {\n responseCallback(null, { status: 'success' });\n }\n })\n .catch(error => {\n this.handlePostResponse(properties, payload, error);\n responseCallback(error, { status: 'failure' });\n });\n }\n\n return require('./XhrUtil')\n .send({\n method: 'POST',\n url: `${properties.url}${queryParams}`,\n payload,\n customHeaders,\n logger\n })\n .then(() => {\n this.handlePostResponse(properties, payload);\n if (responseCallback) {\n responseCallback(null, { status: 'success' });\n }\n })\n .catch(error => {\n this.handlePostResponse(properties, payload, error);\n responseCallback(error, { status: 'failure' });\n });\n } else {\n const url = require('url');\n\n parsedUrl = url.parse(properties.url);\n\n return new Promise(resolve => {\n require('./HttpHandlerUtil').sendPostCall(\n parsedUrl,\n payload,\n queryParams,\n null,\n error => {\n const result = this.handlePostResponse(properties, payload, error);\n if (responseCallback) {\n responseCallback(error, { status: 'success' });\n }\n resolve(result);\n },\n customHeaders\n );\n });\n }\n } catch (err) {\n let endPoint = properties.url;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file: FileNameEnum.EventDispatcherUtil,\n endPoint,\n err\n })\n );\n }\n\n return Promise.resolve(false);\n },\n\n handlePostResponse: function(properties, payload, error) {\n let endPoint = properties.url;\n\n if (error) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file,\n endPoint: endPoint,\n err: error\n })\n );\n return false;\n } else {\n let event = `${properties.en} event`;\n if (properties.en === EventEnum.VWO_SYNC_VISITOR_PROP) {\n delete payload.d.visitor.props.vwo_fs_environment;\n event = `visitor property:${JSON.stringify(payload.d.visitor.props)}`;\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS_FOR_EVENT_ARCH, {\n file,\n endPoint,\n accountId: properties.a,\n event: event\n })\n );\n\n return true;\n }\n }\n};\n\nmodule.exports = EventDispatcher;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignUtil = require('./CampaignUtil');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst FeatureVariableTypeEnum = require('../enums/FeatureVariableTypeEnum');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.FeatureUtil;\n\nlet FeatureUtil = {\n getVariableForFeature: (campaign, variableKey) => {\n let variableData = {};\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n let variables = campaign.variables || [];\n\n for (let i = 0; i < variables.length; i++) {\n if (variables[i].key === variableKey) {\n variableData = variables[i];\n\n break;\n }\n }\n\n return variableData;\n }\n\n return variableData;\n },\n getVariableValueForVariation: (campaign, variation, variableKey) => {\n let variationVariable = {};\n\n if (CampaignUtil.isFeatureTestCampaign(campaign)) {\n if (!variation || !variation || !variation.variables) {\n return variationVariable;\n }\n\n if (!variation.isFeatureEnabled) {\n variation = CampaignUtil.getControlForCampaign(campaign);\n }\n\n for (let i = 0; i < variation.variables.length; i++) {\n let variable = variation.variables[i];\n\n if (variableKey === variable.key) {\n variationVariable = variable;\n break;\n }\n }\n }\n\n return variationVariable;\n },\n getTypeCastVariableValue: (variableValue, variableType) => {\n let typeCastedValue;\n\n switch (variableType) {\n case FeatureVariableTypeEnum.INTEGER:\n typeCastedValue = parseInt(variableValue, 10);\n if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n }\n break;\n\n case FeatureVariableTypeEnum.DOUBLE:\n typeCastedValue = parseFloat(variableValue);\n if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n }\n break;\n\n case FeatureVariableTypeEnum.BOOLEAN:\n if (!DataTypeUtil.isBoolean(variableValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n } else {\n typeCastedValue = variableValue;\n }\n break;\n\n case FeatureVariableTypeEnum.JSON:\n if (!DataTypeUtil.isObject(variableValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n } else {\n typeCastedValue = variableValue;\n }\n break;\n\n default:\n typeCastedValue = variableValue;\n break;\n }\n\n return typeCastedValue;\n }\n};\n\nmodule.exports = FeatureUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { getCurrentTime } = require('./FunctionUtil');\nconst { isObject, isFunction } = require('./DataTypeUtil');\n\nconst FetchUtil = {\n _getStoredSettings: function(userStorageService) {\n let isStoredData = false;\n let parsedSettings;\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) {\n try {\n const settings = userStorageService.getSettings();\n parsedSettings = JSON.parse(settings);\n\n if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) {\n const info = `VWO-SDK - [INFO]: ${getCurrentTime()} VWO settings found in Storage Service.`;\n\n console.info(info);\n\n isStoredData = true;\n } else if (parsedSettings) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid.`;\n\n console.error(error);\n } else {\n const warning = `VWO-SDK - [WARNING]: ${getCurrentTime()} VWO settings is empty in Storage Service.`;\n\n console.warn(warning);\n }\n } catch (err) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid. ${err}`;\n\n console.error(error);\n isStoredData = false;\n }\n }\n\n return {\n isStoredData,\n parsedSettings\n };\n },\n\n send: function({ method, url, payload, userStorageService, customHeaders = {} } = {}) {\n if (!url || !method) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const { isStoredData, parsedSettings } = FetchUtil._getStoredSettings(userStorageService);\n\n if (isStoredData) {\n resolve(parsedSettings);\n } else {\n const options = {\n method,\n headers: customHeaders\n };\n\n if (method === 'POST') {\n options.body = JSON.stringify(payload);\n }\n\n return fetch(url, options)\n .then(res => {\n // Some endpoints return empty strings as the response body; treat\n // as raw text and handle potential JSON parsing errors below\n return res.text().then(text => {\n let jsonData = {};\n try {\n jsonData = JSON.parse(text);\n } catch (err) {\n console.info(\n `VWO-SDK - [INFO]: ${getCurrentTime()} VWO didn't send JSON response which is expected: ${err}`\n );\n }\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) {\n userStorageService.setSettings(jsonData);\n }\n\n if (res.status === 200) {\n resolve(jsonData);\n } else {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${\n res.status\n }`;\n\n console.error(error);\n reject(error);\n }\n });\n })\n .catch(err => {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${err}`;\n\n console.error(error);\n reject(error);\n });\n }\n });\n }\n};\n\nmodule.exports = FetchUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst FunctionUtil = {\n cloneObject: obj => {\n if (!obj) {\n return obj;\n }\n\n let clonedObj = JSON.parse(JSON.stringify(obj));\n\n return clonedObj;\n },\n getRandomNumber: () => {\n return Math.random();\n },\n getCurrentUnixTimestamp: () => {\n return Math.ceil(+new Date() / 1000);\n },\n getCurrentUnixTimestampInMillis: () => {\n return +new Date();\n },\n matchWithRegex: (string, regex) => {\n try {\n return string.match(new RegExp(regex));\n } catch (err) {\n const logging = require('../services/logging');\n const FileNameEnum = require('../enums/FileNameEnum');\n\n const logger = logging.getLogger();\n const { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n const file = FileNameEnum.FunctionUtil;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_REGEX_CREATION_FAILED, {\n file,\n regex\n })\n );\n return null;\n }\n },\n getCurrentTime() {\n return new Date().toISOString();\n },\n convertObjectKeysToString(properties, excludedProperties) {\n let queryParams = '';\n excludedProperties = excludedProperties || [];\n\n for (let prop in properties) {\n if (properties.hasOwnProperty(prop)) {\n if (excludedProperties.indexOf(prop) === -1) {\n queryParams += prop + '=' + properties[prop] + '&';\n }\n }\n }\n\n return queryParams;\n },\n objectValues(obj) {\n let values = [];\n\n for (const prop in obj) {\n values.push(obj[prop]);\n }\n return values;\n }\n};\n\nmodule.exports = FunctionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst file = FileNameEnum.HttpXMLUtil;\n\nconst noop = () => {};\n\nconst printLog = properties => {\n const baseParams = {\n file,\n endPoint: properties.url,\n accountId: properties && properties.account_id\n };\n let params = {};\n if (baseParams.endPoint.includes('push')) {\n let customVariables = JSON.parse(properties.tags).u;\n params = Object.assign({}, baseParams, { customVariables: customVariables });\n params.mainKeys = `customDimension:${JSON.stringify(params.customVariables)}`;\n } else {\n params = Object.assign({}, baseParams, {\n campaignId: properties && properties.experiment_id,\n variationId: properties && properties.combination\n });\n params.mainKeys = `campaignId:${params.campaignId} and variationId:${params.variationId}`;\n }\n logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params));\n};\n\nconst HttpXMLUtil = {\n sendCall: function(properties, queryParams, options = {}, customHeaders = {}) {\n let endPoint = `${properties.url}${queryParams}`;\n\n let { successCallback, errorCallback } = options;\n\n errorCallback = errorCallback || successCallback;\n\n let isCallbackCalled = false;\n if (typeof XMLHttpRequest === 'undefined') {\n // if (typeof Image === 'undefined') {\n fetch(endPoint, { method: 'GET', headers: customHeaders })\n .then(() => {\n if (isCallbackCalled) {\n return;\n }\n isCallbackCalled = true;\n successCallback(null, { status: 'success' });\n })\n .catch(_err => {\n if (isCallbackCalled) {\n return;\n }\n isCallbackCalled = true;\n errorCallback(null, { status: 'success' });\n printLog(properties);\n });\n\n return;\n }\n this.handleGetCall(\n properties,\n queryParams,\n successCallback,\n errorCallback,\n endPoint,\n isCallbackCalled,\n customHeaders\n );\n },\n\n handleGetCall: function(\n properties,\n queryParams,\n successCallback,\n errorCallback,\n endPoint,\n isCallbackCalled,\n customHeaders = {}\n ) {\n successCallback = successCallback || noop;\n errorCallback = errorCallback || noop;\n\n const xhr = new XMLHttpRequest();\n\n xhr.open('GET', endPoint, true);\n // Set custom headers using setRequestHeader\n for (var headerName in customHeaders) {\n if (customHeaders.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, customHeaders[headerName]);\n }\n }\n console.log('Headers added to the request:', xhr.getAllResponseHeaders());\n\n xhr.onload = function() {\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = xhr.responseText;\n successCallback(response);\n printLog(properties);\n } else {\n errorCallback(xhr.statusText);\n printLog(properties);\n }\n };\n\n xhr.onerror = function() {\n errorCallback(xhr.statusText);\n printLog(properties);\n };\n\n xhr.send();\n }\n};\nmodule.exports = HttpXMLUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst UrlEnum = require('../enums/UrlEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\n\nconst UuidUtil = require('./UuidUtil');\nconst ValidateUtil = require('./ValidateUtil');\nconst FunctionUtil = require('./FunctionUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst UrlService = require('../services/UrlService');\n/**\n * Return primary properties required for every network call to VWO server\n * @param {Object} configObj\n * @param {String} userId\n *\n * @returns primary properties\n */\nfunction getPrimaryProperties(configObj, userId) {\n return {\n sId: FunctionUtil.getCurrentUnixTimestamp(),\n u: UuidUtil.generateFor(userId, configObj.accountId)\n };\n}\n\n/**\n * Return base properties required for every network call to VWO server\n * @param {Object} configObj\n * @param {String} userId\n *\n * @returns base properties\n */\nfunction getBaseProperties(configObj, userId) {\n const { accountId } = configObj;\n\n return Object.assign({}, getPrimaryProperties(configObj, userId), ImpressionUtil.getReportingProperties(configObj), {\n account_id: accountId,\n random: FunctionUtil.getRandomNumber(),\n ap: Constants.PLATFORM\n });\n}\n\nlet ImpressionUtil = {\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} tagKey the tag name\n * @param {String} tagValue the tag value\n */\n buildEventForPushing(configObj, tagKey, tagValue, userId) {\n const properties = Object.assign({}, getBaseProperties(configObj, userId));\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.PUSH;\n properties.tags = JSON.stringify({\n u: {\n [encodeURIComponent(tagKey)]: encodeURIComponent(tagValue)\n }\n });\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} tagKey the tag name\n * @param {String} tagValue the tag value\n */\n buildBatchEventForPushing(configObj, tagKey, tagValue, userId) {\n if (typeof process.env !== 'undefined') {\n const properties = Object.assign({}, getPrimaryProperties(configObj, userId));\n properties.eT = 3;\n properties.t = encodeURIComponent(\n JSON.stringify({\n u: {\n [tagKey]: tagValue\n }\n })\n );\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildEventForTrackingUser(\n configObj,\n campaignKey,\n variationId,\n userId,\n usageStats,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n let properties = Object.assign(\n {\n experiment_id: campaignKey,\n combination: variationId,\n visitor_ua: visitorUserAgent,\n visitor_ip: userIpAddress\n },\n getBaseProperties(configObj, userId),\n usageStats\n );\n properties.ed = JSON.stringify({ p: 'server' });\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.TRACK_USER;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} visitorUserAgent, user agent of visitor\n * @param {String} userIpAddress, IP of the visitor\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildBatchEventForTrackingUser(\n configObj,\n campaignKey,\n variationId,\n userId,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n if (typeof process.env !== 'undefined') {\n let properties = Object.assign(\n {\n e: campaignKey,\n c: variationId\n },\n getPrimaryProperties(configObj, userId)\n );\n properties.eT = 1;\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} goalId, the Goal ID\n * @param {String} revenue, the revenue generated on conversion\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildEventForTrackingGoal(\n configObj,\n campaignKey,\n variationId,\n userId,\n goal = {},\n revenue = null,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n const goalId = goal.id;\n\n let properties = Object.assign(\n {\n experiment_id: campaignKey,\n combination: variationId\n },\n getBaseProperties(configObj, userId)\n );\n\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.TRACK_GOAL;\n\n properties['goal_id'] = goalId;\n if (goal.type === GoalTypeEnum.REVENUE && ValidateUtil.isValidValue(revenue)) {\n properties['r'] = revenue;\n }\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} goalId, the Goal ID\n * @param {String} revenue, the revenue generated on conversion\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildBatchEventForTrackingGoal(\n configObj,\n campaignKey,\n variationId,\n userId,\n goal = {},\n revenue = null,\n eventProperties = {},\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n if (typeof process.env !== 'undefined') {\n let properties = Object.assign(\n {\n e: campaignKey,\n c: variationId\n },\n getPrimaryProperties(configObj, userId)\n );\n properties.eT = 2;\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n\n properties.g = goal.id;\n if (goal.type === GoalTypeEnum.REVENUE && ValidateUtil.isValidValue(revenue)) {\n properties.r = revenue;\n } else if (configObj.isEventArchEnabled && eventProperties.hasOwnProperty(goal.revenueProp)) {\n properties.r = eventProperties[goal.revenueProp];\n }\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n\n /**\n * Return an object containing properties required for segmenting reports\n * @param {Object} configObj\n * @returns reporting properties\n */\n getReportingProperties(configObj) {\n const { sdkKey } = configObj;\n\n return {\n [Constants.SDK_QUERY_PARAM]: Constants.SDK_NAME,\n [Constants.SDK_VERSION_QUERY_PARAM]: Constants.SDK_VERSION,\n env: sdkKey\n };\n },\n\n /**\n * Builds generic properties for different tracking calls required by VWO servers.\n * @param {Object} configObj\n * @param {String} eventName\n * @returns properties\n */\n getEventsBaseProperties(config, eventName, usageStats = {}, visitorUserAgent = '', userIpAddress = '') {\n const { sdkKey } = config;\n\n let properties = Object.assign(\n {\n en: eventName,\n a: config.accountId,\n env: sdkKey,\n eTime: FunctionUtil.getCurrentUnixTimestampInMillis(),\n random: FunctionUtil.getRandomNumber(),\n p: 'FS',\n visitor_ua: visitorUserAgent,\n visitor_ip: userIpAddress\n },\n usageStats\n );\n\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.EVENTS;\n return properties;\n },\n\n /**\n * Builds generic payload required by all the different tracking calls.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} usageStats\n * @returns properties\n */\n getEventBasePayload(configObj, userId, eventName) {\n const uuid = UuidUtil.generateFor(userId, configObj.accountId);\n const { sdkKey } = configObj;\n\n let props = {\n vwo_sdkName: Constants.SDK_NAME,\n vwo_sdkVersion: Constants.SDK_VERSION,\n vwo_envKey: sdkKey\n };\n\n // if (usageStats) {\n // props = Object.assign({}, props, usageStats);\n // }\n\n let properties = {\n d: {\n msgId: `${uuid}-${FunctionUtil.getCurrentUnixTimestampInMillis()}`,\n visId: uuid,\n sessionId: FunctionUtil.getCurrentUnixTimestamp(),\n event: {\n props: props,\n name: eventName,\n time: FunctionUtil.getCurrentUnixTimestampInMillis()\n },\n visitor: {\n props: {\n vwo_fs_environment: sdkKey\n }\n }\n }\n };\n\n return properties;\n },\n\n /**\n * Builds payload to track the visitor.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {String} campaignId\n * @param {Number} variationId\n * @returns track-user payload\n */\n getTrackUserPayloadData(configObj, userId, eventName, campaignId, variationId) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n properties.d.event.props.id = campaignId;\n properties.d.event.props.variation = variationId;\n\n // this is currently required by data-layer team, we can make changes on DACDN and remove it from here\n properties.d.event.props.isFirst = 1;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n accountId: configObj.accountId,\n userId,\n campaignId\n })\n );\n\n return properties;\n },\n\n /**\n * Builds payload to track the Goal.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} metricMap\n * @param {String} revenueValue\n * @returns track-goal payload\n */\n getTrackGoalPayloadData(\n configObj,\n userId,\n eventName,\n metricMap,\n revenueValue,\n revenuePropList,\n eventProperties = {}\n ) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n let metric = {};\n Object.keys(metricMap).forEach(key => {\n metric[`id_${key}`] = [`g_${metricMap[key].goal.id}`];\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n goalName: eventName,\n accountId: configObj.accountId,\n u: userId,\n campaignId: key\n })\n );\n });\n\n properties.d.event.props.vwoMeta = {\n metric: metric\n };\n\n if (revenuePropList && revenueValue && revenuePropList.size > 0) {\n revenuePropList.forEach(revenueProp => {\n properties.d.event.props.vwoMeta[revenueProp] = revenueValue;\n });\n }\n\n properties.d.event.props.isCustomEvent = true;\n\n if (Object.keys(eventProperties).length > 0) {\n for (const prop in eventProperties) {\n properties.d.event.props[prop] = eventProperties[prop];\n }\n }\n\n return properties;\n },\n\n /**\n * Builds payload to appply post segmentation on VWO campaign reports.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} customDimensionMap\n * @returns push payload\n */\n getPushPayloadData(configObj, userId, eventName, customDimensionMap) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n properties.d.event.props.isCustomEvent = true;\n\n Object.keys(customDimensionMap).forEach(function(key) {\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n properties.d.visitor.props[key] = tagValue;\n });\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n accountId: configObj.accountId,\n userId,\n property: JSON.stringify(customDimensionMap)\n })\n );\n\n return properties;\n },\n\n /**\n * Remove the sensitive keys from the properties to te displayed in the log.\n * @param {Object} properties\n * @returns properties without sensitive keys\n */\n _getStringifiedLogProperties(properties) {\n const logProperties = Object.assign({}, properties);\n delete logProperties.env;\n return JSON.stringify(logProperties);\n }\n};\n\nmodule.exports = ImpressionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('./DataTypeUtil');\n\nconst nargs = /\\{([0-9a-zA-Z_]+)\\}/g;\n\nlet LogMessageUtil = {\n /**\n * Took reference from: string-template\n *\n * Name: string-template\n * Published Name: string-template\n * URL: https://github.com/Matt-Esch/string-template\n * Description: A lightweight string replace engine for text-based templates\n * Author: Matt-Esch (https://github.com/Matt-Esch)\n * License: MIT License\n * Local Modifications: This library is not used as a dependency.\n * Source code was referenced and is modified as per requirements.\n */\n build: (template, data) => {\n try {\n return template.replace(nargs, (match, key, index) => {\n let result;\n let isKey;\n\n if (template[index - 1] === '{' && template[index + match.length] === '}') {\n return key;\n } else {\n isKey = data.hasOwnProperty(key);\n\n if (isKey) {\n let value = data[key];\n\n if (DataTypeUtil.isFunction(value)) {\n value = data[key]();\n }\n result = value;\n } else {\n result = null;\n }\n if (result === null || result === undefined) {\n return '';\n }\n\n return result;\n }\n });\n } catch (err) {\n return template;\n }\n }\n};\n\nmodule.exports = LogMessageUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ObjectUtil = {\n areObjectKeys: (obj = {}) => {\n return Object.keys(obj).length;\n },\n getKeyValue: obj => {\n if (!ObjectUtil.areObjectKeys(obj)) {\n return;\n }\n let key = Object.keys(obj)[0];\n let value = obj[key];\n return {\n key,\n value\n };\n },\n objectValues: obj => {\n return Object.keys(obj).map(key => obj[key]);\n }\n};\n\nmodule.exports = ObjectUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst { matchWithRegex } = require('../utils/FunctionUtil');\nconst { getKeyValue } = require('../utils/ObjectUtil');\nconst SegmentEnum = require('../enums/segment');\n\nconst {\n LOWER_MATCH,\n WILDCARD_MATCH,\n REGEX_MATCH,\n STARTING_STAR,\n ENDING_STAR,\n GREATER_THAN_MATCH,\n GREATER_THAN_EQUAL_TO_MATCH,\n LESS_THAN_MATCH,\n LESS_THAN_EQUAL_TO_MATCH\n} = SegmentEnum.SegmentOperandValueTypeRegexes;\n\nconst {\n LOWER_VALUE,\n STARTING_ENDING_STAR_VALUE,\n STARTING_STAR_VALUE,\n ENDING_STAR_VALUE,\n REGEX_VALUE,\n EQUAL_VALUE,\n GREATER_THAN_VALUE,\n GREATER_THAN_EQUAL_TO_VALUE,\n LESS_THAN_VALUE,\n LESS_THAN_EQUAL_TO_VALUE\n} = SegmentEnum.SegmentOperandValues;\n\nfunction extractOperandValue(operand, regex) {\n return matchWithRegex(operand, regex) && matchWithRegex(operand, regex)[1];\n}\n\nfunction processValues(operandValue, tagValue) {\n // this is atomic, either both will be processed or none\n let processedOperandValue = parseFloat(operandValue, 10);\n let processedTagValue = parseFloat(tagValue, 10);\n if (!processedOperandValue || !processedTagValue) {\n return {\n operandValue: operandValue,\n tagValue: tagValue\n };\n }\n // now we have surity that both are numbers\n // now we can convert them independently to int type if they\n // are int rather than floats\n if (processedOperandValue === Math.floor(processedOperandValue)) {\n processedOperandValue = parseInt(processedOperandValue, 10);\n }\n if (processedTagValue === Math.floor(processedTagValue)) {\n processedTagValue = parseInt(processedTagValue, 10);\n }\n // convert it back to string and return\n return {\n operandValue: processedOperandValue.toString(),\n tagValue: processedTagValue.toString()\n };\n}\n\nfunction preProcessTagValue(tagValue) {\n if (tagValue === undefined) {\n tagValue = '';\n }\n if (DataTypeUtil.isBoolean(tagValue)) {\n if (tagValue) {\n tagValue = true;\n } else {\n tagValue = false;\n }\n }\n if (tagValue !== null) {\n tagValue = tagValue.toString();\n }\n return tagValue;\n}\n\nfunction preProcessOperandValue(operand) {\n let operandType;\n let operandValue;\n let startingStar;\n let endingStar;\n // Pre process operand value\n if (matchWithRegex(operand, LOWER_MATCH)) {\n operandType = LOWER_VALUE;\n operandValue = extractOperandValue(operand, LOWER_MATCH);\n } else if (matchWithRegex(operand, WILDCARD_MATCH)) {\n operandValue = extractOperandValue(operand, WILDCARD_MATCH);\n startingStar = matchWithRegex(operandValue, STARTING_STAR);\n endingStar = matchWithRegex(operandValue, ENDING_STAR);\n // In case of wildcard, the operand type is further divided into contains, startswith and endswith\n if (startingStar && endingStar) {\n operandType = STARTING_ENDING_STAR_VALUE;\n } else if (startingStar) {\n operandType = STARTING_STAR_VALUE;\n } else if (endingStar) {\n operandType = ENDING_STAR_VALUE;\n }\n operandValue = operandValue.replace(STARTING_STAR, '').replace(ENDING_STAR, '');\n } else if (matchWithRegex(operand, REGEX_MATCH)) {\n operandType = REGEX_VALUE;\n operandValue = extractOperandValue(operand, REGEX_MATCH);\n } else if (matchWithRegex(operand, GREATER_THAN_MATCH)) {\n operandType = GREATER_THAN_VALUE;\n operandValue = extractOperandValue(operand, GREATER_THAN_MATCH);\n } else if (matchWithRegex(operand, GREATER_THAN_EQUAL_TO_MATCH)) {\n operandType = GREATER_THAN_EQUAL_TO_VALUE;\n operandValue = extractOperandValue(operand, GREATER_THAN_EQUAL_TO_MATCH);\n } else if (matchWithRegex(operand, LESS_THAN_MATCH)) {\n operandType = LESS_THAN_VALUE;\n operandValue = extractOperandValue(operand, LESS_THAN_MATCH);\n } else if (matchWithRegex(operand, LESS_THAN_EQUAL_TO_MATCH)) {\n operandType = LESS_THAN_EQUAL_TO_VALUE;\n operandValue = extractOperandValue(operand, LESS_THAN_EQUAL_TO_MATCH);\n } else {\n operandType = EQUAL_VALUE;\n operandValue = operand;\n }\n return {\n operandType,\n operandValue\n };\n}\n\nfunction operandCustomVariablesParser(operand, customVariables) {\n // Extract custom_variable_key and custom_variable_value from operand\n let { key, value } = getKeyValue(operand);\n let operandKey = key;\n operand = value;\n if (!customVariables.hasOwnProperty(key)) {\n // For handling \".*\" regex case when key is not present in customVariables and matches regex is used.\n return false;\n }\n let tagValue = customVariables[operandKey];\n // Pre process tag value\n tagValue = preProcessTagValue(tagValue);\n let { operandType, operandValue } = preProcessOperandValue(operand);\n // Process both operand and tag values\n let processedValues = processValues(operandValue, tagValue);\n tagValue = processedValues.tagValue;\n return extractResult(operandType, processedValues.operandValue, tagValue);\n}\n\nfunction operandUserParser(operand, customVariables) {\n const users = operand.split(',');\n for (let i = 0; i < users.length; i++) {\n if (users[i].trim() === customVariables._vwoUserId) {\n return true;\n }\n }\n return false;\n}\n\nfunction extractResult(operandType, operandValue, tagValue) {\n let result;\n\n switch (operandType) {\n case LOWER_VALUE:\n if (tagValue !== null) {\n result = operandValue.toLowerCase() === tagValue.toLowerCase();\n }\n break;\n case STARTING_ENDING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.indexOf(operandValue) > -1;\n }\n break;\n case STARTING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.endsWith(operandValue);\n }\n break;\n case ENDING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.startsWith(operandValue);\n }\n break;\n case REGEX_VALUE:\n try {\n let pattern = new RegExp(operandValue, 'g');\n result = !!pattern.test(tagValue);\n } catch (err) {\n result = false;\n }\n break;\n case GREATER_THAN_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) < parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case GREATER_THAN_EQUAL_TO_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) <= parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case LESS_THAN_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) > parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case LESS_THAN_EQUAL_TO_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) >= parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n default:\n result = tagValue === operandValue;\n }\n\n return result;\n}\n\nmodule.exports = {\n extractOperandValue,\n processValues,\n preProcessTagValue,\n preProcessOperandValue,\n operandCustomVariablesParser,\n operandUserParser\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst UrlEnum = require('../enums/UrlEnum');\nconst { getRandomNumber, getCurrentTime } = require('./FunctionUtil');\n\nlet SettingsFileUtil = {\n get: (accountId, sdkKey, userStorageService, config = {}) => {\n if (!accountId || !sdkKey) {\n console.error('AccountId and sdkKey are required for fetching account settings. Aborting!');\n return;\n }\n\n let protocol = 'https';\n let port;\n let hostname = UrlEnum.BASE_URL;\n let path = UrlEnum.SETTINGS_URL;\n\n if (config.isViaWebhook) {\n path = UrlEnum.WEBHOOK_SETTINGS_URL;\n }\n\n path +=\n `?a=${accountId}&` +\n `i=${sdkKey}&` +\n `r=${getRandomNumber()}&` +\n `platform=${Constants.PLATFORM}&` +\n `${Constants.SDK_QUERY_PARAM}=${Constants.SDK_NAME}&` +\n `${Constants.SDK_VERSION_QUERY_PARAM}=${Constants.SDK_VERSION}`;\n\n if (config.hostname && config.path) {\n protocol = config.protocol;\n port = config.port;\n hostname = config.hostname || hostname;\n path = config.path || path;\n }\n\n if (typeof process.env === 'undefined') {\n if (typeof XMLHttpRequest === 'undefined') {\n return require('./FetchUtil').send({\n method: 'GET',\n url: `${protocol}://${hostname}${path}`,\n userStorageService\n });\n }\n return require('./XhrUtil').send({\n method: 'GET',\n url: `${protocol}://${hostname}${path}`,\n userStorageService\n });\n } else {\n const http = require('http');\n const https = require('https');\n\n return new Promise((resolve, reject) => {\n const options = {\n hostname,\n path,\n agent: false\n };\n\n if (port) {\n options.port = port;\n }\n\n (protocol === 'https' ? https : http).get(options, res => {\n SettingsFileUtil.handleHttpRequest(res, resolve, reject);\n });\n });\n }\n },\n\n handleHttpRequest: (res, resolve, reject) => {\n const { statusCode } = res;\n const contentType = res.headers['content-type'];\n\n let error;\n let rawData = '';\n\n if (!/^application\\/json/.test(contentType)) {\n error = `Invalid content-type.\\nExpected application/json but received ${contentType}`;\n }\n\n if (error) {\n console.error(error.message);\n // Consume response data to free up memory\n res.resume();\n reject(error);\n\n return;\n }\n\n res.setEncoding('utf8');\n\n res.on('data', chunk => {\n rawData += chunk;\n });\n\n res.on('end', () => {\n SettingsFileUtil.handleHttpResponse(statusCode, rawData, resolve, reject);\n });\n },\n\n handleHttpResponse: (statusCode, rawData, resolve, reject) => {\n try {\n const parsedData = JSON.parse(rawData);\n\n if (statusCode !== 200) {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${statusCode} and message: ${rawData}`;\n console.error(error);\n reject(error);\n\n return;\n }\n resolve(parsedData);\n } catch (err) {\n console.error(\n `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings - ${err.message}`\n );\n reject(err);\n }\n }\n};\n\nmodule.exports = SettingsFileUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst uuidv5 = require('uuid/v5');\nconst Constants = require('../constants');\n\nconst VWO_NAMESPACE = uuidv5(Constants.SEED_URL, uuidv5.URL);\n\nconst UuidUtil = {\n generateFor: (userId, accountId) => {\n userId = `${userId}`; // type-cast\n const hash = `${accountId}`;\n const userIdNamespace = UuidUtil.generate(hash, VWO_NAMESPACE);\n const uuidForUserIdAccountId = UuidUtil.generate(userId, userIdNamespace);\n\n let desiredUuid = uuidForUserIdAccountId.replace(/-/gi, '').toUpperCase();\n\n return desiredUuid;\n },\n generate: (name, namespace) => {\n if (!name || !namespace) {\n return;\n }\n\n return uuidv5(name, namespace);\n }\n};\n\nmodule.exports = UuidUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VWOFeatureFlags = {\n init(settingsFile) {\n VWOFeatureFlags.isEventArchEnabled = settingsFile.isEventArchEnabled;\n VWOFeatureFlags.isNB = settingsFile.isNB;\n VWOFeatureFlags.isNBv2 = settingsFile.isNBv2;\n },\n\n getAll() {\n return {\n isEventArchEnabled: VWOFeatureFlags.isEventArchEnabled,\n isNB: VWOFeatureFlags.isNB,\n isNBv2: VWOFeatureFlags.isNBv2\n };\n }\n};\n\nmodule.exports = VWOFeatureFlags;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('./DataTypeUtil');\nconst DataTypeEnum = require('../enums/DataTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\n\nconst APIMethodArgumentsValidationEnum = {\n [ApiEnum.ACTIVATE]: function({\n campaignKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.TRACK]: function({\n campaignKey,\n userId,\n goalIdentifier,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n goalTypeToTrack = GoalTypeEnum.ALL,\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING_NULL_UNDEFINED_ARRAY\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'goalIdentifier',\n value: goalIdentifier,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'goalTypeToTrack',\n value: goalTypeToTrack,\n type: DataTypeEnum.STRING\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.IS_FEATURE_ENABLED]: function({\n campaignKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.GET_FEATURE_VARIABLE_VALUE]: function({\n campaignKey,\n variableKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'variableKey',\n value: variableKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.PUSH]: function({ tagKey, tagValue, userId, customDimensionMap }) {\n return [\n {\n key: 'tagKey',\n value: tagKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'tagValue',\n value: tagValue,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customDimensionMap',\n value: customDimensionMap,\n type: DataTypeEnum.OBJECT\n }\n ];\n }\n};\n// both have same\nAPIMethodArgumentsValidationEnum[ApiEnum.GET_VARIATION_NAME] = APIMethodArgumentsValidationEnum[ApiEnum.ACTIVATE];\n\nconst ValidateUtil = {\n isValidValue: function(value) {\n return !!(value !== undefined && value);\n },\n isValidString: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isString(value);\n },\n isValidNumber: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isNumber(value);\n },\n isValidFunction: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isFunction(value);\n },\n isValidBoolean: function(value) {\n return value !== undefined && DataTypeUtil.isBoolean(value);\n },\n isValidObject: function(value) {\n return value !== undefined && DataTypeUtil.isObject(value);\n },\n areValidParamsForAPIMethod: argsObj => {\n let isValid = false;\n let args = APIMethodArgumentsValidationEnum[argsObj.method](argsObj);\n\n let validators = [];\n\n for (let i = 0; i < args.length; i++) {\n let argConfig = args[i];\n let argValue = argConfig.value;\n let dataType = argConfig.type;\n // let value;\n\n switch (dataType) {\n case DataTypeEnum.NUMBER:\n validators.push(ValidateUtil.isValidNumber(argValue));\n break;\n case DataTypeEnum.STRING:\n validators.push(ValidateUtil.isValidString(argValue));\n break;\n case DataTypeEnum.BOOLEAN:\n validators.push(ValidateUtil.isValidBoolean(argValue));\n break;\n // case DataTypeEnum.FUNCTION:\n // validators.push(ValidateUtil.isValidFunction(argValue));\n // break;\n case DataTypeEnum.OBJECT:\n validators.push(ValidateUtil.isValidObject(argValue));\n break;\n case DataTypeEnum.STRING_NULL_UNDEFINED_ARRAY:\n let value =\n ValidateUtil.isValidString(argValue) ||\n DataTypeUtil.isUndefined(argValue) ||\n DataTypeUtil.isNull(argValue) ||\n DataTypeUtil.isArray(argValue);\n validators.push(value);\n break;\n // case DataTypeEnum.NUMBER_STRING:\n // value = ValidateUtil.isValidNumber(argValue) || ValidateUtil.isValidString(argValue);\n // validators.push(value);\n // break;\n }\n }\n\n isValid = validators.every(val => val);\n\n return isValid;\n }\n};\n\nmodule.exports = ValidateUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('../services/logging');\nconst { LogLevelEnum } = logging;\nconst { getCurrentTime } = require('./FunctionUtil');\nconst { isObject, isFunction } = require('./DataTypeUtil');\n\nconst XhrUtil = {\n _getStoredSettings: function(userStorageService) {\n let isStoredData = false;\n let parsedSettings;\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) {\n try {\n const settings = userStorageService.getSettings();\n parsedSettings = JSON.parse(settings);\n\n if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) {\n const info = `VWO-SDK - [INFO]: ${getCurrentTime()} VWO settings found in Storage Service.`;\n\n console.info(info);\n\n isStoredData = true;\n } else if (parsedSettings) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid.`;\n\n console.error(error);\n } else {\n const warning = `VWO-SDK - [WARNING]: ${getCurrentTime()} VWO settings is empty in Storage Service.`;\n\n console.warn(warning);\n }\n } catch (err) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid. ${err}`;\n\n console.error(error);\n isStoredData = false;\n }\n }\n\n return {\n isStoredData,\n parsedSettings\n };\n },\n send: function({ method, url, payload, userStorageService, customHeaders, logger } = {}) {\n if (!url || !method) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const { isStoredData, parsedSettings } = XhrUtil._getStoredSettings(userStorageService);\n\n if (isStoredData) {\n resolve(parsedSettings);\n } else {\n let xhr = new XMLHttpRequest();\n this.xhrHandler(xhr, method, url, payload, userStorageService, customHeaders, logger, resolve, reject);\n }\n });\n },\n\n // send request function definition (to allow for retries)\n sendRequest: function(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject) {\n let delay = 1000 * (retries + 1);\n let xhr = new XMLHttpRequest();\n\n // Configure timeout\n xhr.timeout = 5000; // Set timeout to 5 seconds (5000 ms)\n\n // onload event\n xhr.onload = () => {\n // retry if error and less than max retries\n if (xhr.status < 200 || xhr.status >= 300) {\n if (retries < maxRetries) {\n retries++;\n\n // log retried times\n logger.log(\n LogLevelEnum.ERROR,\n `Retrying with Status Code : ${xhr.status}, and Response : ${xhr.responseText}`\n );\n\n // call send request again, after delay\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n // log errors with status (clean up later)\n logger.log(\n LogLevelEnum.ERROR,\n `Request failed with Status Code : ${xhr.status} and Response : ${xhr.responseText}`\n );\n reject(`Got Error: ${xhr.statusText} and Status Code: ${xhr.status}`);\n }\n } else {\n // resolve the promise if all well\n resolve(xhr.responseText);\n }\n };\n\n // onerror event\n xhr.onerror = () => {\n if (retries < maxRetries) {\n retries++;\n logger.log(LogLevelEnum.ERROR, 'Retrying due to network error');\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n reject(`Network error: ${xhr.statusText}, Status Code: ${xhr.status}`);\n }\n };\n\n // ontimeout event\n xhr.ontimeout = () => {\n if (retries < maxRetries) {\n retries++;\n logger.log(LogLevelEnum.ERROR, 'Retrying due to timeout');\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n reject(`Timeout error: ${xhr.statusText}, Status Code: ${xhr.status}`);\n }\n };\n\n // open connection and add headers if any, and then send\n xhr.open(method, url, true);\n for (var newHeaderName in customHeaders) {\n if (customHeaders.hasOwnProperty(newHeaderName)) {\n xhr.setRequestHeader(newHeaderName, customHeaders[newHeaderName]);\n }\n }\n xhr.send(JSON.stringify(payload));\n },\n\n xhrHandler: function(xhr, method, url, payload, userStorageService, customHeaders = {}, logger, resolve, reject) {\n if (method === 'GET') {\n try {\n xhr.onload = () => {\n this.xhrOnLoad(xhr, userStorageService, resolve);\n };\n xhr.onerror = () => {\n this.xhrOnError(xhr, reject);\n };\n\n xhr.open(method, url);\n for (var headerName in customHeaders) {\n if (customHeaders.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, customHeaders[headerName]);\n }\n }\n xhr.send();\n } catch (e) {\n console.log(e.message);\n }\n } else if (method === 'POST') {\n // retry params\n let retries = 0;\n let maxRetries = 5;\n\n // send request\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }\n },\n\n xhrOnLoad: function(xhr, userStorageService, resolve) {\n try {\n let parsedXhrResponse = JSON.parse(xhr.response);\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) {\n userStorageService.setSettings(xhr.response);\n }\n\n resolve(parsedXhrResponse);\n } catch (err) {\n console.error(err);\n }\n },\n\n xhrOnError: function(xhr, reject) {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${\n xhr.status\n }`;\n\n console.error(error);\n reject(error);\n }\n};\n\nmodule.exports = XhrUtil;\n","(function(){\n var _global = this;\n\n /**\n * JS Implementation of MurmurHash2\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV2(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k =\n ((str.charCodeAt(i) & 0xff)) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24);\n\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n };\n\n /**\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV3(key, seed) {\n var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n remainder = key.length & 3; // key.length % 4\n bytes = key.length - remainder;\n h1 = seed;\n c1 = 0xcc9e2d51;\n c2 = 0x1b873593;\n i = 0;\n\n while (i < bytes) {\n k1 =\n ((key.charCodeAt(i) & 0xff)) |\n ((key.charCodeAt(++i) & 0xff) << 8) |\n ((key.charCodeAt(++i) & 0xff) << 16) |\n ((key.charCodeAt(++i) & 0xff) << 24);\n ++i;\n\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n case 1: k1 ^= (key.charCodeAt(i) & 0xff);\n\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= k1;\n }\n\n h1 ^= key.length;\n\n h1 ^= h1 >>> 16;\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= h1 >>> 13;\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n h1 ^= h1 >>> 16;\n\n return h1 >>> 0;\n }\n\n var murmur = MurmurHashV3;\n murmur.v2 = MurmurHashV2;\n murmur.v3 = MurmurHashV3;\n\n if (typeof(module) != 'undefined') {\n module.exports = murmur;\n } else {\n var _previousRoot = _global.murmur;\n murmur.noConflict = function() {\n _global.murmur = _previousRoot;\n return murmur;\n }\n _global.murmur = murmur;\n }\n}());\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/**\n * Convert a validation result to an iterable of failures.\n */\nfunction* toFailures(result, context) {\n if (result === true) ; else if (result === false) {\n yield context.fail();\n } else {\n yield* result;\n }\n}\n/**\n * Shifts (removes and returns) the first value from the `input` iterator.\n * Like `Array.prototype.shift()` but for an `Iterator`.\n */\n\nfunction iteratorShift(input) {\n const {\n done,\n value\n } = input.next();\n return done ? undefined : value;\n}\n\n/**\n * `Struct` objects encapsulate the schema for a specific data type (with\n * optional coercion). You can then use the `assert`, `is` or `validate` helpers\n * to validate unknown data against a struct.\n */\n\nclass Struct {\n constructor(props) {\n const {\n type,\n schema,\n coercer = value => value,\n validator = () => [],\n refiner = () => []\n } = props;\n this.type = type;\n this.schema = schema;\n this.coercer = coercer;\n this.validator = validator;\n this.refiner = refiner;\n }\n\n}\n/**\n * `StructError` objects are thrown (or returned) by Superstruct when its\n * validation fails. The error represents the first error encountered during\n * validation. But they also have an `error.failures` property that holds\n * information for all of the failures encountered.\n */\n\nclass StructError extends TypeError {\n constructor(failure, moreFailures) {\n const {\n path,\n value,\n type,\n branch\n } = failure,\n rest = _objectWithoutProperties(failure, [\"path\", \"value\", \"type\", \"branch\"]);\n\n const message = `Expected a value of type \\`${type}\\`${path.length ? ` for \\`${path.join('.')}\\`` : ''} but received \\`${JSON.stringify(value)}\\`.`;\n let failuresResult;\n\n function failures() {\n if (!failuresResult) {\n failuresResult = [failure, ...moreFailures];\n }\n\n return failuresResult;\n }\n\n super(message);\n this.value = value;\n Object.assign(this, rest);\n this.type = type;\n this.path = path;\n this.branch = branch;\n this.failures = failures;\n this.stack = new Error().stack;\n this.__proto__ = StructError.prototype;\n }\n\n}\n/**\n * Assert that a value passes a `Struct`, throwing if it doesn't.\n */\n\nfunction assert(value, struct) {\n const result = validate(value, struct);\n\n if (result[0]) {\n throw result[0];\n }\n}\n/**\n * Coerce a value with the coercion logic of `Struct` and validate it.\n */\n\nfunction coerce(value, struct) {\n const ret = struct.coercer(value);\n assert(ret, struct);\n return ret;\n}\n/**\n * Check if a value passes a `Struct`.\n */\n\nfunction is(value, struct) {\n const result = validate(value, struct);\n return !result[0];\n}\n/**\n * Validate a value against a `Struct`, returning an error if invalid.\n */\n\nfunction validate(value, struct, coercing = false) {\n if (coercing) {\n value = struct.coercer(value);\n }\n\n const failures = check(value, struct);\n const failure = iteratorShift(failures);\n\n if (failure) {\n const error = new StructError(failure, failures);\n return [error, undefined];\n } else {\n return [undefined, value];\n }\n}\n/**\n * Check a value against a `Struct`, returning an iterable of failures.\n */\n\nfunction* check(value, struct, path = [], branch = []) {\n const {\n type\n } = struct;\n const ctx = {\n value,\n type,\n branch,\n path,\n\n fail(props = {}) {\n return _objectSpread2({\n value,\n type,\n path,\n branch: [...branch, value]\n }, props);\n },\n\n check(v, s, parent, key) {\n const p = parent !== undefined ? [...path, key] : path;\n const b = parent !== undefined ? [...branch, parent] : branch;\n return check(v, s, p, b);\n }\n\n };\n const failures = toFailures(struct.validator(value, ctx), ctx);\n const failure = iteratorShift(failures);\n\n if (failure) {\n yield failure;\n yield* failures;\n } else {\n yield* toFailures(struct.refiner(value, ctx), ctx);\n }\n}\n\n/**\n * Augment a `Struct` to add an additional coercion step to its input.\n */\n\nfunction coercion(struct, coercer) {\n const fn = struct.coercer;\n return new Struct(_objectSpread2(_objectSpread2({}, struct), {}, {\n coercer: value => {\n return fn(coercer(value));\n }\n }));\n}\n/**\n * Augment a struct to coerce a default value for missing values.\n *\n * Note: You must use `coerce(value, Struct)` on the value before validating it\n * to have the value defaulted!\n */\n\nfunction defaulted(S, fallback, strict) {\n return coercion(S, x => {\n const f = typeof fallback === 'function' ? fallback() : fallback;\n\n if (x === undefined) {\n return f;\n }\n\n if (strict !== true && isPlainObject(x) && isPlainObject(f)) {\n const ret = _objectSpread2({}, x);\n\n let changed = false;\n\n for (const key in f) {\n if (ret[key] === undefined) {\n ret[key] = f[key];\n changed = true;\n }\n }\n\n if (changed) {\n return ret;\n }\n }\n\n return x;\n });\n}\n/**\n * Coerce a value to mask its properties to only that defined in the struct.\n */\n\nfunction masked(S) {\n return coercion(S, x => {\n if (!isPlainObject(x)) {\n return x;\n }\n\n const ret = {};\n\n for (const key in S.schema) {\n ret[key] = x[key];\n }\n\n return ret;\n });\n}\n/**\n * Check if a value is a plain object.\n */\n\nfunction isPlainObject(value) {\n if (Object.prototype.toString.call(value) !== '[object Object]') {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Augment a string or array struct to constrain its length to zero.\n */\n\nfunction empty(S) {\n return refinement(S, `${S.type} & Empty`, value => {\n return value.length === 0;\n });\n}\n/**\n * Augment a string or array struct to constrain its length to being between a\n * minimum and maximum size.\n */\n\nfunction length(S, min, max) {\n return refinement(S, `${S.type} & Length<${min},${max}>`, value => {\n return min < value.length && value.length < max;\n });\n}\n/**\n * Refine a string struct to match a specific regexp pattern.\n */\n\nfunction pattern(S, regexp) {\n return refinement(S, `${S.type} & Pattern<${regexp.source}>`, value => {\n return regexp.test(value);\n });\n}\n/**\n * Augment a `Struct` to add an additional refinement to the validation.\n */\n\nfunction refinement(struct, type, refiner) {\n const fn = struct.refiner;\n return new Struct(_objectSpread2(_objectSpread2({}, struct), {}, {\n type,\n\n *refiner(value, fail) {\n yield* toFailures(fn(value, fail), fail);\n yield* toFailures(refiner(value, fail), fail);\n }\n\n }));\n}\n\n/**\n * Validate any value.\n */\n\nfunction any() {\n return struct('any', () => true);\n}\nfunction array(Element) {\n return new Struct({\n type: `Array<${Element ? Element.type : 'unknown'}>`,\n schema: Element,\n coercer: value => {\n return Element && Array.isArray(value) ? value.map(v => coerce(v, Element)) : value;\n },\n\n *validator(value, ctx) {\n if (!Array.isArray(value)) {\n yield ctx.fail();\n return;\n }\n\n if (Element) {\n for (const [i, v] of value.entries()) {\n yield* ctx.check(v, Element, value, i);\n }\n }\n }\n\n });\n}\n/**\n * Validate that boolean values.\n */\n\nfunction boolean() {\n return struct('boolean', value => {\n return typeof value === 'boolean';\n });\n}\n/**\n * Validate that `Date` values.\n *\n * Note: this also ensures that the value is *not* an invalid `Date` object,\n * which can occur when parsing a date fails but still returns a `Date`.\n */\n\nfunction date() {\n return struct('Date', value => {\n return value instanceof Date && !isNaN(value.getTime());\n });\n}\n/**\n * Validate that a value dynamically, determing which struct to use at runtime.\n */\n\nfunction dynamic(fn) {\n return struct('Dynamic<...>', (value, ctx) => {\n return ctx.check(value, fn(value, ctx));\n });\n}\nfunction enums(values) {\n return struct(`Enum<${values.map(toLiteralString)}>`, value => {\n return values.includes(value);\n });\n}\n/**\n * Validate that a value is a function.\n */\n\nfunction func() {\n return struct('Function', value => {\n return typeof value === 'function';\n });\n}\n/**\n * Validate that a value is an instance of a class.\n */\n\nfunction instance(Class) {\n return struct(`InstanceOf<${Class.name}>`, value => {\n return value instanceof Class;\n });\n}\nfunction intersection(Structs) {\n return struct(Structs.map(s => s.type).join(' & '), function* (value, ctx) {\n for (const S of Structs) {\n yield* ctx.check(value, S);\n }\n });\n}\n/**\n * Validate a value lazily, by constructing the struct right before the first\n * validation. This is useful for cases where you want to have self-referential\n * structs for nested data structures.\n */\n\nfunction lazy(fn) {\n let S;\n return struct('Lazy<...>', (value, ctx) => {\n if (!S) {\n S = fn();\n }\n\n return ctx.check(value, S);\n });\n}\nfunction literal(constant) {\n return struct(`Literal<${toLiteralString(constant)}>`, value => {\n return value === constant;\n });\n}\n/**\n * Validate that a value is a map with specific key and value entries.\n */\n\nfunction map(Key, Value) {\n return struct(`Map<${Key.type},${Value.type}>`, function* (value, ctx) {\n if (!(value instanceof Map)) {\n yield ctx.fail();\n return;\n }\n\n for (const [k, v] of value.entries()) {\n yield* ctx.check(k, Key, value, k);\n yield* ctx.check(v, Value, value, k);\n }\n });\n}\n/**\n * Validate that a value always fails.\n */\n\nfunction never() {\n return struct('never', () => false);\n}\n/**\n * Augment a struct to make it accept `null` values.\n */\n\nfunction nullable(S) {\n return new Struct({\n type: `${S.type} | null`,\n schema: S.schema,\n validator: (value, ctx) => {\n return value === null || ctx.check(value, S);\n }\n });\n}\n/**\n * Validate that a value is a number.\n */\n\nfunction number() {\n return struct(`number`, value => {\n return typeof value === 'number' && !isNaN(value);\n });\n}\nfunction object(Structs) {\n const knowns = Structs ? Object.keys(Structs) : [];\n const Never = never();\n return new Struct({\n type: Structs ? `Object<{${knowns.join(',')}}>` : 'Object',\n schema: Structs ? Structs : null,\n coercer: Structs ? createObjectCoercer(Structs) : x => x,\n\n *validator(value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n if (Structs) {\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n\n for (const key of unknowns) {\n const v = value[key];\n yield* ctx.check(v, Never, value, key);\n }\n }\n }\n\n });\n}\n/**\n * Augment a struct to make it optionally accept `undefined` values.\n */\n\nfunction optional(S) {\n return new Struct({\n type: `${S.type}?`,\n schema: S.schema,\n validator: (value, ctx) => {\n return value === undefined || ctx.check(value, S);\n }\n });\n}\n/**\n * Validate that a partial object with specific entry values.\n */\n\nfunction partial(Structs) {\n if (Structs instanceof Struct) {\n Structs = Structs.schema;\n }\n\n const knowns = Object.keys(Structs);\n const Never = never();\n return new Struct({\n type: `Partial<{${knowns.join(',')}}>`,\n schema: Structs,\n coercer: createObjectCoercer(Structs),\n\n *validator(value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n\n if (!(key in value)) {\n continue;\n }\n\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n\n for (const key of unknowns) {\n const v = value[key];\n yield* ctx.check(v, Never, value, key);\n }\n }\n\n });\n}\n/**\n * Validate that a value is a record with specific key and\n * value entries.\n */\n\nfunction record(Key, Value) {\n return struct(`Record<${Key.type},${Value.type}>`, function* (value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n for (const k in value) {\n const v = value[k];\n yield* ctx.check(k, Key, value, k);\n yield* ctx.check(v, Value, value, k);\n }\n });\n}\n/**\n * Validate that a set of values matches a specific type.\n */\n\nfunction set(Element) {\n return struct(`Set<${Element.type}>`, (value, ctx) => {\n if (!(value instanceof Set)) {\n return false;\n }\n\n for (const val of value) {\n const [failure] = ctx.check(val, Element);\n\n if (failure) {\n return false;\n }\n }\n\n return true;\n });\n}\n/**\n * Validate that a value is a string.\n */\n\nfunction string() {\n return struct('string', value => {\n return typeof value === 'string';\n });\n}\n/**\n * Define a `Struct` instance with a type and validation function.\n */\n\nfunction struct(name, validator) {\n return new Struct({\n type: name,\n validator,\n schema: null\n });\n}\nfunction tuple(Elements) {\n const Never = never();\n return struct(`[${Elements.map(s => s.type).join(',')}]`, function* (value, ctx) {\n if (!Array.isArray(value)) {\n yield ctx.fail();\n return;\n }\n\n for (const [index, Element] of Elements.entries()) {\n const v = value[index];\n yield* ctx.check(v, Element, value, index);\n }\n\n if (value.length > Elements.length) {\n const index = Elements.length;\n const v = value[index];\n yield* ctx.check(v, Never, value, index);\n }\n });\n}\n/**\n * Validate that a value matches a specific strutural interface, like the\n * structural typing that TypeScript uses.\n */\n\nfunction type(Structs) {\n const keys = Object.keys(Structs);\n return struct(`Type<{${keys.join(',')}}>`, function* (value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n for (const key of keys) {\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n });\n}\nfunction union(Structs) {\n return struct(`${Structs.map(s => s.type).join(' | ')}`, function* (value, ctx) {\n for (const S of Structs) {\n const [...failures] = ctx.check(value, S);\n\n if (failures.length === 0) {\n return;\n }\n }\n\n yield ctx.fail();\n });\n}\n/**\n * Convert a value to a literal string.\n */\n\nfunction toLiteralString(value) {\n return typeof value === 'string' ? `\"${value.replace(/\"/g, '\"')}\"` : `${value}`;\n}\n/**\n * Coerce the values of an object-like struct.\n */\n\n\nfunction createObjectCoercer(Structs) {\n const knowns = Object.keys(Structs);\n return value => {\n if (typeof value !== 'object' || value == null) {\n return value;\n }\n\n const ret = {};\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n const Value = Structs[key];\n const v = value[key];\n ret[key] = coerce(v, Value);\n }\n\n for (const key of unknowns) {\n ret[key] = value[key];\n }\n\n return ret;\n };\n}\n\nexport { Struct, StructError, any, array, assert, boolean, coerce, coercion, date, defaulted, dynamic, empty, enums, func, instance, intersection, is, lazy, length, literal, map, masked, never, nullable, number, object, optional, partial, pattern, record, refinement, set, string, struct, tuple, type, union, validate };\n//# sourceMappingURL=index.es.js.map\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\n'use strict';\n\nfunction f(s, x, y, z) {\n switch (s) {\n case 0: return (x & y) ^ (~x & z);\n case 1: return x ^ y ^ z;\n case 2: return (x & y) ^ (x & z) ^ (y & z);\n case 3: return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return (x << n) | (x>>> (32 - n));\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof(bytes) == 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n bytes = new Array(msg.length);\n for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i);\n }\n\n bytes.push(0x80);\n\n var l = bytes.length/4 + 2;\n var N = Math.ceil(l/16);\n var M = new Array(N);\n\n for (var i=0; i>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = (H[0] + a) >>> 0;\n H[1] = (H[1] + b) >>> 0;\n H[2] = (H[2] + c) >>> 0;\n H[3] = (H[3] + d) >>> 0;\n H[4] = (H[4] + e) >>> 0;\n }\n\n return [\n H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff,\n H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff,\n H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff,\n H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff,\n H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff\n ];\n}\n\nmodule.exports = sha1;\n","var bytesToUuid = require('./bytesToUuid');\n\nfunction uuidToBytes(uuid) {\n // Note: We assume we're being passed a valid uuid string\n var bytes = [];\n uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) {\n bytes.push(parseInt(hex, 16));\n });\n\n return bytes;\n}\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n var bytes = new Array(str.length);\n for (var i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n return bytes;\n}\n\nmodule.exports = function(name, version, hashfunc) {\n var generateUUID = function(value, namespace, buf, offset) {\n var off = buf && offset || 0;\n\n if (typeof(value) == 'string') value = stringToBytes(value);\n if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace);\n\n if (!Array.isArray(value)) throw TypeError('value must be an array of bytes');\n if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values');\n\n // Per 4.3\n var bytes = hashfunc(namespace.concat(value));\n bytes[6] = (bytes[6] & 0x0f) | version;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n if (buf) {\n for (var idx = 0; idx < 16; ++idx) {\n buf[off+idx] = bytes[idx];\n }\n }\n\n return buf || bytesToUuid(bytes);\n };\n\n // Function#name is not settable on some platforms (#270)\n try {\n generateUUID.name = name;\n } catch (err) {\n }\n\n // Pre-defined namespaces, per Appendix C\n generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n\n return generateUUID;\n};\n","var v35 = require('./lib/v35.js');\nvar sha1 = require('./lib/sha1');\nmodule.exports = v35('v5', 0x50, sha1);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://vwoSdk/webpack/universalModuleDefinition","webpack://vwoSdk/webpack/bootstrap","webpack://vwoSdk/./lib/VWO.js","webpack://vwoSdk/./lib/api/activate.js","webpack://vwoSdk/./lib/api/getFeatureVariableValue.js","webpack://vwoSdk/./lib/api/getVariation.js","webpack://vwoSdk/./lib/api/index.js","webpack://vwoSdk/./lib/api/isFeatureEnabled.js","webpack://vwoSdk/./lib/api/push.js","webpack://vwoSdk/./lib/api/track.js","webpack://vwoSdk/./lib/constants/index.js","webpack://vwoSdk/./lib/core/BucketingService.js","webpack://vwoSdk/./lib/core/SegmentEvaluator.js","webpack://vwoSdk/./lib/core/VariationDecider.js","webpack://vwoSdk/./lib/enums/AnsiColorEnum.js","webpack://vwoSdk/./lib/enums/ApiEnum.js","webpack://vwoSdk/./lib/enums/CampaignTypeEnum.js","webpack://vwoSdk/./lib/enums/DataTypeEnum.js","webpack://vwoSdk/./lib/enums/EventEnum.js","webpack://vwoSdk/./lib/enums/FeatureVariableTypeEnum.js","webpack://vwoSdk/./lib/enums/FileNameEnum.js","webpack://vwoSdk/./lib/enums/GoalTypeEnum.js","webpack://vwoSdk/./lib/enums/HeadersEnum.js","webpack://vwoSdk/./lib/enums/HooksEnum.js","webpack://vwoSdk/./lib/enums/LogLevelEnum.js","webpack://vwoSdk/./lib/enums/StatusEnum.js","webpack://vwoSdk/./lib/enums/UrlEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandTypesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandValueTypeRegexesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandValuesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperatorTypesEnum.js","webpack://vwoSdk/./lib/enums/segment/index.js","webpack://vwoSdk/./lib/index.js","webpack://vwoSdk/./lib/schemas/SettingsFileSchema.js","webpack://vwoSdk/./lib/services/EventQueue.js","webpack://vwoSdk/./lib/services/HooksManager.js","webpack://vwoSdk/./lib/services/SettingsFileManager.js","webpack://vwoSdk/./lib/services/UrlService.js","webpack://vwoSdk/./lib/services/UsageStats.js","webpack://vwoSdk/./lib/services/logging/ConsoleLogManager.js","webpack://vwoSdk/./lib/services/logging/LoggingManager.js","webpack://vwoSdk/./lib/services/logging/index.js","webpack://vwoSdk/./lib/utils/CampaignUtil.js","webpack://vwoSdk/./lib/utils/DataTypeUtil.js","webpack://vwoSdk/./lib/utils/DecisionUtil.js","webpack://vwoSdk/./lib/utils/EventDispatcherUtil.js","webpack://vwoSdk/./lib/utils/FeatureUtil.js","webpack://vwoSdk/./lib/utils/FetchUtil.js","webpack://vwoSdk/./lib/utils/FunctionUtil.js","webpack://vwoSdk/./lib/utils/HttpXMLUtil.js","webpack://vwoSdk/./lib/utils/ImpressionUtil.js","webpack://vwoSdk/./lib/utils/LogMessageUtil.js","webpack://vwoSdk/./lib/utils/ObjectUtil.js","webpack://vwoSdk/./lib/utils/SegmentUtil.js","webpack://vwoSdk/./lib/utils/SettingsFileUtil.js","webpack://vwoSdk/./lib/utils/UuidUtil.js","webpack://vwoSdk/./lib/utils/VWOFeatureFlags.js","webpack://vwoSdk/./lib/utils/ValidateUtil.js","webpack://vwoSdk/./lib/utils/XhrUtil.js","webpack://vwoSdk/./node_modules/murmurhash/murmurhash.js","webpack://vwoSdk/./node_modules/superstruct/lib/index.es.js","webpack://vwoSdk/./node_modules/uuid/lib/bytesToUuid.js","webpack://vwoSdk/./node_modules/uuid/lib/sha1-browser.js","webpack://vwoSdk/./node_modules/uuid/lib/v35.js","webpack://vwoSdk/./node_modules/uuid/v5.js"],"names":["api","require","FileNameEnum","ApiEnum","DataTypeUtil","FunctionUtil","VWOFeatureFlags","EventQueue","SettingsFileService","logging","HooksManager","UrlService","UsageStats","BatchEventsDispatcher","customEventUtil","BatchEventsQueue","LogLevelEnum","LogMessageEnum","LogMessageUtil","file","VWO","config","getVariation","getVariationName","userStorageService","logger","returnPromiseFor","asyncStorageConfig","optOut","undefined","redisStorage","settingsFileManager","isSettingsFileValid","log","ERROR","build","ERROR_MESSAGES","SETTINGS_FILE_INVALID","INFO","INFO_MESSAGES","CONFIG_VALID","init","eventQueue","usageStats","SettingsFileManager","checkAndPoll","isDevelopmentMode","collectUsageStats","getConfig","processSettingsFile","SDK_INITIALIZED","settingsFile","campaignKey","userId","options","self","isObject","CONFIG_ASYNC_RETURN_PROMISE","method","ACTIVATE","Promise","resolve","API_NOT_ENABLED","activate","then","data","variationName","all","CONFIG_RETURN_PROMISE","responseCallback","_error","_response","apiResponse","err","message","GET_VARIATION_NAME","campaignSpecifier","goalIdentifier","TRACK","track","trackResponse","counter","isEventArchEnabled","isArray","isUndefined","isNull","objectValues","filter","Boolean","length","some","IS_FEATURE_ENABLED","isFeatureEnabled","isFeatureEnabledApiResponse","variableKey","GET_FEATURE_VARIABLE_VALUE","getFeatureVariableValue","typeCastedValue","tagKey","tagValue","customDimensionMap","arguments","API_BAD_PARAMETERS","PUSH","push","OPT_OUT_API_CALLED","_destroyInstanceVariables","batchEventsQueue","flushEvents","accountId","getSettingsFile","sdkKey","getAndUpdateSettingsFile","module","exports","Constants","DecisionUtil","CampaignUtil","ImpressionUtil","ValidateUtil","EventEnum","Activate","vwoInstance","areParamsValid","customVariables","variationTargetingVariables","userStorageData","shouldTrackReturningUser","metaData","userAgent","userIpAddress","visitorUserAgent","areValidParamsForAPIMethod","campaign","getCampaign","hasOwnProperty","isMAB","status","STATUS_RUNNING","WARN","WARNING_MESSAGES","CAMPAIGN_NOT_RUNNING","isAbCampaign","API_NOT_APPLICABLE","campaignType","type","result","isPromise","_validateAndReturnVariation","variationId","isStoredVariation","isValidValue","DECISION_NO_VARIATION_ALLOTED","CAMPAIGN_USER_ALREADY_TRACKED","batchEvents","properties","buildBatchEventForTrackingUser","id","enqueue","getEventsBaseProperties","VWO_VARIATION_SHOWN","getUsageStats","payload","getTrackUserPayloadData","process","buildEventForTrackingUser","FeatureUtil","ObjectUtil","GetFeatureVariableValue","apiName","_validateAndReturnFeaureVariable","variable","variation","FEATURE_STATUS","isFeatureRolloutCampaign","getVariableForFeature","isFeatureTestCampaign","getVariableValueForVariation","areObjectKeys","FEATURE_VARIABLE_VALUE","key","variableValue","value","FEATURE_VARIABLE_DEFAULT_VALUE","VARIABLE_NOT_FOUND","getTypeCastVariableValue","GetVariation","IsFeatureEnabled","_validateAndReturnFeatureEnabled","Push","PUSH_INVALID_PARAMS","TAG_KEY_LENGTH_EXCEEDED","TAG_VALUE_LENGTH_EXCEEDED","Object","keys","forEach","isString","JSON","stringify","buildBatchEventForPushing","VWO_SYNC_VISITOR_PROP","getPushPayloadData","success","events","customDimensionKeys","buildEventForPushing","assign","GoalTypeEnum","Track","GOAL_TYPE_TO_TRACK_DEFAULT","ALL","GOAL_IDENTIFIER_SEPERATOR","revenueValue","goalTypeToTrack","eventProperties","includes","revenuePropList","Set","campaigns","isBoolean","getCampaignsForKeys","getCampaignsForGoal","metricMap","areGlobalGoals","trackCampaignGoal","areAllPromises","values","every","item","dataArray","index","ans","_validateAndReturnTrackValue","k","getTrackGoalPayloadData","_saveUserData","campaignId","goal","getCampaignGoal","TRACK_API_GOAL_NOT_FOUND","REVENUE","mca","revenueProp","logIncorrectParamsForRevenueGoal","add","_validateAndReturnTrackEvent","storedGoalIdentifier","identifiers","split","CAMPAIGN_GOAL_ALREADY_TRACKED","buildBatchEventForTrackingGoal","buildEventForTrackingGoal","TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL","packageFile","name","SDK_NAME","version","SDK_VERSION","PLATFORM","SEED_VALUE","MAX_TRAFFIC_PERCENT","MAX_TRAFFIC_VALUE","MAX_EVENTS_PER_REQUEST","DEFAULT_EVENTS_PER_REQUEST","DEFAULT_REQUEST_TIME_INTERVAL","SEED_URL","HTTP_PROTOCOL","HTTPS_PROTOCOL","SDK_QUERY_PARAM","SDK_VERSION_QUERY_PARAM","Hasher","getLogger","BucketingService","_generateBucketValue","hashValue","maxValue","multiplier","ratio","Math","pow","multipliedValue","floor","_getVariation","variations","bucketValue","i","startVariationAllocation","endVariationAllocation","_getBucketValueForUser","seed","disableLog","v3","DEBUG","DEBUG_MESSAGES","USER_HASH_BUCKET_VALUE","isUserPartOfCampaign","trafficAllocation","percentTraffic","valueAssignedToUser","getBucketingSeed","isUserPart","USER_CAMPAIGN_ELIGIBILITY","bucketUserToVariation","isNB","getAll","isNBv2","isOB","isOBv2","_generateHashValue","USER_CAMPAIGN_BUCKET_VALUES","calculateBucketValue","SegmentEnum","getKeyValue","operandCustomVariablesParser","operandUserParser","SegmentOperatorTypes","AND","OR","NOT","SegmentOperandTypes","CUSTOM_VARIABLE","USER","SegmentEvaluator","evaluator","dsl","operator","subDsl","list","val","disableLogs","SEGMENTATION_SKIPPED","SEGMENTATION_ERROR","Bucketer","VariationDecider","getVariationAllotted","response","USER_ID_INVALID","getVariationOfCampaignForUser","USER_NOT_PART_OF_CAMPAIGN","USER_VARIATION_STATUS","AnsiColorEnum","BOLD","CYAN","GREEN","LIGHTBLUE","RED","RESET","WHITE","YELLOW","LAUNCH","CampaignTypeEnum","FEATURE_TEST","FEATURE_ROLLOUT","AB","DataTypeEnum","NUMBER","STRING","BOOLEAN","OBJECT","FeatureVariableTypeEnum","DOUBLE","INTEGER","LIB_PATH","CORE_PATH","UTIL_PATH","SERVICES_PATH","INDEX","API","ConsoleLogManager","LoggingManager","EventDispatcher","EventDispatcherUtil","Functionutil","UuidUtil","HttpHandlerUtil","HttpImageUtil","HttpXMLUtil","UsageStatsUtil","CUSTOM","HeadersEnum","USER_AGENT","IP","HooksEnum","DECISION_TYPES","CAMPAIGN_DECISION","LogNumberLevel","_0","_1","_2","_3","_4","NOTSET","LogLevelColorInfoEnum","LogLevelInfoEnum","PASSED","FAILED","UrlEnum","BASE_URL","SETTINGS_URL","WEBHOOK_SETTINGS_URL","TRACK_USER","TRACK_GOAL","BATCH_EVENTS","EVENTS","LOWER","LOWER_MATCH","WILDCARD","WILDCARD_MATCH","REGEX","REGEX_MATCH","STARTING_STAR","ENDING_STAR","GREATER_THAN_MATCH","GREATER_THAN_EQUAL_TO_MATCH","LESS_THAN_MATCH","LESS_THAN_EQUAL_TO_MATCH","LOWER_VALUE","STARTING_ENDING_STAR_VALUE","STARTING_STAR_VALUE","ENDING_STAR_VALUE","REGEX_VALUE","EQUAL_VALUE","GREATER_THAN_VALUE","GREATER_THAN_EQUAL_TO_VALUE","LESS_THAN_VALUE","LESS_THAN_EQUAL_TO_VALUE","SegmentOperandValueTypeRegexes","SegmentOperandValues","SettingsFileUtil","setLogHandler","setLogLevel","logError","parameter","CONFIG_PARAMETER_INVALID","Error","logInfo","CONFIG_PARAMETER_USED","console","info","getCurrentTime","setLogger","get","launch","sdkConfig","cloneObject","level","pollingInterval","isNumber","integrations","CONFIG_CORRUPTED","setLogColorMode","haveColoredLogs","isFunction","CONFIG_CUSTOM_LOGGER_USED","CONFIG_LOG_LEVEL_SET","CONFIG_DEVELOPMENT_MODE_STATUS","validate","number","string","boolean","array","object","optional","union","record","campaignGoalSchema","identifier","variableObjectSchema","campaignVariationSchema","weight","changes","segments","variables","campaignObjectSchema","isBucketingSeedEnabled","goals","isForcedVariationEnabled","isUserListEnabled","groupSchema","et","p","wt","groupName","settingsFileSchema","campaignGroups","collectionPrefix","groups","validateSettingsFile","settings","error","running","queue","customHeaders","visitor_ua","encodeURIComponent","visitor_ip","eventName","callback","dispatchPostCall","dispatchGetCall","EVENT_QUEUE","queueType","event","executeNext","shift","execute","_configObj","_clonedSettingsFile","setVariationAllocation","isValidSettingsFile","SETTINGS_FILE_CORRUPTED","lastSettingsFile","setInterval","latestSettingsFile","POLLING_SUCCESS","stringifiedLatestSettingsFile","updateSettingsFile","POLLING_SETTINGS_FILE_UPDATED","POLLING_SETTINGS_FILE_NOT_UPDATED","_e","POLLING_FAILED","POLLING_SETTINGS_FILE_REGISTERED","_setVariationBucketing","SETTINGS_FILE_PROCESSED","_reject","isViaWebhook","_err","API_HAS_CORRUPTED_SETTINGS_FILE","getBaseUrl","baseUrl","LogManager","Number","logLevel","prefix","isColoredLogEnabled","shouldLog","logMessage","consoleLog","targetLogLevel","logArguments","apply","warn","globalLogLevel","globalLogHandler","_customLog","getLogLevel","getLogColorMode","_getVariationBucketRange","variationWeight","startRange","ceil","min","getCampaignBasedOnId","parseInt","scaleVariationWeights","totalWeight","reduce","acc","campaignKeys","CAMPAIGN_NOT_FOUND_FOR_GOAL","getCampaignStatus","toLowerCase","isCampaignRunning","validateCampaign","numberOfVariations","stepFactor","currentAllocation","assignRangeValues","VARIATION_RANGE_ALLOCATION","start","end","setCampaignAllocation","desiredCampaignGoal","getCampaignVariation","desiredVariation","getControlForCampaign","control","isPartOfGroup","prototype","call","groupId","getGroupCampaigns","_toStringValue","toString","StatusEnum","RandomAlgo","SegmentationTypeEnum","WHITELISTING","PRE_SEGMENTATION","isTrackUserAPI","isTrackGoalAPI","newGoalIdentifier","vwoUserId","generateFor","USER_UUID","uuid","decision","campaignName","sdkVersion","source","_vwoUserId","whitelistedVariation","_checkForWhitelisting","storedVariation","_checkForUserStorage","variationWithoutStorageLookup","evaluateAndGetVariationWithoutStorage","_checkForPreSegmentation","campaignList","isWhitelistedOrStoredVariation","_checkForStorageAndWhitelisting","MEG_CALLED_CAMPAIGN_NOT_WINNER","inEligibleCampaignKeys","eligibleCampaignKeys","getEligbleCampaigns","eligibleCampaigns","inEligibleCampaigns","MEG_ELIGIBLE_CAMPAIGNS","slice","inEligibleText","noOfEligibleCampaigns","noOfGroupCampaigns","megAlgoNumber","evaluateTrafficAndGetVariation","_normalizeAndFindWinningCampaign","_advancedAlgoFindWinningCampaign","_evaluateWhitelisting","targetedVariations","SEGMENTATION_STATUS","segmentationType","_getStoredUserData","userStorageMap","USER_STORAGE_SERVICE_NOT_CONFIGURED","GETTING_DATA_USER_STORAGE_SERVICE","finalData","USER_STORAGE_SERVICE_GET_FAILED","isSaved","set","SETTING_DATA_USER_STORAGE_SERVICE","USER_STORAGE_SERVICE_SET_FAILED","calledCampaign","otherCampaignWinner","groupCampaign","OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE","preSegmentationResult","USER_VARIATION_ALLOCATION_STATUS","fromUserStorageService","isUserWhitelisted","whitelistingResult","variationString","WHITELISTING_SKIPPED","userData","_processAfterGettingFromStorage","USER_STORAGE_SERVICE_NO_STORED_DATA","GOT_STORED_VARIATION","CAMPAIGN_NOT_ACTIVATED","reason","isPartOfCampaign","shortlistedCampaigns","winnerCampaign","MEG_GOT_WINNER_CAMPAIGN","found","priorityOrder","j","participatingCampaignList","clonedCampaign","excludedProperties","parsedUrl","queryParams","convertObjectKeysToString","sendCall","successCallback","endPoint","url","IMPRESSION_FAILED","handleGetResponse","baseParams","account_id","params","parse","tags","u","mainKeys","experiment_id","combination","IMPRESSION_SUCCESS","XMLHttpRequest","send","handlePostResponse","en","d","visitor","props","vwo_fs_environment","IMPRESSION_SUCCESS_FOR_EVENT_ARCH","a","variableData","variationVariable","variableType","isNaN","UNABLE_TO_CAST_VALUE","parseFloat","FetchUtil","_getStoredSettings","isStoredData","parsedSettings","getSettings","warning","reject","headers","body","fetch","res","text","jsonData","setSettings","obj","clonedObj","getRandomNumber","random","getCurrentUnixTimestamp","Date","getCurrentUnixTimestampInMillis","matchWithRegex","regex","match","RegExp","SEGMENTATION_REGEX_CREATION_FAILED","toISOString","prop","indexOf","noop","printLog","errorCallback","isCallbackCalled","handleGetCall","xhr","open","headerName","setRequestHeader","onload","responseText","statusText","onerror","getPrimaryProperties","configObj","sId","getBaseProperties","getReportingProperties","ap","IMPRESSION_FOR_PUSH","_getStringifiedLogProperties","ed","IMPRESSION_FOR_TRACK_USER","revenue","goalId","IMPRESSION_FOR_TRACK_GOAL","env","eTime","getEventBasePayload","vwo_sdkName","vwo_sdkVersion","vwo_envKey","msgId","visId","sessionId","time","isFirst","IMPRESSION_FOR_EVENT_ARCH_TRACK_USER","metric","IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL","goalName","vwoMeta","size","isCustomEvent","IMPRESSION_FOR_EVENT_ARCH_PUSH","property","logProperties","nargs","template","replace","isKey","map","extractOperandValue","operand","processValues","operandValue","processedOperandValue","processedTagValue","preProcessTagValue","preProcessOperandValue","operandType","startingStar","endingStar","operandKey","processedValues","extractResult","users","trim","endsWith","startsWith","pattern","test","protocol","port","hostname","path","handleHttpRequest","statusCode","contentType","rawData","resume","setEncoding","on","chunk","handleHttpResponse","parsedData","uuidv5","VWO_NAMESPACE","URL","hash","userIdNamespace","generate","uuidForUserIdAccountId","desiredUuid","toUpperCase","namespace","APIMethodArgumentsValidationEnum","STRING_NULL_UNDEFINED_ARRAY","isValidString","isValidNumber","isValidFunction","isValidBoolean","isValidObject","argsObj","isValid","args","validators","argConfig","argValue","dataType","XhrUtil","xhrHandler","sendRequest","retries","maxRetries","delay","timeout","setTimeout","ontimeout","newHeaderName","xhrOnLoad","xhrOnError","e","parsedXhrResponse"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCdA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;;;;;;AClFA;;;;;;;;;;;;;;;AAgBA,IAAMA,GAAG,GAAGC,mBAAO,CAAC,iCAAD,CAAnB;;AAEA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,yDAAD,CAA5B;;AACA,IAAME,OAAO,GAAGF,mBAAO,CAAC,+CAAD,CAAvB;;AAEA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,yDAAD,CAA5B;;AACA,IAAMI,YAAY,GAAGJ,mBAAO,CAAC,yDAAD,CAA5B;;AACA,IAAMK,eAAe,GAAGL,mBAAO,CAAC,+DAAD,CAA/B;;AAEA,IAAMM,UAAU,GAAGN,mBAAO,CAAC,2DAAD,CAA1B;;AACA,IAAMO,mBAAmB,GAAGP,mBAAO,CAAC,6EAAD,CAAnC;;AACA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,2DAAD,CAAvB;;AACA,IAAMS,YAAY,GAAGT,mBAAO,CAAC,+DAAD,CAA5B;;AACA,IAAMU,UAAU,GAAGV,mBAAO,CAAC,2DAAD,CAA1B;;AACA,IAAMW,UAAU,GAAGX,mBAAO,CAAC,2DAAD,CAA1B;;AAEA,IAAIY,qBAAJ;AACA,IAAIC,eAAJ;AACA,IAAIC,gBAAJ;;AAEA,IAAI,KAAJ,EAAwC,EAIvC;;IAEOC,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMC,IAAI,GAAGjB,YAAY,CAACkB,GAA1B;;IAEMA,G;;;AACJ;AACA,iBAAyB;AAAA;;AAAA,QAAbC,MAAa,uEAAJ,EAAI;;AAAA;;AACvB,SAAKC,YAAL,GAAoB,KAAKC,gBAAzB,CADuB,CACoB;;AAC3C,SAAKC,kBAAL,GAA0BH,MAAM,CAACG,kBAAjC;AACA,SAAKC,MAAL,GAAcJ,MAAM,CAACI,MAArB;AACA,SAAKC,gBAAL,GAAwBL,MAAM,CAACK,gBAA/B;AACA,SAAKC,kBAAL,GAA0BN,MAAM,CAACM,kBAAjC;AACA,SAAKC,MAAL,GAAc,KAAd;;AAEA,QAAI,KAAKJ,kBAAL,KAA4BK,SAA5B,IAAyCR,MAAM,CAACM,kBAApD,EAAwE;AACtE;AACA,WAAKH,kBAAL,GAA0BH,MAAM,CAACM,kBAAP,CAA0BG,YAApD;AACAT,YAAM,CAACG,kBAAP,GAA4B,KAAKA,kBAAjC;AACD;;AACD,QAAIO,mBAAmB,GAAG,IAAIvB,mBAAJ,CAAwBa,MAAxB,CAA1B,CAbuB,CAevB;;AACA,QAAI,CAACU,mBAAmB,CAACC,mBAApB,EAAL,EAAgD;AAC9C,WAAKP,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BC,qBAAnD,EAA0E;AACxElB,YAAI,EAAJA;AADwE,OAA1E,CAFF;AAOA;AACD;;AAED,SAAKM,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BC,YAAlD,EAAgE;AAC9DrB,UAAI,EAAJA;AAD8D,KAAhE,CAFF,EA3BuB,CAkCvB;;AACAT,gBAAY,CAAC+B,IAAb,CAAkBpB,MAAlB,EAnCuB,CAqCvB;;AACA,SAAKqB,UAAL,GAAkB,IAAInC,UAAJ,EAAlB;AACA,SAAKoC,UAAL,GAAkB,IAAI/B,UAAJ,EAAlB;AAEA,SAAKgC,mBAAL,GAA2Bb,mBAA3B;AACAA,uBAAmB,CAACc,YAApB,GA1CuB,CA0Ca;;AAEpC,QAAI,CAACxB,MAAM,CAACyB,iBAAZ,EAA+B;AAC7B,WAAKH,UAAL,CAAgBI,iBAAhB,CAAkChB,mBAAmB,CAACiB,SAApB,EAAlC;AACD,KA9CsB,CAgDvB;;;AACA,QAAI,KAAJ,EAAwC,0BAjDjB,CAoFvB;;;AACA,SAAKJ,mBAAL,CAAyBK,mBAAzB;AAEA,SAAKxB,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BW,eAAlD,EAAmE;AACjE/B,UAAI,EAAJA;AADiE,KAAnE,CAFF;AAOA,SAAKR,UAAL,GAAkBA,UAAU,CAAC8B,IAAX,CAAgBpB,MAAM,CAAC8B,YAAvB,CAAlB;AACA,SAAK7C,eAAL,GAAuBA,eAAe,CAACmC,IAAhB,CAAqBpB,MAAM,CAAC8B,YAA5B,CAAvB;AACD,G,CAED;;AAEA;;;;;;;;;;;;;6BASSC,W,EAAaC,M,EAAsB;AAAA;;AAAA,UAAdC,OAAc,uEAAJ,EAAI;;AAC1C,UAAI;AACF,YAAIC,IAAI,GAAG,IAAX;;AAEA,YAAIA,IAAI,CAAC5B,kBAAL,IAA2BvB,YAAY,CAACoD,QAAb,CAAsBD,IAAI,CAAC5B,kBAA3B,CAA/B,EAA+E;AAC7E4B,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkB,2BAAlD,EAA+E;AAC7EtC,gBAAI,EAAJA,IAD6E;AAE7EuC,kBAAM,EAAEvD,OAAO,CAACwD;AAF6D,WAA/E,CAFF;AAQA,iBAAO,IAAIC,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAACwD;AAFoD,eAAnE,CAFF;;AAOAE,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL,qBAAO7D,GAAG,CAAC+D,QAAJ,CAAaR,IAAb,EAAmBH,WAAnB,EAAgCC,MAAhC,EAAwCC,OAAxC,EAAiDU,IAAjD,CAAsD,UAASC,IAAT,EAAe;AAC1E,oBAAI7D,YAAY,CAACoD,QAAb,CAAsBS,IAAtB,CAAJ,EAAiC;AAC/BJ,yBAAO,CAACI,IAAI,CAACC,aAAN,CAAP;AACD,iBAFD,MAEO;AACLL,yBAAO,CAACI,IAAD,CAAP;AACD;AACF,eANM,CAAP;AAOD;AACF,WAnBM,CAAP;AAoBD,SAhCC,CAkCF;AACA;;;AACA,YAAIV,IAAI,CAAC7B,gBAAL,KAA0B6B,IAAI,CAAC7B,gBAAL,CAAsBqC,QAAtB,IAAkCR,IAAI,CAAC7B,gBAAL,CAAsByC,GAAlF,CAAJ,EAA4F;AAC1FZ,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6B,qBAAlD,EAAyE;AACvEjD,gBAAI,EAAJA,IADuE;AAEvEuC,kBAAM,EAAEvD,OAAO,CAACwD;AAFuD,WAAzE,CAFF;AAOA,iBAAO,IAAIC,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAACwD;AAFoD,eAAnE,CAFF;;AAOAE,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL,kBAAIK,aAAJ;;AACAZ,qBAAO,CAACe,gBAAR,GAA2B,UAACC,MAAD,EAASC,SAAT,EAAuB;AAChDV,uBAAO,CAACK,aAAD,CAAP;AACD,eAFD;;AAGAA,2BAAa,GAAGlE,GAAG,CAAC+D,QAAJ,CAAaR,IAAb,EAAmBH,WAAnB,EAAgCC,MAAhC,EAAwCC,OAAxC,CAAhB,CALK,CAOL;AACA;;AACA,kBAAI,CAACY,aAAL,EAAoB;AAClBL,uBAAO,CAACK,aAAD,CAAP;AACD,eAFD,MAEO,IAAI9D,YAAY,CAACoD,QAAb,CAAsBU,aAAtB,CAAJ,EAA0C;AAC/CL,uBAAO,CAACK,aAAa,CAACA,aAAf,CAAP;AACD;AACF;AACF,WAzBM,CAAP;AA0BD;;AAED,YAAI,KAAKtC,MAAT,EAAiB;AACf,eAAKH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,gBAAI,EAAJA,IADiE;AAEjEnB,eAAG,EAAEG,OAAO,CAACwD;AAFoD,WAAnE,CAFF;AAOA,iBAAO,IAAP;AACD;;AAED,YAAMa,WAAW,GAAGxE,GAAG,CAAC+D,QAAJ,CAAaR,IAAb,EAAmBH,WAAnB,EAAgCC,MAAhC,EAAwCC,OAAxC,CAApB;;AAEA,YAAIlD,YAAY,CAACoD,QAAb,CAAsBgB,WAAtB,CAAJ,EAAwC;AACtC,iBAAOA,WAAW,CAACN,aAAnB;AACD;;AAED,eAAOM,WAAP;AACD,OA1FD,CA0FE,OAAOC,GAAP,EAAY;AACZ,aAAKhD,MAAL,CAAYQ,GAAZ,CAAgBjB,YAAY,CAACkB,KAA7B,EAAoCuC,GAAG,CAACC,OAAxC;AACA,eAAO,IAAP;AACD;AACF;AAED;;;;;;;;;;;;qCASiBtB,W,EAAaC,M,EAAsB;AAAA;;AAAA,UAAdC,OAAc,uEAAJ,EAAI;;AAClD,UAAI;AACF,YAAIC,IAAI,GAAG,IAAX;;AAEA,YAAIA,IAAI,CAAC5B,kBAAL,IAA2BvB,YAAY,CAACoD,QAAb,CAAsBD,IAAI,CAAC5B,kBAA3B,CAA/B,EAA+E;AAC7E4B,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkB,2BAAlD,EAA+E;AAC7EtC,gBAAI,EAAJA,IAD6E;AAE7EuC,kBAAM,EAAEvD,OAAO,CAACwE;AAF6D,WAA/E,CAFF;AAQA,iBAAO,IAAIf,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAACwE;AAFoD,eAAnE,CAFF;;AAOAd,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL,qBAAO7D,GAAG,CAACsB,YAAJ,CAAiBiC,IAAjB,EAAuBH,WAAvB,EAAoCC,MAApC,EAA4CC,OAA5C,EAAqDU,IAArD,CAA0D,UAASC,IAAT,EAAe;AAC9E,oBAAI7D,YAAY,CAACoD,QAAb,CAAsBS,IAAtB,CAAJ,EAAiC;AAC/BJ,yBAAO,CAACI,IAAI,CAACC,aAAN,CAAP;AACD,iBAFD,MAEO;AACLL,yBAAO,CAACI,IAAD,CAAP;AACD;AACF,eANM,CAAP;AAOD;AACF,WAnBM,CAAP;AAoBD,SAhCC,CAkCF;;;AACA,YAAIV,IAAI,CAAC7B,gBAAL,KAA0B6B,IAAI,CAAC7B,gBAAL,CAAsBH,gBAAtB,IAA0CgC,IAAI,CAAC7B,gBAAL,CAAsByC,GAA1F,CAAJ,EAAoG;AAClGZ,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6B,qBAAlD,EAAyE;AACvEjD,gBAAI,EAAJA,IADuE;AAEvEuC,kBAAM,EAAEvD,OAAO,CAACwE;AAFuD,WAAzE,CAFF;AAOA,iBAAO,IAAIf,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAACwE;AAFoD,eAAnE,CAFF;;AAOAd,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL;AACAA,qBAAO,CAAC7D,GAAG,CAACsB,YAAJ,CAAiBiC,IAAjB,EAAuBH,WAAvB,EAAoCC,MAApC,EAA4CC,OAA5C,CAAD,CAAP;AACD;AACF,WAdM,CAAP;AAeD;;AAED,YAAI,KAAK1B,MAAT,EAAiB;AACf,eAAKH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,gBAAI,EAAJA,IADiE;AAEjEnB,eAAG,EAAEG,OAAO,CAACwE;AAFoD,WAAnE,CAFF;AAOA,iBAAO,IAAP;AACD;;AAED,eAAO3E,GAAG,CAACsB,YAAJ,CAAiBiC,IAAjB,EAAuBH,WAAvB,EAAoCC,MAApC,EAA4CC,OAA5C,CAAP;AACD,OAxED,CAwEE,OAAOmB,GAAP,EAAY;AACZ,aAAKhD,MAAL,CAAYQ,GAAZ,CAAgBjB,YAAY,CAACkB,KAA7B,EAAoCuC,GAAG,CAACC,OAAxC;AACA,eAAO,IAAP;AACD;AACF;AAED;;;;;;;;;;;0BAQME,iB,EAAmBvB,M,EAAQwB,c,EAA8B;AAAA;;AAAA,UAAdvB,OAAc,uEAAJ,EAAI;;AAC7D,UAAI;AACF,YAAIC,IAAI,GAAG,IAAX,CADE,CAGF;;AACA,YAAIA,IAAI,CAAC5B,kBAAL,IAA2BvB,YAAY,CAACoD,QAAb,CAAsBD,IAAI,CAAC5B,kBAA3B,CAA/B,EAA+E;AAC7E4B,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkB,2BAAlD,EAA+E;AAC7EtC,gBAAI,EAAJA,IAD6E;AAE7EuC,kBAAM,EAAEvD,OAAO,CAAC2E;AAF6D,WAA/E,CAFF;AAQA,iBAAO,IAAIlB,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAAC2E;AAFoD,eAAnE,CAFF;;AAOAjB,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL,qBAAO7D,GAAG,CAAC+E,KAAJ,CAAUxB,IAAV,EAAgBqB,iBAAhB,EAAmCvB,MAAnC,EAA2CwB,cAA3C,EAA2DvB,OAA3D,EAAoEU,IAApE,CAAyE,UAASgB,aAAT,EAAwB;AACtGnB,uBAAO,CAACmB,aAAD,CAAP;AACD,eAFM,CAAP;AAGD;AACF,WAfM,CAAP;AAgBD,SA7BC,CA+BF;AACA;;;AACA,YAAIzB,IAAI,CAAC7B,gBAAL,KAA0B6B,IAAI,CAAC7B,gBAAL,CAAsBqD,KAAtB,IAA+BxB,IAAI,CAAC7B,gBAAL,CAAsByC,GAA/E,CAAJ,EAAyF;AACvFZ,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6B,qBAAlD,EAAyE;AACvEjD,gBAAI,EAAJA,IADuE;AAEvEuC,kBAAM,EAAEvD,OAAO,CAAC2E;AAFuD,WAAzE,CAFF;AAOA,iBAAO,IAAIlB,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAAC2E;AAFoD,eAAnE,CAFF;;AAOAjB,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL,kBAAImB,aAAJ;AACA,kBAAIC,OAAO,GAAG,CAAd;;AACA3B,qBAAO,CAACe,gBAAR,GAA2B,UAACC,MAAD,EAASC,SAAT,EAAuB;AAChDU,uBAAO,IAAI,CAAX,CADgD,CAEhD;AACA;;AACA,oBACE1B,IAAI,CAAC2B,kBAAL,IACC9E,YAAY,CAAC+E,OAAb,CAAqBP,iBAArB,KACE,CAACxE,YAAY,CAACgF,WAAb,CAAyBR,iBAAzB,KAA+CxE,YAAY,CAACiF,MAAb,CAAoBT,iBAApB,CAAhD,KACCvE,YAAY,CAACiF,YAAb,CAA0BN,aAA1B,EAAyCO,MAAzC,CAAgDC,OAAhD,EAAyDC,MAJ/D,EAKE;AACA5B,yBAAO,CAACmB,aAAD,CAAP;AACD,iBAPD,MAOO,IAAIC,OAAO,KAAK5E,YAAY,CAACiF,YAAb,CAA0BN,aAA1B,EAAyCO,MAAzC,CAAgDC,OAAhD,EAAyDC,MAAzE,EAAiF;AACtF;AACA;AACA5B,yBAAO,CAACmB,aAAD,CAAP;AACD;AACF,eAhBD;;AAiBAA,2BAAa,GAAGhF,GAAG,CAAC+E,KAAJ,CAAUxB,IAAV,EAAgBqB,iBAAhB,EAAmCvB,MAAnC,EAA2CwB,cAA3C,EAA2DvB,OAA3D,CAAhB,CApBK,CAqBL;AACA;AACA;;AACA,kBAAI,CAAC0B,aAAD,IAAkB,CAAC3E,YAAY,CAACiF,YAAb,CAA0BN,aAA1B,EAAyCU,IAAzC,CAA8CF,OAA9C,CAAvB,EAA+E;AAC7E3B,uBAAO,CAACmB,aAAD,CAAP;AACD,eAFD,MAEO,IAAIA,aAAa,IAAIA,aAAa,CAAClC,iBAAnC,EAAsD;AAC3D,uBAAOkC,aAAa,CAAClC,iBAArB;AACAe,uBAAO,CAACmB,aAAD,CAAP;AACD;AACF;AACF,WAzCM,CAAP;AA0CD;;AAED,YAAI,KAAKpD,MAAT,EAAiB;AACf,eAAKH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,gBAAI,EAAJA,IADiE;AAEjEnB,eAAG,EAAEG,OAAO,CAAC2E;AAFoD,WAAnE,CAFF;AAOA,iBAAO,IAAP;AACD;;AAED,eAAO9E,GAAG,CAAC+E,KAAJ,CAAUxB,IAAV,EAAgBqB,iBAAhB,EAAmCvB,MAAnC,EAA2CwB,cAA3C,EAA2DvB,OAA3D,CAAP;AACD,OAjGD,CAiGE,OAAOmB,GAAP,EAAY;AACZ,aAAKhD,MAAL,CAAYQ,GAAZ,CAAgBjB,YAAY,CAACkB,KAA7B,EAAoCuC,GAAG,CAACC,OAAxC;AACA,eAAO,IAAP;AACD;AACF;AAED;;;;;;;;;;;;qCASiBtB,W,EAAaC,M,EAAsB;AAAA;;AAAA,UAAdC,OAAc,uEAAJ,EAAI;;AAClD,UAAI;AACF,YAAIC,IAAI,GAAG,IAAX;;AAEA,YAAIA,IAAI,CAAC5B,kBAAL,IAA2BvB,YAAY,CAACoD,QAAb,CAAsBD,IAAI,CAAC5B,kBAA3B,CAA/B,EAA+E;AAC7E4B,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkB,2BAAlD,EAA+E;AAC7EtC,gBAAI,EAAJA,IAD6E;AAE7EuC,kBAAM,EAAEvD,OAAO,CAACwF;AAF6D,WAA/E,CAFF;AAQA,iBAAO,IAAI/B,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAACwF;AAFoD,eAAnE,CAFF;;AAOA9B,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL,qBAAO7D,GAAG,CAAC4F,gBAAJ,CAAqBrC,IAArB,EAA2BH,WAA3B,EAAwCC,MAAxC,EAAgDC,OAAhD,EAAyDU,IAAzD,CAA8D,UAASC,IAAT,EAAe;AAClF,oBAAI7D,YAAY,CAACoD,QAAb,CAAsBS,IAAtB,CAAJ,EAAiC;AAC/BJ,yBAAO,CAACI,IAAI,CAAC2B,gBAAN,CAAP;AACD,iBAFD,MAEO;AACL/B,yBAAO,CAACI,IAAD,CAAP;AACD;AACF,eANM,CAAP;AAOD;AACF,WAnBM,CAAP;AAoBD,SAhCC,CAkCF;AACA;;;AACA,YAAIV,IAAI,CAAC7B,gBAAL,KAA0B6B,IAAI,CAAC7B,gBAAL,CAAsBkE,gBAAtB,IAA0CrC,IAAI,CAAC7B,gBAAL,CAAsByC,GAA1F,CAAJ,EAAoG;AAClGZ,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6B,qBAAlD,EAAyE;AACvEjD,gBAAI,EAAJA,IADuE;AAEvEuC,kBAAM,EAAEvD,OAAO,CAACwF;AAFuD,WAAzE,CAFF;AAOA,iBAAO,IAAI/B,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAACwF;AAFoD,eAAnE,CAFF;;AAOA9B,qBAAO,CAAC,KAAD,CAAP;AACD,aATD,MASO;AACL,kBAAIgC,2BAAJ;;AACAvC,qBAAO,CAACe,gBAAR,GAA2B,UAACC,MAAD,EAASC,SAAT,EAAuB;AAChDV,uBAAO,CAAC,CAAC,CAACgC,2BAAH,CAAP;AACD,eAFD;;AAGAA,yCAA2B,GAAG7F,GAAG,CAAC4F,gBAAJ,CAAqBrC,IAArB,EAA2BH,WAA3B,EAAwCC,MAAxC,EAAgDC,OAAhD,CAA9B,CALK,CAML;AACA;;AACA,kBAAIlD,YAAY,CAACiF,MAAb,CAAoBQ,2BAApB,CAAJ,EAAsD;AACpDhC,uBAAO,CAAC,KAAD,CAAP;AACD,eAFD,MAEO,IAAIzD,YAAY,CAACoD,QAAb,CAAsBqC,2BAAtB,CAAJ,EAAwD;AAC7DhC,uBAAO,CAAC,CAAC,CAACgC,2BAA2B,CAACD,gBAA/B,CAAP;AACD;AACF;AACF,WAxBM,CAAP;AAyBD;;AAED,YAAI,KAAKhE,MAAT,EAAiB;AACf,eAAKH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,gBAAI,EAAJA,IADiE;AAEjEnB,eAAG,EAAEG,OAAO,CAACwF;AAFoD,WAAnE,CAFF;AAOA,iBAAO,KAAP;AACD;;AAED,YAAMnB,WAAW,GAAGxE,GAAG,CAAC4F,gBAAJ,CAAqBrC,IAArB,EAA2BH,WAA3B,EAAwCC,MAAxC,EAAgDC,OAAhD,CAApB;;AAEA,YAAIlD,YAAY,CAACoD,QAAb,CAAsBgB,WAAtB,CAAJ,EAAwC;AACtC,iBAAO,CAAC,CAACA,WAAW,CAACoB,gBAArB;AACD;;AAED,eAAO,CAAC,CAACpB,WAAT;AACD,OAzFD,CAyFE,OAAOC,GAAP,EAAY;AACZ,aAAKhD,MAAL,CAAYQ,GAAZ,CAAgBjB,YAAY,CAACkB,KAA7B,EAAoCuC,GAAG,CAACC,OAAxC;AACA,eAAO,KAAP;AACD;AACF;AAED;;;;;;;;;;;;;;;;4CAawBtB,W,EAAa0C,W,EAAazC,M,EAAsB;AAAA;;AAAA,UAAdC,OAAc,uEAAJ,EAAI;;AACtE,UAAI;AACF,YAAIC,IAAI,GAAG,IAAX;;AAEA,YAAIA,IAAI,CAAC5B,kBAAL,IAA2BvB,YAAY,CAACoD,QAAb,CAAsBD,IAAI,CAAC5B,kBAA3B,CAA/B,EAA+E;AAC7E4B,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkB,2BAAlD,EAA+E;AAC7EtC,gBAAI,EAAJA,IAD6E;AAE7EuC,kBAAM,EAAEvD,OAAO,CAAC4F;AAF6D,WAA/E,CAFF;AAQA,iBAAO,IAAInC,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAAC4F;AAFoD,eAAnE,CAFF;;AAOAlC,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL,qBAAO7D,GAAG,CAACgG,uBAAJ,CAA4BzC,IAA5B,EAAkCH,WAAlC,EAA+C0C,WAA/C,EAA4DzC,MAA5D,EAAoEC,OAApE,EAA6EU,IAA7E,CAAkF,UAASC,IAAT,EAAe;AACtG,oBAAI7D,YAAY,CAACoD,QAAb,CAAsBS,IAAtB,CAAJ,EAAiC;AAC/BJ,yBAAO,CAACI,IAAI,CAACgC,eAAN,CAAP;AACD,iBAFD,MAEO;AACLpC,yBAAO,CAACI,IAAD,CAAP;AACD;AACF,eANM,CAAP;AAOD;AACF,WAnBM,CAAP;AAoBD,SAhCC,CAkCF;;;AACA,YAAIV,IAAI,CAAC7B,gBAAL,KAA0B6B,IAAI,CAAC7B,gBAAL,CAAsBsE,uBAAtB,IAAiDzC,IAAI,CAAC7B,gBAAL,CAAsByC,GAAjG,CAAJ,EAA2G;AACzGZ,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6B,qBAAlD,EAAyE;AACvEjD,gBAAI,EAAJA,IADuE;AAEvEuC,kBAAM,EAAEvD,OAAO,CAAC4F;AAFuD,WAAzE,CAFF;AAOA,iBAAO,IAAInC,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAAC4F;AAFoD,eAAnE,CAFF;;AAOAlC,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL;AACAA,qBAAO,CAAC7D,GAAG,CAACgG,uBAAJ,CAA4BzC,IAA5B,EAAkCH,WAAlC,EAA+C0C,WAA/C,EAA4DzC,MAA5D,EAAoEC,OAApE,CAAD,CAAP;AACD;AACF,WAdM,CAAP;AAeD;;AAED,YAAI,KAAK1B,MAAT,EAAiB;AACf,eAAKH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,gBAAI,EAAJA,IADiE;AAEjEnB,eAAG,EAAEG,OAAO,CAAC4F;AAFoD,WAAnE,CAFF;AAOA,iBAAO,IAAP;AACD;;AAED,eAAO/F,GAAG,CAACgG,uBAAJ,CAA4BzC,IAA5B,EAAkCH,WAAlC,EAA+C0C,WAA/C,EAA4DzC,MAA5D,EAAoEC,OAApE,CAAP;AACD,OAxED,CAwEE,OAAOmB,GAAP,EAAY;AACZ,aAAKhD,MAAL,CAAYQ,GAAZ,CAAgBjB,YAAY,CAACkB,KAA7B,EAAoCuC,GAAG,CAACC,OAAxC;AACA,eAAO,IAAP;AACD;AACF;AAED;;;;;;;;;;;;yBASKwB,M,EAAQC,Q,EAAU9C,M,EAAQ;AAAA;;AAC7B,UAAI;AACF,YAAIE,IAAI,GAAG,IAAX;AACA,YAAI6C,kBAAJ;;AAEA,YAAIC,SAAS,CAACZ,MAAV,KAAqB,CAAzB,EAA4B;AAC1B;AACAW,4BAAkB,GAAGF,MAArB;AACA7C,gBAAM,GAAG8C,QAAT;AAEAD,gBAAM,GAAG,GAAT;AACAC,kBAAQ,GAAG,GAAX;AACD,SAPD,MAOO,IAAIE,SAAS,CAACZ,MAAV,KAAqB,CAAzB,EAA4B;AACjCW,4BAAkB,GAAG,EAArB;AACD,SAFM,MAEA;AACL,eAAK3E,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BkE,kBAAnD,EAAuE;AACrEnF,gBAAI,EAAJA,IADqE;AAErEnB,eAAG,EAAEG,OAAO,CAACoG;AAFwD,WAAvE,CAFF;AAOA,iBAAO,KAAP;AACD,SAtBC,CAwBF;AACA;;;AACA,YAAIhD,IAAI,CAAC7B,gBAAL,KAA0B6B,IAAI,CAAC7B,gBAAL,CAAsB8E,IAAtB,IAA8BjD,IAAI,CAAC7B,gBAAL,CAAsByC,GAA9E,CAAJ,EAAwF;AACtFZ,cAAI,CAAC9B,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6B,qBAAlD,EAAyE;AACvEjD,gBAAI,EAAJA,IADuE;AAEvEuC,kBAAM,EAAEvD,OAAO,CAACoG;AAFuD,WAAzE,CAFF;AAOA,iBAAO,IAAI3C,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,MAAI,CAACjC,MAAT,EAAiB;AACf,oBAAI,CAACH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,oBAAI,EAAJA,IADiE;AAEjEnB,mBAAG,EAAEG,OAAO,CAACoG;AAFoD,eAAnE,CAFF;;AAOA1C,qBAAO,CAAC,IAAD,CAAP;AACD,aATD,MASO;AACL,kBAAIW,WAAJ;AACA,kBAAIS,OAAO,GAAG,CAAd;AAEA,kBAAM3B,OAAO,GAAG;AACde,gCAAgB,EAAE,0BAACC,MAAD,EAASC,SAAT,EAAuB;AACvCU,yBAAO,IAAI,CAAX,CADuC,CAEvC;AACA;;AACA,sBACEmB,kBAAkB,IAClBhG,YAAY,CAACoD,QAAb,CAAsB4C,kBAAtB,CADA,IAEA/F,YAAY,CAACiF,YAAb,CAA0Bc,kBAA1B,EAA8Cb,MAA9C,CAAqDC,OAArD,EAA8DC,MAA9D,GAAuE,CAHzE,EAIE;AACA5B,2BAAO,CAACW,WAAD,CAAP;AACD,mBAND,CAOA;AAPA,uBAQK,IAAIS,OAAO,KAAK5E,YAAY,CAACiF,YAAb,CAA0Bd,WAA1B,EAAuCe,MAAvC,CAA8CC,OAA9C,EAAuDC,MAAvE,EAA+E;AAClF5B,6BAAO,CAACW,WAAD,CAAP;AACD;AACF;AAhBa,eAAhB;AAkBAA,yBAAW,GAAGxE,GAAG,CAACwG,IAAJ,CAASjD,IAAT,EAAe2C,MAAf,EAAuBC,QAAvB,EAAiC9C,MAAjC,EAAyC+C,kBAAzC,EAA6D9C,OAA7D,CAAd,CAtBK,CAuBL;AACA;;AACA,kBAAI,CAACkB,WAAL,EAAkB;AAChBX,uBAAO,CAAC,KAAD,CAAP;AACD,eAFD,MAEO,IAAIW,WAAW,IAAIA,WAAW,CAAC1B,iBAA/B,EAAkD;AACvD,uBAAO0B,WAAW,CAAC1B,iBAAnB;AACAe,uBAAO,CAACW,WAAD,CAAP;AACD;AACF;AACF,WA1CM,CAAP;AA2CD;;AAED,YAAI,KAAK5C,MAAT,EAAiB;AACf,eAAKH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,gBAAI,EAAJA,IADiE;AAEjEnB,eAAG,EAAEG,OAAO,CAACoG;AAFoD,WAAnE,CAFF;AAOA,iBAAO,IAAP;AACD;;AAED,eAAOvG,GAAG,CAACwG,IAAJ,CAASjD,IAAT,EAAe2C,MAAf,EAAuBC,QAAvB,EAAiC9C,MAAjC,EAAyC+C,kBAAzC,CAAP;AACD,OA3FD,CA2FE,OAAO3B,GAAP,EAAY;AACZ,aAAKhD,MAAL,CAAYQ,GAAZ,CAAgBjB,YAAY,CAACkB,KAA7B,EAAoCuC,GAAG,CAACC,OAAxC;AACA,eAAO,KAAP;AACD;AACF;;;gCAEW;AAAA;;AACV,WAAKjD,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkE,kBAAlD,EAAsE;AACpEtF,YAAI,EAAJA;AADoE,OAAtE,CAFF;;AAOA,UAAI,KAAKO,gBAAL,KAA0B,KAAKA,gBAAL,CAAsBE,MAAtB,IAAgC,KAAKF,gBAAL,CAAsByC,GAAhF,CAAJ,EAA0F;AACxF,eAAO,IAAIP,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,gBAAI,CAAC6C,yBAAL;;AACA,cAAI,MAAI,CAACC,gBAAT,EAA2B;AACzB,kBAAI,CAACC,WAAL,GAAmB5C,IAAnB,CAAwB,YAAM;AAC5B,oBAAI,CAAC2C,gBAAL,GAAwB9E,SAAxB;AACAgC,qBAAO,CAAC,IAAD,CAAP;AACD,aAHD;AAID,WALD,MAKO;AACLA,mBAAO,CAAC,IAAD,CAAP;AACD;AACF,SAVM,CAAP;AAWD;;AAED,UAAI,KAAK8C,gBAAT,EAA2B;AACzB,aAAKC,WAAL,GAAmB5C,IAAnB,CAAwB,YAAM;AAC5B,gBAAI,CAAC2C,gBAAL,GAAwB9E,SAAxB;AACD,SAFD;AAGD;;AAED,WAAK6E,yBAAL;;AAEA,aAAO,IAAP;AACD;AACD;;;;;;kCAGc;AAAA;;AACZ,UAAMG,SAAS,GAAG,KAAKjE,mBAAL,CAAyBkE,eAAzB,GAA2CD,SAA7D;;AAEA,UAAI,KAAJ,EAAwC,EAyDvC;AACF;AAED;;;;;;;;;;;;6CASyBA,S,EAAWE,M,EAAQ;AAC1C,UAAI,KAAKnF,MAAT,EAAiB;AACf,aAAKH,MAAL,CAAYQ,GAAZ,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BuB,eAAlD,EAAmE;AACjE3C,cAAI,EAAJA,IADiE;AAEjEnB,aAAG,EAAE;AAF4D,SAAnE,CAFF;AAOA,eAAO,IAAI4D,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5BA,iBAAO,CAAC,IAAD,CAAP;AACD,SAFM,CAAP;AAGD;;AACD,aAAO,KAAKjB,mBAAL,CAAyBoE,wBAAzB,CAAkDH,SAAlD,EAA6DE,MAA7D,CAAP;AACD;;;gDAE2B;AAC1B,WAAKvF,kBAAL,GAA0BK,SAA1B;AACA,WAAKe,mBAAL,GAA2Bf,SAA3B;AACA,WAAKc,UAAL,GAAkBd,SAAlB;AACA,WAAKa,UAAL,GAAkBb,SAAlB;AACA,WAAKD,MAAL,GAAc,IAAd;AACD;;;;;;AAGHqF,MAAM,CAACC,OAAP,GAAiB9F,GAAjB,C;;;;;;;;;;;ACz3BA;;;;;;;;;;;;;;;AAgBA,IAAM+F,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AACA,IAAME,OAAO,GAAGF,mBAAO,CAAC,gDAAD,CAAvB;;AAEA,IAAMmH,YAAY,GAAGnH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMoH,YAAY,GAAGpH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMqH,cAAc,GAAGrH,mBAAO,CAAC,8DAAD,CAA9B;;AACA,IAAMsH,YAAY,GAAGtH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMuH,SAAS,GAAGvH,mBAAO,CAAC,oDAAD,CAAzB;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AAEtC,IAAMC,IAAI,GAAGjB,YAAY,CAACuH,QAA1B;AAEA;;;;;;;;;;;;;;;;;AAgBA,SAAS1D,QAAT,CAAkB2D,WAAlB,EAA+BtE,WAA/B,EAA4CC,MAA5C,EAAkE;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AAChE,MAAMtD,GAAG,GAAGG,OAAO,CAACwD,QAApB;AACA,MAAIgE,cAAc,GAAG,KAArB;;AACA,MAAIvH,YAAY,CAACoD,QAAb,CAAsBF,OAAtB,CAAJ,EAAoC;AAAA,QAEhCsE,eAFgC,GAU9BtE,OAV8B,CAEhCsE,eAFgC;AAAA,QAGhCC,2BAHgC,GAU9BvE,OAV8B,CAGhCuE,2BAHgC;AAAA,QAIhCC,eAJgC,GAU9BxE,OAV8B,CAIhCwE,eAJgC;AAAA,QAKhCC,wBALgC,GAU9BzE,OAV8B,CAKhCyE,wBALgC;AAAA,QAMhCC,QANgC,GAU9B1E,OAV8B,CAMhC0E,QANgC;AAAA,QAOhC3D,gBAPgC,GAU9Bf,OAV8B,CAOhCe,gBAPgC;AAAA,QAQhC4D,SARgC,GAU9B3E,OAV8B,CAQhC2E,SARgC;AAAA,QAShCC,aATgC,GAU9B5E,OAV8B,CAShC4E,aATgC;AAYlC,QAAIC,gBAAgB,GAAGF,SAAvB,CAZkC,CAclC;;AACA,QACEV,YAAY,CAACa,0BAAb,CAAwC;AACtC1E,YAAM,EAAEvD,OAAO,CAACwD,QADsB;AAEtCP,iBAAW,EAAXA,WAFsC;AAGtCC,YAAM,EAANA,MAHsC;AAItCuE,qBAAe,EAAfA,eAJsC;AAKtCC,iCAA2B,EAA3BA,2BALsC;AAMtCC,qBAAe,EAAfA,eANsC;AAOtCC,8BAAwB,EAAxBA,wBAPsC;AAQtCC,cAAQ,EAARA,QARsC;AAStC3D,sBAAgB,EAAhBA,gBATsC;AAUtC8D,sBAAgB,EAAhBA,gBAVsC;AAWtCD,mBAAa,EAAbA;AAXsC,KAAxC,CADF,EAcE;AACAP,oBAAc,GAAG,IAAjB;AACD;AACF;;AAED,MAAIA,cAAc,KAAK,KAAvB,EAA8B;AAC5BD,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BkE,kBAAnD,EAAuE;AACrEnF,UAAI,EAAJA,IADqE;AAErEnB,SAAG,EAAEG,OAAO,CAACwD;AAFwD,KAAvE,CAFF;AAOA,WAAO,IAAP;AACD,GA9C+D,CAgDhE;;;AACA,MAAItC,MAAM,GAAGqG,WAAW,CAAC9E,mBAAZ,CAAgCI,SAAhC,EAAb;AACA,MAAIG,YAAY,GAAGuE,WAAW,CAAC9E,mBAAZ,CAAgCkE,eAAhC,CAAgD9G,GAAhD,CAAnB,CAlDgE,CAoDhE;;AACA,MAAI,CAACmD,YAAL,EAAmB;AACjB,WAAO,IAAP;AACD;;AAED4E,0BAAwB,GAAGA,wBAAwB,IAAI1G,MAAM,CAAC0G,wBAAnC,IAA+D,KAA1F,CAzDgE,CA2DhE;;AACA,MAAIM,QAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCC,WAAvC,CAAf,CA5DgE,CA8DhE;;AACA,MAAIiF,QAAQ,IAAIA,QAAQ,CAACE,cAAT,CAAwB,OAAxB,CAAZ,IAAgDF,QAAQ,CAACG,KAAT,KAAmB,IAAvE,EAA6E;AAC3E,QAAId,WAAW,CAAClG,kBAAZ,KAAmCK,SAAvC,EAAkD;AAChD6F,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEE,MACEf,IADF,GAEE,mBAFF,GAGEiC,WAHF,GAIE,gEANJ;AASA,aAAO,IAAP;AACD;AACF,GA5E+D,CA8EhE;;;AACA,MAAI,CAACiF,QAAD,IAAaA,QAAQ,CAACI,MAAT,KAAoBtB,SAAS,CAACuB,cAA/C,EAA+D;AAC7DhB,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAAC2H,IADf,EAEEzH,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAAC2H,gBAAf,CAAgCC,oBAArD,EAA2E;AACzE1H,UAAI,EAAJA,IADyE;AAEzEiC,iBAAW,EAAXA,WAFyE;AAGzEpD,SAAG,EAAHA;AAHyE,KAA3E,CAFF;AASA,WAAO,IAAP;AACD;;AAED,MAAI,CAACqH,YAAY,CAACyB,YAAb,CAA0BT,QAA1B,CAAL,EAA0C;AACxCX,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2G,kBAAnD,EAAuE;AACrE5H,UAAI,EAAJA,IADqE;AAErEiC,iBAAW,EAAXA,WAFqE;AAGrE4F,kBAAY,EAAEX,QAAQ,CAACY,IAH8C;AAIrE5F,YAAM,EAANA,MAJqE;AAKrErD,SAAG,EAAHA;AALqE,KAAvE,CAFF;AAWA,WAAO,IAAP;AACD,GAzG+D,CA2GhE;;;AACA,MAAMkJ,MAAM,GAAG9B,YAAY,CAAC9F,YAAb,CACbD,MADa,EAEb8B,YAFa,EAGbkF,QAHa,EAIbjF,WAJa,EAKbC,MALa,EAMbuE,eANa,EAObC,2BAPa,EAQbC,eARa,EASbE,QATa,EAUb,IAVa,EAWb,KAXa,EAYbnG,SAZa,EAab7B,GAba,CAAf;;AAgBA,MAAII,YAAY,CAAC+I,SAAb,CAAuBD,MAAvB,CAAJ,EAAoC;AAClC,WAAOA,MAAM,CAAClF,IAAP,CAAY,UAASC,IAAT,EAAe;AAChC,aAAOmF,2BAA2B,CAChC1B,WADgC,EAEhCtE,WAFgC,EAGhCC,MAHgC,EAIhChC,MAJgC,EAKhCrB,GALgC,EAMhC+H,wBANgC,EAOhC5E,YAPgC,EAQhCkF,QARgC,EAShCF,gBATgC,EAUhCD,aAVgC,EAWhC7D,gBAXgC,EAYhCJ,IAZgC,CAAlC;AAcD,KAfM,CAAP;AAgBD;;AAED,SAAOmF,2BAA2B,CAChC1B,WADgC,EAEhCtE,WAFgC,EAGhCC,MAHgC,EAIhChC,MAJgC,EAKhCrB,GALgC,EAMhC+H,wBANgC,EAOhC5E,YAPgC,EAQhCkF,QARgC,EAShCF,gBATgC,EAUhCD,aAVgC,EAWhC7D,gBAXgC,EAYhC6E,MAZgC,CAAlC;AAcD;;AAED,SAASE,2BAAT,CACE1B,WADF,EAEEtE,WAFF,EAGEC,MAHF,EAIEhC,MAJF,EAKErB,GALF,EAME+H,wBANF,EAOE5E,YAPF,EAQEkF,QARF,EASEF,gBATF,EAUED,aAVF,EAWE7D,gBAXF,EAYE6E,MAZF,EAaE;AAAA,MACMG,WADN,GACwDH,MADxD,CACMG,WADN;AAAA,MACmBnF,aADnB,GACwDgF,MADxD,CACmBhF,aADnB;AAAA,MACkCoF,iBADlC,GACwDJ,MADxD,CACkCI,iBADlC,EAGA;;AACA,MAAI,CAAC/B,YAAY,CAACgC,YAAb,CAA0BrF,aAA1B,CAAL,EAA+C;AAC7CwD,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BiH,6BAAlD,EAAiF;AAC/ErI,UAAI,EAAJA,IAD+E;AAE/EkC,YAAM,EAANA,MAF+E;AAG/ED,iBAAW,EAAXA;AAH+E,KAAjF,CAFF;AASA,WAAO,IAAP;AACD,GAfD,CAiBA;;;AACA,MAAIkG,iBAAiB,IAAI,CAACvB,wBAA1B,EAAoD;AAClDL,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkH,6BAAlD,EAAiF;AAC/EtI,UAAI,EAAJA,IAD+E;AAE/EkC,YAAM,EAANA,MAF+E;AAG/ED,iBAAW,EAAXA,WAH+E;AAI/EpD,SAAG,EAAHA;AAJ+E,KAAjF,CAFF;AASA,WAAO;AAAEkE,mBAAa,EAAbA;AAAF,KAAP;AACD,GA7BD,CA+BA;;;AACA,MAAI7C,MAAM,CAACqI,WAAX,EAAwB;AACtB,QAAIC,UAAU,GAAGrC,cAAc,CAACsC,8BAAf,CACfzG,YADe,EAEfkF,QAAQ,CAACwB,EAFM,EAGfR,WAHe,EAIfhG,MAJe,EAKf8E,gBALe,EAMfD,aANe,CAAjB;AAQAR,eAAW,CAACf,gBAAZ,CAA6BmD,OAA7B,CAAqCH,UAArC;AACD,GAVD,MAUO,IAAIxG,YAAY,CAAC+B,kBAAjB,EAAqC;AAC1C,QAAIyE,WAAU,GAAGrC,cAAc,CAACyC,uBAAf,CACf5G,YADe,EAEfqE,SAAS,CAACwC,mBAFK,EAGftC,WAAW,CAAC/E,UAAZ,CAAuBsH,aAAvB,EAHe,EAIf9B,gBAJe,EAKfD,aALe,CAAjB;;AAOA,QAAIgC,OAAO,GAAG5C,cAAc,CAAC6C,uBAAf,CACZhH,YADY,EAEZE,MAFY,EAGZmE,SAAS,CAACwC,mBAHE,EAIZ3B,QAAQ,CAACwB,EAJG,EAKZR,WALY,CAAd;AAOA3B,eAAW,CAAChF,UAAZ,CAAuB0H,OAAvB,CAA+B/I,MAA/B,EAAuCsI,WAAvC,EAAmDjC,WAAnD,EAAgE;AAAEwC,aAAO,EAAPA,OAAF;AAAW7F,sBAAgB,EAAhBA;AAAX,KAAhE;AACD,GAhBM,MAgBA;AACL,QAAIsF,YAAU,GAAGrC,cAAc,CAAC+C,yBAAf,CACflH,YADe,EAEfkF,QAAQ,CAACwB,EAFM,EAGfR,WAHe,EAIfhG,MAJe,EAKfqE,WAAW,CAAC/E,UAAZ,CAAuBsH,aAAvB,EALe,EAMf9B,gBANe,EAOfD,aAPe,CAAjB;;AASAR,eAAW,CAAChF,UAAZ,CAAuB0H,OAAvB,CAA+B/I,MAA/B,EAAuCsI,YAAvC,EAAmDjC,WAAnD,EAAgE;AAAErD,sBAAgB,EAAhBA;AAAF,KAAhE;AACD;;AAED,MAAIhD,MAAM,CAACyB,iBAAX,EAA8B;AAC5B,WAAO;AAAEoB,mBAAa,EAAbA;AAAF,KAAP;AACD;;AAED,SAAOA,aAAP;AACD;;AACD+C,MAAM,CAACC,OAAP,GAAiBnD,QAAjB,C;;;;;;;;;;;ACzSA;;;;;;;;;;;;;;;AAgBA,IAAMoD,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AACA,IAAME,OAAO,GAAGF,mBAAO,CAAC,gDAAD,CAAvB;;AAEA,IAAMmH,YAAY,GAAGnH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMoH,YAAY,GAAGpH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMsH,YAAY,GAAGtH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMqK,WAAW,GAAGrK,mBAAO,CAAC,wDAAD,CAA3B;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMsK,UAAU,GAAGtK,mBAAO,CAAC,sDAAD,CAA1B;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AAEtC,IAAMC,IAAI,GAAGjB,YAAY,CAACsK,uBAA1B;AAEA;;;;;;;;;;;;;;;;;;;AAkBA,SAASxE,uBAAT,CAAiC0B,WAAjC,EAA8CtE,WAA9C,EAA2D0C,WAA3D,EAAwEzC,MAAxE,EAA8F;AAAA,MAAdC,OAAc,uEAAJ,EAAI;;AAC5F,MAAI;AACF,QAAMtD,GAAG,GAAGG,OAAO,CAAC4F,0BAApB;AACA,QAAI4B,cAAc,GAAG,KAArB;;AACA,QAAIvH,YAAY,CAACoD,QAAb,CAAsBF,OAAtB,CAAJ,EAAoC;AAAA,UAC5BsE,eAD4B,GACgDtE,OADhD,CAC5BsE,eAD4B;AAAA,UACXC,2BADW,GACgDvE,OADhD,CACXuE,2BADW;AAAA,UACkBC,eADlB,GACgDxE,OADhD,CACkBwE,eADlB;AAAA,UACmCE,QADnC,GACgD1E,OADhD,CACmC0E,QADnC,EAElC;;AACA,UACET,YAAY,CAACa,0BAAb,CAAwC;AACtC1E,cAAM,EAAEvD,OAAO,CAAC4F,0BADsB;AAEtC3C,mBAAW,EAAXA,WAFsC;AAGtC0C,mBAAW,EAAXA,WAHsC;AAItCzC,cAAM,EAANA,MAJsC;AAKtCuE,uBAAe,EAAfA,eALsC;AAMtCC,mCAA2B,EAA3BA,2BANsC;AAOtCC,uBAAe,EAAfA,eAPsC;AAQtCE,gBAAQ,EAARA;AARsC,OAAxC,CADF,EAWE;AACAL,sBAAc,GAAG,IAAjB;AACD;AACF;;AAED,QAAIA,cAAc,KAAK,KAAvB,EAA8B;AAC5BD,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BkE,kBAAnD,EAAuE;AACrEnF,YAAI,EAAJA,IADqE;AAErEnB,WAAG,EAAEG,OAAO,CAACqK;AAFwD,OAAvE,CAFF;AAOA,aAAO,IAAP;AACD,KA/BC,CAiCF;;;AACA,QAAInJ,MAAM,GAAGqG,WAAW,CAAC9E,mBAAZ,CAAgCI,SAAhC,EAAb;AACA,QAAIG,YAAY,GAAGuE,WAAW,CAAC9E,mBAAZ,CAAgCkE,eAAhC,CAAgD9G,GAAhD,CAAnB;AACAqB,UAAM,CAACoJ,OAAP,GAAiBzK,GAAjB,CApCE,CAsCF;;AACA,QAAI,CAACmD,YAAL,EAAmB;AACjB,aAAO,IAAP;AACD;;AAED,QAAIkF,QAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCC,WAAvC,CAAf;;AAEA,QAAI,CAACiF,QAAD,IAAaA,QAAQ,CAACI,MAAT,KAAoBtB,SAAS,CAACuB,cAA/C,EAA+D;AAC7DhB,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAAC2H,IADf,EAEEzH,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAAC2H,gBAAf,CAAgCC,oBAArD,EAA2E;AACzE1H,YAAI,EAAJA,IADyE;AAEzEiC,mBAAW,EAAXA,WAFyE;AAGzEpD,WAAG,EAAHA;AAHyE,OAA3E,CAFF;AASA,aAAO,IAAP;AACD;;AAED,QAAIqH,YAAY,CAACyB,YAAb,CAA0BT,QAA1B,CAAJ,EAAyC;AACvC;AACAX,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2G,kBAAnD,EAAuE;AACrE5H,YAAI,EAAJA,IADqE;AAErEiC,mBAAW,EAAXA,WAFqE;AAGrE4F,oBAAY,EAAEX,QAAQ,CAACY,IAH8C;AAIrE5F,cAAM,EAANA,MAJqE;AAKrErD,WAAG,EAAHA;AALqE,OAAvE,CAFF;AAWA,aAAO,IAAP;AACD;;AAED,QAAMkJ,MAAM,GAAG9B,YAAY,CAAC9F,YAAb,CACbD,MADa,EAEb8B,YAFa,EAGbkF,QAHa,EAIbjF,WAJa,EAKbC,MALa,EAMbuE,eANa,EAObC,2BAPa,EAQbC,eARa,EASbE,QATa,EAUb,KAVa,EAWb,KAXa,EAYbnG,SAZa,EAab7B,GAba,CAAf;;AAgBA,QAAII,YAAY,CAAC+I,SAAb,CAAuBD,MAAvB,CAAJ,EAAoC;AAClC,aAAOA,MAAM,CAAClF,IAAP,CAAY,UAASC,IAAT,EAAe;AAChC,eAAOyG,gCAAgC,CAAChD,WAAD,EAActE,WAAd,EAA2B0C,WAA3B,EAAwCzC,MAAxC,EAAgDgF,QAAhD,EAA0DpE,IAA1D,CAAvC;AACD,OAFM,CAAP;AAGD;;AAED,WAAOyG,gCAAgC,CAAChD,WAAD,EAActE,WAAd,EAA2B0C,WAA3B,EAAwCzC,MAAxC,EAAgDgF,QAAhD,EAA0Da,MAA1D,CAAvC;AACD,GAjGD,CAiGE,OAAOzE,GAAP,EAAY;AACZiD,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CAAuBjB,YAAY,CAACkB,KAApC,EAA2CuC,GAAG,CAACC,OAA/C;AAEA,WAAO,IAAP;AACD;AACF;;AAED,SAASgG,gCAAT,CAA0ChD,WAA1C,EAAuDtE,WAAvD,EAAoE0C,WAApE,EAAiFzC,MAAjF,EAAyFgF,QAAzF,EAAmGa,MAAnG,EAA2G;AACzG,MAAIyB,QAAJ;AADyG,MAEnGC,SAFmG,GAEtE1B,MAFsE,CAEnG0B,SAFmG;AAAA,MAExF1G,aAFwF,GAEtEgF,MAFsE,CAExFhF,aAFwF;;AAIzG,MAAI,CAACA,aAAL,EAAoB;AAClBwD,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BsI,cAAlD,EAAkE;AAChE1J,UAAI,EAAJA,IADgE;AAEhEiC,iBAAW,EAAXA,WAFgE;AAGhEC,YAAM,EAANA,MAHgE;AAIhEoF,YAAM,EAAE;AAJwD,KAAlE,CAFF;AAUA,WAAO,IAAP;AACD;;AAED,MAAIpB,YAAY,CAACyD,wBAAb,CAAsCzC,QAAtC,CAAJ,EAAqD;AACnDsC,YAAQ,GAAGL,WAAW,CAACS,qBAAZ,CAAkC1C,QAAlC,EAA4CvC,WAA5C,CAAX;AACD,GAFD,MAEO,IAAIuB,YAAY,CAAC2D,qBAAb,CAAmC3C,QAAnC,CAAJ,EAAkD;AACvDsC,YAAQ,GAAGL,WAAW,CAACW,4BAAZ,CAAyC5C,QAAzC,EAAmDuC,SAAnD,EAA8D9E,WAA9D,CAAX;;AAEA,QAAIyE,UAAU,CAACW,aAAX,CAAyBP,QAAzB,KAAsCC,SAAS,CAAChF,gBAApD,EAAsE;AACpE8B,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4I,sBAAlD,EAA0E;AACxEhK,YAAI,EAAJA,IADwE;AAExE2E,mBAAW,EAAXA,WAFwE;AAGxE1C,mBAAW,EAAEiF,QAAQ,CAAC+C,GAHkD;AAIxEC,qBAAa,EAAEV,QAAQ,CAACW,KAJgD;AAKxEjI,cAAM,EAANA;AALwE,OAA1E,CAFF;AAUD,KAXD,MAWO,IAAIkH,UAAU,CAACW,aAAX,CAAyBP,QAAzB,KAAsC,CAACC,SAAS,CAAChF,gBAArD,EAAuE;AAC5E8B,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BgJ,8BAAlD,EAAkF;AAChFpK,YAAI,EAAJA,IADgF;AAEhF2E,mBAAW,EAAXA,WAFgF;AAGhF5B,qBAAa,EAAbA;AAHgF,OAAlF,CAFF;AAQD;AACF;;AAED,MAAI,CAACqG,UAAU,CAACW,aAAX,CAAyBP,QAAzB,CAAL,EAAyC;AACvCjD,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BoJ,kBAAnD,EAAuE;AACrErK,UAAI,EAAJA,IADqE;AAErE2E,iBAAW,EAAXA,WAFqE;AAGrEzC,YAAM,EAANA;AAHqE,KAAvE,CAFF;AASA,WAAO,IAAP;AACD;;AAED,MAAIgI,aAAa,GAAGV,QAAQ,CAACW,KAA7B;AACA,MAAIrF,eAAe,GAAGqE,WAAW,CAACmB,wBAAZ,CAAqCJ,aAArC,EAAoDV,QAAQ,CAAC1B,IAA7D,CAAtB;AAEA,SAAOhD,eAAP;AACD;;AAEDgB,MAAM,CAACC,OAAP,GAAiBlB,uBAAjB,C;;;;;;;;;;;AC5NA;;;;;;;;;;;;;;;AAgBA,IAAMmB,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AACA,IAAME,OAAO,GAAGF,mBAAO,CAAC,gDAAD,CAAvB;;AAEA,IAAMmH,YAAY,GAAGnH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMoH,YAAY,GAAGpH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMsH,YAAY,GAAGtH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AAEtC,IAAMC,IAAI,GAAGjB,YAAY,CAACwL,YAA1B;AAEA;;;;;;;;;;;;;;;;AAeA,SAASpK,YAAT,CAAsBoG,WAAtB,EAAmCtE,WAAnC,EAAgDC,MAAhD,EAAsE;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AACpE,MAAMtD,GAAG,GAAGG,OAAO,CAACwE,kBAApB;AACA,MAAIgD,cAAc,GAAG,KAArB;;AACA,MAAIvH,YAAY,CAACoD,QAAb,CAAsBF,OAAtB,CAAJ,EAAoC;AAAA,QAC5BsE,eAD4B,GACgDtE,OADhD,CAC5BsE,eAD4B;AAAA,QACXC,2BADW,GACgDvE,OADhD,CACXuE,2BADW;AAAA,QACkBC,eADlB,GACgDxE,OADhD,CACkBwE,eADlB;AAAA,QACmCE,QADnC,GACgD1E,OADhD,CACmC0E,QADnC,EAElC;;AACA,QACET,YAAY,CAACa,0BAAb,CAAwC;AACtC1E,YAAM,EAAEvD,OAAO,CAACwE,kBADsB;AAEtCvB,iBAAW,EAAXA,WAFsC;AAGtCC,YAAM,EAANA,MAHsC;AAItCuE,qBAAe,EAAfA,eAJsC;AAKtCC,iCAA2B,EAA3BA,2BALsC;AAMtCC,qBAAe,EAAfA,eANsC;AAOtCE,cAAQ,EAARA;AAPsC,KAAxC,CADF,EAUE;AACAL,oBAAc,GAAG,IAAjB;AACD;AACF;;AAED,MAAIA,cAAc,KAAK,KAAvB,EAA8B;AAC5BD,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BkE,kBAAnD,EAAuE;AACrEnF,UAAI,EAAJA,IADqE;AAErEnB,SAAG,EAAEG,OAAO,CAACwE;AAFwD,KAAvE,CAFF;AAOA,WAAO,IAAP;AACD,GA9BmE,CAgCpE;;;AACA,MAAItD,MAAM,GAAGqG,WAAW,CAAC9E,mBAAZ,CAAgCI,SAAhC,EAAb;AACA,MAAIG,YAAY,GAAGuE,WAAW,CAAC9E,mBAAZ,CAAgCkE,eAAhC,CAAgD9G,GAAhD,CAAnB;AACAqB,QAAM,CAACoJ,OAAP,GAAiBzK,GAAjB,CAnCoE,CAqCpE;;AACA,MAAI,CAACmD,YAAL,EAAmB;AACjB,WAAO,IAAP;AACD,GAxCmE,CA0CpE;;;AACA,MAAIkF,QAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCC,WAAvC,CAAf,CA3CoE,CA6CpE;;AACA,MAAI,CAACiF,QAAD,IAAaA,QAAQ,CAACI,MAAT,KAAoBtB,SAAS,CAACuB,cAA/C,EAA+D;AAC7DhB,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAAC2H,IADf,EAEEzH,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAAC2H,gBAAf,CAAgCC,oBAArD,EAA2E;AACzE1H,UAAI,EAAJA,IADyE;AAEzEiC,iBAAW,EAAEA,WAF4D;AAGzEpD,SAAG,EAAHA;AAHyE,KAA3E,CAFF;AASA,WAAO,IAAP;AACD;;AAED,MAAIqH,YAAY,CAACyD,wBAAb,CAAsCzC,QAAtC,CAAJ,EAAqD;AACnDX,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2G,kBAAnD,EAAuE;AACrE5H,UAAI,EAAJA,IADqE;AAErEiC,iBAAW,EAAXA,WAFqE;AAGrE4F,kBAAY,EAAEX,QAAQ,CAACY,IAH8C;AAIrE5F,YAAM,EAANA,MAJqE;AAKrErD,SAAG,EAAHA;AALqE,KAAvE,CAFF;AAWA,WAAO,IAAP;AACD;;AAED,MAAMkJ,MAAM,GAAG9B,YAAY,CAAC9F,YAAb,CACbD,MADa,EAEb8B,YAFa,EAGbkF,QAHa,EAIbjF,WAJa,EAKbC,MALa,EAMbuE,eANa,EAObC,2BAPa,EAQbC,eARa,EASbE,QATa,EAUb,KAVa,EAWb,KAXa,EAYbnG,SAZa,EAab7B,GAba,CAAf;;AAgBA,MAAII,YAAY,CAAC+I,SAAb,CAAuBD,MAAvB,CAAJ,EAAoC;AAClC,WAAOA,MAAM,CAAClF,IAAP,CAAY,UAASC,IAAT,EAAe;AAChC,aAAOA,IAAP;AACD,KAFM,CAAP;AAGD;;AAED,MAAI,CAACiF,MAAM,CAAChF,aAAZ,EAA2B;AACzB,WAAO,IAAP;AACD;;AAED,SAAOgF,MAAM,CAAChF,aAAd;AACD;;AAED+C,MAAM,CAACC,OAAP,GAAiB5F,YAAjB,C;;;;;;;;;;;ACpJA;;;;;;;;;;;;;;;AAgBA,IAAMyC,QAAQ,GAAG9D,mBAAO,CAAC,yCAAD,CAAxB;;AACA,IAAMqB,YAAY,GAAGrB,mBAAO,CAAC,iDAAD,CAA5B;;AACA,IAAM8E,KAAK,GAAG9E,mBAAO,CAAC,mCAAD,CAArB;;AACA,IAAM2F,gBAAgB,GAAG3F,mBAAO,CAAC,yDAAD,CAAhC;;AACA,IAAM+F,uBAAuB,GAAG/F,mBAAO,CAAC,uEAAD,CAAvC;;AACA,IAAMuG,IAAI,GAAGvG,mBAAO,CAAC,iCAAD,CAApB;;AAEAgH,MAAM,CAACC,OAAP,GAAiB;AACfnD,UAAQ,EAARA,QADe;AAEfzC,cAAY,EAAZA,YAFe;AAGfyD,OAAK,EAALA,KAHe;AAIfa,kBAAgB,EAAhBA,gBAJe;AAKfI,yBAAuB,EAAvBA,uBALe;AAMfQ,MAAI,EAAJA;AANe,CAAjB,C;;;;;;;;;;;ACvBA;;;;;;;;;;;;;;;AAgBA,IAAMW,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AACA,IAAME,OAAO,GAAGF,mBAAO,CAAC,gDAAD,CAAvB;;AAEA,IAAMmH,YAAY,GAAGnH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMoH,YAAY,GAAGpH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMqH,cAAc,GAAGrH,mBAAO,CAAC,8DAAD,CAA9B;;AACA,IAAMsH,YAAY,GAAGtH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMuH,SAAS,GAAGvH,mBAAO,CAAC,oDAAD,CAAzB;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AAEtC,IAAMC,IAAI,GAAGjB,YAAY,CAACyL,gBAA1B;AAEA;;;;;;;;;;;;;;;AAcA,SAAS/F,gBAAT,CAA0B8B,WAA1B,EAAuCtE,WAAvC,EAAoDC,MAApD,EAA0E;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AACxE,MAAMtD,GAAG,GAAGG,OAAO,CAACwF,kBAApB;AACA,MAAIgC,cAAc,GAAG,KAArB;;AACA,MAAIvH,YAAY,CAACoD,QAAb,CAAsBF,OAAtB,CAAJ,EAAoC;AAAA,QAEhCsE,eAFgC,GAU9BtE,OAV8B,CAEhCsE,eAFgC;AAAA,QAGhCC,2BAHgC,GAU9BvE,OAV8B,CAGhCuE,2BAHgC;AAAA,QAIhCC,eAJgC,GAU9BxE,OAV8B,CAIhCwE,eAJgC;AAAA,QAKhCC,wBALgC,GAU9BzE,OAV8B,CAKhCyE,wBALgC;AAAA,QAMhCC,QANgC,GAU9B1E,OAV8B,CAMhC0E,QANgC;AAAA,QAOhC3D,gBAPgC,GAU9Bf,OAV8B,CAOhCe,gBAPgC;AAAA,QAQhC4D,SARgC,GAU9B3E,OAV8B,CAQhC2E,SARgC;AAAA,QAShCC,aATgC,GAU9B5E,OAV8B,CAShC4E,aATgC;AAWlC,QAAIC,gBAAgB,GAAGF,SAAvB,CAXkC,CAYlC;;AACA,QACEV,YAAY,CAACa,0BAAb,CAAwC;AACtC1E,YAAM,EAAEvD,OAAO,CAACwF,kBADsB;AAEtCvC,iBAAW,EAAXA,WAFsC;AAGtCC,YAAM,EAANA,MAHsC;AAItCuE,qBAAe,EAAfA,eAJsC;AAKtCC,iCAA2B,EAA3BA,2BALsC;AAMtCC,qBAAe,EAAfA,eANsC;AAOtCC,8BAAwB,EAAxBA,wBAPsC;AAQtCC,cAAQ,EAARA,QARsC;AAStC3D,sBAAgB,EAAhBA,gBATsC;AAUtC8D,sBAAgB,EAAhBA,gBAVsC;AAWtCD,mBAAa,EAAbA;AAXsC,KAAxC,CADF,EAcE;AACAP,oBAAc,GAAG,IAAjB;AACD;AACF;;AAED,MAAIA,cAAc,KAAK,KAAvB,EAA8B;AAC5BD,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BkE,kBAAnD,EAAuE;AACrEnF,UAAI,EAAJA,IADqE;AAErEnB,SAAG,EAAEG,OAAO,CAACyF;AAFwD,KAAvE,CAFF;AAOA,WAAO,IAAP;AACD,GA5CuE,CA8CxE;;;AACA,MAAIvE,MAAM,GAAGqG,WAAW,CAAC9E,mBAAZ,CAAgCI,SAAhC,EAAb;AACA,MAAIG,YAAY,GAAGuE,WAAW,CAAC9E,mBAAZ,CAAgCkE,eAAhC,CAAgD9G,GAAhD,CAAnB,CAhDwE,CAkDxE;;AACA,MAAI,CAACmD,YAAL,EAAmB;AACjB,WAAO,IAAP;AACD;;AAED4E,0BAAwB,GAAGA,wBAAwB,IAAI1G,MAAM,CAAC0G,wBAAnC,IAA+D,KAA1F,CAvDwE,CAyDxE;;AACA,MAAIM,QAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCC,WAAvC,CAAf,CA1DwE,CA4DxE;;AACA,MAAIiF,QAAQ,IAAIA,QAAQ,CAACE,cAAT,CAAwB,OAAxB,CAAZ,IAAgDF,QAAQ,CAACG,KAAT,KAAmB,IAAvE,EAA6E;AAC3E,QAAId,WAAW,CAAClG,kBAAZ,KAAmCK,SAAvC,EAAkD;AAChD6F,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEE,MACEf,IADF,GAEE,mBAFF,GAGEiC,WAHF,GAIE,gEANJ;AASA,aAAO,IAAP;AACD;AACF;;AAED,MAAI,CAACiF,QAAD,IAAaA,QAAQ,CAACI,MAAT,KAAoBtB,SAAS,CAACuB,cAA/C,EAA+D;AAC7DhB,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAAC2H,IADf,EAEEzH,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAAC2H,gBAAf,CAAgCC,oBAArD,EAA2E;AACzE1H,UAAI,EAAJA,IADyE;AAEzEiC,iBAAW,EAAXA,WAFyE;AAGzEpD,SAAG,EAAHA;AAHyE,KAA3E,CAFF;AASA,WAAO,IAAP;AACD;;AAED,MAAIqH,YAAY,CAACyB,YAAb,CAA0BT,QAA1B,CAAJ,EAAyC;AACvC;AACAX,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2G,kBAAnD,EAAuE;AACrE5H,UAAI,EAAJA,IADqE;AAErEiC,iBAAW,EAAXA,WAFqE;AAGrE4F,kBAAY,EAAEX,QAAQ,CAACY,IAH8C;AAIrE5F,YAAM,EAANA,MAJqE;AAKrErD,SAAG,EAAHA;AALqE,KAAvE,CAFF;AAWA,WAAO,IAAP;AACD;;AAED,MAAMkJ,MAAM,GAAG9B,YAAY,CAAC9F,YAAb,CACbD,MADa,EAEb8B,YAFa,EAGbkF,QAHa,EAIbjF,WAJa,EAKbC,MALa,EAMbuE,eANa,EAObC,2BAPa,EAQbC,eARa,EASbE,QATa,EAUb,IAVa,EAWb,KAXa,EAYbnG,SAZa,EAab7B,GAba,CAAf,CAzGwE,CAyHxE;;AACA,MAAII,YAAY,CAAC+I,SAAb,CAAuBD,MAAvB,CAAJ,EAAoC;AAClC,WAAOA,MAAM,CAAClF,IAAP,CAAY,UAASC,IAAT,EAAe;AAChC,aAAO2H,gCAAgC,CACrClE,WADqC,EAErCtE,WAFqC,EAGrCC,MAHqC,EAIrChC,MAJqC,EAKrCrB,GALqC,EAMrC+H,wBANqC,EAOrC5E,YAPqC,EAQrCkF,QARqC,EASrChE,gBATqC,EAUrC8D,gBAVqC,EAWrCD,aAXqC,EAYrCjE,IAZqC,CAAvC;AAcD,KAfM,CAAP;AAgBD;;AAED,SAAO2H,gCAAgC,CACrClE,WADqC,EAErCtE,WAFqC,EAGrCC,MAHqC,EAIrChC,MAJqC,EAKrCrB,GALqC,EAMrC+H,wBANqC,EAOrC5E,YAPqC,EAQrCkF,QARqC,EASrChE,gBATqC,EAUrC8D,gBAVqC,EAWrCD,aAXqC,EAYrCgB,MAZqC,CAAvC;AAcD;;AAED,SAAS0C,gCAAT,CACElE,WADF,EAEEtE,WAFF,EAGEC,MAHF,EAIEhC,MAJF,EAKErB,GALF,EAME+H,wBANF,EAOE5E,YAPF,EAQEkF,QARF,EASEhE,gBATF,EAUE8D,gBAVF,EAWED,aAXF,EAYEgB,MAZF,EAaE;AAAA,MACM0B,SADN,GACmE1B,MADnE,CACM0B,SADN;AAAA,MACiBvB,WADjB,GACmEH,MADnE,CACiBG,WADjB;AAAA,MAC8BnF,aAD9B,GACmEgF,MADnE,CAC8BhF,aAD9B;AAAA,MAC6CoF,iBAD7C,GACmEJ,MADnE,CAC6CI,iBAD7C;AAGA,MAAI1D,gBAAgB,GAAG,KAAvB;;AAEA,MAAI1B,aAAJ,EAAmB;AACjB0B,oBAAgB,GAAGyB,YAAY,CAACyD,wBAAb,CAAsCzC,QAAtC,KAAmDuC,SAAS,CAAChF,gBAAhF;;AAEA,QAAI0D,iBAAiB,IAAI,CAACvB,wBAA1B,EAAoD;AAClDL,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkH,6BAAlD,EAAiF;AAC/EtI,YAAI,EAAJA,IAD+E;AAE/EkC,cAAM,EAANA,MAF+E;AAG/ED,mBAAW,EAAXA,WAH+E;AAI/EpD,WAAG,EAAHA;AAJ+E,OAAjF,CAFF;AASD,KAVD,MAUO;AACL;AACA,UAAIqB,MAAM,CAACqI,WAAX,EAAwB;AACtB,YAAIC,UAAU,GAAGrC,cAAc,CAACsC,8BAAf,CACfzG,YADe,EAEfkF,QAAQ,CAACwB,EAFM,EAGfR,WAHe,EAIfhG,MAJe,EAKf8E,gBALe,EAMfD,aANe,CAAjB;AAQAR,mBAAW,CAACf,gBAAZ,CAA6BmD,OAA7B,CAAqCH,UAArC;AACD,OAVD,MAUO,IAAIxG,YAAY,CAAC+B,kBAAjB,EAAqC;AAC1C,YAAIyE,WAAU,GAAGrC,cAAc,CAACyC,uBAAf,CACf5G,YADe,EAEfqE,SAAS,CAACwC,mBAFK,EAGftC,WAAW,CAAC/E,UAAZ,CAAuBsH,aAAvB,EAHe,EAIf9B,gBAJe,EAKfD,aALe,CAAjB;;AAOA,YAAIgC,OAAO,GAAG5C,cAAc,CAAC6C,uBAAf,CACZhH,YADY,EAEZE,MAFY,EAGZmE,SAAS,CAACwC,mBAHE,EAIZ3B,QAAQ,CAACwB,EAJG,EAKZR,WALY,CAAd;AAOA3B,mBAAW,CAAChF,UAAZ,CAAuB0H,OAAvB,CAA+B/I,MAA/B,EAAuCsI,WAAvC,EAAmDjC,WAAnD,EAAgE;AAAEwC,iBAAO,EAAPA,OAAF;AAAW7F,0BAAgB,EAAhBA;AAAX,SAAhE;AACD,OAhBM,MAgBA;AACL,YAAIsF,YAAU,GAAGrC,cAAc,CAAC+C,yBAAf,CACflH,YADe,EAEfkF,QAAQ,CAACwB,EAFM,EAGfR,WAHe,EAIfhG,MAJe,EAKfqE,WAAW,CAAC/E,UAAZ,CAAuBsH,aAAvB,EALe,EAMf9B,gBANe,EAOfD,aAPe,CAAjB;;AASAR,mBAAW,CAAChF,UAAZ,CAAuB0H,OAAvB,CAA+B/I,MAA/B,EAAuCsI,YAAvC,EAAmDjC,WAAnD,EAAgE;AAAErD,0BAAgB,EAAhBA;AAAF,SAAhE;AACD;;AAEDqD,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BsI,cAAlD,EAAkE;AAChE1J,YAAI,EAAJA,IADgE;AAEhEiC,mBAAW,EAAXA,WAFgE;AAGhEC,cAAM,EAANA,MAHgE;AAIhEoF,cAAM,EAAE7C,gBAAgB,GAAG,SAAH,GAAe;AAJyB,OAAlE,CAFF;;AAUA,UAAIvE,MAAM,CAACyB,iBAAX,EAA8B;AAC5B,eAAO;AAAE8C,0BAAgB,EAAhBA;AAAF,SAAP;AACD;;AAED,aAAOA,gBAAP;AACD;AACF;;AAED8B,aAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BsI,cAAlD,EAAkE;AAChE1J,QAAI,EAAJA,IADgE;AAEhEiC,eAAW,EAAXA,WAFgE;AAGhEC,UAAM,EAANA,MAHgE;AAIhEoF,UAAM,EAAE7C,gBAAgB,GAAG,SAAH,GAAe;AAJyB,GAAlE,CAFF;;AAUA,MAAI0D,iBAAiB,IAAIjI,MAAM,CAACyB,iBAAhC,EAAmD;AACjD,WAAO;AAAE8C,sBAAgB,EAAhBA;AAAF,KAAP;AACD;;AAED,SAAO;AAAEA,oBAAgB,EAAhBA;AAAF,GAAP;AACD;;AAEDqB,MAAM,CAACC,OAAP,GAAiBtB,gBAAjB,C;;;;;;;;;;;ACtTA;;;;;;;;;;;;;;;AAgBA,IAAMzF,OAAO,GAAGF,mBAAO,CAAC,gDAAD,CAAvB;;AACA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMuH,SAAS,GAAGvH,mBAAO,CAAC,oDAAD,CAAzB;;AACA,IAAMsH,YAAY,GAAGtH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMqH,cAAc,GAAGrH,mBAAO,CAAC,8DAAD,CAA9B;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;;AAEA,IAAIY,qBAAJ;;AAEA,IAAI,KAAJ,EAAwC,EAEvC;;IAEOG,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AAEtC,IAAMC,IAAI,GAAGjB,YAAY,CAAC2L,IAA1B;AAEA;;;;;;;;;;;;;;AAaA,SAASrF,IAAT,CAAckB,WAAd,EAA2BxB,MAA3B,EAAmCC,QAAnC,EAA6C9C,MAA7C,EAAqD+C,kBAArD,EAAoG;AAAA,iFAAJ,EAAI;AAAA,MAAzB/B,gBAAyB,QAAzBA,gBAAyB;;AAClG,MAAMrE,GAAG,GAAGG,OAAO,CAACoG,IAApB;;AAEA,MACE,CAACgB,YAAY,CAACa,0BAAb,CAAwC;AACvC1E,UAAM,EAAEvD,OAAO,CAACoG,IADuB;AAEvCL,UAAM,EAANA,MAFuC;AAGvCC,YAAQ,EAARA,QAHuC;AAIvC9C,UAAM,EAANA,MAJuC;AAKvC+C,sBAAkB,EAAlBA,kBALuC;AAMvC/B,oBAAgB,EAAhBA;AANuC,GAAxC,CADH,EASE;AACAqD,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B0J,mBAAnD,EAAwE;AACtE3K,UAAI,EAAJA,IADsE;AAEtEuC,YAAM,EAAE1D;AAF8D,KAAxE,CAFF;AAOA,WAAO,KAAP;AACD;;AAED,MAAIkG,MAAM,CAACT,MAAP,GAAgB,GAApB,EAAyB;AACvBiC,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2J,uBAAnD,EAA4E;AAC1E5K,UAAI,EAAJA,IAD0E;AAE1E+E,YAAM,EAANA,MAF0E;AAG1E7C,YAAM,EAANA;AAH0E,KAA5E,CAFF;AAQA,WAAO,KAAP;AACD;;AAED,MAAI8C,QAAQ,CAACV,MAAT,GAAkB,GAAtB,EAA2B;AACzBiC,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B4J,yBAAnD,EAA8E;AAC5E7K,UAAI,EAAJA,IAD4E;AAE5E+E,YAAM,EAANA,MAF4E;AAG5E7C,YAAM,EAANA,MAH4E;AAI5E8C,cAAQ,EAARA;AAJ4E,KAA9E,CAFF;AASA,WAAO,KAAP;AACD;;AAED,MAAID,MAAM,KAAK,GAAX,IAAkBC,QAAQ,KAAK,GAA/B,KAAuC,CAACC,kBAAD,IAAuB6F,MAAM,CAACC,IAAP,CAAY9F,kBAAZ,EAAgCX,MAAhC,KAA2C,CAAzG,CAAJ,EAAiH;AAC/GiC,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B0J,mBAAnD,EAAwE;AACtE3K,UAAI,EAAJA,IADsE;AAEtEuC,YAAM,EAAE1D;AAF8D,KAAxE,CAFF;AAOA,WAAO,KAAP;AACD;;AAED,MAAIkG,MAAM,KAAK,GAAX,IAAkBC,QAAQ,KAAK,GAAnC,EAAwC;AACtCC,sBAAkB,CAACF,MAAD,CAAlB,GAA6BC,QAA7B;AACD,GA7DiG,CA+DlG;;;AACA,MAAI9E,MAAM,GAAGqG,WAAW,CAAC9E,mBAAZ,CAAgCI,SAAhC,EAAb;AACA,MAAIG,YAAY,GAAGuE,WAAW,CAAC9E,mBAAZ,CAAgCkE,eAAhC,CAAgD9G,GAAhD,CAAnB,CAjEkG,CAmElG;;AACA,MAAI,CAACmD,YAAL,EAAmB;AACjB,WAAO,KAAP;AACD;;AAED,MAAI+F,MAAM,GAAG,EAAb;;AACA,MAAI7H,MAAM,CAACqI,WAAX,EAAwB;AACtBuC,UAAM,CAACC,IAAP,CAAY9F,kBAAZ,EAAgC+F,OAAhC,CAAwC,UAAAf,GAAG,EAAI;AAC7C,UAAMjF,QAAQ,GAAG/F,YAAY,CAACgM,QAAb,CAAsBhG,kBAAkB,CAACgF,GAAD,CAAxC,IACbhF,kBAAkB,CAACgF,GAAD,CADL,GAEbiB,IAAI,CAACC,SAAL,CAAelG,kBAAkB,CAACgF,GAAD,CAAjC,CAFJ;AAGA,UAAIzB,UAAU,GAAGrC,cAAc,CAACiF,yBAAf,CAAyCpJ,YAAzC,EAAuDiI,GAAvD,EAA4DjF,QAA5D,EAAsE9C,MAAtE,CAAjB;AACAqE,iBAAW,CAACf,gBAAZ,CAA6BmD,OAA7B,CAAqCH,UAArC;AAEAT,YAAM,CAACkC,GAAD,CAAN,GAAc,IAAd;AACD,KARD;AASD,GAVD,MAUO,IAAIjI,YAAY,CAAC+B,kBAAjB,EAAqC;AAC1C,QAAIyE,UAAU,GAAGrC,cAAc,CAACyC,uBAAf,CAAuC5G,YAAvC,EAAqDqE,SAAS,CAACgF,qBAA/D,CAAjB;AACA,QAAItC,OAAO,GAAG5C,cAAc,CAACmF,kBAAf,CACZtJ,YADY,EAEZE,MAFY,EAGZmE,SAAS,CAACgF,qBAHE,EAIZpG,kBAJY,CAAd;AAMAsB,eAAW,CAAChF,UAAZ,CAAuB0H,OAAvB,CAA+B/I,MAA/B,EAAuCsI,UAAvC,EAAmDjC,WAAnD,EAAgE;AAAEwC,aAAO,EAAPA,OAAF;AAAW7F,sBAAgB,EAAhBA;AAAX,KAAhE;AAEA6E,UAAM,CAACwD,OAAP,GAAiB,IAAjB;AACD,GAXM,MAWA;AACL,QAAMC,MAAM,GAAG,EAAf;AACA,QAAMC,mBAAmB,GAAGX,MAAM,CAACC,IAAP,CAAY9F,kBAAZ,CAA5B;AAEAwG,uBAAmB,CAACT,OAApB,CAA4B,UAAAf,GAAG,EAAI;AACjC,UAAIzB,UAAJ;AACA,UAAMxD,QAAQ,GAAG/F,YAAY,CAACgM,QAAb,CAAsBhG,kBAAkB,CAACgF,GAAD,CAAxC,IACbhF,kBAAkB,CAACgF,GAAD,CADL,GAEbiB,IAAI,CAACC,SAAL,CAAelG,kBAAkB,CAACgF,GAAD,CAAjC,CAFJ;;AAIA,UAAI,IAAJ,EAAwC;AACtCzB,kBAAU,GAAGrC,cAAc,CAACuF,oBAAf,CAAoC1J,YAApC,EAAkDiI,GAAlD,EAAuDjF,QAAvD,EAAiE9C,MAAjE,CAAb;AACAqE,mBAAW,CAAChF,UAAZ,CAAuB0H,OAAvB,CAA+B/I,MAA/B,EAAuCsI,UAAvC,EAAmDjC,WAAnD,EAAgE;AAAErD,0BAAgB,EAAhBA;AAAF,SAAhE;AACD,OAHD,MAGO,EAIN;;AAEDsI,YAAM,CAACnG,IAAP,CAAYmD,UAAZ;AACAT,YAAM,CAACkC,GAAD,CAAN,GAAc,IAAd;AACD,KAjBD;;AAmBA,QAAI,KAAJ,EAAwC,EAqBvC;AACF;;AAED,MAAI/J,MAAM,CAACyB,iBAAX,EAA8B;AAC5B,WAAOmJ,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkB5D,MAAlB,EAA0B;AAAEpG,uBAAiB,EAAEzB,MAAM,CAACyB;AAA5B,KAA1B,CAAP;AACD;;AAED,SAAOoG,MAAP;AACD;;AAEDjC,MAAM,CAACC,OAAP,GAAiBV,IAAjB,C;;;;;;;;;;;;;ACnMA;;;;;;;;;;;;;;;AAgBA,IAAMW,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AACA,IAAM8M,YAAY,GAAG9M,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAME,OAAO,GAAGF,mBAAO,CAAC,gDAAD,CAAvB;;AAEA,IAAMmH,YAAY,GAAGnH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMoH,YAAY,GAAGpH,mBAAO,CAAC,0DAAD,CAA5B;;eACyBA,mBAAO,CAAC,sDAAD,C;IAAxBqF,Y,YAAAA,Y;;AACR,IAAMgC,cAAc,GAAGrH,mBAAO,CAAC,8DAAD,CAA9B;;AACA,IAAMsH,YAAY,GAAGtH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AAEA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AAEtC,IAAMC,IAAI,GAAGjB,YAAY,CAAC8M,KAA1B;AACA,IAAMC,0BAA0B,GAAGF,YAAY,CAACG,GAAhD;AACA,IAAMC,yBAAyB,GAAG,OAAlC;AACA,IAAMnN,GAAG,GAAGG,OAAO,CAAC2E,KAApB;AAEA,IAAIjE,qBAAJ;;AACA,IAAI,KAAJ,EAAwC,EAEvC;AAED;;;;;;;;;;;;;;;;AAcA,SAASkE,KAAT,CAAe2C,WAAf,EAA4BtE,WAA5B,EAAyCC,MAAzC,EAAiDwB,cAAjD,EAA+E;AAAA,MAAdvB,OAAc,uEAAJ,EAAI;AAC7E,MAAIqE,cAAc,GAAG,KAArB;;AACA,MAAIvH,YAAY,CAACoD,QAAb,CAAsBF,OAAtB,CAAJ,EAAoC;AAAA,QAEhC8J,YAFgC,GAa9B9J,OAb8B,CAEhC8J,YAFgC;AAAA,QAGhCxF,eAHgC,GAa9BtE,OAb8B,CAGhCsE,eAHgC;AAAA,QAIhCC,2BAJgC,GAa9BvE,OAb8B,CAIhCuE,2BAJgC;AAAA,QAKhCC,eALgC,GAa9BxE,OAb8B,CAKhCwE,eALgC;AAAA,QAMhCuF,eANgC,GAa9B/J,OAb8B,CAMhC+J,eANgC;AAAA,QAOhCtF,wBAPgC,GAa9BzE,OAb8B,CAOhCyE,wBAPgC;AAAA,QAQhCC,QARgC,GAa9B1E,OAb8B,CAQhC0E,QARgC;AAAA,QAShC3D,gBATgC,GAa9Bf,OAb8B,CAShCe,gBATgC;AAAA,QAUhCiJ,eAVgC,GAa9BhK,OAb8B,CAUhCgK,eAVgC;AAAA,QAWhCrF,SAXgC,GAa9B3E,OAb8B,CAWhC2E,SAXgC;AAAA,QAYhCC,aAZgC,GAa9B5E,OAb8B,CAYhC4E,aAZgC;AAclC,QAAIC,gBAAgB,GAAGF,SAAvB,CAdkC,CAelC;;AACA,QACEV,YAAY,CAACa,0BAAb,CAAwC;AACtC1E,YAAM,EAAEvD,OAAO,CAAC2E,KADsB;AAEtC1B,iBAAW,EAAXA,WAFsC;AAGtCC,YAAM,EAANA,MAHsC;AAItCwB,oBAAc,EAAdA,cAJsC;AAKtC+C,qBAAe,EAAfA,eALsC;AAMtCC,iCAA2B,EAA3BA,2BANsC;AAOtCC,qBAAe,EAAfA,eAPsC;AAQtCuF,qBAAe,EAAfA,eARsC;AAStCtF,8BAAwB,EAAxBA,wBATsC;AAUtCC,cAAQ,EAARA,QAVsC;AAWtC3D,sBAAgB,EAAhBA,gBAXsC;AAYtCiJ,qBAAe,EAAfA,eAZsC;AAatCnF,sBAAgB,EAAhBA,gBAbsC;AActCD,mBAAa,EAAbA;AAdsC,KAAxC,MAgBC,CAACmF,eAAD,IAAqBA,eAAe,IAAI/H,YAAY,CAACyH,YAAD,CAAZ,CAA2BQ,QAA3B,CAAoCF,eAApC,CAhBzC,CADF,EAkBE;AACA1F,oBAAc,GAAG,IAAjB;AACD;AACF;;AAED,MAAIA,cAAc,KAAK,KAAvB,EAA8B;AAC5BD,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BkE,kBAAnD,EAAuE;AACrEnF,UAAI,EAAJA,IADqE;AAErEnB,SAAG,EAAEG,OAAO,CAAC2E;AAFwD,KAAvE,CAFF;AAOA,WAAO,IAAP;AACD,GAlD4E,CAoD7E;;;AACA,MAAIzD,MAAM,GAAGqG,WAAW,CAAC9E,mBAAZ,CAAgCI,SAAhC,EAAb;AACA,MAAIG,YAAY,GAAGuE,WAAW,CAAC9E,mBAAZ,CAAgCkE,eAAhC,CAAgD9G,GAAhD,CAAnB;AACAqB,QAAM,CAACoJ,OAAP,GAAiBzK,GAAjB;AACA,MAAIwN,eAAe,GAAG,IAAIC,GAAJ,EAAtB,CAxD6E,CA0D7E;;AACA,MAAI,CAACtK,YAAL,EAAmB;AACjB,WAAO,IAAP;AACD;;AAED,MAAIkF,QAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCC,WAAvC,CAAf,CA/D6E,CAgE7E;;AACA,MAAIiF,QAAQ,IAAIA,QAAQ,CAACE,cAAT,CAAwB,OAAxB,CAAZ,IAAgDF,QAAQ,CAACG,KAAT,KAAmB,IAAvE,EAA6E;AAC3E,QAAId,WAAW,CAAClG,kBAAZ,KAAmCK,SAAvC,EAAkD;AAChD6F,iBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEE,MACEf,IADF,GAEE,mBAFF,GAGEiC,WAHF,GAIE,gEANJ;AASA,aAAO,IAAP;AACD;AACF;;AAED,MAAIsK,SAAS,GAAG,EAAhB;AACAL,iBAAe,GAAGA,eAAe,IAAIhM,MAAM,CAACgM,eAA1B,IAA6CJ,0BAA/D,CAjF6E,CAiFc;;AAC3F,MAAI7M,YAAY,CAACgF,WAAb,CAAyB2C,wBAAzB,CAAJ,EAAwD;AACtD;AACA,QAAI3H,YAAY,CAACuN,SAAb,CAAuBtM,MAAM,CAAC0G,wBAA9B,CAAJ,EAA6D;AAC3D;AACAA,8BAAwB,GAAG1G,MAAM,CAAC0G,wBAAlC;AACD,KAHD,MAGO;AACLA,8BAAwB,GAAG,KAA3B;AACD;AACF;;AACD,MAAI,CAAC3H,YAAY,CAACgM,QAAb,CAAsBhJ,WAAtB,CAAL,EAAyC;AACvC,QAAIhD,YAAY,CAAC+E,OAAb,CAAqB/B,WAArB,CAAJ,EAAuC;AACrCsK,eAAS,GAAGrG,YAAY,CAACuG,mBAAb,CAAiCzK,YAAjC,EAA+CC,WAA/C,CAAZ;AACD,KAFD,MAEO;AACLsK,eAAS,GAAGrG,YAAY,CAACwG,mBAAb,CAAiC1K,YAAjC,EAA+C0B,cAA/C,EAA+DwI,eAA/D,CAAZ;AACD;AACF,GAND,MAMO;AACL;AACA,QAAIhF,SAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCC,WAAvC,CAAf;;AACAsK,aAAS,CAAClH,IAAV,CAAe6B,SAAQ,IAAI;AAAE+C,SAAG,EAAEhI;AAAP,KAA3B;AACD;;AACD,MAAM8F,MAAM,GAAG,EAAf;AACA,MAAI4E,SAAS,GAAG,EAAhB;AACA,MAAInB,MAAM,GAAG,EAAb;AACA,MAAIoB,cAAc,GAAG,QAAqC,KAArC,GAA6CL,SAAlE;AAEAA,WAAS,CAACvB,OAAV,CACE,UAAA9D,QAAQ;AAAA,WACLa,MAAM,CAACb,QAAQ,CAAC+C,GAAV,CAAN,GAAuB4C,iBAAiB,CACvCtG,WADuC,EAEvCW,QAFuC,EAGvCA,QAAQ,CAAC+C,GAH8B,EAIvC/H,MAJuC,EAKvCF,YALuC,EAMvC0B,cANuC,EAOvCuI,YAPuC,EAQvC/L,MARuC,EASvCuG,eATuC,EAUvCC,2BAVuC,EAWvCC,eAXuC,EAYvCuF,eAZuC,EAavCtF,wBAbuC,EAcvCC,QAduC,EAevC8F,SAfuC,EAgBvCN,eAhBuC,EAiBvCb,MAjBuC,EAkBvCoB,cAlBuC,EAmBvCT,eAnBuC,EAoBvCnF,gBApBuC,EAqBvCD,aArBuC,CADnC;AAAA,GADV,EA3G6E,CAsI7E;AACA;AACA;;AACA,MAAM+F,cAAc,GAClB/E,MAAM,IAAI+C,MAAM,CAACC,IAAP,CAAYhD,MAAZ,EAAoBzD,MAApB,GAA6B,CAAvC,GACIwG,MAAM,CAACiC,MAAP,CAAchF,MAAd,EAAsBiF,KAAtB,CAA4B,UAAAC,IAAI;AAAA,WAAIhO,YAAY,CAAC+I,SAAb,CAAuBiF,IAAvB,CAAJ;AAAA,GAAhC,CADJ,GAEI,KAHN,CAzI6E,CA6I7E;;AAEA,MAAIH,cAAJ,EAAoB;AAClB;AACA;AACA,WAAOrK,OAAO,CAACO,GAAR,CAAY8H,MAAM,CAACiC,MAAP,CAAchF,MAAd,CAAZ,EAAmClF,IAAnC,CAAwC,UAAAqK,SAAS,EAAI;AAC1DA,eAAS,CAAClC,OAAV,CAAkB,UAAClI,IAAD,EAAOqK,KAAP,EAAiB;AACjC,YAAMlL,WAAW,GAAG6I,MAAM,CAACC,IAAP,CAAYhD,MAAZ,EAAoBoF,KAApB,CAApB;;AACA,YAAMC,GAAG,GAAGC,4BAA4B,CACtC9G,WADsC,EAEtCrG,MAFsC,EAGtC8B,YAHsC,EAItCqK,eAJsC,EAKtCnK,MALsC,EAMtCwB,cANsC,EAOtCuI,YAPsC,EAQtCU,SARsC,EAStCnB,MATsC,EAUtCoB,cAVsC,EAWtC1J,gBAXsC,EAYtCiJ,eAZsC,EAatCnF,gBAbsC,EActCD,aAdsC,sBAenC9E,WAfmC,EAerBa,IAfqB,EAAxC;;AAiBAiF,cAAM,CAAC9F,WAAD,CAAN,GAAsBmL,GAAG,CAACnL,WAAD,CAAzB;AACD,OApBD;AAqBA,aAAO8F,MAAP;AACD,KAvBM,CAAP;AAwBD;;AACD,SAAOsF,4BAA4B,CACjC9G,WADiC,EAEjCrG,MAFiC,EAGjC8B,YAHiC,EAIjCqK,eAJiC,EAKjCnK,MALiC,EAMjCwB,cANiC,EAOjCuI,YAPiC,EAQjCU,SARiC,EASjCnB,MATiC,EAUjCoB,cAViC,EAWjC1J,gBAXiC,EAYjCiJ,eAZiC,EAajCnF,gBAbiC,EAcjCD,aAdiC,EAejCgB,MAfiC,CAAnC;AAiBD;;AAED,SAASsF,4BAAT,CACE9G,WADF,EAEErG,MAFF,EAGE8B,YAHF,EAIEqK,eAJF,EAKEnK,MALF,EAMEwB,cANF,EAOEuI,YAPF,EAQEU,SARF,EASEnB,MATF,EAUEoB,cAVF,EAWE1J,gBAXF,EAYEiJ,eAZF,EAaEnF,gBAbF,EAcED,aAdF,EAeEgB,MAfF,EAgBE;AACA,MAAI,CAAC+C,MAAM,CAACC,IAAP,CAAYhD,MAAZ,EAAoBzD,MAAzB,EAAiC;AAC/B,WAAO,IAAP;AACD;;AAED,MAAI,IAAJ,EAAwC;AACtC,QAAIkH,MAAM,IAAIA,MAAM,CAAClH,MAArB,EAA6B;AAC3B,WAAK,IAAIgJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG9B,MAAM,CAAClH,MAA3B,EAAmCgJ,CAAC,EAApC,EAAwC;AACtC/G,mBAAW,CAAChF,UAAZ,CAAuB0H,OAAvB,CAA+B/I,MAA/B,EAAuCsL,MAAM,CAAC8B,CAAD,CAA7C,EAAkD/G,WAAlD,EAA+D;AAAErD,0BAAgB,EAAhBA;AAAF,SAA/D;AACD;AACF;AACF,GAND,MAMO,EAmBN;;AAED,MAAIlB,YAAY,CAAC+B,kBAAb,IAAmC+G,MAAM,CAACC,IAAP,CAAY4B,SAAZ,EAAuBrI,MAAvB,GAAgC,CAAvE,EAA0E;AACxE,QAAIkE,UAAU,GAAGrC,cAAc,CAACyC,uBAAf,CACf5G,YADe,EAEf0B,cAFe,EAGf,EAHe,EAIfsD,gBAJe,EAKfD,aALe,CAAjB;AAOA,QAAIgC,OAAO,GAAG5C,cAAc,CAACoH,uBAAf,CACZvL,YADY,EAEZE,MAFY,EAGZwB,cAHY,EAIZiJ,SAJY,EAKZV,YALY,EAMZI,eANY,EAOZF,eAPY,CAAd;AASA5F,eAAW,CAAChF,UAAZ,CAAuB0H,OAAvB,CAA+B/I,MAA/B,EAAuCsI,UAAvC,EAAmDjC,WAAnD,EAAgE;AAAEwC,aAAO,EAAPA,OAAF;AAAW7F,sBAAgB,EAAhBA;AAAX,KAAhE,EAjBwE,CAmBxE;;AACA,QAAI,CAAClB,YAAY,CAAC+B,kBAAlB,EAAsC;AACpC+G,YAAM,CAACC,IAAP,CAAY4B,SAAZ,EAAuB3B,OAAvB,CAA+B,UAASf,GAAT,EAAc;AAC3ChE,oBAAY,CAACuH,aAAb,CACEtN,MADF,EAEEyM,SAAS,CAAC1C,GAAD,CAAT,CAAe/C,QAFjB,EAGEyF,SAAS,CAAC1C,GAAD,CAAT,CAAelH,aAHjB,EAIE4J,SAAS,CAAC1C,GAAD,CAAT,CAAe/H,MAJjB,EAKEyK,SAAS,CAAC1C,GAAD,CAAT,CAAepD,QALjB,EAMEnD,cANF;AAQD,OATD;AAUD;AACF;;AAED,MAAIxD,MAAM,CAACyB,iBAAX,EAA8B;AAC5B,WAAOmJ,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkB5D,MAAlB,EAA0B;AAAEpG,uBAAiB,EAAEzB,MAAM,CAACyB;AAA5B,KAA1B,CAAP;AACD;;AAED,SAAOoG,MAAP;AACD;;AAED,SAAS8E,iBAAT,CACEtG,WADF,EAEEW,QAFF,EAGEjF,WAHF,EAIEC,MAJF,EAKEF,YALF,EAME0B,cANF,EAOEuI,YAPF,EAQE/L,MARF,EASEuG,eATF,EAUEC,2BAVF,EAWEC,eAXF,EAYEuF,eAZF,EAaEtF,wBAbF,EAcEC,QAdF,EAeE8F,SAfF,EAgBEN,eAhBF,EAiBEb,MAjBF,EAkBEoB,cAlBF,EAmBET,eAnBF,EAoBEnF,gBApBF,EAqBED,aArBF,EAsBE;AACA;AACA,MAAI,CAACG,QAAD,IAAaA,QAAQ,CAACI,MAAT,KAAoBtB,SAAS,CAACuB,cAA/C,EAA+D;AAC7DhB,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAAC2H,IADf,EAEEzH,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAAC2H,gBAAf,CAAgCC,oBAArD,EAA2E;AACzE1H,UAAI,EAAJA,IADyE;AAEzEiC,iBAAW,EAAEA,WAF4D;AAGzEpD,SAAG,EAAHA;AAHyE,KAA3E,CAFF;AASA,WAAO,KAAP;AACD;;AAED,MAAIqH,YAAY,CAACyD,wBAAb,CAAsCzC,QAAtC,CAAJ,EAAqD;AACnDX,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2G,kBAAnD,EAAuE;AACrE5H,UAAI,EAAJA,IADqE;AAErEiC,iBAAW,EAAXA,WAFqE;AAGrE4F,kBAAY,EAAEX,QAAQ,CAACY,IAH8C;AAIrE5F,YAAM,EAANA,MAJqE;AAKrErD,SAAG,EAAHA;AALqE,KAAvE,CAFF;AAWA,WAAO,KAAP;AACD;;AAED,MAAI4O,UAAU,GAAGvG,QAAQ,CAACwB,EAA1B,CA9BA,CAgCA;;AACA,MAAIgF,IAAI,GAAGxH,YAAY,CAACyH,eAAb,CAA6B3L,YAA7B,EAA2CkF,QAAQ,CAAC+C,GAApD,EAAyDvG,cAAzD,CAAX;;AAEA,MAAI,CAACgK,IAAL,EAAW;AACT;AACAnH,eAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2M,wBAAnD,EAA6E;AAC3E5N,UAAI,EAAJA,IAD2E;AAE3EkC,YAAM,EAANA,MAF2E;AAG3EwB,oBAAc,EAAdA,cAH2E;AAI3EzB,iBAAW,EAAEA;AAJ8D,KAA7E,CAFF;AASA,WAAO,KAAP;AACD,GAZD,MAYO,IAAIiK,eAAe,KAAKJ,0BAApB,IAAkD4B,IAAI,CAAC5F,IAAL,KAAcoE,eAApE,EAAqF;AAC1F,WAAO,KAAP;AACD,GAFM,MAEA,IAAIwB,IAAI,CAAC5F,IAAL,KAAc8D,YAAY,CAACiC,OAA3B,IAAsC,CAACzH,YAAY,CAACgC,YAAb,CAA0B6D,YAA1B,CAA3C,EAAoF;AACzF,QAAIjK,YAAY,CAAC+B,kBAAjB,EAAqC;AACnC;;;AAGA,UAAI2J,IAAI,CAACI,GAAL,KAAa,CAAC,CAAlB,EAAqB;AACnB;;;;AAIA,YAAI7O,YAAY,CAACgF,WAAb,CAAyBkI,eAAzB,KAA6C,CAACA,eAAe,CAAC/E,cAAhB,CAA+BsG,IAAI,CAACK,WAApC,CAAlD,EAAoG;AAClGC,0CAAgC,CAACzH,WAAD,EAAcrE,MAAd,EAAsBwB,cAAtB,EAAsCzB,WAAtC,CAAhC;AACA,iBAAO,KAAP;AACD;AACF,OATD,MASO;AACL;;;;;AAKA,YAAIyL,IAAI,CAACK,WAAT,EAAsB;AACpB;AACA,cAAI9O,YAAY,CAACgF,WAAb,CAAyBkI,eAAzB,KAA6C,CAACA,eAAe,CAAC/E,cAAhB,CAA+BsG,IAAI,CAACK,WAApC,CAAlD,EAAoG;AAClGC,4CAAgC,CAACzH,WAAD,EAAcrE,MAAd,EAAsBwB,cAAtB,EAAsCzB,WAAtC,CAAhC;AACA,mBAAO,KAAP;AACD;AACF;AACF;AACF,KA3BD,MA2BO;AACL+L,sCAAgC,CAACzH,WAAD,EAAcrE,MAAd,EAAsBwB,cAAtB,EAAsCzB,WAAtC,CAAhC;AACA,aAAO,KAAP;AACD;AACF;;AAED,MAAIyL,IAAI,CAAC5F,IAAL,KAAc8D,YAAY,CAACiC,OAA3B,IAAsCH,IAAI,CAACK,WAA/C,EAA4D;AAC1D1B,mBAAe,CAAC4B,GAAhB,CAAoBP,IAAI,CAACK,WAAzB;AACD;;AAED,MAAMhG,MAAM,GAAG9B,YAAY,CAAC9F,YAAb,CACbD,MADa,EAEb8B,YAFa,EAGbkF,QAHa,EAIbjF,WAJa,EAKbC,MALa,EAMbuE,eANa,EAObC,2BAPa,EAQbC,eARa,EASbE,QATa,EAUb,KAVa,EAWb,IAXa,EAYbnD,cAZa,EAab7E,GAba,CAAf;;AAgBA,MAAII,YAAY,CAAC+I,SAAb,CAAuBD,MAAvB,CAAJ,EAAoC;AAClC,WAAOA,MAAM,CAAClF,IAAP,CAAY,UAASC,IAAT,EAAe;AAChC,UAAI,CAACgI,MAAM,CAACC,IAAP,CAAYjI,IAAZ,EAAkBwB,MAAvB,EAA+B;AAC7B,eAAO,IAAP;AACD;;AACD,aAAO4J,4BAA4B,CACjC3H,WADiC,EAEjCtE,WAFiC,EAGjCwL,UAHiC,EAIjCvL,MAJiC,EAKjChC,MALiC,EAMjCwN,IANiC,EAOjC9G,wBAPiC,EAQjC5E,YARiC,EASjCkF,QATiC,EAUjCxD,cAViC,EAWjCuI,YAXiC,EAYjCpF,QAZiC,EAajC8F,SAbiC,EAcjCnB,MAdiC,EAejCoB,cAfiC,EAgBjCT,eAhBiC,EAiBjCnF,gBAjBiC,EAkBjCD,aAlBiC,EAmBjCjE,IAnBiC,CAAnC;AAqBD,KAzBM,CAAP;AA0BD;;AAED,SAAOoL,4BAA4B,CACjC3H,WADiC,EAEjCtE,WAFiC,EAGjCwL,UAHiC,EAIjCvL,MAJiC,EAKjChC,MALiC,EAMjCwN,IANiC,EAOjC9G,wBAPiC,EAQjC5E,YARiC,EASjCkF,QATiC,EAUjCxD,cAViC,EAWjCuI,YAXiC,EAYjCpF,QAZiC,EAajC8F,SAbiC,EAcjCnB,MAdiC,EAejCoB,cAfiC,EAgBjCT,eAhBiC,EAiBjCnF,gBAjBiC,EAkBjCD,aAlBiC,EAmBjCgB,MAnBiC,CAAnC;AAqBD;;AAED,SAASmG,4BAAT,CACE3H,WADF,EAEEtE,WAFF,EAGEwL,UAHF,EAIEvL,MAJF,EAKEhC,MALF,EAMEwN,IANF,EAOE9G,wBAPF,EAQE5E,YARF,EASEkF,QATF,EAUExD,cAVF,EAWEuI,YAXF,EAYEpF,QAZF,EAaE8F,SAbF,EAcEnB,MAdF,EAeEoB,cAfF,EAgBET,eAhBF,EAiBEnF,gBAjBF,EAkBED,aAlBF,EAmBEgB,MAnBF,EAoBE;AAAA,MACMG,WADN,GAC2DH,MAD3D,CACMG,WADN;AAAA,MACmBnF,aADnB,GAC2DgF,MAD3D,CACmBhF,aADnB;AAAA,MACkCoL,oBADlC,GAC2DpG,MAD3D,CACkCoG,oBADlC,EAEA;;AACA,MAAIpL,aAAJ,EAAmB;AACjB,QAAIoL,oBAAJ,EAA0B;AACxB,UAAMC,WAAW,GAAGD,oBAAoB,CAACE,KAArB,CAA2BrC,yBAA3B,CAApB;;AACA,UAAI,CAACoC,WAAW,CAAChC,QAAZ,CAAqB1I,cAArB,CAAL,EAA2C;AACzCyK,4BAAoB,IAAInC,yBAAyB,GAAGtI,cAApD,CADyC,CAGzC;;AACA,YAAI,CAAC1B,YAAY,CAAC+B,kBAAlB,EAAsC;AACpCkC,sBAAY,CAACuH,aAAb,CAA2BtN,MAA3B,EAAmCgH,QAAnC,EAA6CnE,aAA7C,EAA4Db,MAA5D,EAAoE2E,QAApE,EAA8EsH,oBAA9E;AACD;AACF,OAPD,MAOO,IAAI,CAACvH,wBAAD,IAA6B8G,IAAI,CAACI,GAAL,KAAa,CAAC,CAA/C,EAAkD;AACvDvH,mBAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkN,6BAAlD,EAAiF;AAC/EtO,cAAI,EAAJA,IAD+E;AAE/EkC,gBAAM,EAANA,MAF+E;AAG/EwB,wBAAc,EAAdA,cAH+E;AAI/EzB,qBAAW,EAAXA;AAJ+E,SAAjF,CAFF;AASA,eAAO,KAAP;AACD;AACF,KAtBgB,CAuBjB;;;AACA,QAAI/B,MAAM,CAACqI,WAAX,EAAwB;AACtB,UAAIC,UAAU,GAAGrC,cAAc,CAACoI,8BAAf,CACfvM,YADe,EAEfyL,UAFe,EAGfvF,WAHe,EAIfhG,MAJe,EAKfwL,IALe,EAMfzB,YANe,EAOfE,eAPe,EAQfnF,gBARe,EASfD,aATe,CAAjB;AAWAR,iBAAW,CAACf,gBAAZ,CAA6BmD,OAA7B,CAAqCH,UAArC;AACD,KAbD,MAaO,IAAIxG,YAAY,CAAC+B,kBAAjB,EAAqC;AAC1C4I,eAAS,CAACzF,QAAQ,CAACwB,EAAV,CAAT,GAAyB;AACvBxI,cAAM,EAANA,MADuB;AAEvBgH,gBAAQ,EAARA,QAFuB;AAGvBnE,qBAAa,EAAbA,aAHuB;AAIvBb,cAAM,EAANA,MAJuB;AAKvB2E,gBAAQ,EAARA,QALuB;AAMvB6G,YAAI,EAAJA;AANuB,OAAzB;AAQA,aAAO,IAAP;AACD,KAVM,MAUA;AACL,UAAIlF,WAAU,GAAG,EAAjB;;AAEA,UAAIoE,cAAJ,EAAoB;AAClBpE,mBAAU,GAAGrC,cAAc,CAACoI,8BAAf,CACXvM,YADW,EAEXyL,UAFW,EAGXvF,WAHW,EAIXhG,MAJW,EAKXwL,IALW,EAMXzB,YANW,EAOXjF,gBAPW,EAQXD,aARW,CAAb;AAUD,OAXD,MAWO;AACLyB,mBAAU,GAAGrC,cAAc,CAACqI,yBAAf,CACXxM,YADW,EAEXyL,UAFW,EAGXvF,WAHW,EAIXhG,MAJW,EAKXwL,IALW,EAMXzB,YANW,EAOXjF,gBAPW,EAQXD,aARW,CAAb;AAUD;;AAEDyE,YAAM,CAACnG,IAAP,CAAYmD,WAAZ;AACD,KA3EgB,CA6EjB;;;AACA,QAAI,CAACxG,YAAY,CAAC+B,kBAAlB,EAAsC;AACpCkC,kBAAY,CAACuH,aAAb,CAA2BtN,MAA3B,EAAmCgH,QAAnC,EAA6CnE,aAA7C,EAA4Db,MAA5D,EAAoE2E,QAApE,EAA8EnD,cAA9E;AACD;;AACD,WAAO,IAAP;AACD;;AAED,SAAO,KAAP;AACD;;AAED,SAASsK,gCAAT,CAA0CzH,WAA1C,EAAuDrE,MAAvD,EAA+DwB,cAA/D,EAA+EzB,WAA/E,EAA4F;AAC1FsE,aAAW,CAACjG,MAAZ,CAAmBQ,GAAnB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BwN,6CAAnD,EAAkG;AAChGzO,QAAI,EAAJA,IADgG;AAEhGkC,UAAM,EAANA,MAFgG;AAGhGwB,kBAAc,EAAdA,cAHgG;AAIhGzB,eAAW,EAAXA;AAJgG,GAAlG,CAFF;AASD;;AAED6D,MAAM,CAACC,OAAP,GAAiBnC,KAAjB,C;;;;;;;;;;;AC1nBA;;;;;;;;;;;;;;;;AAeA;AAEA,IAAI8K,WAAW,GAAG,EAAlB,C,CAEA;AACA;;AACA,IAAI,IAAJ,EAAwC;AACtCA,aAAW,GAAG;AACZC,QAAI,EAAEC,oBADM;AAEZC,WAAO,EAAEC,QAAWA;AAFR,GAAd;AAID,CALD,MAKO,EAEN;;AAEDhJ,MAAM,CAACC,OAAP,GAAiB;AACf6I,UAAQ,EAAEF,WAAW,CAACC,IADP;AAEfG,aAAW,EAAEJ,WAAW,CAACG,OAFV;AAIfE,UAAQ,EAAE,QAJK;AAMfC,YAAU,EAAE,CANG;AAQfC,qBAAmB,EAAE,GARN;AASfC,mBAAiB,EAAE,KATJ;AAUfC,wBAAsB,EAAE,IAVT;AAYfC,4BAA0B,EAAE,GAZb;AAafC,+BAA6B,EAAE,GAbhB;AAaqB;AAEpC9H,gBAAc,EAAE,SAfD;AAiBf+H,UAAQ,EAAE,iBAjBK;AAmBfC,eAAa,EAAE,SAnBA;AAoBfC,gBAAc,EAAE,UApBD;AAsBfC,iBAAe,EAAE,KAtBF;AAuBfC,yBAAuB,EAAE;AAvBV,CAAjB,C;;;;;;;;;;;AC9BA;;;;;;;;;;;;;;;AAgBA,IAAMC,MAAM,GAAG7Q,mBAAO,CAAC,2DAAD,CAAtB;;AAEA,IAAMkH,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AACA,IAAMsH,YAAY,GAAGtH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMK,eAAe,GAAGL,mBAAO,CAAC,gEAAD,CAA/B;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMoH,YAAY,GAAGpH,mBAAO,CAAC,0DAAD,CAA5B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;AAEA,IAAM5P,IAAI,GAAGjB,YAAY,CAAC8Q,gBAA1B;AAEA,IAAIA,gBAAgB,GAAG;AACrB;;;;;;;;;;AAUAC,sBAAoB,EAAE,8BAACC,SAAD,EAAYC,QAAZ,EAAyC;AAAA,QAAnBC,UAAmB,uEAAN,CAAM;AAC7D,QAAMC,KAAK,GAAGH,SAAS,GAAGI,IAAI,CAACC,GAAL,CAAS,CAAT,EAAY,EAAZ,CAA1B;AACA,QAAMC,eAAe,GAAG,CAACL,QAAQ,GAAGE,KAAX,GAAmB,CAApB,IAAyBD,UAAjD;AACA,QAAM9F,KAAK,GAAGgG,IAAI,CAACG,KAAL,CAAWD,eAAX,CAAd;AAEA,WAAOlG,KAAP;AACD,GAjBoB;;AAmBrB;;;;;;;;AAQAoG,eAAa,EAAE,uBAACC,UAAD,EAAaC,WAAb,EAA6B;AAC1C,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG5F,MAAM,CAACC,IAAP,CAAYyF,UAAZ,EAAwBlM,MAA5C,EAAoDoM,CAAC,EAArD,EAAyD;AACvD,UAAIjH,SAAS,GAAG+G,UAAU,CAACE,CAAD,CAA1B;;AAEA,UAAID,WAAW,IAAIhH,SAAS,CAACkH,wBAAzB,IAAqDF,WAAW,IAAIhH,SAAS,CAACmH,sBAAlF,EAA0G;AACxG,eAAOnH,SAAP;AACD;AACF;;AAED,WAAO,IAAP;AACD,GArCoB;;AAuCrB;;;;;;;AAOAoH,wBAAsB,EAAE,gCAACC,IAAD,EAAO5O,MAAP,EAAe6O,UAAf,EAA8B;AACpD,QAAIhB,SAAS,GAAGJ,MAAM,CAACqB,EAAP,CAAUF,IAAV,EAAgB9K,SAAS,CAACgJ,UAA1B,CAAhB;;AACA,QAAIyB,WAAW,GAAGZ,gBAAgB,CAACC,oBAAjB,CAAsCC,SAAtC,EAAiD/J,SAAS,CAACiJ,mBAA3D,CAAlB;;AAEA3O,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BC,sBAAnD,EAA2E;AACzEnR,UAAI,EAAJA,IADyE;AAEzE+P,eAAS,EAATA,SAFyE;AAGzEU,iBAAW,EAAXA,WAHyE;AAIzEvO,YAAM,EAANA;AAJyE,KAA3E,CAFF,EAQE6O,UARF;AAWA,WAAON,WAAP;AACD,GA9DoB;;AAgErB;;;;;;;;AAQAW,sBAAoB,EAAE,8BAAClP,MAAD,EAASgF,QAAT,EAA0C;AAAA,QAAvB6J,UAAuB,uEAAV,KAAU;;AAC9D,QAAI,CAAC7J,QAAL,EAAe;AACb,aAAO,KAAP;AACD;;AAED,QAAImK,iBAAiB,GAAGnK,QAAQ,CAACoK,cAAjC;;AACA,QAAIC,mBAAmB,GAAG1B,gBAAgB,CAACgB,sBAAjB,CACxB3K,YAAY,CAACsL,gBAAb,CAA8BtP,MAA9B,EAAsCgF,QAAtC,CADwB,EAExBhF,MAFwB,EAGxB6O,UAHwB,CAA1B;;AAKA,QAAIU,UAAU,GAAGF,mBAAmB,KAAK,CAAxB,IAA6BA,mBAAmB,IAAIF,iBAArE;AAEA/Q,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BsQ,yBAAlD,EAA6E;AAC3E1R,UAAI,EAAJA,IAD2E;AAE3EkC,YAAM,EAANA,MAF2E;AAG3ED,iBAAW,EAAEiF,QAAQ,CAAC+C,GAHqD;AAI3E3C,YAAM,EAAEmK,UAAU,GAAG,UAAH,GAAgB;AAJyC,KAA7E,CAFF,EAQEV,UARF;AAWA,WAAOU,UAAP;AACD,GAjGoB;;AAmGrB;;;;;;;;AAQAE,uBAAqB,EAAE,+BAACzP,MAAD,EAASgF,QAAT,EAAmBxB,SAAnB,EAAiC;AACtD,QAAMkM,IAAI,GAAGzS,eAAe,CAAC0S,MAAhB,GAAyBD,IAAtC;AACA,QAAME,MAAM,GAAG3S,eAAe,CAAC0S,MAAhB,GAAyBC,MAAxC;AACA,QAAI7B,UAAJ;AACA,QAAIa,IAAJ;;AAEA,QAAI,CAAC1K,YAAY,CAACgC,YAAb,CAA0BlG,MAA1B,CAAL,EAAwC;AACtC,aAAO,IAAP;AACD;;AAED,QAAI,CAACgF,QAAL,EAAe;AACb,aAAO,IAAP;AACD;;AAED,QAAI,CAAE,CAAC0K,IAAD,IAAS,CAACE,MAAX,IAAuBF,IAAI,IAAI1K,QAAQ,CAAC6K,IAAzC,KAAmD7K,QAAQ,CAACoK,cAAhE,EAAgF;AAC9E;AACA;AACArB,gBAAU,GAAGjK,SAAS,CAACkJ,iBAAV,GAA8BhI,QAAQ,CAACoK,cAAvC,GAAwD,GAArE;AACAR,UAAI,GAAG5K,YAAY,CAACsL,gBAAb,CAA8BtP,MAA9B,EAAsCgF,QAAtC,CAAP;AACD,KALD,MAKO,IAAK0K,IAAI,IAAI,CAAC1K,QAAQ,CAAC6K,IAAlB,IAA0B,CAACD,MAA5B,IAAwCA,MAAM,IAAI5K,QAAQ,CAAC8K,MAA/D,EAAwE;AAC7E;AACA/B,gBAAU,GAAG,CAAb;AACAa,UAAI,GAAG5O,MAAP;AACD,KAJM,MAIA;AACL;AACA+N,gBAAU,GAAG,CAAb;AACAa,UAAI,GAAG5K,YAAY,CAACsL,gBAAb,CAA8B9L,SAAS,GAAG,GAAZ,GAAkBxD,MAAhD,EAAwDgF,QAAxD,CAAP;AACD;;AAED,QAAM6I,SAAS,GAAGF,gBAAgB,CAACoC,kBAAjB,CAAoCnB,IAApC,CAAlB;;AACA,QAAML,WAAW,GAAGZ,gBAAgB,CAACC,oBAAjB,CAAsCC,SAAtC,EAAiD/J,SAAS,CAACkJ,iBAA3D,EAA8Ee,UAA9E,CAApB;;AAEA3P,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BgB,2BAAnD,EAAgF;AAC9ElS,UAAI,EAAJA,IAD8E;AAE9EkC,YAAM,EAANA,MAF8E;AAG9ED,iBAAW,EAAEiF,QAAQ,CAAC+C,GAHwD;AAI9EqH,oBAAc,EAAEpK,QAAQ,CAACoK,cAJqD;AAK9Eb,iBAAW,EAAXA,WAL8E;AAM9EV,eAAS,EAATA;AAN8E,KAAhF,CAFF;AAYA,WAAOF,gBAAgB,CAACU,aAAjB,CAA+BrJ,QAAQ,CAACsJ,UAAxC,EAAoDC,WAApD,CAAP;AACD,GAxJoB;AAyJrB0B,sBAAoB,EAAE,8BAACrB,IAAD,EAA0B;AAAA,QAAnBb,UAAmB,uEAAN,CAAM;;AAC9C,QAAMF,SAAS,GAAGF,gBAAgB,CAACoC,kBAAjB,CAAoCnB,IAApC,CAAlB;;AACA,WAAOjB,gBAAgB,CAACC,oBAAjB,CAAsCC,SAAtC,EAAiD/J,SAAS,CAACkJ,iBAA3D,EAA8Ee,UAA9E,CAAP;AACD,GA5JoB;AA6JrBgC,oBAAkB,EAAE,4BAAA/P,MAAM,EAAI;AAC5B,WAAOyN,MAAM,CAACqB,EAAP,CAAU9O,MAAV,EAAkB8D,SAAS,CAACgJ,UAA5B,CAAP;AACD;AA/JoB,CAAvB;AAkKAlJ,MAAM,CAACC,OAAP,GAAiB8J,gBAAjB,C;;;;;;;;;;;AChMA;;;;;;;;;;;;;;;AAgBA,IAAMuC,WAAW,GAAGtT,mBAAO,CAAC,sDAAD,CAA3B;;eACwBA,mBAAO,CAAC,sDAAD,C;IAAvBuT,W,YAAAA,W;;gBACoDvT,mBAAO,CAAC,wDAAD,C;IAA3DwT,4B,aAAAA,4B;IAA8BC,iB,aAAAA,iB;;AACtC,IAAMjT,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;4BAEyBsT,WAAW,CAACI,oB;IAA7BC,G,yBAAAA,G;IAAKC,E,yBAAAA,E;IAAIC,G,yBAAAA,G;6BACiBP,WAAW,CAACQ,mB;IAAtCC,e,0BAAAA,e;IAAiBC,I,0BAAAA,I;IACjBjT,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMC,IAAI,GAAGjB,YAAY,CAACgU,gBAA1B;AAEA,IAAMzS,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;AAEA9J,MAAM,CAACC,OAAP,GAAiBgN,gBAAjB;AACA;;;;;;;;;AAQA,SAASC,SAAT,CAAmBC,GAAnB,EAAwBxM,eAAxB,EAAyC;AAAA,qBAClB4L,WAAW,CAACY,GAAD,CADO;AAAA,MACjChJ,GADiC,gBACjCA,GADiC;AAAA,MAC5BE,KAD4B,gBAC5BA,KAD4B;;AAEvC,MAAI+I,QAAQ,GAAGjJ,GAAf;AACA,MAAIkJ,MAAM,GAAGhJ,KAAb;;AACA,MAAI+I,QAAQ,KAAKP,GAAjB,EAAsB;AACpB,WAAO,CAACK,SAAS,CAACG,MAAD,EAAS1M,eAAT,CAAjB;AACD,GAFD,MAEO,IAAIyM,QAAQ,KAAKT,GAAjB,EAAsB;AAC3B,QAAIW,IAAI,GAAG,EAAX;;AACA,SAAK,IAAI1C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyC,MAAM,CAAC7O,MAA3B,EAAmCoM,CAAC,EAApC,EAAwC;AACtC0C,UAAI,CAAC/N,IAAL,CAAU2N,SAAS,CAACG,MAAM,CAACzC,CAAD,CAAP,EAAYjK,eAAZ,CAAnB;AACD;;AAED,WAAO2M,IAAI,CAACpG,KAAL,CAAW,UAAAqG,GAAG;AAAA,aAAIA,GAAJ;AAAA,KAAd,CAAP;AACD,GAPM,MAOA,IAAIH,QAAQ,KAAKR,EAAjB,EAAqB;AAC1B,QAAIU,KAAI,GAAG,EAAX;;AACA,SAAK,IAAI1C,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGyC,MAAM,CAAC7O,MAA3B,EAAmCoM,EAAC,EAApC,EAAwC;AACtC0C,WAAI,CAAC/N,IAAL,CAAU2N,SAAS,CAACG,MAAM,CAACzC,EAAD,CAAP,EAAYjK,eAAZ,CAAnB;AACD;;AAED,WAAO2M,KAAI,CAAC7O,IAAL,CAAU,UAAA8O,GAAG;AAAA,aAAIA,GAAJ;AAAA,KAAb,CAAP;AACD,GAPM,MAOA,IAAIH,QAAQ,KAAKL,eAAjB,EAAkC;AACvC,WAAOP,4BAA4B,CAACa,MAAD,EAAS1M,eAAT,CAAnC;AACD,GAFM,MAEA,IAAIyM,QAAQ,KAAKJ,IAAjB,EAAuB;AAC5B,WAAOP,iBAAiB,CAACY,MAAD,EAAS1M,eAAT,CAAxB;AACD;AACF;;AAED,SAASsM,gBAAT,CAA0BE,GAA1B,EAA+G;AAAA,MAAhFxM,eAAgF,uEAA9D,EAA8D;AAAA,MAA1DxE,WAA0D;AAAA,MAA7CC,MAA6C;AAAA,MAArCuH,SAAqC,uEAAzB,EAAyB;AAAA,MAArB6J,WAAqB,uEAAP,KAAO;;AAC7G,MAAI;AACF,QAAIrU,YAAY,CAACoD,QAAb,CAAsB4Q,GAAtB,KAA8B,CAACnI,MAAM,CAACC,IAAP,CAAYkI,GAAZ,EAAiB3O,MAApD,EAA4D;AAC1DhE,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BqC,oBAAnD,EAAyE;AACvEtR,mBAAW,EAAXA,WADuE;AAEvEC,cAAM,EAANA,MAFuE;AAGvElC,YAAI,EAAJA;AAHuE,OAAzE,CAFF,EAOEsT,WAPF;AASA,aAAO,IAAP;AACD;;AACD,QAAIrU,YAAY,CAACoD,QAAb,CAAsB4Q,GAAtB,KAA8BnI,MAAM,CAACC,IAAP,CAAYkI,GAAZ,EAAiB3O,MAAnD,EAA2D;AACzD,aAAO0O,SAAS,CAACC,GAAD,EAAMxM,eAAN,CAAhB;AACD;;AACD,WAAO,IAAP;AACD,GAjBD,CAiBE,OAAOnD,GAAP,EAAY;AACZhD,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BuS,kBAAnD,EAAuE;AACrEvR,iBAAW,EAAXA,WADqE;AAErEC,YAAM,EAANA,MAFqE;AAGrEuE,qBAAe,EAAEyE,IAAI,CAACC,SAAL,CAAe1E,eAAf,CAHoD;AAIrEzG,UAAI,EAAJA,IAJqE;AAKrEsD,SAAG,EAAHA,GALqE;AAMrEmG,eAAS,EAATA;AANqE,KAAvE,CAFF,EAUE6J,WAVF;AAYA,WAAO,KAAP;AACD;AACF,C;;;;;;;;;;;ACnGD;;;;;;;;;;;;;;;AAgBA,IAAMlN,YAAY,GAAGtH,mBAAO,CAAC,0DAAD,CAA5B;;AAEA,IAAM2U,QAAQ,GAAG3U,mBAAO,CAAC,0DAAD,CAAxB;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;AAEA,IAAM5P,IAAI,GAAGjB,YAAY,CAAC2U,gBAA1B;AAEA,IAAMA,gBAAgB,GAAG;AACvB;;;;;;;;AAQAC,sBAAoB,EAAE,8BAACzR,MAAD,EAASgF,QAAT,EAAmBxB,SAAnB,EAAiC;AACrD,QAAIkO,QAAQ,GAAG;AACbnK,eAAS,EAAE,IADE;AAEbvB,iBAAW,EAAE,IAFA;AAGbnF,mBAAa,EAAE;AAHF,KAAf;;AAMA,QAAI,CAACqD,YAAY,CAACgC,YAAb,CAA0BlG,MAA1B,CAAL,EAAwC;AACtC5B,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B4S,eAAnD,EAAoE;AAClE7T,YAAI,EAAJA,IADkE;AAElEkC,cAAM,EAANA;AAFkE,OAApE,CAFF;AAQA,aAAO0R,QAAP;AACD;;AAED,QAAIH,QAAQ,CAACrC,oBAAT,CAA8BlP,MAA9B,EAAsCgF,QAAtC,CAAJ,EAAqD;AACnD,UAAIuC,SAAS,GAAGiK,gBAAgB,CAACI,6BAAjB,CAA+C5R,MAA/C,EAAuDgF,QAAvD,EAAiExB,SAAjE,KAA+E,EAA/F;AACAkO,cAAQ,CAACnK,SAAT,GAAqBA,SAArB;AACAmK,cAAQ,CAAC1L,WAAT,GAAuBuB,SAAS,CAACf,EAAjC;AACAkL,cAAQ,CAAC7Q,aAAT,GAAyB0G,SAAS,CAACkF,IAAnC;AACD,KALD,MAKO;AACLrO,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B2S,yBAAlD,EAA6E;AAC3E/T,YAAI,EAAJA,IAD2E;AAE3EkC,cAAM,EAANA,MAF2E;AAG3ED,mBAAW,EAAEiF,QAAQ,CAAC+C;AAHqD,OAA7E,CAFF;AAQD;;AAED,WAAO2J,QAAP;AACD,GA7CsB;;AA+CvB;;;;;;;;;AASAE,+BAA6B,EAAE,uCAAC5R,MAAD,EAASgF,QAAT,EAAmBxB,SAAnB,EAAiC;AAC9D,QAAI,CAACwB,QAAL,EAAe;AACb,aAAO,IAAP;AACD;;AAED,QAAIuC,SAAS,GAAGgK,QAAQ,CAAC9B,qBAAT,CAA+BzP,MAA/B,EAAuCgF,QAAvC,EAAiDxB,SAAjD,CAAhB;;AAEA,QAAI+D,SAAS,IAAIA,SAAS,CAACkF,IAA3B,EAAiC;AAC/BrO,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4S,qBAAlD,EAAyE;AACvEhU,YAAI,EAAJA,IADuE;AAEvEkC,cAAM,EAANA,MAFuE;AAGvED,mBAAW,EAAEiF,QAAQ,CAAC+C,GAHiD;AAIvE3C,cAAM,yBAAkBmC,SAAS,CAACkF,IAA5B;AAJiE,OAAzE,CAFF;AASA,aAAO;AACLlF,iBAAS,EAATA,SADK;AAELkF,YAAI,EAAElF,SAAS,CAACkF,IAFX;AAGLjG,UAAE,EAAEe,SAAS,CAACf;AAHT,OAAP;AAKD;;AAEDpI,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4S,qBAAlD,EAAyE;AACvEhU,UAAI,EAAJA,IADuE;AAEvEkC,YAAM,EAANA,MAFuE;AAGvED,iBAAW,EAAEiF,QAAQ,CAAC+C,GAHiD;AAIvE3C,YAAM,EAAE;AAJ+D,KAAzE,CAFF;AAUA,WAAO,IAAP;AACD;AA3FsB,CAAzB;AA8FAxB,MAAM,CAACC,OAAP,GAAiB2N,gBAAjB,C;;;;;;;;;;;ACzHA;;;;;;;;;;;;;;;AAgBA,IAAMO,aAAa,GAAG;AACpBC,MAAI,EAAE,SADc;AAEpBC,MAAI,EAAE,UAFc;AAGpBC,OAAK,EAAE,UAHa;AAIpBC,WAAS,EAAE,UAJS;AAKpBC,KAAG,EAAE,UALe;AAMpBC,OAAK,EAAE,SANa;AAOpBC,OAAK,EAAE,UAPa;AAQpBC,QAAM,EAAE;AARY,CAAtB;AAWA3O,MAAM,CAACC,OAAP,GAAiBkO,aAAjB,C;;;;;;;;;;;AC3BA;;;;;;;;;;;;;;;AAgBA,IAAMjV,OAAO,GAAG;AACd0V,QAAM,EAAE,QADM;AAEdlS,UAAQ,EAAE,UAFI;AAGdgB,oBAAkB,EAAE,cAHN;AAIdG,OAAK,EAAE,OAJO;AAKda,oBAAkB,EAAE,kBALN;AAMdI,4BAA0B,EAAE,yBANd;AAOdQ,MAAI,EAAE;AAPQ,CAAhB;AAUAU,MAAM,CAACC,OAAP,GAAiB/G,OAAjB,C;;;;;;;;;;;AC1BA;;;;;;;;;;;;;;;AAgBA,IAAM2V,gBAAgB,GAAG;AACvBC,cAAY,EAAE,cADS;AAEvBC,iBAAe,EAAE,iBAFM;AAGvBC,IAAE,EAAE;AAHmB,CAAzB;AAMAhP,MAAM,CAACC,OAAP,GAAiB4O,gBAAjB,C;;;;;;;;;;;ACtBA;;;;;;;;;;;;;;;AAgBA,IAAMI,YAAY,GAAG;AACnBC,QAAM,EAAE,QADW;AAEnBC,QAAM,EAAE,QAFW;AAGnB;AACAC,SAAO,EAAE,SAJU;AAKnBC,QAAM,EAAE;AALW,CAArB;AAQArP,MAAM,CAACC,OAAP,GAAiBgP,YAAjB,C;;;;;;;;;;;ACxBA;;;;;;;;;;;;;;;AAgBA,IAAM1O,SAAS,GAAG;AAChBwC,qBAAmB,EAAE,oBADL;AAEhBwC,uBAAqB,EAAE;AAFP,CAAlB;AAKAvF,MAAM,CAACC,OAAP,GAAiBM,SAAjB,C;;;;;;;;;;;ACrBA;;;;;;;;;;;;;;;AAgBA,IAAM+O,uBAAuB,GAAG;AAC9BF,SAAO,EAAE,SADqB;AAE9BG,QAAM,EAAE,QAFsB;AAG9BC,SAAO,EAAE,SAHqB;AAI9BL,QAAM,EAAE,QAJsB;AAK9B/J,MAAI,EAAE;AALwB,CAAhC;AAQApF,MAAM,CAACC,OAAP,GAAiBqP,uBAAjB,C;;;;;;;;;;;ACxBA;;;;;;;;;;;;;;;AAgBA,IAAMG,QAAQ,GAAG,KAAjB;AACA,IAAMC,SAAS,GAAG,UAAlB;AACA,IAAMC,SAAS,GAAG,UAAlB;AACA,IAAMC,aAAa,GAAG,cAAtB;AAEA5P,MAAM,CAACC,OAAP,GAAiB;AACf4P,OAAK,YAAKJ,QAAL,WADU;AAGftV,KAAG,YAAKsV,QAAL,SAHY;AAKfK,KAAG,YAAKL,QAAL,eALY;AAOfjP,UAAQ,YAAKiP,QAAL,kBAPO;AAQfhL,cAAY,YAAKgL,QAAL,sBARG;AASf1J,OAAK,YAAK0J,QAAL,eATU;AAUf/K,kBAAgB,YAAK+K,QAAL,0BAVD;AAWflM,yBAAuB,YAAKkM,QAAL,iCAXR;AAYf7K,MAAI,YAAK6K,QAAL,cAZW;AAcfxC,kBAAgB,YAAKyC,SAAL,sBAdD;AAef3F,kBAAgB,YAAK2F,SAAL,sBAfD;AAgBf9B,kBAAgB,YAAK8B,SAAL,sBAhBD;AAkBfK,mBAAiB,YAAKH,aAAL,uBAlBF;AAmBftW,YAAU,YAAKsW,aAAL,gBAnBK;AAoBfI,gBAAc,YAAKJ,aAAL,oBApBC;AAqBfjU,qBAAmB,YAAKiU,aAAL,yBArBJ;AAsBf9V,kBAAgB,YAAK8V,aAAL,sBAtBD;AAwBfxP,cAAY,YAAKuP,SAAL,kBAxBG;AAyBfxW,cAAY,YAAKwW,SAAL,kBAzBG;AA0BfM,iBAAe,YAAKN,SAAL,qBA1BA;AA2BfO,qBAAmB,YAAKP,SAAL,yBA3BJ;AA4BftM,aAAW,YAAKsM,SAAL,iBA5BI;AA6BfQ,cAAY,YAAKR,SAAL,kBA7BG;AA8BftP,gBAAc,YAAKsP,SAAL,oBA9BC;AA+BfS,UAAQ,YAAKT,SAAL,cA/BO;AAgCfrP,cAAY,YAAKqP,SAAL,kBAhCG;AAiCfxP,cAAY,YAAKwP,SAAL,mBAjCG;AAkCfU,iBAAe,YAAKV,SAAL,qBAlCA;AAmCfW,eAAa,YAAKX,SAAL,mBAnCE;AAoCfY,aAAW,YAAKZ,SAAL,iBApCI;AAsCfa,gBAAc,YAAKZ,aAAL;AAtCC,CAAjB,C;;;;;;;;;;;ACrBA;;;;;;;;;;;;;;;AAgBA,IAAM9J,YAAY,GAAG;AACnBiC,SAAO,EAAE,kBADU;AAEnB0I,QAAM,EAAE,aAFW;AAGnBxK,KAAG,EAAE;AAHc,CAArB;AAMAjG,MAAM,CAACC,OAAP,GAAiB6F,YAAjB,C;;;;;;;;;;;ACtBA;;;;;;;;;;;;;;;AAgBA,IAAM4K,WAAW,GAAG;AAClBC,YAAU,EAAE,qBADM;AAElBC,IAAE,EAAE;AAFc,CAApB;AAKA5Q,MAAM,CAACC,OAAP,GAAiByQ,WAAjB,C;;;;;;;;;;;ACrBA;;;;;;;;;;;;;;;AAgBA,IAAMG,SAAS,GAAG;AAChBC,gBAAc,EAAE;AACdC,qBAAiB,EAAE;AADL;AADA,CAAlB;AAMA/Q,MAAM,CAACC,OAAP,GAAiB4Q,SAAjB,C;;;;;;;;;;;;;;;ACtBA;;;;;;;;;;;;;;;AAgBA,IAAM1C,aAAa,GAAGnV,mBAAO,CAAC,qDAAD,CAA7B;;AAEA,IAAMgY,cAAc,GAAG;AACrBC,IAAE,EAAE,QADiB;AAErBC,IAAE,EAAE,OAFiB;AAGrBC,IAAE,EAAE,MAHiB;AAIrBC,IAAE,EAAE,MAJiB;AAKrBC,IAAE,EAAE;AALiB,CAAvB;AAQA,IAAMtX,YAAY,GAAG;AACnBuX,QAAM,EAAE,CADW;AAEnBnG,OAAK,EAAE,CAFY;AAGnB9P,MAAI,EAAE,CAHa;AAInBqG,MAAI,EAAE,CAJa;AAKnBzG,OAAK,EAAE;AALY,CAArB;AAQA,IAAMsW,qBAAqB,uEACxBxX,YAAY,CAACuX,MADW,YACCnD,aAAa,CAACC,IADf,SACsBD,aAAa,CAACO,KADpC,sBACqDP,aAAa,CAACM,KADnE,2CAExB1U,YAAY,CAACoR,KAFW,YAEAgD,aAAa,CAACC,IAFd,SAEqBD,aAAa,CAACI,SAFnC,sBAEwDJ,aAAa,CAACM,KAFtE,2CAGxB1U,YAAY,CAACsB,IAHW,YAGD8S,aAAa,CAACC,IAHb,SAGoBD,aAAa,CAACE,IAHlC,sBAGkDF,aAAa,CAACM,KAHhE,2CAIxB1U,YAAY,CAAC2H,IAJW,YAIDyM,aAAa,CAACC,IAJb,SAIoBD,aAAa,CAACQ,MAJlC,sBAIoDR,aAAa,CAACM,KAJlE,2CAKxB1U,YAAY,CAACkB,KALW,YAKAkT,aAAa,CAACC,IALd,SAKqBD,aAAa,CAACK,GALnC,sBAKkDL,aAAa,CAACM,KALhE,0BAA3B;AAQA,IAAM+C,gBAAgB,+DACnBzX,YAAY,CAACuX,MADM,mDAEnBvX,YAAY,CAACoR,KAFM,mDAGnBpR,YAAY,CAACsB,IAHM,mDAInBtB,YAAY,CAAC2H,IAJM,mDAKnB3H,YAAY,CAACkB,KALM,kCAAtB;AAQA+E,MAAM,CAACC,OAAP,GAAiB;AACflG,cAAY,EAAZA,YADe;AAEfiX,gBAAc,EAAdA,cAFe;AAGfQ,kBAAgB,EAAhBA,gBAHe;AAIfD,uBAAqB,EAArBA;AAJe,CAAjB,C;;;;;;;;;;;AClDA;;;;;;;;;;;;;;;AAgBAvR,MAAM,CAACC,OAAP,GAAiB;AACfwR,QAAM,EAAE,QADO;AAEfC,QAAM,EAAE;AAFO,CAAjB,C;;;;;;;;;;;AChBA;;;;;;;;;;;;;;;AAgBA,IAAMC,OAAO,GAAG;AACdC,UAAQ,EAAE,gCADI;AAEdC,cAAY,EAAE,uBAFA;AAGdC,sBAAoB,EAAE,mBAHR;AAIdC,YAAU,EAAE,yBAJE;AAKdC,YAAU,EAAE,yBALE;AAMd1S,MAAI,EAAE,mBANQ;AAOd2S,cAAY,EAAE,2BAPA;AAQdC,QAAM,EAAE;AARM,CAAhB;AAWAlS,MAAM,CAACC,OAAP,GAAiB0R,OAAjB,C;;;;;;;;;;;AC3BA;;;;;;;;;;;;;;;AAgBA3R,MAAM,CAACC,OAAP,GAAiB;AACf8M,iBAAe,EAAE,iBADF;AAEfC,MAAI,EAAE;AAFS,CAAjB,C;;;;;;;;;;;AChBA;;;;;;;;;;;;;;;AAgBAhN,MAAM,CAACC,OAAP,GAAiB;AACfkS,OAAK,EAAE,QADQ;AAEfC,aAAW,EAAE,gBAFE;AAGfC,UAAQ,EAAE,WAHK;AAIfC,gBAAc,EAAE,mBAJD;AAKfC,OAAK,EAAE,QALQ;AAMfC,aAAW,EAAE,gBANE;AAOfC,eAAa,EAAE,KAPA;AAQfC,aAAW,EAAE,KARE;AASfC,oBAAkB,EAAE,8BATL;AAUfC,6BAA2B,EAAE,+BAVd;AAWfC,iBAAe,EAAE,8BAXF;AAYfC,0BAAwB,EAAE;AAZX,CAAjB,C;;;;;;;;;;;AChBA;;;;;;;;;;;;;;;AAgBA9S,MAAM,CAACC,OAAP,GAAiB;AACf8S,aAAW,EAAE,CADE;AAEfC,4BAA0B,EAAE,CAFb;AAGfC,qBAAmB,EAAE,CAHN;AAIfC,mBAAiB,EAAE,CAJJ;AAKfC,aAAW,EAAE,CALE;AAMfC,aAAW,EAAE,CANE;AAOfC,oBAAkB,EAAE,CAPL;AAQfC,6BAA2B,EAAE,CARd;AASfC,iBAAe,EAAE,CATF;AAUfC,0BAAwB,EAAE;AAVX,CAAjB,C;;;;;;;;;;;AChBA;;;;;;;;;;;;;;;AAgBAxT,MAAM,CAACC,OAAP,GAAiB;AACf0M,KAAG,EAAE,KADU;AAEfE,KAAG,EAAE,KAFU;AAGfD,IAAE,EAAE;AAHW,CAAjB,C;;;;;;;;;;;AChBA;;;;;;;;;;;;;;;AAgBA,IAAME,mBAAmB,GAAG9T,mBAAO,CAAC,iFAAD,CAAnC;;AACA,IAAM0T,oBAAoB,GAAG1T,mBAAO,CAAC,mFAAD,CAApC;;AACA,IAAMya,8BAA8B,GAAGza,mBAAO,CAAC,uGAAD,CAA9C;;AACA,IAAM0a,oBAAoB,GAAG1a,mBAAO,CAAC,mFAAD,CAApC;;AAEA,IAAMsT,WAAW,GAAG;AAClBQ,qBAAmB,EAAnBA,mBADkB;AAElBJ,sBAAoB,EAApBA,oBAFkB;AAGlB+G,gCAA8B,EAA9BA,8BAHkB;AAIlBC,sBAAoB,EAApBA;AAJkB,CAApB;AAOA1T,MAAM,CAACC,OAAP,GAAiBqM,WAAjB,C;;;;;;;;;;;AC5BA;;;;;;;;;;;;;;;AAgBA,IAAMnS,GAAG,GAAGnB,mBAAO,CAAC,2BAAD,CAAnB;;AAEA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,yDAAD,CAA5B;;AACA,IAAMI,YAAY,GAAGJ,mBAAO,CAAC,yDAAD,CAA5B;;eACyBA,mBAAO,CAAC,qDAAD,C;IAAxBqF,Y,YAAAA,Y;;AACR,IAAMsV,gBAAgB,GAAG3a,mBAAO,CAAC,iEAAD,CAAhC;;AACA,IAAM8M,YAAY,GAAG9M,mBAAO,CAAC,yDAAD,CAA5B;;gBACmCA,mBAAO,CAAC,6CAAD,C;IAAlCqQ,sB,aAAAA,sB;;AAER,IAAM7P,OAAO,GAAGR,mBAAO,CAAC,2DAAD,CAAvB;;AACA,IAAME,OAAO,GAAGF,mBAAO,CAAC,+CAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,yDAAD,CAA5B;;AACA,IAAMkB,IAAI,GAAGjB,YAAY,CAAC4W,KAA1B;IACQ+D,a,GAA6Fpa,O,CAA7Foa,a;IAAeC,W,GAA8Era,O,CAA9Eqa,W;IAAa9Z,Y,GAAiEP,O,CAAjEO,Y;IAAciX,c,GAAmDxX,O,CAAnDwX,c;IAAgBhX,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AAElF,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf,C,CAEA;;AACAtQ,OAAO,CAACqa,WAAR,CAAoB9Z,YAAY,CAACkB,KAAjC;;AAEA,SAAS6Y,QAAT,GAA6C;AAAA,MAA3BC,SAA2B,uEAAf,EAAe;AAAA,MAAX/R,IAAW,uEAAJ,EAAI;AAC3C,MAAMhH,GAAG,GAAGf,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B6Y,wBAAnD,EAA6E;AACvF9Z,QAAI,EAAEA,IADiF;AAEvF6Z,aAAS,EAATA,SAFuF;AAGvF/R,QAAI,EAAJA,IAHuF;AAIvFjJ,OAAG,EAAEG,OAAO,CAAC0V;AAJ0E,GAA7E,CAAZ;AAOA,QAAM,IAAIqF,KAAJ,CAAUzZ,MAAM,CAACQ,GAAP,CAAWjB,YAAY,CAACkB,KAAxB,EAA+BD,GAA/B,CAAV,CAAN;AACD;;AAED,SAASkZ,OAAT,GAA4C;AAAA,MAA3BH,SAA2B,uEAAf,EAAe;AAAA,MAAX/R,IAAW,uEAAJ,EAAI;AAC1C,MAAMhH,GAAG,GAAGf,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6Y,qBAAlD,EAAyE;AACnFja,QAAI,EAAEA,IAD6E;AAEnF6Z,aAAS,EAATA,SAFmF;AAGnF/R,QAAI,EAAJA;AAHmF,GAAzE,CAAZ;AAMAoS,SAAO,CAACC,IAAR,+BAAoCjb,YAAY,CAACkb,cAAb,EAApC,cAAqEtZ,GAArE;AACD;;AAEDgF,MAAM,CAACC,OAAP,GAAiB;AACfzG,SAAO,EAAPA,OADe;AAEf+a,WAAS,EAAEX,aAFI;AAGfC,aAAW,EAAXA,WAHe;AAIfhU,iBAAe,EAAE8T,gBAAgB,CAACa,GAJnB;AAKf1O,cAAY,EAAZA,YALe;AAMf/L,cAAY,EAAZA,YANe;;AAOf;;;;;AAKA0a,QAAM,EAAE,gBAASC,SAAT,EAAoB;AAC1B,QAAIta,MAAM,GAAG,EAAb;;AACA,QAAI;AACF;AACAhB,kBAAY,CAACub,WAAb,CAAyBD,SAAzB;;AACA,UACE,CAACvb,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAAC5T,wBAAnC,CAAD,IACA,CAAC3H,YAAY,CAACuN,SAAb,CAAuBgO,SAAS,CAAC5T,wBAAjC,CAFH,EAGE;AACAgT,gBAAQ,CAAC,0BAAD,EAA6B,SAA7B,CAAR;AACD,OALD,MAKO,IAAI,CAAC3a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAAC5T,wBAAnC,CAAL,EAAmE;AACxEoT,eAAO,CAAC,0BAAD,EAA6B,SAA7B,CAAP;AACD;;AAED,UACE,CAAC/a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAAC7Y,iBAAnC,CAAD,IACA,CAAC1C,YAAY,CAACuN,SAAb,CAAuBgO,SAAS,CAAC7Y,iBAAjC,CAFH,EAGE;AACAiY,gBAAQ,CAAC,mBAAD,EAAsB,SAAtB,CAAR;AACD,OALD,MAKO,IAAI,CAAC3a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAAC7Y,iBAAnC,CAAL,EAA4D;AACjEqY,eAAO,CAAC,mBAAD,EAAsB,SAAtB,CAAP;AACD;;AAED,UAAIQ,SAAS,CAACtO,eAAV,IAA6B,CAAC/H,YAAY,CAACyH,YAAD,CAAZ,CAA2BQ,QAA3B,CAAoCoO,SAAS,CAACtO,eAA9C,CAAlC,EAAkG;AAChG0N,gBAAQ,CAAC,iBAAD,EAAoB,4CAApB,CAAR;AACD,OAFD,MAEO,IAAIY,SAAS,CAACtO,eAAd,EAA+B;AACpC8N,eAAO,CAAC,iBAAD,EAAoB,4CAApB,CAAP;AACD;;AAED,UACEQ,SAAS,CAAClb,OAAV,IACAkb,SAAS,CAAClb,OAAV,CAAkBob,KADlB,IAEA,CAACvW,YAAY,CAACtE,YAAD,CAAZ,CAA2BuM,QAA3B,CAAoCoO,SAAS,CAAClb,OAAV,CAAkBob,KAAtD,CAHH,EAIE;AACAd,gBAAQ,CAAC,UAAD,EAAa,iBAAb,CAAR;AACD,OAND,MAMO,IAAIY,SAAS,CAAClb,OAAV,IAAqBkb,SAAS,CAAClb,OAAV,CAAkBob,KAA3C,EAAkD;AACvDV,eAAO,CAAC,UAAD,EAAa,iBAAb,CAAP;AACD;;AAED,UAAIQ,SAAS,CAACG,eAAV,IAA6B,CAAC1b,YAAY,CAAC2b,QAAb,CAAsBJ,SAAS,CAACG,eAAhC,CAAlC,EAAoF;AAClFf,gBAAQ,CAAC,iBAAD,EAAoB,yBAApB,CAAR;AACD,OAFD,MAEO,IAAIY,SAAS,CAACG,eAAd,EAA+B;AACpCX,eAAO,CAAC,iBAAD,EAAoB,yBAApB,CAAP;AACD;;AAED,UAAIQ,SAAS,CAACG,eAAV,IAA6B1b,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAAC5U,MAAnC,CAAjC,EAA6E;AAC3EgU,gBAAQ,CAAC,8BAAD,EAAiC,QAAjC,CAAR;AACD;;AAED,UAAIY,SAAS,CAACG,eAAV,IAA6B,CAAC1b,YAAY,CAACgM,QAAb,CAAsBuP,SAAS,CAAC5U,MAAhC,CAAlC,EAA2E;AACzEgU,gBAAQ,CAAC,QAAD,EAAW,QAAX,CAAR;AACD;;AAED,UAAI,CAAC3a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACjS,WAAnC,CAAD,IAAoD,CAACtJ,YAAY,CAACoD,QAAb,CAAsBmY,SAAS,CAACjS,WAAhC,CAAzD,EAAuG;AACrGqR,gBAAQ,CAAC,aAAD,EAAgB,QAAhB,CAAR;AACD,OAFD,MAEO,IAAI,CAAC3a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACjS,WAAnC,CAAL,EAAsD;AAC3DyR,eAAO,CAAC,aAAD,EAAgB,QAAhB,CAAP;AACD;;AAED,UAAI,CAAC/a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACja,gBAAnC,CAAD,IAAyD,CAACtB,YAAY,CAACoD,QAAb,CAAsBmY,SAAS,CAACja,gBAAhC,CAA9D,EAAiH;AAC/GqZ,gBAAQ,CAAC,kBAAD,EAAqB,QAArB,CAAR;AACD,OAFD,MAEO,IAAI,CAAC3a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACja,gBAAnC,CAAL,EAA2D;AAChEyZ,eAAO,CAAC,kBAAD,EAAqB,QAArB,CAAP;AACD;;AAED,UACE,CAAC/a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACha,kBAAnC,CAAD,IACA,CAACvB,YAAY,CAACoD,QAAb,CAAsBmY,SAAS,CAACha,kBAAhC,CAFH,EAGE;AACAoZ,gBAAQ,CAAC,oBAAD,EAAuB,QAAvB,CAAR;AACD,OALD,MAKO,IAAI,CAAC3a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACha,kBAAnC,CAAL,EAA6D;AAClEwZ,eAAO,CAAC,oBAAD,EAAuB,QAAvB,CAAP;AACD;;AAED,UAAI,CAAC/a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACK,YAAnC,CAAD,IAAqD,CAAC5b,YAAY,CAACoD,QAAb,CAAsBmY,SAAS,CAACK,YAAhC,CAA1D,EAAyG;AACvGjB,gBAAQ,CAAC,cAAD,EAAiB,QAAjB,CAAR;AACD,OAFD,MAEO,IAAI,CAAC3a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACK,YAAnC,CAAL,EAAuD;AAC5Db,eAAO,CAAC,cAAD,EAAiB,QAAjB,CAAP;AACD;;AAED,UACE,CAAC/a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACna,kBAAnC,CAAD,IACA,CAACpB,YAAY,CAACoD,QAAb,CAAsBmY,SAAS,CAACna,kBAAhC,CAFH,EAGE;AACAuZ,gBAAQ,CAAC,oBAAD,EAAuB,QAAvB,CAAR;AACD,OALD,MAKO,IAAI,CAAC3a,YAAY,CAACgF,WAAb,CAAyBuW,SAAS,CAACna,kBAAnC,CAAL,EAA6D;AAClE2Z,eAAO,CAAC,oBAAD,EAAuB,QAAvB,CAAP;AACD,OArFC,CAuFF;;;AACA,UAAI/a,YAAY,CAACoD,QAAb,CAAsBmY,SAAS,CAACjS,WAAhC,KAAgD,gBAAuB,WAA3E,EAAwF;AACtFiS,iBAAS,CAACjS,WAAV,GAAwB,IAAxB;AACD,OA1FC,CA4FF;;;AACA,UAAI,KAAJ,EAAwC,EAcvC;;AAEDrI,YAAM,GAAGsa,SAAT;AACD,KA9GD,CA8GE,OAAOlX,GAAP,EAAY;AACZhD,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B6Z,gBAAnD,EAAqE;AACnE9a,YAAI,EAAEA,IAD6D;AAEnEnB,WAAG,EAAEG,OAAO,CAAC0V;AAFsD,OAArE,CAFF;AAQAxU,YAAM,GAAG,EAAT;AACD,KA1HyB,CA4H1B;;;AACA,QAAIA,MAAM,CAACyB,iBAAX,EAA8B;AAC5BrC,aAAO,CAACyb,eAAR,CAAwB,IAAxB;AACD,KA/HyB,CAiI1B;;;AACA,QAAI7a,MAAM,CAACZ,OAAP,IAAkBL,YAAY,CAACoD,QAAb,CAAsBnC,MAAM,CAACZ,OAA7B,CAAtB,EAA6D;AAC3D,UAAIY,MAAM,CAACZ,OAAP,CAAe0b,eAAf,KAAmCta,SAAvC,EAAkD;AAChDpB,eAAO,CAACyb,eAAR,CAAwB7a,MAAM,CAACZ,OAAP,CAAe0b,eAAvC;AACD;;AAED,UACE9a,MAAM,CAACZ,OAAP,CAAegB,MAAf,IACArB,YAAY,CAACoD,QAAb,CAAsBnC,MAAM,CAACZ,OAAP,CAAegB,MAArC,CADA,IAEArB,YAAY,CAACgc,UAAb,CAAwB/a,MAAM,CAACZ,OAAP,CAAegB,MAAf,CAAsBQ,GAA9C,CAHF,EAIE;AACAxB,eAAO,CAACoa,aAAR,CAAsBxZ,MAAM,CAACZ,OAAP,CAAegB,MAArC;AACAhB,eAAO,CAACqa,WAAR,CAAoBra,OAAO,CAACO,YAAR,CAAqBuX,MAAzC;AAEA9W,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BgK,yBAAnD,EAA8E;AAC5Elb,cAAI,EAAEA;AADsE,SAA9E,CAFF;AAMD,OAdD,MAcO,IAAIE,MAAM,CAACZ,OAAP,CAAegB,MAAnB,EAA2B;AAChCsZ,gBAAQ,CAAC,gBAAD,EAAmB,QAAnB,CAAR;AACD;;AAED,UAAI1Z,MAAM,CAACZ,OAAP,CAAeob,KAAf,KAAyBha,SAA7B,EAAwC;AACtCpB,eAAO,CAACqa,WAAR,CAAoBzZ,MAAM,CAACZ,OAAP,CAAeob,KAAnC;AACApa,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BiK,oBAAnD,EAAyE;AACvEnb,cAAI,EAAEA,IADiE;AAEvE0a,eAAK,EAAE5D,cAAc,CAAC,MAAM5W,MAAM,CAACZ,OAAP,CAAeob,KAAtB;AAFkD,SAAzE,CAFF;AAOD;AACF,KAnKyB,CAqK1B;;;AACA,QAAIxa,MAAM,CAACyB,iBAAX,EAA8B;AAC5BrB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BkK,8BAAnD,EAAmF;AACjFpb,YAAI,EAAEA;AAD2E,OAAnF,CAFF;AAMD,KA7KyB,CA+K1B;;;AACAE,UAAM,CAACI,MAAP,GAAiBJ,MAAM,CAACZ,OAAP,IAAkBY,MAAM,CAACZ,OAAP,CAAegB,MAAlC,IAA6CA,MAA7D,CAhL0B,CAkL1B;;AACA,WAAO,IAAIL,GAAJ,CAAQC,MAAR,CAAP;AACD;AAhMc,CAAjB,C;;;;;;;;;;;;;;;;;;;ACzDA;;;;;;;;;;;;;;;eAgB0FpB,mBAAO,CAAC,+DAAD,C;IAA3Fuc,Q,YAAAA,Q;IAAUC,M,YAAAA,M;IAAQC,M,YAAAA,M;IAAQC,Q;IAASC,K,YAAAA,K;IAAOC,M,YAAAA,M;IAAQC,Q,YAAAA,Q;IAAUC,K,YAAAA,K;IAAO9T,I,YAAAA,I;IAAM+T,M,YAAAA,M;;AAE/E,IAAMC,kBAAkB,GAAGhU,IAAI,CAAC;AAC9BY,IAAE,EAAEkT,KAAK,CAAC,CAACN,MAAM,EAAP,EAAWC,MAAM,EAAjB,CAAD,CADqB;AAE9BQ,YAAU,EAAER,MAAM,EAFY;AAG9BzT,MAAI,EAAEyT,MAAM,EAHkB;AAI9BxN,aAAW,EAAE4N,QAAQ,CAACJ,MAAM,EAAP,CAJS;AAK9BzN,KAAG,EAAE6N,QAAQ,CAACC,KAAK,CAAC,CAACN,MAAM,EAAP,EAAWC,MAAM,EAAjB,CAAD,CAAN;AALiB,CAAD,CAA/B;AAQA,IAAMS,oBAAoB,GAAGlU,IAAI,CAAC;AAChCY,IAAE,EAAEkT,KAAK,CAAC,CAACN,MAAM,EAAP,EAAWC,MAAM,EAAjB,CAAD,CADuB;AAEhCzT,MAAI,EAAEyT,MAAM,EAFoB;AAGhCtR,KAAG,EAAEsR,MAAM,EAHqB;AAIhCpR,OAAK,EAAEyR,KAAK,CAAC,CAACN,MAAM,EAAP,EAAWC,MAAM,EAAjB,EAAqBC,QAAO,EAA5B,CAAD;AAJoB,CAAD,CAAjC;AAOA,IAAMS,uBAAuB,GAAGnU,IAAI,CAAC;AACnCY,IAAE,EAAEkT,KAAK,CAAC,CAACN,MAAM,EAAP,EAAWC,MAAM,EAAjB,CAAD,CAD0B;AAEnC5M,MAAI,EAAE4M,MAAM,EAFuB;AAGnCW,QAAM,EAAEN,KAAK,CAAC,CAACN,MAAM,EAAP,EAAWC,MAAM,EAAjB,CAAD,CAHsB;AAInCY,SAAO,EAAER,QAAQ,CAACD,MAAM,EAAP,CAJkB;AAKnCU,UAAQ,EAAET,QAAQ,CAACD,MAAM,EAAP,CALiB;AAMnCW,WAAS,EAAEV,QAAQ,CAACC,KAAK,CAAC,CAACF,MAAM,EAAP,EAAWD,KAAK,CAACO,oBAAD,CAAhB,CAAD,CAAN,CANgB;AAOnCvX,kBAAgB,EAAEkX,QAAQ,CAACH,QAAO,EAAR,CAPS;AAQnC7K,0BAAwB,EAAEgL,QAAQ,CAACL,MAAM,EAAP,CARC;AASnC1K,wBAAsB,EAAE+K,QAAQ,CAACL,MAAM,EAAP;AATG,CAAD,CAApC;AAYA,IAAMgB,oBAAoB,GAAGxU,IAAI,CAAC;AAChCY,IAAE,EAAEkT,KAAK,CAAC,CAACN,MAAM,EAAP,EAAWC,MAAM,EAAjB,CAAD,CADuB;AAEhCzT,MAAI,EAAEyT,MAAM,EAFoB;AAGhCtR,KAAG,EAAEsR,MAAM,EAHqB;AAIhCjU,QAAM,EAAEiU,MAAM,EAJkB;AAKhC5M,MAAI,EAAEgN,QAAQ,CAACJ,MAAM,EAAP,CALkB;AAMhCgB,wBAAsB,EAAEZ,QAAQ,CAACH,QAAO,EAAR,CANA;AAOhClK,gBAAc,EAAEgK,MAAM,EAPU;AAQhCkB,OAAK,EAAEZ,KAAK,CAAC,CAACF,MAAM,EAAP,EAAWD,KAAK,CAACK,kBAAD,CAAhB,CAAD,CARoB;AAShCtL,YAAU,EAAEoL,KAAK,CAAC,CAACF,MAAM,EAAP,EAAWD,KAAK,CAACQ,uBAAD,CAAhB,CAAD,CATe;AAUhCI,WAAS,EAAEV,QAAQ,CAACC,KAAK,CAAC,CAACF,MAAM,EAAP,EAAWD,KAAK,CAACO,oBAAD,CAAhB,CAAD,CAAN,CAVa;AAWhCI,UAAQ,EAAEV,MAAM,EAXgB;AAYhCe,0BAAwB,EAAEd,QAAQ,CAACH,QAAO,EAAR,CAZF;AAahCkB,mBAAiB,EAAEf,QAAQ,CAACH,QAAO,EAAR,CAbK;AAchCnU,OAAK,EAAEsU,QAAQ,CAACH,QAAO,EAAR;AAdiB,CAAD,CAAjC;AAiBA,IAAMmB,WAAW,GAAG7U,IAAI,CAAC;AACvB8U,IAAE,EAAEjB,QAAQ,CAACJ,MAAM,EAAP,CADW;AAEvBsB,GAAC,EAAElB,QAAQ,CAACF,KAAK,CAACH,MAAM,EAAP,CAAN,CAFY;AAGvBwB,IAAE,EAAEnB,QAAQ,CAACE,MAAM,CAACN,MAAM,EAAP,EAAWD,MAAM,EAAjB,CAAP,CAHW;AAIvByB,WAAS,EAAExB,MAAM,EAJM;AAKvBhP,WAAS,EAAEkP,KAAK,CAACH,MAAM,EAAP;AALO,CAAD,CAAxB;AAQA,IAAM0B,kBAAkB,GAAGlV,IAAI,CAAC;AAC9BlC,QAAM,EAAE+V,QAAQ,CAACJ,MAAM,EAAP,CADc;AAE9B1M,SAAO,EAAE+M,KAAK,CAAC,CAACN,MAAM,EAAP,EAAWC,MAAM,EAAjB,CAAD,CAFgB;AAG9B7V,WAAS,EAAEkW,KAAK,CAAC,CAACN,MAAM,EAAP,EAAWC,MAAM,EAAjB,CAAD,CAHc;AAI9BhP,WAAS,EAAEkP,KAAK,CAACa,oBAAD,CAJc;AAK9BW,gBAAc,EAAEtB,QAAQ,CAACE,MAAM,CAACN,MAAM,EAAP,EAAWD,MAAM,EAAjB,CAAP,CALM;AAM9BvX,oBAAkB,EAAE4X,QAAQ,CAACH,QAAO,EAAR,CANE;AAO9B0B,kBAAgB,EAAEvB,QAAQ,CAACJ,MAAM,EAAP,CAPI;AAQ9B4B,QAAM,EAAExB,QAAQ,CAACC,KAAK,CAAC,CAACF,MAAM,EAAP,EAAWG,MAAM,CAACN,MAAM,EAAP,EAAWoB,WAAX,CAAjB,CAAD,CAAN;AARc,CAAD,CAA/B;;AAWA,IAAMS,oBAAoB,GAAG,SAAvBA,oBAAuB,CAASC,QAAT,EAAmB;AAAA,kBAC9BhC,QAAQ,CAACgC,QAAD,EAAWL,kBAAX,CADsB;AAAA;AAAA,MACvCM,KADuC;;AAE9C,SAAO,CAACA,KAAR;AACD,CAHD;;AAKAxX,MAAM,CAACC,OAAP,GAAiBqX,oBAAjB,C;;;;;;;;;;;;;;;;;ACtFA;;;;;;;;;;;;;;;AAgBA,IAAMne,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMiX,eAAe,GAAGjX,mBAAO,CAAC,wEAAD,CAA/B;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,kDAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAM0X,WAAW,GAAG1X,mBAAO,CAAC,wDAAD,CAA3B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;AAEA,IAAM5P,IAAI,GAAGjB,YAAY,CAACK,UAA1B;;IAEMA,U;;;AACJ,wBAAc;AAAA;;AACZ,SAAKme,OAAL,GAAe,KAAf;AACA,SAAKC,KAAL,GAAa,EAAb;AACD;;;;4BAEOtd,M,EAAQsI,U,EAAYjC,W,EAAiD;AAAA,qFAAJ,EAAI;AAAA,UAAlCwC,OAAkC,QAAlCA,OAAkC;AAAA,UAAzB7F,gBAAyB,QAAzBA,gBAAyB;;AAC3E,UAAIua,aAAa,GAAG,EAApB;;AAEA,UAAIjV,UAAU,IAAIA,UAAU,CAACkV,UAA7B,EAAyC;AACvCD,qBAAa,CAACjH,WAAW,CAACC,UAAb,CAAb,GAAwCkH,kBAAkB,CAACnV,UAAU,CAACkV,UAAZ,CAA1D;AACAlV,kBAAU,CAACkV,UAAX,GAAwBD,aAAa,CAACjH,WAAW,CAACC,UAAb,CAArC;AACD;;AACD,UAAIjO,UAAU,IAAIA,UAAU,CAACoV,UAA7B,EAAyC;AACvCH,qBAAa,CAACjH,WAAW,CAACE,EAAb,CAAb,GAAgCiH,kBAAkB,CAACnV,UAAU,CAACoV,UAAZ,CAAlD;AACApV,kBAAU,CAACoV,UAAX,GAAwBH,aAAa,CAACjH,WAAW,CAACE,EAAb,CAArC;AACD;;AAED,UAAIxW,MAAM,IAAIA,MAAM,CAACyB,iBAArB,EAAwC;AACtCrB,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BkK,8BAAnD,EAAmF;AACjFpb,cAAI,EAAJA;AADiF,SAAnF,CAFF;AAMA;AACD;;AAED,WAAK2I,OAAL,CAAaH,UAAb,EAAyBjC,WAAzB,EAAsC;AAAEwC,eAAO,EAAPA,OAAF;AAAW7F,wBAAgB,EAAhBA;AAAX,OAAtC,EAAqEua,aAArE;AACD;;;4BAEOjV,U,EAAYjC,W,SAAgE;AAAA,UAAjDwC,OAAiD,SAAjDA,OAAiD;AAAA,UAAxC7F,gBAAwC,SAAxCA,gBAAwC;AAAA,UAApBua,aAAoB,uEAAJ,EAAI;AAClF,WAAKD,KAAL,CAAWnY,IAAX,CAAgB;AACdwY,iBAAS,EAAErV,UAAU,CAACqV,SADR;AAEdrV,kBAAU,EAAEA,UAFE;AAGdsV,gBAAQ,EAAE,oBAAM;AACd,cAAI/U,OAAJ,EAAa;AACXgN,2BAAe,CAACgI,gBAAhB,CAAiCvV,UAAjC,EAA6CO,OAA7C,EAAsD;AAAE7F,8BAAgB,EAAhBA;AAAF,aAAtD,EAA4Eua,aAA5E;AACD,WAFD,MAEO;AACL1H,2BAAe,CAACiI,eAAhB,CAAgCxV,UAAhC,EAA4C;AAAEtF,8BAAgB,EAAhBA;AAAF,aAA5C,EAAkEua,aAAlE;AACD;AACF;AATa,OAAhB;AAYAnd,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6c,WAAlD,EAA+D;AAC7Dje,YAAI,EAAJA,IAD6D;AAE7Dke,iBAAS,EAAE,QAFkD;AAG7DC,aAAK,EAAE;AAHsD,OAA/D,CAFF;AASA5X,iBAAW,CAAChF,UAAZ,CAAuB6c,WAAvB,CAAmC5V,UAAnC;;AAEA,UAAI,CAAC,KAAK+U,OAAV,EAAmB;AACjB;AACA,aAAKa,WAAL,CAAiB5V,UAAjB;AACD;;AAED,aAAO,IAAP;AACD;;;gCAEWA,U,EAAY;AACtB,WAAK+U,OAAL,GAAe,KAAf,CADsB,CAGtB;;AACA,UAAI,KAAKC,KAAL,IAAc,KAAKA,KAAL,CAAWlZ,MAA7B,EAAqC;AACnC,YAAI6Z,KAAK,GAAG,KAAKX,KAAL,CAAWa,KAAX,EAAZ;;AAEA,YAAIF,KAAJ,EAAW;AACT,eAAKZ,OAAL,GAAe,IAAf;;AACA,cAAIY,KAAK,CAACL,QAAN,IAAkB7e,YAAY,CAACgc,UAAb,CAAwBkD,KAAK,CAACL,QAA9B,CAAtB,EAA+D;AAC7DK,iBAAK,CAACL,QAAN,CAAetV,UAAf;AACD;AACF;AACF;AACF;;;;;;AAGH1C,MAAM,CAACC,OAAP,GAAiB3G,UAAjB,C;;;;;;;;;;;AC3GA;;;;;;;;;;;;;;;AAgBA,IAAMH,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;AAEA;;;;;;AAIA,IAAMS,YAAY,GAAG;AACnB;;;;AAIA+B,MALmB,kBAKD;AAAA,QAAbpB,MAAa,uEAAJ,EAAI;AAChB,SAAK4d,QAAL,GAAgB5d,MAAM,CAAC2a,YAAP,IAAuB3a,MAAM,CAAC2a,YAAP,CAAoBiD,QAA3D;AACD,GAPkB;;AAQnB;;;;AAIAQ,SAZmB,mBAYX9V,UAZW,EAYC;AAClB,QAAIvJ,YAAY,CAACgc,UAAb,CAAwB,KAAK6C,QAA7B,CAAJ,EAA4C;AAC1C,WAAKA,QAAL,CAActV,UAAd;AACD;AACF;AAhBkB,CAArB;AAmBA1C,MAAM,CAACC,OAAP,GAAiBxG,YAAjB,C;;;;;;;;;;;;;;;;;ACzCA;;;;;;;;;;;;;;;AAgBA,IAAM2G,YAAY,GAAGpH,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMI,YAAY,GAAGJ,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAM2a,gBAAgB,GAAG3a,mBAAO,CAAC,kEAAD,CAAhC;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,kDAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMse,oBAAoB,GAAGte,mBAAO,CAAC,0EAAD,CAApC;;eACqBA,mBAAO,CAAC,0DAAD,C;IAApBuD,Q,YAAAA,Q;;IACAxC,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AAEtC,IAAMC,IAAI,GAAGjB,YAAY,CAAC0C,mBAA1B;;IAEMA,mB;;;AACJ;AAEA,+BAAYvB,MAAZ,EAAoB;AAAA;;AAClB,QAAIA,MAAJ,EAAY;AACV,UACGA,MAAM,CAAC8B,YAAP,IAAuBK,QAAQ,CAACnC,MAAM,CAAC8B,YAAP,CAAoBuK,SAArB,CAAhC,IACCrM,MAAM,CAAC8B,YAAP,IAAuB,CAAC9B,MAAM,CAAC8B,YAAP,CAAoBuK,SAF/C,EAGE;AACArM,cAAM,CAAC8B,YAAP,CAAoBuK,SAApB,GAAgC,EAAhC;AACD;;AAED,WAAKgS,UAAL,GAAkBre,MAAlB;AACA,WAAKse,mBAAL,GAA2Bte,MAAM,CAAC8B,YAAP,GAAsB9C,YAAY,CAACub,WAAb,CAAyBva,MAAM,CAAC8B,YAAhC,CAAtB,GAAsE,IAAjG;AACD,KAVD,MAUO;AACL,WAAKuc,UAAL,GAAkB,IAAlB;AACA,WAAKC,mBAAL,GAA2B,IAA3B;AACD;AACF;;;;2CAEsBtX,Q,EAAU;AAC/BhB,kBAAY,CAACuY,sBAAb,CAAoCvX,QAApC;AACD,K,CAED;;;;0CAEsB;AACpB,UAAI,CAAC,KAAKqX,UAAN,IAAoB,CAAC,KAAKC,mBAA9B,EAAmD;AACjD,eAAO,KAAP;AACD;;AACD,UAAIE,mBAAmB,GAAGtB,oBAAoB,CAAC,KAAKoB,mBAAN,CAA9C;;AAEA,UAAI,CAACE,mBAAL,EAA0B;AACxB,aAAKH,UAAL,CAAgBje,MAAhB,CAAuBQ,GAAvB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B0d,uBAAnD,EAA4E;AAC1E3e,cAAI,EAAJA;AAD0E,SAA5E,CAFF;;AAOA,eAAO,KAAP;AACD;;AAED,aAAO,IAAP;AACD;;;mCAEc;AAAA;;AACb,UAAI,CAAC,KAAKue,UAAL,CAAgB5D,eAAjB,IAAoC,CAAC,KAAK4D,UAAL,CAAgB3Y,MAAzD,EAAiE;AAC/D;AACD;;AAED,UAAIgZ,gBAAgB,GAAG1T,IAAI,CAACC,SAAL,CAAe,KAAKqT,mBAApB,CAAvB;AACAK,iBAAW,CAAC,YAAM;AAChBpF,wBAAgB,CAACa,GAAjB,CAAqB,KAAI,CAACkE,mBAAL,CAAyB9Y,SAA9C,EAAyD,KAAI,CAAC6Y,UAAL,CAAgB3Y,MAAzE,EACG/C,IADH,CACQ,UAAAic,kBAAkB,EAAI;AAC1B,eAAI,CAACP,UAAL,CAAgBje,MAAhB,CAAuBQ,GAAvB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B2d,eAAlD,EAAmE;AACjE/e,gBAAI,EAAJA,IADiE;AAEjE0F,qBAAS,EAAE,KAAI,CAAC8Y,mBAAL,CAAyB9Y;AAF6B,WAAnE,CAFF;;AAOA,cAAMsZ,6BAA6B,GAAG9T,IAAI,CAACC,SAAL,CAAe2T,kBAAf,CAAtC;;AAEA,cAAIE,6BAA6B,KAAKJ,gBAAtC,EAAwD;AACtDA,4BAAgB,GAAGI,6BAAnB;;AAEA,iBAAI,CAACC,kBAAL,CAAwBH,kBAAxB;;AAEA,iBAAI,CAACP,UAAL,CAAgBje,MAAhB,CAAuBQ,GAAvB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B8d,6BAAlD,EAAiF;AAC/Elf,kBAAI,EAAJA,IAD+E;AAE/E0F,uBAAS,EAAE,KAAI,CAAC8Y,mBAAL,CAAyB9Y;AAF2C,aAAjF,CAFF;AAOD,WAZD,MAYO;AACL,iBAAI,CAAC6Y,UAAL,CAAgBje,MAAhB,CAAuBQ,GAAvB,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B+d,iCAAlD,EAAqF;AACnFnf,kBAAI,EAAJA,IADmF;AAEnF0F,uBAAS,EAAE,KAAI,CAAC8Y,mBAAL,CAAyB9Y;AAF+C,aAArF,CAFF;AAOD;AACF,SAhCH,WAiCS,UAAA0Z,EAAE,EAAI;AACX,eAAI,CAACb,UAAL,CAAgBje,MAAhB,CAAuBQ,GAAvB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8Boe,cAAnD,EAAmE;AACjErf,gBAAI,EAAJA,IADiE;AAEjE0F,qBAAS,EAAE,KAAI,CAAC8Y,mBAAL,CAAyB9Y;AAF6B,WAAnE,CAFF;AAOD,SAzCH;AA0CD,OA3CU,EA2CR,KAAK6Y,UAAL,CAAgB5D,eA3CR,CAAX;;AA6CA,WAAK4D,UAAL,CAAgBje,MAAhB,CAAuBQ,GAAvB,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BoO,gCAAnD,EAAqF;AACnFtf,YAAI,EAAJA,IADmF;AAEnF2a,uBAAe,EAAE,KAAK4D,UAAL,CAAgB5D;AAFkD,OAArF,CAFF;AAOD;;;0CACqB;AACpB,UAAI3Y,YAAY,GAAG,KAAKwc,mBAAxB;;AAEA,WAAK,IAAI9N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG1O,YAAY,CAACuK,SAAb,CAAuBjI,MAA3C,EAAmDoM,CAAC,EAApD,EAAwD;AACtD,YAAIxJ,QAAQ,GAAGlF,YAAY,CAACuK,SAAb,CAAuBmE,CAAvB,CAAf;;AAEA,aAAK6O,sBAAL,CAA4BrY,QAA5B;AACD;;AAED,WAAKqX,UAAL,CAAgBje,MAAhB,CAAuBQ,GAAvB,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BsO,uBAAnD,EAA4E;AAC1Exf,YAAI,EAAJA,IAD0E;AAE1E0F,iBAAS,EAAE,KAAK8Y,mBAAL,CAAyB9Y;AAFsC,OAA5E,CAFF;;AAQA,aAAO1D,YAAP;AACD;AAED;;;;;;;;;;;;+CASmH;AAAA;;AAAA,UAA1F0D,SAA0F,uEAA9E,KAAK8Y,mBAAL,CAAyB9Y,SAAqD;AAAA,UAA1CE,MAA0C,uEAAjC,KAAK4Y,mBAAL,CAAyB5Y,MAAQ;AACjH,aAAO,IAAInD,OAAJ,CAAY,UAACC,OAAD,EAAU+c,OAAV,EAAsB;AACvChG,wBAAgB,CAACa,GAAjB,CAAqB5U,SAArB,EAAgCE,MAAhC,EAAwC,IAAxC,EAA8C;AAAE8Z,sBAAY,EAAE;AAAhB,SAA9C,EACG7c,IADH,CACQ,UAAAwa,QAAQ,EAAI;AAChB,gBAAI,CAAC4B,kBAAL,CAAwB5B,QAAxB;;AACA3a,iBAAO,CAAC2a,QAAD,CAAP;AACD,SAJH,WAKS,UAAAsC,IAAI,EAAI,CAAE,CALnB;AAMD,OAPM,CAAP;AAQD;AAED;;;;;;;uCAImBtC,Q,EAAU;AAC3B,WAAKmB,mBAAL,GAA2Btf,YAAY,CAACub,WAAb,CAAyB4C,QAAzB,CAA3B;AACA,WAAKvb,mBAAL;AACD;;;gCAEW;AACV,aAAO,KAAKyc,UAAZ;AACD;;;oCAEe1f,G,EAAK;AACnB,UAAI,CAAC,KAAK2f,mBAAV,EAA+B;AAC7B,aAAKD,UAAL,CAAgBje,MAAhB,CAAuBQ,GAAvB,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2e,+BAAnD,EAAoF;AAClF5f,cAAI,EAAJA,IADkF;AAElFnB,aAAG,EAAHA;AAFkF,SAApF,CAFF;AAOD;;AACD,aAAO,KAAK2f,mBAAZ;AACD;;;;;;AAEH1Y,MAAM,CAACC,OAAP,GAAiBtE,mBAAjB,C;;;;;;;;;;;ACvMA;;;;;;;;;;;;;;;AAgBA,IAAMgW,OAAO,GAAG3Y,mBAAO,CAAC,gDAAD,CAAvB;;eACqBA,mBAAO,CAAC,0DAAD,C;IAApBmM,Q,YAAAA,Q;;AAER,IAAMzL,UAAU,GAAG;AACjB8B,MADiB,kBACe;AAAA,mFAAJ,EAAI;AAAA,QAAzB4b,gBAAyB,QAAzBA,gBAAyB;;AAC9B,QAAIA,gBAAgB,IAAIjS,QAAQ,CAACiS,gBAAD,CAAhC,EAAoD;AAClD1d,gBAAU,CAAC0d,gBAAX,GAA8BA,gBAA9B;AACD;;AAED,WAAO1d,UAAP;AACD,GAPgB;AASjBqgB,YATiB,wBASJ;AACX,QAAMC,OAAO,GAAGrI,OAAO,CAACC,QAAxB;;AAEA,QAAIlY,UAAU,CAAC0d,gBAAf,EAAiC;AAC/B,uBAAU4C,OAAV,cAAqBtgB,UAAU,CAAC0d,gBAAhC;AACD;;AAED,WAAO4C,OAAP;AACD;AAjBgB,CAAnB;AAoBAha,MAAM,CAACC,OAAP,GAAiBvG,UAAjB,C;;;;;;;;;;;;;;;;;ACvCA;;;;;;;;;;;;;;;eAgBuBV,mBAAO,CAAC,kDAAD,C;IAAtBihB,U,YAAAA,U;;IAEFtgB,U;;;AACJ,wBAAc;AAAA;;AACZ,SAAKqD,IAAL,GAAY,EAAZ;AACD;AAED;;;;;;;;sCAIkB5C,M,EAAQ;AACxB,WAAK4C,IAAL,CAAU,IAAV,IAAkBkd,MAAM,CAAC,CAAC,CAAC9f,MAAM,CAACqI,WAAV,CAAxB;AACA,WAAKzF,IAAL,CAAU,IAAV,IAAkBkd,MAAM,CAAC,CAAC,CAAC9f,MAAM,CAAC2a,YAAV,CAAxB;AACA,WAAK/X,IAAL,CAAU,IAAV,IAAkBkd,MAAM,CAAC,CAAC,CAAC9f,MAAM,CAACG,kBAAV,CAAxB;AACA,WAAKyC,IAAL,CAAU,IAAV,IAAkBkd,MAAM,CAAC,EAAE9f,MAAM,CAACI,MAAP,YAAyByf,UAA3B,CAAD,CAAxB;AACA,WAAKjd,IAAL,CAAU,IAAV,IAAkBkd,MAAM,CAAC9f,MAAM,CAACZ,OAAP,IAAkBY,MAAM,CAACZ,OAAP,CAAeob,KAAlC,CAAxB;AACA,WAAK5X,IAAL,CAAU,IAAV,IAAkBkd,MAAM,CAAC9f,MAAM,CAAC0G,wBAAR,CAAxB;AACA,WAAK9D,IAAL,CAAU,IAAV,IAAkBkd,MAAM,CAAC,CAAC,CAAC9f,MAAM,CAACgM,eAAV,CAAxB;AACA,WAAKpJ,IAAL,CAAU,IAAV,IAAkBkd,MAAM,CAAC,CAAC,CAAC9f,MAAM,CAACya,eAAV,CAAxB;AAEA7P,YAAM,CAACC,IAAP,CAAY,KAAKjI,IAAjB,EAAuBkI,OAAvB,CAA+B,UAASf,GAAT,EAAc;AAC3C,YAAI,CAAC,KAAKnH,IAAL,CAAUmH,GAAV,CAAL,EAAqB;AACnB,iBAAO,KAAKnH,IAAL,CAAUmH,GAAV,CAAP;AACD;AACF,OAJD,EAIG,IAJH;AAKD;AAED;;;;;;;oCAIgB;AACd,UAAIa,MAAM,CAACC,IAAP,CAAY,KAAKjI,IAAjB,EAAuBwB,MAAvB,GAAgC,CAApC,EAAuC;AACrC,aAAKxB,IAAL,CAAU,IAAV,IAAkB,CAAlB;AACD;;AACD,aAAO,KAAKA,IAAZ;AACD;;;;;;AAGHgD,MAAM,CAACC,OAAP,GAAiBtG,UAAjB,C;;;;;;;;;;;;;;;;;ACxDA;;;;;;;;;;;;;;;eAgB2BX,mBAAO,CAAC,6DAAD,C;IAA1Bsb,c,YAAAA,c;;gBAC0Dtb,mBAAO,CAAC,6DAAD,C;IAAjEe,Y,aAAAA,Y;IAAcyX,gB,aAAAA,gB;IAAkBD,qB,aAAAA,qB;;IAElCxB,iB;;;AACJ,+BAAc;AAAA;;AACZ,SAAKoK,QAAL,GAAgBpgB,YAAY,CAACuX,MAA7B;AACA,SAAK8I,MAAL;AACA,SAAKC,mBAAL,GAA2B,KAA3B;AACD;;;;wBAEGzF,K,EAAOnX,O,EAAS;AAClB,UAAI,CAAC,KAAK6c,SAAL,CAAe1F,KAAf,CAAL,EAA4B;AAC1B;AACD;;AAED,UAAI2F,UAAJ;;AACA,UAAI,KAAKF,mBAAT,EAA8B;AAC5BE,kBAAU,aAAM,KAAKH,MAAX,gBAAuB7I,qBAAqB,CAACqD,KAAD,CAA5C,cAAuDN,cAAc,EAArE,cAA2E7W,OAA3E,CAAV;AACD,OAFD,MAEO;AACL8c,kBAAU,aAAM,KAAKH,MAAX,gBAAuB5I,gBAAgB,CAACoD,KAAD,CAAvC,cAAkDN,cAAc,EAAhE,cAAsE7W,OAAtE,CAAV;AACD;;AAED,WAAK+c,UAAL,CAAgB5F,KAAhB,EAAuB,CAAC2F,UAAD,CAAvB;AACD;;;8BAESE,c,EAAgB;AACxB,aAAOA,cAAc,IAAI,KAAKN,QAA9B;AACD;;;gCAEWvF,K,EAAO;AACjB,UAAIA,KAAK,KAAKha,SAAd,EAAyB;AACvB,aAAKuf,QAAL,GAAgBpgB,YAAY,CAACkB,KAA7B;AACD,OAFD,MAEO;AACL,aAAKkf,QAAL,GAAgBvF,KAAhB;AACD;AACF;;;+BAEUA,K,EAAO8F,Y,EAAc;AAC9B,cAAQ9F,KAAR;AACE,aAAK7a,YAAY,CAACsB,IAAlB;AACE+Y,iBAAO,CAACC,IAAR,CAAasG,KAAb,CAAmBvG,OAAnB,EAA4BsG,YAA5B;AACA;;AACF,aAAK3gB,YAAY,CAAC2H,IAAlB;AACE0S,iBAAO,CAACwG,IAAR,CAAaD,KAAb,CAAmBvG,OAAnB,EAA4BsG,YAA5B;AACA;;AACF,aAAK3gB,YAAY,CAACkB,KAAlB;AACEmZ,iBAAO,CAACoD,KAAR,CAAcmD,KAAd,CAAoBvG,OAApB,EAA6BsG,YAA7B;AACA;;AACF;AACEtG,iBAAO,CAACpZ,GAAR,CAAY2f,KAAZ,CAAkBvG,OAAlB,EAA2BsG,YAA3B;AACA;AAZJ;AAcD;;;;;;AAGH1a,MAAM,CAACC,OAAP,GAAiB8P,iBAAjB,C;;;;;;;;;;;;;;;;;ACvEA;;;;;;;;;;;;;;;;AAgBA;;;;;;;;;;;;AAaA;AACA,IAAM/V,cAAc,GAAG;AACrBoR,gBAAc,EAAEpS,mBAAO,CAAC,iHAAD,CADF;AAErBsC,eAAa,EAAEtC,mBAAO,CAAC,+GAAD,CAFD;AAGrB2I,kBAAgB,EAAE3I,mBAAO,CAAC,qHAAD,CAHJ;AAIrBmC,gBAAc,EAAEnC,mBAAO,CAAC,iHAAD;AAJF,CAAvB;;eAOyCA,mBAAO,CAAC,6DAAD,C;IAAxCe,Y,YAAAA,Y;IAAciX,c,YAAAA,c;;AACtB,IAAM/W,cAAc,GAAGjB,mBAAO,CAAC,iEAAD,CAA9B;;AAEA,IAAM+W,iBAAiB,GAAG/W,mBAAO,CAAC,wEAAD,CAAjC;;AAEA,IAAI6hB,cAAc,GAAG9gB,YAAY,CAACuX,MAAlC;AACA,IAAI+I,mBAAmB,GAAG,KAA1B;AACA,IAAIS,gBAAgB,GAAG,IAAI/K,iBAAJ,EAAvB;;IAEMkK,U;;;AACJ,sBAAYpR,IAAZ,EAAkB;AAAA;;AAChB,SAAKA,IAAL,GAAYA,IAAZ;AACA,SAAKwR,mBAAL,GAA2BA,mBAA3B;AACD;;;;+BAEUzF,K,EAAOnX,O,EAAS;AACzB,UAAImX,KAAK,GAAGiG,cAAZ,EAA4B;AAC1B;AACD;;AAEDC,sBAAgB,CAAC9f,GAAjB,CAAqB4Z,KAArB,EAA4BnX,OAA5B;AACD;;;wBAEGmX,K,EAAOnX,O,EAA8B;AAAA,UAArB+P,WAAqB,uEAAP,KAAO;;AACvC,UAAIA,WAAJ,EAAiB;AACf;AACD;;AACD,UAAI;AACF,aAAKuN,UAAL,CAAgBnG,KAAhB,EAAuBnX,OAAvB;AACD,OAFD,CAEE,OAAOD,GAAP,EAAY;AACZ4W,eAAO,CAACoD,KAAR,CAAc,qBAAd,EAAqCha,GAArC;AACD;AACF;;;yBAEIC,O,EAAS;AACZ,WAAKsd,UAAL,CAAgBhhB,YAAY,CAACsB,IAA7B,EAAmCoC,OAAnC;AACD;;;0BACKA,O,EAAS;AACb,WAAKsd,UAAL,CAAgBhhB,YAAY,CAACoR,KAA7B,EAAoC1N,OAApC;AACD;;;yBACIA,O,EAAS;AACZ,WAAKsd,UAAL,CAAgBhhB,YAAY,CAAC2H,IAA7B,EAAmCjE,OAAnC;AACD;;;0BACKA,O,EAAS;AACb,WAAKsd,UAAL,CAAgBhhB,YAAY,CAACkB,KAA7B,EAAoCwC,OAApC;AACD;;;;;;AAGH,SAASqM,SAAT,CAAmBjB,IAAnB,EAAyB;AACvB,SAAO,IAAIoR,UAAJ,CAAepR,IAAf,CAAP;AACD;;AAED,SAAS+K,aAAT,CAAuBpZ,MAAvB,EAA+B;AAC7BsgB,kBAAgB,GAAGtgB,MAAnB;AACD;;AAED,SAASqZ,WAAT,CAAqBe,KAArB,EAA4B;AAC1B,MAAIA,KAAK,KAAKha,SAAd,EAAyB;AACvBigB,kBAAc,GAAG9gB,YAAY,CAACkB,KAA9B;AACD,GAFD,MAEO;AACL4f,kBAAc,GAAGjG,KAAjB;AACD;AACF;;AAED,SAASoG,WAAT,GAAuB;AACrB,SAAOH,cAAP;AACD;;AAED,SAAS5F,eAAT,CAAyB5Q,KAAzB,EAAgC;AAC9BgW,qBAAmB,GAAGhW,KAAtB;AACAyW,kBAAgB,CAACT,mBAAjB,GAAuCA,mBAAvC;AACD;;AAED,SAASY,eAAT,GAA2B;AACzB,SAAOZ,mBAAP;AACD;;AAEDra,MAAM,CAACC,OAAP,GAAiB;AACflG,cAAY,EAAZA,YADe;AAEfiX,gBAAc,EAAdA,cAFe;AAGf/W,gBAAc,EAAdA,cAHe;AAIfD,gBAAc,EAAdA,cAJe;AAKf8P,WAAS,EAATA,SALe;AAMf8J,eAAa,EAAbA,aANe;AAOfC,aAAW,EAAXA,WAPe;AAQfmH,aAAW,EAAXA,WARe;AASff,YAAU,EAAVA,UATe;AAUfhF,iBAAe,EAAfA,eAVe;AAWfgG,iBAAe,EAAfA,eAXe;AAYfH,kBAAgB,EAAhBA;AAZe,CAAjB,C;;;;;;;;;;;AClHA;;;;;;;;;;;;;;;AAgBA,IAAMthB,OAAO,GAAGR,mBAAO,CAAC,kEAAD,CAAvB;;AAEAgH,MAAM,CAACC,OAAP,GAAiBzG,OAAjB,C;;;;;;;;;;;AClBA;;;;;;;;;;;;;;;AAgBA,IAAM8G,YAAY,GAAGtH,mBAAO,CAAC,mDAAD,CAA5B;;AACA,IAAMK,eAAe,GAAGL,mBAAO,CAAC,yDAAD,CAA/B;;AACA,IAAMkH,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAM8M,YAAY,GAAG9M,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAM6V,gBAAgB,GAAG7V,mBAAO,CAAC,kEAAD,CAAhC;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;AAEA,IAAI1J,YAAY,GAAG;AACjB;;;;;;;AAOA8a,0BAAwB,EAAE,kCAAAC,eAAe,EAAI;AAC3C,QAAI,CAACA,eAAD,IAAoBA,eAAe,KAAK,CAA5C,EAA+C;AAC7C,aAAO,CAAP;AACD;;AAED,QAAMC,UAAU,GAAG/Q,IAAI,CAACgR,IAAL,CAAUF,eAAe,GAAG,GAA5B,CAAnB;AAEA,WAAO9Q,IAAI,CAACiR,GAAL,CAASF,UAAT,EAAqBlb,SAAS,CAACkJ,iBAA/B,CAAP;AACD,GAhBgB;;AAkBjB;;;;;;;;AAQAmS,sBAAoB,EAAE,8BAACrf,YAAD,EAAeyL,UAAf,EAA8B;AAClD,QAAIvG,QAAJ;;AAEA,SAAK,IAAIwJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG1O,YAAY,CAACuK,SAAb,CAAuBjI,MAA3C,EAAmDoM,CAAC,EAApD,EAAwD;AACtD,UAAI4Q,QAAQ,CAACtf,YAAY,CAACuK,SAAb,CAAuBmE,CAAvB,EAA0BhI,EAA3B,EAA+B,EAA/B,CAAR,KAA+C4Y,QAAQ,CAAC7T,UAAD,EAAa,EAAb,CAA3D,EAA6E;AAC3EvG,gBAAQ,GAAGlF,YAAY,CAACuK,SAAb,CAAuBmE,CAAvB,CAAX;AAEA;AACD;AACF;;AAED,WAAOxJ,QAAP;AACD,GAtCgB;;AAuCjB;;;;;AAMAqa,uBAAqB,EAAE,+BAAA/Q,UAAU,EAAI;AACnC,QAAMgR,WAAW,GAAGhR,UAAU,CAACiR,MAAX,CAAkB,UAACC,GAAD,EAAMjY,SAAN,EAAoB;AACxD,aAAOiY,GAAG,GAAGjY,SAAS,CAACyS,MAAvB;AACD,KAFmB,EAEjB,CAFiB,CAApB;;AAGA,QAAI,CAACsF,WAAL,EAAkB;AAChB,UAAMtF,MAAM,GAAG,MAAM1L,UAAU,CAAClM,MAAhC;AACAkM,gBAAU,CAACxF,OAAX,CAAmB,UAAAvB,SAAS;AAAA,eAAKA,SAAS,CAACyS,MAAV,GAAmBA,MAAxB;AAAA,OAA5B;AACD,KAHD,MAGO;AACL1L,gBAAU,CAACxF,OAAX,CAAmB,UAAAvB,SAAS;AAAA,eAAKA,SAAS,CAACyS,MAAV,GAAoBzS,SAAS,CAACyS,MAAV,GAAmBsF,WAApB,GAAmC,GAA3D;AAAA,OAA5B;AACD;AACF,GAvDgB;AAyDjBra,aAAW,EAAE,qBAACnF,YAAD,EAAeC,WAAf,EAA+B;AAC1C,QAAIiF,QAAJ;;AAEA,SAAK,IAAIwJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG1O,YAAY,CAACuK,SAAb,CAAuBjI,MAA3C,EAAmDoM,CAAC,EAApD,EAAwD;AACtD,UAAI1O,YAAY,CAACuK,SAAb,CAAuBmE,CAAvB,EAA0BzG,GAA1B,KAAkChI,WAAtC,EAAmD;AACjDiF,gBAAQ,GAAGlF,YAAY,CAACuK,SAAb,CAAuBmE,CAAvB,CAAX;AAEA;AACD;AACF;;AAED,WAAOxJ,QAAP;AACD,GArEgB;;AAsEjB;;;;;;;;AAQAuF,qBAAmB,EAAE,6BAACzK,YAAD,EAAe2f,YAAf,EAAgC;AACnD,QAAMpV,SAAS,GAAG,EAAlB;AACAoV,gBAAY,CAAC3W,OAAb,CAAqB,UAAAf,GAAG,EAAI;AAC1B,UAAI/C,QAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCiI,GAAvC,CAAf;;AACA,UAAI/C,QAAJ,EAAc;AACZqF,iBAAS,CAAClH,IAAV,CAAe6B,QAAf;AACD,OAFD,MAEO;AACLqF,iBAAS,CAAClH,IAAV,CAAe;AACb4E,aAAG,EAAHA;AADa,SAAf;AAGD;AACF,KATD;AAUA,WAAOsC,SAAP;AACD,GA3FgB;;AA4FjB;;;;;;;;;AASAG,qBAAmB,EAAE,6BAAC1K,YAAD,EAAe0B,cAAf,EAA+BwI,eAA/B,EAAmD;AACtE,QAAIK,SAAS,GAAG,EAAhB;AACAvK,gBAAY,CAACuK,SAAb,CAAuBvB,OAAvB,CAA+B,UAAA9D,QAAQ,EAAI;AACzC,UAAMwG,IAAI,GAAGxH,YAAY,CAACyH,eAAb,CAA6B3L,YAA7B,EAA2CkF,QAAQ,CAAC+C,GAApD,EAAyDvG,cAAzD,CAAb;;AACA,UAAIgK,IAAI,KAAKxB,eAAe,KAAKN,YAAY,CAACG,GAAjC,IAAwC2B,IAAI,CAAC5F,IAAL,KAAcoE,eAA3D,CAAR,EAAqF;AACnFK,iBAAS,CAAClH,IAAV,CAAe6B,QAAf;AACD;AACF,KALD;;AAMA,QAAI,CAACqF,SAAS,CAACjI,MAAf,EAAuB;AACrBhE,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2gB,2BAAnD,EAAgF;AAC9E5hB,YAAI,EAAEjB,YAAY,CAACmH,YAD2D;AAE9ExC,sBAAc,EAAdA;AAF8E,OAAhF,CAFF;AAOD;;AACD,WAAO6I,SAAP;AACD,GAvHgB;AAwHjBsV,mBAAiB,EAAE,2BAAC7f,YAAD,EAAeC,WAAf,EAA+B;AAChD,QAAIiF,QAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCC,WAAvC,CAAf;;AAEA,QAAI,CAACiF,QAAD,IAAa,CAACA,QAAQ,CAACI,MAA3B,EAAmC;AACjC;AACA,aAAO,EAAP;AACD;;AAED,WAAOJ,QAAQ,CAACI,MAAT,CAAgBwa,WAAhB,EAAP;AACD,GAjIgB;AAmIjBC,mBAAiB,EAAE,2BAAC/f,YAAD,EAAeC,WAAf,EAA+B;AAChD,WAAOiE,YAAY,CAAC2b,iBAAb,CAA+B7f,YAA/B,EAA6CC,WAA7C,MAA8D,SAArE;AACD,GArIgB;;AAsIjB;;;;;;;AAOA+f,kBAAgB,EAAE,0BAAA9a,QAAQ,EAAI;AAC5B,WAAOd,YAAY,CAACgC,YAAb,CAA0BlB,QAA1B,KAAuCA,QAAQ,CAACsJ,UAAhD,IAA8D1F,MAAM,CAACC,IAAP,CAAY7D,QAAQ,CAACsJ,UAArB,EAAiClM,MAAjC,GAA0C,CAA/G;AACD,GA/IgB;;AAiJjB;;;;;;AAMAma,wBAAsB,EAAE,gCAAAvX,QAAQ,EAAI;AAClC,QAAM+a,kBAAkB,GAAG/a,QAAQ,CAACsJ,UAAT,CAAoBlM,MAA/C;AACA,QAAI4d,UAAU,GAAG,CAAjB;;AAEA,SAAK,IAAIxR,CAAC,GAAG,CAAR,EAAWyR,iBAAiB,GAAG,CAApC,EAAuCzR,CAAC,GAAGuR,kBAA3C,EAA+DvR,CAAC,EAAhE,EAAoE;AAClE,UAAIjH,SAAS,GAAGvC,QAAQ,CAACsJ,UAAT,CAAoBE,CAApB,CAAhB;AAEAwR,gBAAU,GAAGhc,YAAY,CAACkc,iBAAb,CAA+B3Y,SAA/B,EAA0C0Y,iBAA1C,CAAb;AACAA,uBAAiB,IAAID,UAArB;AAEA5hB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BmR,0BAAnD,EAA+E;AAC7EriB,YAAI,EAAEjB,YAAY,CAACmH,YAD0D;AAE7EjE,mBAAW,EAAEiF,QAAQ,CAAC+C,GAFuD;AAG7ElH,qBAAa,EAAE0G,SAAS,CAACkF,IAHoD;AAI7EsS,uBAAe,EAAExX,SAAS,CAACyS,MAJkD;AAK7EoG,aAAK,EAAE7Y,SAAS,CAACkH,wBAL4D;AAM7E4R,WAAG,EAAE9Y,SAAS,CAACmH;AAN8D,OAA/E,CAFF;AAWD;AACF,GA7KgB;;AA+KjB;;;;;AAKA4R,uBAAqB,EAAE,+BAAAjW,SAAS,EAAI;AAClC,QAAI2V,UAAU,GAAG,CAAjB;;AAEA,SAAK,IAAIxR,CAAC,GAAG,CAAR,EAAWyR,iBAAiB,GAAG,CAApC,EAAuCzR,CAAC,GAAGnE,SAAS,CAACjI,MAArD,EAA6DoM,CAAC,EAA9D,EAAkE;AAChE,UAAIxJ,QAAQ,GAAGqF,SAAS,CAACmE,CAAD,CAAxB;AAEAwR,gBAAU,GAAGhc,YAAY,CAACkc,iBAAb,CAA+Blb,QAA/B,EAAyCib,iBAAzC,CAAb;AACAA,uBAAiB,IAAID,UAArB;AACD;AACF,GA7LgB;AA+LjBE,mBAAiB,EAAE,2BAAC3Y,SAAD,EAAY0Y,iBAAZ,EAAkC;AACnD,QAAID,UAAJ;AACAA,cAAU,GAAGhc,YAAY,CAAC8a,wBAAb,CAAsCvX,SAAS,CAACyS,MAAhD,CAAb;;AAEA,QAAIgG,UAAJ,EAAgB;AACdzY,eAAS,CAACkH,wBAAV,GAAqCwR,iBAAiB,GAAG,CAAzD;AACA1Y,eAAS,CAACmH,sBAAV,GAAmCuR,iBAAiB,GAAGD,UAAvD;AACD,KAHD,MAGO;AACLzY,eAAS,CAACkH,wBAAV,GAAqC,CAAC,CAAtC;AACAlH,eAAS,CAACmH,sBAAV,GAAmC,CAAC,CAApC;AACD;;AACD,WAAOsR,UAAP;AACD,GA3MgB;AA4MjBvU,iBAAe,EAAE,yBAAC3L,YAAD,EAAeC,WAAf,EAA4ByB,cAA5B,EAA+C;AAC9D,QAAI+e,mBAAmB,GAAG,IAA1B;;AAEA,QAAI,CAACzgB,YAAD,IAAiB,CAACC,WAAlB,IAAiC,CAACyB,cAAtC,EAAsD;AACpD,aAAO+e,mBAAP;AACD;;AAED,QAAIvb,QAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCC,WAAvC,CAAf;;AAEA,QAAI,CAACiF,QAAL,EAAe;AACb,aAAOub,mBAAP;AACD;;AAED,SAAK,IAAI/R,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxJ,QAAQ,CAACsV,KAAT,CAAelY,MAAnC,EAA2CoM,CAAC,EAA5C,EAAgD;AAC9C,UAAIhD,IAAI,GAAGxG,QAAQ,CAACsV,KAAT,CAAe9L,CAAf,CAAX;;AAEA,UAAIhD,IAAI,CAACqO,UAAL,KAAoBrY,cAAxB,EAAwC;AACtC+e,2BAAmB,GAAG/U,IAAtB;AACA;AACD;AACF;;AAED,WAAO+U,mBAAP;AACD,GAnOgB;AAoOjBC,sBAAoB,EAAE,8BAAC1gB,YAAD,EAAeC,WAAf,EAA4Bc,aAA5B,EAA8C;AAClE,QAAI4f,gBAAgB,GAAG,IAAvB;;AAEA,QAAI,CAAC3gB,YAAD,IAAiB,CAACC,WAAlB,IAAiC,CAACc,aAAtC,EAAqD;AACnD,aAAO4f,gBAAP;AACD;;AAED,QAAIzb,QAAQ,GAAGhB,YAAY,CAACiB,WAAb,CAAyBnF,YAAzB,EAAuCC,WAAvC,CAAf;;AAEA,QAAI,CAACiF,QAAL,EAAe;AACb,aAAOyb,gBAAP;AACD;;AAED,SAAK,IAAIjS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxJ,QAAQ,CAACsJ,UAAT,CAAoBlM,MAAxC,EAAgDoM,CAAC,EAAjD,EAAqD;AACnD,UAAIjH,SAAS,GAAGvC,QAAQ,CAACsJ,UAAT,CAAoBE,CAApB,CAAhB;;AAEA,UAAIjH,SAAS,CAACkF,IAAV,KAAmB5L,aAAvB,EAAsC;AACpC4f,wBAAgB,GAAGlZ,SAAnB;AAEA;AACD;AACF;;AAED,WAAOkZ,gBAAP;AACD,GA5PgB;AA6PjBC,uBAAqB,EAAE,+BAAA1b,QAAQ,EAAI;AACjC,QAAI2b,OAAO,GAAG,EAAd;;AAEA,QAAI,CAAC3b,QAAD,IAAa,CAACA,QAAQ,CAACsJ,UAA3B,EAAuC;AACrC,aAAOqS,OAAP;AACD;;AAED,SAAK,IAAInS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxJ,QAAQ,CAACsJ,UAAT,CAAoBlM,MAAxC,EAAgDoM,CAAC,EAAjD,EAAqD;AACnD,UAAIxJ,QAAQ,CAACsJ,UAAT,CAAoBE,CAApB,EAAuBhI,EAAvB,KAA8B,CAAlC,EAAqC;AACnCma,eAAO,GAAG3b,QAAQ,CAACsJ,UAAT,CAAoBE,CAApB,CAAV;AACA;AACD;AACF;;AAED,WAAOmS,OAAP;AACD,GA5QgB;AA6QjBhZ,uBAAqB,EAAE,+BAAA3C,QAAQ,EAAI;AACjC,QAAIA,QAAQ,IAAIA,QAAQ,CAACY,IAAT,KAAkB6M,gBAAgB,CAACC,YAAnD,EAAiE;AAC/D,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GAnRgB;AAoRjBjL,0BAAwB,EAAE,kCAAAzC,QAAQ,EAAI;AACpC,QAAIA,QAAQ,IAAIA,QAAQ,CAACY,IAAT,KAAkB6M,gBAAgB,CAACE,eAAnD,EAAoE;AAClE,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GA1RgB;AA2RjBlN,cAAY,EAAE,sBAAAT,QAAQ,EAAI;AACxB,QAAIA,QAAQ,IAAIA,QAAQ,CAACY,IAAT,KAAkB6M,gBAAgB,CAACG,EAAnD,EAAuD;AACrD,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GAjSgB;;AAmSjB;;;;;;;;AAQAgO,eAAa,EAAE,uBAAC9gB,YAAD,EAAeyL,UAAf,EAA8B;AAC3C,QAAIzL,YAAY,CAACib,cAAb,IAA+BnS,MAAM,CAACiY,SAAP,CAAiB3b,cAAjB,CAAgC4b,IAAhC,CAAqChhB,YAAY,CAACib,cAAlD,EAAkExP,UAAlE,CAAnC,EAAkH;AAChH,aAAO;AACLwV,eAAO,EAAEjhB,YAAY,CAACib,cAAb,CAA4BxP,UAA5B,CADJ;AAELsP,iBAAS,EAAE/a,YAAY,CAACmb,MAAb,CAAoBnb,YAAY,CAACib,cAAb,CAA4BxP,UAA5B,CAApB,EAA6DkB;AAFnE,OAAP;AAID;;AACD,WAAO,EAAP;AACD,GAnTgB;;AAqTjB;;;;;;;;AAQAuU,mBAAiB,EAAE,2BAAClhB,YAAD,EAAeihB,OAAf,EAA2B;AAC5C,QAAM1W,SAAS,GAAG,EAAlB;;AACA,QAAIzB,MAAM,CAACiY,SAAP,CAAiB3b,cAAjB,CAAgC4b,IAAhC,CAAqChhB,YAAY,CAACmb,MAAlD,EAA0D8F,OAA1D,CAAJ,EAAwE;AACtEjhB,kBAAY,CAACmb,MAAb,CAAoB8F,OAApB,EAA6B1W,SAA7B,CAAuCvB,OAAvC,CAA+C,UAAAyC,UAAU,EAAI;AAC3D,YAAIvG,QAAQ,GAAGhB,YAAY,CAACmb,oBAAb,CAAkCrf,YAAlC,EAAgDyL,UAAhD,CAAf;;AACA,YAAIvG,QAAJ,EAAc;AACZqF,mBAAS,CAAClH,IAAV,CAAe6B,QAAf;AACD;AACF,OALD;AAMD;;AACD,WAAOqF,SAAP;AACD,GAxUgB;;AA0UjB;;;;;;;;AAQAiF,kBAAgB,EAAE,0BAACtP,MAAD,EAASgF,QAAT,EAAmB+b,OAAnB,EAA+B;AAC/C,QAAIA,OAAJ,EAAa;AACX,uBAAUA,OAAV,cAAqB/gB,MAArB;AACD;;AAED,QAAM0P,IAAI,GAAGzS,eAAe,CAAC0S,MAAhB,GAAyBD,IAAtC;AACA,QAAME,MAAM,GAAG3S,eAAe,CAAC0S,MAAhB,GAAyBC,MAAxC;;AAEA,QAAIF,IAAI,IAAIE,MAAR,IAAmB5K,QAAQ,IAAIA,QAAQ,CAACqV,sBAA5C,EAAqE;AACnE,uBAAUrV,QAAQ,CAACwB,EAAnB,cAAyBxG,MAAzB;AACD,KAFD,MAEO;AACL,aAAOA,MAAP;AACD;AACF;AA/VgB,CAAnB;AAkWA4D,MAAM,CAACC,OAAP,GAAiBG,YAAjB,C;;;;;;;;;;;AC7XA;;;;;;;;;;;;;;;AAgBA,IAAMjH,YAAY,GAAG;AACnBkkB,gBAAc,EAAE,wBAAS9P,GAAT,EAAc;AAC5B,WAAOvI,MAAM,CAACiY,SAAP,CAAiBK,QAAjB,CAA0BJ,IAA1B,CAA+B3P,GAA/B,CAAP;AACD,GAHkB;AAInBuH,UAAQ,EAAE,kBAASvH,GAAT,EAAc;AACtB,WAAOpU,YAAY,CAACkkB,cAAb,CAA4B9P,GAA5B,MAAqC,iBAA5C;AACD,GANkB;AAOnBpI,UAAQ,EAAE,kBAASoI,GAAT,EAAc;AACtB,WAAOpU,YAAY,CAACkkB,cAAb,CAA4B9P,GAA5B,MAAqC,iBAA5C;AACD,GATkB;AAUnBhR,UAAQ,EAAE,kBAASgR,GAAT,EAAc;AACtB,WAAOpU,YAAY,CAACkkB,cAAb,CAA4B9P,GAA5B,MAAqC,iBAA5C;AACD,GAZkB;AAanB4H,YAAU,EAAE,oBAAS5H,GAAT,EAAc;AACxB,WAAOpU,YAAY,CAACkkB,cAAb,CAA4B9P,GAA5B,MAAqC,mBAA5C;AACD,GAfkB;AAgBnB7G,WAAS,EAAE,mBAAS6G,GAAT,EAAc;AACvB,WAAOpU,YAAY,CAACkkB,cAAb,CAA4B9P,GAA5B,MAAqC,kBAA5C;AACD,GAlBkB;AAmBnBrL,WAAS,EAAE,mBAASqL,GAAT,EAAc;AACvB,WAAOpU,YAAY,CAACkkB,cAAb,CAA4B9P,GAA5B,MAAqC,kBAA5C;AACD,GArBkB;AAsBnBpP,aAAW,EAAE,qBAASoP,GAAT,EAAc;AACzB,WACEpU,YAAY,CAACkkB,cAAb,CAA4B9P,GAA5B,MAAqC,oBAArC,IACA;AACA;AACA,WAAOA,GAAP,KAAe,WAJjB;AAMD,GA7BkB;AA8BnBnP,QAAM,EAAE,gBAASmP,GAAT,EAAc;AACpB,WAAOpU,YAAY,CAACkkB,cAAb,CAA4B9P,GAA5B,MAAqC,eAA5C;AACD,GAhCkB;AAiCnBrP,SAAO,EAAE,iBAASqP,GAAT,EAAc;AACrB,WAAOpU,YAAY,CAACkkB,cAAb,CAA4B9P,GAA5B,MAAqC,gBAA5C;AACD;AAnCkB,CAArB;AAsCAvN,MAAM,CAACC,OAAP,GAAiB9G,YAAjB,C;;;;;;;;;;;ACtDA;;;;;;;;;;;;;;;AAgBA,IAAMyU,gBAAgB,GAAG5U,mBAAO,CAAC,gEAAD,CAAhC;;AACA,IAAM+Q,gBAAgB,GAAG/Q,mBAAO,CAAC,gEAAD,CAAhC;;AAEA,IAAMoH,YAAY,GAAGpH,mBAAO,CAAC,mDAAD,CAA5B;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,mDAAD,CAA5B;;AACA,IAAMI,YAAY,GAAGJ,mBAAO,CAAC,mDAAD,CAA5B;;AACA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMukB,UAAU,GAAGvkB,mBAAO,CAAC,sDAAD,CAA1B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;;AACA,IAAMmD,gBAAgB,GAAGjU,mBAAO,CAAC,gEAAD,CAAhC;;AACA,IAAMS,YAAY,GAAGT,mBAAO,CAAC,gEAAD,CAA5B;;AACA,IAAM6X,SAAS,GAAG7X,mBAAO,CAAC,oDAAD,CAAzB;;AACA,IAAMoX,QAAQ,GAAGpX,mBAAO,CAAC,2CAAD,CAAxB;;AACA,IAAMkH,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AACA,IAAM6V,gBAAgB,GAAG7V,mBAAO,CAAC,kEAAD,CAAhC;;AACA,IAAME,OAAO,GAAGF,mBAAO,CAAC,gDAAD,CAAvB;;AACA,IAAMwkB,UAAU,GAAG,CAAnB;AAEA,IAAMtjB,IAAI,GAAGjB,YAAY,CAACkH,YAA1B;AAEA,IAAMsd,oBAAoB,GAAG;AAC3BC,cAAY,EAAE,cADa;AAE3BC,kBAAgB,EAAE;AAFS,CAA7B;AAKA,IAAIxd,YAAY,GAAG;AACjB;;AACA;;;;;;;;;;;;;;;;;;AAkBA9F,cAAY,EAAE,sBACZD,MADY,EAEZ8B,YAFY,EAGZkF,QAHY,EAIZjF,WAJY,EAKZC,MALY,EAMZuE,eANY,EAcT;AAAA,QAPHC,2BAOG,uEAP2B,EAO3B;AAAA,QANHC,eAMG,uEANe,EAMf;AAAA,QALHE,QAKG;AAAA,QAJH6c,cAIG;AAAA,QAHHC,cAGG;AAAA,QAFHC,iBAEG;AAAA,QADH/kB,GACG,0EADG,EACH;AACH,QAAIglB,SAAS,GAAG3N,QAAQ,CAAC4N,WAAT,CAAqB5hB,MAArB,EAA6BF,YAAY,CAAC0D,SAA1C,CAAhB;AAEApF,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8B6S,SAAnD,EAA8D;AAC5D/jB,UAAI,EAAEjB,YAAY,CAACmX,QADyC;AAE5DhU,YAAM,EAANA,MAF4D;AAG5DwD,eAAS,EAAE1D,YAAY,CAAC0D,SAHoC;AAI5Dse,UAAI,EAAEH;AAJsD,KAA9D,CAFF;AAUA,QAAII,QAAQ,GAAG;AACb;AACAxW,gBAAU,EAAEvG,QAAQ,CAACwB,EAFR;AAGbzG,iBAAW,EAAXA,WAHa;AAIb4F,kBAAY,EAAEX,QAAQ,CAACY,IAJV;AAKboc,kBAAY,EAAEhd,QAAQ,CAACyH,IALV;AAMb;AACAlI,qBAAe,EAAfA,eAPa;AAQb;AACA0X,WAAK,EAAExH,SAAS,CAACC,cAAV,CAAyBC,iBATnB;AAUb;AACAnT,oBAAc,EAAEkgB,iBAXH;AAYb;AACAnH,8BAAwB,EAAEvV,QAAQ,CAACuV,wBAbtB;AAcb0H,gBAAU,EAAEne,SAAS,CAAC8I,WAdT;AAeb;AACAsV,YAAM,EAAEvlB,GAhBK;AAiBb;AACAqD,YAAM,EAANA,MAlBa;AAmBb;AACAwE,iCAA2B,EAA3BA,2BApBa;AAqBb;AACAmd,eAAS,EAATA;AAtBa,KAAf,CAbG,CAsCH;;AAtCG,gCAuC4B3d,YAAY,CAAC4c,aAAb,CAA2B9gB,YAA3B,EAAyCkF,QAAQ,CAACwB,EAAlD,CAvC5B;AAAA,QAuCKua,OAvCL,yBAuCKA,OAvCL;AAAA,QAuCclG,SAvCd,yBAuCcA,SAvCd;;AAyCH,QAAIkG,OAAJ,EAAa;AACX;AACAgB,cAAQ,CAAC,SAAD,CAAR,GAAsBhB,OAAtB;AACAgB,cAAQ,CAAC,WAAD,CAAR,GAAwBlH,SAAxB;AACD;;AAEDrW,+BAA2B,GAAGoE,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkBjF,2BAAlB,EAA+C;AAC3E2d,gBAAU,EAAEnd,QAAQ,CAACwV,iBAAT,GAA6BmH,SAA7B,GAAyC3hB;AADsB,KAA/C,CAA9B,CA/CG,CAmDH;;AACA,QAAMoiB,oBAAoB,GAAGre,YAAY,CAACse,qBAAb,CAC3BrkB,MAD2B,EAE3BgH,QAF2B,EAG3BjF,WAH2B,EAI3BC,MAJ2B,EAK3BwE,2BAL2B,EAM3Bud,QAN2B,CAA7B;;AAQA,QAAIK,oBAAJ,EAA0B;AACxB,UAAIrlB,YAAY,CAAC+I,SAAb,CAAuBsc,oBAAvB,CAAJ,EAAkD;AAChD,eAAOA,oBAAoB,CAACzhB,IAArB,CAA0B,UAAAC,IAAI,EAAI;AACvC,cAAIgI,MAAM,CAACC,IAAP,CAAYjI,IAAZ,EAAkBwB,MAAlB,GAA2B,CAA/B,EAAkC;AAChC,mBAAOxB,IAAP;AACD;AACF,SAJM,CAAP;AAKD,OAND,MAMO;AACL,eAAOwhB,oBAAP;AACD;AACF,KAtEE,CAwEH;;;AAEA,QAAIE,eAAJ,CA1EG,CA2EH;;AACA,QAAItkB,MAAM,CAACM,kBAAX,EAA+B;AAC7B,aAAO,IAAIiC,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,eAAOuD,YAAY,CAACwe,oBAAb,CACLvkB,MADK,EAEL8B,YAFK,EAGLkF,QAHK,EAILjF,WAJK,EAKLC,MALK,EAMLyE,eANK,EAOL+c,cAPK,EAQLO,QARK,EASLphB,IATK,CASA,UAAS+Q,QAAT,EAAmB;AACxB,cAAIA,QAAQ,IAAI3U,YAAY,CAACoD,QAAb,CAAsBuR,QAAtB,CAAZ,IAA+C9I,MAAM,CAACC,IAAP,CAAY6I,QAAZ,EAAsBtP,MAAtB,GAA+B,CAAlF,EAAqF;AACnF5B,mBAAO,CAACoI,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkB;AAAExD,+BAAiB,EAAE;AAArB,aAAlB,EAA+CyL,QAA/C,CAAD,CAAP;AACD,WAFD,MAEO,IAAI+P,cAAJ,EAAoB;AACzBjhB,mBAAO,CAACoI,MAAM,CAACa,MAAP,CAAc,EAAd,CAAD,CAAP;AACD,WAFM,MAEA;AACL,gBAAM+Y,6BAA6B,GAAGze,YAAY,CAAC0e,qCAAb,CACpCzkB,MADoC,EAEpC8B,YAFoC,EAGpCkF,QAHoC,EAIpCjF,WAJoC,EAKpCC,MALoC,EAMpCuE,eANoC,EAOpCC,2BAPoC,EAQpCC,eARoC,EASpCE,QAToC,EAUpC6c,cAVoC,EAWpCE,iBAXoC,EAYpCK,QAZoC,EAapChB,OAboC,EAcpClG,SAdoC,CAAtC;AAgBAra,mBAAO,CAACgiB,6BAAD,CAAP;AACD;AACF,SAjCM,CAAP;AAkCD,OAnCM,CAAP;AAoCD,KArCD,MAqCO;AACLF,qBAAe,GAAGve,YAAY,CAACwe,oBAAb,CAChBvkB,MADgB,EAEhB8B,YAFgB,EAGhBkF,QAHgB,EAIhBjF,WAJgB,EAKhBC,MALgB,EAMhByE,eANgB,EAOhB+c,cAPgB,EAQhBO,QARgB,CAAlB;AAUD;;AAED,QAAIO,eAAJ,EAAqB;AACnB,aAAOA,eAAP;AACD;;AAED,WAAOve,YAAY,CAAC0e,qCAAb,CACLzkB,MADK,EAEL8B,YAFK,EAGLkF,QAHK,EAILjF,WAJK,EAKLC,MALK,EAMLuE,eANK,EAOLC,2BAPK,EAQLC,eARK,EASLE,QATK,EAUL6c,cAVK,EAWLE,iBAXK,EAYLK,QAZK,EAaLhB,OAbK,EAcLlG,SAdK,CAAP;AAgBD,GApLgB;AAsLjB4H,uCAtLiB,iDAuLfzkB,MAvLe,EAwLf8B,YAxLe,EAyLfkF,QAzLe,EA0LfjF,WA1Le,EA2LfC,MA3Le,EA4LfuE,eA5Le,EA6LfC,2BA7Le,EA8LfC,eA9Le,EA+LfE,QA/Le,EAgMf6c,cAhMe,EAiMfE,iBAjMe,EAkMfK,QAlMe,EAmMfhB,OAnMe,EAoMflG,SApMe,EAqMf;AACA;AACA,QACE,EACE9W,YAAY,CAAC2e,wBAAb,CAAsC1d,QAAtC,EAAgDjF,WAAhD,EAA6DC,MAA7D,EAAqEuE,eAArE,EAAsFwd,QAAtF,KACApU,gBAAgB,CAACuB,oBAAjB,CAAsClP,MAAtC,EAA8CgF,QAA9C,EAAwD,IAAxD,CAFF,CADF,EAKE;AACA,aAAO,EAAP;AACD;;AAED,QAAI+b,OAAJ,EAAa;AACX;AAEA;AACA,UAAM4B,YAAY,GAAG3e,YAAY,CAACgd,iBAAb,CAA+BlhB,YAA/B,EAA6CihB,OAA7C,CAArB;;AAEA,UAAI4B,YAAY,CAACvgB,MAAb,KAAwB,CAA5B,EAA+B;AAC7B;AACA,eAAO,EAAP;AACD,OATU,CAWX;;;AACA,UAAIwgB,8BAA8B,GAAG7e,YAAY,CAAC8e,+BAAb,CACnC7kB,MADmC,EAEnC8B,YAFmC,EAGnC+a,SAHmC,EAInC8H,YAJmC,EAKnC3d,QALmC,EAMnChF,MANmC,EAOnCyE,eAPmC,EAQnCD,2BARmC,EASnCgd,cATmC,CAArC;;AAYA,UAAIoB,8BAAJ,EAAoC;AAClC;AACAxkB,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4jB,8BAAlD,EAAkF;AAChF9iB,gBAAM,EAANA,MADgF;AAEhF6a,mBAAS,EAATA,SAFgF;AAGhF/c,cAAI,EAAJA,IAHgF;AAIhFiC,qBAAW,EAAEA;AAJmE,SAAlF,CAFF;;AASA,YAAIhD,YAAY,CAAC+I,SAAb,CAAuB8c,8BAAvB,CAAJ,EAA4D;AAC1D,iBAAO,IAAIriB,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5BA,mBAAO,CAACoI,MAAM,CAACa,MAAP,CAAc,EAAd,CAAD,CAAP;AACD,WAFM,CAAP;AAGD;;AACD,eAAO,EAAP;AACD,OAzCU,CA2CX;AACA;;;AACA,UAAIsZ,sBAAsB,GAAG,EAA7B;AACA,UAAIC,oBAAoB,GAAG,EAA3B;;AA9CW,kCA+CwCjf,YAAY,CAACkf,mBAAb,CACjDN,YADiD,EAEjD3iB,MAFiD,EAGjDuE,eAHiD,CA/CxC;AAAA,UA+CH2e,iBA/CG,yBA+CHA,iBA/CG;AAAA,UA+CgBC,mBA/ChB,yBA+CgBA,mBA/ChB;;AAqDXA,yBAAmB,CAACra,OAApB,CAA4B,UAAA9D,QAAQ,EAAI;AACtC+d,8BAAsB,GAAGA,sBAAsB,GAAG/d,QAAQ,CAAC+C,GAAlC,GAAwC,GAAjE;AACD,OAFD;AAGAmb,uBAAiB,CAACpa,OAAlB,CAA0B,UAAA9D,QAAQ,EAAI;AACpCge,4BAAoB,GAAGA,oBAAoB,GAAGhe,QAAQ,CAAC+C,GAAhC,GAAsC,GAA7D;AACD,OAFD;AAIA3J,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BoU,sBAAnD,EAA2E;AACzEpjB,cAAM,EAANA,MADyE;AAEzE6a,iBAAS,EAATA,SAFyE;AAGzE/c,YAAI,EAAJA,IAHyE;AAIzEklB,4BAAoB,EAAEA,oBAAoB,CAACK,KAArB,CAA2B,CAA3B,EAA8B,CAAC,CAA/B,CAJmD;AAKzEC,sBAAc,EACZP,sBAAsB,KAAK,EAA3B,GAAgC,cAAhC,wBAA+DA,sBAAsB,CAACM,KAAvB,CAA6B,CAA7B,EAAgC,CAAC,CAAjC,CAA/D;AANuE,OAA3E,CAFF;AAYAjlB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BkkB,sBAAlD,EAA0E;AACxEpjB,cAAM,EAANA,MADwE;AAExE6a,iBAAS,EAATA,SAFwE;AAGxE/c,YAAI,EAAJA,IAHwE;AAIxEylB,6BAAqB,EAAEL,iBAAiB,CAAC9gB,MAJ+B;AAKxEohB,0BAAkB,EAAEL,mBAAmB,CAAC/gB,MAApB,GAA6B8gB,iBAAiB,CAAC9gB;AALK,OAA1E,CAFF,EAxEW,CAmFX;;AACA,UAAIqhB,aAAa,GACf,OAAO3jB,YAAY,CAACmb,MAAb,CAAoB8F,OAApB,EAA6BrG,EAApC,KAA2C,WAA3C,GAAyD5a,YAAY,CAACmb,MAAb,CAAoB8F,OAApB,EAA6BrG,EAAtF,GAA2F0G,UAD7F;;AAGA,UAAI8B,iBAAiB,CAAC9gB,MAAlB,KAA6B,CAAjC,EAAoC;AAClC;AACA,eAAO2B,YAAY,CAAC2f,8BAAb,CACL1lB,MADK,EAELklB,iBAAiB,CAAC,CAAD,CAFZ,EAGLA,iBAAiB,CAAC,CAAD,CAAjB,CAAqBnb,GAHhB,EAIL/H,MAJK,EAKL2E,QALK,EAML+c,iBANK,EAOLK,QAPK,CAAP;AASD,OAXD,MAWO;AACL,YAAI0B,aAAa,KAAKrC,UAAtB,EAAkC;AAChC;AACA,iBAAOrd,YAAY,CAAC4f,gCAAb,CACL3lB,MADK,EAELgH,QAFK,EAGLke,iBAHK,EAILljB,MAJK,EAKL6a,SALK,EAMLkG,OANK,EAOLpc,QAPK,EAQL+c,iBARK,EASLK,QATK,CAAP;AAWD,SAbD,MAaO;AACL,iBAAOhe,YAAY,CAAC6f,gCAAb,CACL5lB,MADK,EAEL8B,YAFK,EAGLkF,QAHK,EAILke,iBAJK,EAKLljB,MALK,EAML6a,SANK,EAOLkG,OAPK,EAQLpc,QARK,EASL+c,iBATK,EAULK,QAVK,CAAP;AAYD;AACF;AACF,KA/HD,MA+HO;AACL;AACA;AACA,aAAOhe,YAAY,CAAC2f,8BAAb,CACL1lB,MADK,EAELgH,QAFK,EAGLjF,WAHK,EAILC,MAJK,EAKL2E,QALK,EAML+c,iBANK,EAOLK,QAPK,CAAP;AASD;AACF,GA5VgB;AA6VjB;AAEA8B,uBAAqB,EAAE,+BAAC7e,QAAD,EAAWjF,WAAX,EAAwBC,MAAxB,EAAgCwE,2BAAhC,EAAqF;AAAA,QAAxB4M,WAAwB,uEAAV,KAAU;AAC1G,QAAIgR,oBAAJ;AACA,QAAIhd,MAAJ;AACA,QAAM0e,kBAAkB,GAAG,EAA3B;AACA9e,YAAQ,CAACsJ,UAAT,CAAoBxF,OAApB,CAA4B,UAAAvB,SAAS,EAAI;AACvC,UAAIxK,YAAY,CAACoD,QAAb,CAAsBoH,SAAS,CAAC2S,QAAhC,KAA6C,CAACtR,MAAM,CAACC,IAAP,CAAYtB,SAAS,CAAC2S,QAAtB,EAAgC9X,MAAlF,EAA0F;AACxFhE,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BqC,oBAAnD,EAAyE;AACvEtR,qBAAW,EAAXA,WADuE;AAEvEC,gBAAM,EAANA,MAFuE;AAGvElC,cAAI,EAAJA,IAHuE;AAIvEyJ,mBAAS,EAAEvC,QAAQ,CAACY,IAAT,KAAkB6M,gBAAgB,CAACE,eAAnC,GAAqD,EAArD,mBAAmEpL,SAAS,CAACkF,IAA7E;AAJ4D,SAAzE,CAFF,EAQE2E,WARF;AAUA;AACD;;AACD,UACErU,YAAY,CAACoD,QAAb,CAAsBoH,SAAS,CAAC2S,QAAhC,KACArJ,gBAAgB,CAACtJ,SAAS,CAAC2S,QAAX,EAAqB1V,2BAArB,EAAkDzE,WAAlD,EAA+DC,MAA/D,EAAuEuH,SAAS,CAACkF,IAAjF,CAFlB,EAGE;AACArH,cAAM,GAAG+b,UAAU,CAAC9L,MAApB;AACAyO,0BAAkB,CAAC3gB,IAAnB,CAAwBnG,YAAY,CAACub,WAAb,CAAyBhR,SAAzB,CAAxB;AACD,OAND,MAMO;AACLnC,cAAM,GAAG+b,UAAU,CAAC7L,MAApB;AACD;;AACDlX,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8B+U,mBAAnD,EAAwE;AACtEhkB,mBAAW,EAAXA,WADsE;AAEtEC,cAAM,EAANA,MAFsE;AAGtEuE,uBAAe,EAAEyE,IAAI,CAACC,SAAL,CAAezE,2BAAf,CAHqD;AAItE1G,YAAI,EAAJA,IAJsE;AAKtEsH,cAAM,EAANA,MALsE;AAMtE4e,wBAAgB,EAAE3C,oBAAoB,CAACC,YAN+B;AAOtE/Z,iBAAS,EACPvC,QAAQ,CAACY,IAAT,KAAkB6M,gBAAgB,CAACE,eAAnC,IAAsDvN,MAAM,KAAK+b,UAAU,CAAC9L,MAA5E,GACI,iCADJ,iBAEW9N,SAAS,CAACkF,IAFrB;AARoE,OAAxE,CAFF,EAcE2E,WAdF;AAgBD,KAvCD;;AAyCA,QAAI0S,kBAAkB,CAAC1hB,MAAnB,GAA4B,CAAhC,EAAmC;AACjC4B,kBAAY,CAACqb,qBAAb,CAAmCyE,kBAAnC;;AACA,WAAK,IAAItV,CAAC,GAAG,CAAR,EAAWyR,iBAAiB,GAAG,CAA/B,EAAkCD,UAAU,GAAG,CAApD,EAAuDxR,CAAC,GAAGsV,kBAAkB,CAAC1hB,MAA9E,EAAsFoM,CAAC,EAAvF,EAA2F;AACzFwR,kBAAU,GAAGhc,YAAY,CAACkc,iBAAb,CAA+B4D,kBAAkB,CAACtV,CAAD,CAAjD,EAAsDyR,iBAAtD,CAAb;AACAA,yBAAiB,IAAID,UAArB;AACD;;AACDoC,0BAAoB,GAAGzU,gBAAgB,CAACU,aAAjB,CACrByV,kBADqB,EAErBnW,gBAAgB,CAACsC,oBAAjB,CAAsCjM,YAAY,CAACsL,gBAAb,CAA8BtP,MAA9B,EAAsCgF,QAAtC,CAAtC,CAFqB,CAAvB;AAID,KAVD,MAUO;AACLod,0BAAoB,GAAG0B,kBAAkB,CAAC,CAAD,CAAzC;AACD;;AAED,QAAI1B,oBAAJ,EAA0B;AACxB,aAAO;AACL7a,iBAAS,EAAE6a,oBADN;AAELvhB,qBAAa,EAAEuhB,oBAAoB,CAAC3V,IAF/B;AAGLzG,mBAAW,EAAEoc,oBAAoB,CAAC5b;AAH7B,OAAP;AAKD;AACF,GAjagB;;AAkajB;;;;;;;;;AASAyd,oBAAkB,EAAE,4BAASjmB,MAAT,EAAiBgC,MAAjB,EAAyBD,WAAzB,EAAsC0E,eAAtC,EAAuD2M,WAAvD,EAAoE;AACtF,QAAI8S,cAAc,GAAG;AACnBlkB,YAAM,EAAEA,MADW;AAEnBa,mBAAa,EAAE,IAFI;AAGnBd,iBAAW,EAAEA,WAHM;AAInByB,oBAAc,EAAE;AAJG,KAArB;;AAOA,QAAI,CAACxD,MAAM,CAACG,kBAAZ,EAAgC;AAC9BC,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BmV,mCAAnD,EAAwF;AACtFrmB,YAAI,EAAJA;AADsF,OAAxF,CAFF,EAKEsT,WALF;AAOA,aAAO8S,cAAP;AACD;;AAED,QAAIlmB,MAAM,CAACM,kBAAX,EAA+B;AAC7B,UAAI;AACF,eAAON,MAAM,CAACG,kBAAP,CACJia,GADI,CACApY,MADA,EACQD,WADR,EAEJY,IAFI,CAEC,UAAAC,IAAI,EAAI;AACZ;AACAxC,gBAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BklB,iCAAlD,EAAqF;AACnFtmB,gBAAI,EAAJA,IADmF;AAEnFkC,kBAAM,EAANA,MAFmF;AAGnFD,uBAAW,EAAXA;AAHmF,WAArF,CAFF,EAOEqR,WAPF;AAUA,cAAIiT,SAAS,GAAGzb,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkB7I,IAAlB,EAAwB6D,eAAxB,CAAhB;AAEA,iBAAO4f,SAAP;AACD,SAjBI,WAkBE,UAAApjB,MAAM,EAAI;AACf;AACA+W,iBAAO,CAACpZ,GAAR,CAAY,2CAAZ,EAAyDqC,MAAzD;AACD,SArBI,CAAP;AAsBD,OAvBD,CAuBE,OAAOG,GAAP,EAAY;AACZ;AACAhD,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BulB,+BAAnD,EAAoF;AAClFxmB,cAAI,EAAJA,IADkF;AAElFkC,gBAAM,EAANA,MAFkF;AAGlFob,eAAK,EAAEha;AAH2E,SAApF,CAFF,EAOEgQ,WAPF;AASD;AACF,KApCD,MAoCO;AACL,UAAI;AACF,YAAIxQ,IAAI,GAAG5C,MAAM,CAACG,kBAAP,CAA0Bia,GAA1B,CAA8BpY,MAA9B,EAAsCD,WAAtC,KAAsD,EAAjE,CADE,CAGF;;AACA3B,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BklB,iCAAlD,EAAqF;AACnFtmB,cAAI,EAAJA,IADmF;AAEnFkC,gBAAM,EAANA,MAFmF;AAGnFD,qBAAW,EAAXA;AAHmF,SAArF,CAFF,EAOEqR,WAPF;AAUA,eAAOxI,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkB7I,IAAlB,EAAwB6D,eAAxB,CAAP;AACD,OAfD,CAeE,OAAOrD,GAAP,EAAY;AACZ;AACAhD,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BulB,+BAAnD,EAAoF;AAClFxmB,cAAI,EAAJA,IADkF;AAElFkC,gBAAM,EAANA,MAFkF;AAGlFob,eAAK,EAAEha;AAH2E,SAApF,CAFF,EAOEgQ,WAPF;AASD;AACF;AACF,GA/fgB;;AAigBjB;;;;;;;;;AASA9F,eAAa,EAAE,uBAAStN,MAAT,EAAiBgH,QAAjB,EAA2BnE,aAA3B,EAA0Cb,MAA1C,EAAkD2E,QAAlD,EAA4DnD,cAA5D,EAA4E;AACzF,QAAI+iB,OAAO,GAAG,KAAd;;AAEA,QAAI,CAACvmB,MAAM,CAACG,kBAAZ,EAAgC;AAC9BC,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BmV,mCAAnD,EAAwF;AACtFrmB,YAAI,EAAJA;AADsF,OAAxF,CAFF;AAMA,aAAOymB,OAAP;AACD;;AAED,QAAI;AACF,UAAMje,UAAU,GAAG;AACjBtG,cAAM,EAAEA,MADS;AAEjBa,qBAAa,EAAbA,aAFiB;AAGjBd,mBAAW,EAAEiF,QAAQ,CAAC+C;AAHL,OAAnB;;AAMA,UAAI,CAAChL,YAAY,CAACgF,WAAb,CAAyBP,cAAzB,CAAL,EAA+C;AAC7C8E,kBAAU,CAAC9E,cAAX,GAA4BA,cAA5B;AACD;;AAED,UAAI,CAACzE,YAAY,CAACgF,WAAb,CAAyB4C,QAAzB,CAAL,EAAyC;AACvC2B,kBAAU,CAAC3B,QAAX,GAAsBA,QAAtB;AACD;;AAED3G,YAAM,CAACG,kBAAP,CAA0BqmB,GAA1B,CAA8Ble,UAA9B;AAEAlI,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BulB,iCAAlD,EAAqF;AACnF3mB,YAAI,EAAJA,IADmF;AAEnFkC,cAAM,EAANA,MAFmF;AAGnFD,mBAAW,EAAEiF,QAAQ,CAAC+C;AAH6D,OAArF,CAFF;AASAwc,aAAO,GAAG,IAAV;AACD,KA3BD,CA2BE,OAAOnjB,GAAP,EAAY;AACZhD,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B2lB,+BAAnD,EAAoF;AAClF5mB,YAAI,EAAJA,IADkF;AAElFkC,cAAM,EAANA,MAFkF;AAGlFob,aAAK,EAAEha;AAH2E,OAApF,CAFF;AASAmjB,aAAO,GAAG,KAAV;AACD;;AAED,WAAOA,OAAP;AACD,GAhkBgB;;AAkkBjB;;;;;;;;;;;;;;;AAeA1B,iCAjlBiB,2CAklBf7kB,MAllBe,EAmlBf8B,YAnlBe,EAolBf+a,SAplBe,EAqlBf8H,YArlBe,EAslBfgC,cAtlBe,EAulBf3kB,MAvlBe,EAwlBfyE,eAxlBe,EAylBfD,2BAzlBe,EA0lBfgd,cA1lBe,EA2lBf;AACA,QAAIoD,mBAAmB,GAAG,KAA1B;AACAjC,gBAAY,CAACtgB,IAAb,CAAkB,UAAAwiB,aAAa,EAAI;AACjC,UAAIA,aAAa,CAACre,EAAd,KAAqBme,cAAc,CAACne,EAAxC,EAA4C;AAC1C;AACD,OAHgC,CAIjC;AACA;AACA;;;AACA,UAAM4b,oBAAoB,GAAGre,YAAY,CAACse,qBAAb,CAC3BrkB,MAD2B,EAE3B6mB,aAF2B,EAG3BA,aAAa,CAAC9c,GAHa,EAI3B/H,MAJ2B,EAK3BwE,2BAL2B,CAA7B;;AAOA,UAAI4d,oBAAJ,EAA0B;AACxB,YAAIrlB,YAAY,CAAC+I,SAAb,CAAuBsc,oBAAvB,CAAJ,EAAkD;AAChD,iBAAOA,oBAAoB,CAACzhB,IAArB,CAA0B,UAAAC,IAAI,EAAI;AACvCgkB,+BAAmB,GAAG,IAAtB;AACAxmB,kBAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4lB,6CAAlD,EAAiG;AAC/FhnB,kBAAI,EAAJA,IAD+F;AAE/FiC,yBAAW,EAAE8kB,aAAa,CAAC9c,GAFoE;AAG/F8S,uBAAS,EAATA,SAH+F;AAI/F7a,oBAAM,EAANA,MAJ+F;AAK/F4F,kBAAI,EAAE;AALyF,aAAjG,CAFF;AAUA,mBAAO,IAAIrF,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5BA,qBAAO,CAAC,IAAD,CAAP;AACD,aAFM,CAAP;AAGD,WAfM,CAAP;AAgBD,SAjBD,MAiBO;AACL;AACAokB,6BAAmB,GAAG,IAAtB;AACAxmB,gBAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4lB,6CAAlD,EAAiG;AAC/FhnB,gBAAI,EAAJA,IAD+F;AAE/FiC,uBAAW,EAAE8kB,aAAa,CAAC9c,GAFoE;AAG/F8S,qBAAS,EAATA,SAH+F;AAI/F7a,kBAAM,EAANA,MAJ+F;AAK/F4F,gBAAI,EAAE;AALyF,WAAjG,CAFF;AAUA,iBAAO,IAAP;AACD;AACF;;AAED,UAAM0c,eAAe,GAAGve,YAAY,CAACwe,oBAAb,CACtBvkB,MADsB,EAEtB8B,YAFsB,EAGtB+kB,aAHsB,EAItBA,aAAa,CAAC9c,GAJQ,EAKtB/H,MALsB,EAMtByE,eANsB,EAOtB+c,cAPsB,CAAxB;;AAUA,UAAIc,eAAe,IAAIvlB,YAAY,CAAC+I,SAAb,CAAuBwc,eAAvB,CAAvB,EAAgE;AAC9DsC,2BAAmB,GAAG,IAAtB;AACAxmB,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4lB,6CAAlD,EAAiG;AAC/FhnB,cAAI,EAAJA,IAD+F;AAE/FiC,qBAAW,EAAE8kB,aAAa,CAAC9c,GAFoE;AAG/F8S,mBAAS,EAATA,SAH+F;AAI/F7a,gBAAM,EAANA,MAJ+F;AAK/F4F,cAAI,EAAE;AALyF,SAAjG,CAFF,EAF8D,CAY9D;;AACA,eAAO,IAAIrF,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5BA,iBAAO,CAAC,IAAD,CAAP;AACD,SAFM,CAAP;AAGD;;AACD,UAAI8hB,eAAe,IAAIvlB,YAAY,CAACoD,QAAb,CAAsBmiB,eAAtB,CAAnB,IAA6D1Z,MAAM,CAACC,IAAP,CAAYyZ,eAAZ,EAA6BlgB,MAA7B,GAAsC,CAAvG,EAA0G;AACxG;AACAwiB,2BAAmB,GAAG,IAAtB;AACAxmB,cAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4lB,6CAAlD,EAAiG;AAC/FhnB,cAAI,EAAJA,IAD+F;AAE/FiC,qBAAW,EAAE8kB,aAAa,CAAC9c,GAFoE;AAG/F8S,mBAAS,EAATA,SAH+F;AAI/F7a,gBAAM,EAANA,MAJ+F;AAK/F4F,cAAI,EAAE;AALyF,SAAjG,CAFF;AAUA,eAAO,IAAP;AACD;AACF,KA3FD;;AA4FA,QAAI5H,MAAM,CAACM,kBAAX,EAA+B;AAC7B,aAAO,IAAIiC,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5BA,eAAO,CAACokB,mBAAD,CAAP;AACD,OAFM,CAAP;AAGD;;AACD,WAAOA,mBAAP;AACD,GA/rBgB;;AAisBjB;;;;;;;;;;;AAWAlC,0BAAwB,EAAE,kCAAC1d,QAAD,EAAWjF,WAAX,EAAwBC,MAAxB,EAAgCuE,eAAhC,EAAiDwd,QAAjD,EAA8D;AACtF,QAAI3c,MAAJ;;AACA,QAAIrI,YAAY,CAACoD,QAAb,CAAsB6E,QAAQ,CAACkV,QAA/B,KAA4C,CAACtR,MAAM,CAACC,IAAP,CAAY7D,QAAQ,CAACkV,QAArB,EAA+B9X,MAAhF,EAAwF;AACtFhE,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BqC,oBAAnD,EAAyE;AACvEtR,mBAAW,EAAXA,WADuE;AAEvEC,cAAM,EAANA,MAFuE;AAGvElC,YAAI,EAAJA;AAHuE,OAAzE,CAFF,EAOE,CAACikB,QAPH;AASA,aAAO,IAAP;AACD,KAXD,MAWO;AACL,UAAMgD,qBAAqB,GAAGlU,gBAAgB,CAC5C7L,QAAQ,CAACkV,QADmC,EAE5C3V,eAF4C,EAG5CxE,WAH4C,EAI5CC,MAJ4C,EAK5C,CAAC+hB,QAL2C,CAA9C;;AAOA,UAAI,CAACgD,qBAAL,EAA4B;AAC1B3f,cAAM,GAAG+b,UAAU,CAAC7L,MAApB;AACD,OAFD,MAEO;AACLlQ,cAAM,GAAG+b,UAAU,CAAC9L,MAApB;AACD;;AAEDjX,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6kB,mBAAlD,EAAuE;AACrEhkB,mBAAW,EAAXA,WADqE;AAErEC,cAAM,EAANA,MAFqE;AAGrEuE,uBAAe,EAAEyE,IAAI,CAACC,SAAL,CAAe1E,eAAe,IAAI,EAAlC,CAHoD;AAIrEzG,YAAI,EAAJA,IAJqE;AAKrEsH,cAAM,EAANA,MALqE;AAMrE4e,wBAAgB,EAAE3C,oBAAoB,CAACE,gBAN8B;AAOrEha,iBAAS,EAAE;AAP0D,OAAvE,CAFF,EAWE,CAACwa,QAXH;;AAcA,UAAI3c,MAAM,KAAK+b,UAAU,CAAC7L,MAA1B,EAAkC;AAChC,eAAO,KAAP;AACD,OAFD,MAEO;AACL,eAAO,IAAP;AACD;AACF;AACF,GA3vBgB;;AA6vBjB;;;;;;;;;;;AAWAoO,gCAxwBiB,0CAwwBc1lB,MAxwBd,EAwwBsBgH,QAxwBtB,EAwwBgCjF,WAxwBhC,EAwwB6CC,MAxwB7C,EAwwBqD2E,QAxwBrD,EAwwB+D+c,iBAxwB/D,EAwwBkFK,QAxwBlF,EAwwB4F;AAC3G,QAAIxa,SAAJ,EAAe1G,aAAf,EAA8BmF,WAA9B,CAD2G,CAE3G;;AAF2G,gCAG9DwL,gBAAgB,CAACC,oBAAjB,CAC3CzR,MAD2C,EAE3CgF,QAF2C,EAG3ChH,MAAM,CAAC8B,YAAP,CAAoB0D,SAHuB,CAH8D;;AAGxG+D,aAHwG,yBAGxGA,SAHwG;AAG7F1G,iBAH6F,yBAG7FA,aAH6F;AAG9EmF,eAH8E,yBAG9EA,WAH8E;AAQ3G5H,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B8lB,gCAAlD,EAAoF;AAClFlnB,UAAI,EAAJA,IADkF;AAElFiC,iBAAW,EAAXA,WAFkF;AAGlFC,YAAM,EAANA,MAHkF;AAIlFoF,YAAM,EAAEvE,aAAa,2BAAoBA,aAApB,IAAsC;AAJuB,KAApF,CAFF,EAR2G,CAkB3G;;AACA,QAAIA,aAAJ,EAAmB;AACjB;AACAkD,kBAAY,CAACuH,aAAb,CAA2BtN,MAA3B,EAAmCgH,QAAnC,EAA6CnE,aAA7C,EAA4Db,MAA5D,EAAoE2E,QAApE,EAA8E+c,iBAA9E;AACD,KAtB0G,CAwB3G;;;AACArkB,gBAAY,CAAC+e,OAAb,CACExT,MAAM,CAACa,MAAP,CACE;AACEwb,4BAAsB,EAAE,KAD1B;AAEEC,uBAAiB,EAAE;AAFrB,KADF,EAKElgB,QAAQ,CAACY,IAAT,KAAkB6M,gBAAgB,CAACE,eAAnC,GACI;AACEpQ,sBAAgB,EAAE,CAAC,CAAC1B;AADtB,KADJ,GAII;AACEA,mBAAa,EAAbA,aADF;AAEEmF,iBAAW,EAAXA;AAFF,KATN,EAaE+b,QAbF,CADF;AAkBA,WAAO;AACLxa,eAAS,EAAEA,SAAS,IAAIA,SAAS,CAACA,SAD7B;AAEL1G,mBAAa,EAAbA,aAFK;AAGLmF,iBAAW,EAAXA;AAHK,KAAP;AAKD,GAxzBgB;;AA0zBjB;;;;;;;;;;;AAWAqc,uBAAqB,EAAE,+BAACrkB,MAAD,EAASgH,QAAT,EAAmBjF,WAAnB,EAAgCC,MAAhC,EAAwCwE,2BAAxC,EAAqEud,QAArE,EAAkF;AACvG,QAAI3c,MAAJ;AACA,QAAIvE,aAAJ,EAAmBmF,WAAnB;;AACA,QAAIhB,QAAQ,CAACuV,wBAAb,EAAuC;AACrC,UAAI4K,kBAAkB,GAAGphB,YAAY,CAAC8f,qBAAb,CACvB7e,QADuB,EAEvBjF,WAFuB,EAGvBC,MAHuB,EAIvBwE,2BAJuB,EAKvB,CAACud,QALsB,CAAzB;;AAOA,UAAIqD,eAAJ;;AACA,UAAID,kBAAJ,EAAwB;AACtB/f,cAAM,GAAG+b,UAAU,CAAC9L,MAApB;AACA+P,uBAAe,GAAGD,kBAAkB,CAACtkB,aAArC;AACD,OAHD,MAGO;AACLuE,cAAM,GAAG+b,UAAU,CAAC7L,MAApB;AACA8P,uBAAe,GAAG,EAAlB;AACD;;AAEDhnB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6kB,mBAAlD,EAAuE;AACrEhkB,mBAAW,EAAXA,WADqE;AAErEC,cAAM,EAANA,MAFqE;AAGrEuE,uBAAe,EAAEyE,IAAI,CAACC,SAAL,CAAezE,2BAAf,CAHoD;AAIrE1G,YAAI,EAAJA,IAJqE;AAKrEsH,cAAM,EAANA,MALqE;AAMrE4e,wBAAgB,EAAE3C,oBAAoB,CAACC,YAN8B;AAOrE/Z,iBAAS,EAAEvC,QAAQ,CAACY,IAAT,KAAkB6M,gBAAgB,CAACE,eAAnC,GAAqD,EAArD,4BAA4EyS,eAA5E;AAP0D,OAAvE,CAFF,EAWE,CAACrD,QAXH;;AAcA,UAAIoD,kBAAJ,EAAwB;AACtBtkB,qBAAa,GAAGskB,kBAAkB,CAACtkB,aAAnC;AACAmF,mBAAW,GAAGmf,kBAAkB,CAACnf,WAAjC,CAFsB,CAGtB;;AACA,YAAI+b,QAAJ,EAAc;AACZ1kB,sBAAY,CAAC+e,OAAb,CACExT,MAAM,CAACa,MAAP,CACE;AACEwb,kCAAsB,EAAE,KAD1B;AAEEC,6BAAiB,EAAE,CAAC,CAACrkB;AAFvB,WADF,EAKEmE,QAAQ,CAACY,IAAT,KAAkB6M,gBAAgB,CAACE,eAAnC,GACI;AACEpQ,4BAAgB,EAAE,CAAC,CAAC1B;AADtB,WADJ,GAII;AACEA,yBAAa,EAAbA,aADF;AAEEmF,uBAAW,EAAXA;AAFF,WATN,EAaE+b,QAbF,CADF;AAiBD;;AACD,YAAI/jB,MAAM,CAACM,kBAAX,EAA+B;AAC7B,iBAAO,IAAIiC,OAAJ,CAAY,UAAAC,OAAO;AAAA,mBAAIA,OAAO,CAAC2kB,kBAAD,CAAX;AAAA,WAAnB,CAAP;AACD;;AACD,eAAOA,kBAAP;AACD;AACF,KA3DD,MA2DO;AACL/mB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BqW,oBAAnD,EAAyE;AACvEtlB,mBAAW,EAAXA,WADuE;AAEvEC,cAAM,EAANA,MAFuE;AAGvElC,YAAI,EAAJA;AAHuE,OAAzE,CAFF,EAOE,CAACikB,QAPH;AASD;AACF,GA94BgB;;AAg5BjB;;;;;;;;;;;;;;AAcAQ,sBAAoB,EAAE,8BACpBvkB,MADoB,EAEpB8B,YAFoB,EAGpBkF,QAHoB,EAIpBjF,WAJoB,EAKpBC,MALoB,EAMpByE,eANoB,EAOpB+c,cAPoB,EAQpBO,QARoB,EASjB;AACH,QAAIuD,QAAJ;;AAEA,QAAItnB,MAAM,CAACM,kBAAX,EAA+B;AAC7B,aAAOyF,YAAY,CAACkgB,kBAAb,CAAgCjmB,MAAhC,EAAwCgC,MAAxC,EAAgDD,WAAhD,EAA6D0E,eAA7D,EAA8E,CAACsd,QAA/E,EAAyFphB,IAAzF,CAA8F,UACnG2kB,QADmG,EAEnG;AACAA,gBAAQ,GAAGA,QAAQ,IAAI;AAAEzkB,uBAAa,EAAE,IAAjB;AAAuBW,wBAAc,EAAE;AAAvC,SAAvB;AAEA,eAAOuC,YAAY,CAACwhB,+BAAb,CACLvnB,MADK,EAEL8B,YAFK,EAGLkF,QAHK,EAILjF,WAJK,EAKLC,MALK,EAMLwhB,cANK,EAOLO,QAPK,EAQLuD,QARK,CAAP;AAUD,OAfM,CAAP;AAgBD,KAjBD,MAiBO;AACLA,cAAQ,GAAGvhB,YAAY,CAACkgB,kBAAb,CAAgCjmB,MAAhC,EAAwCgC,MAAxC,EAAgDD,WAAhD,EAA6D0E,eAA7D,EAA8E,CAACsd,QAA/E,CAAX;AAEA,aAAOhe,YAAY,CAACwhB,+BAAb,CACLvnB,MADK,EAEL8B,YAFK,EAGLkF,QAHK,EAILjF,WAJK,EAKLC,MALK,EAMLwhB,cANK,EAOLO,QAPK,EAQLuD,QARK,CAAP;AAUD;AACF,GAz8BgB;AA28BjBC,iCA38BiB,2CA48BfvnB,MA58Be,EA68Bf8B,YA78Be,EA88BfkF,QA98Be,EA+8BfjF,WA/8Be,EAg9BfC,MAh9Be,EAi9BfwhB,cAj9Be,EAk9BfO,QAl9Be,EAm9BfuD,QAn9Be,EAo9Bf;AAAA,QACMzkB,aADN,GACwCykB,QADxC,CACMzkB,aADN;AAAA,QACqBW,cADrB,GACwC8jB,QADxC,CACqB9jB,cADrB;AAEA,QAAI8gB,eAAJ;;AAEA,QAAIgD,QAAQ,IAAIA,QAAQ,CAACvlB,WAArB,IAAoCc,aAAxC,EAAuD;AACrDyhB,qBAAe,GAAGte,YAAY,CAACwc,oBAAb,CAAkC1gB,YAAlC,EAAgDC,WAAhD,EAA6Dc,aAA7D,CAAlB;AACD,KAFD,MAEO;AACL;AACAzC,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8BwW,mCAAnD,EAAwF;AACtF1nB,YAAI,EAAJA,IADsF;AAEtFiC,mBAAW,EAAXA,WAFsF;AAGtFC,cAAM,EAANA;AAHsF,OAAxF,CAFF,EAOE,CAAC+hB,QAPH;AASD;;AAED,QAAI/b,WAAJ,CAnBA,CAqBA;;AACA,QAAIsc,eAAJ,EAAqB;AACnBzhB,mBAAa,GAAGyhB,eAAe,CAAC7V,IAAhC;AACAzG,iBAAW,GAAGsc,eAAe,CAAC9b,EAA9B;AAEApI,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BumB,oBAAlD,EAAwE;AACtE3nB,YAAI,EAAJA,IADsE;AAEtEiC,mBAAW,EAAXA,WAFsE;AAGtEC,cAAM,EAANA,MAHsE;AAItEa,qBAAa,EAAbA;AAJsE,OAAxE,CAFF,EAQE,CAACkhB,QARH,EAJmB,CAenB;;AACA,UAAIA,QAAJ,EAAc;AACZ1kB,oBAAY,CAAC+e,OAAb,CACExT,MAAM,CAACa,MAAP,CACE;AACEwb,gCAAsB,EAAE,CAAC,CAACpkB,aAD5B;AAEEqkB,2BAAiB,EAAE;AAFrB,SADF,EAKElgB,QAAQ,CAACY,IAAT,KAAkB6M,gBAAgB,CAACE,eAAnC,GACI;AACEpQ,0BAAgB,EAAE,CAAC,CAAC1B;AADtB,SADJ,GAII;AACEA,uBAAa,EAAbA,aADF;AAEEmF,qBAAW,EAAXA;AAFF,SATN,EAaE+b,QAbF,CADF;AAiBD;;AAED,aAAO;AACLxa,iBAAS,EAAE+a,eADN;AAELzhB,qBAAa,EAAbA,aAFK;AAGLmF,mBAAW,EAAXA,WAHK;AAILiG,4BAAoB,EAAEzK,cAJjB;AAKLyE,yBAAiB,EAAE;AALd,OAAP;AAOD,KA3CD,MA2CO,IACL,CAAClJ,YAAY,CAACgF,WAAb,CAAyB/D,MAAM,CAACG,kBAAhC,CAAD,IACA,CAACqjB,cADD,IAEAzkB,YAAY,CAACgF,WAAb,CAAyBugB,eAAzB,CAHK,EAIL;AACAlkB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAAC2H,IADf,EAEEzH,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAAC2H,gBAAf,CAAgCmgB,sBAArD,EAA6E;AAC3E5nB,YAAI,EAAJA,IAD2E;AAE3EiC,mBAAW,EAAXA,WAF2E;AAG3EC,cAAM,EAANA,MAH2E;AAI3ErD,WAAG,EAAEqB,MAAM,CAACoJ;AAJ+D,OAA7E,CAFF,EAQE,CAAC2a,QARH;AAWA3jB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BwmB,sBAAlD,EAA0E;AACxE5nB,YAAI,EAAJA,IADwE;AAExEiC,mBAAW,EAAXA,WAFwE;AAGxEC,cAAM,EAANA,MAHwE;AAIxE2lB,cAAM,EAAE3nB,MAAM,CAACoJ,OAAP,KAAmBtK,OAAO,CAAC2E,KAA3B,GAAmC,UAAnC,GAAgD;AAJgB,OAA1E,CAFF,EAQE,CAACsgB,QARH;AAUA,aAAO,EAAP;AACD;AACF,GAjjCgB;;AAmjCjB;;;;;;;;;;;;;AAaAkB,qBAhkCiB,+BAgkCGN,YAhkCH,EAgkCiB3iB,MAhkCjB,EAgkCyBuE,eAhkCzB,EAgkC0C;AACzD,QAAI2e,iBAAiB,GAAG,EAAxB;AACA,QAAIC,mBAAmB,GAAG,EAA1B;AAEAR,gBAAY,CAAC7Z,OAAb,CAAqB,UAAA+b,aAAa,EAAI;AACpC,UAAMe,gBAAgB,GACpB7hB,YAAY,CAAC2e,wBAAb,CAAsCmC,aAAtC,EAAqDA,aAAa,CAAC9c,GAAnE,EAAwE/H,MAAxE,EAAgFuE,eAAhF,KACAoJ,gBAAgB,CAACuB,oBAAjB,CAAsClP,MAAtC,EAA8C6kB,aAA9C,EAA6D,IAA7D,CAFF;;AAGA,UAAIe,gBAAJ,EAAsB;AACpBf,qBAAa,GAAG7nB,YAAY,CAACub,WAAb,CAAyBsM,aAAzB,CAAhB,CADoB,CAEpB;;AACA3B,yBAAiB,CAAC/f,IAAlB,CAAuB0hB,aAAvB;AACD,OAJD,MAIO;AACL1B,2BAAmB,CAAChgB,IAApB,CAAyB0hB,aAAzB;AACD;AACF,KAXD;AAaA,WAAO;AACL3B,uBAAiB,EAAjBA,iBADK;AAELC,yBAAmB,EAAnBA;AAFK,KAAP;AAID,GArlCgB;;AAulCjB;;;;;;;;;;;;;AAaAQ,kCApmCiB,4CAqmCf3lB,MArmCe,EAsmCf2mB,cAtmCe,EAumCfkB,oBAvmCe,EAwmCf7lB,MAxmCe,EAymCf6a,SAzmCe,EA0mCfkG,OA1mCe,EA2mCfpc,QA3mCe,EA4mCf+c,iBA5mCe,EA6mCfK,QA7mCe,EA8mCf;AACA;AACA8D,wBAAoB,CAAC/c,OAArB,CAA6B,UAAA9D,QAAQ,EAAI;AACvCA,cAAQ,CAACgV,MAAT,GAAkB/L,IAAI,CAACG,KAAL,CAAW,MAAMyX,oBAAoB,CAACzjB,MAAtC,CAAlB;AACD,KAFD,EAFA,CAMA;;AACA4B,gBAAY,CAACsc,qBAAb,CAAmCuF,oBAAnC;;AAEA,QAAIC,cAAc,GAAGnY,gBAAgB,CAACU,aAAjB,CACnBwX,oBADmB,EAEnBlY,gBAAgB,CAACsC,oBAAjB,CAAsCjM,YAAY,CAACsL,gBAAb,CAA8BtP,MAA9B,EAAsCxB,SAAtC,EAAiDuiB,OAAjD,CAAtC,CAFmB,CAArB;;AAKA3iB,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6mB,uBAAlD,EAA2E;AACzE/lB,YAAM,EAANA,MADyE;AAEzE6a,eAAS,EAATA,SAFyE;AAGzE/c,UAAI,EAAJA,IAHyE;AAIzEiC,iBAAW,EAAE+lB,cAAc,CAAC/d;AAJ6C,KAA3E,CAFF;;AAUA,QAAI+d,cAAc,CAACtf,EAAf,KAAsBme,cAAc,CAACne,EAAzC,EAA6C;AAC3C;AACA,aAAOzC,YAAY,CAAC2f,8BAAb,CACL1lB,MADK,EAEL8nB,cAFK,EAGLA,cAAc,CAAC/d,GAHV,EAIL/H,MAJK,EAKL2E,QALK,EAML+c,iBANK,EAOLK,QAPK,CAAP;AASD,KAXD,MAWO;AACL;AACA3jB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4jB,8BAAlD,EAAkF;AAChF9iB,cAAM,EAANA,MADgF;AAEhF6a,iBAAS,EAATA,SAFgF;AAGhF/c,YAAI,EAAJA,IAHgF;AAIhFiC,mBAAW,EAAE4kB,cAAc,CAAC5c;AAJoD,OAAlF,CAFF;AASA,aAAO,EAAP;AACD;AACF,GA9pCgB;;AA+pCjB;;;;;;;;;;;;AAYA6b,kCAAgC,EAAE,0CAChC5lB,MADgC,EAEhC8B,YAFgC,EAGhC6kB,cAHgC,EAIhCkB,oBAJgC,EAKhC7lB,MALgC,EAMhC6a,SANgC,EAOhCkG,OAPgC,EAQhCpc,QARgC,EAShC+c,iBATgC,EAUhCK,QAVgC,EAW7B;AACH,QAAI+D,cAAc,GAAG,IAArB;AACA,QAAIE,KAAK,GAAG,KAAZ,CAFG,CAEgB;;AACnB,QAAIC,aAAa,GAAG,OAAOnmB,YAAY,CAACmb,MAAb,CAAoB8F,OAApB,EAA6BpG,CAApC,KAA0C,WAA1C,GAAwD7a,YAAY,CAACmb,MAAb,CAAoB8F,OAApB,EAA6BpG,CAArF,GAAyF,EAA7G;AACA,QAAIC,EAAE,GAAG,OAAO9a,YAAY,CAACmb,MAAb,CAAoB8F,OAApB,EAA6BnG,EAApC,KAA2C,WAA3C,GAAyD9a,YAAY,CAACmb,MAAb,CAAoB8F,OAApB,EAA6BnG,EAAtF,GAA2F,EAApG;;AAEA,SAAK,IAAIpM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyX,aAAa,CAAC7jB,MAAlC,EAA0CoM,CAAC,EAA3C,EAA+C;AAC7C,WAAK,IAAI0X,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,oBAAoB,CAACzjB,MAAzC,EAAiD8jB,CAAC,EAAlD,EAAsD;AACpD,YAAIL,oBAAoB,CAACK,CAAD,CAApB,CAAwB1f,EAAxB,KAA+Byf,aAAa,CAACzX,CAAD,CAAhD,EAAqD;AACnDsX,wBAAc,GAAG9oB,YAAY,CAACub,WAAb,CAAyBsN,oBAAoB,CAACK,CAAD,CAA7C,CAAjB;AACAF,eAAK,GAAG,IAAR;AACA;AACD;AACF;;AACD,UAAIA,KAAK,KAAK,IAAd,EAAoB;AACrB,KAfE,CAiBH;AACA;;;AACA,QAAIF,cAAc,KAAK,IAAvB,EAA6B;AAC3B,UAAIK,yBAAyB,GAAG,EAAhC,CAD2B,CAE3B;;AACA,WAAK,IAAI3X,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGqX,oBAAoB,CAACzjB,MAAzC,EAAiDoM,EAAC,EAAlD,EAAsD;AACpD,YAAIjD,UAAU,GAAGsa,oBAAoB,CAACrX,EAAD,CAApB,CAAwBhI,EAAzC;;AACA,YAAI,OAAOoU,EAAE,CAACrP,UAAD,CAAT,KAA0B,WAA9B,EAA2C;AACzC,cAAI6a,cAAc,GAAGppB,YAAY,CAACub,WAAb,CAAyBsN,oBAAoB,CAACrX,EAAD,CAA7C,CAArB;AACA4X,wBAAc,CAACpM,MAAf,GAAwBY,EAAE,CAACrP,UAAD,CAA1B;AACA4a,mCAAyB,CAAChjB,IAA1B,CAA+BijB,cAA/B;AACD;AACF;AACD;;;;;;;AAMApiB,kBAAY,CAACsc,qBAAb,CAAmC6F,yBAAnC;AAEAL,oBAAc,GAAGnY,gBAAgB,CAACU,aAAjB,CACf8X,yBADe,EAEfxY,gBAAgB,CAACsC,oBAAjB,CAAsCjM,YAAY,CAACsL,gBAAb,CAA8BtP,MAA9B,EAAsCxB,SAAtC,EAAiDuiB,OAAjD,CAAtC,CAFe,CAAjB;AAID;;AAED,QAAI+E,cAAc,IAAI,IAAtB,EAA4B;AAC1B1nB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B6mB,uBAAlD,EAA2E;AACzE/lB,cAAM,EAANA,MADyE;AAEzE6a,iBAAS,EAATA,SAFyE;AAGzE/c,YAAI,EAAJA,IAHyE;AAIzEiC,mBAAW,EAAE+lB,cAAc,CAAC/d;AAJ6C,OAA3E,CAFF;AASD,KAtDE,CAuDH;AACA;;;AACA,QAAI+d,cAAc,IAAI,IAAlB,IAA0BA,cAAc,CAACtf,EAAf,KAAsBme,cAAc,CAACne,EAAnE,EAAuE;AACrE;AACA,aAAOzC,YAAY,CAAC2f,8BAAb,CACL1lB,MADK,EAEL8nB,cAFK,EAGLA,cAAc,CAAC/d,GAHV,EAIL/H,MAJK,EAKL2E,QALK,EAML+c,iBANK,EAOLK,QAPK,CAAP;AASD,KAXD,MAWO;AACL;AACA3jB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B4jB,8BAAlD,EAAkF;AAChF9iB,cAAM,EAANA,MADgF;AAEhF6a,iBAAS,EAATA,SAFgF;AAGhF/c,YAAI,EAAJA,IAHgF;AAIhFiC,mBAAW,EAAE4kB,cAAc,CAAC5c;AAJoD,OAAlF,CAFF;AASA,aAAO,EAAP;AACD;AACF;AAvwCgB,CAAnB;AA0wCAnE,MAAM,CAACC,OAAP,GAAiBE,YAAjB,C;;;;;;;;;;;ACrzCA;;;;;;;;;;;;;;;AAgBA,IAAM3G,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;;AACA,IAAM1Q,YAAY,GAAGJ,mBAAO,CAAC,mDAAD,CAA5B;;AACA,IAAMuH,SAAS,GAAGvH,mBAAO,CAAC,oDAAD,CAAzB;;AACA,IAAMypB,kBAAkB,GAAG,CAAC,KAAD,CAA3B;AAEA,IAAMvoB,IAAI,GAAGjB,YAAY,CAACiX,mBAA1B;AAEA,IAAID,eAAe,GAAG;AACpBiI,iBAAe,EAAE,yBAASxV,UAAT,QAA+D;AAAA;;AAAA,QAAxCtF,gBAAwC,QAAxCA,gBAAwC;AAAA,QAApBua,aAAoB,uEAAJ,EAAI;AAC9E,QAAI+K,SAAJ;AACA,QAAIC,WAAW,GAAG,GAAlB;AAEAA,eAAW,IAAIvpB,YAAY,CAACwpB,yBAAb,CAAuClgB,UAAvC,EAAmD+f,kBAAnD,CAAf;;AAEA,QAAI;AACF;AACA,UAAI,IAAJ,EAAwC;AACtCzpB,2BAAO,CAAC,iDAAD,CAAP,CAAyB6pB,QAAzB,CACEngB,UADF,EAEEigB,WAFF,EAGE;AAAEG,yBAAe,EAAE1lB;AAAnB,SAHF,EAIEua,aAJF;AAMD,OAPD,MAOO,YAiBN;AACF,KA3BD,CA2BE,OAAOna,GAAP,EAAY;AACZ,UAAIulB,QAAQ,GAAGrgB,UAAU,CAACsgB,GAA1B;AAEAxoB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B8nB,iBAAnD,EAAsE;AACpE/oB,YAAI,EAAEjB,YAAY,CAACgX,eADiD;AAEpE8S,gBAAQ,EAARA,QAFoE;AAGpEvlB,WAAG,EAAHA;AAHoE,OAAtE,CAFF;AAQD;;AAED,WAAO,KAAP;AACD,GAhDmB;AAkDpB0lB,mBAAiB,EAAE,2BAASxgB,UAAT,EAAqB8U,KAArB,EAA4B1J,QAA5B,EAAsC;AACvD,QAAI0J,KAAJ,EAAW;AACThd,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B8nB,iBAAnD,EAAsE;AACpE/oB,YAAI,EAAJA,IADoE;AAEpE6oB,gBAAQ,EAAEjV,QAAQ,CAACiV,QAFiD;AAGpEvlB,WAAG,EAAEga;AAH+D,OAAtE,CAFF;AAQA,aAAO,KAAP;AACD,KAVD,MAUO;AACL,UAAM2L,UAAU,GAAG;AACjBjpB,YAAI,EAAJA,IADiB;AAEjB6oB,gBAAQ,EAAEjV,QAAQ,CAACiV,QAFF;AAGjBnjB,iBAAS,EAAE8C,UAAU,IAAIA,UAAU,CAAC0gB;AAHnB,OAAnB;AAKA,UAAIC,MAAM,GAAG,EAAb;;AACA,UAAIF,UAAU,CAACJ,QAAX,CAAoBzc,QAApB,CAA6B,MAA7B,CAAJ,EAA0C;AACxC,YAAI3F,eAAe,GAAGyE,IAAI,CAACke,KAAL,CAAW5gB,UAAU,CAAC6gB,IAAtB,EAA4BC,CAAlD;AACAH,cAAM,GAAGre,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkBsd,UAAlB,EAA8B;AAAExiB,yBAAe,EAAEA;AAAnB,SAA9B,CAAT;AACA0iB,cAAM,CAACI,QAAP,6BAAqCre,IAAI,CAACC,SAAL,CAAege,MAAM,CAAC1iB,eAAtB,CAArC;AACD,OAJD,MAIO;AACL0iB,cAAM,GAAGre,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkBsd,UAAlB,EAA8B;AACrCxb,oBAAU,EAAEjF,UAAU,IAAIA,UAAU,CAACghB,aADA;AAErCthB,qBAAW,EAAEM,UAAU,IAAIA,UAAU,CAACihB;AAFD,SAA9B,CAAT;AAIAN,cAAM,CAACI,QAAP,wBAAgCJ,MAAM,CAAC1b,UAAvC,8BAAqE0b,MAAM,CAACjhB,WAA5E;AACD;;AACD5H,YAAM,CAACQ,GAAP,CAAWjB,YAAY,CAACsB,IAAxB,EAA8BpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BsoB,kBAAlD,EAAsEP,MAAtE,CAA9B;AACA,aAAO,IAAP;AACD;AACF,GAlFmB;AAoFpBpL,kBAAgB,EAAE,0BAASvV,UAAT,EAAqBO,OAArB,SAAwE;AAAA;;AAAA,QAAxC7F,gBAAwC,SAAxCA,gBAAwC;AAAA,QAApBua,aAAoB,uEAAJ,EAAI;AACxF,QAAI+K,SAAJ;AACA,QAAIC,WAAW,GAAG,GAAlB;AAEAA,eAAW,IAAIvpB,YAAY,CAACwpB,yBAAb,CAAuClgB,UAAvC,EAAmD+f,kBAAnD,CAAf;;AAEA,QAAI;AACF;AAEA,UAAI,IAAJ,EAAwC;AACtC,YAAI,OAAOoB,cAAP,KAA0B,WAA9B,EAA2C;AACzC,iBAAO7qB,mBAAO,CAAC,6CAAD,CAAP,CACJ8qB,IADI,CACC;AACJrnB,kBAAM,EAAE,MADJ;AAEJumB,eAAG,YAAKtgB,UAAU,CAACsgB,GAAhB,SAAsBL,WAAtB,CAFC;AAGJ1f,mBAAO,EAAPA,OAHI;AAIJ0U,yBAAa,EAAbA;AAJI,WADD,EAOJ5a,IAPI,CAOC,YAAM;AACV,kBAAI,CAACgnB,kBAAL,CAAwBrhB,UAAxB,EAAoCO,OAApC;;AACA,gBAAI7F,gBAAJ,EAAsB;AACpBA,8BAAgB,CAAC,IAAD,EAAO;AAAEoE,sBAAM,EAAE;AAAV,eAAP,CAAhB;AACD;AACF,WAZI,WAaE,UAAAgW,KAAK,EAAI;AACd,kBAAI,CAACuM,kBAAL,CAAwBrhB,UAAxB,EAAoCO,OAApC,EAA6CuU,KAA7C;;AACApa,4BAAgB,CAACoa,KAAD,EAAQ;AAAEhW,oBAAM,EAAE;AAAV,aAAR,CAAhB;AACD,WAhBI,CAAP;AAiBD;;AAED,eAAOxI,mBAAO,CAAC,yCAAD,CAAP,CACJ8qB,IADI,CACC;AACJrnB,gBAAM,EAAE,MADJ;AAEJumB,aAAG,YAAKtgB,UAAU,CAACsgB,GAAhB,SAAsBL,WAAtB,CAFC;AAGJ1f,iBAAO,EAAPA,OAHI;AAIJ0U,uBAAa,EAAbA,aAJI;AAKJnd,gBAAM,EAANA;AALI,SADD,EAQJuC,IARI,CAQC,YAAM;AACV,gBAAI,CAACgnB,kBAAL,CAAwBrhB,UAAxB,EAAoCO,OAApC;;AACA,cAAI7F,gBAAJ,EAAsB;AACpBA,4BAAgB,CAAC,IAAD,EAAO;AAAEoE,oBAAM,EAAE;AAAV,aAAP,CAAhB;AACD;AACF,SAbI,WAcE,UAAAgW,KAAK,EAAI;AACd,gBAAI,CAACuM,kBAAL,CAAwBrhB,UAAxB,EAAoCO,OAApC,EAA6CuU,KAA7C;;AACApa,0BAAgB,CAACoa,KAAD,EAAQ;AAAEhW,kBAAM,EAAE;AAAV,WAAR,CAAhB;AACD,SAjBI,CAAP;AAkBD,OAvCD,MAuCO,YAqBN;AACF,KAhED,CAgEE,OAAOhE,GAAP,EAAY;AACZ,UAAIulB,QAAQ,GAAGrgB,UAAU,CAACsgB,GAA1B;AAEAxoB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B8nB,iBAAnD,EAAsE;AACpE/oB,YAAI,EAAEjB,YAAY,CAACiX,mBADiD;AAEpE6S,gBAAQ,EAARA,QAFoE;AAGpEvlB,WAAG,EAAHA;AAHoE,OAAtE,CAFF;AAQD;;AAED,WAAOb,OAAO,CAACC,OAAR,CAAgB,KAAhB,CAAP;AACD,GAxKmB;AA0KpBmnB,oBAAkB,EAAE,4BAASrhB,UAAT,EAAqBO,OAArB,EAA8BuU,KAA9B,EAAqC;AACvD,QAAIuL,QAAQ,GAAGrgB,UAAU,CAACsgB,GAA1B;;AAEA,QAAIxL,KAAJ,EAAW;AACThd,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8B8nB,iBAAnD,EAAsE;AACpE/oB,YAAI,EAAJA,IADoE;AAEpE6oB,gBAAQ,EAAEA,QAF0D;AAGpEvlB,WAAG,EAAEga;AAH+D,OAAtE,CAFF;AAQA,aAAO,KAAP;AACD,KAVD,MAUO;AACL,UAAIa,KAAK,aAAM3V,UAAU,CAACshB,EAAjB,WAAT;;AACA,UAAIthB,UAAU,CAACshB,EAAX,KAAkBzjB,SAAS,CAACgF,qBAAhC,EAAuD;AACrD,eAAOtC,OAAO,CAACghB,CAAR,CAAUC,OAAV,CAAkBC,KAAlB,CAAwBC,kBAA/B;AACA/L,aAAK,8BAAuBjT,IAAI,CAACC,SAAL,CAAepC,OAAO,CAACghB,CAAR,CAAUC,OAAV,CAAkBC,KAAjC,CAAvB,CAAL;AACD;;AAED3pB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACsB,IADf,EAEEpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6B+oB,iCAAlD,EAAqF;AACnFnqB,YAAI,EAAJA,IADmF;AAEnF6oB,gBAAQ,EAARA,QAFmF;AAGnFnjB,iBAAS,EAAE8C,UAAU,CAAC4hB,CAH6D;AAInFjM,aAAK,EAAEA;AAJ4E,OAArF,CAFF;AAUA,aAAO,IAAP;AACD;AACF;AA1MmB,CAAtB;AA6MArY,MAAM,CAACC,OAAP,GAAiBgQ,eAAjB,C;;;;;;;;;;;ACvOA;;;;;;;;;;;;;;;AAgBA,IAAM7P,YAAY,GAAGpH,mBAAO,CAAC,mDAAD,CAA5B;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,mDAAD,CAA5B;;AACA,IAAMsW,uBAAuB,GAAGtW,mBAAO,CAAC,gFAAD,CAAvC;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;AAEA,IAAM5P,IAAI,GAAGjB,YAAY,CAACoK,WAA1B;AAEA,IAAIA,WAAW,GAAG;AAChBS,uBAAqB,EAAE,+BAAC1C,QAAD,EAAWvC,WAAX,EAA2B;AAChD,QAAI0lB,YAAY,GAAG,EAAnB;;AAEA,QAAInkB,YAAY,CAACyD,wBAAb,CAAsCzC,QAAtC,CAAJ,EAAqD;AACnD,UAAImV,SAAS,GAAGnV,QAAQ,CAACmV,SAAT,IAAsB,EAAtC;;AAEA,WAAK,IAAI3L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2L,SAAS,CAAC/X,MAA9B,EAAsCoM,CAAC,EAAvC,EAA2C;AACzC,YAAI2L,SAAS,CAAC3L,CAAD,CAAT,CAAazG,GAAb,KAAqBtF,WAAzB,EAAsC;AACpC0lB,sBAAY,GAAGhO,SAAS,CAAC3L,CAAD,CAAxB;AAEA;AACD;AACF;;AAED,aAAO2Z,YAAP;AACD;;AAED,WAAOA,YAAP;AACD,GAnBe;AAoBhBvgB,8BAA4B,EAAE,sCAAC5C,QAAD,EAAWuC,SAAX,EAAsB9E,WAAtB,EAAsC;AAClE,QAAI2lB,iBAAiB,GAAG,EAAxB;;AAEA,QAAIpkB,YAAY,CAAC2D,qBAAb,CAAmC3C,QAAnC,CAAJ,EAAkD;AAChD,UAAI,CAACuC,SAAD,IAAc,CAACA,SAAf,IAA4B,CAACA,SAAS,CAAC4S,SAA3C,EAAsD;AACpD,eAAOiO,iBAAP;AACD;;AAED,UAAI,CAAC7gB,SAAS,CAAChF,gBAAf,EAAiC;AAC/BgF,iBAAS,GAAGvD,YAAY,CAAC0c,qBAAb,CAAmC1b,QAAnC,CAAZ;AACD;;AAED,WAAK,IAAIwJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGjH,SAAS,CAAC4S,SAAV,CAAoB/X,MAAxC,EAAgDoM,CAAC,EAAjD,EAAqD;AACnD,YAAIlH,QAAQ,GAAGC,SAAS,CAAC4S,SAAV,CAAoB3L,CAApB,CAAf;;AAEA,YAAI/L,WAAW,KAAK6E,QAAQ,CAACS,GAA7B,EAAkC;AAChCqgB,2BAAiB,GAAG9gB,QAApB;AACA;AACD;AACF;AACF;;AAED,WAAO8gB,iBAAP;AACD,GA3Ce;AA4ChBhgB,0BAAwB,EAAE,kCAACJ,aAAD,EAAgBqgB,YAAhB,EAAiC;AACzD,QAAIzlB,eAAJ;;AAEA,YAAQylB,YAAR;AACE,WAAKnV,uBAAuB,CAACE,OAA7B;AACExQ,uBAAe,GAAGwc,QAAQ,CAACpX,aAAD,EAAgB,EAAhB,CAA1B;;AACA,YAAI,CAACjL,YAAY,CAAC2b,QAAb,CAAsB9V,eAAtB,CAAD,IAA2C0lB,KAAK,CAAC1lB,eAAD,CAApD,EAAuE;AACrExE,gBAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BwpB,oBAAnD,EAAyE;AACvEzqB,gBAAI,EAAJA,IADuE;AAEvEkK,yBAAa,EAAbA,aAFuE;AAGvEqgB,wBAAY,EAAZA;AAHuE,WAAzE,CAFF;AAQAzlB,yBAAe,GAAG,IAAlB;AACD;;AACD;;AAEF,WAAKsQ,uBAAuB,CAACC,MAA7B;AACEvQ,uBAAe,GAAG4lB,UAAU,CAACxgB,aAAD,CAA5B;;AACA,YAAI,CAACjL,YAAY,CAAC2b,QAAb,CAAsB9V,eAAtB,CAAD,IAA2C0lB,KAAK,CAAC1lB,eAAD,CAApD,EAAuE;AACrExE,gBAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BwpB,oBAAnD,EAAyE;AACvEzqB,gBAAI,EAAJA,IADuE;AAEvEkK,yBAAa,EAAbA,aAFuE;AAGvEqgB,wBAAY,EAAZA;AAHuE,WAAzE,CAFF;AAQAzlB,yBAAe,GAAG,IAAlB;AACD;;AACD;;AAEF,WAAKsQ,uBAAuB,CAACF,OAA7B;AACE,YAAI,CAACjW,YAAY,CAACuN,SAAb,CAAuBtC,aAAvB,CAAL,EAA4C;AAC1C5J,gBAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BwpB,oBAAnD,EAAyE;AACvEzqB,gBAAI,EAAJA,IADuE;AAEvEkK,yBAAa,EAAbA,aAFuE;AAGvEqgB,wBAAY,EAAZA;AAHuE,WAAzE,CAFF;AAQAzlB,yBAAe,GAAG,IAAlB;AACD,SAVD,MAUO;AACLA,yBAAe,GAAGoF,aAAlB;AACD;;AACD;;AAEF,WAAKkL,uBAAuB,CAAClK,IAA7B;AACE,YAAI,CAACjM,YAAY,CAACoD,QAAb,CAAsB6H,aAAtB,CAAL,EAA2C;AACzC5J,gBAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BwpB,oBAAnD,EAAyE;AACvEzqB,gBAAI,EAAJA,IADuE;AAEvEkK,yBAAa,EAAbA,aAFuE;AAGvEqgB,wBAAY,EAAZA;AAHuE,WAAzE,CAFF;AAQAzlB,yBAAe,GAAG,IAAlB;AACD,SAVD,MAUO;AACLA,yBAAe,GAAGoF,aAAlB;AACD;;AACD;;AAEF;AACEpF,uBAAe,GAAGoF,aAAlB;AACA;AAjEJ;;AAoEA,WAAOpF,eAAP;AACD;AApHe,CAAlB;AAuHAgB,MAAM,CAACC,OAAP,GAAiBoD,WAAjB,C;;;;;;;;;;;AClJA;;;;;;;;;;;;;;;eAgB2BrK,mBAAO,CAAC,mDAAD,C;IAA1Bsb,c,YAAAA,c;;gBACyBtb,mBAAO,CAAC,mDAAD,C;IAAhCuD,Q,aAAAA,Q;IAAU4Y,U,aAAAA,U;;AAElB,IAAM0P,SAAS,GAAG;AAChBC,oBAAkB,EAAE,4BAASvqB,kBAAT,EAA6B;AAC/C,QAAIwqB,YAAY,GAAG,KAAnB;AACA,QAAIC,cAAJ;;AAEA,QAAIzqB,kBAAkB,IAAIgC,QAAQ,CAAChC,kBAAD,CAA9B,IAAsD4a,UAAU,CAAC5a,kBAAkB,CAAC0qB,WAApB,CAApE,EAAsG;AACpG,UAAI;AACF,YAAM1N,QAAQ,GAAGhd,kBAAkB,CAAC0qB,WAAnB,EAAjB;AACAD,sBAAc,GAAG5f,IAAI,CAACke,KAAL,CAAW/L,QAAX,CAAjB;;AAEA,YAAIyN,cAAc,IAAIzoB,QAAQ,CAACyoB,cAAD,CAA1B,IAA8ChgB,MAAM,CAACC,IAAP,CAAY+f,cAAZ,EAA4BxmB,MAA5B,GAAqC,CAAvF,EAA0F;AACxF,cAAM6V,IAAI,+BAAwBC,cAAc,EAAtC,4CAAV;AAEAF,iBAAO,CAACC,IAAR,CAAaA,IAAb;AAEA0Q,sBAAY,GAAG,IAAf;AACD,SAND,MAMO,IAAIC,cAAJ,EAAoB;AACzB,cAAMxN,KAAK,gCAAyBlD,cAAc,EAAvC,yDAAX;AAEAF,iBAAO,CAACoD,KAAR,CAAcA,KAAd;AACD,SAJM,MAIA;AACL,cAAM0N,OAAO,kCAA2B5Q,cAAc,EAAzC,+CAAb;AAEAF,iBAAO,CAACwG,IAAR,CAAasK,OAAb;AACD;AACF,OAnBD,CAmBE,OAAO1nB,GAAP,EAAY;AACZ,YAAMga,MAAK,gCAAyBlD,cAAc,EAAvC,kEAAiG9W,GAAjG,CAAX;;AAEA4W,eAAO,CAACoD,KAAR,CAAcA,MAAd;AACAuN,oBAAY,GAAG,KAAf;AACD;AACF;;AAED,WAAO;AACLA,kBAAY,EAAZA,YADK;AAELC,oBAAc,EAAdA;AAFK,KAAP;AAID,GArCe;AAuChBlB,MAAI,EAAE,gBAAgF;AAAA,mFAAJ,EAAI;AAAA,QAArErnB,MAAqE,QAArEA,MAAqE;AAAA,QAA7DumB,GAA6D,QAA7DA,GAA6D;AAAA,QAAxD/f,OAAwD,QAAxDA,OAAwD;AAAA,QAA/C1I,kBAA+C,QAA/CA,kBAA+C;AAAA,kCAA3Bod,aAA2B;AAAA,QAA3BA,aAA2B,mCAAX,EAAW;;AACpF,QAAI,CAACqL,GAAD,IAAQ,CAACvmB,MAAb,EAAqB;AACnB;AACD;;AAED,WAAO,IAAIE,OAAJ,CAAY,UAACC,OAAD,EAAUuoB,MAAV,EAAqB;AAAA,kCACGN,SAAS,CAACC,kBAAV,CAA6BvqB,kBAA7B,CADH;AAAA,UAC9BwqB,YAD8B,yBAC9BA,YAD8B;AAAA,UAChBC,cADgB,yBAChBA,cADgB;;AAGtC,UAAID,YAAJ,EAAkB;AAChBnoB,eAAO,CAACooB,cAAD,CAAP;AACD,OAFD,MAEO;AACL,YAAM3oB,OAAO,GAAG;AACdI,gBAAM,EAANA,MADc;AAEd2oB,iBAAO,EAAEzN;AAFK,SAAhB;;AAKA,YAAIlb,MAAM,KAAK,MAAf,EAAuB;AACrBJ,iBAAO,CAACgpB,IAAR,GAAejgB,IAAI,CAACC,SAAL,CAAepC,OAAf,CAAf;AACD;;AAED,eAAOqiB,KAAK,CAACtC,GAAD,EAAM3mB,OAAN,CAAL,CACJU,IADI,CACC,UAAAwoB,GAAG,EAAI;AACX;AACA;AACA,iBAAOA,GAAG,CAACC,IAAJ,GAAWzoB,IAAX,CAAgB,UAAAyoB,IAAI,EAAI;AAC7B,gBAAIC,QAAQ,GAAG,EAAf;;AACA,gBAAI;AACFA,sBAAQ,GAAGrgB,IAAI,CAACke,KAAL,CAAWkC,IAAX,CAAX;AACD,aAFD,CAEE,OAAOhoB,GAAP,EAAY;AACZ4W,qBAAO,CAACC,IAAR,6BACuBC,cAAc,EADrC,+DAC4F9W,GAD5F;AAGD;;AAED,gBAAIjD,kBAAkB,IAAIgC,QAAQ,CAAChC,kBAAD,CAA9B,IAAsD4a,UAAU,CAAC5a,kBAAkB,CAACmrB,WAApB,CAApE,EAAsG;AACpGnrB,gCAAkB,CAACmrB,WAAnB,CAA+BD,QAA/B;AACD;;AAED,gBAAIF,GAAG,CAAC/jB,MAAJ,KAAe,GAAnB,EAAwB;AACtB5E,qBAAO,CAAC6oB,QAAD,CAAP;AACD,aAFD,MAEO;AACL,kBAAIjO,KAAK,gCAAyBlD,cAAc,EAAvC,6EACPiR,GAAG,CAAC/jB,MADG,CAAT;AAIA4S,qBAAO,CAACoD,KAAR,CAAcA,KAAd;AACA2N,oBAAM,CAAC3N,KAAD,CAAN;AACD;AACF,WAxBM,CAAP;AAyBD,SA7BI,WA8BE,UAAAha,GAAG,EAAI;AACZ,cAAIga,KAAK,gCAAyBlD,cAAc,EAAvC,6EAA4G9W,GAA5G,CAAT;AAEA4W,iBAAO,CAACoD,KAAR,CAAcA,KAAd;AACA2N,gBAAM,CAAC3N,KAAD,CAAN;AACD,SAnCI,CAAP;AAoCD;AACF,KApDM,CAAP;AAqDD;AAjGe,CAAlB;AAoGAxX,MAAM,CAACC,OAAP,GAAiB4kB,SAAjB,C;;;;;;;;;;;ACvHA;;;;;;;;;;;;;;;AAgBA,IAAMzrB,YAAY,GAAG;AACnBub,aAAW,EAAE,qBAAAgR,GAAG,EAAI;AAClB,QAAI,CAACA,GAAL,EAAU;AACR,aAAOA,GAAP;AACD;;AAED,QAAIC,SAAS,GAAGxgB,IAAI,CAACke,KAAL,CAAWle,IAAI,CAACC,SAAL,CAAesgB,GAAf,CAAX,CAAhB;AAEA,WAAOC,SAAP;AACD,GATkB;AAUnBC,iBAAe,EAAE,2BAAM;AACrB,WAAOxb,IAAI,CAACyb,MAAL,EAAP;AACD,GAZkB;AAanBC,yBAAuB,EAAE,mCAAM;AAC7B,WAAO1b,IAAI,CAACgR,IAAL,CAAU,CAAC,IAAI2K,IAAJ,EAAD,GAAc,IAAxB,CAAP;AACD,GAfkB;AAgBnBC,iCAA+B,EAAE,2CAAM;AACrC,WAAO,CAAC,IAAID,IAAJ,EAAR;AACD,GAlBkB;AAmBnBE,gBAAc,EAAE,wBAACzQ,MAAD,EAAS0Q,KAAT,EAAmB;AACjC,QAAI;AACF,aAAO1Q,MAAM,CAAC2Q,KAAP,CAAa,IAAIC,MAAJ,CAAWF,KAAX,CAAb,CAAP;AACD,KAFD,CAEE,OAAO3oB,GAAP,EAAY;AACZ,UAAMhE,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,UAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AAEA,UAAMwB,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;AAJY,UAKJ/P,YALI,GAK6CP,OAL7C,CAKJO,YALI;AAAA,UAKUC,cALV,GAK6CR,OAL7C,CAKUQ,cALV;AAAA,UAK0BC,cAL1B,GAK6CT,OAL7C,CAK0BS,cAL1B;AAMZ,UAAMC,IAAI,GAAGjB,YAAY,CAACG,YAA1B;AAEAoB,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,EAEEhB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACmB,cAAf,CAA8BmrB,kCAAnD,EAAuF;AACrFpsB,YAAI,EAAJA,IADqF;AAErFisB,aAAK,EAALA;AAFqF,OAAvF,CAFF;AAOA,aAAO,IAAP;AACD;AACF,GAvCkB;AAwCnB7R,gBAxCmB,4BAwCF;AACf,WAAO,IAAI0R,IAAJ,GAAWO,WAAX,EAAP;AACD,GA1CkB;AA2CnB3D,2BA3CmB,qCA2COlgB,UA3CP,EA2CmB+f,kBA3CnB,EA2CuC;AACxD,QAAIE,WAAW,GAAG,EAAlB;AACAF,sBAAkB,GAAGA,kBAAkB,IAAI,EAA3C;;AAEA,SAAK,IAAI+D,IAAT,IAAiB9jB,UAAjB,EAA6B;AAC3B,UAAIA,UAAU,CAACpB,cAAX,CAA0BklB,IAA1B,CAAJ,EAAqC;AACnC,YAAI/D,kBAAkB,CAACgE,OAAnB,CAA2BD,IAA3B,MAAqC,CAAC,CAA1C,EAA6C;AAC3C7D,qBAAW,IAAI6D,IAAI,GAAG,GAAP,GAAa9jB,UAAU,CAAC8jB,IAAD,CAAvB,GAAgC,GAA/C;AACD;AACF;AACF;;AAED,WAAO7D,WAAP;AACD,GAxDkB;AAyDnBtkB,cAzDmB,wBAyDNsnB,GAzDM,EAyDD;AAChB,QAAI1e,MAAM,GAAG,EAAb;;AAEA,SAAK,IAAMuf,IAAX,IAAmBb,GAAnB,EAAwB;AACtB1e,YAAM,CAAC1H,IAAP,CAAYomB,GAAG,CAACa,IAAD,CAAf;AACD;;AACD,WAAOvf,MAAP;AACD;AAhEkB,CAArB;AAmEAjH,MAAM,CAACC,OAAP,GAAiB7G,YAAjB,C;;;;;;;;;;;ACnFA;;;;;;;;;;;;;;;AAeA,IAAMI,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;AACA,IAAM5P,IAAI,GAAGjB,YAAY,CAACsX,WAA1B;;AAEA,IAAMmW,IAAI,GAAG,SAAPA,IAAO,GAAM,CAAE,CAArB;;AAEA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAAjkB,UAAU,EAAI;AAC7B,MAAMygB,UAAU,GAAG;AACjBjpB,QAAI,EAAJA,IADiB;AAEjB6oB,YAAQ,EAAErgB,UAAU,CAACsgB,GAFJ;AAGjBpjB,aAAS,EAAE8C,UAAU,IAAIA,UAAU,CAAC0gB;AAHnB,GAAnB;AAKA,MAAIC,MAAM,GAAG,EAAb;;AACA,MAAIF,UAAU,CAACJ,QAAX,CAAoBzc,QAApB,CAA6B,MAA7B,CAAJ,EAA0C;AACxC,QAAI3F,eAAe,GAAGyE,IAAI,CAACke,KAAL,CAAW5gB,UAAU,CAAC6gB,IAAtB,EAA4BC,CAAlD;AACAH,UAAM,GAAGre,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkBsd,UAAlB,EAA8B;AAAExiB,qBAAe,EAAEA;AAAnB,KAA9B,CAAT;AACA0iB,UAAM,CAACI,QAAP,6BAAqCre,IAAI,CAACC,SAAL,CAAege,MAAM,CAAC1iB,eAAtB,CAArC;AACD,GAJD,MAIO;AACL0iB,UAAM,GAAGre,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkBsd,UAAlB,EAA8B;AACrCxb,gBAAU,EAAEjF,UAAU,IAAIA,UAAU,CAACghB,aADA;AAErCthB,iBAAW,EAAEM,UAAU,IAAIA,UAAU,CAACihB;AAFD,KAA9B,CAAT;AAIAN,UAAM,CAACI,QAAP,wBAAgCJ,MAAM,CAAC1b,UAAvC,8BAAqE0b,MAAM,CAACjhB,WAA5E;AACD;;AACD5H,QAAM,CAACQ,GAAP,CAAWjB,YAAY,CAACsB,IAAxB,EAA8BpB,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACsB,aAAf,CAA6BsoB,kBAAlD,EAAsEP,MAAtE,CAA9B;AACD,CAnBD;;AAqBA,IAAM9S,WAAW,GAAG;AAClBsS,UAAQ,EAAE,kBAASngB,UAAT,EAAqBigB,WAArB,EAAoE;AAAA,QAAlCtmB,OAAkC,uEAAxB,EAAwB;AAAA,QAApBsb,aAAoB,uEAAJ,EAAI;AAC5E,QAAIoL,QAAQ,aAAMrgB,UAAU,CAACsgB,GAAjB,SAAuBL,WAAvB,CAAZ;AAD4E,QAGtEG,eAHsE,GAGnCzmB,OAHmC,CAGtEymB,eAHsE;AAAA,QAGrD8D,aAHqD,GAGnCvqB,OAHmC,CAGrDuqB,aAHqD;AAK5EA,iBAAa,GAAGA,aAAa,IAAI9D,eAAjC;AAEA,QAAI+D,gBAAgB,GAAG,KAAvB;;AACA,QAAI,OAAOhD,cAAP,KAA0B,WAA9B,EAA2C;AACzC;AACAyB,WAAK,CAACvC,QAAD,EAAW;AAAEtmB,cAAM,EAAE,KAAV;AAAiB2oB,eAAO,EAAEzN;AAA1B,OAAX,CAAL,CACG5a,IADH,CACQ,YAAM;AACV,YAAI8pB,gBAAJ,EAAsB;AACpB;AACD;;AACDA,wBAAgB,GAAG,IAAnB;AACA/D,uBAAe,CAAC,IAAD,EAAO;AAAEthB,gBAAM,EAAE;AAAV,SAAP,CAAf;AACD,OAPH,WAQS,UAAAqY,IAAI,EAAI;AACb,YAAIgN,gBAAJ,EAAsB;AACpB;AACD;;AACDA,wBAAgB,GAAG,IAAnB;AACAD,qBAAa,CAAC,IAAD,EAAO;AAAEplB,gBAAM,EAAE;AAAV,SAAP,CAAb;AACAmlB,gBAAQ,CAACjkB,UAAD,CAAR;AACD,OAfH;AAiBA;AACD;;AACD,SAAKokB,aAAL,CACEpkB,UADF,EAEEigB,WAFF,EAGEG,eAHF,EAIE8D,aAJF,EAKE7D,QALF,EAME8D,gBANF,EAOElP,aAPF;AASD,GAvCiB;AAyClBmP,eAAa,EAAE,uBACbpkB,UADa,EAEbigB,WAFa,EAGbG,eAHa,EAIb8D,aAJa,EAKb7D,QALa,EAMb8D,gBANa,EAQb;AAAA,QADAlP,aACA,uEADgB,EAChB;AACAmL,mBAAe,GAAGA,eAAe,IAAI4D,IAArC;AACAE,iBAAa,GAAGA,aAAa,IAAIF,IAAjC;AAEA,QAAMK,GAAG,GAAG,IAAIlD,cAAJ,EAAZ;AAEAkD,OAAG,CAACC,IAAJ,CAAS,KAAT,EAAgBjE,QAAhB,EAA0B,IAA1B,EANA,CAOA;;AACA,SAAK,IAAIkE,UAAT,IAAuBtP,aAAvB,EAAsC;AACpC,UAAIA,aAAa,CAACrW,cAAd,CAA6B2lB,UAA7B,CAAJ,EAA8C;AAC5CF,WAAG,CAACG,gBAAJ,CAAqBD,UAArB,EAAiCtP,aAAa,CAACsP,UAAD,CAA9C;AACD;AACF;;AAEDF,OAAG,CAACI,MAAJ,GAAa,YAAW;AACtB,UAAIJ,GAAG,CAACvlB,MAAJ,IAAc,GAAd,IAAqBulB,GAAG,CAACvlB,MAAJ,GAAa,GAAtC,EAA2C;AACzC,YAAMsM,QAAQ,GAAGiZ,GAAG,CAACK,YAArB;AACAtE,uBAAe,CAAChV,QAAD,CAAf;AACA6Y,gBAAQ,CAACjkB,UAAD,CAAR;AACD,OAJD,MAIO;AACLkkB,qBAAa,CAACG,GAAG,CAACM,UAAL,CAAb;AACAV,gBAAQ,CAACjkB,UAAD,CAAR;AACD;AACF,KATD;;AAWAqkB,OAAG,CAACO,OAAJ,GAAc,YAAW;AACvBV,mBAAa,CAACG,GAAG,CAACM,UAAL,CAAb;AACAV,cAAQ,CAACjkB,UAAD,CAAR;AACD,KAHD;;AAKAqkB,OAAG,CAACjD,IAAJ;AACD;AAhFiB,CAApB;AAkFA9jB,MAAM,CAACC,OAAP,GAAiBsQ,WAAjB,C;;;;;;;;;;;;;AC9HA;;;;;;;;;;;;;;;AAgBA,IAAMrQ,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AACA,IAAM2Y,OAAO,GAAG3Y,mBAAO,CAAC,gDAAD,CAAvB;;AACA,IAAM8M,YAAY,GAAG9M,mBAAO,CAAC,0DAAD,CAA5B;;AAEA,IAAMoX,QAAQ,GAAGpX,mBAAO,CAAC,2CAAD,CAAxB;;AACA,IAAMsH,YAAY,GAAGtH,mBAAO,CAAC,mDAAD,CAA5B;;AACA,IAAMI,YAAY,GAAGJ,mBAAO,CAAC,mDAAD,CAA5B;;AAEA,IAAMQ,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;AACA,IAAMC,YAAY,GAAGD,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAMG,YAAY,GAAGH,mBAAO,CAAC,mDAAD,CAA5B;;IACQe,Y,GAAiDP,O,CAAjDO,Y;IAAcC,c,GAAmCR,O,CAAnCQ,c;IAAgBC,c,GAAmBT,O,CAAnBS,c;AACtC,IAAMO,MAAM,GAAGhB,OAAO,CAACsQ,SAAR,EAAf;;AACA,IAAMpQ,UAAU,GAAGV,mBAAO,CAAC,4DAAD,CAA1B;AACA;;;;;;;;;AAOA,SAASuuB,oBAAT,CAA8BC,SAA9B,EAAyCprB,MAAzC,EAAiD;AAC/C,SAAO;AACLqrB,OAAG,EAAEruB,YAAY,CAAC2sB,uBAAb,EADA;AAELvC,KAAC,EAAEpT,QAAQ,CAAC4N,WAAT,CAAqB5hB,MAArB,EAA6BorB,SAAS,CAAC5nB,SAAvC;AAFE,GAAP;AAID;AAED;;;;;;;;;AAOA,SAAS8nB,iBAAT,CAA2BF,SAA3B,EAAsCprB,MAAtC,EAA8C;AAAA,MACpCwD,SADoC,GACtB4nB,SADsB,CACpC5nB,SADoC;AAG5C,SAAOoF,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkB0hB,oBAAoB,CAACC,SAAD,EAAYprB,MAAZ,CAAtC,EAA2DiE,cAAc,CAACsnB,sBAAf,CAAsCH,SAAtC,CAA3D,EAA6G;AAClHpE,cAAU,EAAExjB,SADsG;AAElHkmB,UAAM,EAAE1sB,YAAY,CAACysB,eAAb,EAF0G;AAGlH+B,MAAE,EAAE1nB,SAAS,CAAC+I;AAHoG,GAA7G,CAAP;AAKD;;AAED,IAAI5I,cAAc,GAAG;AACnB;;;;;;;AAOAuF,sBARmB,gCAQE4hB,SARF,EAQavoB,MARb,EAQqBC,QARrB,EAQ+B9C,MAR/B,EAQuC;AACxD,QAAMsG,UAAU,GAAGsC,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkB6hB,iBAAiB,CAACF,SAAD,EAAYprB,MAAZ,CAAnC,CAAnB;AACAsG,cAAU,CAACsgB,GAAX,GAAiB9iB,SAAS,CAACwJ,cAAV,GAA2BhQ,UAAU,CAACqgB,UAAX,EAA3B,GAAqDpI,OAAO,CAACrS,IAA9E;AACAoD,cAAU,CAAC6gB,IAAX,GAAkBne,IAAI,CAACC,SAAL,CAAe;AAC/Bme,OAAC,sBACE3L,kBAAkB,CAAC5Y,MAAD,CADpB,EAC+B4Y,kBAAkB,CAAC3Y,QAAD,CADjD;AAD8B,KAAf,CAAlB;AAKA1E,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8Byc,mBAAnD,EAAwE;AACtE3tB,UAAI,EAAEjB,YAAY,CAACoH,cADmD;AAEtEqC,gBAAU,EAAE,KAAKolB,4BAAL,CAAkCplB,UAAlC;AAF0D,KAAxE,CAFF;AAQA,WAAOA,UAAP;AACD,GAzBkB;;AA0BnB;;;;;;;AAOA4C,2BAjCmB,qCAiCOkiB,SAjCP,EAiCkBvoB,MAjClB,EAiC0BC,QAjC1B,EAiCoC9C,MAjCpC,EAiC4C;AAC7D,QAAI,KAAJ,EAAwC,mBAmBvC;AACF,GAtDkB;;AAuDnB;;;;;;;;;AASAgH,2BAhEmB,qCAiEjBokB,SAjEiB,EAkEjBrrB,WAlEiB,EAmEjBiG,WAnEiB,EAoEjBhG,MApEiB,EAqEjBV,UArEiB,EAwEjB;AAAA,QAFAwF,gBAEA,uEAFmB,EAEnB;AAAA,QADAD,aACA,uEADgB,EAChB;AACA,QAAIyB,UAAU,GAAGsC,MAAM,CAACa,MAAP,CACf;AACE6d,mBAAa,EAAEvnB,WADjB;AAEEwnB,iBAAW,EAAEvhB,WAFf;AAGEwV,gBAAU,EAAE1W,gBAHd;AAIE4W,gBAAU,EAAE7W;AAJd,KADe,EAOfymB,iBAAiB,CAACF,SAAD,EAAYprB,MAAZ,CAPF,EAQfV,UARe,CAAjB;AAUAgH,cAAU,CAACqlB,EAAX,GAAgB3iB,IAAI,CAACC,SAAL,CAAe;AAAE0R,OAAC,EAAE;AAAL,KAAf,CAAhB;AACArU,cAAU,CAACsgB,GAAX,GAAiB9iB,SAAS,CAACwJ,cAAV,GAA2BhQ,UAAU,CAACqgB,UAAX,EAA3B,GAAqDpI,OAAO,CAACI,UAA9E;AAEAvX,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8B4c,yBAAnD,EAA8E;AAC5E9tB,UAAI,EAAEjB,YAAY,CAACoH,cADyD;AAE5EqC,gBAAU,EAAE,KAAKolB,4BAAL,CAAkCplB,UAAlC;AAFgE,KAA9E,CAFF;AAQA,WAAOA,UAAP;AACD,GA/FkB;;AAgGnB;;;;;;;;;;;AAWAC,gCA3GmB,0CA4GjB6kB,SA5GiB,EA6GjBrrB,WA7GiB,EA8GjBiG,WA9GiB,EA+GjBhG,MA/GiB,EAkHjB;AAAA,QAFA8E,gBAEA,uEAFmB,EAEnB;AAAA,QADAD,aACA,uEADgB,EAChB;;AACA,QAAI,KAAJ,EAAwC,mBAoBvC;AACF,GAxIkB;;AAyInB;;;;;;;;;;;AAWAyH,2BApJmB,qCAqJjB8e,SArJiB,EAsJjBrrB,WAtJiB,EAuJjBiG,WAvJiB,EAwJjBhG,MAxJiB,EA6JjB;AAAA,QAJAwL,IAIA,uEAJO,EAIP;AAAA,QAHAqgB,OAGA,uEAHU,IAGV;AAAA,QAFA/mB,gBAEA,uEAFmB,EAEnB;AAAA,QADAD,aACA,uEADgB,EAChB;AACA,QAAMinB,MAAM,GAAGtgB,IAAI,CAAChF,EAApB;AAEA,QAAIF,UAAU,GAAGsC,MAAM,CAACa,MAAP,CACf;AACE6d,mBAAa,EAAEvnB,WADjB;AAEEwnB,iBAAW,EAAEvhB;AAFf,KADe,EAKfslB,iBAAiB,CAACF,SAAD,EAAYprB,MAAZ,CALF,CAAjB;AAQAsG,cAAU,CAACkV,UAAX,GAAwB1W,gBAAxB;AACAwB,cAAU,CAACoV,UAAX,GAAwB7W,aAAxB;AACAyB,cAAU,CAACsgB,GAAX,GAAiB9iB,SAAS,CAACwJ,cAAV,GAA2BhQ,UAAU,CAACqgB,UAAX,EAA3B,GAAqDpI,OAAO,CAACK,UAA9E;AAEAtP,cAAU,CAAC,SAAD,CAAV,GAAwBwlB,MAAxB;;AACA,QAAItgB,IAAI,CAAC5F,IAAL,KAAc8D,YAAY,CAACiC,OAA3B,IAAsCzH,YAAY,CAACgC,YAAb,CAA0B2lB,OAA1B,CAA1C,EAA8E;AAC5EvlB,gBAAU,CAAC,GAAD,CAAV,GAAkBulB,OAAlB;AACD;;AAEDztB,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8B+c,yBAAnD,EAA8E;AAC5EjuB,UAAI,EAAEjB,YAAY,CAACoH,cADyD;AAE5EqC,gBAAU,EAAE,KAAKolB,4BAAL,CAAkCplB,UAAlC;AAFgE,KAA9E,CAFF;AAQA,WAAOA,UAAP;AACD,GA1LkB;;AA2LnB;;;;;;;;;;;AAWA+F,gCAtMmB,0CAuMjB+e,SAvMiB,EAwMjBrrB,WAxMiB,EAyMjBiG,WAzMiB,EA0MjBhG,MA1MiB,EAgNjB;AAAA,QALAwL,IAKA,uEALO,EAKP;AAAA,QAJAqgB,OAIA,uEAJU,IAIV;AAAA,QAHA5hB,eAGA,uEAHkB,EAGlB;AAAA,QAFAnF,gBAEA,uEAFmB,EAEnB;AAAA,QADAD,aACA,uEADgB,EAChB;;AACA,QAAI,KAAJ,EAAwC,mBA4BvC;AACF,GA9OkB;;AAgPnB;;;;;AAKA0mB,wBArPmB,kCAqPIH,SArPJ,EAqPe;AAAA;;AAAA,QACxB1nB,MADwB,GACb0nB,SADa,CACxB1nB,MADwB;AAGhC,4CACGI,SAAS,CAACyJ,eADb,EAC+BzJ,SAAS,CAAC4I,QADzC,yBAEG5I,SAAS,CAAC0J,uBAFb,EAEuC1J,SAAS,CAAC8I,WAFjD,gCAGOlJ,MAHP;AAKD,GA7PkB;;AA+PnB;;;;;;AAMAgD,yBArQmB,mCAqQK1I,MArQL,EAqQa2d,SArQb,EAqQoF;AAAA,QAA5Drc,UAA4D,uEAA/C,EAA+C;AAAA,QAA3CwF,gBAA2C,uEAAxB,EAAwB;AAAA,QAApBD,aAAoB,uEAAJ,EAAI;AAAA,QAC7FnB,MAD6F,GAClF1F,MADkF,CAC7F0F,MAD6F;AAGrG,QAAI4C,UAAU,GAAGsC,MAAM,CAACa,MAAP,CACf;AACEme,QAAE,EAAEjM,SADN;AAEEuM,OAAC,EAAElqB,MAAM,CAACwF,SAFZ;AAGEwoB,SAAG,EAAEtoB,MAHP;AAIEuoB,WAAK,EAAEjvB,YAAY,CAAC6sB,+BAAb,EAJT;AAKEH,YAAM,EAAE1sB,YAAY,CAACysB,eAAb,EALV;AAME9O,OAAC,EAAE,IANL;AAOEa,gBAAU,EAAE1W,gBAPd;AAQE4W,gBAAU,EAAE7W;AARd,KADe,EAWfvF,UAXe,CAAjB;AAcAgH,cAAU,CAACsgB,GAAX,GAAiB9iB,SAAS,CAACwJ,cAAV,GAA2BhQ,UAAU,CAACqgB,UAAX,EAA3B,GAAqDpI,OAAO,CAACO,MAA9E;AACA,WAAOxP,UAAP;AACD,GAxRkB;;AA0RnB;;;;;;;;AAQA4lB,qBAlSmB,+BAkSCd,SAlSD,EAkSYprB,MAlSZ,EAkSoB2b,SAlSpB,EAkS+B;AAChD,QAAMmG,IAAI,GAAG9N,QAAQ,CAAC4N,WAAT,CAAqB5hB,MAArB,EAA6BorB,SAAS,CAAC5nB,SAAvC,CAAb;AADgD,QAExCE,MAFwC,GAE7B0nB,SAF6B,CAExC1nB,MAFwC;AAIhD,QAAIqkB,KAAK,GAAG;AACVoE,iBAAW,EAAEroB,SAAS,CAAC4I,QADb;AAEV0f,oBAAc,EAAEtoB,SAAS,CAAC8I,WAFhB;AAGVyf,gBAAU,EAAE3oB;AAHF,KAAZ,CAJgD,CAUhD;AACA;AACA;;AAEA,QAAI4C,UAAU,GAAG;AACfuhB,OAAC,EAAE;AACDyE,aAAK,YAAKxK,IAAL,cAAa9kB,YAAY,CAAC6sB,+BAAb,EAAb,CADJ;AAED0C,aAAK,EAAEzK,IAFN;AAGD0K,iBAAS,EAAExvB,YAAY,CAAC2sB,uBAAb,EAHV;AAID1N,aAAK,EAAE;AACL8L,eAAK,EAAEA,KADF;AAELtb,cAAI,EAAEkP,SAFD;AAGL8Q,cAAI,EAAEzvB,YAAY,CAAC6sB,+BAAb;AAHD,SAJN;AASD/B,eAAO,EAAE;AACPC,eAAK,EAAE;AACLC,8BAAkB,EAAEtkB;AADf;AADA;AATR;AADY,KAAjB;AAkBA,WAAO4C,UAAP;AACD,GAnUkB;;AAqUnB;;;;;;;;;AASAQ,yBA9UmB,mCA8UKskB,SA9UL,EA8UgBprB,MA9UhB,EA8UwB2b,SA9UxB,EA8UmCpQ,UA9UnC,EA8U+CvF,WA9U/C,EA8U4D;AAC7E,QAAMM,UAAU,GAAG,KAAK4lB,mBAAL,CAAyBd,SAAzB,EAAoCprB,MAApC,EAA4C2b,SAA5C,CAAnB;AAEArV,cAAU,CAACuhB,CAAX,CAAa5L,KAAb,CAAmB8L,KAAnB,CAAyBvhB,EAAzB,GAA8B+E,UAA9B;AACAjF,cAAU,CAACuhB,CAAX,CAAa5L,KAAb,CAAmB8L,KAAnB,CAAyBxgB,SAAzB,GAAqCvB,WAArC,CAJ6E,CAM7E;;AACAM,cAAU,CAACuhB,CAAX,CAAa5L,KAAb,CAAmB8L,KAAnB,CAAyB2E,OAAzB,GAAmC,CAAnC;AAEAtuB,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8B2d,oCAAnD,EAAyF;AACvF7uB,UAAI,EAAEjB,YAAY,CAACoH,cADoE;AAEvFT,eAAS,EAAE4nB,SAAS,CAAC5nB,SAFkE;AAGvFxD,YAAM,EAANA,MAHuF;AAIvFuL,gBAAU,EAAVA;AAJuF,KAAzF,CAFF;AAUA,WAAOjF,UAAP;AACD,GAlWkB;;AAoWnB;;;;;;;;;AASA+E,yBA7WmB,mCA8WjB+f,SA9WiB,EA+WjBprB,MA/WiB,EAgXjB2b,SAhXiB,EAiXjBlR,SAjXiB,EAkXjBV,YAlXiB,EAmXjBI,eAnXiB,EAqXjB;AAAA,QADAF,eACA,uEADkB,EAClB;AACA,QAAM3D,UAAU,GAAG,KAAK4lB,mBAAL,CAAyBd,SAAzB,EAAoCprB,MAApC,EAA4C2b,SAA5C,CAAnB;AAEA,QAAIiR,MAAM,GAAG,EAAb;AACAhkB,UAAM,CAACC,IAAP,CAAY4B,SAAZ,EAAuB3B,OAAvB,CAA+B,UAAAf,GAAG,EAAI;AACpC6kB,YAAM,cAAO7kB,GAAP,EAAN,GAAsB,aAAM0C,SAAS,CAAC1C,GAAD,CAAT,CAAeyD,IAAf,CAAoBhF,EAA1B,EAAtB;AACApI,YAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8B6d,oCAAnD,EAAyF;AACvF/uB,YAAI,EAAEjB,YAAY,CAACoH,cADoE;AAEvF6oB,gBAAQ,EAAEnR,SAF6E;AAGvFnY,iBAAS,EAAE4nB,SAAS,CAAC5nB,SAHkE;AAIvF4jB,SAAC,EAAEpnB,MAJoF;AAKvFuL,kBAAU,EAAExD;AAL2E,OAAzF,CAFF;AAUD,KAZD;AAcAzB,cAAU,CAACuhB,CAAX,CAAa5L,KAAb,CAAmB8L,KAAnB,CAAyBgF,OAAzB,GAAmC;AACjCH,YAAM,EAAEA;AADyB,KAAnC;;AAIA,QAAIziB,eAAe,IAAIJ,YAAnB,IAAmCI,eAAe,CAAC6iB,IAAhB,GAAuB,CAA9D,EAAiE;AAC/D7iB,qBAAe,CAACrB,OAAhB,CAAwB,UAAA+C,WAAW,EAAI;AACrCvF,kBAAU,CAACuhB,CAAX,CAAa5L,KAAb,CAAmB8L,KAAnB,CAAyBgF,OAAzB,CAAiClhB,WAAjC,IAAgD9B,YAAhD;AACD,OAFD;AAGD;;AAEDzD,cAAU,CAACuhB,CAAX,CAAa5L,KAAb,CAAmB8L,KAAnB,CAAyBkF,aAAzB,GAAyC,IAAzC;;AAEA,QAAIrkB,MAAM,CAACC,IAAP,CAAYoB,eAAZ,EAA6B7H,MAA7B,GAAsC,CAA1C,EAA6C;AAC3C,WAAK,IAAMgoB,IAAX,IAAmBngB,eAAnB,EAAoC;AAClC3D,kBAAU,CAACuhB,CAAX,CAAa5L,KAAb,CAAmB8L,KAAnB,CAAyBqC,IAAzB,IAAiCngB,eAAe,CAACmgB,IAAD,CAAhD;AACD;AACF;;AAED,WAAO9jB,UAAP;AACD,GA1ZkB;;AA4ZnB;;;;;;;;AAQA8C,oBApamB,8BAoaAgiB,SApaA,EAoaWprB,MApaX,EAoamB2b,SApanB,EAoa8B5Y,kBApa9B,EAoakD;AACnE,QAAMuD,UAAU,GAAG,KAAK4lB,mBAAL,CAAyBd,SAAzB,EAAoCprB,MAApC,EAA4C2b,SAA5C,CAAnB;AAEArV,cAAU,CAACuhB,CAAX,CAAa5L,KAAb,CAAmB8L,KAAnB,CAAyBkF,aAAzB,GAAyC,IAAzC;AAEArkB,UAAM,CAACC,IAAP,CAAY9F,kBAAZ,EAAgC+F,OAAhC,CAAwC,UAASf,GAAT,EAAc;AACpD,UAAMjF,QAAQ,GAAG/F,YAAY,CAACgM,QAAb,CAAsBhG,kBAAkB,CAACgF,GAAD,CAAxC,IACbhF,kBAAkB,CAACgF,GAAD,CADL,GAEbiB,IAAI,CAACC,SAAL,CAAelG,kBAAkB,CAACgF,GAAD,CAAjC,CAFJ;AAGAzB,gBAAU,CAACuhB,CAAX,CAAaC,OAAb,CAAqBC,KAArB,CAA2BhgB,GAA3B,IAAkCjF,QAAlC;AACD,KALD;AAOA1E,UAAM,CAACQ,GAAP,CACEjB,YAAY,CAACoR,KADf,EAEElR,cAAc,CAACiB,KAAf,CAAqBlB,cAAc,CAACoR,cAAf,CAA8Bke,8BAAnD,EAAmF;AACjFpvB,UAAI,EAAEjB,YAAY,CAACoH,cAD8D;AAEjFT,eAAS,EAAE4nB,SAAS,CAAC5nB,SAF4D;AAGjFxD,YAAM,EAANA,MAHiF;AAIjFmtB,cAAQ,EAAEnkB,IAAI,CAACC,SAAL,CAAelG,kBAAf;AAJuE,KAAnF,CAFF;AAUA,WAAOuD,UAAP;AACD,GA3bkB;;AA6bnB;;;;;AAKAolB,8BAlcmB,wCAkcUplB,UAlcV,EAkcsB;AACvC,QAAM8mB,aAAa,GAAGxkB,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkBnD,UAAlB,CAAtB;AACA,WAAO8mB,aAAa,CAACpB,GAArB;AACA,WAAOhjB,IAAI,CAACC,SAAL,CAAemkB,aAAf,CAAP;AACD;AAtckB,CAArB;AAycAxpB,MAAM,CAACC,OAAP,GAAiBI,cAAjB,C;;;;;;;;;;;ACtgBA;;;;;;;;;;;;;;;AAgBA,IAAMlH,YAAY,GAAGH,mBAAO,CAAC,mDAAD,CAA5B;;AAEA,IAAMywB,KAAK,GAAG,sBAAd;AAEA,IAAIxvB,cAAc,GAAG;AACnB;;;;;;;;;;;;AAYAiB,OAAK,EAAE,eAACwuB,QAAD,EAAW1sB,IAAX,EAAoB;AACzB,QAAI;AACF,aAAO0sB,QAAQ,CAACC,OAAT,CAAiBF,KAAjB,EAAwB,UAACrD,KAAD,EAAQjiB,GAAR,EAAakD,KAAb,EAAuB;AACpD,YAAIpF,MAAJ;AACA,YAAI2nB,KAAJ;;AAEA,YAAIF,QAAQ,CAACriB,KAAK,GAAG,CAAT,CAAR,KAAwB,GAAxB,IAA+BqiB,QAAQ,CAACriB,KAAK,GAAG+e,KAAK,CAAC5nB,MAAf,CAAR,KAAmC,GAAtE,EAA2E;AACzE,iBAAO2F,GAAP;AACD,SAFD,MAEO;AACLylB,eAAK,GAAG5sB,IAAI,CAACsE,cAAL,CAAoB6C,GAApB,CAAR;;AAEA,cAAIylB,KAAJ,EAAW;AACT,gBAAIvlB,KAAK,GAAGrH,IAAI,CAACmH,GAAD,CAAhB;;AAEA,gBAAIhL,YAAY,CAACgc,UAAb,CAAwB9Q,KAAxB,CAAJ,EAAoC;AAClCA,mBAAK,GAAGrH,IAAI,CAACmH,GAAD,CAAJ,EAAR;AACD;;AACDlC,kBAAM,GAAGoC,KAAT;AACD,WAPD,MAOO;AACLpC,kBAAM,GAAG,IAAT;AACD;;AACD,cAAIA,MAAM,KAAK,IAAX,IAAmBA,MAAM,KAAKrH,SAAlC,EAA6C;AAC3C,mBAAO,EAAP;AACD;;AAED,iBAAOqH,MAAP;AACD;AACF,OAzBM,CAAP;AA0BD,KA3BD,CA2BE,OAAOzE,GAAP,EAAY;AACZ,aAAOksB,QAAP;AACD;AACF;AA5CkB,CAArB;AA+CA1pB,MAAM,CAACC,OAAP,GAAiBhG,cAAjB,C;;;;;;;;;;;ACnEA;;;;;;;;;;;;;;;AAgBA,IAAMqJ,UAAU,GAAG;AACjBW,eAAa,EAAE,yBAAc;AAAA,QAAb0hB,GAAa,uEAAP,EAAO;AAC3B,WAAO3gB,MAAM,CAACC,IAAP,CAAY0gB,GAAZ,EAAiBnnB,MAAxB;AACD,GAHgB;AAIjB+N,aAAW,EAAE,qBAAAoZ,GAAG,EAAI;AAClB,QAAI,CAACriB,UAAU,CAACW,aAAX,CAAyB0hB,GAAzB,CAAL,EAAoC;AAClC;AACD;;AACD,QAAIxhB,GAAG,GAAGa,MAAM,CAACC,IAAP,CAAY0gB,GAAZ,EAAiB,CAAjB,CAAV;AACA,QAAIthB,KAAK,GAAGshB,GAAG,CAACxhB,GAAD,CAAf;AACA,WAAO;AACLA,SAAG,EAAHA,GADK;AAELE,WAAK,EAALA;AAFK,KAAP;AAID,GAdgB;AAejBhG,cAAY,EAAE,sBAAAsnB,GAAG,EAAI;AACnB,WAAO3gB,MAAM,CAACC,IAAP,CAAY0gB,GAAZ,EAAiBkE,GAAjB,CAAqB,UAAA1lB,GAAG;AAAA,aAAIwhB,GAAG,CAACxhB,GAAD,CAAP;AAAA,KAAxB,CAAP;AACD;AAjBgB,CAAnB;AAoBAnE,MAAM,CAACC,OAAP,GAAiBqD,UAAjB,C;;;;;;;;;;;ACpCA;;;;;;;;;;;;;;;AAgBA,IAAMnK,YAAY,GAAGH,mBAAO,CAAC,0DAAD,CAA5B;;eAC2BA,mBAAO,CAAC,0DAAD,C;IAA1BktB,c,YAAAA,c;;gBACgBltB,mBAAO,CAAC,sDAAD,C;IAAvBuT,W,aAAAA,W;;AACR,IAAMD,WAAW,GAAGtT,mBAAO,CAAC,sDAAD,CAA3B;;4BAYIsT,WAAW,CAACmH,8B;IATdrB,W,yBAAAA,W;IACAE,c,yBAAAA,c;IACAE,W,yBAAAA,W;IACAC,a,yBAAAA,a;IACAC,W,yBAAAA,W;IACAC,kB,yBAAAA,kB;IACAC,2B,yBAAAA,2B;IACAC,e,yBAAAA,e;IACAC,wB,yBAAAA,wB;6BAcExG,WAAW,CAACoH,oB;IAVdX,W,0BAAAA,W;IACAC,0B,0BAAAA,0B;IACAC,mB,0BAAAA,mB;IACAC,iB,0BAAAA,iB;IACAC,W,0BAAAA,W;IACAC,W,0BAAAA,W;IACAC,kB,0BAAAA,kB;IACAC,2B,0BAAAA,2B;IACAC,e,0BAAAA,e;IACAC,wB,0BAAAA,wB;;AAGF,SAASsW,mBAAT,CAA6BC,OAA7B,EAAsC5D,KAAtC,EAA6C;AAC3C,SAAOD,cAAc,CAAC6D,OAAD,EAAU5D,KAAV,CAAd,IAAkCD,cAAc,CAAC6D,OAAD,EAAU5D,KAAV,CAAd,CAA+B,CAA/B,CAAzC;AACD;;AAED,SAAS6D,aAAT,CAAuBC,YAAvB,EAAqC/qB,QAArC,EAA+C;AAC7C;AACA,MAAIgrB,qBAAqB,GAAGtF,UAAU,CAACqF,YAAD,EAAe,EAAf,CAAtC;AACA,MAAIE,iBAAiB,GAAGvF,UAAU,CAAC1lB,QAAD,EAAW,EAAX,CAAlC;;AACA,MAAI,CAACgrB,qBAAD,IAA0B,CAACC,iBAA/B,EAAkD;AAChD,WAAO;AACLF,kBAAY,EAAEA,YADT;AAEL/qB,cAAQ,EAAEA;AAFL,KAAP;AAID,GAT4C,CAU7C;AACA;AACA;;;AACA,MAAIgrB,qBAAqB,KAAK7f,IAAI,CAACG,KAAL,CAAW0f,qBAAX,CAA9B,EAAiE;AAC/DA,yBAAqB,GAAG1O,QAAQ,CAAC0O,qBAAD,EAAwB,EAAxB,CAAhC;AACD;;AACD,MAAIC,iBAAiB,KAAK9f,IAAI,CAACG,KAAL,CAAW2f,iBAAX,CAA1B,EAAyD;AACvDA,qBAAiB,GAAG3O,QAAQ,CAAC2O,iBAAD,EAAoB,EAApB,CAA5B;AACD,GAlB4C,CAmB7C;;;AACA,SAAO;AACLF,gBAAY,EAAEC,qBAAqB,CAAC5M,QAAtB,EADT;AAELpe,YAAQ,EAAEirB,iBAAiB,CAAC7M,QAAlB;AAFL,GAAP;AAID;;AAED,SAAS8M,kBAAT,CAA4BlrB,QAA5B,EAAsC;AACpC,MAAIA,QAAQ,KAAKtE,SAAjB,EAA4B;AAC1BsE,YAAQ,GAAG,EAAX;AACD;;AACD,MAAI/F,YAAY,CAACuN,SAAb,CAAuBxH,QAAvB,CAAJ,EAAsC;AACpC,QAAIA,QAAJ,EAAc;AACZA,cAAQ,GAAG,IAAX;AACD,KAFD,MAEO;AACLA,cAAQ,GAAG,KAAX;AACD;AACF;;AACD,MAAIA,QAAQ,KAAK,IAAjB,EAAuB;AACrBA,YAAQ,GAAGA,QAAQ,CAACoe,QAAT,EAAX;AACD;;AACD,SAAOpe,QAAP;AACD;;AAED,SAASmrB,sBAAT,CAAgCN,OAAhC,EAAyC;AACvC,MAAIO,WAAJ;AACA,MAAIL,YAAJ;AACA,MAAIM,YAAJ;AACA,MAAIC,UAAJ,CAJuC,CAKvC;;AACA,MAAItE,cAAc,CAAC6D,OAAD,EAAU3X,WAAV,CAAlB,EAA0C;AACxCkY,eAAW,GAAGvX,WAAd;AACAkX,gBAAY,GAAGH,mBAAmB,CAACC,OAAD,EAAU3X,WAAV,CAAlC;AACD,GAHD,MAGO,IAAI8T,cAAc,CAAC6D,OAAD,EAAUzX,cAAV,CAAlB,EAA6C;AAClD2X,gBAAY,GAAGH,mBAAmB,CAACC,OAAD,EAAUzX,cAAV,CAAlC;AACAiY,gBAAY,GAAGrE,cAAc,CAAC+D,YAAD,EAAexX,aAAf,CAA7B;AACA+X,cAAU,GAAGtE,cAAc,CAAC+D,YAAD,EAAevX,WAAf,CAA3B,CAHkD,CAIlD;;AACA,QAAI6X,YAAY,IAAIC,UAApB,EAAgC;AAC9BF,iBAAW,GAAGtX,0BAAd;AACD,KAFD,MAEO,IAAIuX,YAAJ,EAAkB;AACvBD,iBAAW,GAAGrX,mBAAd;AACD,KAFM,MAEA,IAAIuX,UAAJ,EAAgB;AACrBF,iBAAW,GAAGpX,iBAAd;AACD;;AACD+W,gBAAY,GAAGA,YAAY,CAACN,OAAb,CAAqBlX,aAArB,EAAoC,EAApC,EAAwCkX,OAAxC,CAAgDjX,WAAhD,EAA6D,EAA7D,CAAf;AACD,GAbM,MAaA,IAAIwT,cAAc,CAAC6D,OAAD,EAAUvX,WAAV,CAAlB,EAA0C;AAC/C8X,eAAW,GAAGnX,WAAd;AACA8W,gBAAY,GAAGH,mBAAmB,CAACC,OAAD,EAAUvX,WAAV,CAAlC;AACD,GAHM,MAGA,IAAI0T,cAAc,CAAC6D,OAAD,EAAUpX,kBAAV,CAAlB,EAAiD;AACtD2X,eAAW,GAAGjX,kBAAd;AACA4W,gBAAY,GAAGH,mBAAmB,CAACC,OAAD,EAAUpX,kBAAV,CAAlC;AACD,GAHM,MAGA,IAAIuT,cAAc,CAAC6D,OAAD,EAAUnX,2BAAV,CAAlB,EAA0D;AAC/D0X,eAAW,GAAGhX,2BAAd;AACA2W,gBAAY,GAAGH,mBAAmB,CAACC,OAAD,EAAUnX,2BAAV,CAAlC;AACD,GAHM,MAGA,IAAIsT,cAAc,CAAC6D,OAAD,EAAUlX,eAAV,CAAlB,EAA8C;AACnDyX,eAAW,GAAG/W,eAAd;AACA0W,gBAAY,GAAGH,mBAAmB,CAACC,OAAD,EAAUlX,eAAV,CAAlC;AACD,GAHM,MAGA,IAAIqT,cAAc,CAAC6D,OAAD,EAAUjX,wBAAV,CAAlB,EAAuD;AAC5DwX,eAAW,GAAG9W,wBAAd;AACAyW,gBAAY,GAAGH,mBAAmB,CAACC,OAAD,EAAUjX,wBAAV,CAAlC;AACD,GAHM,MAGA;AACLwX,eAAW,GAAGlX,WAAd;AACA6W,gBAAY,GAAGF,OAAf;AACD;;AACD,SAAO;AACLO,eAAW,EAAXA,WADK;AAELL,gBAAY,EAAZA;AAFK,GAAP;AAID;;AAED,SAASzd,4BAAT,CAAsCud,OAAtC,EAA+CppB,eAA/C,EAAgE;AAC9D;AAD8D,qBAEzC4L,WAAW,CAACwd,OAAD,CAF8B;AAAA,MAExD5lB,GAFwD,gBAExDA,GAFwD;AAAA,MAEnDE,KAFmD,gBAEnDA,KAFmD;;AAG9D,MAAIomB,UAAU,GAAGtmB,GAAjB;AACA4lB,SAAO,GAAG1lB,KAAV;;AACA,MAAI,CAAC1D,eAAe,CAACW,cAAhB,CAA+B6C,GAA/B,CAAL,EAA0C;AACxC;AACA,WAAO,KAAP;AACD;;AACD,MAAIjF,QAAQ,GAAGyB,eAAe,CAAC8pB,UAAD,CAA9B,CAT8D,CAU9D;;AACAvrB,UAAQ,GAAGkrB,kBAAkB,CAAClrB,QAAD,CAA7B;;AAX8D,8BAY1BmrB,sBAAsB,CAACN,OAAD,CAZI;AAAA,MAYxDO,WAZwD,yBAYxDA,WAZwD;AAAA,MAY3CL,YAZ2C,yBAY3CA,YAZ2C,EAa9D;;;AACA,MAAIS,eAAe,GAAGV,aAAa,CAACC,YAAD,EAAe/qB,QAAf,CAAnC;AACAA,UAAQ,GAAGwrB,eAAe,CAACxrB,QAA3B;AACA,SAAOyrB,aAAa,CAACL,WAAD,EAAcI,eAAe,CAACT,YAA9B,EAA4C/qB,QAA5C,CAApB;AACD;;AAED,SAASuN,iBAAT,CAA2Bsd,OAA3B,EAAoCppB,eAApC,EAAqD;AACnD,MAAMiqB,KAAK,GAAGb,OAAO,CAACxhB,KAAR,CAAc,GAAd,CAAd;;AACA,OAAK,IAAIqC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGggB,KAAK,CAACpsB,MAA1B,EAAkCoM,CAAC,EAAnC,EAAuC;AACrC,QAAIggB,KAAK,CAAChgB,CAAD,CAAL,CAASigB,IAAT,OAAoBlqB,eAAe,CAAC4d,UAAxC,EAAoD;AAClD,aAAO,IAAP;AACD;AACF;;AACD,SAAO,KAAP;AACD;;AAED,SAASoM,aAAT,CAAuBL,WAAvB,EAAoCL,YAApC,EAAkD/qB,QAAlD,EAA4D;AAC1D,MAAI+C,MAAJ;;AAEA,UAAQqoB,WAAR;AACE,SAAKvX,WAAL;AACE,UAAI7T,QAAQ,KAAK,IAAjB,EAAuB;AACrB+C,cAAM,GAAGgoB,YAAY,CAACjO,WAAb,OAA+B9c,QAAQ,CAAC8c,WAAT,EAAxC;AACD;;AACD;;AACF,SAAKhJ,0BAAL;AACE,UAAI9T,QAAQ,KAAK,IAAjB,EAAuB;AACrB+C,cAAM,GAAG/C,QAAQ,CAACunB,OAAT,CAAiBwD,YAAjB,IAAiC,CAAC,CAA3C;AACD;;AACD;;AACF,SAAKhX,mBAAL;AACE,UAAI/T,QAAQ,KAAK,IAAjB,EAAuB;AACrB+C,cAAM,GAAG/C,QAAQ,CAAC4rB,QAAT,CAAkBb,YAAlB,CAAT;AACD;;AACD;;AACF,SAAK/W,iBAAL;AACE,UAAIhU,QAAQ,KAAK,IAAjB,EAAuB;AACrB+C,cAAM,GAAG/C,QAAQ,CAAC6rB,UAAT,CAAoBd,YAApB,CAAT;AACD;;AACD;;AACF,SAAK9W,WAAL;AACE,UAAI;AACF,YAAI6X,OAAO,GAAG,IAAI3E,MAAJ,CAAW4D,YAAX,EAAyB,GAAzB,CAAd;AACAhoB,cAAM,GAAG,CAAC,CAAC+oB,OAAO,CAACC,IAAR,CAAa/rB,QAAb,CAAX;AACD,OAHD,CAGE,OAAO1B,GAAP,EAAY;AACZyE,cAAM,GAAG,KAAT;AACD;;AACD;;AACF,SAAKoR,kBAAL;AACE,UAAInU,QAAQ,KAAK,IAAjB,EAAuB;AACrB,YAAI;AACF+C,gBAAM,GAAG2iB,UAAU,CAACqF,YAAD,CAAV,GAA2BrF,UAAU,CAAC1lB,QAAD,CAA9C;AACD,SAFD,CAEE,OAAO1B,GAAP,EAAY;AACZyE,gBAAM,GAAG,KAAT;AACD;AACF;;AACD;;AACF,SAAKqR,2BAAL;AACE,UAAIpU,QAAQ,KAAK,IAAjB,EAAuB;AACrB,YAAI;AACF+C,gBAAM,GAAG2iB,UAAU,CAACqF,YAAD,CAAV,IAA4BrF,UAAU,CAAC1lB,QAAD,CAA/C;AACD,SAFD,CAEE,OAAO1B,GAAP,EAAY;AACZyE,gBAAM,GAAG,KAAT;AACD;AACF;;AACD;;AACF,SAAKsR,eAAL;AACE,UAAIrU,QAAQ,KAAK,IAAjB,EAAuB;AACrB,YAAI;AACF+C,gBAAM,GAAG2iB,UAAU,CAACqF,YAAD,CAAV,GAA2BrF,UAAU,CAAC1lB,QAAD,CAA9C;AACD,SAFD,CAEE,OAAO1B,GAAP,EAAY;AACZyE,gBAAM,GAAG,KAAT;AACD;AACF;;AACD;;AACF,SAAKuR,wBAAL;AACE,UAAItU,QAAQ,KAAK,IAAjB,EAAuB;AACrB,YAAI;AACF+C,gBAAM,GAAG2iB,UAAU,CAACqF,YAAD,CAAV,IAA4BrF,UAAU,CAAC1lB,QAAD,CAA/C;AACD,SAFD,CAEE,OAAO1B,GAAP,EAAY;AACZyE,gBAAM,GAAG,KAAT;AACD;AACF;;AACD;;AACF;AACEA,YAAM,GAAG/C,QAAQ,KAAK+qB,YAAtB;AAlEJ;;AAqEA,SAAOhoB,MAAP;AACD;;AAEDjC,MAAM,CAACC,OAAP,GAAiB;AACf6pB,qBAAmB,EAAnBA,mBADe;AAEfE,eAAa,EAAbA,aAFe;AAGfI,oBAAkB,EAAlBA,kBAHe;AAIfC,wBAAsB,EAAtBA,sBAJe;AAKf7d,8BAA4B,EAA5BA,4BALe;AAMfC,mBAAiB,EAAjBA;AANe,CAAjB,C;;;;;;;;;;;ACpPA;;;;;;;;;;;;;;;AAgBA,IAAMvM,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AACA,IAAM2Y,OAAO,GAAG3Y,mBAAO,CAAC,gDAAD,CAAvB;;eAC4CA,mBAAO,CAAC,mDAAD,C;IAA3C6sB,e,YAAAA,e;IAAiBvR,c,YAAAA,c;;AAEzB,IAAIX,gBAAgB,GAAG;AACrBa,KAAG,EAAE,aAAC5U,SAAD,EAAYE,MAAZ,EAAoBvF,kBAApB,EAAwD;AAAA,QAAhBH,MAAgB,uEAAP,EAAO;;AAC3D,QAAI,CAACwF,SAAD,IAAc,CAACE,MAAnB,EAA2B;AACzBsU,aAAO,CAACoD,KAAR,CAAc,4EAAd;AACA;AACD;;AAED,QAAI0T,QAAQ,GAAG,OAAf;AACA,QAAIC,IAAJ;AACA,QAAIC,QAAQ,GAAGzZ,OAAO,CAACC,QAAvB;AACA,QAAIyZ,IAAI,GAAG1Z,OAAO,CAACE,YAAnB;;AAEA,QAAIzX,MAAM,CAACwf,YAAX,EAAyB;AACvByR,UAAI,GAAG1Z,OAAO,CAACG,oBAAf;AACD;;AAEDuZ,QAAI,IACF,aAAMzrB,SAAN,qBACKE,MADL,qBAEK+lB,eAAe,EAFpB,4BAGY3lB,SAAS,CAAC+I,QAHtB,mBAIG/I,SAAS,CAACyJ,eAJb,cAIgCzJ,SAAS,CAAC4I,QAJ1C,mBAKG5I,SAAS,CAAC0J,uBALb,cAKwC1J,SAAS,CAAC8I,WALlD,CADF;;AAQA,QAAI5O,MAAM,CAACgxB,QAAP,IAAmBhxB,MAAM,CAACixB,IAA9B,EAAoC;AAClCH,cAAQ,GAAG9wB,MAAM,CAAC8wB,QAAlB;AACAC,UAAI,GAAG/wB,MAAM,CAAC+wB,IAAd;AACAC,cAAQ,GAAGhxB,MAAM,CAACgxB,QAAP,IAAmBA,QAA9B;AACAC,UAAI,GAAGjxB,MAAM,CAACixB,IAAP,IAAeA,IAAtB;AACD;;AAED,QAAI,IAAJ,EAAwC;AACtC,UAAI,OAAOxH,cAAP,KAA0B,WAA9B,EAA2C;AACzC,eAAO7qB,mBAAO,CAAC,6CAAD,CAAP,CAAuB8qB,IAAvB,CAA4B;AACjCrnB,gBAAM,EAAE,KADyB;AAEjCumB,aAAG,YAAKkI,QAAL,gBAAmBE,QAAnB,SAA8BC,IAA9B,CAF8B;AAGjC9wB,4BAAkB,EAAlBA;AAHiC,SAA5B,CAAP;AAKD;;AACD,aAAOvB,mBAAO,CAAC,yCAAD,CAAP,CAAqB8qB,IAArB,CAA0B;AAC/BrnB,cAAM,EAAE,KADuB;AAE/BumB,WAAG,YAAKkI,QAAL,gBAAmBE,QAAnB,SAA8BC,IAA9B,CAF4B;AAG/B9wB,0BAAkB,EAAlBA;AAH+B,OAA1B,CAAP;AAKD,KAbD,MAaO,oBAmBN;AACF,GAhEoB;AAkErB+wB,mBAAiB,EAAE,2BAAC/F,GAAD,EAAM3oB,OAAN,EAAeuoB,MAAf,EAA0B;AAAA,QACnCoG,UADmC,GACpBhG,GADoB,CACnCgG,UADmC;AAE3C,QAAMC,WAAW,GAAGjG,GAAG,CAACH,OAAJ,CAAY,cAAZ,CAApB;AAEA,QAAI5N,KAAJ;AACA,QAAIiU,OAAO,GAAG,EAAd;;AAEA,QAAI,CAAC,qBAAqBR,IAArB,CAA0BO,WAA1B,CAAL,EAA6C;AAC3ChU,WAAK,2EAAoEgU,WAApE,CAAL;AACD;;AAED,QAAIhU,KAAJ,EAAW;AACTpD,aAAO,CAACoD,KAAR,CAAcA,KAAK,CAAC/Z,OAApB,EADS,CAET;;AACA8nB,SAAG,CAACmG,MAAJ;AACAvG,YAAM,CAAC3N,KAAD,CAAN;AAEA;AACD;;AAED+N,OAAG,CAACoG,WAAJ,CAAgB,MAAhB;AAEApG,OAAG,CAACqG,EAAJ,CAAO,MAAP,EAAe,UAAAC,KAAK,EAAI;AACtBJ,aAAO,IAAII,KAAX;AACD,KAFD;AAIAtG,OAAG,CAACqG,EAAJ,CAAO,KAAP,EAAc,YAAM;AAClBjY,sBAAgB,CAACmY,kBAAjB,CAAoCP,UAApC,EAAgDE,OAAhD,EAAyD7uB,OAAzD,EAAkEuoB,MAAlE;AACD,KAFD;AAGD,GA/FoB;AAiGrB2G,oBAAkB,EAAE,4BAACP,UAAD,EAAaE,OAAb,EAAsB7uB,OAAtB,EAA+BuoB,MAA/B,EAA0C;AAC5D,QAAI;AACF,UAAM4G,UAAU,GAAG3mB,IAAI,CAACke,KAAL,CAAWmI,OAAX,CAAnB;;AAEA,UAAIF,UAAU,KAAK,GAAnB,EAAwB;AACtB,YAAI/T,KAAK,gCAAyBlD,cAAc,EAAvC,6EAA4GiX,UAA5G,2BAAuIE,OAAvI,CAAT;AACArX,eAAO,CAACoD,KAAR,CAAcA,KAAd;AACA2N,cAAM,CAAC3N,KAAD,CAAN;AAEA;AACD;;AACD5a,aAAO,CAACmvB,UAAD,CAAP;AACD,KAXD,CAWE,OAAOvuB,GAAP,EAAY;AACZ4W,aAAO,CAACoD,KAAR,8BACwBlD,cAAc,EADtC,6DAC2F9W,GAAG,CAACC,OAD/F;AAGA0nB,YAAM,CAAC3nB,GAAD,CAAN;AACD;AACF;AAnHoB,CAAvB;AAsHAwC,MAAM,CAACC,OAAP,GAAiB0T,gBAAjB,C;;;;;;;;;;;AC1IA;;;;;;;;;;;;;;;AAgBA,IAAMqY,MAAM,GAAGhzB,mBAAO,CAAC,0CAAD,CAAtB;;AACA,IAAMkH,SAAS,GAAGlH,mBAAO,CAAC,8CAAD,CAAzB;;AAEA,IAAMizB,aAAa,GAAGD,MAAM,CAAC9rB,SAAS,CAACsJ,QAAX,EAAqBwiB,MAAM,CAACE,GAA5B,CAA5B;AAEA,IAAM9b,QAAQ,GAAG;AACf4N,aAAW,EAAE,qBAAC5hB,MAAD,EAASwD,SAAT,EAAuB;AAClCxD,UAAM,aAAMA,MAAN,CAAN,CADkC,CACZ;;AACtB,QAAM+vB,IAAI,aAAMvsB,SAAN,CAAV;AACA,QAAMwsB,eAAe,GAAGhc,QAAQ,CAACic,QAAT,CAAkBF,IAAlB,EAAwBF,aAAxB,CAAxB;AACA,QAAMK,sBAAsB,GAAGlc,QAAQ,CAACic,QAAT,CAAkBjwB,MAAlB,EAA0BgwB,eAA1B,CAA/B;AAEA,QAAIG,WAAW,GAAGD,sBAAsB,CAAC3C,OAAvB,CAA+B,KAA/B,EAAsC,EAAtC,EAA0C6C,WAA1C,EAAlB;AAEA,WAAOD,WAAP;AACD,GAVc;AAWfF,UAAQ,EAAE,kBAACxjB,IAAD,EAAO4jB,SAAP,EAAqB;AAC7B,QAAI,CAAC5jB,IAAD,IAAS,CAAC4jB,SAAd,EAAyB;AACvB;AACD;;AAED,WAAOT,MAAM,CAACnjB,IAAD,EAAO4jB,SAAP,CAAb;AACD;AAjBc,CAAjB;AAoBAzsB,MAAM,CAACC,OAAP,GAAiBmQ,QAAjB,C;;;;;;;;;;;ACzCA;;;;;;;;;;;;;;;AAgBA,IAAM/W,eAAe,GAAG;AACtBmC,MADsB,gBACjBU,YADiB,EACH;AACjB7C,mBAAe,CAAC4E,kBAAhB,GAAqC/B,YAAY,CAAC+B,kBAAlD;AACA5E,mBAAe,CAACyS,IAAhB,GAAuB5P,YAAY,CAAC4P,IAApC;AACAzS,mBAAe,CAAC2S,MAAhB,GAAyB9P,YAAY,CAAC8P,MAAtC;AACD,GALqB;AAOtBD,QAPsB,oBAOb;AACP,WAAO;AACL9N,wBAAkB,EAAE5E,eAAe,CAAC4E,kBAD/B;AAEL6N,UAAI,EAAEzS,eAAe,CAACyS,IAFjB;AAGLE,YAAM,EAAE3S,eAAe,CAAC2S;AAHnB,KAAP;AAKD;AAbqB,CAAxB;AAgBAhM,MAAM,CAACC,OAAP,GAAiB5G,eAAjB,C;;;;;;;;;;;;;;;AChCA;;;;;;;;;;;;;;;AAgBA,IAAMF,YAAY,GAAGH,mBAAO,CAAC,mDAAD,CAA5B;;AACA,IAAMiW,YAAY,GAAGjW,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAME,OAAO,GAAGF,mBAAO,CAAC,gDAAD,CAAvB;;AACA,IAAM8M,YAAY,GAAG9M,mBAAO,CAAC,0DAAD,CAA5B;;AAEA,IAAM0zB,gCAAgC,uEACnCxzB,OAAO,CAACwD,QAD2B,EAChB,gBAQjB;AAAA,MAPDP,WAOC,QAPDA,WAOC;AAAA,MANDC,MAMC,QANDA,MAMC;AAAA,kCALDuE,eAKC;AAAA,MALDA,eAKC,qCALiB,EAKjB;AAAA,mCAJDC,2BAIC;AAAA,MAJDA,2BAIC,sCAJ6B,EAI7B;AAAA,kCAHDC,eAGC;AAAA,MAHDA,eAGC,qCAHiB,EAGjB;AAAA,mCAFDC,wBAEC;AAAA,MAFDA,wBAEC,sCAF0B,KAE1B;AAAA,2BADDC,QACC;AAAA,MADDA,QACC,8BADU,EACV;AACD,SAAO,CACL;AACEoD,OAAG,EAAE,aADP;AAEEE,SAAK,EAAElI,WAFT;AAGE6F,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GADK,EAML;AACEhL,OAAG,EAAE,QADP;AAEEE,SAAK,EAAEjI,MAFT;AAGE4F,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GANK,EAWL;AACEhL,OAAG,EAAE,iBADP;AAEEE,SAAK,EAAE1D,eAFT;AAGEqB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GAXK,EAgBL;AACElL,OAAG,EAAE,6BADP;AAEEE,SAAK,EAAEzD,2BAFT;AAGEoB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GAhBK,EAqBL;AACElL,OAAG,EAAE,iBADP;AAEEE,SAAK,EAAExD,eAFT;AAGEmB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GArBK,EA0BL;AACElL,OAAG,EAAE,0BADP;AAEEE,SAAK,EAAEvD,wBAFT;AAGEkB,QAAI,EAAEiN,YAAY,CAACG;AAHrB,GA1BK,EA+BL;AACEjL,OAAG,EAAE,UADP;AAEEE,SAAK,EAAEtD,QAFT;AAGEiB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GA/BK,CAAP;AAqCD,CA/CmC,0CAgDnCnW,OAAO,CAAC2E,KAhD2B,EAgDnB,iBAUd;AAAA,MATD1B,WASC,SATDA,WASC;AAAA,MARDC,MAQC,SARDA,MAQC;AAAA,MAPDwB,cAOC,SAPDA,cAOC;AAAA,oCAND+C,eAMC;AAAA,MANDA,eAMC,sCANiB,EAMjB;AAAA,oCALDC,2BAKC;AAAA,MALDA,2BAKC,sCAL6B,EAK7B;AAAA,oCAJDC,eAIC;AAAA,MAJDA,eAIC,sCAJiB,EAIjB;AAAA,oCAHDuF,eAGC;AAAA,MAHDA,eAGC,sCAHiBN,YAAY,CAACG,GAG9B;AAAA,oCAFDnF,wBAEC;AAAA,MAFDA,wBAEC,sCAF0B,KAE1B;AAAA,6BADDC,QACC;AAAA,MADDA,QACC,+BADU,EACV;AACD,SAAO,CACL;AACEoD,OAAG,EAAE,aADP;AAEEE,SAAK,EAAElI,WAFT;AAGE6F,QAAI,EAAEiN,YAAY,CAAC0d;AAHrB,GADK,EAML;AACExoB,OAAG,EAAE,QADP;AAEEE,SAAK,EAAEjI,MAFT;AAGE4F,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GANK,EAWL;AACEhL,OAAG,EAAE,gBADP;AAEEE,SAAK,EAAEzG,cAFT;AAGEoE,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GAXK,EAgBL;AACEhL,OAAG,EAAE,iBADP;AAEEE,SAAK,EAAE1D,eAFT;AAGEqB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GAhBK,EAqBL;AACElL,OAAG,EAAE,6BADP;AAEEE,SAAK,EAAEzD,2BAFT;AAGEoB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GArBK,EA0BL;AACElL,OAAG,EAAE,iBADP;AAEEE,SAAK,EAAExD,eAFT;AAGEmB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GA1BK,EA+BL;AACElL,OAAG,EAAE,iBADP;AAEEE,SAAK,EAAE+B,eAFT;AAGEpE,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GA/BK,EAoCL;AACEhL,OAAG,EAAE,0BADP;AAEEE,SAAK,EAAEvD,wBAFT;AAGEkB,QAAI,EAAEiN,YAAY,CAACG;AAHrB,GApCK,EAyCL;AACEjL,OAAG,EAAE,UADP;AAEEE,SAAK,EAAEtD,QAFT;AAGEiB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GAzCK,CAAP;AA+CD,CA1GmC,0CA2GnCnW,OAAO,CAACwF,kBA3G2B,EA2GN,iBAQ3B;AAAA,MAPDvC,WAOC,SAPDA,WAOC;AAAA,MANDC,MAMC,SANDA,MAMC;AAAA,oCALDuE,eAKC;AAAA,MALDA,eAKC,sCALiB,EAKjB;AAAA,oCAJDC,2BAIC;AAAA,MAJDA,2BAIC,sCAJ6B,EAI7B;AAAA,oCAHDC,eAGC;AAAA,MAHDA,eAGC,sCAHiB,EAGjB;AAAA,oCAFDC,wBAEC;AAAA,MAFDA,wBAEC,sCAF0B,KAE1B;AAAA,6BADDC,QACC;AAAA,MADDA,QACC,+BADU,EACV;AACD,SAAO,CACL;AACEoD,OAAG,EAAE,aADP;AAEEE,SAAK,EAAElI,WAFT;AAGE6F,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GADK,EAML;AACEhL,OAAG,EAAE,QADP;AAEEE,SAAK,EAAEjI,MAFT;AAGE4F,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GANK,EAWL;AACEhL,OAAG,EAAE,iBADP;AAEEE,SAAK,EAAE1D,eAFT;AAGEqB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GAXK,EAgBL;AACElL,OAAG,EAAE,6BADP;AAEEE,SAAK,EAAEzD,2BAFT;AAGEoB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GAhBK,EAqBL;AACElL,OAAG,EAAE,iBADP;AAEEE,SAAK,EAAExD,eAFT;AAGEmB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GArBK,EA0BL;AACElL,OAAG,EAAE,0BADP;AAEEE,SAAK,EAAEvD,wBAFT;AAGEkB,QAAI,EAAEiN,YAAY,CAACG;AAHrB,GA1BK,EA+BL;AACEjL,OAAG,EAAE,UADP;AAEEE,SAAK,EAAEtD,QAFT;AAGEiB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GA/BK,CAAP;AAqCD,CAzJmC,0CA0JnCnW,OAAO,CAAC4F,0BA1J2B,EA0JE,iBAQnC;AAAA,MAPD3C,WAOC,SAPDA,WAOC;AAAA,MAND0C,WAMC,SANDA,WAMC;AAAA,MALDzC,MAKC,SALDA,MAKC;AAAA,oCAJDuE,eAIC;AAAA,MAJDA,eAIC,sCAJiB,EAIjB;AAAA,oCAHDC,2BAGC;AAAA,MAHDA,2BAGC,sCAH6B,EAG7B;AAAA,oCAFDC,eAEC;AAAA,MAFDA,eAEC,sCAFiB,EAEjB;AAAA,6BADDE,QACC;AAAA,MADDA,QACC,+BADU,EACV;AACD,SAAO,CACL;AACEoD,OAAG,EAAE,aADP;AAEEE,SAAK,EAAElI,WAFT;AAGE6F,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GADK,EAML;AACEhL,OAAG,EAAE,aADP;AAEEE,SAAK,EAAExF,WAFT;AAGEmD,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GANK,EAWL;AACEhL,OAAG,EAAE,QADP;AAEEE,SAAK,EAAEjI,MAFT;AAGE4F,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GAXK,EAgBL;AACEhL,OAAG,EAAE,iBADP;AAEEE,SAAK,EAAE1D,eAFT;AAGEqB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GAhBK,EAqBL;AACElL,OAAG,EAAE,6BADP;AAEEE,SAAK,EAAEzD,2BAFT;AAGEoB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GArBK,EA0BL;AACElL,OAAG,EAAE,iBADP;AAEEE,SAAK,EAAExD,eAFT;AAGEmB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GA1BK,EA+BL;AACElL,OAAG,EAAE,UADP;AAEEE,SAAK,EAAEtD,QAFT;AAGEiB,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GA/BK,CAAP;AAqCD,CAxMmC,0CAyMnCnW,OAAO,CAACoG,IAzM2B,EAyMpB,iBAA2D;AAAA,MAAhDL,MAAgD,SAAhDA,MAAgD;AAAA,MAAxCC,QAAwC,SAAxCA,QAAwC;AAAA,MAA9B9C,MAA8B,SAA9BA,MAA8B;AAAA,MAAtB+C,kBAAsB,SAAtBA,kBAAsB;AACzE,SAAO,CACL;AACEgF,OAAG,EAAE,QADP;AAEEE,SAAK,EAAEpF,MAFT;AAGE+C,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GADK,EAML;AACEhL,OAAG,EAAE,UADP;AAEEE,SAAK,EAAEnF,QAFT;AAGE8C,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GANK,EAWL;AACEhL,OAAG,EAAE,QADP;AAEEE,SAAK,EAAEjI,MAFT;AAGE4F,QAAI,EAAEiN,YAAY,CAACE;AAHrB,GAXK,EAgBL;AACEhL,OAAG,EAAE,oBADP;AAEEE,SAAK,EAAElF,kBAFT;AAGE6C,QAAI,EAAEiN,YAAY,CAACI;AAHrB,GAhBK,CAAP;AAsBD,CAhOmC,yBAAtC,C,CAkOA;;AACAqd,gCAAgC,CAACxzB,OAAO,CAACwE,kBAAT,CAAhC,GAA+DgvB,gCAAgC,CAACxzB,OAAO,CAACwD,QAAT,CAA/F;AAEA,IAAM4D,YAAY,GAAG;AACnBgC,cAAY,EAAE,sBAAS+B,KAAT,EAAgB;AAC5B,WAAO,CAAC,EAAEA,KAAK,KAAKzJ,SAAV,IAAuByJ,KAAzB,CAAR;AACD,GAHkB;AAInBuoB,eAAa,EAAE,uBAASvoB,KAAT,EAAgB;AAC7B,WAAO/D,YAAY,CAACgC,YAAb,CAA0B+B,KAA1B,KAAoClL,YAAY,CAACgM,QAAb,CAAsBd,KAAtB,CAA3C;AACD,GANkB;AAOnBwoB,eAAa,EAAE,uBAASxoB,KAAT,EAAgB;AAC7B,WAAO/D,YAAY,CAACgC,YAAb,CAA0B+B,KAA1B,KAAoClL,YAAY,CAAC2b,QAAb,CAAsBzQ,KAAtB,CAA3C;AACD,GATkB;AAUnByoB,iBAAe,EAAE,yBAASzoB,KAAT,EAAgB;AAC/B,WAAO/D,YAAY,CAACgC,YAAb,CAA0B+B,KAA1B,KAAoClL,YAAY,CAACgc,UAAb,CAAwB9Q,KAAxB,CAA3C;AACD,GAZkB;AAanB0oB,gBAAc,EAAE,wBAAS1oB,KAAT,EAAgB;AAC9B,WAAOA,KAAK,KAAKzJ,SAAV,IAAuBzB,YAAY,CAACuN,SAAb,CAAuBrC,KAAvB,CAA9B;AACD,GAfkB;AAgBnB2oB,eAAa,EAAE,uBAAS3oB,KAAT,EAAgB;AAC7B,WAAOA,KAAK,KAAKzJ,SAAV,IAAuBzB,YAAY,CAACoD,QAAb,CAAsB8H,KAAtB,CAA9B;AACD,GAlBkB;AAmBnBlD,4BAA0B,EAAE,oCAAA8rB,OAAO,EAAI;AACrC,QAAIC,OAAO,GAAG,KAAd;AACA,QAAIC,IAAI,GAAGT,gCAAgC,CAACO,OAAO,CAACxwB,MAAT,CAAhC,CAAiDwwB,OAAjD,CAAX;AAEA,QAAIG,UAAU,GAAG,EAAjB;;AAEA,SAAK,IAAIxiB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuiB,IAAI,CAAC3uB,MAAzB,EAAiCoM,CAAC,EAAlC,EAAsC;AACpC,UAAIyiB,SAAS,GAAGF,IAAI,CAACviB,CAAD,CAApB;AACA,UAAI0iB,QAAQ,GAAGD,SAAS,CAAChpB,KAAzB;AACA,UAAIkpB,QAAQ,GAAGF,SAAS,CAACrrB,IAAzB,CAHoC,CAIpC;;AAEA,cAAQurB,QAAR;AACE,aAAKte,YAAY,CAACC,MAAlB;AACEke,oBAAU,CAAC7tB,IAAX,CAAgBe,YAAY,CAACusB,aAAb,CAA2BS,QAA3B,CAAhB;AACA;;AACF,aAAKre,YAAY,CAACE,MAAlB;AACEie,oBAAU,CAAC7tB,IAAX,CAAgBe,YAAY,CAACssB,aAAb,CAA2BU,QAA3B,CAAhB;AACA;;AACF,aAAKre,YAAY,CAACG,OAAlB;AACEge,oBAAU,CAAC7tB,IAAX,CAAgBe,YAAY,CAACysB,cAAb,CAA4BO,QAA5B,CAAhB;AACA;AACF;AACA;AACA;;AACA,aAAKre,YAAY,CAACI,MAAlB;AACE+d,oBAAU,CAAC7tB,IAAX,CAAgBe,YAAY,CAAC0sB,aAAb,CAA2BM,QAA3B,CAAhB;AACA;;AACF,aAAKre,YAAY,CAAC0d,2BAAlB;AACE,cAAItoB,KAAK,GACP/D,YAAY,CAACssB,aAAb,CAA2BU,QAA3B,KACAn0B,YAAY,CAACgF,WAAb,CAAyBmvB,QAAzB,CADA,IAEAn0B,YAAY,CAACiF,MAAb,CAAoBkvB,QAApB,CAFA,IAGAn0B,YAAY,CAAC+E,OAAb,CAAqBovB,QAArB,CAJF;AAKAF,oBAAU,CAAC7tB,IAAX,CAAgB8E,KAAhB;AACA;AACF;AACA;AACA;AACA;AA3BF;AA6BD;;AAED6oB,WAAO,GAAGE,UAAU,CAAClmB,KAAX,CAAiB,UAAAqG,GAAG;AAAA,aAAIA,GAAJ;AAAA,KAApB,CAAV;AAEA,WAAO2f,OAAP;AACD;AAjEkB,CAArB;AAoEAltB,MAAM,CAACC,OAAP,GAAiBK,YAAjB,C;;;;;;;;;;;AC9TA;;;;;;;;;;;;;;;AAgBA,IAAM9G,OAAO,GAAGR,mBAAO,CAAC,4DAAD,CAAvB;;IACQe,Y,GAAiBP,O,CAAjBO,Y;;eACmBf,mBAAO,CAAC,mDAAD,C;IAA1Bsb,c,YAAAA,c;;gBACyBtb,mBAAO,CAAC,mDAAD,C;IAAhCuD,Q,aAAAA,Q;IAAU4Y,U,aAAAA,U;;AAElB,IAAMqY,OAAO,GAAG;AACd1I,oBAAkB,EAAE,4BAASvqB,kBAAT,EAA6B;AAC/C,QAAIwqB,YAAY,GAAG,KAAnB;AACA,QAAIC,cAAJ;;AAEA,QAAIzqB,kBAAkB,IAAIgC,QAAQ,CAAChC,kBAAD,CAA9B,IAAsD4a,UAAU,CAAC5a,kBAAkB,CAAC0qB,WAApB,CAApE,EAAsG;AACpG,UAAI;AACF,YAAM1N,QAAQ,GAAGhd,kBAAkB,CAAC0qB,WAAnB,EAAjB;AACAD,sBAAc,GAAG5f,IAAI,CAACke,KAAL,CAAW/L,QAAX,CAAjB;;AAEA,YAAIyN,cAAc,IAAIzoB,QAAQ,CAACyoB,cAAD,CAA1B,IAA8ChgB,MAAM,CAACC,IAAP,CAAY+f,cAAZ,EAA4BxmB,MAA5B,GAAqC,CAAvF,EAA0F;AACxF,cAAM6V,IAAI,+BAAwBC,cAAc,EAAtC,4CAAV;AAEAF,iBAAO,CAACC,IAAR,CAAaA,IAAb;AAEA0Q,sBAAY,GAAG,IAAf;AACD,SAND,MAMO,IAAIC,cAAJ,EAAoB;AACzB,cAAMxN,KAAK,gCAAyBlD,cAAc,EAAvC,yDAAX;AAEAF,iBAAO,CAACoD,KAAR,CAAcA,KAAd;AACD,SAJM,MAIA;AACL,cAAM0N,OAAO,kCAA2B5Q,cAAc,EAAzC,+CAAb;AAEAF,iBAAO,CAACwG,IAAR,CAAasK,OAAb;AACD;AACF,OAnBD,CAmBE,OAAO1nB,GAAP,EAAY;AACZ,YAAMga,MAAK,gCAAyBlD,cAAc,EAAvC,kEAAiG9W,GAAjG,CAAX;;AAEA4W,eAAO,CAACoD,KAAR,CAAcA,MAAd;AACAuN,oBAAY,GAAG,KAAf;AACD;AACF;;AAED,WAAO;AACLA,kBAAY,EAAZA,YADK;AAELC,oBAAc,EAAdA;AAFK,KAAP;AAID,GArCa;AAsCdlB,MAAI,EAAE,gBAAmF;AAAA;;AAAA,mFAAJ,EAAI;AAAA,QAAxErnB,MAAwE,QAAxEA,MAAwE;AAAA,QAAhEumB,GAAgE,QAAhEA,GAAgE;AAAA,QAA3D/f,OAA2D,QAA3DA,OAA2D;AAAA,QAAlD1I,kBAAkD,QAAlDA,kBAAkD;AAAA,QAA9Bod,aAA8B,QAA9BA,aAA8B;AAAA,QAAfnd,MAAe,QAAfA,MAAe;;AACvF,QAAI,CAACwoB,GAAD,IAAQ,CAACvmB,MAAb,EAAqB;AACnB;AACD;;AAED,WAAO,IAAIE,OAAJ,CAAY,UAACC,OAAD,EAAUuoB,MAAV,EAAqB;AAAA,kCACGqI,OAAO,CAAC1I,kBAAR,CAA2BvqB,kBAA3B,CADH;AAAA,UAC9BwqB,YAD8B,yBAC9BA,YAD8B;AAAA,UAChBC,cADgB,yBAChBA,cADgB;;AAGtC,UAAID,YAAJ,EAAkB;AAChBnoB,eAAO,CAACooB,cAAD,CAAP;AACD,OAFD,MAEO;AACL,YAAI+B,GAAG,GAAG,IAAIlD,cAAJ,EAAV;;AACA,aAAI,CAAC4J,UAAL,CAAgB1G,GAAhB,EAAqBtqB,MAArB,EAA6BumB,GAA7B,EAAkC/f,OAAlC,EAA2C1I,kBAA3C,EAA+Dod,aAA/D,EAA8End,MAA9E,EAAsFoC,OAAtF,EAA+FuoB,MAA/F;AACD;AACF,KATM,CAAP;AAUD,GArDa;AAuDd;AACAuI,aAAW,EAAE,qBAASC,OAAT,EAAkBC,UAAlB,EAA8BpzB,MAA9B,EAAsCmd,aAAtC,EAAqD1U,OAArD,EAA8DxG,MAA9D,EAAsEumB,GAAtE,EAA2EpmB,OAA3E,EAAoFuoB,MAApF,EAA4F;AAAA;;AACvG,QAAI0I,KAAK,GAAG,QAAQF,OAAO,GAAG,CAAlB,CAAZ;AACA,QAAI5G,GAAG,GAAG,IAAIlD,cAAJ,EAAV,CAFuG,CAIvG;;AACAkD,OAAG,CAAC+G,OAAJ,GAAc,IAAd,CALuG,CAKnF;AAEpB;;AACA/G,OAAG,CAACI,MAAJ,GAAa,YAAM;AACjB;AACA,UAAIJ,GAAG,CAACvlB,MAAJ,GAAa,GAAb,IAAoBulB,GAAG,CAACvlB,MAAJ,IAAc,GAAtC,EAA2C;AACzC,YAAImsB,OAAO,GAAGC,UAAd,EAA0B;AACxBD,iBAAO,GADiB,CAGxB;;AACAnzB,gBAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,wCAEiC8rB,GAAG,CAACvlB,MAFrC,8BAE+DulB,GAAG,CAACK,YAFnE,GAJwB,CASxB;;AACA2G,oBAAU,CAAC,YAAM;AACf,kBAAI,CAACL,WAAL,CAAiBC,OAAjB,EAA0BC,UAA1B,EAAsCpzB,MAAtC,EAA8Cmd,aAA9C,EAA6D1U,OAA7D,EAAsExG,MAAtE,EAA8EumB,GAA9E,EAAmFpmB,OAAnF,EAA4FuoB,MAA5F;AACD,WAFS,EAEP0I,KAFO,CAAV;AAGD,SAbD,MAaO;AACL;AACArzB,gBAAM,CAACQ,GAAP,CACEjB,YAAY,CAACkB,KADf,8CAEuC8rB,GAAG,CAACvlB,MAF3C,6BAEoEulB,GAAG,CAACK,YAFxE;AAIAjC,gBAAM,sBAAe4B,GAAG,CAACM,UAAnB,+BAAkDN,GAAG,CAACvlB,MAAtD,EAAN;AACD;AACF,OAtBD,MAsBO;AACL;AACA5E,eAAO,CAACmqB,GAAG,CAACK,YAAL,CAAP;AACD;AACF,KA5BD,CARuG,CAsCvG;;;AACAL,OAAG,CAACO,OAAJ,GAAc,YAAM;AAClB,UAAIqG,OAAO,GAAGC,UAAd,EAA0B;AACxBD,eAAO;AACPnzB,cAAM,CAACQ,GAAP,CAAWjB,YAAY,CAACkB,KAAxB,EAA+B,+BAA/B;AACA8yB,kBAAU,CAAC,YAAM;AACf,gBAAI,CAACL,WAAL,CAAiBC,OAAjB,EAA0BC,UAA1B,EAAsCpzB,MAAtC,EAA8Cmd,aAA9C,EAA6D1U,OAA7D,EAAsExG,MAAtE,EAA8EumB,GAA9E,EAAmFpmB,OAAnF,EAA4FuoB,MAA5F;AACD,SAFS,EAEP0I,KAFO,CAAV;AAGD,OAND,MAMO;AACL1I,cAAM,0BAAmB4B,GAAG,CAACM,UAAvB,4BAAmDN,GAAG,CAACvlB,MAAvD,EAAN;AACD;AACF,KAVD,CAvCuG,CAmDvG;;;AACAulB,OAAG,CAACiH,SAAJ,GAAgB,YAAM;AACpB,UAAIL,OAAO,GAAGC,UAAd,EAA0B;AACxBD,eAAO;AACPnzB,cAAM,CAACQ,GAAP,CAAWjB,YAAY,CAACkB,KAAxB,EAA+B,yBAA/B;AACA8yB,kBAAU,CAAC,YAAM;AACf,gBAAI,CAACL,WAAL,CAAiBC,OAAjB,EAA0BC,UAA1B,EAAsCpzB,MAAtC,EAA8Cmd,aAA9C,EAA6D1U,OAA7D,EAAsExG,MAAtE,EAA8EumB,GAA9E,EAAmFpmB,OAAnF,EAA4FuoB,MAA5F;AACD,SAFS,EAEP0I,KAFO,CAAV;AAGD,OAND,MAMO;AACL1I,cAAM,0BAAmB4B,GAAG,CAACM,UAAvB,4BAAmDN,GAAG,CAACvlB,MAAvD,EAAN;AACD;AACF,KAVD,CApDuG,CAgEvG;;;AACAulB,OAAG,CAACC,IAAJ,CAASvqB,MAAT,EAAiBumB,GAAjB,EAAsB,IAAtB;;AACA,SAAK,IAAIiL,aAAT,IAA0BtW,aAA1B,EAAyC;AACvC,UAAIA,aAAa,CAACrW,cAAd,CAA6B2sB,aAA7B,CAAJ,EAAiD;AAC/ClH,WAAG,CAACG,gBAAJ,CAAqB+G,aAArB,EAAoCtW,aAAa,CAACsW,aAAD,CAAjD;AACD;AACF;;AACDlH,OAAG,CAACjD,IAAJ,CAAS1e,IAAI,CAACC,SAAL,CAAepC,OAAf,CAAT;AACD,GAhIa;AAkIdwqB,YAAU,EAAE,oBAAS1G,GAAT,EAActqB,MAAd,EAAsBumB,GAAtB,EAA2B/f,OAA3B,EAAoC1I,kBAApC,EAAqG;AAAA;;AAAA,QAA7Cod,aAA6C,uEAA7B,EAA6B;AAAA,QAAzBnd,MAAyB;AAAA,QAAjBoC,OAAiB;AAAA,QAARuoB,MAAQ;;AAC/G,QAAI1oB,MAAM,KAAK,KAAf,EAAsB;AACpB,UAAI;AACFsqB,WAAG,CAACI,MAAJ,GAAa,YAAM;AACjB,gBAAI,CAAC+G,SAAL,CAAenH,GAAf,EAAoBxsB,kBAApB,EAAwCqC,OAAxC;AACD,SAFD;;AAGAmqB,WAAG,CAACO,OAAJ,GAAc,YAAM;AAClB,gBAAI,CAAC6G,UAAL,CAAgBpH,GAAhB,EAAqB5B,MAArB;AACD,SAFD;;AAIA4B,WAAG,CAACC,IAAJ,CAASvqB,MAAT,EAAiBumB,GAAjB;;AACA,aAAK,IAAIiE,UAAT,IAAuBtP,aAAvB,EAAsC;AACpC,cAAIA,aAAa,CAACrW,cAAd,CAA6B2lB,UAA7B,CAAJ,EAA8C;AAC5CF,eAAG,CAACG,gBAAJ,CAAqBD,UAArB,EAAiCtP,aAAa,CAACsP,UAAD,CAA9C;AACD;AACF;;AACDF,WAAG,CAACjD,IAAJ;AACD,OAfD,CAeE,OAAOsK,CAAP,EAAU;AACVha,eAAO,CAACpZ,GAAR,CAAYozB,CAAC,CAAC3wB,OAAd;AACD;AACF,KAnBD,MAmBO,IAAIhB,MAAM,KAAK,MAAf,EAAuB;AAC5B;AACA,UAAIkxB,OAAO,GAAG,CAAd;AACA,UAAIC,UAAU,GAAG,CAAjB,CAH4B,CAK5B;;AACA,WAAKF,WAAL,CAAiBC,OAAjB,EAA0BC,UAA1B,EAAsCpzB,MAAtC,EAA8Cmd,aAA9C,EAA6D1U,OAA7D,EAAsExG,MAAtE,EAA8EumB,GAA9E,EAAmFpmB,OAAnF,EAA4FuoB,MAA5F;AACD;AACF,GA9Ja;AAgKd+I,WAAS,EAAE,mBAASnH,GAAT,EAAcxsB,kBAAd,EAAkCqC,OAAlC,EAA2C;AACpD,QAAI;AACF,UAAIyxB,iBAAiB,GAAGjpB,IAAI,CAACke,KAAL,CAAWyD,GAAG,CAACjZ,QAAf,CAAxB;;AAEA,UAAIvT,kBAAkB,IAAIgC,QAAQ,CAAChC,kBAAD,CAA9B,IAAsD4a,UAAU,CAAC5a,kBAAkB,CAACmrB,WAApB,CAApE,EAAsG;AACpGnrB,0BAAkB,CAACmrB,WAAnB,CAA+BqB,GAAG,CAACjZ,QAAnC;AACD;;AAEDlR,aAAO,CAACyxB,iBAAD,CAAP;AACD,KARD,CAQE,OAAO7wB,GAAP,EAAY;AACZ4W,aAAO,CAACoD,KAAR,CAAcha,GAAd;AACD;AACF,GA5Ka;AA8Kd2wB,YAAU,EAAE,oBAASpH,GAAT,EAAc5B,MAAd,EAAsB;AAChC,QAAI3N,KAAK,gCAAyBlD,cAAc,EAAvC,6EACPyS,GAAG,CAACvlB,MADG,CAAT;AAIA4S,WAAO,CAACoD,KAAR,CAAcA,KAAd;AACA2N,UAAM,CAAC3N,KAAD,CAAN;AACD;AArLa,CAAhB;AAwLAxX,MAAM,CAACC,OAAP,GAAiButB,OAAjB,C;;;;;;;;;;;AC7MA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,cAAc,OAAO;AACrB;AACA;AACA;;AAEA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,MAAM,IAA6B;AACnC;AACA,GAAG,MAAM,sBAON;AACH,CAAC;;;;;;;;;;;;;ACnID;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,aAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,eAAe,6BAA6B;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,kDAAkD,KAAK,IAAI,wBAAwB,eAAe,SAAS,kBAAkB,sBAAsB;AACnJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD,aAAa;AACjE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAmC;;AAEnC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,OAAO;AACjC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,OAAO,YAAY,IAAI,GAAG,IAAI;AACxD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,OAAO,aAAa,cAAc;AAC5D;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD,aAAa;AACjE;;AAEA;AACA;AACA;AACA;;AAEA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mCAAmC;AACtD;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,WAAW;AACzC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,SAAS,GAAG,WAAW;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,6BAA6B,EAAE,kBAAkB;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,EAAE,kBAAkB;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,SAAS,GAAG,WAAW;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB,oCAAoC;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,EAAE,gBAAgB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,qCAAqC;AACxD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,yBAAyB,QAAQ,MAAM;AAChF;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEgU;AAChU;;;;;;;;;;;;AC7wBA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACvBA;AACA;AACa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAkD;AAClD;AACA,mBAAmB,gBAAgB;AACnC;;AAEA;;AAEA;AACA;AACA;;AAEA,eAAe,KAAK;AACpB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB;AACpB;;AAEA,eAAe,KAAK;AACpB;;AAEA,iBAAiB,MAAM;AACvB,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxFA,kBAAkB,mBAAO,CAAC,6DAAe;;AAEzC;AACA;AACA;AACA,4BAA4B,EAAE;AAC9B;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,UAAU;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACxDA,UAAU,mBAAO,CAAC,oDAAc;AAChC,WAAW,mBAAO,CAAC,2DAAY;AAC/B","file":"vwo-javascript-sdk.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\t// CommonJS2\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\t// AMD\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\t// CommonJS\n\telse if(typeof exports === 'object')\n\t\texports[\"vwoSdk\"] = factory();\n\t// Root\n\telse\n\t\troot[\"vwoSdk\"] = factory();\n})(this, 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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = \"./lib/index.js\");\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst api = require('./api');\n\nconst FileNameEnum = require('./enums/FileNameEnum');\nconst ApiEnum = require('./enums/ApiEnum');\n\nconst DataTypeUtil = require('./utils/DataTypeUtil');\nconst FunctionUtil = require('./utils/FunctionUtil');\nconst VWOFeatureFlags = require('./utils/VWOFeatureFlags');\n\nconst EventQueue = require('./services/EventQueue');\nconst SettingsFileService = require('./services/SettingsFileManager');\nconst logging = require('./services/logging');\nconst HooksManager = require('./services/HooksManager');\nconst UrlService = require('./services/UrlService');\nconst UsageStats = require('./services/UsageStats');\n\nlet BatchEventsDispatcher;\nlet customEventUtil;\nlet BatchEventsQueue;\n\nif (typeof process.env !== 'undefined') {\n BatchEventsQueue = require('./services/BatchEventsQueue');\n BatchEventsDispatcher = require('./utils/BatchEventsDispatcher').dispatch;\n customEventUtil = require('./utils/CustomEventUtil');\n}\n\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst file = FileNameEnum.VWO;\n\nclass VWO {\n // Setting various services on the instance to be accessible by its member functions\n constructor(config = {}) {\n this.getVariation = this.getVariationName; // to be backward compatible\n this.userStorageService = config.userStorageService;\n this.logger = config.logger;\n this.returnPromiseFor = config.returnPromiseFor;\n this.asyncStorageConfig = config.asyncStorageConfig;\n this.optOut = false;\n\n if (this.userStorageService === undefined && config.asyncStorageConfig) {\n // replace the userStorageService with the redisObject passed in asyncStorageConfig\n this.userStorageService = config.asyncStorageConfig.redisStorage;\n config.userStorageService = this.userStorageService;\n }\n let settingsFileManager = new SettingsFileService(config);\n\n // Validate the config file i.e. check if required fields contain appropriate data\n if (!settingsFileManager.isSettingsFileValid()) {\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_INVALID, {\n file\n })\n );\n\n return;\n }\n\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_VALID, {\n file\n })\n );\n\n // Initialize Hooks manager so that callbacks can be invoked\n HooksManager.init(config);\n\n // Setup event quque for sending impressions to VWO server\n this.eventQueue = new EventQueue();\n this.usageStats = new UsageStats();\n\n this.SettingsFileManager = settingsFileManager;\n settingsFileManager.checkAndPoll(); // Checks if pollingInterval is passed then starts polling settingsFile\n\n if (!config.isDevelopmentMode) {\n this.usageStats.collectUsageStats(settingsFileManager.getConfig());\n }\n\n // Only for Node.js SDK\n if (typeof process.env !== 'undefined') {\n if (config.batchEvents) {\n const accountId = settingsFileManager.getSettingsFile().accountId;\n const sdkKey = settingsFileManager.getSettingsFile().sdkKey;\n\n this.batchEventsQueue = new BatchEventsQueue(\n Object.assign(\n {},\n config.batchEvents,\n { isDevelopmentMode: config.isDevelopmentMode },\n {\n accountId,\n dispatcher: (events, callback) =>\n BatchEventsDispatcher(\n {\n ev: events\n },\n callback,\n Object.assign(\n {},\n {\n a: accountId\n },\n this.usageStats.getUsageStats()\n ),\n sdkKey\n )\n }\n )\n );\n\n this.batchEventsQueue.flushAndClearTimer.bind(this.batchEventsQueue);\n }\n }\n\n // Process settingsFile for various things. For eg: assign bucket range to variation, etc.\n this.SettingsFileManager.processSettingsFile();\n\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SDK_INITIALIZED, {\n file\n })\n );\n\n this.UrlService = UrlService.init(config.settingsFile);\n this.VWOFeatureFlags = VWOFeatureFlags.init(config.settingsFile);\n }\n\n // PUBLIC METHODS\n\n /**\n * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server\n *\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\n activate(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.ACTIVATE\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n resolve(null);\n } else {\n return api.activate(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.variationName);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.activate || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.ACTIVATE\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n resolve(null);\n } else {\n let variationName;\n options.responseCallback = (_error, _response) => {\n resolve(variationName);\n };\n variationName = api.activate(self, campaignKey, userId, options);\n\n // If we get null from the API i.e. no tracking call was sent\n // In this case, responseCallback will not be fired and hence we have to manually resolve the promise\n if (!variationName) {\n resolve(variationName);\n } else if (DataTypeUtil.isObject(variationName)) {\n resolve(variationName.variationName);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n return null;\n }\n\n const apiResponse = api.activate(self, campaignKey, userId, options);\n\n if (DataTypeUtil.isObject(apiResponse)) {\n return apiResponse.variationName;\n }\n\n return apiResponse;\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Gets the variation assigned for the user for the campaign\n *\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\n getVariationName(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_VARIATION_NAME\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n resolve(null);\n } else {\n return api.getVariation(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.variationName);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n if (self.returnPromiseFor && (self.returnPromiseFor.getVariationName || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_VARIATION_NAME\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n resolve(null);\n } else {\n // since this API does not send any async call, we can simply resolve the returned value\n resolve(api.getVariation(self, campaignKey, userId, options));\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n return null;\n }\n\n return api.getVariation(self, campaignKey, userId, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Marks the conversion of the campaign for a particular goal\n *\n * @param {String/Array/null/undefined} campaignSpecifier campaign keys to track unique campaignSpecifier\n * @param {String} userId ID assigned to a user\n * @param {String} goalIdentifier unique campaign's goal identifier\n * @param {Object} options optional params - customVariables, variationTargetingVariables, revenueValue\n */\n track(campaignSpecifier, userId, goalIdentifier, options = {}) {\n try {\n let self = this;\n\n // In case we use any asyncStorage like redis, promisify track\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.TRACK\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n resolve(null);\n } else {\n return api.track(self, campaignSpecifier, userId, goalIdentifier, options).then(function(trackResponse) {\n resolve(trackResponse);\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.track || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.TRACK\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n resolve(null);\n } else {\n let trackResponse;\n let counter = 0;\n options.responseCallback = (_error, _response) => {\n counter += 1;\n // For Data360, one single call is there to track multiple metrices\n // For global goals, we are now sending one single batch-events call\n if (\n self.isEventArchEnabled ||\n (DataTypeUtil.isArray(campaignSpecifier) ||\n ((DataTypeUtil.isUndefined(campaignSpecifier) || DataTypeUtil.isNull(campaignSpecifier)) &&\n FunctionUtil.objectValues(trackResponse).filter(Boolean).length))\n ) {\n resolve(trackResponse);\n } else if (counter === FunctionUtil.objectValues(trackResponse).filter(Boolean).length) {\n // In case of global goals, when all campaigns are tracked, then only resolve\n // TODO: verify if this can be removed as we are sending batch events call always for non-Data360 accounts\n resolve(trackResponse);\n }\n };\n trackResponse = api.track(self, campaignSpecifier, userId, goalIdentifier, options);\n // If we get null/false from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n // Or, in case of global goals, if none campaign got success, manually resolve\n if (!trackResponse || !FunctionUtil.objectValues(trackResponse).some(Boolean)) {\n resolve(trackResponse);\n } else if (trackResponse && trackResponse.isDevelopmentMode) {\n delete trackResponse.isDevelopmentMode;\n resolve(trackResponse);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n return null;\n }\n\n return api.track(self, campaignSpecifier, userId, goalIdentifier, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method checks: Whether a feature is enabled or not for the given user\n *\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} userId Unique identifier for the user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {Boolean} true if feature enabled, false otherwise\n */\n isFeatureEnabled(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n resolve(null);\n } else {\n return api.isFeatureEnabled(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.isFeatureEnabled);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.isFeatureEnabled || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n resolve(false);\n } else {\n let isFeatureEnabledApiResponse;\n options.responseCallback = (_error, _response) => {\n resolve(!!isFeatureEnabledApiResponse);\n };\n isFeatureEnabledApiResponse = api.isFeatureEnabled(self, campaignKey, userId, options);\n // If we get null from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n if (DataTypeUtil.isNull(isFeatureEnabledApiResponse)) {\n resolve(false);\n } else if (DataTypeUtil.isObject(isFeatureEnabledApiResponse)) {\n resolve(!!isFeatureEnabledApiResponse.isFeatureEnabled);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n return false;\n }\n\n const apiResponse = api.isFeatureEnabled(self, campaignKey, userId, options);\n\n if (DataTypeUtil.isObject(apiResponse)) {\n return !!apiResponse.isFeatureEnabled;\n }\n\n return !!apiResponse;\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return false;\n }\n }\n\n /**\n * This API method: Return the variable for that variation(if Feature Test),\n * otherwise the default values being set in Feature\n *\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} variableKey Unique key for a feature's variable\n * @param {String} userId Unique identifier for the user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {string|number|double|boolean|null} Variable value as is set in the VWO app i.e.\n * maintaining the data-type,\n * null if anything fails like campaign / variable not found\n */\n getFeatureVariableValue(campaignKey, variableKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n resolve(null);\n } else {\n return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.typeCastedValue);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n if (self.returnPromiseFor && (self.returnPromiseFor.getFeatureVariableValue || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n resolve(null);\n } else {\n // since this API does not send any async call, we can simply resolve the returned value\n resolve(api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options));\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n return null;\n }\n\n return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Pushes the key-value tag pair for a particular user\n *\n * @param {String} tagKey tag key\n * @param {String} tagValue tag Value\n * @param {String} userId ID assigned to a user\n *\n * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable\n */\n push(tagKey, tagValue, userId) {\n try {\n let self = this;\n let customDimensionMap;\n\n if (arguments.length === 2) {\n // Argument reshuffling.\n customDimensionMap = tagKey;\n userId = tagValue;\n\n tagKey = ' ';\n tagValue = ' ';\n } else if (arguments.length === 3) {\n customDimensionMap = {};\n } else {\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.PUSH\n })\n );\n return false;\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.push || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.PUSH\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.PUSH\n })\n );\n resolve(null);\n } else {\n let apiResponse;\n let counter = 0;\n\n const options = {\n responseCallback: (_error, _response) => {\n counter += 1;\n // In case of multiple custom dimensions, when all are tracked, then only resolve\n // if customDimensionMap is used\n if (\n customDimensionMap &&\n DataTypeUtil.isObject(customDimensionMap) &&\n FunctionUtil.objectValues(customDimensionMap).filter(Boolean).length > 1\n ) {\n resolve(apiResponse);\n }\n // else if custom dimensions are sent with tag key and value instead of a map\n else if (counter === FunctionUtil.objectValues(apiResponse).filter(Boolean).length) {\n resolve(apiResponse);\n }\n }\n };\n apiResponse = api.push(self, tagKey, tagValue, userId, customDimensionMap, options);\n // If we get false from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n if (!apiResponse) {\n resolve(false);\n } else if (apiResponse && apiResponse.isDevelopmentMode) {\n delete apiResponse.isDevelopmentMode;\n resolve(apiResponse);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.PUSH\n })\n );\n return null;\n }\n\n return api.push(self, tagKey, tagValue, userId, customDimensionMap);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return false;\n }\n }\n\n setOptOut() {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OPT_OUT_API_CALLED, {\n file\n })\n );\n\n if (this.returnPromiseFor && (this.returnPromiseFor.optOut || this.returnPromiseFor.all)) {\n return new Promise(resolve => {\n this._destroyInstanceVariables();\n if (this.batchEventsQueue) {\n this.flushEvents().then(() => {\n this.batchEventsQueue = undefined;\n resolve(true);\n });\n } else {\n resolve(true);\n }\n });\n }\n\n if (this.batchEventsQueue) {\n this.flushEvents().then(() => {\n this.batchEventsQueue = undefined;\n });\n }\n\n this._destroyInstanceVariables();\n\n return true;\n }\n /**\n * Manually flush impression events to VWO which are queued in batch queue as per batchEvents config\n */\n flushEvents() {\n const accountId = this.SettingsFileManager.getSettingsFile().accountId;\n\n if (typeof process.env !== 'undefined') {\n this.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.EVENT_BATCH_FLUSH, {\n file,\n accountId\n })\n );\n\n return new Promise((resolve, _reject) => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: 'flushEvents'\n })\n );\n resolve({\n status: false,\n message: 'opted out'\n });\n } else {\n if (this.batchEventsQueue) {\n customEventUtil.getInstance().once('batchCallCompleteion', (status, message) => {\n if (status) {\n resolve({\n status: true,\n message: message || 'Batch call sent to VWO'\n });\n } else {\n resolve({\n status: false,\n message: message || 'Batch call could not be processed'\n });\n }\n });\n\n this.batchEventsQueue.flushAndClearTimer();\n\n return;\n }\n\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.NO_BATCH_QUEUE, {\n file,\n accountId\n })\n );\n\n resolve({\n status: false,\n message: 'No batchEvents config present in launch API'\n });\n }\n });\n }\n }\n\n /**\n * Fetch latest settings-file and update so that vwoClientInstance could use latest settings\n * Helpful especially when using webhooks\n *\n * @param {Number} accountId\n * @param {String} sdkKey\n *\n * @return {Promise}\n */\n getAndUpdateSettingsFile(accountId, sdkKey) {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: 'getAndUpdateSettingsFile'\n })\n );\n return new Promise(resolve => {\n resolve(null);\n });\n }\n return this.SettingsFileManager.getAndUpdateSettingsFile(accountId, sdkKey);\n }\n\n _destroyInstanceVariables() {\n this.userStorageService = undefined;\n this.SettingsFileManager = undefined;\n this.usageStats = undefined;\n this.eventQueue = undefined;\n this.optOut = true;\n }\n}\n\nmodule.exports = VWO;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Activate;\n\n/**\n * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Assigns the determinitic variation to the user(based on userId), if user becomes part of campaign\n * If userStorageService is used, it will look into it for the variation and if found, no further processing is done\n * 4. Sends an impression call to VWO server to track user\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options Optional params\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\nfunction activate(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.ACTIVATE;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n userAgent,\n userIpAddress\n } = options;\n\n var visitorUserAgent = userAgent;\n\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.ACTIVATE,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n visitorUserAgent,\n userIpAddress\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false;\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (!CampaignUtil.isAbCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n // Once the matching RUNNING campaign is found, assign the deterministic variation to the userId provided\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n true,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n data\n );\n });\n }\n\n return _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n result\n );\n}\n\nfunction _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n result\n) {\n var { variationId, variationName, isStoredVariation } = result;\n\n // Check if variation-name has been assigned to the userId. If not, return no variation\n if (!ValidateUtil.isValidValue(variationName)) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.DECISION_NO_VARIATION_ALLOTED, {\n file,\n userId,\n campaignKey\n })\n );\n\n return null;\n }\n\n // check if variation found from storage. return it without sending a call to VWO server\n if (isStoredVariation && !shouldTrackReturningUser) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, {\n file,\n userId,\n campaignKey,\n api\n })\n );\n return { variationName };\n }\n\n // Variation found...let VWO server knows about it to show report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n EventEnum.VWO_VARIATION_SHOWN,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackUserPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_VARIATION_SHOWN,\n campaign.id,\n variationId\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n } else {\n let properties = ImpressionUtil.buildEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n }\n\n if (config.isDevelopmentMode) {\n return { variationName };\n }\n\n return variationName;\n}\nmodule.exports = activate;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst FeatureUtil = require('../utils/FeatureUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst ObjectUtil = require('../utils/ObjectUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.GetFeatureVariableValue;\n\n/**\n * This API method:\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible for campaign and check if feature is enabled for the user.\n * 4. If feature enabled, return the variable for that variation(if Feature Test),\n * otherwise the default values being set in Feature\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} variableKey Unique key for a feature's variable\n * @param {String} userId Unique identifier for the user\n * @param {Object} options Optional params\n *\n * @return {string|number|double|boolean|null} Variable value as is set in the VWO app i.e.\n * maintaining the data-type,\n * null if anything fails like campaign / variable not found\n */\nfunction getFeatureVariableValue(vwoInstance, campaignKey, variableKey, userId, options = {}) {\n try {\n const api = ApiEnum.GET_FEATURE_VARIABLE_VALUE;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var { customVariables, variationTargetingVariables, userStorageData, metaData } = options;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE,\n campaignKey,\n variableKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.GetFeatureVariableValue\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isAbCampaign(campaign)) {\n // API not allowed for full-stack AB campaigns\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, data);\n });\n }\n\n return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result);\n } catch (err) {\n vwoInstance.logger.log(LogLevelEnum.ERROR, err.message);\n\n return null;\n }\n}\n\nfunction _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result) {\n let variable;\n var { variation, variationName } = result;\n\n if (!variationName) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: 'disabled'\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n variable = FeatureUtil.getVariableForFeature(campaign, variableKey);\n } else if (CampaignUtil.isFeatureTestCampaign(campaign)) {\n variable = FeatureUtil.getVariableValueForVariation(campaign, variation, variableKey);\n\n if (ObjectUtil.areObjectKeys(variable) && variation.isFeatureEnabled) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_VARIABLE_VALUE, {\n file,\n variableKey,\n campaignKey: campaign.key,\n variableValue: variable.value,\n userId\n })\n );\n } else if (ObjectUtil.areObjectKeys(variable) && !variation.isFeatureEnabled) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_VARIABLE_DEFAULT_VALUE, {\n file,\n variableKey,\n variationName\n })\n );\n }\n }\n\n if (!ObjectUtil.areObjectKeys(variable)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.VARIABLE_NOT_FOUND, {\n file,\n variableKey,\n userId\n })\n );\n\n return null;\n }\n\n let variableValue = variable.value;\n let typeCastedValue = FeatureUtil.getTypeCastVariableValue(variableValue, variable.type);\n\n return typeCastedValue;\n}\n\nmodule.exports = getFeatureVariableValue;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.GetVariation;\n\n/**\n * This API method: Gets the variation assigned for the user for the campaign\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Assigns the determinitic variation to the user(based on userId), if user becomes part of campaign\n * If userStorageService is used, it will look into it for the variation and if found, no further processing is done\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options Optional params\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\nfunction getVariation(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.GET_VARIATION_NAME;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var { customVariables, variationTargetingVariables, userStorageData, metaData } = options;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.GET_VARIATION_NAME,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey: campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return data;\n });\n }\n\n if (!result.variationName) {\n return null;\n }\n\n return result.variationName;\n}\n\nmodule.exports = getVariation;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst activate = require('./activate');\nconst getVariation = require('./getVariation');\nconst track = require('./track');\nconst isFeatureEnabled = require('./isFeatureEnabled');\nconst getFeatureVariableValue = require('./getFeatureVariableValue');\nconst push = require('./push');\n\nmodule.exports = {\n activate,\n getVariation,\n track,\n isFeatureEnabled,\n getFeatureVariableValue,\n push\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.IsFeatureEnabled;\n\n/**\n * This API checks: Whether a feature is enabled or not for the given user\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible for campaign and check if feature is enabled for the user.\n * 4. If feature enabled, sends a call to VWO server for tracking visitor\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} userId Unique identifier for the user\n * @param {Object} options Optional params\n *\n * @return {Boolean} true if feature enabled, false otherwise\n */\nfunction isFeatureEnabled(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.IS_FEATURE_ENABLED;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n userAgent,\n userIpAddress\n } = options;\n var visitorUserAgent = userAgent;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.IS_FEATURE_ENABLED,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n visitorUserAgent,\n userIpAddress\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.isFeatureEnabled\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply log and return false\n if (!settingsFile) {\n return null;\n }\n\n shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false;\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isAbCampaign(campaign)) {\n // API not allowed for full-stack AB campaigns\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n true,\n false,\n undefined,\n api\n );\n\n // check if result is a promise, if yes then wait for it untill it resolves, then only proceed further\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n data\n );\n });\n }\n\n return _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n var { variation, variationId, variationName, isStoredVariation } = result;\n\n let isFeatureEnabled = false;\n\n if (variationName) {\n isFeatureEnabled = CampaignUtil.isFeatureRolloutCampaign(campaign) || variation.isFeatureEnabled;\n\n if (isStoredVariation && !shouldTrackReturningUser) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, {\n file,\n userId,\n campaignKey,\n api\n })\n );\n } else {\n // Variation found...let VWO server knows about it to show report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n EventEnum.VWO_VARIATION_SHOWN,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackUserPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_VARIATION_SHOWN,\n campaign.id,\n variationId\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n } else {\n let properties = ImpressionUtil.buildEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n }\n\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: isFeatureEnabled ? 'enabled' : 'disabled'\n })\n );\n\n if (config.isDevelopmentMode) {\n return { isFeatureEnabled };\n }\n\n return isFeatureEnabled;\n }\n }\n\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: isFeatureEnabled ? 'enabled' : 'disabled'\n })\n );\n\n if (isStoredVariation || config.isDevelopmentMode) {\n return { isFeatureEnabled };\n }\n\n return { isFeatureEnabled };\n}\n\nmodule.exports = isFeatureEnabled;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ApiEnum = require('../enums/ApiEnum');\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nlet BatchEventsDispatcher;\n\nif (typeof process.env !== 'undefined') {\n BatchEventsDispatcher = require('../utils/BatchEventsDispatcher');\n}\n\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Push;\n\n/**\n * This API method: Pushes the key-value tag pair for a particular user\n *\n * 1. validates the arguments being passed\n * 2. Sends a call to VWO push api\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} tagKey tag key\n * @param {String} tagValue tag Value\n * @param {String} userId ID assigned to a user\n *\n * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable\n */\nfunction push(vwoInstance, tagKey, tagValue, userId, customDimensionMap, { responseCallback } = {}) {\n const api = ApiEnum.PUSH;\n\n if (\n !ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.PUSH,\n tagKey,\n tagValue,\n userId,\n customDimensionMap,\n responseCallback\n })\n ) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.PUSH_INVALID_PARAMS, {\n file,\n method: api\n })\n );\n return false;\n }\n\n if (tagKey.length > 255) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_KEY_LENGTH_EXCEEDED, {\n file,\n tagKey,\n userId\n })\n );\n return false;\n }\n\n if (tagValue.length > 255) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_VALUE_LENGTH_EXCEEDED, {\n file,\n tagKey,\n userId,\n tagValue\n })\n );\n return false;\n }\n\n if (tagKey === ' ' && tagValue === ' ' && (!customDimensionMap || Object.keys(customDimensionMap).length === 0)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.PUSH_INVALID_PARAMS, {\n file,\n method: api\n })\n );\n return false;\n }\n\n if (tagKey !== ' ' && tagValue !== ' ') {\n customDimensionMap[tagKey] = tagValue;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply false\n if (!settingsFile) {\n return false;\n }\n\n let result = {};\n if (config.batchEvents) {\n Object.keys(customDimensionMap).forEach(key => {\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n let properties = ImpressionUtil.buildBatchEventForPushing(settingsFile, key, tagValue, userId);\n vwoInstance.batchEventsQueue.enqueue(properties);\n\n result[key] = true;\n });\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(settingsFile, EventEnum.VWO_SYNC_VISITOR_PROP);\n let payload = ImpressionUtil.getPushPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_SYNC_VISITOR_PROP,\n customDimensionMap\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n\n result.success = true;\n } else {\n const events = [];\n const customDimensionKeys = Object.keys(customDimensionMap);\n\n customDimensionKeys.forEach(key => {\n let properties;\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n\n if (typeof process.env === 'undefined') {\n properties = ImpressionUtil.buildEventForPushing(settingsFile, key, tagValue, userId);\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n } else if (customDimensionKeys.length === 1) {\n properties = ImpressionUtil.buildEventForPushing(settingsFile, key, tagValue, userId);\n } else {\n properties = ImpressionUtil.buildBatchEventForPushing(settingsFile, key, tagValue, userId);\n }\n\n events.push(properties);\n result[key] = true;\n });\n\n if (typeof process.env !== 'undefined') {\n if (customDimensionKeys.length === 1) {\n vwoInstance.eventQueue.process(config, events[0], vwoInstance, { responseCallback });\n } else {\n if (!config.isDevelopmentMode) {\n BatchEventsDispatcher.dispatch(\n {\n ev: events\n },\n responseCallback,\n Object.assign(\n {},\n {\n a: vwoInstance.SettingsFileManager.getSettingsFile().accountId\n },\n vwoInstance.usageStats.getUsageStats()\n ),\n vwoInstance.SettingsFileManager.getSettingsFile().sdkKey\n );\n }\n }\n }\n }\n\n if (config.isDevelopmentMode) {\n return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode });\n }\n\n return result;\n}\n\nmodule.exports = push;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst { objectValues } = require('../utils/ObjectUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\n\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Track;\nconst GOAL_TYPE_TO_TRACK_DEFAULT = GoalTypeEnum.ALL;\nconst GOAL_IDENTIFIER_SEPERATOR = '_vwo_';\nconst api = ApiEnum.TRACK;\n\nlet BatchEventsDispatcher;\nif (typeof process.env !== 'undefined') {\n BatchEventsDispatcher = require('../utils/BatchEventsDispatcher');\n}\n\n/**\n * This API method: Marks the conversion of the campaign for a particular goal\n *\n * 1. validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Gets the assigned determinitic variation to the user(based on userId), if user becomes part of campaign\n * 4. Sends an impression call to VWO server to track goal data\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {Number} campaignKey unique campaign test key\n * @param {String} userId ID assigned to a user\n * @param {String} goalIdentifier unique campaign's goal identifier\n * @param {Object} options Optional params\n */\nfunction track(vwoInstance, campaignKey, userId, goalIdentifier, options = {}) {\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n revenueValue,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n eventProperties,\n userAgent,\n userIpAddress\n } = options;\n var visitorUserAgent = userAgent;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.TRACK,\n campaignKey,\n userId,\n goalIdentifier,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n }) &&\n (!goalTypeToTrack || (goalTypeToTrack && objectValues(GoalTypeEnum).includes(goalTypeToTrack)))\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.TRACK\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n let revenuePropList = new Set();\n\n // If no settings are found, simply do not track goal and return false\n if (!settingsFile) {\n return null;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n let campaigns = [];\n goalTypeToTrack = goalTypeToTrack || config.goalTypeToTrack || GOAL_TYPE_TO_TRACK_DEFAULT; // priority order - options > launchConfig > default\n if (DataTypeUtil.isUndefined(shouldTrackReturningUser)) {\n // if shouldTrackReturningUser is not given in options\n if (DataTypeUtil.isBoolean(config.shouldTrackReturningUser)) {\n // if shouldTrackReturningUser is given in config at launch\n shouldTrackReturningUser = config.shouldTrackReturningUser;\n } else {\n shouldTrackReturningUser = false;\n }\n }\n if (!DataTypeUtil.isString(campaignKey)) {\n if (DataTypeUtil.isArray(campaignKey)) {\n campaigns = CampaignUtil.getCampaignsForKeys(settingsFile, campaignKey);\n } else {\n campaigns = CampaignUtil.getCampaignsForGoal(settingsFile, goalIdentifier, goalTypeToTrack);\n }\n } else {\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n campaigns.push(campaign || { key: campaignKey });\n }\n const result = {};\n let metricMap = {};\n let events = [];\n let areGlobalGoals = typeof process.env === 'undefined' ? false : campaigns.length > 1;\n\n campaigns.forEach(\n campaign =>\n (result[campaign.key] = trackCampaignGoal(\n vwoInstance,\n campaign,\n campaign.key,\n userId,\n settingsFile,\n goalIdentifier,\n revenueValue,\n config,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n metricMap,\n revenuePropList,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n ))\n );\n\n // Check if each object in result is a promise\n // in case of asyncStorageConfig, each object would be a promise only\n // Check if result is a non-empty object\n const areAllPromises =\n result && Object.keys(result).length > 0\n ? Object.values(result).every(item => DataTypeUtil.isPromise(item))\n : false;\n // const areAllPromises = Object.values(result).every(item => DataTypeUtil.isPromise(item));\n\n if (areAllPromises) {\n // Promise.all - This method takes an array of promises and returns a new promise that resolves to an array of the resolved values when all of the input promises have resolved.\n // If any of the promises in the array reject, the whole Promise.all is rejected.\n return Promise.all(Object.values(result)).then(dataArray => {\n dataArray.forEach((data, index) => {\n const campaignKey = Object.keys(result)[index];\n const ans = _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n { [campaignKey]: data }\n );\n result[campaignKey] = ans[campaignKey];\n });\n return result;\n });\n }\n return _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n if (!Object.keys(result).length) {\n return null;\n }\n\n if (typeof process.env === 'undefined') {\n if (events && events.length) {\n for (let k = 0; k < events.length; k++) {\n vwoInstance.eventQueue.process(config, events[k], vwoInstance, { responseCallback });\n }\n }\n } else if (!settingsFile.isEventArchEnabled && events && events.length) {\n if (!areGlobalGoals) {\n vwoInstance.eventQueue.process(config, events[0], vwoInstance, { responseCallback });\n } else if (!config.isDevelopmentMode) {\n BatchEventsDispatcher.dispatch(\n {\n ev: events\n },\n responseCallback,\n Object.assign(\n {},\n {\n a: vwoInstance.SettingsFileManager.getSettingsFile().accountId\n },\n vwoInstance.usageStats.getUsageStats()\n ),\n vwoInstance.SettingsFileManager.getSettingsFile().sdkKey\n );\n }\n }\n\n if (settingsFile.isEventArchEnabled && Object.keys(metricMap).length > 0) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n goalIdentifier,\n {},\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackGoalPayloadData(\n settingsFile,\n userId,\n goalIdentifier,\n metricMap,\n revenueValue,\n revenuePropList,\n eventProperties\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n Object.keys(metricMap).forEach(function(key) {\n DecisionUtil._saveUserData(\n config,\n metricMap[key].campaign,\n metricMap[key].variationName,\n metricMap[key].userId,\n metricMap[key].metaData,\n goalIdentifier\n );\n });\n }\n }\n\n if (config.isDevelopmentMode) {\n return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode });\n }\n\n return result;\n}\n\nfunction trackCampaignGoal(\n vwoInstance,\n campaign,\n campaignKey,\n userId,\n settingsFile,\n goalIdentifier,\n revenueValue,\n config,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n metricMap,\n revenuePropList,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n) {\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey: campaignKey,\n api\n })\n );\n\n return false;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return false;\n }\n\n let campaignId = campaign.id;\n\n // Get the campaign goal settings based on goalIdentifier\n let goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier);\n\n if (!goal) {\n // If no goal is found, something is wrong with the goalIdentifier\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_GOAL_NOT_FOUND, {\n file,\n userId,\n goalIdentifier,\n campaignKey: campaignKey\n })\n );\n return false;\n } else if (goalTypeToTrack !== GOAL_TYPE_TO_TRACK_DEFAULT && goal.type !== goalTypeToTrack) {\n return false;\n } else if (goal.type === GoalTypeEnum.REVENUE && !ValidateUtil.isValidValue(revenueValue)) {\n if (settingsFile.isEventArchEnabled) {\n /* \n If it's a metric of type - value of an event property and calculation logic is first Value (mca != -1 )\n */\n if (goal.mca !== -1) {\n /*\n In this case it is expected that goal will have revenueProp\n Error should be logged if eventProperties is not Defined ` OR ` eventProperties does not have revenueProp key\n */\n if (DataTypeUtil.isUndefined(eventProperties) || !eventProperties.hasOwnProperty(goal.revenueProp)) {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n } else {\n /*\n here mca == -1 so there could only be 2 scenarios, \n 1. If revenueProp is defined then eventProperties should have revenueProp key\n 2. if revenueProp is not defined then it's a metric of type - Number of times an event has been triggered.\n */\n if (goal.revenueProp) {\n // Error should be logged if eventProperties is not Defined ` OR ` eventProperties does not have revenueProp key\n if (DataTypeUtil.isUndefined(eventProperties) || !eventProperties.hasOwnProperty(goal.revenueProp)) {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n }\n }\n } else {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n }\n\n if (goal.type === GoalTypeEnum.REVENUE && goal.revenueProp) {\n revenuePropList.add(goal.revenueProp);\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n true,\n goalIdentifier,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n if (!Object.keys(data).length) {\n return null;\n }\n return _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n data\n );\n });\n }\n\n return _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n var { variationId, variationName, storedGoalIdentifier } = result;\n // Is User is a part of Campaign and has been decided to be a part of particular variation\n if (variationName) {\n if (storedGoalIdentifier) {\n const identifiers = storedGoalIdentifier.split(GOAL_IDENTIFIER_SEPERATOR);\n if (!identifiers.includes(goalIdentifier)) {\n storedGoalIdentifier += GOAL_IDENTIFIER_SEPERATOR + goalIdentifier;\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, storedGoalIdentifier);\n }\n } else if (!shouldTrackReturningUser && goal.mca !== -1) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_GOAL_ALREADY_TRACKED, {\n file,\n userId,\n goalIdentifier,\n campaignKey\n })\n );\n return false;\n }\n }\n // If goal is found, send an impression to VWO server for report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n metricMap[campaign.id] = {\n config,\n campaign,\n variationName,\n userId,\n metaData,\n goal\n };\n return true;\n } else {\n let properties = {};\n\n if (areGlobalGoals) {\n properties = ImpressionUtil.buildBatchEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n visitorUserAgent,\n userIpAddress\n );\n } else {\n properties = ImpressionUtil.buildEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n visitorUserAgent,\n userIpAddress\n );\n }\n\n events.push(properties);\n }\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, goalIdentifier);\n }\n return true;\n }\n\n return false;\n}\n\nfunction logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL, {\n file,\n userId,\n goalIdentifier,\n campaignKey\n })\n );\n}\n\nmodule.exports = track;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* global SDK_NAME, SDK_VERSION */\n\nlet packageFile = {};\n\n// For javascript-sdk, to keep the build size low\n// avoid adding the whole package file in the file\nif (typeof process.env === 'undefined') {\n packageFile = {\n name: SDK_NAME,\n version: SDK_VERSION\n };\n} else {\n packageFile = require('../../package.json');\n}\n\nmodule.exports = {\n SDK_NAME: packageFile.name,\n SDK_VERSION: packageFile.version,\n\n PLATFORM: 'server',\n\n SEED_VALUE: 1,\n\n MAX_TRAFFIC_PERCENT: 100,\n MAX_TRAFFIC_VALUE: 10000,\n MAX_EVENTS_PER_REQUEST: 5000,\n\n DEFAULT_EVENTS_PER_REQUEST: 100,\n DEFAULT_REQUEST_TIME_INTERVAL: 600, // 10 * 60(secs) = 600 secs i.e. 10 minutes\n\n STATUS_RUNNING: 'RUNNING',\n\n SEED_URL: 'https://vwo.com',\n\n HTTP_PROTOCOL: 'http://',\n HTTPS_PROTOCOL: 'https://',\n\n SDK_QUERY_PARAM: 'sdk',\n SDK_VERSION_QUERY_PARAM: 'sdk-v'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Hasher = require('murmurhash');\n\nconst Constants = require('../constants');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst VWOFeatureFlags = require('../utils/VWOFeatureFlags');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.BucketingService;\n\nlet BucketingService = {\n /**\n * Generates Bucket Value of the User by hashing the User ID by murmurHash\n * and scaling it down.\n *\n * @param {Number} hashValue the hashValue generated after hashing\n * @param {Number} maxValue the value up-to which hashValue needs to be scaled\n * @param {Number} multiplier multiplier in case the traffic allocation is less than 100\n *\n * @return {Number} bucket Value of the User\n */\n _generateBucketValue: (hashValue, maxValue, multiplier = 1) => {\n const ratio = hashValue / Math.pow(2, 32);\n const multipliedValue = (maxValue * ratio + 1) * multiplier;\n const value = Math.floor(multipliedValue);\n\n return value;\n },\n\n /**\n * Returns the Variation by checking the Start and End Bucket Allocations of each Variation\n *\n * @param {Object} campaign which contains the variations\n * @param {Number} bucketValue the bucket Value of the user\n *\n * @return {Object|null} variation data allotted to the user or null if not\n */\n _getVariation: (variations, bucketValue) => {\n for (let i = 0; i < Object.keys(variations).length; i++) {\n let variation = variations[i];\n\n if (bucketValue >= variation.startVariationAllocation && bucketValue <= variation.endVariationAllocation) {\n return variation;\n }\n }\n\n return null;\n },\n\n /**\n * Validates the User ID and generates Bucket Value of the User by hashing the userId by murmurHash and scaling it down.\n *\n * @param {String} userId the unique ID assigned to User\n *\n * @return {Number} the bucket Value allotted to User (between 1 to $this->$MAX_TRAFFIC_PERCENT)\n */\n _getBucketValueForUser: (seed, userId, disableLog) => {\n let hashValue = Hasher.v3(seed, Constants.SEED_VALUE);\n let bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_PERCENT);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_HASH_BUCKET_VALUE, {\n file,\n hashValue,\n bucketValue,\n userId\n }),\n disableLog\n );\n\n return bucketValue;\n },\n\n /**\n * Calculate if this user should become part of the campaign or not\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {Object} campaign fot getting the value of traffic allotted to the campaign\n *\n * @return {Boolean} if User is a part of Campaign or not\n */\n isUserPartOfCampaign: (userId, campaign, disableLog = false) => {\n if (!campaign) {\n return false;\n }\n\n let trafficAllocation = campaign.percentTraffic;\n let valueAssignedToUser = BucketingService._getBucketValueForUser(\n CampaignUtil.getBucketingSeed(userId, campaign),\n userId,\n disableLog\n );\n let isUserPart = valueAssignedToUser !== 0 && valueAssignedToUser <= trafficAllocation;\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_CAMPAIGN_ELIGIBILITY, {\n file,\n userId,\n campaignKey: campaign.key,\n status: isUserPart ? 'eligible' : 'not eligible'\n }),\n disableLog\n );\n\n return isUserPart;\n },\n\n /**\n * Validates the User ID and generates Variation into which the User is bucketed in.\n *\n * @param {String} userId the unique ID assigned to User\n * @param {Object} campaign the Campaign of which User is a part of\n *\n * @return {Object|null} variation data into which user is bucketed in or null if not\n */\n bucketUserToVariation: (userId, campaign, accountId) => {\n const isNB = VWOFeatureFlags.getAll().isNB;\n const isNBv2 = VWOFeatureFlags.getAll().isNBv2;\n let multiplier;\n let seed;\n\n if (!ValidateUtil.isValidValue(userId)) {\n return null;\n }\n\n if (!campaign) {\n return null;\n }\n\n if (((!isNB && !isNBv2) || (isNB && campaign.isOB)) && campaign.percentTraffic) {\n // Old bucketing logic if feature flag is OFF or\n // Feature flag is ON and campaign is old i.e. created before feature flag was turned ON\n multiplier = Constants.MAX_TRAFFIC_VALUE / campaign.percentTraffic / 100;\n seed = CampaignUtil.getBucketingSeed(userId, campaign);\n } else if ((isNB && !campaign.isOB && !isNBv2) || (isNBv2 && campaign.isOBv2)) {\n // New bucketing logic if feature flag is ON and campaign is new i.e. created after feature flag was turned ON\n multiplier = 1;\n seed = userId;\n } else {\n // new bucketing V2 Logic\n multiplier = 1;\n seed = CampaignUtil.getBucketingSeed(accountId + '_' + userId, campaign);\n }\n\n const hashValue = BucketingService._generateHashValue(seed);\n const bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_CAMPAIGN_BUCKET_VALUES, {\n file,\n userId,\n campaignKey: campaign.key,\n percentTraffic: campaign.percentTraffic,\n bucketValue,\n hashValue\n })\n );\n\n return BucketingService._getVariation(campaign.variations, bucketValue);\n },\n calculateBucketValue: (seed, multiplier = 1) => {\n const hashValue = BucketingService._generateHashValue(seed);\n return BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier);\n },\n _generateHashValue: userId => {\n return Hasher.v3(userId, Constants.SEED_VALUE);\n }\n};\n\nmodule.exports = BucketingService;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst SegmentEnum = require('../enums/segment');\nconst { getKeyValue } = require('../utils/ObjectUtil');\nconst { operandCustomVariablesParser, operandUserParser } = require('../utils/SegmentUtil');\nconst logging = require('../services/logging');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst FileNameEnum = require('../enums/FileNameEnum');\n\nconst { AND, OR, NOT } = SegmentEnum.SegmentOperatorTypes;\nconst { CUSTOM_VARIABLE, USER } = SegmentEnum.SegmentOperandTypes;\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst file = FileNameEnum.SegmentEvaluator;\n\nconst logger = logging.getLogger();\n\nmodule.exports = SegmentEvaluator;\n/**\n * This method: A parser which recursively evaluates the expression tree represented by dsl\n *\n * @param {Object} dsl The segments defined in the campaing\n * @param {Object} customVariables Key/value pair of custom_attributs properties\n *\n * @return {Boolean} true if user is to be made part of campaign, else false\n */\nfunction evaluator(dsl, customVariables) {\n let { key, value } = getKeyValue(dsl);\n let operator = key;\n let subDsl = value;\n if (operator === NOT) {\n return !evaluator(subDsl, customVariables);\n } else if (operator === AND) {\n let list = [];\n for (let i = 0; i < subDsl.length; i++) {\n list.push(evaluator(subDsl[i], customVariables));\n }\n\n return list.every(val => val);\n } else if (operator === OR) {\n let list = [];\n for (let i = 0; i < subDsl.length; i++) {\n list.push(evaluator(subDsl[i], customVariables));\n }\n\n return list.some(val => val);\n } else if (operator === CUSTOM_VARIABLE) {\n return operandCustomVariablesParser(subDsl, customVariables);\n } else if (operator === USER) {\n return operandUserParser(subDsl, customVariables);\n }\n}\n\nfunction SegmentEvaluator(dsl, customVariables = {}, campaignKey, userId, variation = '', disableLogs = false) {\n try {\n if (DataTypeUtil.isObject(dsl) && !Object.keys(dsl).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n disableLogs\n );\n return true;\n }\n if (DataTypeUtil.isObject(dsl) && Object.keys(dsl).length) {\n return evaluator(dsl, customVariables);\n }\n return true;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_ERROR, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(customVariables),\n file,\n err,\n variation\n }),\n disableLogs\n );\n return false;\n }\n}\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ValidateUtil = require('../utils/ValidateUtil');\n\nconst Bucketer = require('./BucketingService');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.VariationDecider;\n\nconst VariationDecider = {\n /**\n * Returns the Variation Allotted to User\n *\n * @param {String} userId the unique ID assigned to User\n * @param {Object} campaign\n *\n * @return {Object} Variation object allotted to User\n */\n getVariationAllotted: (userId, campaign, accountId) => {\n let response = {\n variation: null,\n variationId: null,\n variationName: null\n };\n\n if (!ValidateUtil.isValidValue(userId)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_ID_INVALID, {\n file,\n userId\n })\n );\n\n return response;\n }\n\n if (Bucketer.isUserPartOfCampaign(userId, campaign)) {\n let variation = VariationDecider.getVariationOfCampaignForUser(userId, campaign, accountId) || {};\n response.variation = variation;\n response.variationId = variation.id;\n response.variationName = variation.name;\n } else {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_NOT_PART_OF_CAMPAIGN, {\n file,\n userId,\n campaignKey: campaign.key\n })\n );\n }\n\n return response;\n },\n\n /**\n * Assigns random variation ID to a particular user depending on the PercentTraffic.\n * Makes user a part of campaign if user's included in Traffic.\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {Object} campaign the Campaign of which user is to be made a part of\n *\n * @return {Object|null} Variation allotted to User\n */\n getVariationOfCampaignForUser: (userId, campaign, accountId) => {\n if (!campaign) {\n return null;\n }\n\n let variation = Bucketer.bucketUserToVariation(userId, campaign, accountId);\n\n if (variation && variation.name) {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, {\n file,\n userId,\n campaignKey: campaign.key,\n status: `got Varation:${variation.name}`\n })\n );\n return {\n variation,\n name: variation.name,\n id: variation.id\n };\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, {\n file,\n userId,\n campaignKey: campaign.key,\n status: 'got no variation'\n })\n );\n\n return null;\n }\n};\n\nmodule.exports = VariationDecider;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst AnsiColorEnum = {\n BOLD: '\\x1b[1m',\n CYAN: '\\x1b[36m',\n GREEN: '\\x1b[32m',\n LIGHTBLUE: '\\x1b[94m',\n RED: '\\x1b[31m',\n RESET: '\\x1b[0m',\n WHITE: '\\x1b[30m',\n YELLOW: '\\x1b[33m'\n};\n\nmodule.exports = AnsiColorEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ApiEnum = {\n LAUNCH: 'launch',\n ACTIVATE: 'activate',\n GET_VARIATION_NAME: 'getVariation',\n TRACK: 'track',\n IS_FEATURE_ENABLED: 'isFeatureEnabled',\n GET_FEATURE_VARIABLE_VALUE: 'getFeatureVariableValue',\n PUSH: 'push'\n};\n\nmodule.exports = ApiEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignTypeEnum = {\n FEATURE_TEST: 'FEATURE_TEST',\n FEATURE_ROLLOUT: 'FEATURE_ROLLOUT',\n AB: 'VISUAL_AB'\n};\n\nmodule.exports = CampaignTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeEnum = {\n NUMBER: 'number',\n STRING: 'string',\n // FUNCTION: 'function',\n BOOLEAN: 'boolean',\n OBJECT: 'object'\n};\n\nmodule.exports = DataTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst EventEnum = {\n VWO_VARIATION_SHOWN: 'vwo_variationShown',\n VWO_SYNC_VISITOR_PROP: 'vwo_syncVisitorProp'\n};\n\nmodule.exports = EventEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst FeatureVariableTypeEnum = {\n BOOLEAN: 'boolean',\n DOUBLE: 'double',\n INTEGER: 'integer',\n STRING: 'string',\n JSON: 'json'\n};\n\nmodule.exports = FeatureVariableTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst LIB_PATH = 'lib';\nconst CORE_PATH = 'lib/core';\nconst UTIL_PATH = 'lib/util';\nconst SERVICES_PATH = 'lib/services';\n\nmodule.exports = {\n INDEX: `${LIB_PATH}/index`,\n\n VWO: `${LIB_PATH}/VWO`,\n\n API: `${LIB_PATH}/api/index`,\n\n Activate: `${LIB_PATH}/api/activate`,\n GetVariation: `${LIB_PATH}/api/getVariation`,\n Track: `${LIB_PATH}/api/track`,\n IsFeatureEnabled: `${LIB_PATH}/api/isFeatureEnabled`,\n GetFeatureVariableValue: `${LIB_PATH}/api/getFeatureVariableValue`,\n Push: `${LIB_PATH}/api/push`,\n\n SegmentEvaluator: `${CORE_PATH}/SegmentEvaluator`,\n BucketingService: `${CORE_PATH}/BucketingService`,\n VariationDecider: `${CORE_PATH}/VariationDecider`,\n\n ConsoleLogManager: `${SERVICES_PATH}/ConsoleLogManager`,\n EventQueue: `${SERVICES_PATH}/EventQueue`,\n LoggingManager: `${SERVICES_PATH}/LoggingManager`,\n SettingsFileManager: `${SERVICES_PATH}/SettingsFileManager`,\n BatchEventsQueue: `${SERVICES_PATH}/BatchEventsQueue`,\n\n CampaignUtil: `${UTIL_PATH}/CampaignUtil`,\n DataTypeUtil: `${UTIL_PATH}/DataTypeUtil`,\n EventDispatcher: `${UTIL_PATH}/EventDispatcher`,\n EventDispatcherUtil: `${UTIL_PATH}/EventDispatcherUtil`,\n FeatureUtil: `${UTIL_PATH}/FeatureUtil`,\n Functionutil: `${UTIL_PATH}/Functionutil`,\n ImpressionUtil: `${UTIL_PATH}/ImpressionUtil`,\n UuidUtil: `${UTIL_PATH}/UuidUtil`,\n ValidateUtil: `${UTIL_PATH}/ValidateUtil`,\n DecisionUtil: `${UTIL_PATH}/DecisionUtils`,\n HttpHandlerUtil: `${UTIL_PATH}/HttpHandlerUtil`,\n HttpImageUtil: `${UTIL_PATH}/HttpImageUtil`,\n HttpXMLUtil: `${UTIL_PATH}/HttpXMLUtil`,\n\n UsageStatsUtil: `${SERVICES_PATH}/UsageStats`\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst GoalTypeEnum = {\n REVENUE: 'REVENUE_TRACKING',\n CUSTOM: 'CUSTOM_GOAL',\n ALL: 'ALL'\n};\n\nmodule.exports = GoalTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst HeadersEnum = {\n USER_AGENT: 'X-Device-User-Agent',\n IP: 'VWO-X-Forwarded-For'\n};\n\nmodule.exports = HeadersEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst HooksEnum = {\n DECISION_TYPES: {\n CAMPAIGN_DECISION: 'CAMPAIGN_DECISION'\n }\n};\n\nmodule.exports = HooksEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst AnsiColorEnum = require('./AnsiColorEnum');\n\nconst LogNumberLevel = {\n _0: 'NOTSET',\n _1: 'DEBUG',\n _2: 'INFO',\n _3: 'WARN',\n _4: 'ERROR'\n};\n\nconst LogLevelEnum = {\n NOTSET: 0,\n DEBUG: 1,\n INFO: 2,\n WARN: 3,\n ERROR: 4\n};\n\nconst LogLevelColorInfoEnum = {\n [LogLevelEnum.NOTSET]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.WHITE}[NOTSET]:${AnsiColorEnum.RESET}`,\n [LogLevelEnum.DEBUG]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.LIGHTBLUE}[DEBUG]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.INFO]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.CYAN}[INFO]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.WARN]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.YELLOW}[WARN]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.ERROR]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.RED}[ERROR]: ${AnsiColorEnum.RESET}`\n};\n\nconst LogLevelInfoEnum = {\n [LogLevelEnum.NOTSET]: `[NOTSET]:`,\n [LogLevelEnum.DEBUG]: `[DEBUG]: `,\n [LogLevelEnum.INFO]: `[INFO]: `,\n [LogLevelEnum.WARN]: `[WARN]: `,\n [LogLevelEnum.ERROR]: `[ERROR]: `\n};\n\nmodule.exports = {\n LogLevelEnum,\n LogNumberLevel,\n LogLevelInfoEnum,\n LogLevelColorInfoEnum\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n PASSED: 'passed',\n FAILED: 'failed'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst UrlEnum = {\n BASE_URL: 'dev.visualwebsiteoptimizer.com',\n SETTINGS_URL: '/server-side/settings',\n WEBHOOK_SETTINGS_URL: '/server-side/pull',\n TRACK_USER: '/server-side/track-user',\n TRACK_GOAL: '/server-side/track-goal',\n PUSH: '/server-side/push',\n BATCH_EVENTS: '/server-side/batch-events',\n EVENTS: '/events/t'\n};\n\nmodule.exports = UrlEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n CUSTOM_VARIABLE: 'custom_variable',\n USER: 'user'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n LOWER: /^lower/,\n LOWER_MATCH: /^lower\\((.*)\\)/,\n WILDCARD: /^wildcard/,\n WILDCARD_MATCH: /^wildcard\\((.*)\\)/,\n REGEX: /^regex/,\n REGEX_MATCH: /^regex\\((.*)\\)/,\n STARTING_STAR: /^\\*/,\n ENDING_STAR: /\\*$/,\n GREATER_THAN_MATCH: /^gt\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n GREATER_THAN_EQUAL_TO_MATCH: /^gte\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n LESS_THAN_MATCH: /^lt\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n LESS_THAN_EQUAL_TO_MATCH: /^lte\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n LOWER_VALUE: 1,\n STARTING_ENDING_STAR_VALUE: 2,\n STARTING_STAR_VALUE: 3,\n ENDING_STAR_VALUE: 4,\n REGEX_VALUE: 5,\n EQUAL_VALUE: 6,\n GREATER_THAN_VALUE: 7,\n GREATER_THAN_EQUAL_TO_VALUE: 8,\n LESS_THAN_VALUE: 9,\n LESS_THAN_EQUAL_TO_VALUE: 10\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n AND: 'and',\n NOT: 'not',\n OR: 'or'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst SegmentOperandTypes = require('./SegmentOperandTypesEnum');\nconst SegmentOperatorTypes = require('./SegmentOperatorTypesEnum');\nconst SegmentOperandValueTypeRegexes = require('./SegmentOperandValueTypeRegexesEnum');\nconst SegmentOperandValues = require('./SegmentOperandValuesEnum');\n\nconst SegmentEnum = {\n SegmentOperandTypes,\n SegmentOperatorTypes,\n SegmentOperandValueTypeRegexes,\n SegmentOperandValues\n};\n\nmodule.exports = SegmentEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VWO = require('./VWO');\n\nconst DataTypeUtil = require('./utils/DataTypeUtil');\nconst FunctionUtil = require('./utils/FunctionUtil');\nconst { objectValues } = require('./utils/ObjectUtil');\nconst SettingsFileUtil = require('./utils/SettingsFileUtil');\nconst GoalTypeEnum = require('./enums/GoalTypeEnum');\nconst { MAX_EVENTS_PER_REQUEST } = require('./constants');\n\nconst logging = require('./services/logging');\nconst ApiEnum = require('./enums/ApiEnum');\nconst FileNameEnum = require('./enums/FileNameEnum');\nconst file = FileNameEnum.INDEX;\nconst { setLogHandler, setLogLevel, LogLevelEnum, LogNumberLevel, LogMessageEnum, LogMessageUtil } = logging;\n\nconst logger = logging.getLogger();\n\n// By default, all ERRORS should be logged\nlogging.setLogLevel(LogLevelEnum.ERROR);\n\nfunction logError(parameter = '', type = '') {\n const log = LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CONFIG_PARAMETER_INVALID, {\n file: file,\n parameter,\n type,\n api: ApiEnum.LAUNCH\n });\n\n throw new Error(logger.log(LogLevelEnum.ERROR, log));\n}\n\nfunction logInfo(parameter = '', type = '') {\n const log = LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_PARAMETER_USED, {\n file: file,\n parameter,\n type\n });\n\n console.info(`VWO-SDK - [INFO]: ${FunctionUtil.getCurrentTime()} ${log}`);\n}\n\nmodule.exports = {\n logging,\n setLogger: setLogHandler,\n setLogLevel,\n getSettingsFile: SettingsFileUtil.get,\n GoalTypeEnum,\n LogLevelEnum,\n /**\n * Initializes the SDK and parses the settingsfile\n *\n * @param {Object} config configuration for the SDK\n */\n launch: function(sdkConfig) {\n let config = {};\n try {\n // validating config schema\n FunctionUtil.cloneObject(sdkConfig);\n if (\n !DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser) &&\n !DataTypeUtil.isBoolean(sdkConfig.shouldTrackReturningUser)\n ) {\n logError('shouldTrackReturningUser', 'boolean');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser)) {\n logInfo('shouldTrackReturningUser', 'boolean');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode) &&\n !DataTypeUtil.isBoolean(sdkConfig.isDevelopmentMode)\n ) {\n logError('isDevelopmentMode', 'boolean');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode)) {\n logInfo('isDevelopmentMode', 'boolean');\n }\n\n if (sdkConfig.goalTypeToTrack && !objectValues(GoalTypeEnum).includes(sdkConfig.goalTypeToTrack)) {\n logError('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)');\n } else if (sdkConfig.goalTypeToTrack) {\n logInfo('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)');\n }\n\n if (\n sdkConfig.logging &&\n sdkConfig.logging.level &&\n !objectValues(LogLevelEnum).includes(sdkConfig.logging.level)\n ) {\n logError('logLevel', 'number(1,2,3,4)');\n } else if (sdkConfig.logging && sdkConfig.logging.level) {\n logInfo('logLevel', 'number(1,2,3,4)');\n }\n\n if (sdkConfig.pollingInterval && !DataTypeUtil.isNumber(sdkConfig.pollingInterval)) {\n logError('pollingInterval', 'number(in miliiseconds)');\n } else if (sdkConfig.pollingInterval) {\n logInfo('pollingInterval', 'number(in miliiseconds)');\n }\n\n if (sdkConfig.pollingInterval && DataTypeUtil.isUndefined(sdkConfig.sdkKey)) {\n logError('sdkKey(required for polling)', 'string');\n }\n\n if (sdkConfig.pollingInterval && !DataTypeUtil.isString(sdkConfig.sdkKey)) {\n logError('sdkKey', 'string');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents) && !DataTypeUtil.isObject(sdkConfig.batchEvents)) {\n logError('batchEvents', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents)) {\n logInfo('batchEvents', 'object');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor) && !DataTypeUtil.isObject(sdkConfig.returnPromiseFor)) {\n logError('returnPromiseFor', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor)) {\n logInfo('returnPromiseFor', 'object');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig) &&\n !DataTypeUtil.isObject(sdkConfig.asyncStorageConfig)\n ) {\n logError('asyncStorageConfig', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig)) {\n logInfo('asyncStorageConfig', 'object');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.integrations) && !DataTypeUtil.isObject(sdkConfig.integrations)) {\n logError('integrations', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.integrations)) {\n logInfo('integrations', 'object');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.userStorageService) &&\n !DataTypeUtil.isObject(sdkConfig.userStorageService)\n ) {\n logError('userStorageService', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.userStorageService)) {\n logInfo('userStorageService', 'object');\n }\n\n // For JavaScript SDK, batching is not required and is not available\n if (DataTypeUtil.isObject(sdkConfig.batchEvents) && typeof process.env === 'undefined') {\n sdkConfig.batchEvents = null;\n }\n\n // For Node.js SDK\n if (typeof process.env !== 'undefined') {\n if (\n DataTypeUtil.isObject(sdkConfig.batchEvents) &&\n (!(\n (DataTypeUtil.isNumber(sdkConfig.batchEvents.eventsPerRequest) &&\n sdkConfig.batchEvents.eventsPerRequest > 0 &&\n sdkConfig.batchEvents.eventsPerRequest <= MAX_EVENTS_PER_REQUEST) ||\n (DataTypeUtil.isNumber(sdkConfig.batchEvents.requestTimeInterval) &&\n sdkConfig.batchEvents.requestTimeInterval >= 1)\n ) ||\n (sdkConfig.batchEvents.flushCallback && !DataTypeUtil.isFunction(sdkConfig.batchEvents.flushCallback)))\n ) {\n logError('batchEvents', 'object');\n }\n }\n\n config = sdkConfig;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CONFIG_CORRUPTED, {\n file: file,\n api: ApiEnum.LAUNCH\n })\n );\n\n config = {};\n }\n\n // If DEV mode, set colorful logs to true\n if (config.isDevelopmentMode) {\n logging.setLogColorMode(true);\n }\n\n // If logging is enabled, use the logger and logLevel defined by the client\n if (config.logging && DataTypeUtil.isObject(config.logging)) {\n if (config.logging.haveColoredLogs !== undefined) {\n logging.setLogColorMode(config.logging.haveColoredLogs);\n }\n\n if (\n config.logging.logger &&\n DataTypeUtil.isObject(config.logging.logger) &&\n DataTypeUtil.isFunction(config.logging.logger.log)\n ) {\n logging.setLogHandler(config.logging.logger);\n logging.setLogLevel(logging.LogLevelEnum.NOTSET);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_CUSTOM_LOGGER_USED, {\n file: file\n })\n );\n } else if (config.logging.logger) {\n logError('logging.logger', 'object');\n }\n\n if (config.logging.level !== undefined) {\n logging.setLogLevel(config.logging.level);\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_LOG_LEVEL_SET, {\n file: file,\n level: LogNumberLevel['_' + config.logging.level]\n })\n );\n }\n }\n\n // DEBUG log for knowing whether it's DEV mode\n if (config.isDevelopmentMode) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, {\n file: file\n })\n );\n }\n\n // Set logger on config Obkect, to be required later\n config.logger = (config.logging && config.logging.logger) || logger;\n\n // Create an instance of VWO class which exposes API methods\n return new VWO(config);\n }\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet { validate, number, string, boolean, array, object, optional, union, type, record } = require('superstruct');\n\nconst campaignGoalSchema = type({\n id: union([number(), string()]),\n identifier: string(),\n type: string(),\n revenueProp: optional(string()),\n mca: optional(union([number(), string()]))\n});\n\nconst variableObjectSchema = type({\n id: union([number(), string()]),\n type: string(),\n key: string(),\n value: union([number(), string(), boolean()])\n});\n\nconst campaignVariationSchema = type({\n id: union([number(), string()]),\n name: string(),\n weight: union([number(), string()]),\n changes: optional(object()),\n segments: optional(object()),\n variables: optional(union([object(), array(variableObjectSchema)])),\n isFeatureEnabled: optional(boolean()),\n startVariationAllocation: optional(number()),\n endVariationAllocation: optional(number())\n});\n\nconst campaignObjectSchema = type({\n id: union([number(), string()]),\n type: string(),\n key: string(),\n status: string(),\n name: optional(string()),\n isBucketingSeedEnabled: optional(boolean()),\n percentTraffic: number(),\n goals: union([object(), array(campaignGoalSchema)]),\n variations: union([object(), array(campaignVariationSchema)]),\n variables: optional(union([object(), array(variableObjectSchema)])),\n segments: object(),\n isForcedVariationEnabled: optional(boolean()),\n isUserListEnabled: optional(boolean()),\n isMAB: optional(boolean())\n});\n\nconst groupSchema = type({\n et: optional(string()),\n p: optional(array(number())),\n wt: optional(record(string(), number())),\n groupName: string(),\n campaigns: array(number())\n});\n\nconst settingsFileSchema = type({\n sdkKey: optional(string()),\n version: union([number(), string()]),\n accountId: union([number(), string()]),\n campaigns: array(campaignObjectSchema),\n campaignGroups: optional(record(string(), number())),\n isEventArchEnabled: optional(boolean()),\n collectionPrefix: optional(string()),\n groups: optional(union([object(), record(string(), groupSchema)]))\n});\n\nconst validateSettingsFile = function(settings) {\n const [error] = validate(settings, settingsFileSchema);\n return !error;\n};\n\nmodule.exports = validateSettingsFile;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst EventDispatcher = require('../utils/EventDispatcherUtil');\n\nconst logging = require('./logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst HeadersEnum = require('../enums/HeadersEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.EventQueue;\n\nclass EventQueue {\n constructor() {\n this.running = false;\n this.queue = [];\n }\n\n process(config, properties, vwoInstance, { payload, responseCallback } = {}) {\n let customHeaders = {};\n\n if (properties && properties.visitor_ua) {\n customHeaders[HeadersEnum.USER_AGENT] = encodeURIComponent(properties.visitor_ua);\n properties.visitor_ua = customHeaders[HeadersEnum.USER_AGENT];\n }\n if (properties && properties.visitor_ip) {\n customHeaders[HeadersEnum.IP] = encodeURIComponent(properties.visitor_ip);\n properties.visitor_ip = customHeaders[HeadersEnum.IP];\n }\n\n if (config && config.isDevelopmentMode) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, {\n file\n })\n );\n return;\n }\n\n this.enqueue(properties, vwoInstance, { payload, responseCallback }, customHeaders);\n }\n\n enqueue(properties, vwoInstance, { payload, responseCallback }, customHeaders = {}) {\n this.queue.push({\n eventName: properties.eventName,\n properties: properties,\n callback: () => {\n if (payload) {\n EventDispatcher.dispatchPostCall(properties, payload, { responseCallback }, customHeaders);\n } else {\n EventDispatcher.dispatchGetCall(properties, { responseCallback }, customHeaders);\n }\n }\n });\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.EVENT_QUEUE, {\n file,\n queueType: 'normal',\n event: 'VWO_MASKED_PAYLOAD'\n })\n );\n\n vwoInstance.eventQueue.executeNext(properties);\n\n if (!this.running) {\n // if nothing is running, then start the engines!\n this.executeNext(properties);\n }\n\n return this;\n }\n\n executeNext(properties) {\n this.running = false;\n\n // get the first element off the queue\n if (this.queue && this.queue.length) {\n let event = this.queue.shift();\n\n if (event) {\n this.running = true;\n if (event.callback && DataTypeUtil.isFunction(event.callback)) {\n event.callback(properties);\n }\n }\n }\n }\n}\n\nmodule.exports = EventQueue;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\n/**\n * Hooks Manager is responsible for triggering callbacks useful to the end-user based on certain lifecycle events.\n * Possible use with integrations when the user intends to send an event when a visitor is part of the experiment.\n */\nconst HooksManager = {\n /**\n * Initializes with configuration from VWO Object.\n * @param {Object} config\n */\n init(config = {}) {\n this.callback = config.integrations && config.integrations.callback;\n },\n /**\n * Executes the callback\n * @param {Object} properties Properties from the callback\n */\n execute(properties) {\n if (DataTypeUtil.isFunction(this.callback)) {\n this.callback(properties);\n }\n }\n};\n\nmodule.exports = HooksManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst FunctionUtil = require('../utils/FunctionUtil');\nconst SettingsFileUtil = require('../utils/SettingsFileUtil');\n\nconst logging = require('./logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst validateSettingsFile = require('../schemas/SettingsFileSchema');\nconst { isObject } = require('../utils/DataTypeUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.SettingsFileManager;\n\nclass SettingsFileManager {\n // PRIVATE METHODS\n\n constructor(config) {\n if (config) {\n if (\n (config.settingsFile && isObject(config.settingsFile.campaigns)) ||\n (config.settingsFile && !config.settingsFile.campaigns)\n ) {\n config.settingsFile.campaigns = [];\n }\n\n this._configObj = config;\n this._clonedSettingsFile = config.settingsFile ? FunctionUtil.cloneObject(config.settingsFile) : null;\n } else {\n this._configObj = null;\n this._clonedSettingsFile = null;\n }\n }\n\n _setVariationBucketing(campaign) {\n CampaignUtil.setVariationAllocation(campaign);\n }\n\n // PUBLIC METHODS\n\n isSettingsFileValid() {\n if (!this._configObj || !this._clonedSettingsFile) {\n return false;\n }\n let isValidSettingsFile = validateSettingsFile(this._clonedSettingsFile);\n\n if (!isValidSettingsFile) {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_CORRUPTED, {\n file\n })\n );\n\n return false;\n }\n\n return true;\n }\n\n checkAndPoll() {\n if (!this._configObj.pollingInterval || !this._configObj.sdkKey) {\n return;\n }\n\n let lastSettingsFile = JSON.stringify(this._clonedSettingsFile);\n setInterval(() => {\n SettingsFileUtil.get(this._clonedSettingsFile.accountId, this._configObj.sdkKey)\n .then(latestSettingsFile => {\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SUCCESS, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n const stringifiedLatestSettingsFile = JSON.stringify(latestSettingsFile);\n\n if (stringifiedLatestSettingsFile !== lastSettingsFile) {\n lastSettingsFile = stringifiedLatestSettingsFile;\n\n this.updateSettingsFile(latestSettingsFile);\n\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SETTINGS_FILE_UPDATED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n } else {\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SETTINGS_FILE_NOT_UPDATED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n }\n })\n .catch(_e => {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.POLLING_FAILED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n });\n }, this._configObj.pollingInterval);\n\n this._configObj.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.POLLING_SETTINGS_FILE_REGISTERED, {\n file,\n pollingInterval: this._configObj.pollingInterval\n })\n );\n }\n processSettingsFile() {\n let settingsFile = this._clonedSettingsFile;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n let campaign = settingsFile.campaigns[i];\n\n this._setVariationBucketing(campaign);\n }\n\n this._configObj.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SETTINGS_FILE_PROCESSED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n\n return settingsFile;\n }\n\n /**\n * Fetch latest settings-file and update so that vwoClientInstance could use latest settings\n * Helpful especially when using webhooks\n *\n * @param {Number} accountId\n * @param {String} sdkKey\n *\n * @return {Promise}\n */\n getAndUpdateSettingsFile(accountId = this._clonedSettingsFile.accountId, sdkKey = this._clonedSettingsFile.sdkKey) {\n return new Promise((resolve, _reject) => {\n SettingsFileUtil.get(accountId, sdkKey, null, { isViaWebhook: true })\n .then(settings => {\n this.updateSettingsFile(settings);\n resolve(settings);\n })\n .catch(_err => {});\n });\n }\n\n /**\n * Update the settings-file on the instance so that latest settings could be used from next hit onwards\n * @param {Object} settings\n */\n updateSettingsFile(settings) {\n this._clonedSettingsFile = FunctionUtil.cloneObject(settings);\n this.processSettingsFile();\n }\n\n getConfig() {\n return this._configObj;\n }\n\n getSettingsFile(api) {\n if (!this._clonedSettingsFile) {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_HAS_CORRUPTED_SETTINGS_FILE, {\n file,\n api\n })\n );\n }\n return this._clonedSettingsFile;\n }\n}\nmodule.exports = SettingsFileManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst UrlEnum = require('../enums/UrlEnum');\nconst { isString } = require('../utils/DataTypeUtil');\n\nconst UrlService = {\n init({ collectionPrefix } = {}) {\n if (collectionPrefix && isString(collectionPrefix)) {\n UrlService.collectionPrefix = collectionPrefix;\n }\n\n return UrlService;\n },\n\n getBaseUrl() {\n const baseUrl = UrlEnum.BASE_URL;\n\n if (UrlService.collectionPrefix) {\n return `${baseUrl}/${UrlService.collectionPrefix}`;\n }\n\n return baseUrl;\n }\n};\n\nmodule.exports = UrlService;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { LogManager } = require('./logging');\n\nclass UsageStats {\n constructor() {\n this.data = {};\n }\n\n /**\n * Collect the usage stats from the params passed at the time of instantiating VWO and send them to VWO Server\n * @param {Object} config config passed at the time of instantiation.\n */\n collectUsageStats(config) {\n this.data['eb'] = Number(!!config.batchEvents);\n this.data['ig'] = Number(!!config.integrations);\n this.data['ss'] = Number(!!config.userStorageService);\n this.data['cl'] = Number(!(config.logger instanceof LogManager));\n this.data['ll'] = Number(config.logging && config.logging.level);\n this.data['tr'] = Number(config.shouldTrackReturningUser);\n this.data['gt'] = Number(!!config.goalTypeToTrack);\n this.data['pi'] = Number(!!config.pollingInterval);\n\n Object.keys(this.data).forEach(function(key) {\n if (!this.data[key]) {\n delete this.data[key];\n }\n }, this);\n }\n\n /**\n * Get the collected usage stats.\n * @returns collected usage stats data\n */\n getUsageStats() {\n if (Object.keys(this.data).length > 0) {\n this.data['_l'] = 1;\n }\n return this.data;\n }\n}\n\nmodule.exports = UsageStats;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { getCurrentTime } = require('../../utils/FunctionUtil');\nconst { LogLevelEnum, LogLevelInfoEnum, LogLevelColorInfoEnum } = require('../../enums/LogLevelEnum');\n\nclass ConsoleLogManager {\n constructor() {\n this.logLevel = LogLevelEnum.NOTSET;\n this.prefix = `VWO-SDK`;\n this.isColoredLogEnabled = false;\n }\n\n log(level, message) {\n if (!this.shouldLog(level)) {\n return;\n }\n\n let logMessage;\n if (this.isColoredLogEnabled) {\n logMessage = `${this.prefix} - ${LogLevelColorInfoEnum[level]} ${getCurrentTime()} ${message}`;\n } else {\n logMessage = `${this.prefix} - ${LogLevelInfoEnum[level]} ${getCurrentTime()} ${message}`;\n }\n\n this.consoleLog(level, [logMessage]);\n }\n\n shouldLog(targetLogLevel) {\n return targetLogLevel >= this.logLevel;\n }\n\n setLogLevel(level) {\n if (level === undefined) {\n this.logLevel = LogLevelEnum.ERROR;\n } else {\n this.logLevel = level;\n }\n }\n\n consoleLog(level, logArguments) {\n switch (level) {\n case LogLevelEnum.INFO:\n console.info.apply(console, logArguments);\n break;\n case LogLevelEnum.WARN:\n console.warn.apply(console, logArguments);\n break;\n case LogLevelEnum.ERROR:\n console.error.apply(console, logArguments);\n break;\n default:\n console.log.apply(console, logArguments);\n break;\n }\n }\n}\n\nmodule.exports = ConsoleLogManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Took reference from: \"loglevel\" - https://github.com/pimterry/loglevel\n *\n * Name: loglevel\n * Published Name: loglevel\n * URL: https://github.com/pimterry/loglevel\n * Description: Minimal lightweight logging for JavaScript, adding reliable log level methods to wrap any available console.log methods\n * Author: Tim Perry (https://github.com/pimterry)\n * LICENSE: MIT License\n * Local Modifications: This library is not used as a dependency. Source code was referenced and is modified as per requirements.\n *\n */\n\n// TODO: change path\nconst LogMessageEnum = {\n DEBUG_MESSAGES: require('vwo-sdk-log-messages/src/debug-messages.json'),\n INFO_MESSAGES: require('vwo-sdk-log-messages/src/info-messages.json'),\n WARNING_MESSAGES: require('vwo-sdk-log-messages/src/warning-messages.json'),\n ERROR_MESSAGES: require('vwo-sdk-log-messages/src/error-messages.json')\n};\n\nconst { LogLevelEnum, LogNumberLevel } = require('../../enums/LogLevelEnum');\nconst LogMessageUtil = require('../../utils/LogMessageUtil');\n\nconst ConsoleLogManager = require('./ConsoleLogManager');\n\nlet globalLogLevel = LogLevelEnum.NOTSET;\nlet isColoredLogEnabled = false;\nlet globalLogHandler = new ConsoleLogManager();\n\nclass LogManager {\n constructor(name) {\n this.name = name;\n this.isColoredLogEnabled = isColoredLogEnabled;\n }\n\n _customLog(level, message) {\n if (level < globalLogLevel) {\n return;\n }\n\n globalLogHandler.log(level, message);\n }\n\n log(level, message, disableLogs = false) {\n if (disableLogs) {\n return;\n }\n try {\n this._customLog(level, message);\n } catch (err) {\n console.error('VWO: Could not log.', err);\n }\n }\n\n info(message) {\n this._customLog(LogLevelEnum.INFO, message);\n }\n debug(message) {\n this._customLog(LogLevelEnum.DEBUG, message);\n }\n warn(message) {\n this._customLog(LogLevelEnum.WARN, message);\n }\n error(message) {\n this._customLog(LogLevelEnum.ERROR, message);\n }\n}\n\nfunction getLogger(name) {\n return new LogManager(name);\n}\n\nfunction setLogHandler(logger) {\n globalLogHandler = logger;\n}\n\nfunction setLogLevel(level) {\n if (level === undefined) {\n globalLogLevel = LogLevelEnum.ERROR;\n } else {\n globalLogLevel = level;\n }\n}\n\nfunction getLogLevel() {\n return globalLogLevel;\n}\n\nfunction setLogColorMode(value) {\n isColoredLogEnabled = value;\n globalLogHandler.isColoredLogEnabled = isColoredLogEnabled;\n}\n\nfunction getLogColorMode() {\n return isColoredLogEnabled;\n}\n\nmodule.exports = {\n LogLevelEnum,\n LogNumberLevel,\n LogMessageUtil,\n LogMessageEnum,\n getLogger,\n setLogHandler,\n setLogLevel,\n getLogLevel,\n LogManager,\n setLogColorMode,\n getLogColorMode,\n globalLogHandler\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('./LoggingManager');\n\nmodule.exports = logging;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ValidateUtil = require('./ValidateUtil');\nconst VWOFeatureFlags = require('./VWOFeatureFlags');\nconst Constants = require('../constants');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\nconst CampaignTypeEnum = require('../enums/CampaignTypeEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nlet CampaignUtil = {\n /**\n * Returns the bucket size of variation.\n *\n * @param {Number/Float} - weight of variation\n *\n * @return {Number} bucket start range of Variation\n */\n _getVariationBucketRange: variationWeight => {\n if (!variationWeight || variationWeight === 0) {\n return 0;\n }\n\n const startRange = Math.ceil(variationWeight * 100);\n\n return Math.min(startRange, Constants.MAX_TRAFFIC_VALUE);\n },\n\n /**\n * Get the campaign on the basis of campaign id\n *\n * @param {Object} settingsFile\n * @param {Number} campaignId\n *\n * @returns {Object} campaign object\n */\n getCampaignBasedOnId: (settingsFile, campaignId) => {\n let campaign;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n if (parseInt(settingsFile.campaigns[i].id, 10) === parseInt(campaignId, 10)) {\n campaign = settingsFile.campaigns[i];\n\n break;\n }\n }\n\n return campaign;\n },\n /**\n * It extracts the weights from all the variations inside the campaign\n and scales them so that the total sum of eligible variations' weights become 100%\n\n 1. variations\n */\n scaleVariationWeights: variations => {\n const totalWeight = variations.reduce((acc, variation) => {\n return acc + variation.weight;\n }, 0);\n if (!totalWeight) {\n const weight = 100 / variations.length;\n variations.forEach(variation => (variation.weight = weight));\n } else {\n variations.forEach(variation => (variation.weight = (variation.weight / totalWeight) * 100));\n }\n },\n\n getCampaign: (settingsFile, campaignKey) => {\n let campaign;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n if (settingsFile.campaigns[i].key === campaignKey) {\n campaign = settingsFile.campaigns[i];\n\n break;\n }\n }\n\n return campaign;\n },\n /**\n * Gets campaigns for corresponding campaignKeys\n *\n * @param {Object} settingsFile\n * @param {Array} campaignKeys\n *\n * @return {Array} Campaigns\n */\n getCampaignsForKeys: (settingsFile, campaignKeys) => {\n const campaigns = [];\n campaignKeys.forEach(key => {\n let campaign = CampaignUtil.getCampaign(settingsFile, key);\n if (campaign) {\n campaigns.push(campaign);\n } else {\n campaigns.push({\n key\n });\n }\n });\n return campaigns;\n },\n /**\n * Gets campaigns which have the goalIdentifier present\n *\n * @param {settingsFile}\n * @param {String} goalIdentifier\n * @param {String} goalTypeToTrack type of goal to track\n *\n * @return {Array} Campaigns\n */\n getCampaignsForGoal: (settingsFile, goalIdentifier, goalTypeToTrack) => {\n let campaigns = [];\n settingsFile.campaigns.forEach(campaign => {\n const goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier);\n if (goal && (goalTypeToTrack === GoalTypeEnum.ALL || goal.type === goalTypeToTrack)) {\n campaigns.push(campaign);\n }\n });\n if (!campaigns.length) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CAMPAIGN_NOT_FOUND_FOR_GOAL, {\n file: FileNameEnum.CampaignUtil,\n goalIdentifier\n })\n );\n }\n return campaigns;\n },\n getCampaignStatus: (settingsFile, campaignKey) => {\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign || !campaign.status) {\n // log error\n return '';\n }\n\n return campaign.status.toLowerCase();\n },\n\n isCampaignRunning: (settingsFile, campaignKey) => {\n return CampaignUtil.getCampaignStatus(settingsFile, campaignKey) === 'running';\n },\n /**\n * Validates the campaign\n *\n * @param {Campaign} campaign the campaign to be validated\n *\n * @return {Boolean} true is campaign is valid\n */\n validateCampaign: campaign => {\n return ValidateUtil.isValidValue(campaign) && campaign.variations && Object.keys(campaign.variations).length > 0;\n },\n\n /**\n * Assigns the buckets to the Variations of the campaign\n * depending on the traffic allocation\n *\n * @param {Campaign} campaign whose Variations are to be allocated\n */\n setVariationAllocation: campaign => {\n const numberOfVariations = campaign.variations.length;\n let stepFactor = 0;\n\n for (let i = 0, currentAllocation = 0; i < numberOfVariations; i++) {\n let variation = campaign.variations[i];\n\n stepFactor = CampaignUtil.assignRangeValues(variation, currentAllocation);\n currentAllocation += stepFactor;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.VARIATION_RANGE_ALLOCATION, {\n file: FileNameEnum.CampaignUtil,\n campaignKey: campaign.key,\n variationName: variation.name,\n variationWeight: variation.weight,\n start: variation.startVariationAllocation,\n end: variation.endVariationAllocation\n })\n );\n }\n },\n\n /**\n * Assign range allocation to the campaigns in the list to decide which campaign to choose out of the Mutually Exclusive group\n *\n * @param {Array} campaigns\n */\n setCampaignAllocation: campaigns => {\n let stepFactor = 0;\n\n for (let i = 0, currentAllocation = 0; i < campaigns.length; i++) {\n let campaign = campaigns[i];\n\n stepFactor = CampaignUtil.assignRangeValues(campaign, currentAllocation);\n currentAllocation += stepFactor;\n }\n },\n\n assignRangeValues: (variation, currentAllocation) => {\n let stepFactor;\n stepFactor = CampaignUtil._getVariationBucketRange(variation.weight);\n\n if (stepFactor) {\n variation.startVariationAllocation = currentAllocation + 1;\n variation.endVariationAllocation = currentAllocation + stepFactor;\n } else {\n variation.startVariationAllocation = -1;\n variation.endVariationAllocation = -1;\n }\n return stepFactor;\n },\n getCampaignGoal: (settingsFile, campaignKey, goalIdentifier) => {\n let desiredCampaignGoal = null;\n\n if (!settingsFile || !campaignKey || !goalIdentifier) {\n return desiredCampaignGoal;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign) {\n return desiredCampaignGoal;\n }\n\n for (let i = 0; i < campaign.goals.length; i++) {\n let goal = campaign.goals[i];\n\n if (goal.identifier === goalIdentifier) {\n desiredCampaignGoal = goal;\n break;\n }\n }\n\n return desiredCampaignGoal;\n },\n getCampaignVariation: (settingsFile, campaignKey, variationName) => {\n let desiredVariation = null;\n\n if (!settingsFile || !campaignKey || !variationName) {\n return desiredVariation;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign) {\n return desiredVariation;\n }\n\n for (let i = 0; i < campaign.variations.length; i++) {\n let variation = campaign.variations[i];\n\n if (variation.name === variationName) {\n desiredVariation = variation;\n\n break;\n }\n }\n\n return desiredVariation;\n },\n getControlForCampaign: campaign => {\n let control = {};\n\n if (!campaign || !campaign.variations) {\n return control;\n }\n\n for (let i = 0; i < campaign.variations.length; i++) {\n if (campaign.variations[i].id === 1) {\n control = campaign.variations[i];\n break;\n }\n }\n\n return control;\n },\n isFeatureTestCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.FEATURE_TEST) {\n return true;\n }\n\n return false;\n },\n isFeatureRolloutCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT) {\n return true;\n }\n\n return false;\n },\n isAbCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.AB) {\n return true;\n }\n\n return false;\n },\n\n /**\n * Check if the campaign is a part of mutually exclusive group\n *\n * @param {Object} settingsFile\n * @param {Number} campaignId\n *\n * @returns {Number} group id of the campaign.\n */\n isPartOfGroup: (settingsFile, campaignId) => {\n if (settingsFile.campaignGroups && Object.prototype.hasOwnProperty.call(settingsFile.campaignGroups, campaignId)) {\n return {\n groupId: settingsFile.campaignGroups[campaignId],\n groupName: settingsFile.groups[settingsFile.campaignGroups[campaignId]].name\n };\n }\n return {};\n },\n\n /**\n * Get the list of campaigns on the basis of their id\n *\n * @param {Object} settingsFile\n * @param {Number} groupId\n *\n * @returns {Array} list of campaigns\n */\n getGroupCampaigns: (settingsFile, groupId) => {\n const campaigns = [];\n if (Object.prototype.hasOwnProperty.call(settingsFile.groups, groupId)) {\n settingsFile.groups[groupId].campaigns.forEach(campaignId => {\n let campaign = CampaignUtil.getCampaignBasedOnId(settingsFile, campaignId);\n if (campaign) {\n campaigns.push(campaign);\n }\n });\n }\n return campaigns;\n },\n\n /**\n * Decide the Seed for murmurhash to bucket user.\n * @param {string} userId\n * @param {object} campaign\n * @param {number} groupId\n *\n * @returns {string} Seed value\n */\n getBucketingSeed: (userId, campaign, groupId) => {\n if (groupId) {\n return `${groupId}_${userId}`;\n }\n\n const isNB = VWOFeatureFlags.getAll().isNB;\n const isNBv2 = VWOFeatureFlags.getAll().isNBv2;\n\n if (isNB || isNBv2 || (campaign && campaign.isBucketingSeedEnabled)) {\n return `${campaign.id}_${userId}`;\n } else {\n return userId;\n }\n }\n};\n\nmodule.exports = CampaignUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = {\n _toStringValue: function(val) {\n return Object.prototype.toString.call(val);\n },\n isNumber: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Number]';\n },\n isString: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object String]';\n },\n isObject: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Object]';\n },\n isFunction: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Function]';\n },\n isBoolean: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Boolean]';\n },\n isPromise: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Promise]';\n },\n isUndefined: function(val) {\n return (\n DataTypeUtil._toStringValue(val) === '[object Undefined]' ||\n // A third-party library sometimes overrides and returns [object Window]\n // therefore, adding a fallback as well\n typeof val === 'undefined'\n );\n },\n isNull: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Null]';\n },\n isArray: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Array]';\n }\n};\n\nmodule.exports = DataTypeUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VariationDecider = require('../core/VariationDecider');\nconst BucketingService = require('../core/BucketingService');\n\nconst CampaignUtil = require('./CampaignUtil');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst FunctionUtil = require('./FunctionUtil');\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst StatusEnum = require('../enums/StatusEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst SegmentEvaluator = require('../core/SegmentEvaluator');\nconst HooksManager = require('../services/HooksManager');\nconst HooksEnum = require('../enums/HooksEnum');\nconst UuidUtil = require('./UuidUtil');\nconst Constants = require('../constants');\nconst CampaignTypeEnum = require('../enums/CampaignTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\nconst RandomAlgo = 1;\n\nconst file = FileNameEnum.DecisionUtil;\n\nconst SegmentationTypeEnum = {\n WHITELISTING: 'whitelisting',\n PRE_SEGMENTATION: 'pre-segmentation'\n};\n\nlet DecisionUtil = {\n // PUBLIC METHODS\n /**\n * 1. Checks if there is a variation stored in userStorage, returns it\n * 2. If Whitelisting is applicable, evaluate it, if any eligible variation is found, store it in User Storage service and return, otherwise skip it.\n * 3. Check if the campaign is part of mutually exclusive group, if yes, get the winner campaign using campaign traffic normalization.\n * 4. If Pre-segmentation is applied and passes then go further otherwise return early and no further processing\n * 5. If no user storage value, no whitelisted variation and pre-segmentation evaluates to true, get variation using hashing logic if campaign traffic passes for that userId\n *\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} campaign\n * @param {Object} campaignKey\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} variationTargetingVariables\n *\n * @return {Object|null} - Object if a variation is assigned, otherwise null\n */\n getVariation: (\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables = {},\n userStorageData = {},\n metaData,\n isTrackUserAPI,\n isTrackGoalAPI,\n newGoalIdentifier,\n api = ''\n ) => {\n let vwoUserId = UuidUtil.generateFor(userId, settingsFile.accountId);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_UUID, {\n file: FileNameEnum.UuidUtil,\n userId,\n accountId: settingsFile.accountId,\n uuid: vwoUserId\n })\n );\n\n let decision = {\n // campaign info\n campaignId: campaign.id,\n campaignKey,\n campaignType: campaign.type,\n campaignName: campaign.name,\n // campaign segmentation conditions\n customVariables,\n // event name\n event: HooksEnum.DECISION_TYPES.CAMPAIGN_DECISION,\n // goal tracked in case of track API\n goalIdentifier: newGoalIdentifier,\n // campaign whitelisting flag\n isForcedVariationEnabled: campaign.isForcedVariationEnabled,\n sdkVersion: Constants.SDK_VERSION,\n // API name which triggered the event\n source: api,\n // Passed in API\n userId,\n // Campaign Whitelisting conditions\n variationTargetingVariables,\n // VWO generated UUID based on passed UserId and Account ID\n vwoUserId\n };\n\n // check if the campaign is a part of group\n const { groupId, groupName } = CampaignUtil.isPartOfGroup(settingsFile, campaign.id);\n\n if (groupId) {\n // append groupId and groupName, if campaign is a part of group\n decision['groupId'] = groupId;\n decision['groupName'] = groupName;\n }\n\n variationTargetingVariables = Object.assign({}, variationTargetingVariables, {\n _vwoUserId: campaign.isUserListEnabled ? vwoUserId : userId\n });\n\n // check if tbe campaign satisfies the whitelisting before checking for the group\n const whitelistedVariation = DecisionUtil._checkForWhitelisting(\n config,\n campaign,\n campaignKey,\n userId,\n variationTargetingVariables,\n decision\n );\n if (whitelistedVariation) {\n if (DataTypeUtil.isPromise(whitelistedVariation)) {\n return whitelistedVariation.then(data => {\n if (Object.keys(data).length > 0) {\n return data;\n }\n });\n } else {\n return whitelistedVariation;\n }\n }\n\n // check if the campaign is present in the storage before checking for the group\n\n let storedVariation;\n // check if asyncStorage, if yes then synchronously get the data and return promise\n if (config.asyncStorageConfig) {\n return new Promise(resolve => {\n return DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n ).then(function(response) {\n if (response && DataTypeUtil.isObject(response) && Object.keys(response).length > 0) {\n resolve(Object.assign({}, { isStoredVariation: true }, response));\n } else if (isTrackGoalAPI) {\n resolve(Object.assign({}));\n } else {\n const variationWithoutStorageLookup = DecisionUtil.evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n );\n resolve(variationWithoutStorageLookup);\n }\n });\n });\n } else {\n storedVariation = DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n );\n }\n\n if (storedVariation) {\n return storedVariation;\n }\n\n return DecisionUtil.evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n );\n },\n\n evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n ) {\n // check if the called campaign satisfies the pre-segmentation before further processing.\n if (\n !(\n DecisionUtil._checkForPreSegmentation(campaign, campaignKey, userId, customVariables, decision) &&\n BucketingService.isUserPartOfCampaign(userId, campaign, true)\n )\n ) {\n return {};\n }\n\n if (groupId) {\n // mutually exclusive group exists\n\n // get the list of the all the campaigns in a group\n const campaignList = CampaignUtil.getGroupCampaigns(settingsFile, groupId);\n\n if (campaignList.length === 0) {\n // return if no campaigns are active in a group\n return {};\n }\n\n // checking other campaigns for whitelisting and user storage.\n let isWhitelistedOrStoredVariation = DecisionUtil._checkForStorageAndWhitelisting(\n config,\n settingsFile,\n groupName,\n campaignList,\n campaign,\n userId,\n userStorageData,\n variationTargetingVariables,\n isTrackUserAPI\n );\n\n if (isWhitelistedOrStoredVariation) {\n // other campaigns satisfy the whitelisting or storage, therfore returning\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: campaignKey\n })\n );\n if (DataTypeUtil.isPromise(isWhitelistedOrStoredVariation)) {\n return new Promise(resolve => {\n resolve(Object.assign({}));\n });\n }\n return {};\n }\n\n // none of the group campaigns satisfy whitelisting or user storage\n // check each campaign for pre-segmentation and traffic allocation.\n let inEligibleCampaignKeys = '';\n let eligibleCampaignKeys = '';\n const { eligibleCampaigns, inEligibleCampaigns } = DecisionUtil.getEligbleCampaigns(\n campaignList,\n userId,\n customVariables\n );\n\n inEligibleCampaigns.forEach(campaign => {\n inEligibleCampaignKeys = inEligibleCampaignKeys + campaign.key + ',';\n });\n eligibleCampaigns.forEach(campaign => {\n eligibleCampaignKeys = eligibleCampaignKeys + campaign.key + ',';\n });\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS, {\n userId,\n groupName,\n file,\n eligibleCampaignKeys: eligibleCampaignKeys.slice(0, -1),\n inEligibleText:\n inEligibleCampaignKeys === '' ? 'no campaigns' : `campaigns: ${inEligibleCampaignKeys.slice(0, -1)}`\n })\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS, {\n userId,\n groupName,\n file,\n noOfEligibleCampaigns: eligibleCampaigns.length,\n noOfGroupCampaigns: inEligibleCampaigns.length + eligibleCampaigns.length\n })\n );\n\n // Whether normalised/random implementation has to be done or advanced\n let megAlgoNumber =\n typeof settingsFile.groups[groupId].et !== 'undefined' ? settingsFile.groups[groupId].et : RandomAlgo;\n\n if (eligibleCampaigns.length === 1) {\n // if the called campaign is the only winner.\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n eligibleCampaigns[0],\n eligibleCampaigns[0].key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n if (megAlgoNumber === RandomAlgo) {\n // normalize the eligible campaigns and decide winner\n return DecisionUtil._normalizeAndFindWinningCampaign(\n config,\n campaign,\n eligibleCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n return DecisionUtil._advancedAlgoFindWinningCampaign(\n config,\n settingsFile,\n campaign,\n eligibleCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n );\n }\n }\n } else {\n // campaign is not a part of mutually exclusive group\n // check if the user is eligible to become part of the campaign and assign variation.\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n campaign,\n campaignKey,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n }\n },\n // PRIVATE METHODS\n\n _evaluateWhitelisting: (campaign, campaignKey, userId, variationTargetingVariables, disableLogs = false) => {\n let whitelistedVariation;\n let status;\n const targetedVariations = [];\n campaign.variations.forEach(variation => {\n if (DataTypeUtil.isObject(variation.segments) && !Object.keys(variation.segments).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file,\n variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT ? '' : `, for ${variation.name}`\n }),\n disableLogs\n );\n return;\n }\n if (\n DataTypeUtil.isObject(variation.segments) &&\n SegmentEvaluator(variation.segments, variationTargetingVariables, campaignKey, userId, variation.name)\n ) {\n status = StatusEnum.PASSED;\n targetedVariations.push(FunctionUtil.cloneObject(variation));\n } else {\n status = StatusEnum.FAILED;\n }\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(variationTargetingVariables),\n file,\n status,\n segmentationType: SegmentationTypeEnum.WHITELISTING,\n variation:\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT && status === StatusEnum.PASSED\n ? 'and becomes part of the rollout'\n : `for ${variation.name}`\n }),\n disableLogs\n );\n });\n\n if (targetedVariations.length > 1) {\n CampaignUtil.scaleVariationWeights(targetedVariations);\n for (let i = 0, currentAllocation = 0, stepFactor = 0; i < targetedVariations.length; i++) {\n stepFactor = CampaignUtil.assignRangeValues(targetedVariations[i], currentAllocation);\n currentAllocation += stepFactor;\n }\n whitelistedVariation = BucketingService._getVariation(\n targetedVariations,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, campaign))\n );\n } else {\n whitelistedVariation = targetedVariations[0];\n }\n\n if (whitelistedVariation) {\n return {\n variation: whitelistedVariation,\n variationName: whitelistedVariation.name,\n variationId: whitelistedVariation.id\n };\n }\n },\n /**\n * Get the User Variation mapping by calling get method of UserStorageService being provided\n *\n * @param {Object} config\n * @param {String} UserID\n * @param {String} campaignKey\n *\n * @return {Object} - User Campaign Mapping\n */\n _getStoredUserData: function(config, userId, campaignKey, userStorageData, disableLogs) {\n let userStorageMap = {\n userId: userId,\n variationName: null,\n campaignKey: campaignKey,\n goalIdentifier: null\n };\n\n if (!config.userStorageService) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, {\n file\n }),\n disableLogs\n );\n return userStorageMap;\n }\n\n if (config.asyncStorageConfig) {\n try {\n return config.userStorageService\n .get(userId, campaignKey)\n .then(data => {\n // if data found\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey\n }),\n disableLogs\n );\n\n let finalData = Object.assign({}, data, userStorageData);\n\n return finalData;\n })\n .catch(_error => {\n // TODO: add log for failed fetch\n console.log('Failed to fetch data from Storage Service', _error);\n });\n } catch (err) {\n // if no data found\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_GET_FAILED, {\n file,\n userId,\n error: err\n }),\n disableLogs\n );\n }\n } else {\n try {\n let data = config.userStorageService.get(userId, campaignKey) || {};\n\n // if data found\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey\n }),\n disableLogs\n );\n\n return Object.assign({}, data, userStorageData);\n } catch (err) {\n // if no data found\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_GET_FAILED, {\n file,\n userId,\n error: err\n }),\n disableLogs\n );\n }\n }\n },\n\n /**\n * If UserStorageService is provided and variation was stored, save the assigned variation\n *\n * @param {Object} campaign\n * @param {String} variationName\n * @param {String} userId\n *\n * @return {Boolean} - true if found otherwise false\n */\n _saveUserData: function(config, campaign, variationName, userId, metaData, goalIdentifier) {\n let isSaved = false;\n\n if (!config.userStorageService) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, {\n file\n })\n );\n return isSaved;\n }\n\n try {\n const properties = {\n userId: userId,\n variationName,\n campaignKey: campaign.key\n };\n\n if (!DataTypeUtil.isUndefined(goalIdentifier)) {\n properties.goalIdentifier = goalIdentifier;\n }\n\n if (!DataTypeUtil.isUndefined(metaData)) {\n properties.metaData = metaData;\n }\n\n config.userStorageService.set(properties);\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey: campaign.key\n })\n );\n\n isSaved = true;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_SET_FAILED, {\n file,\n userId,\n error: err\n })\n );\n\n isSaved = false;\n }\n\n return isSaved;\n },\n\n /**\n * Evaluate the campaign for whitelisting and store\n * This method would be run only for MEG campaigns\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Array} campaignList\n * @param {Object} calledCampaign\n * @param {String} userId\n * @param {Object} userStorageData\n * @param {Object} variationTargetingVariables\n * @param {Boolean} isTrackUserAPI\n *\n * @returns {Boolean} - true, if whitelisting/storage is satisfied for any campaign\n */\n _checkForStorageAndWhitelisting(\n config,\n settingsFile,\n groupName,\n campaignList,\n calledCampaign,\n userId,\n userStorageData,\n variationTargetingVariables,\n isTrackUserAPI\n ) {\n let otherCampaignWinner = false;\n campaignList.some(groupCampaign => {\n if (groupCampaign.id === calledCampaign.id) {\n return;\n }\n // create a local copy of the campaigns\n // groupCampaign = FunctionUtil.cloneObject(groupCampaign);\n // checking other campaigns for whitelisting or user storage.\n const whitelistedVariation = DecisionUtil._checkForWhitelisting(\n config,\n groupCampaign,\n groupCampaign.key,\n userId,\n variationTargetingVariables\n );\n if (whitelistedVariation) {\n if (DataTypeUtil.isPromise(whitelistedVariation)) {\n return whitelistedVariation.then(data => {\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'whitelisting'\n })\n );\n return new Promise(resolve => {\n resolve(true);\n });\n });\n } else {\n // other campaign satisfy the whitelisting\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'whitelisting'\n })\n );\n return true;\n }\n }\n\n const storedVariation = DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n groupCampaign,\n groupCampaign.key,\n userId,\n userStorageData,\n isTrackUserAPI\n );\n\n if (storedVariation && DataTypeUtil.isPromise(storedVariation)) {\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'user storage'\n })\n );\n // return true;\n return new Promise(resolve => {\n resolve(true);\n });\n }\n if (storedVariation && DataTypeUtil.isObject(storedVariation) && Object.keys(storedVariation).length > 0) {\n // other campaign satisfy the user storage\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'user storage'\n })\n );\n return true;\n }\n });\n if (config.asyncStorageConfig) {\n return new Promise(resolve => {\n resolve(otherCampaignWinner);\n });\n }\n return otherCampaignWinner;\n },\n\n /**\n * Evaluate a campaign for pre-segmentation.\n *\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} decision\n *\n * @returns {Boolean} true, if the pre-segmentation is satisfied.\n */\n _checkForPreSegmentation: (campaign, campaignKey, userId, customVariables, decision) => {\n let status;\n if (DataTypeUtil.isObject(campaign.segments) && !Object.keys(campaign.segments).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n !decision\n );\n return true;\n } else {\n const preSegmentationResult = SegmentEvaluator(\n campaign.segments,\n customVariables,\n campaignKey,\n userId,\n !decision\n );\n if (!preSegmentationResult) {\n status = StatusEnum.FAILED;\n } else {\n status = StatusEnum.PASSED;\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(customVariables || {}),\n file,\n status,\n segmentationType: SegmentationTypeEnum.PRE_SEGMENTATION,\n variation: ''\n }),\n !decision\n );\n\n if (status === StatusEnum.FAILED) {\n return false;\n } else {\n return true;\n }\n }\n },\n\n /**\n * Check if user is eligible for the camapign based on traffic percentage and assign variation.\n * @param {Object} config\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n * @returns {Object} variation assigned to the user\n */\n evaluateTrafficAndGetVariation(config, campaign, campaignKey, userId, metaData, newGoalIdentifier, decision) {\n let variation, variationName, variationId;\n // Use our core's VariationDecider utility to get the deterministic variation assigned to the userId for that campaign\n ({ variation, variationName, variationId } = VariationDecider.getVariationAllotted(\n userId,\n campaign,\n config.settingsFile.accountId\n ));\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_ALLOCATION_STATUS, {\n file,\n campaignKey,\n userId,\n status: variationName ? `got variation:${variationName}` : 'did not get any variation'\n })\n );\n\n // Check if variation-name has been assigned to the userId. If not, return no variation\n if (variationName) {\n // If userStorageService is provided, look into it for the saved variation for the campaign and userId\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, newGoalIdentifier);\n }\n\n // Executing the callback when SDK makes the decision\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: false,\n isUserWhitelisted: false\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n\n return {\n variation: variation && variation.variation,\n variationName,\n variationId\n };\n },\n\n /**\n * Evaluate a campaign for whitelisting\n *\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} variationTargetingVariables\n * @param {Object} decision\n *\n * @returns {Object} whitelisted variation\n */\n _checkForWhitelisting: (config, campaign, campaignKey, userId, variationTargetingVariables, decision) => {\n let status;\n let variationName, variationId;\n if (campaign.isForcedVariationEnabled) {\n let whitelistingResult = DecisionUtil._evaluateWhitelisting(\n campaign,\n campaignKey,\n userId,\n variationTargetingVariables,\n !decision\n );\n let variationString;\n if (whitelistingResult) {\n status = StatusEnum.PASSED;\n variationString = whitelistingResult.variationName;\n } else {\n status = StatusEnum.FAILED;\n variationString = '';\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(variationTargetingVariables),\n file,\n status,\n segmentationType: SegmentationTypeEnum.WHITELISTING,\n variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT ? '' : `for variation: ${variationString}`\n }),\n !decision\n );\n\n if (whitelistingResult) {\n variationName = whitelistingResult.variationName;\n variationId = whitelistingResult.variationId;\n // Executing the callback when SDK has made a decision in case of whitelisting\n if (decision) {\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: false,\n isUserWhitelisted: !!variationName\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n }\n if (config.asyncStorageConfig) {\n return new Promise(resolve => resolve(whitelistingResult));\n }\n return whitelistingResult;\n }\n } else {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.WHITELISTING_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n !decision\n );\n }\n },\n\n /**\n * Check if the variation is present in the user storage\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} userStorageData\n * @param {Boolean} isTrackUserAPI\n * @param {Object} decision\n *\n * @returns {Object} stored variaition\n */\n _checkForUserStorage: (\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n ) => {\n let userData;\n\n if (config.asyncStorageConfig) {\n return DecisionUtil._getStoredUserData(config, userId, campaignKey, userStorageData, !decision).then(function(\n userData\n ) {\n userData = userData || { variationName: null, goalIdentifier: null };\n\n return DecisionUtil._processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n );\n });\n } else {\n userData = DecisionUtil._getStoredUserData(config, userId, campaignKey, userStorageData, !decision);\n\n return DecisionUtil._processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n );\n }\n },\n\n _processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n ) {\n let { variationName, goalIdentifier } = userData;\n let storedVariation;\n\n if (userData && userData.campaignKey && variationName) {\n storedVariation = CampaignUtil.getCampaignVariation(settingsFile, campaignKey, variationName);\n } else {\n // Log if stored variation is not found even after implementing UserStorageService\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NO_STORED_DATA, {\n file,\n campaignKey,\n userId\n }),\n !decision\n );\n }\n\n let variationId;\n\n // If stored variation is found, simply return the same\n if (storedVariation) {\n variationName = storedVariation.name;\n variationId = storedVariation.id;\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GOT_STORED_VARIATION, {\n file,\n campaignKey,\n userId,\n variationName\n }),\n !decision\n );\n\n // Executing the callback when SDK gets the decision from user storage service\n if (decision) {\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: !!variationName,\n isUserWhitelisted: false\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n }\n\n return {\n variation: storedVariation,\n variationName,\n variationId,\n storedGoalIdentifier: goalIdentifier,\n isStoredVariation: true\n };\n } else if (\n !DataTypeUtil.isUndefined(config.userStorageService) &&\n !isTrackUserAPI &&\n DataTypeUtil.isUndefined(storedVariation)\n ) {\n logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_ACTIVATED, {\n file,\n campaignKey,\n userId,\n api: config.apiName\n }),\n !decision\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_NOT_ACTIVATED, {\n file,\n campaignKey,\n userId,\n reason: config.apiName === ApiEnum.TRACK ? 'track it' : 'get the decision/value'\n }),\n !decision\n );\n return {};\n }\n },\n\n /**\n * Evaluate the list of campaigns for pre-segmentation and campaign traffic allocation and assign variation to the user.\n * This method will be used for MEG campaigns\n *\n * @param {Object} config\n * @param {Array} campaignList\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n *\n * @returns {Array} list of campaigns which satisfies the conditions.\n */\n getEligbleCampaigns(campaignList, userId, customVariables) {\n let eligibleCampaigns = [];\n let inEligibleCampaigns = [];\n\n campaignList.forEach(groupCampaign => {\n const isPartOfCampaign =\n DecisionUtil._checkForPreSegmentation(groupCampaign, groupCampaign.key, userId, customVariables) &&\n BucketingService.isUserPartOfCampaign(userId, groupCampaign, true);\n if (isPartOfCampaign) {\n groupCampaign = FunctionUtil.cloneObject(groupCampaign);\n // campaign satisfies the pre-segmentation\n eligibleCampaigns.push(groupCampaign);\n } else {\n inEligibleCampaigns.push(groupCampaign);\n }\n });\n\n return {\n eligibleCampaigns,\n inEligibleCampaigns\n };\n },\n\n /**\n * Equally distribute the traffic of campaigns and assign a winner campaign by murmur hash.\n *\n * @param {Object} config\n * @param {Object} calledCampaign\n * @param {Array} shortlistedCampaigns\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n *\n * @returns {Object} variation of the winner campaign\n */\n _normalizeAndFindWinningCampaign(\n config,\n calledCampaign,\n shortlistedCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n ) {\n // normalise the weights of all the shortlisted campaigns\n shortlistedCampaigns.forEach(campaign => {\n campaign.weight = Math.floor(100 / shortlistedCampaigns.length);\n });\n\n // re-distribute the traffic for each camapign\n CampaignUtil.setCampaignAllocation(shortlistedCampaigns);\n\n let winnerCampaign = BucketingService._getVariation(\n shortlistedCampaigns,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, {\n userId,\n groupName,\n file,\n campaignKey: winnerCampaign.key\n })\n );\n\n if (winnerCampaign.id === calledCampaign.id) {\n // if called campaign is the winner campaign, get the variation for the campaign\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n winnerCampaign,\n winnerCampaign.key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n // if winning campaign not the called camapaign, return\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: calledCampaign.key\n })\n );\n return {};\n }\n },\n /** Assign the winner campaign by checking priority order and/or weightage distribution\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} calledCampaign\n * @param {Array} shortlistedCampaigns\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n *\n * @returns {Object} variation of the winner campaign\n */\n _advancedAlgoFindWinningCampaign: (\n config,\n settingsFile,\n calledCampaign,\n shortlistedCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n ) => {\n let winnerCampaign = null;\n let found = false; // flag to check whether winnerCampaign has been found or not and helps to break from the outer loop\n let priorityOrder = typeof settingsFile.groups[groupId].p !== 'undefined' ? settingsFile.groups[groupId].p : {};\n let wt = typeof settingsFile.groups[groupId].wt !== 'undefined' ? settingsFile.groups[groupId].wt : {};\n\n for (let i = 0; i < priorityOrder.length; i++) {\n for (let j = 0; j < shortlistedCampaigns.length; j++) {\n if (shortlistedCampaigns[j].id === priorityOrder[i]) {\n winnerCampaign = FunctionUtil.cloneObject(shortlistedCampaigns[j]);\n found = true;\n break;\n }\n }\n if (found === true) break;\n }\n\n // If winnerCampaign not found through Priority, then go for weighted Random distribution and for that,\n // Store the list of campaigns (participatingCampaigns) out of shortlistedCampaigns and their corresponding weights present in weightage distribution array (wt)\n if (winnerCampaign === null) {\n let participatingCampaignList = [];\n // iterate over shortlisted campaigns and add weights from the weight array\n for (let i = 0; i < shortlistedCampaigns.length; i++) {\n let campaignId = shortlistedCampaigns[i].id;\n if (typeof wt[campaignId] !== 'undefined') {\n let clonedCampaign = FunctionUtil.cloneObject(shortlistedCampaigns[i]);\n clonedCampaign.weight = wt[campaignId];\n participatingCampaignList.push(clonedCampaign);\n }\n }\n /* Finding winner campaign using weighted Distibution :\n 1. Re-distribute the traffic by assigning range values for each camapign in particaptingCampaignList \n 2. Calculate bucket value for the given userId and groupId\n 3. Get the winnerCampaign by checking the Start and End Bucket Allocations of each campaign\n */\n\n CampaignUtil.setCampaignAllocation(participatingCampaignList);\n\n winnerCampaign = BucketingService._getVariation(\n participatingCampaignList,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))\n );\n }\n\n if (winnerCampaign != null) {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, {\n userId,\n groupName,\n file,\n campaignKey: winnerCampaign.key\n })\n );\n }\n // WinnerCampaign should not be null, in case when winnerCampaign hasn't been found through PriorityOrder and\n // also shortlistedCampaigns and wt array does not have a single campaign id in common\n if (winnerCampaign != null && winnerCampaign.id === calledCampaign.id) {\n // if called campaign is the winner campaign, get the variation for the campaign\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n winnerCampaign,\n winnerCampaign.key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n // if winning campaign not the called camapaign, return\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: calledCampaign.key\n })\n );\n return {};\n }\n }\n};\n\nmodule.exports = DecisionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst FunctionUtil = require('./FunctionUtil');\nconst EventEnum = require('../enums/EventEnum');\nconst excludedProperties = ['url'];\n\nconst file = FileNameEnum.EventDispatcherUtil;\n\nlet EventDispatcher = {\n dispatchGetCall: function(properties, { responseCallback }, customHeaders = {}) {\n let parsedUrl;\n let queryParams = '?';\n\n queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties);\n\n try {\n // Require files only if required in respective Engine i.e. Node / Browser\n if (typeof process.env === 'undefined') {\n require('./HttpXMLUtil').sendCall(\n properties,\n queryParams,\n { successCallback: responseCallback },\n customHeaders\n );\n } else {\n const url = require('url');\n\n parsedUrl = url.parse(properties.url);\n\n require('./HttpHandlerUtil').sendGetCall(\n parsedUrl,\n queryParams,\n null,\n (error, response) => {\n this.handleGetResponse(properties, error, response);\n if (responseCallback) {\n responseCallback(error, response);\n }\n },\n customHeaders\n );\n }\n } catch (err) {\n let endPoint = properties.url;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file: FileNameEnum.EventDispatcher,\n endPoint,\n err\n })\n );\n }\n\n return false;\n },\n\n handleGetResponse: function(properties, error, response) {\n if (error) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file,\n endPoint: response.endPoint,\n err: error\n })\n );\n return false;\n } else {\n const baseParams = {\n file,\n endPoint: response.endPoint,\n accountId: properties && properties.account_id\n };\n let params = {};\n if (baseParams.endPoint.includes('push')) {\n let customVariables = JSON.parse(properties.tags).u;\n params = Object.assign({}, baseParams, { customVariables: customVariables });\n params.mainKeys = `customDimension:${JSON.stringify(params.customVariables)}`;\n } else {\n params = Object.assign({}, baseParams, {\n campaignId: properties && properties.experiment_id,\n variationId: properties && properties.combination\n });\n params.mainKeys = `campaignId:${params.campaignId} and variationId:${params.variationId}`;\n }\n logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params));\n return true;\n }\n },\n\n dispatchPostCall: function(properties, payload, { responseCallback }, customHeaders = {}) {\n let parsedUrl;\n let queryParams = '?';\n\n queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties);\n\n try {\n // Require files only if required in respective Engine i.e. Node / Browser\n\n if (typeof process.env === 'undefined') {\n if (typeof XMLHttpRequest === 'undefined') {\n return require('./FetchUtil')\n .send({\n method: 'POST',\n url: `${properties.url}${queryParams}`,\n payload,\n customHeaders\n })\n .then(() => {\n this.handlePostResponse(properties, payload);\n if (responseCallback) {\n responseCallback(null, { status: 'success' });\n }\n })\n .catch(error => {\n this.handlePostResponse(properties, payload, error);\n responseCallback(error, { status: 'failure' });\n });\n }\n\n return require('./XhrUtil')\n .send({\n method: 'POST',\n url: `${properties.url}${queryParams}`,\n payload,\n customHeaders,\n logger\n })\n .then(() => {\n this.handlePostResponse(properties, payload);\n if (responseCallback) {\n responseCallback(null, { status: 'success' });\n }\n })\n .catch(error => {\n this.handlePostResponse(properties, payload, error);\n responseCallback(error, { status: 'failure' });\n });\n } else {\n const url = require('url');\n\n parsedUrl = url.parse(properties.url);\n\n return new Promise(resolve => {\n require('./HttpHandlerUtil').sendPostCall(\n parsedUrl,\n payload,\n queryParams,\n null,\n error => {\n const result = this.handlePostResponse(properties, payload, error);\n if (responseCallback) {\n responseCallback(error, { status: 'success' });\n }\n resolve(result);\n },\n customHeaders\n );\n });\n }\n } catch (err) {\n let endPoint = properties.url;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file: FileNameEnum.EventDispatcherUtil,\n endPoint,\n err\n })\n );\n }\n\n return Promise.resolve(false);\n },\n\n handlePostResponse: function(properties, payload, error) {\n let endPoint = properties.url;\n\n if (error) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file,\n endPoint: endPoint,\n err: error\n })\n );\n return false;\n } else {\n let event = `${properties.en} event`;\n if (properties.en === EventEnum.VWO_SYNC_VISITOR_PROP) {\n delete payload.d.visitor.props.vwo_fs_environment;\n event = `visitor property:${JSON.stringify(payload.d.visitor.props)}`;\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS_FOR_EVENT_ARCH, {\n file,\n endPoint,\n accountId: properties.a,\n event: event\n })\n );\n\n return true;\n }\n }\n};\n\nmodule.exports = EventDispatcher;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignUtil = require('./CampaignUtil');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst FeatureVariableTypeEnum = require('../enums/FeatureVariableTypeEnum');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.FeatureUtil;\n\nlet FeatureUtil = {\n getVariableForFeature: (campaign, variableKey) => {\n let variableData = {};\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n let variables = campaign.variables || [];\n\n for (let i = 0; i < variables.length; i++) {\n if (variables[i].key === variableKey) {\n variableData = variables[i];\n\n break;\n }\n }\n\n return variableData;\n }\n\n return variableData;\n },\n getVariableValueForVariation: (campaign, variation, variableKey) => {\n let variationVariable = {};\n\n if (CampaignUtil.isFeatureTestCampaign(campaign)) {\n if (!variation || !variation || !variation.variables) {\n return variationVariable;\n }\n\n if (!variation.isFeatureEnabled) {\n variation = CampaignUtil.getControlForCampaign(campaign);\n }\n\n for (let i = 0; i < variation.variables.length; i++) {\n let variable = variation.variables[i];\n\n if (variableKey === variable.key) {\n variationVariable = variable;\n break;\n }\n }\n }\n\n return variationVariable;\n },\n getTypeCastVariableValue: (variableValue, variableType) => {\n let typeCastedValue;\n\n switch (variableType) {\n case FeatureVariableTypeEnum.INTEGER:\n typeCastedValue = parseInt(variableValue, 10);\n if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n }\n break;\n\n case FeatureVariableTypeEnum.DOUBLE:\n typeCastedValue = parseFloat(variableValue);\n if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n }\n break;\n\n case FeatureVariableTypeEnum.BOOLEAN:\n if (!DataTypeUtil.isBoolean(variableValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n } else {\n typeCastedValue = variableValue;\n }\n break;\n\n case FeatureVariableTypeEnum.JSON:\n if (!DataTypeUtil.isObject(variableValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n } else {\n typeCastedValue = variableValue;\n }\n break;\n\n default:\n typeCastedValue = variableValue;\n break;\n }\n\n return typeCastedValue;\n }\n};\n\nmodule.exports = FeatureUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { getCurrentTime } = require('./FunctionUtil');\nconst { isObject, isFunction } = require('./DataTypeUtil');\n\nconst FetchUtil = {\n _getStoredSettings: function(userStorageService) {\n let isStoredData = false;\n let parsedSettings;\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) {\n try {\n const settings = userStorageService.getSettings();\n parsedSettings = JSON.parse(settings);\n\n if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) {\n const info = `VWO-SDK - [INFO]: ${getCurrentTime()} VWO settings found in Storage Service.`;\n\n console.info(info);\n\n isStoredData = true;\n } else if (parsedSettings) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid.`;\n\n console.error(error);\n } else {\n const warning = `VWO-SDK - [WARNING]: ${getCurrentTime()} VWO settings is empty in Storage Service.`;\n\n console.warn(warning);\n }\n } catch (err) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid. ${err}`;\n\n console.error(error);\n isStoredData = false;\n }\n }\n\n return {\n isStoredData,\n parsedSettings\n };\n },\n\n send: function({ method, url, payload, userStorageService, customHeaders = {} } = {}) {\n if (!url || !method) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const { isStoredData, parsedSettings } = FetchUtil._getStoredSettings(userStorageService);\n\n if (isStoredData) {\n resolve(parsedSettings);\n } else {\n const options = {\n method,\n headers: customHeaders\n };\n\n if (method === 'POST') {\n options.body = JSON.stringify(payload);\n }\n\n return fetch(url, options)\n .then(res => {\n // Some endpoints return empty strings as the response body; treat\n // as raw text and handle potential JSON parsing errors below\n return res.text().then(text => {\n let jsonData = {};\n try {\n jsonData = JSON.parse(text);\n } catch (err) {\n console.info(\n `VWO-SDK - [INFO]: ${getCurrentTime()} VWO didn't send JSON response which is expected: ${err}`\n );\n }\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) {\n userStorageService.setSettings(jsonData);\n }\n\n if (res.status === 200) {\n resolve(jsonData);\n } else {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${\n res.status\n }`;\n\n console.error(error);\n reject(error);\n }\n });\n })\n .catch(err => {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${err}`;\n\n console.error(error);\n reject(error);\n });\n }\n });\n }\n};\n\nmodule.exports = FetchUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst FunctionUtil = {\n cloneObject: obj => {\n if (!obj) {\n return obj;\n }\n\n let clonedObj = JSON.parse(JSON.stringify(obj));\n\n return clonedObj;\n },\n getRandomNumber: () => {\n return Math.random();\n },\n getCurrentUnixTimestamp: () => {\n return Math.ceil(+new Date() / 1000);\n },\n getCurrentUnixTimestampInMillis: () => {\n return +new Date();\n },\n matchWithRegex: (string, regex) => {\n try {\n return string.match(new RegExp(regex));\n } catch (err) {\n const logging = require('../services/logging');\n const FileNameEnum = require('../enums/FileNameEnum');\n\n const logger = logging.getLogger();\n const { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n const file = FileNameEnum.FunctionUtil;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_REGEX_CREATION_FAILED, {\n file,\n regex\n })\n );\n return null;\n }\n },\n getCurrentTime() {\n return new Date().toISOString();\n },\n convertObjectKeysToString(properties, excludedProperties) {\n let queryParams = '';\n excludedProperties = excludedProperties || [];\n\n for (let prop in properties) {\n if (properties.hasOwnProperty(prop)) {\n if (excludedProperties.indexOf(prop) === -1) {\n queryParams += prop + '=' + properties[prop] + '&';\n }\n }\n }\n\n return queryParams;\n },\n objectValues(obj) {\n let values = [];\n\n for (const prop in obj) {\n values.push(obj[prop]);\n }\n return values;\n }\n};\n\nmodule.exports = FunctionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst file = FileNameEnum.HttpXMLUtil;\n\nconst noop = () => {};\n\nconst printLog = properties => {\n const baseParams = {\n file,\n endPoint: properties.url,\n accountId: properties && properties.account_id\n };\n let params = {};\n if (baseParams.endPoint.includes('push')) {\n let customVariables = JSON.parse(properties.tags).u;\n params = Object.assign({}, baseParams, { customVariables: customVariables });\n params.mainKeys = `customDimension:${JSON.stringify(params.customVariables)}`;\n } else {\n params = Object.assign({}, baseParams, {\n campaignId: properties && properties.experiment_id,\n variationId: properties && properties.combination\n });\n params.mainKeys = `campaignId:${params.campaignId} and variationId:${params.variationId}`;\n }\n logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params));\n};\n\nconst HttpXMLUtil = {\n sendCall: function(properties, queryParams, options = {}, customHeaders = {}) {\n let endPoint = `${properties.url}${queryParams}`;\n\n let { successCallback, errorCallback } = options;\n\n errorCallback = errorCallback || successCallback;\n\n let isCallbackCalled = false;\n if (typeof XMLHttpRequest === 'undefined') {\n // if (typeof Image === 'undefined') {\n fetch(endPoint, { method: 'GET', headers: customHeaders })\n .then(() => {\n if (isCallbackCalled) {\n return;\n }\n isCallbackCalled = true;\n successCallback(null, { status: 'success' });\n })\n .catch(_err => {\n if (isCallbackCalled) {\n return;\n }\n isCallbackCalled = true;\n errorCallback(null, { status: 'success' });\n printLog(properties);\n });\n\n return;\n }\n this.handleGetCall(\n properties,\n queryParams,\n successCallback,\n errorCallback,\n endPoint,\n isCallbackCalled,\n customHeaders\n );\n },\n\n handleGetCall: function(\n properties,\n queryParams,\n successCallback,\n errorCallback,\n endPoint,\n isCallbackCalled,\n customHeaders = {}\n ) {\n successCallback = successCallback || noop;\n errorCallback = errorCallback || noop;\n\n const xhr = new XMLHttpRequest();\n\n xhr.open('GET', endPoint, true);\n // Set custom headers using setRequestHeader\n for (var headerName in customHeaders) {\n if (customHeaders.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, customHeaders[headerName]);\n }\n }\n\n xhr.onload = function() {\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = xhr.responseText;\n successCallback(response);\n printLog(properties);\n } else {\n errorCallback(xhr.statusText);\n printLog(properties);\n }\n };\n\n xhr.onerror = function() {\n errorCallback(xhr.statusText);\n printLog(properties);\n };\n\n xhr.send();\n }\n};\nmodule.exports = HttpXMLUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst UrlEnum = require('../enums/UrlEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\n\nconst UuidUtil = require('./UuidUtil');\nconst ValidateUtil = require('./ValidateUtil');\nconst FunctionUtil = require('./FunctionUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst UrlService = require('../services/UrlService');\n/**\n * Return primary properties required for every network call to VWO server\n * @param {Object} configObj\n * @param {String} userId\n *\n * @returns primary properties\n */\nfunction getPrimaryProperties(configObj, userId) {\n return {\n sId: FunctionUtil.getCurrentUnixTimestamp(),\n u: UuidUtil.generateFor(userId, configObj.accountId)\n };\n}\n\n/**\n * Return base properties required for every network call to VWO server\n * @param {Object} configObj\n * @param {String} userId\n *\n * @returns base properties\n */\nfunction getBaseProperties(configObj, userId) {\n const { accountId } = configObj;\n\n return Object.assign({}, getPrimaryProperties(configObj, userId), ImpressionUtil.getReportingProperties(configObj), {\n account_id: accountId,\n random: FunctionUtil.getRandomNumber(),\n ap: Constants.PLATFORM\n });\n}\n\nlet ImpressionUtil = {\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} tagKey the tag name\n * @param {String} tagValue the tag value\n */\n buildEventForPushing(configObj, tagKey, tagValue, userId) {\n const properties = Object.assign({}, getBaseProperties(configObj, userId));\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.PUSH;\n properties.tags = JSON.stringify({\n u: {\n [encodeURIComponent(tagKey)]: encodeURIComponent(tagValue)\n }\n });\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} tagKey the tag name\n * @param {String} tagValue the tag value\n */\n buildBatchEventForPushing(configObj, tagKey, tagValue, userId) {\n if (typeof process.env !== 'undefined') {\n const properties = Object.assign({}, getPrimaryProperties(configObj, userId));\n properties.eT = 3;\n properties.t = encodeURIComponent(\n JSON.stringify({\n u: {\n [tagKey]: tagValue\n }\n })\n );\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildEventForTrackingUser(\n configObj,\n campaignKey,\n variationId,\n userId,\n usageStats,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n let properties = Object.assign(\n {\n experiment_id: campaignKey,\n combination: variationId,\n visitor_ua: visitorUserAgent,\n visitor_ip: userIpAddress\n },\n getBaseProperties(configObj, userId),\n usageStats\n );\n properties.ed = JSON.stringify({ p: 'server' });\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.TRACK_USER;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} visitorUserAgent, user agent of visitor\n * @param {String} userIpAddress, IP of the visitor\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildBatchEventForTrackingUser(\n configObj,\n campaignKey,\n variationId,\n userId,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n if (typeof process.env !== 'undefined') {\n let properties = Object.assign(\n {\n e: campaignKey,\n c: variationId\n },\n getPrimaryProperties(configObj, userId)\n );\n properties.eT = 1;\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} goalId, the Goal ID\n * @param {String} revenue, the revenue generated on conversion\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildEventForTrackingGoal(\n configObj,\n campaignKey,\n variationId,\n userId,\n goal = {},\n revenue = null,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n const goalId = goal.id;\n\n let properties = Object.assign(\n {\n experiment_id: campaignKey,\n combination: variationId\n },\n getBaseProperties(configObj, userId)\n );\n\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.TRACK_GOAL;\n\n properties['goal_id'] = goalId;\n if (goal.type === GoalTypeEnum.REVENUE && ValidateUtil.isValidValue(revenue)) {\n properties['r'] = revenue;\n }\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} goalId, the Goal ID\n * @param {String} revenue, the revenue generated on conversion\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildBatchEventForTrackingGoal(\n configObj,\n campaignKey,\n variationId,\n userId,\n goal = {},\n revenue = null,\n eventProperties = {},\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n if (typeof process.env !== 'undefined') {\n let properties = Object.assign(\n {\n e: campaignKey,\n c: variationId\n },\n getPrimaryProperties(configObj, userId)\n );\n properties.eT = 2;\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n\n properties.g = goal.id;\n if (goal.type === GoalTypeEnum.REVENUE && ValidateUtil.isValidValue(revenue)) {\n properties.r = revenue;\n } else if (configObj.isEventArchEnabled && eventProperties.hasOwnProperty(goal.revenueProp)) {\n properties.r = eventProperties[goal.revenueProp];\n }\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n\n /**\n * Return an object containing properties required for segmenting reports\n * @param {Object} configObj\n * @returns reporting properties\n */\n getReportingProperties(configObj) {\n const { sdkKey } = configObj;\n\n return {\n [Constants.SDK_QUERY_PARAM]: Constants.SDK_NAME,\n [Constants.SDK_VERSION_QUERY_PARAM]: Constants.SDK_VERSION,\n env: sdkKey\n };\n },\n\n /**\n * Builds generic properties for different tracking calls required by VWO servers.\n * @param {Object} configObj\n * @param {String} eventName\n * @returns properties\n */\n getEventsBaseProperties(config, eventName, usageStats = {}, visitorUserAgent = '', userIpAddress = '') {\n const { sdkKey } = config;\n\n let properties = Object.assign(\n {\n en: eventName,\n a: config.accountId,\n env: sdkKey,\n eTime: FunctionUtil.getCurrentUnixTimestampInMillis(),\n random: FunctionUtil.getRandomNumber(),\n p: 'FS',\n visitor_ua: visitorUserAgent,\n visitor_ip: userIpAddress\n },\n usageStats\n );\n\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.EVENTS;\n return properties;\n },\n\n /**\n * Builds generic payload required by all the different tracking calls.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} usageStats\n * @returns properties\n */\n getEventBasePayload(configObj, userId, eventName) {\n const uuid = UuidUtil.generateFor(userId, configObj.accountId);\n const { sdkKey } = configObj;\n\n let props = {\n vwo_sdkName: Constants.SDK_NAME,\n vwo_sdkVersion: Constants.SDK_VERSION,\n vwo_envKey: sdkKey\n };\n\n // if (usageStats) {\n // props = Object.assign({}, props, usageStats);\n // }\n\n let properties = {\n d: {\n msgId: `${uuid}-${FunctionUtil.getCurrentUnixTimestampInMillis()}`,\n visId: uuid,\n sessionId: FunctionUtil.getCurrentUnixTimestamp(),\n event: {\n props: props,\n name: eventName,\n time: FunctionUtil.getCurrentUnixTimestampInMillis()\n },\n visitor: {\n props: {\n vwo_fs_environment: sdkKey\n }\n }\n }\n };\n\n return properties;\n },\n\n /**\n * Builds payload to track the visitor.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {String} campaignId\n * @param {Number} variationId\n * @returns track-user payload\n */\n getTrackUserPayloadData(configObj, userId, eventName, campaignId, variationId) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n properties.d.event.props.id = campaignId;\n properties.d.event.props.variation = variationId;\n\n // this is currently required by data-layer team, we can make changes on DACDN and remove it from here\n properties.d.event.props.isFirst = 1;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n accountId: configObj.accountId,\n userId,\n campaignId\n })\n );\n\n return properties;\n },\n\n /**\n * Builds payload to track the Goal.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} metricMap\n * @param {String} revenueValue\n * @returns track-goal payload\n */\n getTrackGoalPayloadData(\n configObj,\n userId,\n eventName,\n metricMap,\n revenueValue,\n revenuePropList,\n eventProperties = {}\n ) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n let metric = {};\n Object.keys(metricMap).forEach(key => {\n metric[`id_${key}`] = [`g_${metricMap[key].goal.id}`];\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n goalName: eventName,\n accountId: configObj.accountId,\n u: userId,\n campaignId: key\n })\n );\n });\n\n properties.d.event.props.vwoMeta = {\n metric: metric\n };\n\n if (revenuePropList && revenueValue && revenuePropList.size > 0) {\n revenuePropList.forEach(revenueProp => {\n properties.d.event.props.vwoMeta[revenueProp] = revenueValue;\n });\n }\n\n properties.d.event.props.isCustomEvent = true;\n\n if (Object.keys(eventProperties).length > 0) {\n for (const prop in eventProperties) {\n properties.d.event.props[prop] = eventProperties[prop];\n }\n }\n\n return properties;\n },\n\n /**\n * Builds payload to appply post segmentation on VWO campaign reports.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} customDimensionMap\n * @returns push payload\n */\n getPushPayloadData(configObj, userId, eventName, customDimensionMap) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n properties.d.event.props.isCustomEvent = true;\n\n Object.keys(customDimensionMap).forEach(function(key) {\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n properties.d.visitor.props[key] = tagValue;\n });\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n accountId: configObj.accountId,\n userId,\n property: JSON.stringify(customDimensionMap)\n })\n );\n\n return properties;\n },\n\n /**\n * Remove the sensitive keys from the properties to te displayed in the log.\n * @param {Object} properties\n * @returns properties without sensitive keys\n */\n _getStringifiedLogProperties(properties) {\n const logProperties = Object.assign({}, properties);\n delete logProperties.env;\n return JSON.stringify(logProperties);\n }\n};\n\nmodule.exports = ImpressionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('./DataTypeUtil');\n\nconst nargs = /\\{([0-9a-zA-Z_]+)\\}/g;\n\nlet LogMessageUtil = {\n /**\n * Took reference from: string-template\n *\n * Name: string-template\n * Published Name: string-template\n * URL: https://github.com/Matt-Esch/string-template\n * Description: A lightweight string replace engine for text-based templates\n * Author: Matt-Esch (https://github.com/Matt-Esch)\n * License: MIT License\n * Local Modifications: This library is not used as a dependency.\n * Source code was referenced and is modified as per requirements.\n */\n build: (template, data) => {\n try {\n return template.replace(nargs, (match, key, index) => {\n let result;\n let isKey;\n\n if (template[index - 1] === '{' && template[index + match.length] === '}') {\n return key;\n } else {\n isKey = data.hasOwnProperty(key);\n\n if (isKey) {\n let value = data[key];\n\n if (DataTypeUtil.isFunction(value)) {\n value = data[key]();\n }\n result = value;\n } else {\n result = null;\n }\n if (result === null || result === undefined) {\n return '';\n }\n\n return result;\n }\n });\n } catch (err) {\n return template;\n }\n }\n};\n\nmodule.exports = LogMessageUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ObjectUtil = {\n areObjectKeys: (obj = {}) => {\n return Object.keys(obj).length;\n },\n getKeyValue: obj => {\n if (!ObjectUtil.areObjectKeys(obj)) {\n return;\n }\n let key = Object.keys(obj)[0];\n let value = obj[key];\n return {\n key,\n value\n };\n },\n objectValues: obj => {\n return Object.keys(obj).map(key => obj[key]);\n }\n};\n\nmodule.exports = ObjectUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst { matchWithRegex } = require('../utils/FunctionUtil');\nconst { getKeyValue } = require('../utils/ObjectUtil');\nconst SegmentEnum = require('../enums/segment');\n\nconst {\n LOWER_MATCH,\n WILDCARD_MATCH,\n REGEX_MATCH,\n STARTING_STAR,\n ENDING_STAR,\n GREATER_THAN_MATCH,\n GREATER_THAN_EQUAL_TO_MATCH,\n LESS_THAN_MATCH,\n LESS_THAN_EQUAL_TO_MATCH\n} = SegmentEnum.SegmentOperandValueTypeRegexes;\n\nconst {\n LOWER_VALUE,\n STARTING_ENDING_STAR_VALUE,\n STARTING_STAR_VALUE,\n ENDING_STAR_VALUE,\n REGEX_VALUE,\n EQUAL_VALUE,\n GREATER_THAN_VALUE,\n GREATER_THAN_EQUAL_TO_VALUE,\n LESS_THAN_VALUE,\n LESS_THAN_EQUAL_TO_VALUE\n} = SegmentEnum.SegmentOperandValues;\n\nfunction extractOperandValue(operand, regex) {\n return matchWithRegex(operand, regex) && matchWithRegex(operand, regex)[1];\n}\n\nfunction processValues(operandValue, tagValue) {\n // this is atomic, either both will be processed or none\n let processedOperandValue = parseFloat(operandValue, 10);\n let processedTagValue = parseFloat(tagValue, 10);\n if (!processedOperandValue || !processedTagValue) {\n return {\n operandValue: operandValue,\n tagValue: tagValue\n };\n }\n // now we have surity that both are numbers\n // now we can convert them independently to int type if they\n // are int rather than floats\n if (processedOperandValue === Math.floor(processedOperandValue)) {\n processedOperandValue = parseInt(processedOperandValue, 10);\n }\n if (processedTagValue === Math.floor(processedTagValue)) {\n processedTagValue = parseInt(processedTagValue, 10);\n }\n // convert it back to string and return\n return {\n operandValue: processedOperandValue.toString(),\n tagValue: processedTagValue.toString()\n };\n}\n\nfunction preProcessTagValue(tagValue) {\n if (tagValue === undefined) {\n tagValue = '';\n }\n if (DataTypeUtil.isBoolean(tagValue)) {\n if (tagValue) {\n tagValue = true;\n } else {\n tagValue = false;\n }\n }\n if (tagValue !== null) {\n tagValue = tagValue.toString();\n }\n return tagValue;\n}\n\nfunction preProcessOperandValue(operand) {\n let operandType;\n let operandValue;\n let startingStar;\n let endingStar;\n // Pre process operand value\n if (matchWithRegex(operand, LOWER_MATCH)) {\n operandType = LOWER_VALUE;\n operandValue = extractOperandValue(operand, LOWER_MATCH);\n } else if (matchWithRegex(operand, WILDCARD_MATCH)) {\n operandValue = extractOperandValue(operand, WILDCARD_MATCH);\n startingStar = matchWithRegex(operandValue, STARTING_STAR);\n endingStar = matchWithRegex(operandValue, ENDING_STAR);\n // In case of wildcard, the operand type is further divided into contains, startswith and endswith\n if (startingStar && endingStar) {\n operandType = STARTING_ENDING_STAR_VALUE;\n } else if (startingStar) {\n operandType = STARTING_STAR_VALUE;\n } else if (endingStar) {\n operandType = ENDING_STAR_VALUE;\n }\n operandValue = operandValue.replace(STARTING_STAR, '').replace(ENDING_STAR, '');\n } else if (matchWithRegex(operand, REGEX_MATCH)) {\n operandType = REGEX_VALUE;\n operandValue = extractOperandValue(operand, REGEX_MATCH);\n } else if (matchWithRegex(operand, GREATER_THAN_MATCH)) {\n operandType = GREATER_THAN_VALUE;\n operandValue = extractOperandValue(operand, GREATER_THAN_MATCH);\n } else if (matchWithRegex(operand, GREATER_THAN_EQUAL_TO_MATCH)) {\n operandType = GREATER_THAN_EQUAL_TO_VALUE;\n operandValue = extractOperandValue(operand, GREATER_THAN_EQUAL_TO_MATCH);\n } else if (matchWithRegex(operand, LESS_THAN_MATCH)) {\n operandType = LESS_THAN_VALUE;\n operandValue = extractOperandValue(operand, LESS_THAN_MATCH);\n } else if (matchWithRegex(operand, LESS_THAN_EQUAL_TO_MATCH)) {\n operandType = LESS_THAN_EQUAL_TO_VALUE;\n operandValue = extractOperandValue(operand, LESS_THAN_EQUAL_TO_MATCH);\n } else {\n operandType = EQUAL_VALUE;\n operandValue = operand;\n }\n return {\n operandType,\n operandValue\n };\n}\n\nfunction operandCustomVariablesParser(operand, customVariables) {\n // Extract custom_variable_key and custom_variable_value from operand\n let { key, value } = getKeyValue(operand);\n let operandKey = key;\n operand = value;\n if (!customVariables.hasOwnProperty(key)) {\n // For handling \".*\" regex case when key is not present in customVariables and matches regex is used.\n return false;\n }\n let tagValue = customVariables[operandKey];\n // Pre process tag value\n tagValue = preProcessTagValue(tagValue);\n let { operandType, operandValue } = preProcessOperandValue(operand);\n // Process both operand and tag values\n let processedValues = processValues(operandValue, tagValue);\n tagValue = processedValues.tagValue;\n return extractResult(operandType, processedValues.operandValue, tagValue);\n}\n\nfunction operandUserParser(operand, customVariables) {\n const users = operand.split(',');\n for (let i = 0; i < users.length; i++) {\n if (users[i].trim() === customVariables._vwoUserId) {\n return true;\n }\n }\n return false;\n}\n\nfunction extractResult(operandType, operandValue, tagValue) {\n let result;\n\n switch (operandType) {\n case LOWER_VALUE:\n if (tagValue !== null) {\n result = operandValue.toLowerCase() === tagValue.toLowerCase();\n }\n break;\n case STARTING_ENDING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.indexOf(operandValue) > -1;\n }\n break;\n case STARTING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.endsWith(operandValue);\n }\n break;\n case ENDING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.startsWith(operandValue);\n }\n break;\n case REGEX_VALUE:\n try {\n let pattern = new RegExp(operandValue, 'g');\n result = !!pattern.test(tagValue);\n } catch (err) {\n result = false;\n }\n break;\n case GREATER_THAN_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) < parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case GREATER_THAN_EQUAL_TO_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) <= parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case LESS_THAN_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) > parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case LESS_THAN_EQUAL_TO_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) >= parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n default:\n result = tagValue === operandValue;\n }\n\n return result;\n}\n\nmodule.exports = {\n extractOperandValue,\n processValues,\n preProcessTagValue,\n preProcessOperandValue,\n operandCustomVariablesParser,\n operandUserParser\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst UrlEnum = require('../enums/UrlEnum');\nconst { getRandomNumber, getCurrentTime } = require('./FunctionUtil');\n\nlet SettingsFileUtil = {\n get: (accountId, sdkKey, userStorageService, config = {}) => {\n if (!accountId || !sdkKey) {\n console.error('AccountId and sdkKey are required for fetching account settings. Aborting!');\n return;\n }\n\n let protocol = 'https';\n let port;\n let hostname = UrlEnum.BASE_URL;\n let path = UrlEnum.SETTINGS_URL;\n\n if (config.isViaWebhook) {\n path = UrlEnum.WEBHOOK_SETTINGS_URL;\n }\n\n path +=\n `?a=${accountId}&` +\n `i=${sdkKey}&` +\n `r=${getRandomNumber()}&` +\n `platform=${Constants.PLATFORM}&` +\n `${Constants.SDK_QUERY_PARAM}=${Constants.SDK_NAME}&` +\n `${Constants.SDK_VERSION_QUERY_PARAM}=${Constants.SDK_VERSION}`;\n\n if (config.hostname && config.path) {\n protocol = config.protocol;\n port = config.port;\n hostname = config.hostname || hostname;\n path = config.path || path;\n }\n\n if (typeof process.env === 'undefined') {\n if (typeof XMLHttpRequest === 'undefined') {\n return require('./FetchUtil').send({\n method: 'GET',\n url: `${protocol}://${hostname}${path}`,\n userStorageService\n });\n }\n return require('./XhrUtil').send({\n method: 'GET',\n url: `${protocol}://${hostname}${path}`,\n userStorageService\n });\n } else {\n const http = require('http');\n const https = require('https');\n\n return new Promise((resolve, reject) => {\n const options = {\n hostname,\n path,\n agent: false\n };\n\n if (port) {\n options.port = port;\n }\n\n (protocol === 'https' ? https : http).get(options, res => {\n SettingsFileUtil.handleHttpRequest(res, resolve, reject);\n });\n });\n }\n },\n\n handleHttpRequest: (res, resolve, reject) => {\n const { statusCode } = res;\n const contentType = res.headers['content-type'];\n\n let error;\n let rawData = '';\n\n if (!/^application\\/json/.test(contentType)) {\n error = `Invalid content-type.\\nExpected application/json but received ${contentType}`;\n }\n\n if (error) {\n console.error(error.message);\n // Consume response data to free up memory\n res.resume();\n reject(error);\n\n return;\n }\n\n res.setEncoding('utf8');\n\n res.on('data', chunk => {\n rawData += chunk;\n });\n\n res.on('end', () => {\n SettingsFileUtil.handleHttpResponse(statusCode, rawData, resolve, reject);\n });\n },\n\n handleHttpResponse: (statusCode, rawData, resolve, reject) => {\n try {\n const parsedData = JSON.parse(rawData);\n\n if (statusCode !== 200) {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${statusCode} and message: ${rawData}`;\n console.error(error);\n reject(error);\n\n return;\n }\n resolve(parsedData);\n } catch (err) {\n console.error(\n `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings - ${err.message}`\n );\n reject(err);\n }\n }\n};\n\nmodule.exports = SettingsFileUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst uuidv5 = require('uuid/v5');\nconst Constants = require('../constants');\n\nconst VWO_NAMESPACE = uuidv5(Constants.SEED_URL, uuidv5.URL);\n\nconst UuidUtil = {\n generateFor: (userId, accountId) => {\n userId = `${userId}`; // type-cast\n const hash = `${accountId}`;\n const userIdNamespace = UuidUtil.generate(hash, VWO_NAMESPACE);\n const uuidForUserIdAccountId = UuidUtil.generate(userId, userIdNamespace);\n\n let desiredUuid = uuidForUserIdAccountId.replace(/-/gi, '').toUpperCase();\n\n return desiredUuid;\n },\n generate: (name, namespace) => {\n if (!name || !namespace) {\n return;\n }\n\n return uuidv5(name, namespace);\n }\n};\n\nmodule.exports = UuidUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VWOFeatureFlags = {\n init(settingsFile) {\n VWOFeatureFlags.isEventArchEnabled = settingsFile.isEventArchEnabled;\n VWOFeatureFlags.isNB = settingsFile.isNB;\n VWOFeatureFlags.isNBv2 = settingsFile.isNBv2;\n },\n\n getAll() {\n return {\n isEventArchEnabled: VWOFeatureFlags.isEventArchEnabled,\n isNB: VWOFeatureFlags.isNB,\n isNBv2: VWOFeatureFlags.isNBv2\n };\n }\n};\n\nmodule.exports = VWOFeatureFlags;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('./DataTypeUtil');\nconst DataTypeEnum = require('../enums/DataTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\n\nconst APIMethodArgumentsValidationEnum = {\n [ApiEnum.ACTIVATE]: function({\n campaignKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.TRACK]: function({\n campaignKey,\n userId,\n goalIdentifier,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n goalTypeToTrack = GoalTypeEnum.ALL,\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING_NULL_UNDEFINED_ARRAY\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'goalIdentifier',\n value: goalIdentifier,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'goalTypeToTrack',\n value: goalTypeToTrack,\n type: DataTypeEnum.STRING\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.IS_FEATURE_ENABLED]: function({\n campaignKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.GET_FEATURE_VARIABLE_VALUE]: function({\n campaignKey,\n variableKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'variableKey',\n value: variableKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.PUSH]: function({ tagKey, tagValue, userId, customDimensionMap }) {\n return [\n {\n key: 'tagKey',\n value: tagKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'tagValue',\n value: tagValue,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customDimensionMap',\n value: customDimensionMap,\n type: DataTypeEnum.OBJECT\n }\n ];\n }\n};\n// both have same\nAPIMethodArgumentsValidationEnum[ApiEnum.GET_VARIATION_NAME] = APIMethodArgumentsValidationEnum[ApiEnum.ACTIVATE];\n\nconst ValidateUtil = {\n isValidValue: function(value) {\n return !!(value !== undefined && value);\n },\n isValidString: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isString(value);\n },\n isValidNumber: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isNumber(value);\n },\n isValidFunction: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isFunction(value);\n },\n isValidBoolean: function(value) {\n return value !== undefined && DataTypeUtil.isBoolean(value);\n },\n isValidObject: function(value) {\n return value !== undefined && DataTypeUtil.isObject(value);\n },\n areValidParamsForAPIMethod: argsObj => {\n let isValid = false;\n let args = APIMethodArgumentsValidationEnum[argsObj.method](argsObj);\n\n let validators = [];\n\n for (let i = 0; i < args.length; i++) {\n let argConfig = args[i];\n let argValue = argConfig.value;\n let dataType = argConfig.type;\n // let value;\n\n switch (dataType) {\n case DataTypeEnum.NUMBER:\n validators.push(ValidateUtil.isValidNumber(argValue));\n break;\n case DataTypeEnum.STRING:\n validators.push(ValidateUtil.isValidString(argValue));\n break;\n case DataTypeEnum.BOOLEAN:\n validators.push(ValidateUtil.isValidBoolean(argValue));\n break;\n // case DataTypeEnum.FUNCTION:\n // validators.push(ValidateUtil.isValidFunction(argValue));\n // break;\n case DataTypeEnum.OBJECT:\n validators.push(ValidateUtil.isValidObject(argValue));\n break;\n case DataTypeEnum.STRING_NULL_UNDEFINED_ARRAY:\n let value =\n ValidateUtil.isValidString(argValue) ||\n DataTypeUtil.isUndefined(argValue) ||\n DataTypeUtil.isNull(argValue) ||\n DataTypeUtil.isArray(argValue);\n validators.push(value);\n break;\n // case DataTypeEnum.NUMBER_STRING:\n // value = ValidateUtil.isValidNumber(argValue) || ValidateUtil.isValidString(argValue);\n // validators.push(value);\n // break;\n }\n }\n\n isValid = validators.every(val => val);\n\n return isValid;\n }\n};\n\nmodule.exports = ValidateUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('../services/logging');\nconst { LogLevelEnum } = logging;\nconst { getCurrentTime } = require('./FunctionUtil');\nconst { isObject, isFunction } = require('./DataTypeUtil');\n\nconst XhrUtil = {\n _getStoredSettings: function(userStorageService) {\n let isStoredData = false;\n let parsedSettings;\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) {\n try {\n const settings = userStorageService.getSettings();\n parsedSettings = JSON.parse(settings);\n\n if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) {\n const info = `VWO-SDK - [INFO]: ${getCurrentTime()} VWO settings found in Storage Service.`;\n\n console.info(info);\n\n isStoredData = true;\n } else if (parsedSettings) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid.`;\n\n console.error(error);\n } else {\n const warning = `VWO-SDK - [WARNING]: ${getCurrentTime()} VWO settings is empty in Storage Service.`;\n\n console.warn(warning);\n }\n } catch (err) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid. ${err}`;\n\n console.error(error);\n isStoredData = false;\n }\n }\n\n return {\n isStoredData,\n parsedSettings\n };\n },\n send: function({ method, url, payload, userStorageService, customHeaders, logger } = {}) {\n if (!url || !method) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const { isStoredData, parsedSettings } = XhrUtil._getStoredSettings(userStorageService);\n\n if (isStoredData) {\n resolve(parsedSettings);\n } else {\n let xhr = new XMLHttpRequest();\n this.xhrHandler(xhr, method, url, payload, userStorageService, customHeaders, logger, resolve, reject);\n }\n });\n },\n\n // send request function definition (to allow for retries)\n sendRequest: function(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject) {\n let delay = 1000 * (retries + 1);\n let xhr = new XMLHttpRequest();\n\n // Configure timeout\n xhr.timeout = 5000; // Set timeout to 5 seconds (5000 ms)\n\n // onload event\n xhr.onload = () => {\n // retry if error and less than max retries\n if (xhr.status < 200 || xhr.status >= 300) {\n if (retries < maxRetries) {\n retries++;\n\n // log retried times\n logger.log(\n LogLevelEnum.ERROR,\n `Retrying with Status Code : ${xhr.status}, and Response : ${xhr.responseText}`\n );\n\n // call send request again, after delay\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n // log errors with status (clean up later)\n logger.log(\n LogLevelEnum.ERROR,\n `Request failed with Status Code : ${xhr.status} and Response : ${xhr.responseText}`\n );\n reject(`Got Error: ${xhr.statusText} and Status Code: ${xhr.status}`);\n }\n } else {\n // resolve the promise if all well\n resolve(xhr.responseText);\n }\n };\n\n // onerror event\n xhr.onerror = () => {\n if (retries < maxRetries) {\n retries++;\n logger.log(LogLevelEnum.ERROR, 'Retrying due to network error');\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n reject(`Network error: ${xhr.statusText}, Status Code: ${xhr.status}`);\n }\n };\n\n // ontimeout event\n xhr.ontimeout = () => {\n if (retries < maxRetries) {\n retries++;\n logger.log(LogLevelEnum.ERROR, 'Retrying due to timeout');\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n reject(`Timeout error: ${xhr.statusText}, Status Code: ${xhr.status}`);\n }\n };\n\n // open connection and add headers if any, and then send\n xhr.open(method, url, true);\n for (var newHeaderName in customHeaders) {\n if (customHeaders.hasOwnProperty(newHeaderName)) {\n xhr.setRequestHeader(newHeaderName, customHeaders[newHeaderName]);\n }\n }\n xhr.send(JSON.stringify(payload));\n },\n\n xhrHandler: function(xhr, method, url, payload, userStorageService, customHeaders = {}, logger, resolve, reject) {\n if (method === 'GET') {\n try {\n xhr.onload = () => {\n this.xhrOnLoad(xhr, userStorageService, resolve);\n };\n xhr.onerror = () => {\n this.xhrOnError(xhr, reject);\n };\n\n xhr.open(method, url);\n for (var headerName in customHeaders) {\n if (customHeaders.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, customHeaders[headerName]);\n }\n }\n xhr.send();\n } catch (e) {\n console.log(e.message);\n }\n } else if (method === 'POST') {\n // retry params\n let retries = 0;\n let maxRetries = 5;\n\n // send request\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }\n },\n\n xhrOnLoad: function(xhr, userStorageService, resolve) {\n try {\n let parsedXhrResponse = JSON.parse(xhr.response);\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) {\n userStorageService.setSettings(xhr.response);\n }\n\n resolve(parsedXhrResponse);\n } catch (err) {\n console.error(err);\n }\n },\n\n xhrOnError: function(xhr, reject) {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${\n xhr.status\n }`;\n\n console.error(error);\n reject(error);\n }\n};\n\nmodule.exports = XhrUtil;\n","(function(){\n var _global = this;\n\n /**\n * JS Implementation of MurmurHash2\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV2(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k =\n ((str.charCodeAt(i) & 0xff)) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24);\n\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n };\n\n /**\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV3(key, seed) {\n var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n remainder = key.length & 3; // key.length % 4\n bytes = key.length - remainder;\n h1 = seed;\n c1 = 0xcc9e2d51;\n c2 = 0x1b873593;\n i = 0;\n\n while (i < bytes) {\n k1 =\n ((key.charCodeAt(i) & 0xff)) |\n ((key.charCodeAt(++i) & 0xff) << 8) |\n ((key.charCodeAt(++i) & 0xff) << 16) |\n ((key.charCodeAt(++i) & 0xff) << 24);\n ++i;\n\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n case 1: k1 ^= (key.charCodeAt(i) & 0xff);\n\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= k1;\n }\n\n h1 ^= key.length;\n\n h1 ^= h1 >>> 16;\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= h1 >>> 13;\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n h1 ^= h1 >>> 16;\n\n return h1 >>> 0;\n }\n\n var murmur = MurmurHashV3;\n murmur.v2 = MurmurHashV2;\n murmur.v3 = MurmurHashV3;\n\n if (typeof(module) != 'undefined') {\n module.exports = murmur;\n } else {\n var _previousRoot = _global.murmur;\n murmur.noConflict = function() {\n _global.murmur = _previousRoot;\n return murmur;\n }\n _global.murmur = murmur;\n }\n}());\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/**\n * Convert a validation result to an iterable of failures.\n */\nfunction* toFailures(result, context) {\n if (result === true) ; else if (result === false) {\n yield context.fail();\n } else {\n yield* result;\n }\n}\n/**\n * Shifts (removes and returns) the first value from the `input` iterator.\n * Like `Array.prototype.shift()` but for an `Iterator`.\n */\n\nfunction iteratorShift(input) {\n const {\n done,\n value\n } = input.next();\n return done ? undefined : value;\n}\n\n/**\n * `Struct` objects encapsulate the schema for a specific data type (with\n * optional coercion). You can then use the `assert`, `is` or `validate` helpers\n * to validate unknown data against a struct.\n */\n\nclass Struct {\n constructor(props) {\n const {\n type,\n schema,\n coercer = value => value,\n validator = () => [],\n refiner = () => []\n } = props;\n this.type = type;\n this.schema = schema;\n this.coercer = coercer;\n this.validator = validator;\n this.refiner = refiner;\n }\n\n}\n/**\n * `StructError` objects are thrown (or returned) by Superstruct when its\n * validation fails. The error represents the first error encountered during\n * validation. But they also have an `error.failures` property that holds\n * information for all of the failures encountered.\n */\n\nclass StructError extends TypeError {\n constructor(failure, moreFailures) {\n const {\n path,\n value,\n type,\n branch\n } = failure,\n rest = _objectWithoutProperties(failure, [\"path\", \"value\", \"type\", \"branch\"]);\n\n const message = `Expected a value of type \\`${type}\\`${path.length ? ` for \\`${path.join('.')}\\`` : ''} but received \\`${JSON.stringify(value)}\\`.`;\n let failuresResult;\n\n function failures() {\n if (!failuresResult) {\n failuresResult = [failure, ...moreFailures];\n }\n\n return failuresResult;\n }\n\n super(message);\n this.value = value;\n Object.assign(this, rest);\n this.type = type;\n this.path = path;\n this.branch = branch;\n this.failures = failures;\n this.stack = new Error().stack;\n this.__proto__ = StructError.prototype;\n }\n\n}\n/**\n * Assert that a value passes a `Struct`, throwing if it doesn't.\n */\n\nfunction assert(value, struct) {\n const result = validate(value, struct);\n\n if (result[0]) {\n throw result[0];\n }\n}\n/**\n * Coerce a value with the coercion logic of `Struct` and validate it.\n */\n\nfunction coerce(value, struct) {\n const ret = struct.coercer(value);\n assert(ret, struct);\n return ret;\n}\n/**\n * Check if a value passes a `Struct`.\n */\n\nfunction is(value, struct) {\n const result = validate(value, struct);\n return !result[0];\n}\n/**\n * Validate a value against a `Struct`, returning an error if invalid.\n */\n\nfunction validate(value, struct, coercing = false) {\n if (coercing) {\n value = struct.coercer(value);\n }\n\n const failures = check(value, struct);\n const failure = iteratorShift(failures);\n\n if (failure) {\n const error = new StructError(failure, failures);\n return [error, undefined];\n } else {\n return [undefined, value];\n }\n}\n/**\n * Check a value against a `Struct`, returning an iterable of failures.\n */\n\nfunction* check(value, struct, path = [], branch = []) {\n const {\n type\n } = struct;\n const ctx = {\n value,\n type,\n branch,\n path,\n\n fail(props = {}) {\n return _objectSpread2({\n value,\n type,\n path,\n branch: [...branch, value]\n }, props);\n },\n\n check(v, s, parent, key) {\n const p = parent !== undefined ? [...path, key] : path;\n const b = parent !== undefined ? [...branch, parent] : branch;\n return check(v, s, p, b);\n }\n\n };\n const failures = toFailures(struct.validator(value, ctx), ctx);\n const failure = iteratorShift(failures);\n\n if (failure) {\n yield failure;\n yield* failures;\n } else {\n yield* toFailures(struct.refiner(value, ctx), ctx);\n }\n}\n\n/**\n * Augment a `Struct` to add an additional coercion step to its input.\n */\n\nfunction coercion(struct, coercer) {\n const fn = struct.coercer;\n return new Struct(_objectSpread2(_objectSpread2({}, struct), {}, {\n coercer: value => {\n return fn(coercer(value));\n }\n }));\n}\n/**\n * Augment a struct to coerce a default value for missing values.\n *\n * Note: You must use `coerce(value, Struct)` on the value before validating it\n * to have the value defaulted!\n */\n\nfunction defaulted(S, fallback, strict) {\n return coercion(S, x => {\n const f = typeof fallback === 'function' ? fallback() : fallback;\n\n if (x === undefined) {\n return f;\n }\n\n if (strict !== true && isPlainObject(x) && isPlainObject(f)) {\n const ret = _objectSpread2({}, x);\n\n let changed = false;\n\n for (const key in f) {\n if (ret[key] === undefined) {\n ret[key] = f[key];\n changed = true;\n }\n }\n\n if (changed) {\n return ret;\n }\n }\n\n return x;\n });\n}\n/**\n * Coerce a value to mask its properties to only that defined in the struct.\n */\n\nfunction masked(S) {\n return coercion(S, x => {\n if (!isPlainObject(x)) {\n return x;\n }\n\n const ret = {};\n\n for (const key in S.schema) {\n ret[key] = x[key];\n }\n\n return ret;\n });\n}\n/**\n * Check if a value is a plain object.\n */\n\nfunction isPlainObject(value) {\n if (Object.prototype.toString.call(value) !== '[object Object]') {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Augment a string or array struct to constrain its length to zero.\n */\n\nfunction empty(S) {\n return refinement(S, `${S.type} & Empty`, value => {\n return value.length === 0;\n });\n}\n/**\n * Augment a string or array struct to constrain its length to being between a\n * minimum and maximum size.\n */\n\nfunction length(S, min, max) {\n return refinement(S, `${S.type} & Length<${min},${max}>`, value => {\n return min < value.length && value.length < max;\n });\n}\n/**\n * Refine a string struct to match a specific regexp pattern.\n */\n\nfunction pattern(S, regexp) {\n return refinement(S, `${S.type} & Pattern<${regexp.source}>`, value => {\n return regexp.test(value);\n });\n}\n/**\n * Augment a `Struct` to add an additional refinement to the validation.\n */\n\nfunction refinement(struct, type, refiner) {\n const fn = struct.refiner;\n return new Struct(_objectSpread2(_objectSpread2({}, struct), {}, {\n type,\n\n *refiner(value, fail) {\n yield* toFailures(fn(value, fail), fail);\n yield* toFailures(refiner(value, fail), fail);\n }\n\n }));\n}\n\n/**\n * Validate any value.\n */\n\nfunction any() {\n return struct('any', () => true);\n}\nfunction array(Element) {\n return new Struct({\n type: `Array<${Element ? Element.type : 'unknown'}>`,\n schema: Element,\n coercer: value => {\n return Element && Array.isArray(value) ? value.map(v => coerce(v, Element)) : value;\n },\n\n *validator(value, ctx) {\n if (!Array.isArray(value)) {\n yield ctx.fail();\n return;\n }\n\n if (Element) {\n for (const [i, v] of value.entries()) {\n yield* ctx.check(v, Element, value, i);\n }\n }\n }\n\n });\n}\n/**\n * Validate that boolean values.\n */\n\nfunction boolean() {\n return struct('boolean', value => {\n return typeof value === 'boolean';\n });\n}\n/**\n * Validate that `Date` values.\n *\n * Note: this also ensures that the value is *not* an invalid `Date` object,\n * which can occur when parsing a date fails but still returns a `Date`.\n */\n\nfunction date() {\n return struct('Date', value => {\n return value instanceof Date && !isNaN(value.getTime());\n });\n}\n/**\n * Validate that a value dynamically, determing which struct to use at runtime.\n */\n\nfunction dynamic(fn) {\n return struct('Dynamic<...>', (value, ctx) => {\n return ctx.check(value, fn(value, ctx));\n });\n}\nfunction enums(values) {\n return struct(`Enum<${values.map(toLiteralString)}>`, value => {\n return values.includes(value);\n });\n}\n/**\n * Validate that a value is a function.\n */\n\nfunction func() {\n return struct('Function', value => {\n return typeof value === 'function';\n });\n}\n/**\n * Validate that a value is an instance of a class.\n */\n\nfunction instance(Class) {\n return struct(`InstanceOf<${Class.name}>`, value => {\n return value instanceof Class;\n });\n}\nfunction intersection(Structs) {\n return struct(Structs.map(s => s.type).join(' & '), function* (value, ctx) {\n for (const S of Structs) {\n yield* ctx.check(value, S);\n }\n });\n}\n/**\n * Validate a value lazily, by constructing the struct right before the first\n * validation. This is useful for cases where you want to have self-referential\n * structs for nested data structures.\n */\n\nfunction lazy(fn) {\n let S;\n return struct('Lazy<...>', (value, ctx) => {\n if (!S) {\n S = fn();\n }\n\n return ctx.check(value, S);\n });\n}\nfunction literal(constant) {\n return struct(`Literal<${toLiteralString(constant)}>`, value => {\n return value === constant;\n });\n}\n/**\n * Validate that a value is a map with specific key and value entries.\n */\n\nfunction map(Key, Value) {\n return struct(`Map<${Key.type},${Value.type}>`, function* (value, ctx) {\n if (!(value instanceof Map)) {\n yield ctx.fail();\n return;\n }\n\n for (const [k, v] of value.entries()) {\n yield* ctx.check(k, Key, value, k);\n yield* ctx.check(v, Value, value, k);\n }\n });\n}\n/**\n * Validate that a value always fails.\n */\n\nfunction never() {\n return struct('never', () => false);\n}\n/**\n * Augment a struct to make it accept `null` values.\n */\n\nfunction nullable(S) {\n return new Struct({\n type: `${S.type} | null`,\n schema: S.schema,\n validator: (value, ctx) => {\n return value === null || ctx.check(value, S);\n }\n });\n}\n/**\n * Validate that a value is a number.\n */\n\nfunction number() {\n return struct(`number`, value => {\n return typeof value === 'number' && !isNaN(value);\n });\n}\nfunction object(Structs) {\n const knowns = Structs ? Object.keys(Structs) : [];\n const Never = never();\n return new Struct({\n type: Structs ? `Object<{${knowns.join(',')}}>` : 'Object',\n schema: Structs ? Structs : null,\n coercer: Structs ? createObjectCoercer(Structs) : x => x,\n\n *validator(value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n if (Structs) {\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n\n for (const key of unknowns) {\n const v = value[key];\n yield* ctx.check(v, Never, value, key);\n }\n }\n }\n\n });\n}\n/**\n * Augment a struct to make it optionally accept `undefined` values.\n */\n\nfunction optional(S) {\n return new Struct({\n type: `${S.type}?`,\n schema: S.schema,\n validator: (value, ctx) => {\n return value === undefined || ctx.check(value, S);\n }\n });\n}\n/**\n * Validate that a partial object with specific entry values.\n */\n\nfunction partial(Structs) {\n if (Structs instanceof Struct) {\n Structs = Structs.schema;\n }\n\n const knowns = Object.keys(Structs);\n const Never = never();\n return new Struct({\n type: `Partial<{${knowns.join(',')}}>`,\n schema: Structs,\n coercer: createObjectCoercer(Structs),\n\n *validator(value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n\n if (!(key in value)) {\n continue;\n }\n\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n\n for (const key of unknowns) {\n const v = value[key];\n yield* ctx.check(v, Never, value, key);\n }\n }\n\n });\n}\n/**\n * Validate that a value is a record with specific key and\n * value entries.\n */\n\nfunction record(Key, Value) {\n return struct(`Record<${Key.type},${Value.type}>`, function* (value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n for (const k in value) {\n const v = value[k];\n yield* ctx.check(k, Key, value, k);\n yield* ctx.check(v, Value, value, k);\n }\n });\n}\n/**\n * Validate that a set of values matches a specific type.\n */\n\nfunction set(Element) {\n return struct(`Set<${Element.type}>`, (value, ctx) => {\n if (!(value instanceof Set)) {\n return false;\n }\n\n for (const val of value) {\n const [failure] = ctx.check(val, Element);\n\n if (failure) {\n return false;\n }\n }\n\n return true;\n });\n}\n/**\n * Validate that a value is a string.\n */\n\nfunction string() {\n return struct('string', value => {\n return typeof value === 'string';\n });\n}\n/**\n * Define a `Struct` instance with a type and validation function.\n */\n\nfunction struct(name, validator) {\n return new Struct({\n type: name,\n validator,\n schema: null\n });\n}\nfunction tuple(Elements) {\n const Never = never();\n return struct(`[${Elements.map(s => s.type).join(',')}]`, function* (value, ctx) {\n if (!Array.isArray(value)) {\n yield ctx.fail();\n return;\n }\n\n for (const [index, Element] of Elements.entries()) {\n const v = value[index];\n yield* ctx.check(v, Element, value, index);\n }\n\n if (value.length > Elements.length) {\n const index = Elements.length;\n const v = value[index];\n yield* ctx.check(v, Never, value, index);\n }\n });\n}\n/**\n * Validate that a value matches a specific strutural interface, like the\n * structural typing that TypeScript uses.\n */\n\nfunction type(Structs) {\n const keys = Object.keys(Structs);\n return struct(`Type<{${keys.join(',')}}>`, function* (value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n for (const key of keys) {\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n });\n}\nfunction union(Structs) {\n return struct(`${Structs.map(s => s.type).join(' | ')}`, function* (value, ctx) {\n for (const S of Structs) {\n const [...failures] = ctx.check(value, S);\n\n if (failures.length === 0) {\n return;\n }\n }\n\n yield ctx.fail();\n });\n}\n/**\n * Convert a value to a literal string.\n */\n\nfunction toLiteralString(value) {\n return typeof value === 'string' ? `\"${value.replace(/\"/g, '\"')}\"` : `${value}`;\n}\n/**\n * Coerce the values of an object-like struct.\n */\n\n\nfunction createObjectCoercer(Structs) {\n const knowns = Object.keys(Structs);\n return value => {\n if (typeof value !== 'object' || value == null) {\n return value;\n }\n\n const ret = {};\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n const Value = Structs[key];\n const v = value[key];\n ret[key] = coerce(v, Value);\n }\n\n for (const key of unknowns) {\n ret[key] = value[key];\n }\n\n return ret;\n };\n}\n\nexport { Struct, StructError, any, array, assert, boolean, coerce, coercion, date, defaulted, dynamic, empty, enums, func, instance, intersection, is, lazy, length, literal, map, masked, never, nullable, number, object, optional, partial, pattern, record, refinement, set, string, struct, tuple, type, union, validate };\n//# sourceMappingURL=index.es.js.map\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\n'use strict';\n\nfunction f(s, x, y, z) {\n switch (s) {\n case 0: return (x & y) ^ (~x & z);\n case 1: return x ^ y ^ z;\n case 2: return (x & y) ^ (x & z) ^ (y & z);\n case 3: return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return (x << n) | (x>>> (32 - n));\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof(bytes) == 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n bytes = new Array(msg.length);\n for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i);\n }\n\n bytes.push(0x80);\n\n var l = bytes.length/4 + 2;\n var N = Math.ceil(l/16);\n var M = new Array(N);\n\n for (var i=0; i>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = (H[0] + a) >>> 0;\n H[1] = (H[1] + b) >>> 0;\n H[2] = (H[2] + c) >>> 0;\n H[3] = (H[3] + d) >>> 0;\n H[4] = (H[4] + e) >>> 0;\n }\n\n return [\n H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff,\n H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff,\n H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff,\n H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff,\n H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff\n ];\n}\n\nmodule.exports = sha1;\n","var bytesToUuid = require('./bytesToUuid');\n\nfunction uuidToBytes(uuid) {\n // Note: We assume we're being passed a valid uuid string\n var bytes = [];\n uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) {\n bytes.push(parseInt(hex, 16));\n });\n\n return bytes;\n}\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n var bytes = new Array(str.length);\n for (var i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n return bytes;\n}\n\nmodule.exports = function(name, version, hashfunc) {\n var generateUUID = function(value, namespace, buf, offset) {\n var off = buf && offset || 0;\n\n if (typeof(value) == 'string') value = stringToBytes(value);\n if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace);\n\n if (!Array.isArray(value)) throw TypeError('value must be an array of bytes');\n if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values');\n\n // Per 4.3\n var bytes = hashfunc(namespace.concat(value));\n bytes[6] = (bytes[6] & 0x0f) | version;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n if (buf) {\n for (var idx = 0; idx < 16; ++idx) {\n buf[off+idx] = bytes[idx];\n }\n }\n\n return buf || bytesToUuid(bytes);\n };\n\n // Function#name is not settable on some platforms (#270)\n try {\n generateUUID.name = name;\n } catch (err) {\n }\n\n // Pre-defined namespaces, per Appendix C\n generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n\n return generateUUID;\n};\n","var v35 = require('./lib/v35.js');\nvar sha1 = require('./lib/sha1');\nmodule.exports = v35('v5', 0x50, sha1);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/vwo-javascript-sdk.min.js b/dist/vwo-javascript-sdk.min.js index 936b934..939cbf8 100644 --- a/dist/vwo-javascript-sdk.min.js +++ b/dist/vwo-javascript-sdk.min.js @@ -1,5 +1,5 @@ /*! - * vwo-javascript-sdk - v1.69.0 + * vwo-javascript-sdk - v1.70.0 * URL - https://github.com/wingify/vwo-node-sdk * * Copyright 2019-2022 Wingify Software Pvt. Ltd. @@ -22,5 +22,5 @@ * 3. uuid - ^3.3.2 * 4. vwo-sdk-log-messages - ^0.12.0 */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.vwoSdk=t():e.vwoSdk=t()}(this,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=25)}([function(e,t,n){var i=n(32);e.exports=i},function(e,t){var n={_toStringValue:function(e){return Object.prototype.toString.call(e)},isNumber:function(e){return"[object Number]"===n._toStringValue(e)},isString:function(e){return"[object String]"===n._toStringValue(e)},isObject:function(e){return"[object Object]"===n._toStringValue(e)},isFunction:function(e){return"[object Function]"===n._toStringValue(e)},isBoolean:function(e){return"[object Boolean]"===n._toStringValue(e)},isPromise:function(e){return"[object Promise]"===n._toStringValue(e)},isUndefined:function(e){return"[object Undefined]"===n._toStringValue(e)||void 0===e},isNull:function(e){return"[object Null]"===n._toStringValue(e)},isArray:function(e){return"[object Array]"===n._toStringValue(e)}};e.exports=n},function(e,t){e.exports={INDEX:"".concat("lib","/index"),VWO:"".concat("lib","/VWO"),API:"".concat("lib","/api/index"),Activate:"".concat("lib","/api/activate"),GetVariation:"".concat("lib","/api/getVariation"),Track:"".concat("lib","/api/track"),IsFeatureEnabled:"".concat("lib","/api/isFeatureEnabled"),GetFeatureVariableValue:"".concat("lib","/api/getFeatureVariableValue"),Push:"".concat("lib","/api/push"),SegmentEvaluator:"".concat("lib/core","/SegmentEvaluator"),BucketingService:"".concat("lib/core","/BucketingService"),VariationDecider:"".concat("lib/core","/VariationDecider"),ConsoleLogManager:"".concat("lib/services","/ConsoleLogManager"),EventQueue:"".concat("lib/services","/EventQueue"),LoggingManager:"".concat("lib/services","/LoggingManager"),SettingsFileManager:"".concat("lib/services","/SettingsFileManager"),BatchEventsQueue:"".concat("lib/services","/BatchEventsQueue"),CampaignUtil:"".concat("lib/util","/CampaignUtil"),DataTypeUtil:"".concat("lib/util","/DataTypeUtil"),EventDispatcher:"".concat("lib/util","/EventDispatcher"),EventDispatcherUtil:"".concat("lib/util","/EventDispatcherUtil"),FeatureUtil:"".concat("lib/util","/FeatureUtil"),Functionutil:"".concat("lib/util","/Functionutil"),ImpressionUtil:"".concat("lib/util","/ImpressionUtil"),UuidUtil:"".concat("lib/util","/UuidUtil"),ValidateUtil:"".concat("lib/util","/ValidateUtil"),DecisionUtil:"".concat("lib/util","/DecisionUtils"),HttpHandlerUtil:"".concat("lib/util","/HttpHandlerUtil"),HttpImageUtil:"".concat("lib/util","/HttpImageUtil"),HttpXMLUtil:"".concat("lib/util","/HttpXMLUtil"),UsageStatsUtil:"".concat("lib/services","/UsageStats")}},function(e,t,n){var i={};i={name:"vwo-javascript-sdk",version:"1.69.0"},e.exports={SDK_NAME:i.name,SDK_VERSION:i.version,PLATFORM:"server",SEED_VALUE:1,MAX_TRAFFIC_PERCENT:100,MAX_TRAFFIC_VALUE:1e4,MAX_EVENTS_PER_REQUEST:5e3,DEFAULT_EVENTS_PER_REQUEST:100,DEFAULT_REQUEST_TIME_INTERVAL:600,STATUS_RUNNING:"RUNNING",SEED_URL:"https://vwo.com",HTTP_PROTOCOL:"http://",HTTPS_PROTOCOL:"https://",SDK_QUERY_PARAM:"sdk",SDK_VERSION_QUERY_PARAM:"sdk-v"}},function(e,t,n){var i={cloneObject:function(e){return e?JSON.parse(JSON.stringify(e)):e},getRandomNumber:function(){return Math.random()},getCurrentUnixTimestamp:function(){return Math.ceil(+new Date/1e3)},getCurrentUnixTimestampInMillis:function(){return+new Date},matchWithRegex:function(e,t){try{return e.match(new RegExp(t))}catch(e){var i=n(0),r=n(2),a=i.getLogger(),o=i.LogLevelEnum,s=i.LogMessageEnum,l=i.LogMessageUtil,u=r.FunctionUtil;return a.log(o.ERROR,l.build(s.ERROR_MESSAGES.SEGMENTATION_REGEX_CREATION_FAILED,{file:u,regex:t})),null}},getCurrentTime:function(){return(new Date).toISOString()},convertObjectKeysToString:function(e,t){var n="";for(var i in t=t||[],e)e.hasOwnProperty(i)&&-1===t.indexOf(i)&&(n+=i+"="+e[i]+"&");return n},objectValues:function(e){var t=[];for(var n in e)t.push(e[n]);return t}};e.exports=i},function(e,t){e.exports={LAUNCH:"launch",ACTIVATE:"activate",GET_VARIATION_NAME:"getVariation",TRACK:"track",IS_FEATURE_ENABLED:"isFeatureEnabled",GET_FEATURE_VARIABLE_VALUE:"getFeatureVariableValue",PUSH:"push"}},function(e,t,n){var i;function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=r(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==r(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var o=n(1),s=n(30),l=n(5),u=n(9),c=(a(i={},l.ACTIVATE,(function(e){var t=e.campaignKey,n=e.userId,i=e.customVariables,r=void 0===i?{}:i,a=e.variationTargetingVariables,o=void 0===a?{}:a,l=e.userStorageData,u=void 0===l?{}:l,c=e.shouldTrackReturningUser,g=void 0!==c&&c,f=e.metaData,E=void 0===f?{}:f;return[{key:"campaignKey",value:t,type:s.STRING},{key:"userId",value:n,type:s.STRING},{key:"customVariables",value:r,type:s.OBJECT},{key:"variationTargetingVariables",value:o,type:s.OBJECT},{key:"userStorageData",value:u,type:s.OBJECT},{key:"shouldTrackReturningUser",value:g,type:s.BOOLEAN},{key:"metaData",value:E,type:s.OBJECT}]})),a(i,l.TRACK,(function(e){var t=e.campaignKey,n=e.userId,i=e.goalIdentifier,r=e.customVariables,a=void 0===r?{}:r,o=e.variationTargetingVariables,l=void 0===o?{}:o,c=e.userStorageData,g=void 0===c?{}:c,f=e.goalTypeToTrack,E=void 0===f?u.ALL:f,d=e.shouldTrackReturningUser,S=void 0!==d&&d,p=e.metaData,v=void 0===p?{}:p;return[{key:"campaignKey",value:t,type:s.STRING_NULL_UNDEFINED_ARRAY},{key:"userId",value:n,type:s.STRING},{key:"goalIdentifier",value:i,type:s.STRING},{key:"customVariables",value:a,type:s.OBJECT},{key:"variationTargetingVariables",value:l,type:s.OBJECT},{key:"userStorageData",value:g,type:s.OBJECT},{key:"goalTypeToTrack",value:E,type:s.STRING},{key:"shouldTrackReturningUser",value:S,type:s.BOOLEAN},{key:"metaData",value:v,type:s.OBJECT}]})),a(i,l.IS_FEATURE_ENABLED,(function(e){var t=e.campaignKey,n=e.userId,i=e.customVariables,r=void 0===i?{}:i,a=e.variationTargetingVariables,o=void 0===a?{}:a,l=e.userStorageData,u=void 0===l?{}:l,c=e.shouldTrackReturningUser,g=void 0!==c&&c,f=e.metaData,E=void 0===f?{}:f;return[{key:"campaignKey",value:t,type:s.STRING},{key:"userId",value:n,type:s.STRING},{key:"customVariables",value:r,type:s.OBJECT},{key:"variationTargetingVariables",value:o,type:s.OBJECT},{key:"userStorageData",value:u,type:s.OBJECT},{key:"shouldTrackReturningUser",value:g,type:s.BOOLEAN},{key:"metaData",value:E,type:s.OBJECT}]})),a(i,l.GET_FEATURE_VARIABLE_VALUE,(function(e){var t=e.campaignKey,n=e.variableKey,i=e.userId,r=e.customVariables,a=void 0===r?{}:r,o=e.variationTargetingVariables,l=void 0===o?{}:o,u=e.userStorageData,c=void 0===u?{}:u,g=e.metaData,f=void 0===g?{}:g;return[{key:"campaignKey",value:t,type:s.STRING},{key:"variableKey",value:n,type:s.STRING},{key:"userId",value:i,type:s.STRING},{key:"customVariables",value:a,type:s.OBJECT},{key:"variationTargetingVariables",value:l,type:s.OBJECT},{key:"userStorageData",value:c,type:s.OBJECT},{key:"metaData",value:f,type:s.OBJECT}]})),a(i,l.PUSH,(function(e){var t=e.tagKey,n=e.tagValue,i=e.userId,r=e.customDimensionMap;return[{key:"tagKey",value:t,type:s.STRING},{key:"tagValue",value:n,type:s.STRING},{key:"userId",value:i,type:s.STRING},{key:"customDimensionMap",value:r,type:s.OBJECT}]})),i);c[l.GET_VARIATION_NAME]=c[l.ACTIVATE];var g={isValidValue:function(e){return!(void 0===e||!e)},isValidString:function(e){return g.isValidValue(e)&&o.isString(e)},isValidNumber:function(e){return g.isValidValue(e)&&o.isNumber(e)},isValidFunction:function(e){return g.isValidValue(e)&&o.isFunction(e)},isValidBoolean:function(e){return void 0!==e&&o.isBoolean(e)},isValidObject:function(e){return void 0!==e&&o.isObject(e)},areValidParamsForAPIMethod:function(e){for(var t=c[e.method](e),n=[],i=0;i0},setVariationAllocation:function(e){for(var t=e.variations.length,n=0,i=0;n6&&void 0!==arguments[6]?arguments[6]:{},c=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{},S=arguments.length>8?arguments[8]:void 0,p=arguments.length>9?arguments[9]:void 0,A=arguments.length>10?arguments[10]:void 0,O=arguments.length>11?arguments[11]:void 0,m=arguments.length>12&&void 0!==arguments[12]?arguments[12]:"",R=_.generateFor(r,t.accountId);d.log(g.DEBUG,E.build(f.DEBUG_MESSAGES.USER_UUID,{file:u.UuidUtil,userId:r,accountId:t.accountId,uuid:R}));var b={campaignId:n.id,campaignKey:i,campaignType:n.type,campaignName:n.name,customVariables:s,event:v.DECISION_TYPES.CAMPAIGN_DECISION,goalIdentifier:O,isForcedVariationEnabled:n.isForcedVariationEnabled,sdkVersion:I.SDK_VERSION,source:m,userId:r,variationTargetingVariables:l,vwoUserId:R},T=a.isPartOfGroup(t,n.id),N=T.groupId,h=T.groupName;N&&(b.groupId=N,b.groupName=h),l=Object.assign({},l,{_vwoUserId:n.isUserListEnabled?R:r});var U=y._checkForWhitelisting(e,n,i,r,l,b);return U?o.isPromise(U)?U.then((function(e){if(Object.keys(e).length>0)return e})):U:e.asyncStorageConfig?new Promise((function(a){return y._checkForUserStorage(e,t,n,i,r,c,p,b).then((function(u){if(u&&o.isObject(u)&&Object.keys(u).length>0)a(Object.assign({},{isStoredVariation:!0},u));else if(A)a(Object.assign({}));else{var g=y.evaluateAndGetVariationWithoutStorage(e,t,n,i,r,s,l,c,S,p,O,b,N,h);a(g)}}))})):y._checkForUserStorage(e,t,n,i,r,c,p,b)||y.evaluateAndGetVariationWithoutStorage(e,t,n,i,r,s,l,c,S,p,O,b,N,h)},evaluateAndGetVariationWithoutStorage:function(e,t,n,i,s,l,u,c,S,p,v,_,I,A){if(!y._checkForPreSegmentation(n,i,s,l,_)||!r.isUserPartOfCampaign(s,n,!0))return{};if(I){var O=a.getGroupCampaigns(t,I);if(0===O.length)return{};var R=y._checkForStorageAndWhitelisting(e,t,A,O,n,s,c,u,p);if(R)return d.log(g.INFO,E.build(f.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER,{userId:s,groupName:A,file:m,campaignKey:i})),o.isPromise(R)?new Promise((function(e){e(Object.assign({}))})):{};var b="",T="",N=y.getEligbleCampaigns(O,s,l),h=N.eligibleCampaigns,U=N.inEligibleCampaigns;U.forEach((function(e){b=b+e.key+","})),h.forEach((function(e){T=T+e.key+","})),d.log(g.DEBUG,E.build(f.DEBUG_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS,{userId:s,groupName:A,file:m,eligibleCampaignKeys:T.slice(0,-1),inEligibleText:""===b?"no campaigns":"campaigns: ".concat(b.slice(0,-1))})),d.log(g.INFO,E.build(f.INFO_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS,{userId:s,groupName:A,file:m,noOfEligibleCampaigns:h.length,noOfGroupCampaigns:U.length+h.length}));var G=void 0!==t.groups[I].et?t.groups[I].et:1;return 1===h.length?y.evaluateTrafficAndGetVariation(e,h[0],h[0].key,s,S,v,_):1===G?y._normalizeAndFindWinningCampaign(e,n,h,s,A,I,S,v,_):y._advancedAlgoFindWinningCampaign(e,t,n,h,s,A,I,S,v,_)}return y.evaluateTrafficAndGetVariation(e,n,i,s,S,v,_)},_evaluateWhitelisting:function(e,t,n,i){var l,u,p=arguments.length>4&&void 0!==arguments[4]&&arguments[4],v=[];if(e.variations.forEach((function(r){!o.isObject(r.segments)||Object.keys(r.segments).length?(o.isObject(r.segments)&&S(r.segments,i,t,n,r.name)?(u=c.PASSED,v.push(s.cloneObject(r))):u=c.FAILED,d.log(g.DEBUG,E.build(f.DEBUG_MESSAGES.SEGMENTATION_STATUS,{campaignKey:t,userId:n,customVariables:JSON.stringify(i),file:m,status:u,segmentationType:R,variation:e.type===A.FEATURE_ROLLOUT&&u===c.PASSED?"and becomes part of the rollout":"for ".concat(r.name)}),p)):d.log(g.DEBUG,E.build(f.DEBUG_MESSAGES.SEGMENTATION_SKIPPED,{campaignKey:t,userId:n,file:m,variation:e.type===A.FEATURE_ROLLOUT?"":", for ".concat(r.name)}),p)})),v.length>1){a.scaleVariationWeights(v);for(var _=0,I=0;_0?(c=!0,d.log(g.INFO,E.build(f.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE,{file:m,campaignKey:i.key,groupName:n,userId:a,type:"user storage"})),!0):void 0}})),e.asyncStorageConfig?new Promise((function(e){e(c)})):c},_checkForPreSegmentation:function(e,t,n,i,r){var a;return o.isObject(e.segments)&&!Object.keys(e.segments).length?(d.log(g.DEBUG,E.build(f.DEBUG_MESSAGES.SEGMENTATION_SKIPPED,{campaignKey:t,userId:n,file:m}),!r),!0):(a=S(e.segments,i,t,n,!r)?c.PASSED:c.FAILED,d.log(g.INFO,E.build(f.INFO_MESSAGES.SEGMENTATION_STATUS,{campaignKey:t,userId:n,customVariables:JSON.stringify(i||{}),file:m,status:a,segmentationType:b,variation:""}),!r),a!==c.FAILED)},evaluateTrafficAndGetVariation:function(e,t,n,r,a,o,s){var l,u,c,S=i.getVariationAllotted(r,t,e.settingsFile.accountId);return l=S.variation,u=S.variationName,c=S.variationId,d.log(g.INFO,E.build(f.INFO_MESSAGES.USER_VARIATION_ALLOCATION_STATUS,{file:m,campaignKey:n,userId:r,status:u?"got variation:".concat(u):"did not get any variation"})),u&&y._saveUserData(e,t,u,r,a,o),p.execute(Object.assign({fromUserStorageService:!1,isUserWhitelisted:!1},t.type===A.FEATURE_ROLLOUT?{isFeatureEnabled:!!u}:{variationName:u,variationId:c},s)),{variation:l&&l.variation,variationName:u,variationId:c}},_checkForWhitelisting:function(e,t,n,i,r,a){var o,s,l;if(t.isForcedVariationEnabled){var u,S=y._evaluateWhitelisting(t,n,i,r,!a);if(S?(o=c.PASSED,u=S.variationName):(o=c.FAILED,u=""),d.log(g.INFO,E.build(f.INFO_MESSAGES.SEGMENTATION_STATUS,{campaignKey:n,userId:i,customVariables:JSON.stringify(r),file:m,status:o,segmentationType:R,variation:t.type===A.FEATURE_ROLLOUT?"":"for variation: ".concat(u)}),!a),S)return s=S.variationName,l=S.variationId,a&&p.execute(Object.assign({fromUserStorageService:!1,isUserWhitelisted:!!s},t.type===A.FEATURE_ROLLOUT?{isFeatureEnabled:!!s}:{variationName:s,variationId:l},a)),e.asyncStorageConfig?new Promise((function(e){return e(S)})):S}else d.log(g.DEBUG,E.build(f.DEBUG_MESSAGES.WHITELISTING_SKIPPED,{campaignKey:n,userId:i,file:m}),!a)},_checkForUserStorage:function(e,t,n,i,r,a,o,s){var l;return e.asyncStorageConfig?y._getStoredUserData(e,r,i,a,!s).then((function(a){return a=a||{variationName:null,goalIdentifier:null},y._processAfterGettingFromStorage(e,t,n,i,r,o,s,a)})):(l=y._getStoredUserData(e,r,i,a,!s),y._processAfterGettingFromStorage(e,t,n,i,r,o,s,l))},_processAfterGettingFromStorage:function(e,t,n,i,r,s,l,u){var c,S,v=u.variationName,_=u.goalIdentifier;return u&&u.campaignKey&&v?c=a.getCampaignVariation(t,i,v):d.log(g.DEBUG,E.build(f.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NO_STORED_DATA,{file:m,campaignKey:i,userId:r}),!l),c?(v=c.name,S=c.id,d.log(g.INFO,E.build(f.INFO_MESSAGES.GOT_STORED_VARIATION,{file:m,campaignKey:i,userId:r,variationName:v}),!l),l&&p.execute(Object.assign({fromUserStorageService:!!v,isUserWhitelisted:!1},n.type===A.FEATURE_ROLLOUT?{isFeatureEnabled:!!v}:{variationName:v,variationId:S},l)),{variation:c,variationName:v,variationId:S,storedGoalIdentifier:_,isStoredVariation:!0}):o.isUndefined(e.userStorageService)||s||!o.isUndefined(c)?void 0:(d.log(g.WARN,E.build(f.WARNING_MESSAGES.CAMPAIGN_NOT_ACTIVATED,{file:m,campaignKey:i,userId:r,api:e.apiName}),!l),d.log(g.INFO,E.build(f.INFO_MESSAGES.CAMPAIGN_NOT_ACTIVATED,{file:m,campaignKey:i,userId:r,reason:e.apiName===O.TRACK?"track it":"get the decision/value"}),!l),{})},getEligbleCampaigns:function(e,t,n){var i=[],a=[];return e.forEach((function(e){y._checkForPreSegmentation(e,e.key,t,n)&&r.isUserPartOfCampaign(t,e,!0)?(e=s.cloneObject(e),i.push(e)):a.push(e)})),{eligibleCampaigns:i,inEligibleCampaigns:a}},_normalizeAndFindWinningCampaign:function(e,t,n,i,o,s,l,u,c){n.forEach((function(e){e.weight=Math.floor(100/n.length)})),a.setCampaignAllocation(n);var S=r._getVariation(n,r.calculateBucketValue(a.getBucketingSeed(i,void 0,s)));return d.log(g.INFO,E.build(f.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN,{userId:i,groupName:o,file:m,campaignKey:S.key})),S.id===t.id?y.evaluateTrafficAndGetVariation(e,S,S.key,i,l,u,c):(d.log(g.INFO,E.build(f.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER,{userId:i,groupName:o,file:m,campaignKey:t.key})),{})},_advancedAlgoFindWinningCampaign:function(e,t,n,i,o,l,u,c,S,p){for(var v=null,_=!1,I=void 0!==t.groups[u].p?t.groups[u].p:{},A=void 0!==t.groups[u].wt?t.groups[u].wt:{},O=0;O0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).length},getKeyValue:function(e){if(n.areObjectKeys(e)){var t=Object.keys(e)[0];return{key:t,value:e[t]}}},objectValues:function(e){return Object.keys(e).map((function(t){return e[t]}))}};e.exports=n},function(e,t,n){function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=i(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a=n(3),o=n(14),s=n(9),l=n(20),u=n(6),c=n(4),g=n(0),f=n(2),E=n(1),d=g.LogLevelEnum,S=g.LogMessageEnum,p=g.LogMessageUtil,v=g.getLogger(),_=n(21);function I(e,t){var n=e.accountId;return Object.assign({},function(e,t){return{sId:c.getCurrentUnixTimestamp(),u:l.generateFor(t,e.accountId)}}(e,t),A.getReportingProperties(e),{account_id:n,random:c.getRandomNumber(),ap:a.PLATFORM})}var A={buildEventForPushing:function(e,t,n,i){var s=Object.assign({},I(e,i));return s.url=a.HTTPS_PROTOCOL+_.getBaseUrl()+o.PUSH,s.tags=JSON.stringify({u:r({},encodeURIComponent(t),encodeURIComponent(n))}),v.log(d.DEBUG,p.build(S.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH,{file:f.ImpressionUtil,properties:this._getStringifiedLogProperties(s)})),s},buildBatchEventForPushing:function(e,t,n,i){},buildEventForTrackingUser:function(e,t,n,i,r){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"",l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"",u=Object.assign({experiment_id:t,combination:n,visitor_ua:s,visitor_ip:l},I(e,i),r);return u.ed=JSON.stringify({p:"server"}),u.url=a.HTTPS_PROTOCOL+_.getBaseUrl()+o.TRACK_USER,v.log(d.DEBUG,p.build(S.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER,{file:f.ImpressionUtil,properties:this._getStringifiedLogProperties(u)})),u},buildBatchEventForTrackingUser:function(e,t,n,i){},buildEventForTrackingGoal:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},l=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,c=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"",g=arguments.length>7&&void 0!==arguments[7]?arguments[7]:"",E=r.id,A=Object.assign({experiment_id:t,combination:n},I(e,i));return A.visitor_ua=c,A.visitor_ip=g,A.url=a.HTTPS_PROTOCOL+_.getBaseUrl()+o.TRACK_GOAL,A.goal_id=E,r.type===s.REVENUE&&u.isValidValue(l)&&(A.r=l),v.log(d.DEBUG,p.build(S.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL,{file:f.ImpressionUtil,properties:this._getStringifiedLogProperties(A)})),A},buildBatchEventForTrackingGoal:function(e,t,n,i){},getReportingProperties:function(e){var t,n=e.sdkKey;return r(t={},a.SDK_QUERY_PARAM,a.SDK_NAME),r(t,a.SDK_VERSION_QUERY_PARAM,a.SDK_VERSION),r(t,"env",n),t},getEventsBaseProperties:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",s=e.sdkKey,l=Object.assign({en:t,a:e.accountId,env:s,eTime:c.getCurrentUnixTimestampInMillis(),random:c.getRandomNumber(),p:"FS",visitor_ua:i,visitor_ip:r},n);return l.url=a.HTTPS_PROTOCOL+_.getBaseUrl()+o.EVENTS,l},getEventBasePayload:function(e,t,n){var i=l.generateFor(t,e.accountId),r=e.sdkKey,o={vwo_sdkName:a.SDK_NAME,vwo_sdkVersion:a.SDK_VERSION,vwo_envKey:r};return{d:{msgId:"".concat(i,"-").concat(c.getCurrentUnixTimestampInMillis()),visId:i,sessionId:c.getCurrentUnixTimestamp(),event:{props:o,name:n,time:c.getCurrentUnixTimestampInMillis()},visitor:{props:{vwo_fs_environment:r}}}}},getTrackUserPayloadData:function(e,t,n,i,r){var a=this.getEventBasePayload(e,t,n);return a.d.event.props.id=i,a.d.event.props.variation=r,a.d.event.props.isFirst=1,v.log(d.DEBUG,p.build(S.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_USER,{file:f.ImpressionUtil,accountId:e.accountId,userId:t,campaignId:i})),a},getTrackGoalPayloadData:function(e,t,n,i,r,a){var o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},s=this.getEventBasePayload(e,t,n),l={};if(Object.keys(i).forEach((function(r){l["id_".concat(r)]=["g_".concat(i[r].goal.id)],v.log(d.DEBUG,p.build(S.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL,{file:f.ImpressionUtil,goalName:n,accountId:e.accountId,u:t,campaignId:r}))})),s.d.event.props.vwoMeta={metric:l},a&&r&&a.size>0&&a.forEach((function(e){s.d.event.props.vwoMeta[e]=r})),s.d.event.props.isCustomEvent=!0,Object.keys(o).length>0)for(var u in o)s.d.event.props[u]=o[u];return s},getPushPayloadData:function(e,t,n,i){var r=this.getEventBasePayload(e,t,n);return r.d.event.props.isCustomEvent=!0,Object.keys(i).forEach((function(e){var t=E.isString(i[e])?i[e]:JSON.stringify(i[e]);r.d.visitor.props[e]=t})),v.log(d.DEBUG,p.build(S.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_PUSH,{file:f.ImpressionUtil,accountId:e.accountId,userId:t,property:JSON.stringify(i)})),r},_getStringifiedLogProperties:function(e){var t=Object.assign({},e);return delete t.env,JSON.stringify(t)}};e.exports=A},function(e,t){e.exports={VWO_VARIATION_SHOWN:"vwo_variationShown",VWO_SYNC_VISITOR_PROP:"vwo_syncVisitorProp"}},function(e,t){var n={init:function(e){n.isEventArchEnabled=e.isEventArchEnabled,n.isNB=e.isNB,n.isNBv2=e.isNBv2},getAll:function(){return{isEventArchEnabled:n.isEventArchEnabled,isNB:n.isNB,isNBv2:n.isNBv2}}};e.exports=n},function(e,t){e.exports={BASE_URL:"dev.visualwebsiteoptimizer.com",SETTINGS_URL:"/server-side/settings",WEBHOOK_SETTINGS_URL:"/server-side/pull",TRACK_USER:"/server-side/track-user",TRACK_GOAL:"/server-side/track-goal",PUSH:"/server-side/push",BATCH_EVENTS:"/server-side/batch-events",EVENTS:"/events/t"}},function(e,t,n){var i=n(31),r=n(3),a=n(6),o=n(13),s=n(0),l=n(2),u=n(7),c=s.LogLevelEnum,g=s.LogMessageEnum,f=s.LogMessageUtil,E=s.getLogger(),d=l.BucketingService,S={_generateBucketValue:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=e/Math.pow(2,32),r=(t*i+1)*n,a=Math.floor(r);return a},_getVariation:function(e,t){for(var n=0;n=i.startVariationAllocation&&t<=i.endVariationAllocation)return i}return null},_getBucketValueForUser:function(e,t,n){var a=i.v3(e,r.SEED_VALUE),o=S._generateBucketValue(a,r.MAX_TRAFFIC_PERCENT);return E.log(c.DEBUG,f.build(g.DEBUG_MESSAGES.USER_HASH_BUCKET_VALUE,{file:d,hashValue:a,bucketValue:o,userId:t}),n),o},isUserPartOfCampaign:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!t)return!1;var i=t.percentTraffic,r=S._getBucketValueForUser(u.getBucketingSeed(e,t),e,n),a=0!==r&&r<=i;return E.log(c.INFO,f.build(g.INFO_MESSAGES.USER_CAMPAIGN_ELIGIBILITY,{file:d,userId:e,campaignKey:t.key,status:a?"eligible":"not eligible"}),n),a},bucketUserToVariation:function(e,t,n){var i,s,l=o.getAll().isNB,p=o.getAll().isNBv2;if(!a.isValidValue(e))return null;if(!t)return null;(!l&&!p||l&&t.isOB)&&t.percentTraffic?(i=r.MAX_TRAFFIC_VALUE/t.percentTraffic/100,s=u.getBucketingSeed(e,t)):l&&!t.isOB&&!p||p&&t.isOBv2?(i=1,s=e):(i=1,s=u.getBucketingSeed(n+"_"+e,t));var v=S._generateHashValue(s),_=S._generateBucketValue(v,r.MAX_TRAFFIC_VALUE,i);return E.log(c.DEBUG,f.build(g.DEBUG_MESSAGES.USER_CAMPAIGN_BUCKET_VALUES,{file:d,userId:e,campaignKey:t.key,percentTraffic:t.percentTraffic,bucketValue:_,hashValue:v})),S._getVariation(t.variations,_)},calculateBucketValue:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=S._generateHashValue(e);return S._generateBucketValue(n,r.MAX_TRAFFIC_VALUE,t)},_generateHashValue:function(e){return i.v3(e,r.SEED_VALUE)}};e.exports=S},function(e,t,n){var i,r;function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=a(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=a(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==a(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var s=n(37),l={NOTSET:0,DEBUG:1,INFO:2,WARN:3,ERROR:4},u=(o(i={},l.NOTSET,"".concat(s.BOLD).concat(s.WHITE,"[NOTSET]:").concat(s.RESET)),o(i,l.DEBUG,"".concat(s.BOLD).concat(s.LIGHTBLUE,"[DEBUG]: ").concat(s.RESET)),o(i,l.INFO,"".concat(s.BOLD).concat(s.CYAN,"[INFO]: ").concat(s.RESET)),o(i,l.WARN,"".concat(s.BOLD).concat(s.YELLOW,"[WARN]: ").concat(s.RESET)),o(i,l.ERROR,"".concat(s.BOLD).concat(s.RED,"[ERROR]: ").concat(s.RESET)),i),c=(o(r={},l.NOTSET,"[NOTSET]:"),o(r,l.DEBUG,"[DEBUG]: "),o(r,l.INFO,"[INFO]: "),o(r,l.WARN,"[WARN]: "),o(r,l.ERROR,"[ERROR]: "),r);e.exports={LogLevelEnum:l,LogNumberLevel:{_0:"NOTSET",_1:"DEBUG",_2:"INFO",_3:"WARN",_4:"ERROR"},LogLevelInfoEnum:c,LogLevelColorInfoEnum:u}},function(e,t){e.exports={FEATURE_TEST:"FEATURE_TEST",FEATURE_ROLLOUT:"FEATURE_ROLLOUT",AB:"VISUAL_AB"}},function(e,t,n){var i={SegmentOperandTypes:n(42),SegmentOperatorTypes:n(43),SegmentOperandValueTypeRegexes:n(44),SegmentOperandValues:n(45)};e.exports=i},function(e,t,n){var i=n(1),r={init:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.callback=e.integrations&&e.integrations.callback},execute:function(e){i.isFunction(this.callback)&&this.callback(e)}};e.exports=r},function(e,t,n){var i=n(48),r=n(3),a=i(r.SEED_URL,i.URL),o={generateFor:function(e,t){e="".concat(e);var n="".concat(t),i=o.generate(n,a);return o.generate(e,i).replace(/-/gi,"").toUpperCase()},generate:function(e,t){if(e&&t)return i(e,t)}};e.exports=o},function(e,t,n){var i=n(14),r=n(1).isString,a={init:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.collectionPrefix;return t&&r(t)&&(a.collectionPrefix=t),a},getBaseUrl:function(){var e=i.BASE_URL;return a.collectionPrefix?"".concat(e,"/").concat(a.collectionPrefix):e}};e.exports=a},function(e,t,n){var i=n(4).getCurrentTime,r=n(1),a=r.isObject,o=r.isFunction,s={_getStoredSettings:function(e){var t,n=!1;if(e&&a(e)&&o(e.getSettings))try{var r=e.getSettings();if((t=JSON.parse(r))&&a(t)&&Object.keys(t).length>3){var s="VWO-SDK - [INFO]: ".concat(i()," VWO settings found in Storage Service.");console.info(s),n=!0}else if(t){var l="VWO-SDK - [ERROR]: ".concat(i()," VWO settings found in Storage Service is not valid.");console.error(l)}else{var u="VWO-SDK - [WARNING]: ".concat(i()," VWO settings is empty in Storage Service.");console.warn(u)}}catch(e){var c="VWO-SDK - [ERROR]: ".concat(i()," VWO settings found in Storage Service is not valid. ").concat(e);console.error(c),n=!1}return{isStoredData:n,parsedSettings:t}},send:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.method,n=e.url,r=e.payload,l=e.userStorageService,u=e.customHeaders,c=void 0===u?{}:u;if(n&&t)return new Promise((function(e,u){var g=s._getStoredSettings(l),f=g.isStoredData,E=g.parsedSettings;if(!f){var d={method:t,headers:c};return"POST"===t&&(d.body=JSON.stringify(r)),fetch(n,d).then((function(t){return t.text().then((function(n){var r={};try{r=JSON.parse(n)}catch(e){console.info("VWO-SDK - [INFO]: ".concat(i()," VWO didn't send JSON response which is expected: ").concat(e))}if(l&&a(l)&&o(l.setSettings)&&l.setSettings(r),200===t.status)e(r);else{var s="VWO-SDK - [ERROR]: ".concat(i()," Request failed for fetching account settings. Got Status Code: ").concat(t.status);console.error(s),u(s)}}))})).catch((function(e){var t="VWO-SDK - [ERROR]: ".concat(i()," Request failed for fetching account settings. Got Status Code: ").concat(e);console.error(t),u(t)}))}e(E)}))}};e.exports=s},function(e,t,n){var i=n(0).LogLevelEnum,r=n(4).getCurrentTime,a=n(1),o=a.isObject,s=a.isFunction,l={_getStoredSettings:function(e){var t,n=!1;if(e&&o(e)&&s(e.getSettings))try{var i=e.getSettings();if((t=JSON.parse(i))&&o(t)&&Object.keys(t).length>3){var a="VWO-SDK - [INFO]: ".concat(r()," VWO settings found in Storage Service.");console.info(a),n=!0}else if(t){var l="VWO-SDK - [ERROR]: ".concat(r()," VWO settings found in Storage Service is not valid.");console.error(l)}else{var u="VWO-SDK - [WARNING]: ".concat(r()," VWO settings is empty in Storage Service.");console.warn(u)}}catch(e){var c="VWO-SDK - [ERROR]: ".concat(r()," VWO settings found in Storage Service is not valid. ").concat(e);console.error(c),n=!1}return{isStoredData:n,parsedSettings:t}},send:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.method,i=t.url,r=t.payload,a=t.userStorageService,o=t.customHeaders,s=t.logger;if(i&&n)return new Promise((function(t,u){var c=l._getStoredSettings(a),g=c.isStoredData,f=c.parsedSettings;if(g)t(f);else{var E=new XMLHttpRequest;e.xhrHandler(E,n,i,r,a,o,s,t,u)}}))},sendRequest:function(e,t,n,r,a,o,s,l,u){var c=this,g=1e3*(e+1),f=new XMLHttpRequest;for(var E in f.timeout=5e3,f.onload=function(){f.status<200||f.status>=300?e5&&void 0!==arguments[5]?arguments[5]:{},s=arguments.length>6?arguments[6]:void 0,l=arguments.length>7?arguments[7]:void 0,u=arguments.length>8?arguments[8]:void 0;if("GET"===t)try{for(var c in e.onload=function(){a.xhrOnLoad(e,r,l)},e.onerror=function(){a.xhrOnError(e,u)},e.open(t,n),o)o.hasOwnProperty(c)&&e.setRequestHeader(c,o[c]);e.send()}catch(e){console.log(e.message)}else if("POST"===t){var g=0,f=5;this.sendRequest(g,f,s,o,i,t,n,l,u)}},xhrOnLoad:function(e,t,n){try{var i=JSON.parse(e.response);t&&o(t)&&s(t.setSettings)&&t.setSettings(e.response),n(i)}catch(e){console.error(e)}},xhrOnError:function(e,t){var n="VWO-SDK - [ERROR]: ".concat(r()," Request failed for fetching account settings. Got Status Code: ").concat(e.status);console.error(n),t(n)}};e.exports=l},function(e,t,n){var i=n(3),r=n(14),a=n(4),o=a.getRandomNumber,s=a.getCurrentTime,l={get:function(e,t,a){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(e&&t){var l="https",u=r.BASE_URL,c=r.SETTINGS_URL;return s.isViaWebhook&&(c=r.WEBHOOK_SETTINGS_URL),c+="?a=".concat(e,"&")+"i=".concat(t,"&")+"r=".concat(o(),"&")+"platform=".concat(i.PLATFORM,"&")+"".concat(i.SDK_QUERY_PARAM,"=").concat(i.SDK_NAME,"&")+"".concat(i.SDK_VERSION_QUERY_PARAM,"=").concat(i.SDK_VERSION),s.hostname&&s.path&&(l=s.protocol,s.port,u=s.hostname||u,c=s.path||c),"undefined"==typeof XMLHttpRequest?n(22).send({method:"GET",url:"".concat(l,"://").concat(u).concat(c),userStorageService:a}):n(23).send({method:"GET",url:"".concat(l,"://").concat(u).concat(c),userStorageService:a})}console.error("AccountId and sdkKey are required for fetching account settings. Aborting!")},handleHttpRequest:function(e,t,n){var i,r=e.statusCode,a=e.headers["content-type"],o="";if(/^application\/json/.test(a)||(i="Invalid content-type.\nExpected application/json but received ".concat(a)),i)return console.error(i.message),e.resume(),void n(i);e.setEncoding("utf8"),e.on("data",(function(e){o+=e})),e.on("end",(function(){l.handleHttpResponse(r,o,t,n)}))},handleHttpResponse:function(e,t,n,i){try{var r=JSON.parse(t);if(200!==e){var a="VWO-SDK - [ERROR]: ".concat(s()," Request failed for fetching account settings. Got Status Code: ").concat(e," and message: ").concat(t);return console.error(a),void i(a)}n(r)}catch(e){console.error("VWO-SDK - [ERROR]: ".concat(s()," Request failed for fetching account settings - ").concat(e.message)),i(e)}}};e.exports=l},function(e,t,n){var i=n(26),r=n(1),a=n(4),o=n(10).objectValues,s=n(24),l=n(9),u=(n(3).MAX_EVENTS_PER_REQUEST,n(0)),c=n(5),g=n(2).INDEX,f=u.setLogHandler,E=u.setLogLevel,d=u.LogLevelEnum,S=u.LogNumberLevel,p=u.LogMessageEnum,v=u.LogMessageUtil,_=u.getLogger();function I(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=v.build(p.ERROR_MESSAGES.CONFIG_PARAMETER_INVALID,{file:g,parameter:e,type:t,api:c.LAUNCH});throw new Error(_.log(d.ERROR,n))}function A(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=v.build(p.INFO_MESSAGES.CONFIG_PARAMETER_USED,{file:g,parameter:e,type:t});console.info("VWO-SDK - [INFO]: ".concat(a.getCurrentTime()," ").concat(n))}u.setLogLevel(d.ERROR),e.exports={logging:u,setLogger:f,setLogLevel:E,getSettingsFile:s.get,GoalTypeEnum:l,LogLevelEnum:d,launch:function(e){var t={};try{a.cloneObject(e),r.isUndefined(e.shouldTrackReturningUser)||r.isBoolean(e.shouldTrackReturningUser)?r.isUndefined(e.shouldTrackReturningUser)||A("shouldTrackReturningUser","boolean"):I("shouldTrackReturningUser","boolean"),r.isUndefined(e.isDevelopmentMode)||r.isBoolean(e.isDevelopmentMode)?r.isUndefined(e.isDevelopmentMode)||A("isDevelopmentMode","boolean"):I("isDevelopmentMode","boolean"),e.goalTypeToTrack&&!o(l).includes(e.goalTypeToTrack)?I("goalTypeToTrack","string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)"):e.goalTypeToTrack&&A("goalTypeToTrack","string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)"),e.logging&&e.logging.level&&!o(d).includes(e.logging.level)?I("logLevel","number(1,2,3,4)"):e.logging&&e.logging.level&&A("logLevel","number(1,2,3,4)"),e.pollingInterval&&!r.isNumber(e.pollingInterval)?I("pollingInterval","number(in miliiseconds)"):e.pollingInterval&&A("pollingInterval","number(in miliiseconds)"),e.pollingInterval&&r.isUndefined(e.sdkKey)&&I("sdkKey(required for polling)","string"),e.pollingInterval&&!r.isString(e.sdkKey)&&I("sdkKey","string"),r.isUndefined(e.batchEvents)||r.isObject(e.batchEvents)?r.isUndefined(e.batchEvents)||A("batchEvents","object"):I("batchEvents","object"),r.isUndefined(e.returnPromiseFor)||r.isObject(e.returnPromiseFor)?r.isUndefined(e.returnPromiseFor)||A("returnPromiseFor","object"):I("returnPromiseFor","object"),r.isUndefined(e.asyncStorageConfig)||r.isObject(e.asyncStorageConfig)?r.isUndefined(e.asyncStorageConfig)||A("asyncStorageConfig","object"):I("asyncStorageConfig","object"),r.isUndefined(e.integrations)||r.isObject(e.integrations)?r.isUndefined(e.integrations)||A("integrations","object"):I("integrations","object"),r.isUndefined(e.userStorageService)||r.isObject(e.userStorageService)?r.isUndefined(e.userStorageService)||A("userStorageService","object"):I("userStorageService","object"),r.isObject(e.batchEvents)&&(e.batchEvents=null),t=e}catch(e){_.log(d.ERROR,v.build(p.ERROR_MESSAGES.CONFIG_CORRUPTED,{file:g,api:c.LAUNCH})),t={}}return t.isDevelopmentMode&&u.setLogColorMode(!0),t.logging&&r.isObject(t.logging)&&(void 0!==t.logging.haveColoredLogs&&u.setLogColorMode(t.logging.haveColoredLogs),t.logging.logger&&r.isObject(t.logging.logger)&&r.isFunction(t.logging.logger.log)?(u.setLogHandler(t.logging.logger),u.setLogLevel(u.LogLevelEnum.NOTSET),_.log(d.DEBUG,v.build(p.DEBUG_MESSAGES.CONFIG_CUSTOM_LOGGER_USED,{file:g}))):t.logging.logger&&I("logging.logger","object"),void 0!==t.logging.level&&(u.setLogLevel(t.logging.level),_.log(d.DEBUG,v.build(p.DEBUG_MESSAGES.CONFIG_LOG_LEVEL_SET,{file:g,level:S["_"+t.logging.level]})))),t.isDevelopmentMode&&_.log(d.DEBUG,v.build(p.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS,{file:g})),t.logger=t.logging&&t.logging.logger||_,new i(t)}}},function(e,t,n){function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};r(this,e),this.getVariation=this.getVariationName,this.userStorageService=t.userStorageService,this.logger=t.logger,this.returnPromiseFor=t.returnPromiseFor,this.asyncStorageConfig=t.asyncStorageConfig,this.optOut=!1,void 0===this.userStorageService&&t.asyncStorageConfig&&(this.userStorageService=t.asyncStorageConfig.redisStorage,t.userStorageService=this.userStorageService);var n=new d(t);n.isSettingsFileValid()?(this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_VALID,{file:m})),p.init(t),this.eventQueue=new E,this.usageStats=new _,this.SettingsFileManager=n,n.checkAndPoll(),t.isDevelopmentMode||this.usageStats.collectUsageStats(n.getConfig()),this.SettingsFileManager.processSettingsFile(),this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.SDK_INITIALIZED,{file:m})),this.UrlService=v.init(t.settingsFile),this.VWOFeatureFlags=f.init(t.settingsFile)):this.logger.log(I.ERROR,O.build(A.ERROR_MESSAGES.SETTINGS_FILE_INVALID,{file:m}))}var t,n,i;return t=e,(n=[{key:"activate",value:function(e,t){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var r=this;if(r.asyncStorageConfig&&c.isObject(r.asyncStorageConfig))return r.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:m,method:u.ACTIVATE})),new Promise((function(a){if(!n.optOut)return s.activate(r,e,t,i).then((function(e){c.isObject(e)?a(e.variationName):a(e)}));n.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.ACTIVATE})),a(null)}));if(r.returnPromiseFor&&(r.returnPromiseFor.activate||r.returnPromiseFor.all))return r.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:m,method:u.ACTIVATE})),new Promise((function(a){var o;n.optOut?(n.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.ACTIVATE})),a(null)):(i.responseCallback=function(e,t){a(o)},(o=s.activate(r,e,t,i))?c.isObject(o)&&a(o.variationName):a(o))}));if(this.optOut)return this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.ACTIVATE})),null;var a=s.activate(r,e,t,i);return c.isObject(a)?a.variationName:a}catch(e){return this.logger.log(I.ERROR,e.message),null}}},{key:"getVariationName",value:function(e,t){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var r=this;return r.asyncStorageConfig&&c.isObject(r.asyncStorageConfig)?(r.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:m,method:u.GET_VARIATION_NAME})),new Promise((function(a){if(!n.optOut)return s.getVariation(r,e,t,i).then((function(e){c.isObject(e)?a(e.variationName):a(e)}));n.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.GET_VARIATION_NAME})),a(null)}))):r.returnPromiseFor&&(r.returnPromiseFor.getVariationName||r.returnPromiseFor.all)?(r.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:m,method:u.GET_VARIATION_NAME})),new Promise((function(a){n.optOut?(n.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.GET_VARIATION_NAME})),a(null)):a(s.getVariation(r,e,t,i))}))):this.optOut?(this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.GET_VARIATION_NAME})),null):s.getVariation(r,e,t,i)}catch(e){return this.logger.log(I.ERROR,e.message),null}}},{key:"track",value:function(e,t,n){var i=this,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};try{var a=this;return a.asyncStorageConfig&&c.isObject(a.asyncStorageConfig)?(a.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:m,method:u.TRACK})),new Promise((function(o){if(!i.optOut)return s.track(a,e,t,n,r).then((function(e){o(e)}));i.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.TRACK})),o(null)}))):a.returnPromiseFor&&(a.returnPromiseFor.track||a.returnPromiseFor.all)?(a.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:m,method:u.TRACK})),new Promise((function(o){if(i.optOut)i.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.TRACK})),o(null);else{var l,f=0;r.responseCallback=function(t,n){f+=1,(a.isEventArchEnabled||c.isArray(e)||(c.isUndefined(e)||c.isNull(e))&&g.objectValues(l).filter(Boolean).length||f===g.objectValues(l).filter(Boolean).length)&&o(l)},(l=s.track(a,e,t,n,r))&&g.objectValues(l).some(Boolean)?l&&l.isDevelopmentMode&&(delete l.isDevelopmentMode,o(l)):o(l)}}))):this.optOut?(this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.TRACK})),null):s.track(a,e,t,n,r)}catch(e){return this.logger.log(I.ERROR,e.message),null}}},{key:"isFeatureEnabled",value:function(e,t){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var r=this;if(r.asyncStorageConfig&&c.isObject(r.asyncStorageConfig))return r.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:m,method:u.IS_FEATURE_ENABLED})),new Promise((function(a){if(!n.optOut)return s.isFeatureEnabled(r,e,t,i).then((function(e){c.isObject(e)?a(e.isFeatureEnabled):a(e)}));n.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.IS_FEATURE_ENABLED})),a(null)}));if(r.returnPromiseFor&&(r.returnPromiseFor.isFeatureEnabled||r.returnPromiseFor.all))return r.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:m,method:u.IS_FEATURE_ENABLED})),new Promise((function(a){var o;n.optOut?(n.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.IS_FEATURE_ENABLED})),a(!1)):(i.responseCallback=function(e,t){a(!!o)},o=s.isFeatureEnabled(r,e,t,i),c.isNull(o)?a(!1):c.isObject(o)&&a(!!o.isFeatureEnabled))}));if(this.optOut)return this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.IS_FEATURE_ENABLED})),!1;var a=s.isFeatureEnabled(r,e,t,i);return c.isObject(a)?!!a.isFeatureEnabled:!!a}catch(e){return this.logger.log(I.ERROR,e.message),!1}}},{key:"getFeatureVariableValue",value:function(e,t,n){var i=this,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};try{var a=this;return a.asyncStorageConfig&&c.isObject(a.asyncStorageConfig)?(a.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:m,method:u.GET_FEATURE_VARIABLE_VALUE})),new Promise((function(o){if(!i.optOut)return s.getFeatureVariableValue(a,e,t,n,r).then((function(e){c.isObject(e)?o(e.typeCastedValue):o(e)}));i.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.GET_FEATURE_VARIABLE_VALUE})),o(null)}))):a.returnPromiseFor&&(a.returnPromiseFor.getFeatureVariableValue||a.returnPromiseFor.all)?(a.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:m,method:u.GET_FEATURE_VARIABLE_VALUE})),new Promise((function(o){i.optOut?(i.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.GET_FEATURE_VARIABLE_VALUE})),o(null)):o(s.getFeatureVariableValue(a,e,t,n,r))}))):this.optOut?(this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.GET_FEATURE_VARIABLE_VALUE})),null):s.getFeatureVariableValue(a,e,t,n,r)}catch(e){return this.logger.log(I.ERROR,e.message),null}}},{key:"push",value:function(e,t,n){var i=this;try{var r,a=this;if(2===arguments.length)r=e,n=t,e=" ",t=" ";else{if(3!==arguments.length)return this.logger.log(I.ERROR,O.build(A.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:m,api:u.PUSH})),!1;r={}}return a.returnPromiseFor&&(a.returnPromiseFor.push||a.returnPromiseFor.all)?(a.logger.log(I.INFO,O.build(A.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:m,method:u.PUSH})),new Promise((function(o){if(i.optOut)i.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.PUSH})),o(null);else{var l,f=0,E={responseCallback:function(e,t){f+=1,(r&&c.isObject(r)&&g.objectValues(r).filter(Boolean).length>1||f===g.objectValues(l).filter(Boolean).length)&&o(l)}};(l=s.push(a,e,t,n,r,E))?l&&l.isDevelopmentMode&&(delete l.isDevelopmentMode,o(l)):o(!1)}}))):this.optOut?(this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:u.PUSH})),null):s.push(a,e,t,n,r)}catch(e){return this.logger.log(I.ERROR,e.message),!1}}},{key:"setOptOut",value:function(){var e=this;return this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.OPT_OUT_API_CALLED,{file:m})),this.returnPromiseFor&&(this.returnPromiseFor.optOut||this.returnPromiseFor.all)?new Promise((function(t){e._destroyInstanceVariables(),e.batchEventsQueue?e.flushEvents().then((function(){e.batchEventsQueue=void 0,t(!0)})):t(!0)})):(this.batchEventsQueue&&this.flushEvents().then((function(){e.batchEventsQueue=void 0})),this._destroyInstanceVariables(),!0)}},{key:"flushEvents",value:function(){this.SettingsFileManager.getSettingsFile().accountId}},{key:"getAndUpdateSettingsFile",value:function(e,t){return this.optOut?(this.logger.log(I.INFO,O.build(A.INFO_MESSAGES.API_NOT_ENABLED,{file:m,api:"getAndUpdateSettingsFile"})),new Promise((function(e){e(null)}))):this.SettingsFileManager.getAndUpdateSettingsFile(e,t)}},{key:"_destroyInstanceVariables",value:function(){this.userStorageService=void 0,this.SettingsFileManager=void 0,this.usageStats=void 0,this.eventQueue=void 0,this.optOut=!0}}])&&a(t.prototype,n),i&&a(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();e.exports=R},function(e,t,n){var i=n(28),r=n(52),a=n(53),o=n(54),s=n(55),l=n(58);e.exports={activate:i,getVariation:r,track:a,isFeatureEnabled:o,getFeatureVariableValue:s,push:l}},function(e,t,n){var i=n(3),r=n(5),a=n(8),o=n(7),s=n(11),l=n(6),u=n(1),c=n(0),g=n(2),f=n(12),E=c.LogLevelEnum,d=c.LogMessageEnum,S=c.LogMessageUtil,p=g.Activate;function v(e,t,n,i,r,a,o,u,c,g,v,_){var I=_.variationId,A=_.variationName,O=_.isStoredVariation;if(!l.isValidValue(A))return e.logger.log(E.INFO,S.build(d.INFO_MESSAGES.DECISION_NO_VARIATION_ALLOTED,{file:p,userId:n,campaignKey:t})),null;if(O&&!a)return e.logger.log(E.INFO,S.build(d.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED,{file:p,userId:n,campaignKey:t,api:r})),{variationName:A};if(i.batchEvents){var m=s.buildBatchEventForTrackingUser(o,u.id,I,n,c,g);e.batchEventsQueue.enqueue(m)}else if(o.isEventArchEnabled){var R=s.getEventsBaseProperties(o,f.VWO_VARIATION_SHOWN,e.usageStats.getUsageStats(),c,g),b=s.getTrackUserPayloadData(o,n,f.VWO_VARIATION_SHOWN,u.id,I);e.eventQueue.process(i,R,e,{payload:b,responseCallback:v})}else{var y=s.buildEventForTrackingUser(o,u.id,I,n,e.usageStats.getUsageStats(),c,g);e.eventQueue.process(i,y,e,{responseCallback:v})}return i.isDevelopmentMode?{variationName:A}:A}e.exports=function(e,t,n){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},c=r.ACTIVATE,g=!1;if(u.isObject(s)){var f=s.customVariables,_=s.variationTargetingVariables,I=s.userStorageData,A=s.shouldTrackReturningUser,O=s.metaData,m=s.responseCallback,R=s.userAgent,b=s.userIpAddress,y=R;l.areValidParamsForAPIMethod({method:r.ACTIVATE,campaignKey:t,userId:n,customVariables:f,variationTargetingVariables:_,userStorageData:I,shouldTrackReturningUser:A,metaData:O,responseCallback:m,visitorUserAgent:y,userIpAddress:b})&&(g=!0)}if(!1===g)return e.logger.log(E.ERROR,S.build(d.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:p,api:r.ACTIVATE})),null;var T=e.SettingsFileManager.getConfig(),N=e.SettingsFileManager.getSettingsFile(c);if(!N)return null;A=A||T.shouldTrackReturningUser||!1;var h=o.getCampaign(N,t);if(h&&h.hasOwnProperty("isMAB")&&!0===h.isMAB&&void 0===e.userStorageService)return e.logger.log(E.ERROR,"("+p+") This campaign: "+t+" has MAB configured. Please configure User Storage to proceed."),null;if(!h||h.status!==i.STATUS_RUNNING)return e.logger.log(E.WARN,S.build(d.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:p,campaignKey:t,api:c})),null;if(!o.isAbCampaign(h))return e.logger.log(E.ERROR,S.build(d.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:p,campaignKey:t,campaignType:h.type,userId:n,api:c})),null;var U=a.getVariation(T,N,h,t,n,f,_,I,O,!0,!1,void 0,c);return u.isPromise(U)?U.then((function(i){return v(e,t,n,T,c,A,N,h,y,b,m,i)})):v(e,t,n,T,c,A,N,h,y,b,m,U)}},function(e,t,n){var i=n(6),r=n(15),a=n(0),o=n(2),s=a.LogLevelEnum,l=a.LogMessageEnum,u=a.LogMessageUtil,c=a.getLogger(),g=o.VariationDecider,f={getVariationAllotted:function(e,t,n){var a={variation:null,variationId:null,variationName:null};if(!i.isValidValue(e))return c.log(s.ERROR,u.build(l.ERROR_MESSAGES.USER_ID_INVALID,{file:g,userId:e})),a;if(r.isUserPartOfCampaign(e,t)){var o=f.getVariationOfCampaignForUser(e,t,n)||{};a.variation=o,a.variationId=o.id,a.variationName=o.name}else c.log(s.INFO,u.build(l.INFO_MESSAGES.USER_NOT_PART_OF_CAMPAIGN,{file:g,userId:e,campaignKey:t.key}));return a},getVariationOfCampaignForUser:function(e,t,n){if(!t)return null;var i=r.bucketUserToVariation(e,t,n);return i&&i.name?(c.log(s.INFO,u.build(l.INFO_MESSAGES.USER_VARIATION_STATUS,{file:g,userId:e,campaignKey:t.key,status:"got Varation:".concat(i.name)})),{variation:i,name:i.name,id:i.id}):(c.log(s.INFO,u.build(l.INFO_MESSAGES.USER_VARIATION_STATUS,{file:g,userId:e,campaignKey:t.key,status:"got no variation"})),null)}};e.exports=f},function(e,t){e.exports={NUMBER:"number",STRING:"string",BOOLEAN:"boolean",OBJECT:"object"}},function(e,t,n){!function(){function t(e,t){var n,i,r,a,o,s,l,u;for(n=3&e.length,i=e.length-n,r=t,o=3432918353,s=461845907,u=0;u>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295)<<13|r>>>19))+((5*(r>>>16)&65535)<<16)&4294967295))+((58964+(a>>>16)&65535)<<16);switch(l=0,n){case 3:l^=(255&e.charCodeAt(u+2))<<16;case 2:l^=(255&e.charCodeAt(u+1))<<8;case 1:r^=l=(65535&(l=(l=(65535&(l^=255&e.charCodeAt(u)))*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295}return r^=e.length,r=2246822507*(65535&(r^=r>>>16))+((2246822507*(r>>>16)&65535)<<16)&4294967295,r=3266489909*(65535&(r^=r>>>13))+((3266489909*(r>>>16)&65535)<<16)&4294967295,(r^=r>>>16)>>>0}var n=t;n.v2=function(e,t){for(var n,i=e.length,r=t^i,a=0;i>=4;)n=1540483477*(65535&(n=255&e.charCodeAt(a)|(255&e.charCodeAt(++a))<<8|(255&e.charCodeAt(++a))<<16|(255&e.charCodeAt(++a))<<24))+((1540483477*(n>>>16)&65535)<<16),r=1540483477*(65535&r)+((1540483477*(r>>>16)&65535)<<16)^(n=1540483477*(65535&(n^=n>>>24))+((1540483477*(n>>>16)&65535)<<16)),i-=4,++a;switch(i){case 3:r^=(255&e.charCodeAt(a+2))<<16;case 2:r^=(255&e.charCodeAt(a+1))<<8;case 1:r=1540483477*(65535&(r^=255&e.charCodeAt(a)))+((1540483477*(r>>>16)&65535)<<16)}return r=1540483477*(65535&(r^=r>>>13))+((1540483477*(r>>>16)&65535)<<16),(r^=r>>>15)>>>0},n.v3=t,e.exports=n}()},function(e,t,n){function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2];if(!n)try{this._customLog(e,t)}catch(e){console.error("VWO: Could not log.",e)}}},{key:"info",value:function(e){this._customLog(l.INFO,e)}},{key:"debug",value:function(e){this._customLog(l.DEBUG,e)}},{key:"warn",value:function(e){this._customLog(l.WARN,e)}},{key:"error",value:function(e){this._customLog(l.ERROR,e)}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();e.exports={LogLevelEnum:l,LogNumberLevel:u,LogMessageUtil:c,LogMessageEnum:o,getLogger:function(e){return new S(e)},setLogHandler:function(e){d=e},setLogLevel:function(e){f=void 0===e?l.ERROR:e},getLogLevel:function(){return f},LogManager:S,setLogColorMode:function(e){E=e,d.isColoredLogEnabled=E},getLogColorMode:function(){return E},globalLogHandler:d}},function(e){e.exports=JSON.parse('{"CONFIG_BATCH_EVENT_LIMIT_EXCEEDED":"({file}): Impression event - {endPoint} failed due to exceeding payload size. Parameter eventsPerRequest in batchEvents config in launch API has value:{eventsPerRequest} for account ID:{accountId}. Please read the official documentation for knowing the size limits","CONFIG_LOG_LEVEL_SET":"({file}): Log level set to {level}","CONFIG_CUSTOM_LOGGER_USED":"({file}): Custom logger used","CONFIG_DEVELOPMENT_MODE_STATUS":"({file}): DEVELOPMENT mode is ON. No tracking call will be made to VWO Server","POLLING_SETTINGS_FILE_REGISTERED":"({file}): Polling of settings-file is registered with a periodic interval of {pollingInterval} ms","SETTINGS_FILE_PROCESSED":"({file}): settings-file matches the schema, validated and properly processed for the Account ID:{accountId}","IMPRESSION_FOR_TRACK_USER":"({file}): Impression built for tracking user - {properties}","IMPRESSION_FOR_TRACK_GOAL":"({file}): Impression built for tracking goal - {properties}","IMPRESSION_FOR_PUSH":"({file}): Impression built for pushing custom dimension - {properties}","IMPRESSION_FOR_EVENT_ARCH_TRACK_USER":"({file}): Impression built for vwo_variationShown event for Account ID:{accountId}, User ID:{userId}, and Campaign ID:{campaignId}","IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL":"({file}): Impression built for {goalName} event for Account ID:{accountId}, User ID:{userId}, and Campaign ID:{campaignId}","IMPRESSION_FOR_EVENT_ARCH_PUSH":"({file}): Impression built for visitor-property:{property} for Account ID:{accountId} and User ID:{userId}","EVENT_BATCH_BEFORE_FLUSHING":"({file}): flushing event queue {manually} having {length} events for Account ID:{accountId}. {timer}","EVENT_BATCH_FLUSH":"{{file}}: Manually flushing batch events for Account ID:{accountId} having {queueLength} events","USER_STORAGE_SERVICE_NOT_CONFIGURED":"({file}): User Storage Service is not configured to get/set the data","USER_STORAGE_SERVICE_NO_STORED_DATA":"({file}): No stored variation for User ID:{userId} for Campaign:{campaignKey} found in User Storage Service","VARIATION_RANGE_ALLOCATION":"({file}): Variation:{variationName} of Campaign:{campaignKey} having weight:{variationWeight} got bucketing range: ( {start} - {end} )","MEG_ELIGIBLE_CAMPAIGNS":"({file}): Campaigns: {eligibleCampaignKeys} are eligible, {inEligibleText} are ineligible from the Group:{groupName} for the User ID:{userId}","SEGMENTATION_SKIPPED":"({file}): Segmentation is not used for Campaign:{campaignKey}, hence skipping evaluating segmentation{variation} for User ID:{userId}","SEGMENTATION_STATUS":"({file}): User ID:{userId} for Campaign:{campaignKey} with variables:{customVariables} {status} {segmentationType} {variation}","WHITELISTING_SKIPPED":"({file}): Whitelisting is not used for Campaign:{campaignKey}, hence skipping evaluating whitelisting for User ID:{userId}","USER_UUID":"({file}): VWO UUID generated for Account Id:{accountId} and User ID:{userId} is {uuid}","USER_HASH_BUCKET_VALUE":"({file}): User ID:{userId} having hash:{hashValue} got bucketValue:{bucketValue}","USER_CAMPAIGN_BUCKET_VALUES":"({file}): User ID:{userId} for Campaign:{campaignKey} having percent-traffic:{percentTraffic} got hash-value:{hashValue} and bucket-value:{bucketValue}"}')},function(e){e.exports=JSON.parse('{"CONFIG_VALID":"({file}): SDK configuration and account settings-file are valid","CONFIG_PARAMETER_USED":"({file}): {parameter} paased in launch API having type:{type}","CONFIG_RETURN_PROMISE":"({file}): {method} API returns a promise as returnPromiseFor is set to true for this API","SDK_INITIALIZED":"({file}): SDK is properly initialzed with the passed configuration","POLLING_SUCCESS":"({file}): settings-file fetched successfully via polling for the accountId:{accountId}","POLLING_SETTINGS_FILE_UPDATED":"({file}): SDK instance is updated with the latest settings-file for the accountId:{accountId}","POLLING_SETTINGS_FILE_NOT_UPDATED":"{file}: settings-file fetched via polling is same as earlier fetched settings","DECISION_NO_VARIATION_ALLOTED":"({file}): Variation was not assigned to the User ID:{userId} for Campaign:{campaignKey}","EVENT_BATCH_DEFAULTS":"({file}): {parameter} not passed in SDK configuration, setting it default to {defaultValue}","EVENT_QUEUE":"({file}): Event with payload:{event} pushed to the {queueType} queue","EVENT_BATCH_After_FLUSHING":"({file}): Event queue having {length} events has been flushed {manually}","CAMPAIGN_NOT_ACTIVATED":"({file}): Activate the campaign:{campaignKey} first for User ID:{userId} to {reason}","CAMPAIGN_USER_ALREADY_TRACKED":"({file}): User ID:{userId} for Campaign:{campaignKey} has already been tracked earlier for \\"{api}\\" API. No tracking call is made to VWO server","CAMPAIGN_GOAL_ALREADY_TRACKED":"({file}): Goal:{goalIdentifier} of Campaign:{campaignKey} for User ID:{userId} has already been tracked earlier. No tracking call is made to VWO server","GOT_STORED_VARIATION":"({file}): Got stored variation from User Storage Service for User ID:{userId} for Campaign:{campaignKey} as Variation:{variationName}","GETTING_DATA_USER_STORAGE_SERVICE":"({file}): Read data from User Storage Service for User ID:{userId} and Campaign:{campaignKey}","SETTING_DATA_USER_STORAGE_SERVICE":"({file}): Set data into User Storage Service for User ID:{userId} and Campaign:{campaignKey}","IMPRESSION_SUCCESS":"({file}): Impression event - {endPoint} was successfully received by VWO having main keys: Account ID:{accountId}, {mainKeys}","IMPRESSION_SUCCESS_FOR_EVENT_ARCH":"({file}): Impression for {event} - {endPoint} was successfully received by VWO for Account ID:{accountId}","IMPRESSION_BATCH_SUCCESS":"({file}): Impression event - {endPoint} was successfully received by VWO having Account ID:{accountId}","IMPRESSION_BATCH_FAILED":"({file}): Batch events couldn\\"t be received by VWO. Calling Flush Callback with error and data","MEG_ELIGIBLE_CAMPAIGNS":"({file}): Got {noOfEligibleCampaigns} eligible winners out of {noOfGroupCampaigns} campaigns from the Group:{groupName} and for User ID:{userId}","OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE":"({file}): Campaign:{campaignKey} of Group:{groupName} satisfies {type} for User ID:{userId}","SEGMENTATION_STATUS":"({file}): User ID:{userId} for Campaign:{campaignKey} with variables:{customVariables} {status} {segmentationType} {variation}","MEG_CALLED_CAMPAIGN_NOT_WINNER":"({file}): Campaign:{campaignKey} does not qualify from the mutually exclusive group:{groupName} for User ID:{userId}","MEG_GOT_WINNER_CAMPAIGN":"({file}): Campaign:{campaignKey} is selected from the mutually exclusive group:{groupName} for the User ID:{userId}","FEATURE_STATUS":"({file}): Campaign:{campaignKey} is {status} for user ID:{userId}","FEATURE_VARIABLE_VALUE":"({file}): For User ID:{userId}, value for variable:{variableKey} of feature:{campaignKey} is:{variableValue}","FEATURE_VARIABLE_DEFAULT_VALUE":"({file}): Feature is not enabled for variation:{variationName}. Returning default value for the variable:{variableKey}","USER_NOT_PART_OF_CAMPAIGN":"({file}): User ID:{userId} did not qualify for Campaign:{campaignKey}","USER_VARIATION_STATUS":"({file}): User ID:{userId} for Campaign:{campaignKey} {status}","USER_CAMPAIGN_ELIGIBILITY":"({file}): User ID:{userId} for Campaign:{campaignKey} is {status} to become part of campaign","USER_VARIATION_ALLOCATION_STATUS":"({file}): User ID:{userId} for Campaign:{campaignKey} {status}","OPT_OUT_API_CALLED":"({file}): You have opted out for not tracking i.e. all API calls will stop functioning and will simply early return","API_NOT_ENABLED":"({file}): {api} API is disabled as you opted out for tracking. Reinitialize the SDK to enable the normal functioning of all APIs.","INITIATING_ACTIVATE":"({file}): Initiating activation of user {userId} for campaign {campaignKey}.","INITIATING_GET_VARIATION":"({file}): Initiating getVariation of user \'{userId}\' for campaign \'{campaignKey}\'.","INITIATING_GET_FEATURE_VARIATION":"({file}): Initiating getFeatureVariable for variable key \'{variableKey}\' of user \'{userId}\' for campaign \'{campaignKey}\'.","INITIATING_IS_FEATURE_ENABLED":"({file}): Initiating isFeatureEnabled of user \'{userId}\' for campaign \'{campaignKey}\'.","INITIATING_PUSH_DIMENSION":"({file}): Initiating push segment of user \'{userId}\' with tag name `{tagKey}` and tag value \'{tagValue}\'."}')},function(e){e.exports=JSON.parse('{"CAMPAIGN_NOT_RUNNING":"({file}): {api} API called with Campaign:{campaignKey} but the campaign is not RUNNING. Please verify from VWO App","CAMPAIGN_NOT_ACTIVATED":"({file}): Campaign:{campaignKey} for User ID:{userId} is not yet activated for API:{api}. Use activate API to activate A/B test or isFeatureEnabled API to activate Feature Test"}')},function(e){e.exports=JSON.parse('{"CONFIG_PARAMETER_INVALID":"({file}): {parameter} paased in {api} API is not correct. It should be of type:{type}","CONFIG_POLLING_SDK_KEY_NOT_PROVIVED":"({file}): SDK Key is required along with pollingInterval to poll the settings-file","CONFIG_CORRUPTED":"({file}): Config passed to {api} API is invalid. Please refer developer docs","SETTINGS_FILE_INVALID":"({file}): Settings file passed while instantiating SDK instance is invalid","SETTINGS_FILE_CORRUPTED":"({file}): Fetched settings-file doesn\'t match the desired schema. Please contact VWO Support for help","BATCH_QUEUE_EMPTY":"{{file}}: No batch queue present for account:{accountId} when calling flushEvents API. Check batchEvents config in launch API","API_HAS_CORRUPTED_SETTINGS_FILE":"({file}): {api} API has corrupted settings-file. Please check or reach out to VWO support","API_BAD_PARAMETERS":"({file}): {api} API got bad parameters. Refer the developer docs","API_NOT_APPLICABLE":"({file}): {api} API is not valid for Campaign:{campaignKey} having type:{campaignType} for User ID:{userId}","USER_ID_INVALID":"({file}): Invalid User Id:{userId} passed to the API","CAMPAIGN_NOT_FOUND_FOR_GOAL":"({file}): No such campaign found corresponding to goalIdentifier:{goalIdentifier}. Please verify from VWO app","POLLING_FAILED":"({file}): Fetching of settings-file failed via polling for the accountId:{accountId}","SEGMENTATION_REGEX_CREATION_FAILED":"({file}): Regular expression:{regex} used for targeting cound not be evaluated","SEGMENTATION_ERROR":"({file}): Could not segment the User ID:{userId} for Campaign:{campaignKey}{variation} with customVariables:{customVariables}. Error message: {err}","USER_STORAGE_SERVICE_GET_FAILED":"({file}): Getting data from User Storage Service failed for User ID:{userId}. Error: {error}","USER_STORAGE_SERVICE_SET_FAILED":"({file}): Saving data into User Storage Service failed for User ID:{userId}. Error: {error}","IMPRESSION_FAILED":"({file}): Impression event could not be sent to VWO - {endPoint}. Reason: {err}","TAG_KEY_LENGTH_EXCEEDED":"({file}): Length of custom dimension key:{tagKey} for User Id:{userId} can not be greater than 255","TAG_VALUE_LENGTH_EXCEEDED":"({file}): Length of custom dimension value:{tagValue} of tagKey:{tagKey} for User Id:{userId} can not be greater than 255","TRACK_API_GOAL_NOT_FOUND":"({file}): Goal:{goalIdentifier} not found for Campaign:{campaignKey} and User Id:{userId}","TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL":"({file}): Revenue value should be passed for revenue goal:{goalIdentifier} for Campaign:{campaignKey} and User Id:{userId}","TRACK_API_EVENTS_REVENUE_NOT_PASSED":"({file}): Revenue value should be passed either in options or as an event property for revenue goal:{goalIdentifier} for Campaign:{campaignKey} and User Id:{userId}","UNABLE_TO_CAST_VALUE":"({file}): Unable to cast value:{variableValue} to type:{variableType}, returning null","VARIABLE_NOT_FOUND":"({file}): Variable:{variableKey} for User ID:{userId} is not found in settings-file, returning null","MISSING_IMPORT_SETTINGS_MANDATORY_PARAMS":"AccountId and sdkKey are required for fetching account settings. Aborting!","ACCOUNT_SETTINGS_NOT_FOUND":"({file}): Request failed for fetching account settings. Got Status Code: ${statusCode} and message: ${message}"}')},function(e,t){e.exports={BOLD:"",CYAN:"",GREEN:"",LIGHTBLUE:"",RED:"",RESET:"",WHITE:"",YELLOW:""}},function(e,t,n){var i=n(1),r=/\{([0-9a-zA-Z_]+)\}/g,a={build:function(e,t){try{return e.replace(r,(function(n,r,a){var o;if("{"===e[a-1]&&"}"===e[a+n.length])return r;if(t.hasOwnProperty(r)){var s=t[r];i.isFunction(s)&&(s=t[r]()),o=s}else o=null;return null==o?"":o}))}catch(t){return e}}};e.exports=a},function(e,t,n){function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){for(var n=0;n=this.logLevel}},{key:"setLogLevel",value:function(e){this.logLevel=void 0===e?l.ERROR:e}},{key:"consoleLog",value:function(e,t){switch(e){case l.INFO:console.info.apply(console,t);break;case l.WARN:console.warn.apply(console,t);break;case l.ERROR:console.error.apply(console,t);break;default:console.log.apply(console,t)}}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();e.exports=g},function(e,t){e.exports={PASSED:"passed",FAILED:"failed"}},function(e,t,n){var i=n(18),r=n(10).getKeyValue,a=n(46),o=a.operandCustomVariablesParser,s=a.operandUserParser,l=n(0),u=n(1),c=n(2),g=i.SegmentOperatorTypes,f=g.AND,E=g.OR,d=g.NOT,S=i.SegmentOperandTypes,p=S.CUSTOM_VARIABLE,v=S.USER,_=l.LogLevelEnum,I=l.LogMessageEnum,A=l.LogMessageUtil,O=c.SegmentEvaluator,m=l.getLogger();function R(e,t){var n=r(e),i=n.key,a=n.value;if(i===d)return!R(a,t);if(i===f){for(var l=[],u=0;u1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{return u.isObject(e)&&!Object.keys(e).length?(m.log(_.DEBUG,A.build(I.DEBUG_MESSAGES.SEGMENTATION_SKIPPED,{campaignKey:n,userId:i,file:O}),a),!0):!u.isObject(e)||!Object.keys(e).length||R(e,t)}catch(e){return m.log(_.ERROR,A.build(I.ERROR_MESSAGES.SEGMENTATION_ERROR,{campaignKey:n,userId:i,customVariables:JSON.stringify(t),file:O,err:e,variation:r}),a),!1}}},function(e,t){e.exports={CUSTOM_VARIABLE:"custom_variable",USER:"user"}},function(e,t){e.exports={AND:"and",NOT:"not",OR:"or"}},function(e,t){e.exports={LOWER:/^lower/,LOWER_MATCH:/^lower\((.*)\)/,WILDCARD:/^wildcard/,WILDCARD_MATCH:/^wildcard\((.*)\)/,REGEX:/^regex/,REGEX_MATCH:/^regex\((.*)\)/,STARTING_STAR:/^\*/,ENDING_STAR:/\*$/,GREATER_THAN_MATCH:/^gt\(((\d+\.?\d*)|(\.\d+))\)/,GREATER_THAN_EQUAL_TO_MATCH:/^gte\(((\d+\.?\d*)|(\.\d+))\)/,LESS_THAN_MATCH:/^lt\(((\d+\.?\d*)|(\.\d+))\)/,LESS_THAN_EQUAL_TO_MATCH:/^lte\(((\d+\.?\d*)|(\.\d+))\)/}},function(e,t){e.exports={LOWER_VALUE:1,STARTING_ENDING_STAR_VALUE:2,STARTING_STAR_VALUE:3,ENDING_STAR_VALUE:4,REGEX_VALUE:5,EQUAL_VALUE:6,GREATER_THAN_VALUE:7,GREATER_THAN_EQUAL_TO_VALUE:8,LESS_THAN_VALUE:9,LESS_THAN_EQUAL_TO_VALUE:10}},function(e,t,n){var i=n(1),r=n(4).matchWithRegex,a=n(10).getKeyValue,o=n(18),s=o.SegmentOperandValueTypeRegexes,l=s.LOWER_MATCH,u=s.WILDCARD_MATCH,c=s.REGEX_MATCH,g=s.STARTING_STAR,f=s.ENDING_STAR,E=s.GREATER_THAN_MATCH,d=s.GREATER_THAN_EQUAL_TO_MATCH,S=s.LESS_THAN_MATCH,p=s.LESS_THAN_EQUAL_TO_MATCH,v=o.SegmentOperandValues,_=v.LOWER_VALUE,I=v.STARTING_ENDING_STAR_VALUE,A=v.STARTING_STAR_VALUE,O=v.ENDING_STAR_VALUE,m=v.REGEX_VALUE,R=v.EQUAL_VALUE,b=v.GREATER_THAN_VALUE,y=v.GREATER_THAN_EQUAL_TO_VALUE,T=v.LESS_THAN_VALUE,N=v.LESS_THAN_EQUAL_TO_VALUE;function h(e,t){return r(e,t)&&r(e,t)[1]}function U(e,t){var n=parseFloat(e,10),i=parseFloat(t,10);return n&&i?(n===Math.floor(n)&&(n=parseInt(n,10)),i===Math.floor(i)&&(i=parseInt(i,10)),{operandValue:n.toString(),tagValue:i.toString()}):{operandValue:e,tagValue:t}}function G(e){return void 0===e&&(e=""),i.isBoolean(e)&&(e=!!e),null!==e&&(e=e.toString()),e}function L(e){var t,n,i,a;return r(e,l)?(t=_,n=h(e,l)):r(e,u)?(n=h(e,u),i=r(n,g),a=r(n,f),i&&a?t=I:i?t=A:a&&(t=O),n=n.replace(g,"").replace(f,"")):r(e,c)?(t=m,n=h(e,c)):r(e,E)?(t=b,n=h(e,E)):r(e,d)?(t=y,n=h(e,d)):r(e,S)?(t=T,n=h(e,S)):r(e,p)?(t=N,n=h(e,p)):(t=R,n=e),{operandType:t,operandValue:n}}e.exports={extractOperandValue:h,processValues:U,preProcessTagValue:G,preProcessOperandValue:L,operandCustomVariablesParser:function(e,t){var n=a(e),i=n.key,r=i;if(e=n.value,!t.hasOwnProperty(i))return!1;var o=t[r];o=G(o);var s=L(e),l=s.operandType,u=U(s.operandValue,o);return o=u.tagValue,function(e,t,n){var i;switch(e){case _:null!==n&&(i=t.toLowerCase()===n.toLowerCase());break;case I:null!==n&&(i=n.indexOf(t)>-1);break;case A:null!==n&&(i=n.endsWith(t));break;case O:null!==n&&(i=n.startsWith(t));break;case m:try{var r=new RegExp(t,"g");i=!!r.test(n)}catch(e){i=!1}break;case b:if(null!==n)try{i=parseFloat(t)parseFloat(n)}catch(e){i=!1}break;case N:if(null!==n)try{i=parseFloat(t)>=parseFloat(n)}catch(e){i=!1}break;default:i=n===t}return i}(l,u.operandValue,o)},operandUserParser:function(e,t){for(var n=e.split(","),i=0;i>>32-t}e.exports=function(e){var t=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var a=unescape(encodeURIComponent(e));e=new Array(a.length);for(var o=0;o>>0;v=p,p=S,S=r(d,30)>>>0,d=E,E=I}n[0]=n[0]+E>>>0,n[1]=n[1]+d>>>0,n[2]=n[2]+S>>>0,n[3]=n[3]+p>>>0,n[4]=n[4]+v>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]}},function(e,t,n){var i=n(3),r=n(5),a=n(8),o=n(7),s=n(6),l=n(1),u=n(0),c=n(2),g=u.LogLevelEnum,f=u.LogMessageEnum,E=u.LogMessageUtil,d=c.GetVariation;e.exports=function(e,t,n){var u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},c=r.GET_VARIATION_NAME,S=!1;if(l.isObject(u)){var p=u.customVariables,v=u.variationTargetingVariables,_=u.userStorageData,I=u.metaData;s.areValidParamsForAPIMethod({method:r.GET_VARIATION_NAME,campaignKey:t,userId:n,customVariables:p,variationTargetingVariables:v,userStorageData:_,metaData:I})&&(S=!0)}if(!1===S)return e.logger.log(g.ERROR,E.build(f.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:d,api:r.GET_VARIATION_NAME})),null;var A=e.SettingsFileManager.getConfig(),O=e.SettingsFileManager.getSettingsFile(c);if(A.apiName=c,!O)return null;var m=o.getCampaign(O,t);if(!m||m.status!==i.STATUS_RUNNING)return e.logger.log(g.WARN,E.build(f.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:d,campaignKey:t,api:c})),null;if(o.isFeatureRolloutCampaign(m))return e.logger.log(g.ERROR,E.build(f.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:d,campaignKey:t,campaignType:m.type,userId:n,api:c})),null;var R=a.getVariation(A,O,m,t,n,p,v,_,I,!1,!1,void 0,c);return l.isPromise(R)?R.then((function(e){return e})):R.variationName?R.variationName:null}},function(e,t,n){function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=i(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a=n(3),o=n(9),s=n(5),l=n(8),u=n(7),c=n(10).objectValues,g=n(11),f=n(6),E=n(1),d=n(0),S=n(2),p=d.LogLevelEnum,v=d.LogMessageEnum,_=d.LogMessageUtil,I=S.Track,A=o.ALL,O=s.TRACK;function m(e,t,n,i,r,a,o,s,u,c,f,E,d,S,p){if(!Object.keys(p).length)return null;if(u&&u.length)for(var v=0;v0){var _=g.getEventsBaseProperties(n,a,{},d,S),I=g.getTrackGoalPayloadData(n,r,a,s,o,i,E);e.eventQueue.process(t,_,e,{payload:I,responseCallback:f}),n.isEventArchEnabled||Object.keys(s).forEach((function(e){l._saveUserData(t,s[e].campaign,s[e].variationName,s[e].userId,s[e].metaData,a)}))}return t.isDevelopmentMode?Object.assign({},p,{isDevelopmentMode:t.isDevelopmentMode}):p}function R(e,t,n,i,r,s,c,g,d,S,m,R,T,N,h,U,G,L,F,C,V){if(!t||t.status!==a.STATUS_RUNNING)return e.logger.log(p.WARN,_.build(v.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:I,campaignKey:n,api:O})),!1;if(u.isFeatureRolloutCampaign(t))return e.logger.log(p.ERROR,_.build(v.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:I,campaignKey:n,campaignType:t.type,userId:i,api:O})),!1;var P=t.id,M=u.getCampaignGoal(r,t.key,s);if(!M)return e.logger.log(p.ERROR,_.build(v.ERROR_MESSAGES.TRACK_API_GOAL_NOT_FOUND,{file:I,userId:i,goalIdentifier:s,campaignKey:n})),!1;if(R!==A&&M.type!==R)return!1;if(M.type===o.REVENUE&&!f.isValidValue(c)){if(!r.isEventArchEnabled)return y(e,i,s,n),!1;if(-1!==M.mca){if(E.isUndefined(F)||!F.hasOwnProperty(M.revenueProp))return y(e,i,s,n),!1}else if(M.revenueProp&&(E.isUndefined(F)||!F.hasOwnProperty(M.revenueProp)))return y(e,i,s,n),!1}M.type===o.REVENUE&&M.revenueProp&&U.add(M.revenueProp);var D=l.getVariation(g,r,t,n,i,d,S,m,N,!1,!0,s,O);return E.isPromise(D)?D.then((function(a){return Object.keys(a).length?b(e,n,P,i,g,M,T,r,t,s,c,N,h,G,L,F,C,V,a):null})):b(e,n,P,i,g,M,T,r,t,s,c,N,h,G,L,F,C,V,D)}function b(e,t,n,i,r,a,o,s,u,c,f,E,d,S,A,O,m,R,b){var y=b.variationId,T=b.variationName,N=b.storedGoalIdentifier;if(T){if(N)if(N.split("_vwo_").includes(c)){if(!o&&-1!==a.mca)return e.logger.log(p.INFO,_.build(v.INFO_MESSAGES.CAMPAIGN_GOAL_ALREADY_TRACKED,{file:I,userId:i,goalIdentifier:c,campaignKey:t})),!1}else N+="_vwo_"+c,s.isEventArchEnabled||l._saveUserData(r,u,T,i,E,N);if(r.batchEvents){var h=g.buildBatchEventForTrackingGoal(s,n,y,i,a,f,O,m,R);e.batchEventsQueue.enqueue(h)}else{if(s.isEventArchEnabled)return d[u.id]={config:r,campaign:u,variationName:T,userId:i,metaData:E,goal:a},!0;var U={};U=A?g.buildBatchEventForTrackingGoal(s,n,y,i,a,f,m,R):g.buildEventForTrackingGoal(s,n,y,i,a,f,m,R),S.push(U)}return s.isEventArchEnabled||l._saveUserData(r,u,T,i,E,c),!0}return!1}function y(e,t,n,i){e.logger.log(p.ERROR,_.build(v.ERROR_MESSAGES.TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL,{file:I,userId:t,goalIdentifier:n,campaignKey:i}))}e.exports=function(e,t,n,i){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},l=!1;if(E.isObject(a)){var g=a.revenueValue,d=a.customVariables,S=a.variationTargetingVariables,b=a.userStorageData,y=a.goalTypeToTrack,T=a.shouldTrackReturningUser,N=a.metaData,h=a.responseCallback,U=a.eventProperties,G=a.userAgent,L=a.userIpAddress,F=G;f.areValidParamsForAPIMethod({method:s.TRACK,campaignKey:t,userId:n,goalIdentifier:i,customVariables:d,variationTargetingVariables:S,userStorageData:b,goalTypeToTrack:y,shouldTrackReturningUser:T,metaData:N,responseCallback:h,eventProperties:U,visitorUserAgent:F,userIpAddress:L})&&(!y||y&&c(o).includes(y))&&(l=!0)}if(!1===l)return e.logger.log(p.ERROR,_.build(v.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:I,api:s.TRACK})),null;var C=e.SettingsFileManager.getConfig(),V=e.SettingsFileManager.getSettingsFile(O);C.apiName=O;var P=new Set;if(!V)return null;var M=u.getCampaign(V,t);if(M&&M.hasOwnProperty("isMAB")&&!0===M.isMAB&&void 0===e.userStorageService)return e.logger.log(p.ERROR,"("+I+") This campaign: "+t+" has MAB configured. Please configure User Storage to proceed."),null;var D=[];if(y=y||C.goalTypeToTrack||A,E.isUndefined(T)&&(T=!!E.isBoolean(C.shouldTrackReturningUser)&&C.shouldTrackReturningUser),E.isString(t)){var k=u.getCampaign(V,t);D.push(k||{key:t})}else D=E.isArray(t)?u.getCampaignsForKeys(V,t):u.getCampaignsForGoal(V,i,y);var B={},j={},K=[],w=!1;D.forEach((function(t){return B[t.key]=R(e,t,t.key,n,V,i,g,C,d,S,b,y,T,N,j,P,K,w,U,F,L)}));var x=!!(B&&Object.keys(B).length>0)&&Object.values(B).every((function(e){return E.isPromise(e)}));return x?Promise.all(Object.values(B)).then((function(t){return t.forEach((function(t,a){var o=Object.keys(B)[a],s=m(e,C,V,P,n,i,g,j,K,w,h,U,F,L,r({},o,t));B[o]=s[o]})),B})):m(e,C,V,P,n,i,g,j,K,w,h,U,F,L,B)}},function(e,t,n){var i=n(3),r=n(5),a=n(8),o=n(7),s=n(11),l=n(6),u=n(1),c=n(0),g=n(2),f=n(12),E=c.LogLevelEnum,d=c.LogMessageEnum,S=c.LogMessageUtil,p=g.IsFeatureEnabled;function v(e,t,n,i,r,a,l,u,c,g,v,_){var I=_.variation,A=_.variationId,O=_.variationName,m=_.isStoredVariation,R=!1;if(O){if(R=o.isFeatureRolloutCampaign(u)||I.isFeatureEnabled,!m||a){if(i.batchEvents){var b=s.buildBatchEventForTrackingUser(l,u.id,A,n,g,v);e.batchEventsQueue.enqueue(b)}else if(l.isEventArchEnabled){var y=s.getEventsBaseProperties(l,f.VWO_VARIATION_SHOWN,e.usageStats.getUsageStats(),g,v),T=s.getTrackUserPayloadData(l,n,f.VWO_VARIATION_SHOWN,u.id,A);e.eventQueue.process(i,y,e,{payload:T,responseCallback:c})}else{var N=s.buildEventForTrackingUser(l,u.id,A,n,e.usageStats.getUsageStats(),g,v);e.eventQueue.process(i,N,e,{responseCallback:c})}return e.logger.log(E.INFO,S.build(d.INFO_MESSAGES.FEATURE_STATUS,{file:p,campaignKey:t,userId:n,status:R?"enabled":"disabled"})),i.isDevelopmentMode?{isFeatureEnabled:R}:R}e.logger.log(E.INFO,S.build(d.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED,{file:p,userId:n,campaignKey:t,api:r}))}return e.logger.log(E.INFO,S.build(d.INFO_MESSAGES.FEATURE_STATUS,{file:p,campaignKey:t,userId:n,status:R?"enabled":"disabled"})),m||i.isDevelopmentMode,{isFeatureEnabled:R}}e.exports=function(e,t,n){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},c=r.IS_FEATURE_ENABLED,g=!1;if(u.isObject(s)){var f=s.customVariables,_=s.variationTargetingVariables,I=s.userStorageData,A=s.shouldTrackReturningUser,O=s.metaData,m=s.responseCallback,R=s.userAgent,b=s.userIpAddress,y=R;l.areValidParamsForAPIMethod({method:r.IS_FEATURE_ENABLED,campaignKey:t,userId:n,customVariables:f,variationTargetingVariables:_,userStorageData:I,shouldTrackReturningUser:A,metaData:O,responseCallback:m,visitorUserAgent:y,userIpAddress:b})&&(g=!0)}if(!1===g)return e.logger.log(E.ERROR,S.build(d.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:p,api:r.isFeatureEnabled})),null;var T=e.SettingsFileManager.getConfig(),N=e.SettingsFileManager.getSettingsFile(c);if(!N)return null;A=A||T.shouldTrackReturningUser||!1;var h=o.getCampaign(N,t);if(h&&h.hasOwnProperty("isMAB")&&!0===h.isMAB&&void 0===e.userStorageService)return e.logger.log(E.ERROR,"("+p+") This campaign: "+t+" has MAB configured. Please configure User Storage to proceed."),null;if(!h||h.status!==i.STATUS_RUNNING)return e.logger.log(E.WARN,S.build(d.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:p,campaignKey:t,api:c})),null;if(o.isAbCampaign(h))return e.logger.log(E.ERROR,S.build(d.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:p,campaignKey:t,campaignType:h.type,userId:n,api:c})),null;var U=a.getVariation(T,N,h,t,n,f,_,I,O,!0,!1,void 0,c);return u.isPromise(U)?U.then((function(i){return v(e,t,n,T,c,A,N,h,m,y,b,i)})):v(e,t,n,T,c,A,N,h,m,y,b,U)}},function(e,t,n){var i=n(3),r=n(5),a=n(8),o=n(7),s=n(6),l=n(56),u=n(1),c=n(10),g=n(0),f=n(2),E=g.LogLevelEnum,d=g.LogMessageEnum,S=g.LogMessageUtil,p=f.GetFeatureVariableValue;function v(e,t,n,i,r,a){var s,u=a.variation,g=a.variationName;if(!g)return e.logger.log(E.INFO,S.build(d.INFO_MESSAGES.FEATURE_STATUS,{file:p,campaignKey:t,userId:i,status:"disabled"})),null;if(o.isFeatureRolloutCampaign(r)?s=l.getVariableForFeature(r,n):o.isFeatureTestCampaign(r)&&(s=l.getVariableValueForVariation(r,u,n),c.areObjectKeys(s)&&u.isFeatureEnabled?e.logger.log(E.INFO,S.build(d.INFO_MESSAGES.FEATURE_VARIABLE_VALUE,{file:p,variableKey:n,campaignKey:r.key,variableValue:s.value,userId:i})):c.areObjectKeys(s)&&!u.isFeatureEnabled&&e.logger.log(E.INFO,S.build(d.INFO_MESSAGES.FEATURE_VARIABLE_DEFAULT_VALUE,{file:p,variableKey:n,variationName:g}))),!c.areObjectKeys(s))return e.logger.log(E.ERROR,S.build(d.ERROR_MESSAGES.VARIABLE_NOT_FOUND,{file:p,variableKey:n,userId:i})),null;var f=s.value;return l.getTypeCastVariableValue(f,s.type)}e.exports=function(e,t,n,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var g=r.GET_FEATURE_VARIABLE_VALUE,f=!1;if(u.isObject(c)){var _=c.customVariables,I=c.variationTargetingVariables,A=c.userStorageData,O=c.metaData;s.areValidParamsForAPIMethod({method:r.GET_FEATURE_VARIABLE_VALUE,campaignKey:t,variableKey:n,userId:l,customVariables:_,variationTargetingVariables:I,userStorageData:A,metaData:O})&&(f=!0)}if(!1===f)return e.logger.log(E.ERROR,S.build(d.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:p,api:r.GetFeatureVariableValue})),null;var m=e.SettingsFileManager.getConfig(),R=e.SettingsFileManager.getSettingsFile(g);if(m.apiName=g,!R)return null;var b=o.getCampaign(R,t);if(!b||b.status!==i.STATUS_RUNNING)return e.logger.log(E.WARN,S.build(d.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:p,campaignKey:t,api:g})),null;if(o.isAbCampaign(b))return e.logger.log(E.ERROR,S.build(d.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:p,campaignKey:t,campaignType:b.type,userId:l,api:g})),null;var y=a.getVariation(m,R,b,t,l,_,I,A,O,!1,!1,void 0,g);return u.isPromise(y)?y.then((function(i){return v(e,t,n,l,b,i)})):v(e,t,n,l,b,y)}catch(t){return e.logger.log(E.ERROR,t.message),null}}},function(e,t,n){var i=n(7),r=n(1),a=n(57),o=n(0),s=n(2),l=o.LogLevelEnum,u=o.LogMessageEnum,c=o.LogMessageUtil,g=o.getLogger(),f=s.FeatureUtil,E={getVariableForFeature:function(e,t){var n={};if(i.isFeatureRolloutCampaign(e)){for(var r=e.variables||[],a=0;a5&&void 0!==arguments[5]?arguments[5]:{},S=d.responseCallback,p=i.PUSH;if(!s.areValidParamsForAPIMethod({method:i.PUSH,tagKey:t,tagValue:n,userId:r,customDimensionMap:a,responseCallback:S}))return e.logger.log(c.ERROR,f.build(g.ERROR_MESSAGES.PUSH_INVALID_PARAMS,{file:E,method:p})),!1;if(t.length>255)return e.logger.log(c.ERROR,f.build(g.ERROR_MESSAGES.TAG_KEY_LENGTH_EXCEEDED,{file:E,tagKey:t,userId:r})),!1;if(n.length>255)return e.logger.log(c.ERROR,f.build(g.ERROR_MESSAGES.TAG_VALUE_LENGTH_EXCEEDED,{file:E,tagKey:t,userId:r,tagValue:n})),!1;if(" "===t&&" "===n&&(!a||0===Object.keys(a).length))return e.logger.log(c.ERROR,f.build(g.ERROR_MESSAGES.PUSH_INVALID_PARAMS,{file:E,method:p})),!1;" "!==t&&" "!==n&&(a[t]=n);var v=e.SettingsFileManager.getConfig(),_=e.SettingsFileManager.getSettingsFile(p);if(!_)return!1;var I={};if(v.batchEvents)Object.keys(a).forEach((function(t){var n=u.isString(a[t])?a[t]:JSON.stringify(a[t]),i=l.buildBatchEventForPushing(_,t,n,r);e.batchEventsQueue.enqueue(i),I[t]=!0}));else if(_.isEventArchEnabled){var A=l.getEventsBaseProperties(_,o.VWO_SYNC_VISITOR_PROP),O=l.getPushPayloadData(_,r,o.VWO_SYNC_VISITOR_PROP,a);e.eventQueue.process(v,A,e,{payload:O,responseCallback:S}),I.success=!0}else{var m=[],R=Object.keys(a);R.forEach((function(t){var n,i=u.isString(a[t])?a[t]:JSON.stringify(a[t]);n=l.buildEventForPushing(_,t,i,r),e.eventQueue.process(v,n,e,{responseCallback:S}),m.push(n),I[t]=!0}))}return v.isDevelopmentMode?Object.assign({},I,{isDevelopmentMode:v.isDevelopmentMode}):I}},function(e,t,n){function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},r=i.payload,a=i.responseCallback,o={};t&&t.visitor_ua&&(o[c.USER_AGENT]=encodeURIComponent(t.visitor_ua),t.visitor_ua=o[c.USER_AGENT]),t&&t.visitor_ip&&(o[c.IP]=encodeURIComponent(t.visitor_ip),t.visitor_ip=o[c.IP]),e&&e.isDevelopmentMode?d.log(g.DEBUG,E.build(f.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS,{file:S})):this.enqueue(t,n,{payload:r,responseCallback:a},o)}},{key:"enqueue",value:function(e,t,n){var i=n.payload,r=n.responseCallback,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.queue.push({eventName:e.eventName,properties:e,callback:function(){i?s.dispatchPostCall(e,i,{responseCallback:r},a):s.dispatchGetCall(e,{responseCallback:r},a)}}),d.log(g.INFO,E.build(f.INFO_MESSAGES.EVENT_QUEUE,{file:S,queueType:"normal",event:"VWO_MASKED_PAYLOAD"})),t.eventQueue.executeNext(e),this.running||this.executeNext(e),this}},{key:"executeNext",value:function(e){if(this.running=!1,this.queue&&this.queue.length){var t=this.queue.shift();t&&(this.running=!0,t.callback&&o.isFunction(t.callback)&&t.callback(e))}}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();e.exports=p},function(e,t,n){var i=n(0),r=n(2),a=i.LogLevelEnum,o=i.LogMessageEnum,s=i.LogMessageUtil,l=i.getLogger(),u=n(4),c=n(12),g=["url"],f=r.EventDispatcherUtil,E={dispatchGetCall:function(e,t){var i=t.responseCallback,c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},f="?";f+=u.convertObjectKeysToString(e,g);try{n(61).sendCall(e,f,{successCallback:i},c)}catch(t){var E=e.url;l.log(a.ERROR,s.build(o.ERROR_MESSAGES.IMPRESSION_FAILED,{file:r.EventDispatcher,endPoint:E,err:t}))}return!1},handleGetResponse:function(e,t,n){if(t)return l.log(a.ERROR,s.build(o.ERROR_MESSAGES.IMPRESSION_FAILED,{file:f,endPoint:n.endPoint,err:t})),!1;var i={file:f,endPoint:n.endPoint,accountId:e&&e.account_id},r={};if(i.endPoint.includes("push")){var u=JSON.parse(e.tags).u;(r=Object.assign({},i,{customVariables:u})).mainKeys="customDimension:".concat(JSON.stringify(r.customVariables))}else(r=Object.assign({},i,{campaignId:e&&e.experiment_id,variationId:e&&e.combination})).mainKeys="campaignId:".concat(r.campaignId," and variationId:").concat(r.variationId);return l.log(a.INFO,s.build(o.INFO_MESSAGES.IMPRESSION_SUCCESS,r)),!0},dispatchPostCall:function(e,t,i){var c=this,f=i.responseCallback,E=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},d="?";d+=u.convertObjectKeysToString(e,g);try{return"undefined"==typeof XMLHttpRequest?n(22).send({method:"POST",url:"".concat(e.url).concat(d),payload:t,customHeaders:E}).then((function(){c.handlePostResponse(e,t),f&&f(null,{status:"success"})})).catch((function(n){c.handlePostResponse(e,t,n),f(n,{status:"failure"})})):n(23).send({method:"POST",url:"".concat(e.url).concat(d),payload:t,customHeaders:E,logger:l}).then((function(){c.handlePostResponse(e,t),f&&f(null,{status:"success"})})).catch((function(n){c.handlePostResponse(e,t,n),f(n,{status:"failure"})}))}catch(t){var S=e.url;l.log(a.ERROR,s.build(o.ERROR_MESSAGES.IMPRESSION_FAILED,{file:r.EventDispatcherUtil,endPoint:S,err:t}))}return Promise.resolve(!1)},handlePostResponse:function(e,t,n){var i=e.url;if(n)return l.log(a.ERROR,s.build(o.ERROR_MESSAGES.IMPRESSION_FAILED,{file:f,endPoint:i,err:n})),!1;var r="".concat(e.en," event");return e.en===c.VWO_SYNC_VISITOR_PROP&&(delete t.d.visitor.props.vwo_fs_environment,r="visitor property:".concat(JSON.stringify(t.d.visitor.props))),l.log(a.INFO,s.build(o.INFO_MESSAGES.IMPRESSION_SUCCESS_FOR_EVENT_ARCH,{file:f,endPoint:i,accountId:e.a,event:r})),!0}};e.exports=E},function(e,t,n){var i=n(0),r=n(2),a=i.LogLevelEnum,o=i.LogMessageEnum,s=i.LogMessageUtil,l=i.getLogger(),u=r.HttpXMLUtil,c=function(){},g=function(e){var t={file:u,endPoint:e.url,accountId:e&&e.account_id},n={};if(t.endPoint.includes("push")){var i=JSON.parse(e.tags).u;(n=Object.assign({},t,{customVariables:i})).mainKeys="customDimension:".concat(JSON.stringify(n.customVariables))}else(n=Object.assign({},t,{campaignId:e&&e.experiment_id,variationId:e&&e.combination})).mainKeys="campaignId:".concat(n.campaignId," and variationId:").concat(n.variationId);l.log(a.INFO,s.build(o.INFO_MESSAGES.IMPRESSION_SUCCESS,n))},f={sendCall:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r="".concat(e.url).concat(t),a=n.successCallback,o=n.errorCallback;o=o||a;var s=!1;"undefined"!=typeof XMLHttpRequest?this.handleGetCall(e,t,a,o,r,s,i):fetch(r,{method:"GET",headers:i}).then((function(){s||(s=!0,a(null,{status:"success"}))})).catch((function(t){s||(s=!0,o(null,{status:"success"}),g(e))}))},handleGetCall:function(e,t,n,i,r,a){var o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};n=n||c,i=i||c;var s=new XMLHttpRequest;for(var l in s.open("GET",r,!0),o)o.hasOwnProperty(l)&&s.setRequestHeader(l,o[l]);console.log("Headers added to the request:",s.getAllResponseHeaders()),s.onload=function(){if(s.status>=200&&s.status<300){var t=s.responseText;n(t),g(e)}else i(s.statusText),g(e)},s.onerror=function(){i(s.statusText),g(e)},s.send()}};e.exports=f},function(e,t){e.exports={USER_AGENT:"X-Device-User-Agent",IP:"VWO-X-Forwarded-For"}},function(e,t,n){function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:this._clonedSettingsFile.accountId,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._clonedSettingsFile.sdkKey;return new Promise((function(i,r){l.get(t,n,null,{isViaWebhook:!0}).then((function(t){e.updateSettingsFile(t),i(t)})).catch((function(e){}))}))}},{key:"updateSettingsFile",value:function(e){this._clonedSettingsFile=s.cloneObject(e),this.processSettingsFile()}},{key:"getConfig",value:function(){return this._configObj}},{key:"getSettingsFile",value:function(e){return this._clonedSettingsFile||this._configObj.logger.log(E.ERROR,S.build(d.ERROR_MESSAGES.API_HAS_CORRUPTED_SETTINGS_FILE,{file:p,api:e})),this._clonedSettingsFile}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();e.exports=v},function(e,t,n){function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var i,r,a,o,s=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(i=a.call(n)).done)&&(s.push(i.value),s.length!==t);l=!0);}catch(e){u=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw r}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return r(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=Array(t);n=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function*s(e,t){!0===e||(!1===e?yield t.fail():yield*e)}function l(e){const{done:t,value:n}=e.next();return t?void 0:n}n.r(t),n.d(t,"Struct",(function(){return u})),n.d(t,"StructError",(function(){return c})),n.d(t,"any",(function(){return R})),n.d(t,"array",(function(){return b})),n.d(t,"assert",(function(){return g})),n.d(t,"boolean",(function(){return y})),n.d(t,"coerce",(function(){return f})),n.d(t,"coercion",(function(){return S})),n.d(t,"date",(function(){return T})),n.d(t,"defaulted",(function(){return p})),n.d(t,"dynamic",(function(){return N})),n.d(t,"empty",(function(){return I})),n.d(t,"enums",(function(){return h})),n.d(t,"func",(function(){return U})),n.d(t,"instance",(function(){return G})),n.d(t,"intersection",(function(){return L})),n.d(t,"is",(function(){return E})),n.d(t,"lazy",(function(){return F})),n.d(t,"length",(function(){return A})),n.d(t,"literal",(function(){return C})),n.d(t,"map",(function(){return V})),n.d(t,"masked",(function(){return v})),n.d(t,"never",(function(){return P})),n.d(t,"nullable",(function(){return M})),n.d(t,"number",(function(){return D})),n.d(t,"object",(function(){return k})),n.d(t,"optional",(function(){return B})),n.d(t,"partial",(function(){return j})),n.d(t,"pattern",(function(){return O})),n.d(t,"record",(function(){return K})),n.d(t,"refinement",(function(){return m})),n.d(t,"set",(function(){return w})),n.d(t,"string",(function(){return x})),n.d(t,"struct",(function(){return H})),n.d(t,"tuple",(function(){return W})),n.d(t,"type",(function(){return J})),n.d(t,"union",(function(){return q})),n.d(t,"validate",(function(){return d}));class u{constructor(e){const{type:t,schema:n,coercer:i=(e=>e),validator:r=(()=>[]),refiner:a=(()=>[])}=e;this.type=t,this.schema=n,this.coercer=i,this.validator=r,this.refiner=a}}class c extends TypeError{constructor(e,t){const{path:n,value:i,type:r,branch:a}=e,s=o(e,["path","value","type","branch"]);let l;super(`Expected a value of type \`${r}\`${n.length?` for \`${n.join(".")}\``:""} but received \`${JSON.stringify(i)}\`.`),this.value=i,Object.assign(this,s),this.type=r,this.path=n,this.branch=a,this.failures=function(){return l||(l=[e,...t]),l},this.stack=(new Error).stack,this.__proto__=c.prototype}}function g(e,t){const n=d(e,t);if(n[0])throw n[0]}function f(e,t){const n=t.coercer(e);return g(n,t),n}function E(e,t){return!d(e,t)[0]}function d(e,t,n=!1){n&&(e=t.coercer(e));const i=function*e(t,n,i=[],r=[]){const{type:o}=n,u={value:t,type:o,branch:r,path:i,fail:(e={})=>a({value:t,type:o,path:i,branch:[...r,t]},e),check(t,n,a,o){const s=void 0!==a?[...i,o]:i,l=void 0!==a?[...r,a]:r;return e(t,n,s,l)}},c=s(n.validator(t,u),u),g=l(c);g?(yield g,yield*c):yield*s(n.refiner(t,u),u)}(e,t),r=l(i);if(r){return[new c(r,i),void 0]}return[void 0,e]}function S(e,t){const n=e.coercer;return new u(a(a({},e),{},{coercer:e=>n(t(e))}))}function p(e,t,n){return S(e,e=>{const i="function"==typeof t?t():t;if(void 0===e)return i;if(!0!==n&&_(e)&&_(i)){const t=a({},e);let n=!1;for(const e in i)void 0===t[e]&&(t[e]=i[e],n=!0);if(n)return t}return e})}function v(e){return S(e,t=>{if(!_(t))return t;const n={};for(const i in e.schema)n[i]=t[i];return n})}function _(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function I(e){return m(e,e.type+" & Empty",e=>0===e.length)}function A(e,t,n){return m(e,`${e.type} & Length<${t},${n}>`,e=>t`,e=>t.test(e))}function m(e,t,n){const i=e.refiner;return new u(a(a({},e),{},{type:t,*refiner(e,t){yield*s(i(e,t),t),yield*s(n(e,t),t)}}))}function R(){return H("any",()=>!0)}function b(e){return new u({type:`Array<${e?e.type:"unknown"}>`,schema:e,coercer:t=>e&&Array.isArray(t)?t.map(t=>f(t,e)):t,*validator(t,n){if(Array.isArray(t)){if(e)for(const[i,r]of t.entries())yield*n.check(r,e,t,i)}else yield n.fail()}})}function y(){return H("boolean",e=>"boolean"==typeof e)}function T(){return H("Date",e=>e instanceof Date&&!isNaN(e.getTime()))}function N(e){return H("Dynamic<...>",(t,n)=>n.check(t,e(t,n)))}function h(e){return H(`Enum<${e.map(Q)}>`,t=>e.includes(t))}function U(){return H("Function",e=>"function"==typeof e)}function G(e){return H(`InstanceOf<${e.name}>`,t=>t instanceof e)}function L(e){return H(e.map(e=>e.type).join(" & "),(function*(t,n){for(const i of e)yield*n.check(t,i)}))}function F(e){let t;return H("Lazy<...>",(n,i)=>(t||(t=e()),i.check(n,t)))}function C(e){return H(`Literal<${Q(e)}>`,t=>t===e)}function V(e,t){return H(`Map<${e.type},${t.type}>`,(function*(n,i){if(n instanceof Map)for(const[r,a]of n.entries())yield*i.check(r,e,n,r),yield*i.check(a,t,n,r);else yield i.fail()}))}function P(){return H("never",()=>!1)}function M(e){return new u({type:e.type+" | null",schema:e.schema,validator:(t,n)=>null===t||n.check(t,e)})}function D(){return H("number",e=>"number"==typeof e&&!isNaN(e))}function k(e){const t=e?Object.keys(e):[],n=P();return new u({type:e?`Object<{${t.join(",")}}>`:"Object",schema:e||null,coercer:e?Y(e):e=>e,*validator(i,r){if("object"==typeof i&&null!=i){if(e){const a=new Set(Object.keys(i));for(const n of t){a.delete(n);const t=e[n],o=i[n];yield*r.check(o,t,i,n)}for(const e of a){const t=i[e];yield*r.check(t,n,i,e)}}}else yield r.fail()}})}function B(e){return new u({type:e.type+"?",schema:e.schema,validator:(t,n)=>void 0===t||n.check(t,e)})}function j(e){e instanceof u&&(e=e.schema);const t=Object.keys(e),n=P();return new u({type:`Partial<{${t.join(",")}}>`,schema:e,coercer:Y(e),*validator(i,r){if("object"!=typeof i||null==i)return void(yield r.fail());const a=new Set(Object.keys(i));for(const n of t){if(a.delete(n),!(n in i))continue;const t=e[n],o=i[n];yield*r.check(o,t,i,n)}for(const e of a){const t=i[e];yield*r.check(t,n,i,e)}}})}function K(e,t){return H(`Record<${e.type},${t.type}>`,(function*(n,i){if("object"==typeof n&&null!=n)for(const r in n){const a=n[r];yield*i.check(r,e,n,r),yield*i.check(a,t,n,r)}else yield i.fail()}))}function w(e){return H(`Set<${e.type}>`,(t,n)=>{if(!(t instanceof Set))return!1;for(const i of t){const[t]=n.check(i,e);if(t)return!1}return!0})}function x(){return H("string",e=>"string"==typeof e)}function H(e,t){return new u({type:e,validator:t,schema:null})}function W(e){const t=P();return H(`[${e.map(e=>e.type).join(",")}]`,(function*(n,i){if(Array.isArray(n)){for(const[t,r]of e.entries()){const e=n[t];yield*i.check(e,r,n,t)}if(n.length>e.length){const r=e.length,a=n[r];yield*i.check(a,t,n,r)}}else yield i.fail()}))}function J(e){const t=Object.keys(e);return H(`Type<{${t.join(",")}}>`,(function*(n,i){if("object"==typeof n&&null!=n)for(const r of t){const t=e[r],a=n[r];yield*i.check(a,t,n,r)}else yield i.fail()}))}function q(e){return H(""+e.map(e=>e.type).join(" | "),(function*(t,n){for(const i of e){const[...e]=n.check(t,i);if(0===e.length)return}yield n.fail()}))}function Q(e){return"string"==typeof e?`"${e.replace(/"/g,'"')}"`:""+e}function Y(e){const t=Object.keys(e);return n=>{if("object"!=typeof n||null==n)return n;const i={},r=new Set(Object.keys(n));for(const a of t){r.delete(a);const t=e[a],o=n[a];i[a]=f(o,t)}for(const e of r)i[e]=n[e];return i}}},function(e,t,n){function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){for(var n=0;n0&&(this.data._l=1),this.data}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();e.exports=s}])})); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.vwoSdk=t():e.vwoSdk=t()}(this,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var a=t[i]={i:i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(i,a,function(t){return e[t]}.bind(null,a));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=25)}([function(e,t,n){var i=n(32);e.exports=i},function(e,t){var n={_toStringValue:function(e){return Object.prototype.toString.call(e)},isNumber:function(e){return"[object Number]"===n._toStringValue(e)},isString:function(e){return"[object String]"===n._toStringValue(e)},isObject:function(e){return"[object Object]"===n._toStringValue(e)},isFunction:function(e){return"[object Function]"===n._toStringValue(e)},isBoolean:function(e){return"[object Boolean]"===n._toStringValue(e)},isPromise:function(e){return"[object Promise]"===n._toStringValue(e)},isUndefined:function(e){return"[object Undefined]"===n._toStringValue(e)||void 0===e},isNull:function(e){return"[object Null]"===n._toStringValue(e)},isArray:function(e){return"[object Array]"===n._toStringValue(e)}};e.exports=n},function(e,t){e.exports={INDEX:"".concat("lib","/index"),VWO:"".concat("lib","/VWO"),API:"".concat("lib","/api/index"),Activate:"".concat("lib","/api/activate"),GetVariation:"".concat("lib","/api/getVariation"),Track:"".concat("lib","/api/track"),IsFeatureEnabled:"".concat("lib","/api/isFeatureEnabled"),GetFeatureVariableValue:"".concat("lib","/api/getFeatureVariableValue"),Push:"".concat("lib","/api/push"),SegmentEvaluator:"".concat("lib/core","/SegmentEvaluator"),BucketingService:"".concat("lib/core","/BucketingService"),VariationDecider:"".concat("lib/core","/VariationDecider"),ConsoleLogManager:"".concat("lib/services","/ConsoleLogManager"),EventQueue:"".concat("lib/services","/EventQueue"),LoggingManager:"".concat("lib/services","/LoggingManager"),SettingsFileManager:"".concat("lib/services","/SettingsFileManager"),BatchEventsQueue:"".concat("lib/services","/BatchEventsQueue"),CampaignUtil:"".concat("lib/util","/CampaignUtil"),DataTypeUtil:"".concat("lib/util","/DataTypeUtil"),EventDispatcher:"".concat("lib/util","/EventDispatcher"),EventDispatcherUtil:"".concat("lib/util","/EventDispatcherUtil"),FeatureUtil:"".concat("lib/util","/FeatureUtil"),Functionutil:"".concat("lib/util","/Functionutil"),ImpressionUtil:"".concat("lib/util","/ImpressionUtil"),UuidUtil:"".concat("lib/util","/UuidUtil"),ValidateUtil:"".concat("lib/util","/ValidateUtil"),DecisionUtil:"".concat("lib/util","/DecisionUtils"),HttpHandlerUtil:"".concat("lib/util","/HttpHandlerUtil"),HttpImageUtil:"".concat("lib/util","/HttpImageUtil"),HttpXMLUtil:"".concat("lib/util","/HttpXMLUtil"),UsageStatsUtil:"".concat("lib/services","/UsageStats")}},function(e,t,n){var i={};i={name:"vwo-javascript-sdk",version:"1.70.0"},e.exports={SDK_NAME:i.name,SDK_VERSION:i.version,PLATFORM:"server",SEED_VALUE:1,MAX_TRAFFIC_PERCENT:100,MAX_TRAFFIC_VALUE:1e4,MAX_EVENTS_PER_REQUEST:5e3,DEFAULT_EVENTS_PER_REQUEST:100,DEFAULT_REQUEST_TIME_INTERVAL:600,STATUS_RUNNING:"RUNNING",SEED_URL:"https://vwo.com",HTTP_PROTOCOL:"http://",HTTPS_PROTOCOL:"https://",SDK_QUERY_PARAM:"sdk",SDK_VERSION_QUERY_PARAM:"sdk-v"}},function(e,t,n){var i={cloneObject:function(e){return e?JSON.parse(JSON.stringify(e)):e},getRandomNumber:function(){return Math.random()},getCurrentUnixTimestamp:function(){return Math.ceil(+new Date/1e3)},getCurrentUnixTimestampInMillis:function(){return+new Date},matchWithRegex:function(e,t){try{return e.match(new RegExp(t))}catch(e){var i=n(0),a=n(2),r=i.getLogger(),o=i.LogLevelEnum,s=i.LogMessageEnum,l=i.LogMessageUtil,u=a.FunctionUtil;return r.log(o.ERROR,l.build(s.ERROR_MESSAGES.SEGMENTATION_REGEX_CREATION_FAILED,{file:u,regex:t})),null}},getCurrentTime:function(){return(new Date).toISOString()},convertObjectKeysToString:function(e,t){var n="";for(var i in t=t||[],e)e.hasOwnProperty(i)&&-1===t.indexOf(i)&&(n+=i+"="+e[i]+"&");return n},objectValues:function(e){var t=[];for(var n in e)t.push(e[n]);return t}};e.exports=i},function(e,t){e.exports={LAUNCH:"launch",ACTIVATE:"activate",GET_VARIATION_NAME:"getVariation",TRACK:"track",IS_FEATURE_ENABLED:"isFeatureEnabled",GET_FEATURE_VARIABLE_VALUE:"getFeatureVariableValue",PUSH:"push"}},function(e,t,n){var i;function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var r=n(1),o=n(30),s=n(5),l=n(9),u=(a(i={},s.ACTIVATE,(function(e){var t=e.campaignKey,n=e.userId,i=e.customVariables,a=void 0===i?{}:i,r=e.variationTargetingVariables,s=void 0===r?{}:r,l=e.userStorageData,u=void 0===l?{}:l,c=e.shouldTrackReturningUser,g=void 0!==c&&c,E=e.metaData,f=void 0===E?{}:E;return[{key:"campaignKey",value:t,type:o.STRING},{key:"userId",value:n,type:o.STRING},{key:"customVariables",value:a,type:o.OBJECT},{key:"variationTargetingVariables",value:s,type:o.OBJECT},{key:"userStorageData",value:u,type:o.OBJECT},{key:"shouldTrackReturningUser",value:g,type:o.BOOLEAN},{key:"metaData",value:f,type:o.OBJECT}]})),a(i,s.TRACK,(function(e){var t=e.campaignKey,n=e.userId,i=e.goalIdentifier,a=e.customVariables,r=void 0===a?{}:a,s=e.variationTargetingVariables,u=void 0===s?{}:s,c=e.userStorageData,g=void 0===c?{}:c,E=e.goalTypeToTrack,f=void 0===E?l.ALL:E,d=e.shouldTrackReturningUser,S=void 0!==d&&d,p=e.metaData,v=void 0===p?{}:p;return[{key:"campaignKey",value:t,type:o.STRING_NULL_UNDEFINED_ARRAY},{key:"userId",value:n,type:o.STRING},{key:"goalIdentifier",value:i,type:o.STRING},{key:"customVariables",value:r,type:o.OBJECT},{key:"variationTargetingVariables",value:u,type:o.OBJECT},{key:"userStorageData",value:g,type:o.OBJECT},{key:"goalTypeToTrack",value:f,type:o.STRING},{key:"shouldTrackReturningUser",value:S,type:o.BOOLEAN},{key:"metaData",value:v,type:o.OBJECT}]})),a(i,s.IS_FEATURE_ENABLED,(function(e){var t=e.campaignKey,n=e.userId,i=e.customVariables,a=void 0===i?{}:i,r=e.variationTargetingVariables,s=void 0===r?{}:r,l=e.userStorageData,u=void 0===l?{}:l,c=e.shouldTrackReturningUser,g=void 0!==c&&c,E=e.metaData,f=void 0===E?{}:E;return[{key:"campaignKey",value:t,type:o.STRING},{key:"userId",value:n,type:o.STRING},{key:"customVariables",value:a,type:o.OBJECT},{key:"variationTargetingVariables",value:s,type:o.OBJECT},{key:"userStorageData",value:u,type:o.OBJECT},{key:"shouldTrackReturningUser",value:g,type:o.BOOLEAN},{key:"metaData",value:f,type:o.OBJECT}]})),a(i,s.GET_FEATURE_VARIABLE_VALUE,(function(e){var t=e.campaignKey,n=e.variableKey,i=e.userId,a=e.customVariables,r=void 0===a?{}:a,s=e.variationTargetingVariables,l=void 0===s?{}:s,u=e.userStorageData,c=void 0===u?{}:u,g=e.metaData,E=void 0===g?{}:g;return[{key:"campaignKey",value:t,type:o.STRING},{key:"variableKey",value:n,type:o.STRING},{key:"userId",value:i,type:o.STRING},{key:"customVariables",value:r,type:o.OBJECT},{key:"variationTargetingVariables",value:l,type:o.OBJECT},{key:"userStorageData",value:c,type:o.OBJECT},{key:"metaData",value:E,type:o.OBJECT}]})),a(i,s.PUSH,(function(e){var t=e.tagKey,n=e.tagValue,i=e.userId,a=e.customDimensionMap;return[{key:"tagKey",value:t,type:o.STRING},{key:"tagValue",value:n,type:o.STRING},{key:"userId",value:i,type:o.STRING},{key:"customDimensionMap",value:a,type:o.OBJECT}]})),i);u[s.GET_VARIATION_NAME]=u[s.ACTIVATE];var c={isValidValue:function(e){return!(void 0===e||!e)},isValidString:function(e){return c.isValidValue(e)&&r.isString(e)},isValidNumber:function(e){return c.isValidValue(e)&&r.isNumber(e)},isValidFunction:function(e){return c.isValidValue(e)&&r.isFunction(e)},isValidBoolean:function(e){return void 0!==e&&r.isBoolean(e)},isValidObject:function(e){return void 0!==e&&r.isObject(e)},areValidParamsForAPIMethod:function(e){for(var t=u[e.method](e),n=[],i=0;i0},setVariationAllocation:function(e){for(var t=e.variations.length,n=0,i=0;n6&&void 0!==arguments[6]?arguments[6]:{},c=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{},S=arguments.length>8?arguments[8]:void 0,p=arguments.length>9?arguments[9]:void 0,A=arguments.length>10?arguments[10]:void 0,O=arguments.length>11?arguments[11]:void 0,R=arguments.length>12&&void 0!==arguments[12]?arguments[12]:"",T=_.generateFor(a,t.accountId);d.log(g.DEBUG,f.build(E.DEBUG_MESSAGES.USER_UUID,{file:u.UuidUtil,userId:a,accountId:t.accountId,uuid:T}));var N={campaignId:n.id,campaignKey:i,campaignType:n.type,campaignName:n.name,customVariables:s,event:v.DECISION_TYPES.CAMPAIGN_DECISION,goalIdentifier:O,isForcedVariationEnabled:n.isForcedVariationEnabled,sdkVersion:I.SDK_VERSION,source:R,userId:a,variationTargetingVariables:l,vwoUserId:T},h=r.isPartOfGroup(t,n.id),b=h.groupId,y=h.groupName;b&&(N.groupId=b,N.groupName=y),l=Object.assign({},l,{_vwoUserId:n.isUserListEnabled?T:a});var U=m._checkForWhitelisting(e,n,i,a,l,N);return U?o.isPromise(U)?U.then((function(e){if(Object.keys(e).length>0)return e})):U:e.asyncStorageConfig?new Promise((function(r){return m._checkForUserStorage(e,t,n,i,a,c,p,N).then((function(u){if(u&&o.isObject(u)&&Object.keys(u).length>0)r(Object.assign({},{isStoredVariation:!0},u));else if(A)r(Object.assign({}));else{var g=m.evaluateAndGetVariationWithoutStorage(e,t,n,i,a,s,l,c,S,p,O,N,b,y);r(g)}}))})):m._checkForUserStorage(e,t,n,i,a,c,p,N)||m.evaluateAndGetVariationWithoutStorage(e,t,n,i,a,s,l,c,S,p,O,N,b,y)},evaluateAndGetVariationWithoutStorage:function(e,t,n,i,s,l,u,c,S,p,v,_,I,A){if(!m._checkForPreSegmentation(n,i,s,l,_)||!a.isUserPartOfCampaign(s,n,!0))return{};if(I){var O=r.getGroupCampaigns(t,I);if(0===O.length)return{};var T=m._checkForStorageAndWhitelisting(e,t,A,O,n,s,c,u,p);if(T)return d.log(g.INFO,f.build(E.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER,{userId:s,groupName:A,file:R,campaignKey:i})),o.isPromise(T)?new Promise((function(e){e(Object.assign({}))})):{};var N="",h="",b=m.getEligbleCampaigns(O,s,l),y=b.eligibleCampaigns,U=b.inEligibleCampaigns;U.forEach((function(e){N=N+e.key+","})),y.forEach((function(e){h=h+e.key+","})),d.log(g.DEBUG,f.build(E.DEBUG_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS,{userId:s,groupName:A,file:R,eligibleCampaignKeys:h.slice(0,-1),inEligibleText:""===N?"no campaigns":"campaigns: ".concat(N.slice(0,-1))})),d.log(g.INFO,f.build(E.INFO_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS,{userId:s,groupName:A,file:R,noOfEligibleCampaigns:y.length,noOfGroupCampaigns:U.length+y.length}));var G=void 0!==t.groups[I].et?t.groups[I].et:1;return 1===y.length?m.evaluateTrafficAndGetVariation(e,y[0],y[0].key,s,S,v,_):1===G?m._normalizeAndFindWinningCampaign(e,n,y,s,A,I,S,v,_):m._advancedAlgoFindWinningCampaign(e,t,n,y,s,A,I,S,v,_)}return m.evaluateTrafficAndGetVariation(e,n,i,s,S,v,_)},_evaluateWhitelisting:function(e,t,n,i){var l,u,p=arguments.length>4&&void 0!==arguments[4]&&arguments[4],v=[];if(e.variations.forEach((function(a){!o.isObject(a.segments)||Object.keys(a.segments).length?(o.isObject(a.segments)&&S(a.segments,i,t,n,a.name)?(u=c.PASSED,v.push(s.cloneObject(a))):u=c.FAILED,d.log(g.DEBUG,f.build(E.DEBUG_MESSAGES.SEGMENTATION_STATUS,{campaignKey:t,userId:n,customVariables:JSON.stringify(i),file:R,status:u,segmentationType:T,variation:e.type===A.FEATURE_ROLLOUT&&u===c.PASSED?"and becomes part of the rollout":"for ".concat(a.name)}),p)):d.log(g.DEBUG,f.build(E.DEBUG_MESSAGES.SEGMENTATION_SKIPPED,{campaignKey:t,userId:n,file:R,variation:e.type===A.FEATURE_ROLLOUT?"":", for ".concat(a.name)}),p)})),v.length>1){r.scaleVariationWeights(v);for(var _=0,I=0;_0?(c=!0,d.log(g.INFO,f.build(E.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE,{file:R,campaignKey:i.key,groupName:n,userId:r,type:"user storage"})),!0):void 0}})),e.asyncStorageConfig?new Promise((function(e){e(c)})):c},_checkForPreSegmentation:function(e,t,n,i,a){var r;return o.isObject(e.segments)&&!Object.keys(e.segments).length?(d.log(g.DEBUG,f.build(E.DEBUG_MESSAGES.SEGMENTATION_SKIPPED,{campaignKey:t,userId:n,file:R}),!a),!0):(r=S(e.segments,i,t,n,!a)?c.PASSED:c.FAILED,d.log(g.INFO,f.build(E.INFO_MESSAGES.SEGMENTATION_STATUS,{campaignKey:t,userId:n,customVariables:JSON.stringify(i||{}),file:R,status:r,segmentationType:N,variation:""}),!a),r!==c.FAILED)},evaluateTrafficAndGetVariation:function(e,t,n,a,r,o,s){var l,u,c,S=i.getVariationAllotted(a,t,e.settingsFile.accountId);return l=S.variation,u=S.variationName,c=S.variationId,d.log(g.INFO,f.build(E.INFO_MESSAGES.USER_VARIATION_ALLOCATION_STATUS,{file:R,campaignKey:n,userId:a,status:u?"got variation:".concat(u):"did not get any variation"})),u&&m._saveUserData(e,t,u,a,r,o),p.execute(Object.assign({fromUserStorageService:!1,isUserWhitelisted:!1},t.type===A.FEATURE_ROLLOUT?{isFeatureEnabled:!!u}:{variationName:u,variationId:c},s)),{variation:l&&l.variation,variationName:u,variationId:c}},_checkForWhitelisting:function(e,t,n,i,a,r){var o,s,l;if(t.isForcedVariationEnabled){var u,S=m._evaluateWhitelisting(t,n,i,a,!r);if(S?(o=c.PASSED,u=S.variationName):(o=c.FAILED,u=""),d.log(g.INFO,f.build(E.INFO_MESSAGES.SEGMENTATION_STATUS,{campaignKey:n,userId:i,customVariables:JSON.stringify(a),file:R,status:o,segmentationType:T,variation:t.type===A.FEATURE_ROLLOUT?"":"for variation: ".concat(u)}),!r),S)return s=S.variationName,l=S.variationId,r&&p.execute(Object.assign({fromUserStorageService:!1,isUserWhitelisted:!!s},t.type===A.FEATURE_ROLLOUT?{isFeatureEnabled:!!s}:{variationName:s,variationId:l},r)),e.asyncStorageConfig?new Promise((function(e){return e(S)})):S}else d.log(g.DEBUG,f.build(E.DEBUG_MESSAGES.WHITELISTING_SKIPPED,{campaignKey:n,userId:i,file:R}),!r)},_checkForUserStorage:function(e,t,n,i,a,r,o,s){var l;return e.asyncStorageConfig?m._getStoredUserData(e,a,i,r,!s).then((function(r){return r=r||{variationName:null,goalIdentifier:null},m._processAfterGettingFromStorage(e,t,n,i,a,o,s,r)})):(l=m._getStoredUserData(e,a,i,r,!s),m._processAfterGettingFromStorage(e,t,n,i,a,o,s,l))},_processAfterGettingFromStorage:function(e,t,n,i,a,s,l,u){var c,S,v=u.variationName,_=u.goalIdentifier;return u&&u.campaignKey&&v?c=r.getCampaignVariation(t,i,v):d.log(g.DEBUG,f.build(E.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NO_STORED_DATA,{file:R,campaignKey:i,userId:a}),!l),c?(v=c.name,S=c.id,d.log(g.INFO,f.build(E.INFO_MESSAGES.GOT_STORED_VARIATION,{file:R,campaignKey:i,userId:a,variationName:v}),!l),l&&p.execute(Object.assign({fromUserStorageService:!!v,isUserWhitelisted:!1},n.type===A.FEATURE_ROLLOUT?{isFeatureEnabled:!!v}:{variationName:v,variationId:S},l)),{variation:c,variationName:v,variationId:S,storedGoalIdentifier:_,isStoredVariation:!0}):o.isUndefined(e.userStorageService)||s||!o.isUndefined(c)?void 0:(d.log(g.WARN,f.build(E.WARNING_MESSAGES.CAMPAIGN_NOT_ACTIVATED,{file:R,campaignKey:i,userId:a,api:e.apiName}),!l),d.log(g.INFO,f.build(E.INFO_MESSAGES.CAMPAIGN_NOT_ACTIVATED,{file:R,campaignKey:i,userId:a,reason:e.apiName===O.TRACK?"track it":"get the decision/value"}),!l),{})},getEligbleCampaigns:function(e,t,n){var i=[],r=[];return e.forEach((function(e){m._checkForPreSegmentation(e,e.key,t,n)&&a.isUserPartOfCampaign(t,e,!0)?(e=s.cloneObject(e),i.push(e)):r.push(e)})),{eligibleCampaigns:i,inEligibleCampaigns:r}},_normalizeAndFindWinningCampaign:function(e,t,n,i,o,s,l,u,c){n.forEach((function(e){e.weight=Math.floor(100/n.length)})),r.setCampaignAllocation(n);var S=a._getVariation(n,a.calculateBucketValue(r.getBucketingSeed(i,void 0,s)));return d.log(g.INFO,f.build(E.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN,{userId:i,groupName:o,file:R,campaignKey:S.key})),S.id===t.id?m.evaluateTrafficAndGetVariation(e,S,S.key,i,l,u,c):(d.log(g.INFO,f.build(E.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER,{userId:i,groupName:o,file:R,campaignKey:t.key})),{})},_advancedAlgoFindWinningCampaign:function(e,t,n,i,o,l,u,c,S,p){for(var v=null,_=!1,I=void 0!==t.groups[u].p?t.groups[u].p:{},A=void 0!==t.groups[u].wt?t.groups[u].wt:{},O=0;O0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).length},getKeyValue:function(e){if(n.areObjectKeys(e)){var t=Object.keys(e)[0];return{key:t,value:e[t]}}},objectValues:function(e){return Object.keys(e).map((function(t){return e[t]}))}};e.exports=n},function(e,t,n){function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a=n(3),r=n(14),o=n(9),s=n(20),l=n(6),u=n(4),c=n(0),g=n(2),E=n(1),f=c.LogLevelEnum,d=c.LogMessageEnum,S=c.LogMessageUtil,p=c.getLogger(),v=n(21);function _(e,t){var n=e.accountId;return Object.assign({},function(e,t){return{sId:u.getCurrentUnixTimestamp(),u:s.generateFor(t,e.accountId)}}(e,t),I.getReportingProperties(e),{account_id:n,random:u.getRandomNumber(),ap:a.PLATFORM})}var I={buildEventForPushing:function(e,t,n,o){var s=Object.assign({},_(e,o));return s.url=a.HTTPS_PROTOCOL+v.getBaseUrl()+r.PUSH,s.tags=JSON.stringify({u:i({},encodeURIComponent(t),encodeURIComponent(n))}),p.log(f.DEBUG,S.build(d.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH,{file:g.ImpressionUtil,properties:this._getStringifiedLogProperties(s)})),s},buildBatchEventForPushing:function(e,t,n,i){},buildEventForTrackingUser:function(e,t,n,i,o){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"",l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"",u=Object.assign({experiment_id:t,combination:n,visitor_ua:s,visitor_ip:l},_(e,i),o);return u.ed=JSON.stringify({p:"server"}),u.url=a.HTTPS_PROTOCOL+v.getBaseUrl()+r.TRACK_USER,p.log(f.DEBUG,S.build(d.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER,{file:g.ImpressionUtil,properties:this._getStringifiedLogProperties(u)})),u},buildBatchEventForTrackingUser:function(e,t,n,i){},buildEventForTrackingGoal:function(e,t,n,i){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},u=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,c=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"",E=arguments.length>7&&void 0!==arguments[7]?arguments[7]:"",I=s.id,A=Object.assign({experiment_id:t,combination:n},_(e,i));return A.visitor_ua=c,A.visitor_ip=E,A.url=a.HTTPS_PROTOCOL+v.getBaseUrl()+r.TRACK_GOAL,A.goal_id=I,s.type===o.REVENUE&&l.isValidValue(u)&&(A.r=u),p.log(f.DEBUG,S.build(d.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL,{file:g.ImpressionUtil,properties:this._getStringifiedLogProperties(A)})),A},buildBatchEventForTrackingGoal:function(e,t,n,i){},getReportingProperties:function(e){var t,n=e.sdkKey;return i(t={},a.SDK_QUERY_PARAM,a.SDK_NAME),i(t,a.SDK_VERSION_QUERY_PARAM,a.SDK_VERSION),i(t,"env",n),t},getEventsBaseProperties:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",s=e.sdkKey,l=Object.assign({en:t,a:e.accountId,env:s,eTime:u.getCurrentUnixTimestampInMillis(),random:u.getRandomNumber(),p:"FS",visitor_ua:i,visitor_ip:o},n);return l.url=a.HTTPS_PROTOCOL+v.getBaseUrl()+r.EVENTS,l},getEventBasePayload:function(e,t,n){var i=s.generateFor(t,e.accountId),r=e.sdkKey,o={vwo_sdkName:a.SDK_NAME,vwo_sdkVersion:a.SDK_VERSION,vwo_envKey:r};return{d:{msgId:"".concat(i,"-").concat(u.getCurrentUnixTimestampInMillis()),visId:i,sessionId:u.getCurrentUnixTimestamp(),event:{props:o,name:n,time:u.getCurrentUnixTimestampInMillis()},visitor:{props:{vwo_fs_environment:r}}}}},getTrackUserPayloadData:function(e,t,n,i,a){var r=this.getEventBasePayload(e,t,n);return r.d.event.props.id=i,r.d.event.props.variation=a,r.d.event.props.isFirst=1,p.log(f.DEBUG,S.build(d.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_USER,{file:g.ImpressionUtil,accountId:e.accountId,userId:t,campaignId:i})),r},getTrackGoalPayloadData:function(e,t,n,i,a,r){var o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},s=this.getEventBasePayload(e,t,n),l={};if(Object.keys(i).forEach((function(a){l["id_".concat(a)]=["g_".concat(i[a].goal.id)],p.log(f.DEBUG,S.build(d.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL,{file:g.ImpressionUtil,goalName:n,accountId:e.accountId,u:t,campaignId:a}))})),s.d.event.props.vwoMeta={metric:l},r&&a&&r.size>0&&r.forEach((function(e){s.d.event.props.vwoMeta[e]=a})),s.d.event.props.isCustomEvent=!0,Object.keys(o).length>0)for(var u in o)s.d.event.props[u]=o[u];return s},getPushPayloadData:function(e,t,n,i){var a=this.getEventBasePayload(e,t,n);return a.d.event.props.isCustomEvent=!0,Object.keys(i).forEach((function(e){var t=E.isString(i[e])?i[e]:JSON.stringify(i[e]);a.d.visitor.props[e]=t})),p.log(f.DEBUG,S.build(d.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_PUSH,{file:g.ImpressionUtil,accountId:e.accountId,userId:t,property:JSON.stringify(i)})),a},_getStringifiedLogProperties:function(e){var t=Object.assign({},e);return delete t.env,JSON.stringify(t)}};e.exports=I},function(e,t){e.exports={VWO_VARIATION_SHOWN:"vwo_variationShown",VWO_SYNC_VISITOR_PROP:"vwo_syncVisitorProp"}},function(e,t){var n={init:function(e){n.isEventArchEnabled=e.isEventArchEnabled,n.isNB=e.isNB,n.isNBv2=e.isNBv2},getAll:function(){return{isEventArchEnabled:n.isEventArchEnabled,isNB:n.isNB,isNBv2:n.isNBv2}}};e.exports=n},function(e,t){e.exports={BASE_URL:"dev.visualwebsiteoptimizer.com",SETTINGS_URL:"/server-side/settings",WEBHOOK_SETTINGS_URL:"/server-side/pull",TRACK_USER:"/server-side/track-user",TRACK_GOAL:"/server-side/track-goal",PUSH:"/server-side/push",BATCH_EVENTS:"/server-side/batch-events",EVENTS:"/events/t"}},function(e,t,n){var i=n(31),a=n(3),r=n(6),o=n(13),s=n(0),l=n(2),u=n(7),c=s.LogLevelEnum,g=s.LogMessageEnum,E=s.LogMessageUtil,f=s.getLogger(),d=l.BucketingService,S={_generateBucketValue:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=e/Math.pow(2,32),a=(t*i+1)*n,r=Math.floor(a);return r},_getVariation:function(e,t){for(var n=0;n=i.startVariationAllocation&&t<=i.endVariationAllocation)return i}return null},_getBucketValueForUser:function(e,t,n){var r=i.v3(e,a.SEED_VALUE),o=S._generateBucketValue(r,a.MAX_TRAFFIC_PERCENT);return f.log(c.DEBUG,E.build(g.DEBUG_MESSAGES.USER_HASH_BUCKET_VALUE,{file:d,hashValue:r,bucketValue:o,userId:t}),n),o},isUserPartOfCampaign:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!t)return!1;var i=t.percentTraffic,a=S._getBucketValueForUser(u.getBucketingSeed(e,t),e,n),r=0!==a&&a<=i;return f.log(c.INFO,E.build(g.INFO_MESSAGES.USER_CAMPAIGN_ELIGIBILITY,{file:d,userId:e,campaignKey:t.key,status:r?"eligible":"not eligible"}),n),r},bucketUserToVariation:function(e,t,n){var i,s,l=o.getAll().isNB,p=o.getAll().isNBv2;if(!r.isValidValue(e))return null;if(!t)return null;(!l&&!p||l&&t.isOB)&&t.percentTraffic?(i=a.MAX_TRAFFIC_VALUE/t.percentTraffic/100,s=u.getBucketingSeed(e,t)):l&&!t.isOB&&!p||p&&t.isOBv2?(i=1,s=e):(i=1,s=u.getBucketingSeed(n+"_"+e,t));var v=S._generateHashValue(s),_=S._generateBucketValue(v,a.MAX_TRAFFIC_VALUE,i);return f.log(c.DEBUG,E.build(g.DEBUG_MESSAGES.USER_CAMPAIGN_BUCKET_VALUES,{file:d,userId:e,campaignKey:t.key,percentTraffic:t.percentTraffic,bucketValue:_,hashValue:v})),S._getVariation(t.variations,_)},calculateBucketValue:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=S._generateHashValue(e);return S._generateBucketValue(n,a.MAX_TRAFFIC_VALUE,t)},_generateHashValue:function(e){return i.v3(e,a.SEED_VALUE)}};e.exports=S},function(e,t,n){var i,a;function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var o=n(37),s={NOTSET:0,DEBUG:1,INFO:2,WARN:3,ERROR:4},l=(r(i={},s.NOTSET,"".concat(o.BOLD).concat(o.WHITE,"[NOTSET]:").concat(o.RESET)),r(i,s.DEBUG,"".concat(o.BOLD).concat(o.LIGHTBLUE,"[DEBUG]: ").concat(o.RESET)),r(i,s.INFO,"".concat(o.BOLD).concat(o.CYAN,"[INFO]: ").concat(o.RESET)),r(i,s.WARN,"".concat(o.BOLD).concat(o.YELLOW,"[WARN]: ").concat(o.RESET)),r(i,s.ERROR,"".concat(o.BOLD).concat(o.RED,"[ERROR]: ").concat(o.RESET)),i),u=(r(a={},s.NOTSET,"[NOTSET]:"),r(a,s.DEBUG,"[DEBUG]: "),r(a,s.INFO,"[INFO]: "),r(a,s.WARN,"[WARN]: "),r(a,s.ERROR,"[ERROR]: "),a);e.exports={LogLevelEnum:s,LogNumberLevel:{_0:"NOTSET",_1:"DEBUG",_2:"INFO",_3:"WARN",_4:"ERROR"},LogLevelInfoEnum:u,LogLevelColorInfoEnum:l}},function(e,t){e.exports={FEATURE_TEST:"FEATURE_TEST",FEATURE_ROLLOUT:"FEATURE_ROLLOUT",AB:"VISUAL_AB"}},function(e,t,n){var i={SegmentOperandTypes:n(42),SegmentOperatorTypes:n(43),SegmentOperandValueTypeRegexes:n(44),SegmentOperandValues:n(45)};e.exports=i},function(e,t,n){var i=n(1),a={init:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.callback=e.integrations&&e.integrations.callback},execute:function(e){i.isFunction(this.callback)&&this.callback(e)}};e.exports=a},function(e,t,n){var i=n(48),a=n(3),r=i(a.SEED_URL,i.URL),o={generateFor:function(e,t){e="".concat(e);var n="".concat(t),i=o.generate(n,r);return o.generate(e,i).replace(/-/gi,"").toUpperCase()},generate:function(e,t){if(e&&t)return i(e,t)}};e.exports=o},function(e,t,n){var i=n(14),a=n(1).isString,r={init:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.collectionPrefix;return t&&a(t)&&(r.collectionPrefix=t),r},getBaseUrl:function(){var e=i.BASE_URL;return r.collectionPrefix?"".concat(e,"/").concat(r.collectionPrefix):e}};e.exports=r},function(e,t,n){var i=n(4).getCurrentTime,a=n(1),r=a.isObject,o=a.isFunction,s={_getStoredSettings:function(e){var t,n=!1;if(e&&r(e)&&o(e.getSettings))try{var a=e.getSettings();if((t=JSON.parse(a))&&r(t)&&Object.keys(t).length>3){var s="VWO-SDK - [INFO]: ".concat(i()," VWO settings found in Storage Service.");console.info(s),n=!0}else if(t){var l="VWO-SDK - [ERROR]: ".concat(i()," VWO settings found in Storage Service is not valid.");console.error(l)}else{var u="VWO-SDK - [WARNING]: ".concat(i()," VWO settings is empty in Storage Service.");console.warn(u)}}catch(e){var c="VWO-SDK - [ERROR]: ".concat(i()," VWO settings found in Storage Service is not valid. ").concat(e);console.error(c),n=!1}return{isStoredData:n,parsedSettings:t}},send:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.method,n=e.url,a=e.payload,l=e.userStorageService,u=e.customHeaders,c=void 0===u?{}:u;if(n&&t)return new Promise((function(e,u){var g=s._getStoredSettings(l),E=g.isStoredData,f=g.parsedSettings;if(!E){var d={method:t,headers:c};return"POST"===t&&(d.body=JSON.stringify(a)),fetch(n,d).then((function(t){return t.text().then((function(n){var a={};try{a=JSON.parse(n)}catch(e){console.info("VWO-SDK - [INFO]: ".concat(i()," VWO didn't send JSON response which is expected: ").concat(e))}if(l&&r(l)&&o(l.setSettings)&&l.setSettings(a),200===t.status)e(a);else{var s="VWO-SDK - [ERROR]: ".concat(i()," Request failed for fetching account settings. Got Status Code: ").concat(t.status);console.error(s),u(s)}}))})).catch((function(e){var t="VWO-SDK - [ERROR]: ".concat(i()," Request failed for fetching account settings. Got Status Code: ").concat(e);console.error(t),u(t)}))}e(f)}))}};e.exports=s},function(e,t,n){var i=n(0).LogLevelEnum,a=n(4).getCurrentTime,r=n(1),o=r.isObject,s=r.isFunction,l={_getStoredSettings:function(e){var t,n=!1;if(e&&o(e)&&s(e.getSettings))try{var i=e.getSettings();if((t=JSON.parse(i))&&o(t)&&Object.keys(t).length>3){var r="VWO-SDK - [INFO]: ".concat(a()," VWO settings found in Storage Service.");console.info(r),n=!0}else if(t){var l="VWO-SDK - [ERROR]: ".concat(a()," VWO settings found in Storage Service is not valid.");console.error(l)}else{var u="VWO-SDK - [WARNING]: ".concat(a()," VWO settings is empty in Storage Service.");console.warn(u)}}catch(e){var c="VWO-SDK - [ERROR]: ".concat(a()," VWO settings found in Storage Service is not valid. ").concat(e);console.error(c),n=!1}return{isStoredData:n,parsedSettings:t}},send:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.method,i=t.url,a=t.payload,r=t.userStorageService,o=t.customHeaders,s=t.logger;if(i&&n)return new Promise((function(t,u){var c=l._getStoredSettings(r),g=c.isStoredData,E=c.parsedSettings;if(g)t(E);else{var f=new XMLHttpRequest;e.xhrHandler(f,n,i,a,r,o,s,t,u)}}))},sendRequest:function(e,t,n,a,r,o,s,l,u){var c=this,g=1e3*(e+1),E=new XMLHttpRequest;for(var f in E.timeout=5e3,E.onload=function(){E.status<200||E.status>=300?e5&&void 0!==arguments[5]?arguments[5]:{},s=arguments.length>6?arguments[6]:void 0,l=arguments.length>7?arguments[7]:void 0,u=arguments.length>8?arguments[8]:void 0;if("GET"===t)try{for(var c in e.onload=function(){r.xhrOnLoad(e,a,l)},e.onerror=function(){r.xhrOnError(e,u)},e.open(t,n),o)o.hasOwnProperty(c)&&e.setRequestHeader(c,o[c]);e.send()}catch(e){console.log(e.message)}else if("POST"===t){var g=0,E=5;this.sendRequest(g,E,s,o,i,t,n,l,u)}},xhrOnLoad:function(e,t,n){try{var i=JSON.parse(e.response);t&&o(t)&&s(t.setSettings)&&t.setSettings(e.response),n(i)}catch(e){console.error(e)}},xhrOnError:function(e,t){var n="VWO-SDK - [ERROR]: ".concat(a()," Request failed for fetching account settings. Got Status Code: ").concat(e.status);console.error(n),t(n)}};e.exports=l},function(e,t,n){var i=n(3),a=n(14),r=n(4),o=r.getRandomNumber,s=r.getCurrentTime,l={get:function(e,t,r){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(e&&t){var l="https",u=a.BASE_URL,c=a.SETTINGS_URL;return s.isViaWebhook&&(c=a.WEBHOOK_SETTINGS_URL),c+="?a=".concat(e,"&")+"i=".concat(t,"&")+"r=".concat(o(),"&")+"platform=".concat(i.PLATFORM,"&")+"".concat(i.SDK_QUERY_PARAM,"=").concat(i.SDK_NAME,"&")+"".concat(i.SDK_VERSION_QUERY_PARAM,"=").concat(i.SDK_VERSION),s.hostname&&s.path&&(l=s.protocol,s.port,u=s.hostname||u,c=s.path||c),"undefined"==typeof XMLHttpRequest?n(22).send({method:"GET",url:"".concat(l,"://").concat(u).concat(c),userStorageService:r}):n(23).send({method:"GET",url:"".concat(l,"://").concat(u).concat(c),userStorageService:r})}console.error("AccountId and sdkKey are required for fetching account settings. Aborting!")},handleHttpRequest:function(e,t,n){var i,a=e.statusCode,r=e.headers["content-type"],o="";if(/^application\/json/.test(r)||(i="Invalid content-type.\nExpected application/json but received ".concat(r)),i)return console.error(i.message),e.resume(),void n(i);e.setEncoding("utf8"),e.on("data",(function(e){o+=e})),e.on("end",(function(){l.handleHttpResponse(a,o,t,n)}))},handleHttpResponse:function(e,t,n,i){try{var a=JSON.parse(t);if(200!==e){var r="VWO-SDK - [ERROR]: ".concat(s()," Request failed for fetching account settings. Got Status Code: ").concat(e," and message: ").concat(t);return console.error(r),void i(r)}n(a)}catch(e){console.error("VWO-SDK - [ERROR]: ".concat(s()," Request failed for fetching account settings - ").concat(e.message)),i(e)}}};e.exports=l},function(e,t,n){var i=n(26),a=n(1),r=n(4),o=n(10).objectValues,s=n(24),l=n(9),u=(n(3).MAX_EVENTS_PER_REQUEST,n(0)),c=n(5),g=n(2).INDEX,E=u.setLogHandler,f=u.setLogLevel,d=u.LogLevelEnum,S=u.LogNumberLevel,p=u.LogMessageEnum,v=u.LogMessageUtil,_=u.getLogger();function I(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=v.build(p.ERROR_MESSAGES.CONFIG_PARAMETER_INVALID,{file:g,parameter:e,type:t,api:c.LAUNCH});throw new Error(_.log(d.ERROR,n))}function A(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=v.build(p.INFO_MESSAGES.CONFIG_PARAMETER_USED,{file:g,parameter:e,type:t});console.info("VWO-SDK - [INFO]: ".concat(r.getCurrentTime()," ").concat(n))}u.setLogLevel(d.ERROR),e.exports={logging:u,setLogger:E,setLogLevel:f,getSettingsFile:s.get,GoalTypeEnum:l,LogLevelEnum:d,launch:function(e){var t={};try{r.cloneObject(e),a.isUndefined(e.shouldTrackReturningUser)||a.isBoolean(e.shouldTrackReturningUser)?a.isUndefined(e.shouldTrackReturningUser)||A("shouldTrackReturningUser","boolean"):I("shouldTrackReturningUser","boolean"),a.isUndefined(e.isDevelopmentMode)||a.isBoolean(e.isDevelopmentMode)?a.isUndefined(e.isDevelopmentMode)||A("isDevelopmentMode","boolean"):I("isDevelopmentMode","boolean"),e.goalTypeToTrack&&!o(l).includes(e.goalTypeToTrack)?I("goalTypeToTrack","string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)"):e.goalTypeToTrack&&A("goalTypeToTrack","string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)"),e.logging&&e.logging.level&&!o(d).includes(e.logging.level)?I("logLevel","number(1,2,3,4)"):e.logging&&e.logging.level&&A("logLevel","number(1,2,3,4)"),e.pollingInterval&&!a.isNumber(e.pollingInterval)?I("pollingInterval","number(in miliiseconds)"):e.pollingInterval&&A("pollingInterval","number(in miliiseconds)"),e.pollingInterval&&a.isUndefined(e.sdkKey)&&I("sdkKey(required for polling)","string"),e.pollingInterval&&!a.isString(e.sdkKey)&&I("sdkKey","string"),a.isUndefined(e.batchEvents)||a.isObject(e.batchEvents)?a.isUndefined(e.batchEvents)||A("batchEvents","object"):I("batchEvents","object"),a.isUndefined(e.returnPromiseFor)||a.isObject(e.returnPromiseFor)?a.isUndefined(e.returnPromiseFor)||A("returnPromiseFor","object"):I("returnPromiseFor","object"),a.isUndefined(e.asyncStorageConfig)||a.isObject(e.asyncStorageConfig)?a.isUndefined(e.asyncStorageConfig)||A("asyncStorageConfig","object"):I("asyncStorageConfig","object"),a.isUndefined(e.integrations)||a.isObject(e.integrations)?a.isUndefined(e.integrations)||A("integrations","object"):I("integrations","object"),a.isUndefined(e.userStorageService)||a.isObject(e.userStorageService)?a.isUndefined(e.userStorageService)||A("userStorageService","object"):I("userStorageService","object"),a.isObject(e.batchEvents)&&(e.batchEvents=null),t=e}catch(e){_.log(d.ERROR,v.build(p.ERROR_MESSAGES.CONFIG_CORRUPTED,{file:g,api:c.LAUNCH})),t={}}return t.isDevelopmentMode&&u.setLogColorMode(!0),t.logging&&a.isObject(t.logging)&&(void 0!==t.logging.haveColoredLogs&&u.setLogColorMode(t.logging.haveColoredLogs),t.logging.logger&&a.isObject(t.logging.logger)&&a.isFunction(t.logging.logger.log)?(u.setLogHandler(t.logging.logger),u.setLogLevel(u.LogLevelEnum.NOTSET),_.log(d.DEBUG,v.build(p.DEBUG_MESSAGES.CONFIG_CUSTOM_LOGGER_USED,{file:g}))):t.logging.logger&&I("logging.logger","object"),void 0!==t.logging.level&&(u.setLogLevel(t.logging.level),_.log(d.DEBUG,v.build(p.DEBUG_MESSAGES.CONFIG_LOG_LEVEL_SET,{file:g,level:S["_"+t.logging.level]})))),t.isDevelopmentMode&&_.log(d.DEBUG,v.build(p.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS,{file:g})),t.logger=t.logging&&t.logging.logger||_,new i(t)}}},function(e,t,n){function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};i(this,e),this.getVariation=this.getVariationName,this.userStorageService=t.userStorageService,this.logger=t.logger,this.returnPromiseFor=t.returnPromiseFor,this.asyncStorageConfig=t.asyncStorageConfig,this.optOut=!1,void 0===this.userStorageService&&t.asyncStorageConfig&&(this.userStorageService=t.asyncStorageConfig.redisStorage,t.userStorageService=this.userStorageService);var n=new E(t);n.isSettingsFileValid()?(this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_VALID,{file:A})),d.init(t),this.eventQueue=new g,this.usageStats=new p,this.SettingsFileManager=n,n.checkAndPoll(),t.isDevelopmentMode||this.usageStats.collectUsageStats(n.getConfig()),this.SettingsFileManager.processSettingsFile(),this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.SDK_INITIALIZED,{file:A})),this.UrlService=S.init(t.settingsFile),this.VWOFeatureFlags=c.init(t.settingsFile)):this.logger.log(v.ERROR,I.build(_.ERROR_MESSAGES.SETTINGS_FILE_INVALID,{file:A}))}var t,n,o;return t=e,(n=[{key:"activate",value:function(e,t){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var a=this;if(a.asyncStorageConfig&&l.isObject(a.asyncStorageConfig))return a.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:A,method:s.ACTIVATE})),new Promise((function(o){if(!n.optOut)return r.activate(a,e,t,i).then((function(e){l.isObject(e)?o(e.variationName):o(e)}));n.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.ACTIVATE})),o(null)}));if(a.returnPromiseFor&&(a.returnPromiseFor.activate||a.returnPromiseFor.all))return a.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:A,method:s.ACTIVATE})),new Promise((function(o){var u;n.optOut?(n.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.ACTIVATE})),o(null)):(i.responseCallback=function(e,t){o(u)},(u=r.activate(a,e,t,i))?l.isObject(u)&&o(u.variationName):o(u))}));if(this.optOut)return this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.ACTIVATE})),null;var o=r.activate(a,e,t,i);return l.isObject(o)?o.variationName:o}catch(e){return this.logger.log(v.ERROR,e.message),null}}},{key:"getVariationName",value:function(e,t){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var a=this;return a.asyncStorageConfig&&l.isObject(a.asyncStorageConfig)?(a.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:A,method:s.GET_VARIATION_NAME})),new Promise((function(o){if(!n.optOut)return r.getVariation(a,e,t,i).then((function(e){l.isObject(e)?o(e.variationName):o(e)}));n.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.GET_VARIATION_NAME})),o(null)}))):a.returnPromiseFor&&(a.returnPromiseFor.getVariationName||a.returnPromiseFor.all)?(a.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:A,method:s.GET_VARIATION_NAME})),new Promise((function(o){n.optOut?(n.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.GET_VARIATION_NAME})),o(null)):o(r.getVariation(a,e,t,i))}))):this.optOut?(this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.GET_VARIATION_NAME})),null):r.getVariation(a,e,t,i)}catch(e){return this.logger.log(v.ERROR,e.message),null}}},{key:"track",value:function(e,t,n){var i=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};try{var o=this;return o.asyncStorageConfig&&l.isObject(o.asyncStorageConfig)?(o.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:A,method:s.TRACK})),new Promise((function(l){if(!i.optOut)return r.track(o,e,t,n,a).then((function(e){l(e)}));i.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.TRACK})),l(null)}))):o.returnPromiseFor&&(o.returnPromiseFor.track||o.returnPromiseFor.all)?(o.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:A,method:s.TRACK})),new Promise((function(c){if(i.optOut)i.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.TRACK})),c(null);else{var g,E=0;a.responseCallback=function(t,n){E+=1,(o.isEventArchEnabled||l.isArray(e)||(l.isUndefined(e)||l.isNull(e))&&u.objectValues(g).filter(Boolean).length||E===u.objectValues(g).filter(Boolean).length)&&c(g)},(g=r.track(o,e,t,n,a))&&u.objectValues(g).some(Boolean)?g&&g.isDevelopmentMode&&(delete g.isDevelopmentMode,c(g)):c(g)}}))):this.optOut?(this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.TRACK})),null):r.track(o,e,t,n,a)}catch(e){return this.logger.log(v.ERROR,e.message),null}}},{key:"isFeatureEnabled",value:function(e,t){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var a=this;if(a.asyncStorageConfig&&l.isObject(a.asyncStorageConfig))return a.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:A,method:s.IS_FEATURE_ENABLED})),new Promise((function(o){if(!n.optOut)return r.isFeatureEnabled(a,e,t,i).then((function(e){l.isObject(e)?o(e.isFeatureEnabled):o(e)}));n.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.IS_FEATURE_ENABLED})),o(null)}));if(a.returnPromiseFor&&(a.returnPromiseFor.isFeatureEnabled||a.returnPromiseFor.all))return a.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:A,method:s.IS_FEATURE_ENABLED})),new Promise((function(o){var u;n.optOut?(n.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.IS_FEATURE_ENABLED})),o(!1)):(i.responseCallback=function(e,t){o(!!u)},u=r.isFeatureEnabled(a,e,t,i),l.isNull(u)?o(!1):l.isObject(u)&&o(!!u.isFeatureEnabled))}));if(this.optOut)return this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.IS_FEATURE_ENABLED})),!1;var o=r.isFeatureEnabled(a,e,t,i);return l.isObject(o)?!!o.isFeatureEnabled:!!o}catch(e){return this.logger.log(v.ERROR,e.message),!1}}},{key:"getFeatureVariableValue",value:function(e,t,n){var i=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};try{var o=this;return o.asyncStorageConfig&&l.isObject(o.asyncStorageConfig)?(o.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE,{file:A,method:s.GET_FEATURE_VARIABLE_VALUE})),new Promise((function(u){if(!i.optOut)return r.getFeatureVariableValue(o,e,t,n,a).then((function(e){l.isObject(e)?u(e.typeCastedValue):u(e)}));i.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.GET_FEATURE_VARIABLE_VALUE})),u(null)}))):o.returnPromiseFor&&(o.returnPromiseFor.getFeatureVariableValue||o.returnPromiseFor.all)?(o.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:A,method:s.GET_FEATURE_VARIABLE_VALUE})),new Promise((function(l){i.optOut?(i.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.GET_FEATURE_VARIABLE_VALUE})),l(null)):l(r.getFeatureVariableValue(o,e,t,n,a))}))):this.optOut?(this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.GET_FEATURE_VARIABLE_VALUE})),null):r.getFeatureVariableValue(o,e,t,n,a)}catch(e){return this.logger.log(v.ERROR,e.message),null}}},{key:"push",value:function(e,t,n){var i=this;try{var a,o=this;if(2===arguments.length)a=e,n=t,e=" ",t=" ";else{if(3!==arguments.length)return this.logger.log(v.ERROR,I.build(_.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:A,api:s.PUSH})),!1;a={}}return o.returnPromiseFor&&(o.returnPromiseFor.push||o.returnPromiseFor.all)?(o.logger.log(v.INFO,I.build(_.INFO_MESSAGES.CONFIG_RETURN_PROMISE,{file:A,method:s.PUSH})),new Promise((function(c){if(i.optOut)i.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.PUSH})),c(null);else{var g,E=0,f={responseCallback:function(e,t){E+=1,(a&&l.isObject(a)&&u.objectValues(a).filter(Boolean).length>1||E===u.objectValues(g).filter(Boolean).length)&&c(g)}};(g=r.push(o,e,t,n,a,f))?g&&g.isDevelopmentMode&&(delete g.isDevelopmentMode,c(g)):c(!1)}}))):this.optOut?(this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:s.PUSH})),null):r.push(o,e,t,n,a)}catch(e){return this.logger.log(v.ERROR,e.message),!1}}},{key:"setOptOut",value:function(){var e=this;return this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.OPT_OUT_API_CALLED,{file:A})),this.returnPromiseFor&&(this.returnPromiseFor.optOut||this.returnPromiseFor.all)?new Promise((function(t){e._destroyInstanceVariables(),e.batchEventsQueue?e.flushEvents().then((function(){e.batchEventsQueue=void 0,t(!0)})):t(!0)})):(this.batchEventsQueue&&this.flushEvents().then((function(){e.batchEventsQueue=void 0})),this._destroyInstanceVariables(),!0)}},{key:"flushEvents",value:function(){this.SettingsFileManager.getSettingsFile().accountId}},{key:"getAndUpdateSettingsFile",value:function(e,t){return this.optOut?(this.logger.log(v.INFO,I.build(_.INFO_MESSAGES.API_NOT_ENABLED,{file:A,api:"getAndUpdateSettingsFile"})),new Promise((function(e){e(null)}))):this.SettingsFileManager.getAndUpdateSettingsFile(e,t)}},{key:"_destroyInstanceVariables",value:function(){this.userStorageService=void 0,this.SettingsFileManager=void 0,this.usageStats=void 0,this.eventQueue=void 0,this.optOut=!0}}])&&a(t.prototype,n),o&&a(t,o),e}();e.exports=O},function(e,t,n){var i=n(28),a=n(52),r=n(53),o=n(54),s=n(55),l=n(58);e.exports={activate:i,getVariation:a,track:r,isFeatureEnabled:o,getFeatureVariableValue:s,push:l}},function(e,t,n){var i=n(3),a=n(5),r=n(8),o=n(7),s=n(11),l=n(6),u=n(1),c=n(0),g=n(2),E=n(12),f=c.LogLevelEnum,d=c.LogMessageEnum,S=c.LogMessageUtil,p=g.Activate;function v(e,t,n,i,a,r,o,u,c,g,v,_){var I=_.variationId,A=_.variationName,O=_.isStoredVariation;if(!l.isValidValue(A))return e.logger.log(f.INFO,S.build(d.INFO_MESSAGES.DECISION_NO_VARIATION_ALLOTED,{file:p,userId:n,campaignKey:t})),null;if(O&&!r)return e.logger.log(f.INFO,S.build(d.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED,{file:p,userId:n,campaignKey:t,api:a})),{variationName:A};if(i.batchEvents){var R=s.buildBatchEventForTrackingUser(o,u.id,I,n,c,g);e.batchEventsQueue.enqueue(R)}else if(o.isEventArchEnabled){var T=s.getEventsBaseProperties(o,E.VWO_VARIATION_SHOWN,e.usageStats.getUsageStats(),c,g),N=s.getTrackUserPayloadData(o,n,E.VWO_VARIATION_SHOWN,u.id,I);e.eventQueue.process(i,T,e,{payload:N,responseCallback:v})}else{var m=s.buildEventForTrackingUser(o,u.id,I,n,e.usageStats.getUsageStats(),c,g);e.eventQueue.process(i,m,e,{responseCallback:v})}return i.isDevelopmentMode?{variationName:A}:A}e.exports=function(e,t,n){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},c=a.ACTIVATE,g=!1;if(u.isObject(s)){var E=s.customVariables,_=s.variationTargetingVariables,I=s.userStorageData,A=s.shouldTrackReturningUser,O=s.metaData,R=s.responseCallback,T=s.userAgent,N=s.userIpAddress,m=T;l.areValidParamsForAPIMethod({method:a.ACTIVATE,campaignKey:t,userId:n,customVariables:E,variationTargetingVariables:_,userStorageData:I,shouldTrackReturningUser:A,metaData:O,responseCallback:R,visitorUserAgent:m,userIpAddress:N})&&(g=!0)}if(!1===g)return e.logger.log(f.ERROR,S.build(d.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:p,api:a.ACTIVATE})),null;var h=e.SettingsFileManager.getConfig(),b=e.SettingsFileManager.getSettingsFile(c);if(!b)return null;A=A||h.shouldTrackReturningUser||!1;var y=o.getCampaign(b,t);if(y&&y.hasOwnProperty("isMAB")&&!0===y.isMAB&&void 0===e.userStorageService)return e.logger.log(f.ERROR,"("+p+") This campaign: "+t+" has MAB configured. Please configure User Storage to proceed."),null;if(!y||y.status!==i.STATUS_RUNNING)return e.logger.log(f.WARN,S.build(d.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:p,campaignKey:t,api:c})),null;if(!o.isAbCampaign(y))return e.logger.log(f.ERROR,S.build(d.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:p,campaignKey:t,campaignType:y.type,userId:n,api:c})),null;var U=r.getVariation(h,b,y,t,n,E,_,I,O,!0,!1,void 0,c);return u.isPromise(U)?U.then((function(i){return v(e,t,n,h,c,A,b,y,m,N,R,i)})):v(e,t,n,h,c,A,b,y,m,N,R,U)}},function(e,t,n){var i=n(6),a=n(15),r=n(0),o=n(2),s=r.LogLevelEnum,l=r.LogMessageEnum,u=r.LogMessageUtil,c=r.getLogger(),g=o.VariationDecider,E={getVariationAllotted:function(e,t,n){var r={variation:null,variationId:null,variationName:null};if(!i.isValidValue(e))return c.log(s.ERROR,u.build(l.ERROR_MESSAGES.USER_ID_INVALID,{file:g,userId:e})),r;if(a.isUserPartOfCampaign(e,t)){var o=E.getVariationOfCampaignForUser(e,t,n)||{};r.variation=o,r.variationId=o.id,r.variationName=o.name}else c.log(s.INFO,u.build(l.INFO_MESSAGES.USER_NOT_PART_OF_CAMPAIGN,{file:g,userId:e,campaignKey:t.key}));return r},getVariationOfCampaignForUser:function(e,t,n){if(!t)return null;var i=a.bucketUserToVariation(e,t,n);return i&&i.name?(c.log(s.INFO,u.build(l.INFO_MESSAGES.USER_VARIATION_STATUS,{file:g,userId:e,campaignKey:t.key,status:"got Varation:".concat(i.name)})),{variation:i,name:i.name,id:i.id}):(c.log(s.INFO,u.build(l.INFO_MESSAGES.USER_VARIATION_STATUS,{file:g,userId:e,campaignKey:t.key,status:"got no variation"})),null)}};e.exports=E},function(e,t){e.exports={NUMBER:"number",STRING:"string",BOOLEAN:"boolean",OBJECT:"object"}},function(e,t,n){!function(){function t(e,t){var n,i,a,r,o,s,l,u;for(n=3&e.length,i=e.length-n,a=t,o=3432918353,s=461845907,u=0;u>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295)<<13|a>>>19))+((5*(a>>>16)&65535)<<16)&4294967295))+((58964+(r>>>16)&65535)<<16);switch(l=0,n){case 3:l^=(255&e.charCodeAt(u+2))<<16;case 2:l^=(255&e.charCodeAt(u+1))<<8;case 1:a^=l=(65535&(l=(l=(65535&(l^=255&e.charCodeAt(u)))*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295}return a^=e.length,a=2246822507*(65535&(a^=a>>>16))+((2246822507*(a>>>16)&65535)<<16)&4294967295,a=3266489909*(65535&(a^=a>>>13))+((3266489909*(a>>>16)&65535)<<16)&4294967295,(a^=a>>>16)>>>0}var n=t;n.v2=function(e,t){for(var n,i=e.length,a=t^i,r=0;i>=4;)n=1540483477*(65535&(n=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+((1540483477*(n>>>16)&65535)<<16),a=1540483477*(65535&a)+((1540483477*(a>>>16)&65535)<<16)^(n=1540483477*(65535&(n^=n>>>24))+((1540483477*(n>>>16)&65535)<<16)),i-=4,++r;switch(i){case 3:a^=(255&e.charCodeAt(r+2))<<16;case 2:a^=(255&e.charCodeAt(r+1))<<8;case 1:a=1540483477*(65535&(a^=255&e.charCodeAt(r)))+((1540483477*(a>>>16)&65535)<<16)}return a=1540483477*(65535&(a^=a>>>13))+((1540483477*(a>>>16)&65535)<<16),(a^=a>>>15)>>>0},n.v3=t,e.exports=n}()},function(e,t,n){function i(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2];if(!n)try{this._customLog(e,t)}catch(e){console.error("VWO: Could not log.",e)}}},{key:"info",value:function(e){this._customLog(o.INFO,e)}},{key:"debug",value:function(e){this._customLog(o.DEBUG,e)}},{key:"warn",value:function(e){this._customLog(o.WARN,e)}},{key:"error",value:function(e){this._customLog(o.ERROR,e)}}])&&i(t.prototype,n),a&&i(t,a),e}();e.exports={LogLevelEnum:o,LogNumberLevel:s,LogMessageUtil:l,LogMessageEnum:a,getLogger:function(e){return new f(e)},setLogHandler:function(e){E=e},setLogLevel:function(e){c=void 0===e?o.ERROR:e},getLogLevel:function(){return c},LogManager:f,setLogColorMode:function(e){g=e,E.isColoredLogEnabled=g},getLogColorMode:function(){return g},globalLogHandler:E}},function(e){e.exports=JSON.parse('{"CONFIG_BATCH_EVENT_LIMIT_EXCEEDED":"({file}): Impression event - {endPoint} failed due to exceeding payload size. Parameter eventsPerRequest in batchEvents config in launch API has value:{eventsPerRequest} for account ID:{accountId}. Please read the official documentation for knowing the size limits","CONFIG_LOG_LEVEL_SET":"({file}): Log level set to {level}","CONFIG_CUSTOM_LOGGER_USED":"({file}): Custom logger used","CONFIG_DEVELOPMENT_MODE_STATUS":"({file}): DEVELOPMENT mode is ON. No tracking call will be made to VWO Server","POLLING_SETTINGS_FILE_REGISTERED":"({file}): Polling of settings-file is registered with a periodic interval of {pollingInterval} ms","SETTINGS_FILE_PROCESSED":"({file}): settings-file matches the schema, validated and properly processed for the Account ID:{accountId}","IMPRESSION_FOR_TRACK_USER":"({file}): Impression built for tracking user - {properties}","IMPRESSION_FOR_TRACK_GOAL":"({file}): Impression built for tracking goal - {properties}","IMPRESSION_FOR_PUSH":"({file}): Impression built for pushing custom dimension - {properties}","IMPRESSION_FOR_EVENT_ARCH_TRACK_USER":"({file}): Impression built for vwo_variationShown event for Account ID:{accountId}, User ID:{userId}, and Campaign ID:{campaignId}","IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL":"({file}): Impression built for {goalName} event for Account ID:{accountId}, User ID:{userId}, and Campaign ID:{campaignId}","IMPRESSION_FOR_EVENT_ARCH_PUSH":"({file}): Impression built for visitor-property:{property} for Account ID:{accountId} and User ID:{userId}","EVENT_BATCH_BEFORE_FLUSHING":"({file}): flushing event queue {manually} having {length} events for Account ID:{accountId}. {timer}","EVENT_BATCH_FLUSH":"{{file}}: Manually flushing batch events for Account ID:{accountId} having {queueLength} events","USER_STORAGE_SERVICE_NOT_CONFIGURED":"({file}): User Storage Service is not configured to get/set the data","USER_STORAGE_SERVICE_NO_STORED_DATA":"({file}): No stored variation for User ID:{userId} for Campaign:{campaignKey} found in User Storage Service","VARIATION_RANGE_ALLOCATION":"({file}): Variation:{variationName} of Campaign:{campaignKey} having weight:{variationWeight} got bucketing range: ( {start} - {end} )","MEG_ELIGIBLE_CAMPAIGNS":"({file}): Campaigns: {eligibleCampaignKeys} are eligible, {inEligibleText} are ineligible from the Group:{groupName} for the User ID:{userId}","SEGMENTATION_SKIPPED":"({file}): Segmentation is not used for Campaign:{campaignKey}, hence skipping evaluating segmentation{variation} for User ID:{userId}","SEGMENTATION_STATUS":"({file}): User ID:{userId} for Campaign:{campaignKey} with variables:{customVariables} {status} {segmentationType} {variation}","WHITELISTING_SKIPPED":"({file}): Whitelisting is not used for Campaign:{campaignKey}, hence skipping evaluating whitelisting for User ID:{userId}","USER_UUID":"({file}): VWO UUID generated for Account Id:{accountId} and User ID:{userId} is {uuid}","USER_HASH_BUCKET_VALUE":"({file}): User ID:{userId} having hash:{hashValue} got bucketValue:{bucketValue}","USER_CAMPAIGN_BUCKET_VALUES":"({file}): User ID:{userId} for Campaign:{campaignKey} having percent-traffic:{percentTraffic} got hash-value:{hashValue} and bucket-value:{bucketValue}"}')},function(e){e.exports=JSON.parse('{"CONFIG_VALID":"({file}): SDK configuration and account settings-file are valid","CONFIG_PARAMETER_USED":"({file}): {parameter} paased in launch API having type:{type}","CONFIG_RETURN_PROMISE":"({file}): {method} API returns a promise as returnPromiseFor is set to true for this API","SDK_INITIALIZED":"({file}): SDK is properly initialzed with the passed configuration","POLLING_SUCCESS":"({file}): settings-file fetched successfully via polling for the accountId:{accountId}","POLLING_SETTINGS_FILE_UPDATED":"({file}): SDK instance is updated with the latest settings-file for the accountId:{accountId}","POLLING_SETTINGS_FILE_NOT_UPDATED":"{file}: settings-file fetched via polling is same as earlier fetched settings","DECISION_NO_VARIATION_ALLOTED":"({file}): Variation was not assigned to the User ID:{userId} for Campaign:{campaignKey}","EVENT_BATCH_DEFAULTS":"({file}): {parameter} not passed in SDK configuration, setting it default to {defaultValue}","EVENT_QUEUE":"({file}): Event with payload:{event} pushed to the {queueType} queue","EVENT_BATCH_After_FLUSHING":"({file}): Event queue having {length} events has been flushed {manually}","CAMPAIGN_NOT_ACTIVATED":"({file}): Activate the campaign:{campaignKey} first for User ID:{userId} to {reason}","CAMPAIGN_USER_ALREADY_TRACKED":"({file}): User ID:{userId} for Campaign:{campaignKey} has already been tracked earlier for \\"{api}\\" API. No tracking call is made to VWO server","CAMPAIGN_GOAL_ALREADY_TRACKED":"({file}): Goal:{goalIdentifier} of Campaign:{campaignKey} for User ID:{userId} has already been tracked earlier. No tracking call is made to VWO server","GOT_STORED_VARIATION":"({file}): Got stored variation from User Storage Service for User ID:{userId} for Campaign:{campaignKey} as Variation:{variationName}","GETTING_DATA_USER_STORAGE_SERVICE":"({file}): Read data from User Storage Service for User ID:{userId} and Campaign:{campaignKey}","SETTING_DATA_USER_STORAGE_SERVICE":"({file}): Set data into User Storage Service for User ID:{userId} and Campaign:{campaignKey}","IMPRESSION_SUCCESS":"({file}): Impression event - {endPoint} was successfully received by VWO having main keys: Account ID:{accountId}, {mainKeys}","IMPRESSION_SUCCESS_FOR_EVENT_ARCH":"({file}): Impression for {event} - {endPoint} was successfully received by VWO for Account ID:{accountId}","IMPRESSION_BATCH_SUCCESS":"({file}): Impression event - {endPoint} was successfully received by VWO having Account ID:{accountId}","IMPRESSION_BATCH_FAILED":"({file}): Batch events couldn\\"t be received by VWO. Calling Flush Callback with error and data","MEG_ELIGIBLE_CAMPAIGNS":"({file}): Got {noOfEligibleCampaigns} eligible winners out of {noOfGroupCampaigns} campaigns from the Group:{groupName} and for User ID:{userId}","OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE":"({file}): Campaign:{campaignKey} of Group:{groupName} satisfies {type} for User ID:{userId}","SEGMENTATION_STATUS":"({file}): User ID:{userId} for Campaign:{campaignKey} with variables:{customVariables} {status} {segmentationType} {variation}","MEG_CALLED_CAMPAIGN_NOT_WINNER":"({file}): Campaign:{campaignKey} does not qualify from the mutually exclusive group:{groupName} for User ID:{userId}","MEG_GOT_WINNER_CAMPAIGN":"({file}): Campaign:{campaignKey} is selected from the mutually exclusive group:{groupName} for the User ID:{userId}","FEATURE_STATUS":"({file}): Campaign:{campaignKey} is {status} for user ID:{userId}","FEATURE_VARIABLE_VALUE":"({file}): For User ID:{userId}, value for variable:{variableKey} of feature:{campaignKey} is:{variableValue}","FEATURE_VARIABLE_DEFAULT_VALUE":"({file}): Feature is not enabled for variation:{variationName}. Returning default value for the variable:{variableKey}","USER_NOT_PART_OF_CAMPAIGN":"({file}): User ID:{userId} did not qualify for Campaign:{campaignKey}","USER_VARIATION_STATUS":"({file}): User ID:{userId} for Campaign:{campaignKey} {status}","USER_CAMPAIGN_ELIGIBILITY":"({file}): User ID:{userId} for Campaign:{campaignKey} is {status} to become part of campaign","USER_VARIATION_ALLOCATION_STATUS":"({file}): User ID:{userId} for Campaign:{campaignKey} {status}","OPT_OUT_API_CALLED":"({file}): You have opted out for not tracking i.e. all API calls will stop functioning and will simply early return","API_NOT_ENABLED":"({file}): {api} API is disabled as you opted out for tracking. Reinitialize the SDK to enable the normal functioning of all APIs.","INITIATING_ACTIVATE":"({file}): Initiating activation of user {userId} for campaign {campaignKey}.","INITIATING_GET_VARIATION":"({file}): Initiating getVariation of user \'{userId}\' for campaign \'{campaignKey}\'.","INITIATING_GET_FEATURE_VARIATION":"({file}): Initiating getFeatureVariable for variable key \'{variableKey}\' of user \'{userId}\' for campaign \'{campaignKey}\'.","INITIATING_IS_FEATURE_ENABLED":"({file}): Initiating isFeatureEnabled of user \'{userId}\' for campaign \'{campaignKey}\'.","INITIATING_PUSH_DIMENSION":"({file}): Initiating push segment of user \'{userId}\' with tag name `{tagKey}` and tag value \'{tagValue}\'."}')},function(e){e.exports=JSON.parse('{"CAMPAIGN_NOT_RUNNING":"({file}): {api} API called with Campaign:{campaignKey} but the campaign is not RUNNING. Please verify from VWO App","CAMPAIGN_NOT_ACTIVATED":"({file}): Campaign:{campaignKey} for User ID:{userId} is not yet activated for API:{api}. Use activate API to activate A/B test or isFeatureEnabled API to activate Feature Test"}')},function(e){e.exports=JSON.parse('{"CONFIG_PARAMETER_INVALID":"({file}): {parameter} paased in {api} API is not correct. It should be of type:{type}","CONFIG_POLLING_SDK_KEY_NOT_PROVIVED":"({file}): SDK Key is required along with pollingInterval to poll the settings-file","CONFIG_CORRUPTED":"({file}): Config passed to {api} API is invalid. Please refer developer docs","SETTINGS_FILE_INVALID":"({file}): Settings file passed while instantiating SDK instance is invalid","SETTINGS_FILE_CORRUPTED":"({file}): Fetched settings-file doesn\'t match the desired schema. Please contact VWO Support for help","BATCH_QUEUE_EMPTY":"{{file}}: No batch queue present for account:{accountId} when calling flushEvents API. Check batchEvents config in launch API","API_HAS_CORRUPTED_SETTINGS_FILE":"({file}): {api} API has corrupted settings-file. Please check or reach out to VWO support","API_BAD_PARAMETERS":"({file}): {api} API got bad parameters. Refer the developer docs","API_NOT_APPLICABLE":"({file}): {api} API is not valid for Campaign:{campaignKey} having type:{campaignType} for User ID:{userId}","USER_ID_INVALID":"({file}): Invalid User Id:{userId} passed to the API","CAMPAIGN_NOT_FOUND_FOR_GOAL":"({file}): No such campaign found corresponding to goalIdentifier:{goalIdentifier}. Please verify from VWO app","POLLING_FAILED":"({file}): Fetching of settings-file failed via polling for the accountId:{accountId}","SEGMENTATION_REGEX_CREATION_FAILED":"({file}): Regular expression:{regex} used for targeting cound not be evaluated","SEGMENTATION_ERROR":"({file}): Could not segment the User ID:{userId} for Campaign:{campaignKey}{variation} with customVariables:{customVariables}. Error message: {err}","USER_STORAGE_SERVICE_GET_FAILED":"({file}): Getting data from User Storage Service failed for User ID:{userId}. Error: {error}","USER_STORAGE_SERVICE_SET_FAILED":"({file}): Saving data into User Storage Service failed for User ID:{userId}. Error: {error}","IMPRESSION_FAILED":"({file}): Impression event could not be sent to VWO - {endPoint}. Reason: {err}","TAG_KEY_LENGTH_EXCEEDED":"({file}): Length of custom dimension key:{tagKey} for User Id:{userId} can not be greater than 255","TAG_VALUE_LENGTH_EXCEEDED":"({file}): Length of custom dimension value:{tagValue} of tagKey:{tagKey} for User Id:{userId} can not be greater than 255","TRACK_API_GOAL_NOT_FOUND":"({file}): Goal:{goalIdentifier} not found for Campaign:{campaignKey} and User Id:{userId}","TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL":"({file}): Revenue value should be passed for revenue goal:{goalIdentifier} for Campaign:{campaignKey} and User Id:{userId}","TRACK_API_EVENTS_REVENUE_NOT_PASSED":"({file}): Revenue value should be passed either in options or as an event property for revenue goal:{goalIdentifier} for Campaign:{campaignKey} and User Id:{userId}","UNABLE_TO_CAST_VALUE":"({file}): Unable to cast value:{variableValue} to type:{variableType}, returning null","VARIABLE_NOT_FOUND":"({file}): Variable:{variableKey} for User ID:{userId} is not found in settings-file, returning null","MISSING_IMPORT_SETTINGS_MANDATORY_PARAMS":"AccountId and sdkKey are required for fetching account settings. Aborting!","ACCOUNT_SETTINGS_NOT_FOUND":"({file}): Request failed for fetching account settings. Got Status Code: ${statusCode} and message: ${message}"}')},function(e,t){e.exports={BOLD:"",CYAN:"",GREEN:"",LIGHTBLUE:"",RED:"",RESET:"",WHITE:"",YELLOW:""}},function(e,t,n){var i=n(1),a=/\{([0-9a-zA-Z_]+)\}/g,r={build:function(e,t){try{return e.replace(a,(function(n,a,r){var o;if("{"===e[r-1]&&"}"===e[r+n.length])return a;if(t.hasOwnProperty(a)){var s=t[a];i.isFunction(s)&&(s=t[a]()),o=s}else o=null;return null==o?"":o}))}catch(t){return e}}};e.exports=r},function(e,t,n){function i(e,t){for(var n=0;n=this.logLevel}},{key:"setLogLevel",value:function(e){this.logLevel=void 0===e?o.ERROR:e}},{key:"consoleLog",value:function(e,t){switch(e){case o.INFO:console.info.apply(console,t);break;case o.WARN:console.warn.apply(console,t);break;case o.ERROR:console.error.apply(console,t);break;default:console.log.apply(console,t)}}}])&&i(t.prototype,n),r&&i(t,r),e}();e.exports=u},function(e,t){e.exports={PASSED:"passed",FAILED:"failed"}},function(e,t,n){var i=n(18),a=n(10).getKeyValue,r=n(46),o=r.operandCustomVariablesParser,s=r.operandUserParser,l=n(0),u=n(1),c=n(2),g=i.SegmentOperatorTypes,E=g.AND,f=g.OR,d=g.NOT,S=i.SegmentOperandTypes,p=S.CUSTOM_VARIABLE,v=S.USER,_=l.LogLevelEnum,I=l.LogMessageEnum,A=l.LogMessageUtil,O=c.SegmentEvaluator,R=l.getLogger();function T(e,t){var n=a(e),i=n.key,r=n.value;if(i===d)return!T(r,t);if(i===E){for(var l=[],u=0;u1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{return u.isObject(e)&&!Object.keys(e).length?(R.log(_.DEBUG,A.build(I.DEBUG_MESSAGES.SEGMENTATION_SKIPPED,{campaignKey:n,userId:i,file:O}),r),!0):!u.isObject(e)||!Object.keys(e).length||T(e,t)}catch(e){return R.log(_.ERROR,A.build(I.ERROR_MESSAGES.SEGMENTATION_ERROR,{campaignKey:n,userId:i,customVariables:JSON.stringify(t),file:O,err:e,variation:a}),r),!1}}},function(e,t){e.exports={CUSTOM_VARIABLE:"custom_variable",USER:"user"}},function(e,t){e.exports={AND:"and",NOT:"not",OR:"or"}},function(e,t){e.exports={LOWER:/^lower/,LOWER_MATCH:/^lower\((.*)\)/,WILDCARD:/^wildcard/,WILDCARD_MATCH:/^wildcard\((.*)\)/,REGEX:/^regex/,REGEX_MATCH:/^regex\((.*)\)/,STARTING_STAR:/^\*/,ENDING_STAR:/\*$/,GREATER_THAN_MATCH:/^gt\(((\d+\.?\d*)|(\.\d+))\)/,GREATER_THAN_EQUAL_TO_MATCH:/^gte\(((\d+\.?\d*)|(\.\d+))\)/,LESS_THAN_MATCH:/^lt\(((\d+\.?\d*)|(\.\d+))\)/,LESS_THAN_EQUAL_TO_MATCH:/^lte\(((\d+\.?\d*)|(\.\d+))\)/}},function(e,t){e.exports={LOWER_VALUE:1,STARTING_ENDING_STAR_VALUE:2,STARTING_STAR_VALUE:3,ENDING_STAR_VALUE:4,REGEX_VALUE:5,EQUAL_VALUE:6,GREATER_THAN_VALUE:7,GREATER_THAN_EQUAL_TO_VALUE:8,LESS_THAN_VALUE:9,LESS_THAN_EQUAL_TO_VALUE:10}},function(e,t,n){var i=n(1),a=n(4).matchWithRegex,r=n(10).getKeyValue,o=n(18),s=o.SegmentOperandValueTypeRegexes,l=s.LOWER_MATCH,u=s.WILDCARD_MATCH,c=s.REGEX_MATCH,g=s.STARTING_STAR,E=s.ENDING_STAR,f=s.GREATER_THAN_MATCH,d=s.GREATER_THAN_EQUAL_TO_MATCH,S=s.LESS_THAN_MATCH,p=s.LESS_THAN_EQUAL_TO_MATCH,v=o.SegmentOperandValues,_=v.LOWER_VALUE,I=v.STARTING_ENDING_STAR_VALUE,A=v.STARTING_STAR_VALUE,O=v.ENDING_STAR_VALUE,R=v.REGEX_VALUE,T=v.EQUAL_VALUE,N=v.GREATER_THAN_VALUE,m=v.GREATER_THAN_EQUAL_TO_VALUE,h=v.LESS_THAN_VALUE,b=v.LESS_THAN_EQUAL_TO_VALUE;function y(e,t){return a(e,t)&&a(e,t)[1]}function U(e,t){var n=parseFloat(e,10),i=parseFloat(t,10);return n&&i?(n===Math.floor(n)&&(n=parseInt(n,10)),i===Math.floor(i)&&(i=parseInt(i,10)),{operandValue:n.toString(),tagValue:i.toString()}):{operandValue:e,tagValue:t}}function G(e){return void 0===e&&(e=""),i.isBoolean(e)&&(e=!!e),null!==e&&(e=e.toString()),e}function L(e){var t,n,i,r;return a(e,l)?(t=_,n=y(e,l)):a(e,u)?(n=y(e,u),i=a(n,g),r=a(n,E),i&&r?t=I:i?t=A:r&&(t=O),n=n.replace(g,"").replace(E,"")):a(e,c)?(t=R,n=y(e,c)):a(e,f)?(t=N,n=y(e,f)):a(e,d)?(t=m,n=y(e,d)):a(e,S)?(t=h,n=y(e,S)):a(e,p)?(t=b,n=y(e,p)):(t=T,n=e),{operandType:t,operandValue:n}}e.exports={extractOperandValue:y,processValues:U,preProcessTagValue:G,preProcessOperandValue:L,operandCustomVariablesParser:function(e,t){var n=r(e),i=n.key,a=i;if(e=n.value,!t.hasOwnProperty(i))return!1;var o=t[a];o=G(o);var s=L(e),l=s.operandType,u=U(s.operandValue,o);return o=u.tagValue,function(e,t,n){var i;switch(e){case _:null!==n&&(i=t.toLowerCase()===n.toLowerCase());break;case I:null!==n&&(i=n.indexOf(t)>-1);break;case A:null!==n&&(i=n.endsWith(t));break;case O:null!==n&&(i=n.startsWith(t));break;case R:try{var a=new RegExp(t,"g");i=!!a.test(n)}catch(e){i=!1}break;case N:if(null!==n)try{i=parseFloat(t)parseFloat(n)}catch(e){i=!1}break;case b:if(null!==n)try{i=parseFloat(t)>=parseFloat(n)}catch(e){i=!1}break;default:i=n===t}return i}(l,u.operandValue,o)},operandUserParser:function(e,t){for(var n=e.split(","),i=0;i>>32-t}e.exports=function(e){var t=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var r=unescape(encodeURIComponent(e));e=new Array(r.length);for(var o=0;o>>0;v=p,p=S,S=a(d,30)>>>0,d=f,f=I}n[0]=n[0]+f>>>0,n[1]=n[1]+d>>>0,n[2]=n[2]+S>>>0,n[3]=n[3]+p>>>0,n[4]=n[4]+v>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]}},function(e,t,n){var i=n(3),a=n(5),r=n(8),o=n(7),s=n(6),l=n(1),u=n(0),c=n(2),g=u.LogLevelEnum,E=u.LogMessageEnum,f=u.LogMessageUtil,d=c.GetVariation;e.exports=function(e,t,n){var u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},c=a.GET_VARIATION_NAME,S=!1;if(l.isObject(u)){var p=u.customVariables,v=u.variationTargetingVariables,_=u.userStorageData,I=u.metaData;s.areValidParamsForAPIMethod({method:a.GET_VARIATION_NAME,campaignKey:t,userId:n,customVariables:p,variationTargetingVariables:v,userStorageData:_,metaData:I})&&(S=!0)}if(!1===S)return e.logger.log(g.ERROR,f.build(E.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:d,api:a.GET_VARIATION_NAME})),null;var A=e.SettingsFileManager.getConfig(),O=e.SettingsFileManager.getSettingsFile(c);if(A.apiName=c,!O)return null;var R=o.getCampaign(O,t);if(!R||R.status!==i.STATUS_RUNNING)return e.logger.log(g.WARN,f.build(E.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:d,campaignKey:t,api:c})),null;if(o.isFeatureRolloutCampaign(R))return e.logger.log(g.ERROR,f.build(E.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:d,campaignKey:t,campaignType:R.type,userId:n,api:c})),null;var T=r.getVariation(A,O,R,t,n,p,v,_,I,!1,!1,void 0,c);return l.isPromise(T)?T.then((function(e){return e})):T.variationName?T.variationName:null}},function(e,t,n){function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a=n(3),r=n(9),o=n(5),s=n(8),l=n(7),u=n(10).objectValues,c=n(11),g=n(6),E=n(1),f=n(0),d=n(2),S=f.LogLevelEnum,p=f.LogMessageEnum,v=f.LogMessageUtil,_=d.Track,I=r.ALL,A=o.TRACK;function O(e,t,n,i,a,r,o,l,u,g,E,f,d,S,p){if(!Object.keys(p).length)return null;if(u&&u.length)for(var v=0;v0){var _=c.getEventsBaseProperties(n,r,{},d,S),I=c.getTrackGoalPayloadData(n,a,r,l,o,i,f);e.eventQueue.process(t,_,e,{payload:I,responseCallback:E}),n.isEventArchEnabled||Object.keys(l).forEach((function(e){s._saveUserData(t,l[e].campaign,l[e].variationName,l[e].userId,l[e].metaData,r)}))}return t.isDevelopmentMode?Object.assign({},p,{isDevelopmentMode:t.isDevelopmentMode}):p}function R(e,t,n,i,o,u,c,f,d,O,R,m,h,b,y,U,G,L,F,C,V){if(!t||t.status!==a.STATUS_RUNNING)return e.logger.log(S.WARN,v.build(p.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:_,campaignKey:n,api:A})),!1;if(l.isFeatureRolloutCampaign(t))return e.logger.log(S.ERROR,v.build(p.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:_,campaignKey:n,campaignType:t.type,userId:i,api:A})),!1;var P=t.id,M=l.getCampaignGoal(o,t.key,u);if(!M)return e.logger.log(S.ERROR,v.build(p.ERROR_MESSAGES.TRACK_API_GOAL_NOT_FOUND,{file:_,userId:i,goalIdentifier:u,campaignKey:n})),!1;if(m!==I&&M.type!==m)return!1;if(M.type===r.REVENUE&&!g.isValidValue(c)){if(!o.isEventArchEnabled)return N(e,i,u,n),!1;if(-1!==M.mca){if(E.isUndefined(F)||!F.hasOwnProperty(M.revenueProp))return N(e,i,u,n),!1}else if(M.revenueProp&&(E.isUndefined(F)||!F.hasOwnProperty(M.revenueProp)))return N(e,i,u,n),!1}M.type===r.REVENUE&&M.revenueProp&&U.add(M.revenueProp);var D=s.getVariation(f,o,t,n,i,d,O,R,b,!1,!0,u,A);return E.isPromise(D)?D.then((function(a){return Object.keys(a).length?T(e,n,P,i,f,M,h,o,t,u,c,b,y,G,L,F,C,V,a):null})):T(e,n,P,i,f,M,h,o,t,u,c,b,y,G,L,F,C,V,D)}function T(e,t,n,i,a,r,o,l,u,g,E,f,d,I,A,O,R,T,N){var m=N.variationId,h=N.variationName,b=N.storedGoalIdentifier;if(h){if(b)if(b.split("_vwo_").includes(g)){if(!o&&-1!==r.mca)return e.logger.log(S.INFO,v.build(p.INFO_MESSAGES.CAMPAIGN_GOAL_ALREADY_TRACKED,{file:_,userId:i,goalIdentifier:g,campaignKey:t})),!1}else b+="_vwo_"+g,l.isEventArchEnabled||s._saveUserData(a,u,h,i,f,b);if(a.batchEvents){var y=c.buildBatchEventForTrackingGoal(l,n,m,i,r,E,O,R,T);e.batchEventsQueue.enqueue(y)}else{if(l.isEventArchEnabled)return d[u.id]={config:a,campaign:u,variationName:h,userId:i,metaData:f,goal:r},!0;var U={};U=A?c.buildBatchEventForTrackingGoal(l,n,m,i,r,E,R,T):c.buildEventForTrackingGoal(l,n,m,i,r,E,R,T),I.push(U)}return l.isEventArchEnabled||s._saveUserData(a,u,h,i,f,g),!0}return!1}function N(e,t,n,i){e.logger.log(S.ERROR,v.build(p.ERROR_MESSAGES.TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL,{file:_,userId:t,goalIdentifier:n,campaignKey:i}))}e.exports=function(e,t,n,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},c=!1;if(E.isObject(s)){var f=s.revenueValue,d=s.customVariables,T=s.variationTargetingVariables,N=s.userStorageData,m=s.goalTypeToTrack,h=s.shouldTrackReturningUser,b=s.metaData,y=s.responseCallback,U=s.eventProperties,G=s.userAgent,L=s.userIpAddress,F=G;g.areValidParamsForAPIMethod({method:o.TRACK,campaignKey:t,userId:n,goalIdentifier:a,customVariables:d,variationTargetingVariables:T,userStorageData:N,goalTypeToTrack:m,shouldTrackReturningUser:h,metaData:b,responseCallback:y,eventProperties:U,visitorUserAgent:F,userIpAddress:L})&&(!m||m&&u(r).includes(m))&&(c=!0)}if(!1===c)return e.logger.log(S.ERROR,v.build(p.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:_,api:o.TRACK})),null;var C=e.SettingsFileManager.getConfig(),V=e.SettingsFileManager.getSettingsFile(A);C.apiName=A;var P=new Set;if(!V)return null;var M=l.getCampaign(V,t);if(M&&M.hasOwnProperty("isMAB")&&!0===M.isMAB&&void 0===e.userStorageService)return e.logger.log(S.ERROR,"("+_+") This campaign: "+t+" has MAB configured. Please configure User Storage to proceed."),null;var D=[];if(m=m||C.goalTypeToTrack||I,E.isUndefined(h)&&(h=!!E.isBoolean(C.shouldTrackReturningUser)&&C.shouldTrackReturningUser),E.isString(t)){var k=l.getCampaign(V,t);D.push(k||{key:t})}else D=E.isArray(t)?l.getCampaignsForKeys(V,t):l.getCampaignsForGoal(V,a,m);var B={},K={},j=[],w=!1;D.forEach((function(t){return B[t.key]=R(e,t,t.key,n,V,a,f,C,d,T,N,m,h,b,K,P,j,w,U,F,L)}));var x=!!(B&&Object.keys(B).length>0)&&Object.values(B).every((function(e){return E.isPromise(e)}));return x?Promise.all(Object.values(B)).then((function(t){return t.forEach((function(t,r){var o=Object.keys(B)[r],s=O(e,C,V,P,n,a,f,K,j,w,y,U,F,L,i({},o,t));B[o]=s[o]})),B})):O(e,C,V,P,n,a,f,K,j,w,y,U,F,L,B)}},function(e,t,n){var i=n(3),a=n(5),r=n(8),o=n(7),s=n(11),l=n(6),u=n(1),c=n(0),g=n(2),E=n(12),f=c.LogLevelEnum,d=c.LogMessageEnum,S=c.LogMessageUtil,p=g.IsFeatureEnabled;function v(e,t,n,i,a,r,l,u,c,g,v,_){var I=_.variation,A=_.variationId,O=_.variationName,R=_.isStoredVariation,T=!1;if(O){if(T=o.isFeatureRolloutCampaign(u)||I.isFeatureEnabled,!R||r){if(i.batchEvents){var N=s.buildBatchEventForTrackingUser(l,u.id,A,n,g,v);e.batchEventsQueue.enqueue(N)}else if(l.isEventArchEnabled){var m=s.getEventsBaseProperties(l,E.VWO_VARIATION_SHOWN,e.usageStats.getUsageStats(),g,v),h=s.getTrackUserPayloadData(l,n,E.VWO_VARIATION_SHOWN,u.id,A);e.eventQueue.process(i,m,e,{payload:h,responseCallback:c})}else{var b=s.buildEventForTrackingUser(l,u.id,A,n,e.usageStats.getUsageStats(),g,v);e.eventQueue.process(i,b,e,{responseCallback:c})}return e.logger.log(f.INFO,S.build(d.INFO_MESSAGES.FEATURE_STATUS,{file:p,campaignKey:t,userId:n,status:T?"enabled":"disabled"})),i.isDevelopmentMode?{isFeatureEnabled:T}:T}e.logger.log(f.INFO,S.build(d.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED,{file:p,userId:n,campaignKey:t,api:a}))}return e.logger.log(f.INFO,S.build(d.INFO_MESSAGES.FEATURE_STATUS,{file:p,campaignKey:t,userId:n,status:T?"enabled":"disabled"})),R||i.isDevelopmentMode,{isFeatureEnabled:T}}e.exports=function(e,t,n){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},c=a.IS_FEATURE_ENABLED,g=!1;if(u.isObject(s)){var E=s.customVariables,_=s.variationTargetingVariables,I=s.userStorageData,A=s.shouldTrackReturningUser,O=s.metaData,R=s.responseCallback,T=s.userAgent,N=s.userIpAddress,m=T;l.areValidParamsForAPIMethod({method:a.IS_FEATURE_ENABLED,campaignKey:t,userId:n,customVariables:E,variationTargetingVariables:_,userStorageData:I,shouldTrackReturningUser:A,metaData:O,responseCallback:R,visitorUserAgent:m,userIpAddress:N})&&(g=!0)}if(!1===g)return e.logger.log(f.ERROR,S.build(d.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:p,api:a.isFeatureEnabled})),null;var h=e.SettingsFileManager.getConfig(),b=e.SettingsFileManager.getSettingsFile(c);if(!b)return null;A=A||h.shouldTrackReturningUser||!1;var y=o.getCampaign(b,t);if(y&&y.hasOwnProperty("isMAB")&&!0===y.isMAB&&void 0===e.userStorageService)return e.logger.log(f.ERROR,"("+p+") This campaign: "+t+" has MAB configured. Please configure User Storage to proceed."),null;if(!y||y.status!==i.STATUS_RUNNING)return e.logger.log(f.WARN,S.build(d.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:p,campaignKey:t,api:c})),null;if(o.isAbCampaign(y))return e.logger.log(f.ERROR,S.build(d.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:p,campaignKey:t,campaignType:y.type,userId:n,api:c})),null;var U=r.getVariation(h,b,y,t,n,E,_,I,O,!0,!1,void 0,c);return u.isPromise(U)?U.then((function(i){return v(e,t,n,h,c,A,b,y,R,m,N,i)})):v(e,t,n,h,c,A,b,y,R,m,N,U)}},function(e,t,n){var i=n(3),a=n(5),r=n(8),o=n(7),s=n(6),l=n(56),u=n(1),c=n(10),g=n(0),E=n(2),f=g.LogLevelEnum,d=g.LogMessageEnum,S=g.LogMessageUtil,p=E.GetFeatureVariableValue;function v(e,t,n,i,a,r){var s,u=r.variation,g=r.variationName;if(!g)return e.logger.log(f.INFO,S.build(d.INFO_MESSAGES.FEATURE_STATUS,{file:p,campaignKey:t,userId:i,status:"disabled"})),null;if(o.isFeatureRolloutCampaign(a)?s=l.getVariableForFeature(a,n):o.isFeatureTestCampaign(a)&&(s=l.getVariableValueForVariation(a,u,n),c.areObjectKeys(s)&&u.isFeatureEnabled?e.logger.log(f.INFO,S.build(d.INFO_MESSAGES.FEATURE_VARIABLE_VALUE,{file:p,variableKey:n,campaignKey:a.key,variableValue:s.value,userId:i})):c.areObjectKeys(s)&&!u.isFeatureEnabled&&e.logger.log(f.INFO,S.build(d.INFO_MESSAGES.FEATURE_VARIABLE_DEFAULT_VALUE,{file:p,variableKey:n,variationName:g}))),!c.areObjectKeys(s))return e.logger.log(f.ERROR,S.build(d.ERROR_MESSAGES.VARIABLE_NOT_FOUND,{file:p,variableKey:n,userId:i})),null;var E=s.value;return l.getTypeCastVariableValue(E,s.type)}e.exports=function(e,t,n,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var g=a.GET_FEATURE_VARIABLE_VALUE,E=!1;if(u.isObject(c)){var _=c.customVariables,I=c.variationTargetingVariables,A=c.userStorageData,O=c.metaData;s.areValidParamsForAPIMethod({method:a.GET_FEATURE_VARIABLE_VALUE,campaignKey:t,variableKey:n,userId:l,customVariables:_,variationTargetingVariables:I,userStorageData:A,metaData:O})&&(E=!0)}if(!1===E)return e.logger.log(f.ERROR,S.build(d.ERROR_MESSAGES.API_BAD_PARAMETERS,{file:p,api:a.GetFeatureVariableValue})),null;var R=e.SettingsFileManager.getConfig(),T=e.SettingsFileManager.getSettingsFile(g);if(R.apiName=g,!T)return null;var N=o.getCampaign(T,t);if(!N||N.status!==i.STATUS_RUNNING)return e.logger.log(f.WARN,S.build(d.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING,{file:p,campaignKey:t,api:g})),null;if(o.isAbCampaign(N))return e.logger.log(f.ERROR,S.build(d.ERROR_MESSAGES.API_NOT_APPLICABLE,{file:p,campaignKey:t,campaignType:N.type,userId:l,api:g})),null;var m=r.getVariation(R,T,N,t,l,_,I,A,O,!1,!1,void 0,g);return u.isPromise(m)?m.then((function(i){return v(e,t,n,l,N,i)})):v(e,t,n,l,N,m)}catch(t){return e.logger.log(f.ERROR,t.message),null}}},function(e,t,n){var i=n(7),a=n(1),r=n(57),o=n(0),s=n(2),l=o.LogLevelEnum,u=o.LogMessageEnum,c=o.LogMessageUtil,g=o.getLogger(),E=s.FeatureUtil,f={getVariableForFeature:function(e,t){var n={};if(i.isFeatureRolloutCampaign(e)){for(var a=e.variables||[],r=0;r5&&void 0!==arguments[5]?arguments[5]:{},S=d.responseCallback,p=i.PUSH;if(!s.areValidParamsForAPIMethod({method:i.PUSH,tagKey:t,tagValue:n,userId:a,customDimensionMap:r,responseCallback:S}))return e.logger.log(c.ERROR,E.build(g.ERROR_MESSAGES.PUSH_INVALID_PARAMS,{file:f,method:p})),!1;if(t.length>255)return e.logger.log(c.ERROR,E.build(g.ERROR_MESSAGES.TAG_KEY_LENGTH_EXCEEDED,{file:f,tagKey:t,userId:a})),!1;if(n.length>255)return e.logger.log(c.ERROR,E.build(g.ERROR_MESSAGES.TAG_VALUE_LENGTH_EXCEEDED,{file:f,tagKey:t,userId:a,tagValue:n})),!1;if(" "===t&&" "===n&&(!r||0===Object.keys(r).length))return e.logger.log(c.ERROR,E.build(g.ERROR_MESSAGES.PUSH_INVALID_PARAMS,{file:f,method:p})),!1;" "!==t&&" "!==n&&(r[t]=n);var v=e.SettingsFileManager.getConfig(),_=e.SettingsFileManager.getSettingsFile(p);if(!_)return!1;var I={};if(v.batchEvents)Object.keys(r).forEach((function(t){var n=u.isString(r[t])?r[t]:JSON.stringify(r[t]),i=l.buildBatchEventForPushing(_,t,n,a);e.batchEventsQueue.enqueue(i),I[t]=!0}));else if(_.isEventArchEnabled){var A=l.getEventsBaseProperties(_,o.VWO_SYNC_VISITOR_PROP),O=l.getPushPayloadData(_,a,o.VWO_SYNC_VISITOR_PROP,r);e.eventQueue.process(v,A,e,{payload:O,responseCallback:S}),I.success=!0}else{var R=[],T=Object.keys(r);T.forEach((function(t){var n,i=u.isString(r[t])?r[t]:JSON.stringify(r[t]);n=l.buildEventForPushing(_,t,i,a),e.eventQueue.process(v,n,e,{responseCallback:S}),R.push(n),I[t]=!0}))}return v.isDevelopmentMode?Object.assign({},I,{isDevelopmentMode:v.isDevelopmentMode}):I}},function(e,t,n){function i(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=i.payload,r=i.responseCallback,o={};t&&t.visitor_ua&&(o[l.USER_AGENT]=encodeURIComponent(t.visitor_ua),t.visitor_ua=o[l.USER_AGENT]),t&&t.visitor_ip&&(o[l.IP]=encodeURIComponent(t.visitor_ip),t.visitor_ip=o[l.IP]),e&&e.isDevelopmentMode?E.log(u.DEBUG,g.build(c.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS,{file:f})):this.enqueue(t,n,{payload:a,responseCallback:r},o)}},{key:"enqueue",value:function(e,t,n){var i=n.payload,a=n.responseCallback,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.queue.push({eventName:e.eventName,properties:e,callback:function(){i?r.dispatchPostCall(e,i,{responseCallback:a},o):r.dispatchGetCall(e,{responseCallback:a},o)}}),E.log(u.INFO,g.build(c.INFO_MESSAGES.EVENT_QUEUE,{file:f,queueType:"normal",event:"VWO_MASKED_PAYLOAD"})),t.eventQueue.executeNext(e),this.running||this.executeNext(e),this}},{key:"executeNext",value:function(e){if(this.running=!1,this.queue&&this.queue.length){var t=this.queue.shift();t&&(this.running=!0,t.callback&&a.isFunction(t.callback)&&t.callback(e))}}}])&&i(t.prototype,n),o&&i(t,o),e}();e.exports=d},function(e,t,n){var i=n(0),a=n(2),r=i.LogLevelEnum,o=i.LogMessageEnum,s=i.LogMessageUtil,l=i.getLogger(),u=n(4),c=n(12),g=["url"],E=a.EventDispatcherUtil,f={dispatchGetCall:function(e,t){var i=t.responseCallback,c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},E="?";E+=u.convertObjectKeysToString(e,g);try{n(61).sendCall(e,E,{successCallback:i},c)}catch(t){var f=e.url;l.log(r.ERROR,s.build(o.ERROR_MESSAGES.IMPRESSION_FAILED,{file:a.EventDispatcher,endPoint:f,err:t}))}return!1},handleGetResponse:function(e,t,n){if(t)return l.log(r.ERROR,s.build(o.ERROR_MESSAGES.IMPRESSION_FAILED,{file:E,endPoint:n.endPoint,err:t})),!1;var i={file:E,endPoint:n.endPoint,accountId:e&&e.account_id},a={};if(i.endPoint.includes("push")){var u=JSON.parse(e.tags).u;(a=Object.assign({},i,{customVariables:u})).mainKeys="customDimension:".concat(JSON.stringify(a.customVariables))}else(a=Object.assign({},i,{campaignId:e&&e.experiment_id,variationId:e&&e.combination})).mainKeys="campaignId:".concat(a.campaignId," and variationId:").concat(a.variationId);return l.log(r.INFO,s.build(o.INFO_MESSAGES.IMPRESSION_SUCCESS,a)),!0},dispatchPostCall:function(e,t,i){var c=this,E=i.responseCallback,f=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},d="?";d+=u.convertObjectKeysToString(e,g);try{return"undefined"==typeof XMLHttpRequest?n(22).send({method:"POST",url:"".concat(e.url).concat(d),payload:t,customHeaders:f}).then((function(){c.handlePostResponse(e,t),E&&E(null,{status:"success"})})).catch((function(n){c.handlePostResponse(e,t,n),E(n,{status:"failure"})})):n(23).send({method:"POST",url:"".concat(e.url).concat(d),payload:t,customHeaders:f,logger:l}).then((function(){c.handlePostResponse(e,t),E&&E(null,{status:"success"})})).catch((function(n){c.handlePostResponse(e,t,n),E(n,{status:"failure"})}))}catch(t){var S=e.url;l.log(r.ERROR,s.build(o.ERROR_MESSAGES.IMPRESSION_FAILED,{file:a.EventDispatcherUtil,endPoint:S,err:t}))}return Promise.resolve(!1)},handlePostResponse:function(e,t,n){var i=e.url;if(n)return l.log(r.ERROR,s.build(o.ERROR_MESSAGES.IMPRESSION_FAILED,{file:E,endPoint:i,err:n})),!1;var a="".concat(e.en," event");return e.en===c.VWO_SYNC_VISITOR_PROP&&(delete t.d.visitor.props.vwo_fs_environment,a="visitor property:".concat(JSON.stringify(t.d.visitor.props))),l.log(r.INFO,s.build(o.INFO_MESSAGES.IMPRESSION_SUCCESS_FOR_EVENT_ARCH,{file:E,endPoint:i,accountId:e.a,event:a})),!0}};e.exports=f},function(e,t,n){var i=n(0),a=n(2),r=i.LogLevelEnum,o=i.LogMessageEnum,s=i.LogMessageUtil,l=i.getLogger(),u=a.HttpXMLUtil,c=function(){},g=function(e){var t={file:u,endPoint:e.url,accountId:e&&e.account_id},n={};if(t.endPoint.includes("push")){var i=JSON.parse(e.tags).u;(n=Object.assign({},t,{customVariables:i})).mainKeys="customDimension:".concat(JSON.stringify(n.customVariables))}else(n=Object.assign({},t,{campaignId:e&&e.experiment_id,variationId:e&&e.combination})).mainKeys="campaignId:".concat(n.campaignId," and variationId:").concat(n.variationId);l.log(r.INFO,s.build(o.INFO_MESSAGES.IMPRESSION_SUCCESS,n))},E={sendCall:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a="".concat(e.url).concat(t),r=n.successCallback,o=n.errorCallback;o=o||r;var s=!1;"undefined"!=typeof XMLHttpRequest?this.handleGetCall(e,t,r,o,a,s,i):fetch(a,{method:"GET",headers:i}).then((function(){s||(s=!0,r(null,{status:"success"}))})).catch((function(t){s||(s=!0,o(null,{status:"success"}),g(e))}))},handleGetCall:function(e,t,n,i,a,r){var o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};n=n||c,i=i||c;var s=new XMLHttpRequest;for(var l in s.open("GET",a,!0),o)o.hasOwnProperty(l)&&s.setRequestHeader(l,o[l]);s.onload=function(){if(s.status>=200&&s.status<300){var t=s.responseText;n(t),g(e)}else i(s.statusText),g(e)},s.onerror=function(){i(s.statusText),g(e)},s.send()}};e.exports=E},function(e,t){e.exports={USER_AGENT:"X-Device-User-Agent",IP:"VWO-X-Forwarded-For"}},function(e,t,n){function i(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:this._clonedSettingsFile.accountId,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._clonedSettingsFile.sdkKey;return new Promise((function(i,a){o.get(t,n,null,{isViaWebhook:!0}).then((function(t){e.updateSettingsFile(t),i(t)})).catch((function(e){}))}))}},{key:"updateSettingsFile",value:function(e){this._clonedSettingsFile=r.cloneObject(e),this.processSettingsFile()}},{key:"getConfig",value:function(){return this._configObj}},{key:"getSettingsFile",value:function(e){return this._clonedSettingsFile||this._configObj.logger.log(g.ERROR,f.build(E.ERROR_MESSAGES.API_HAS_CORRUPTED_SETTINGS_FILE,{file:d,api:e})),this._clonedSettingsFile}}])&&i(t.prototype,n),s&&i(t,s),e}();e.exports=S},function(e,t,n){function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e))&&"[object Arguments]"!==Object.prototype.toString.call(e))return;var n=[],i=!0,a=!1,r=void 0;try{for(var o,s=e[Symbol.iterator]();!(i=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);i=!0);}catch(e){a=!0,r=e}finally{try{i||null==s.return||s.return()}finally{if(a)throw r}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var a=n(65),r=a.validate,o=a.number,s=a.string,l=a.boolean,u=a.array,c=a.object,g=a.optional,E=a.union,f=a.type,d=a.record,S=f({id:E([o(),s()]),identifier:s(),type:s(),revenueProp:g(s()),mca:g(E([o(),s()]))}),p=f({id:E([o(),s()]),type:s(),key:s(),value:E([o(),s(),l()])}),v=f({id:E([o(),s()]),name:s(),weight:E([o(),s()]),changes:g(c()),segments:g(c()),variables:g(E([c(),u(p)])),isFeatureEnabled:g(l()),startVariationAllocation:g(o()),endVariationAllocation:g(o())}),_=f({id:E([o(),s()]),type:s(),key:s(),status:s(),name:g(s()),isBucketingSeedEnabled:g(l()),percentTraffic:o(),goals:E([c(),u(S)]),variations:E([c(),u(v)]),variables:g(E([c(),u(p)])),segments:c(),isForcedVariationEnabled:g(l()),isUserListEnabled:g(l()),isMAB:g(l())}),I=f({et:g(s()),p:g(u(o())),wt:g(d(s(),o())),groupName:s(),campaigns:u(o())}),A=f({sdkKey:g(s()),version:E([o(),s()]),accountId:E([o(),s()]),campaigns:u(_),campaignGroups:g(d(s(),o())),isEventArchEnabled:g(l()),collectionPrefix:g(s()),groups:g(E([c(),d(s(),I)]))});e.exports=function(e){return!i(r(e,A),1)[0]}},function(e,t,n){"use strict";function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function*s(e,t){!0===e||(!1===e?yield t.fail():yield*e)}function l(e){const{done:t,value:n}=e.next();return t?void 0:n}n.r(t),n.d(t,"Struct",(function(){return u})),n.d(t,"StructError",(function(){return c})),n.d(t,"any",(function(){return T})),n.d(t,"array",(function(){return N})),n.d(t,"assert",(function(){return g})),n.d(t,"boolean",(function(){return m})),n.d(t,"coerce",(function(){return E})),n.d(t,"coercion",(function(){return S})),n.d(t,"date",(function(){return h})),n.d(t,"defaulted",(function(){return p})),n.d(t,"dynamic",(function(){return b})),n.d(t,"empty",(function(){return I})),n.d(t,"enums",(function(){return y})),n.d(t,"func",(function(){return U})),n.d(t,"instance",(function(){return G})),n.d(t,"intersection",(function(){return L})),n.d(t,"is",(function(){return f})),n.d(t,"lazy",(function(){return F})),n.d(t,"length",(function(){return A})),n.d(t,"literal",(function(){return C})),n.d(t,"map",(function(){return V})),n.d(t,"masked",(function(){return v})),n.d(t,"never",(function(){return P})),n.d(t,"nullable",(function(){return M})),n.d(t,"number",(function(){return D})),n.d(t,"object",(function(){return k})),n.d(t,"optional",(function(){return B})),n.d(t,"partial",(function(){return K})),n.d(t,"pattern",(function(){return O})),n.d(t,"record",(function(){return j})),n.d(t,"refinement",(function(){return R})),n.d(t,"set",(function(){return w})),n.d(t,"string",(function(){return x})),n.d(t,"struct",(function(){return H})),n.d(t,"tuple",(function(){return W})),n.d(t,"type",(function(){return J})),n.d(t,"union",(function(){return q})),n.d(t,"validate",(function(){return d}));class u{constructor(e){const{type:t,schema:n,coercer:i=(e=>e),validator:a=(()=>[]),refiner:r=(()=>[])}=e;this.type=t,this.schema=n,this.coercer=i,this.validator=a,this.refiner=r}}class c extends TypeError{constructor(e,t){const{path:n,value:i,type:a,branch:r}=e,s=o(e,["path","value","type","branch"]);let l;super(`Expected a value of type \`${a}\`${n.length?` for \`${n.join(".")}\``:""} but received \`${JSON.stringify(i)}\`.`),this.value=i,Object.assign(this,s),this.type=a,this.path=n,this.branch=r,this.failures=function(){return l||(l=[e,...t]),l},this.stack=(new Error).stack,this.__proto__=c.prototype}}function g(e,t){const n=d(e,t);if(n[0])throw n[0]}function E(e,t){const n=t.coercer(e);return g(n,t),n}function f(e,t){return!d(e,t)[0]}function d(e,t,n=!1){n&&(e=t.coercer(e));const i=function*e(t,n,i=[],a=[]){const{type:o}=n,u={value:t,type:o,branch:a,path:i,fail:(e={})=>r({value:t,type:o,path:i,branch:[...a,t]},e),check(t,n,r,o){const s=void 0!==r?[...i,o]:i,l=void 0!==r?[...a,r]:a;return e(t,n,s,l)}},c=s(n.validator(t,u),u),g=l(c);g?(yield g,yield*c):yield*s(n.refiner(t,u),u)}(e,t),a=l(i);if(a){return[new c(a,i),void 0]}return[void 0,e]}function S(e,t){const n=e.coercer;return new u(r(r({},e),{},{coercer:e=>n(t(e))}))}function p(e,t,n){return S(e,e=>{const i="function"==typeof t?t():t;if(void 0===e)return i;if(!0!==n&&_(e)&&_(i)){const t=r({},e);let n=!1;for(const e in i)void 0===t[e]&&(t[e]=i[e],n=!0);if(n)return t}return e})}function v(e){return S(e,t=>{if(!_(t))return t;const n={};for(const i in e.schema)n[i]=t[i];return n})}function _(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function I(e){return R(e,e.type+" & Empty",e=>0===e.length)}function A(e,t,n){return R(e,`${e.type} & Length<${t},${n}>`,e=>t`,e=>t.test(e))}function R(e,t,n){const i=e.refiner;return new u(r(r({},e),{},{type:t,*refiner(e,t){yield*s(i(e,t),t),yield*s(n(e,t),t)}}))}function T(){return H("any",()=>!0)}function N(e){return new u({type:`Array<${e?e.type:"unknown"}>`,schema:e,coercer:t=>e&&Array.isArray(t)?t.map(t=>E(t,e)):t,*validator(t,n){if(Array.isArray(t)){if(e)for(const[i,a]of t.entries())yield*n.check(a,e,t,i)}else yield n.fail()}})}function m(){return H("boolean",e=>"boolean"==typeof e)}function h(){return H("Date",e=>e instanceof Date&&!isNaN(e.getTime()))}function b(e){return H("Dynamic<...>",(t,n)=>n.check(t,e(t,n)))}function y(e){return H(`Enum<${e.map(Q)}>`,t=>e.includes(t))}function U(){return H("Function",e=>"function"==typeof e)}function G(e){return H(`InstanceOf<${e.name}>`,t=>t instanceof e)}function L(e){return H(e.map(e=>e.type).join(" & "),(function*(t,n){for(const i of e)yield*n.check(t,i)}))}function F(e){let t;return H("Lazy<...>",(n,i)=>(t||(t=e()),i.check(n,t)))}function C(e){return H(`Literal<${Q(e)}>`,t=>t===e)}function V(e,t){return H(`Map<${e.type},${t.type}>`,(function*(n,i){if(n instanceof Map)for(const[a,r]of n.entries())yield*i.check(a,e,n,a),yield*i.check(r,t,n,a);else yield i.fail()}))}function P(){return H("never",()=>!1)}function M(e){return new u({type:e.type+" | null",schema:e.schema,validator:(t,n)=>null===t||n.check(t,e)})}function D(){return H("number",e=>"number"==typeof e&&!isNaN(e))}function k(e){const t=e?Object.keys(e):[],n=P();return new u({type:e?`Object<{${t.join(",")}}>`:"Object",schema:e||null,coercer:e?Y(e):e=>e,*validator(i,a){if("object"==typeof i&&null!=i){if(e){const r=new Set(Object.keys(i));for(const n of t){r.delete(n);const t=e[n],o=i[n];yield*a.check(o,t,i,n)}for(const e of r){const t=i[e];yield*a.check(t,n,i,e)}}}else yield a.fail()}})}function B(e){return new u({type:e.type+"?",schema:e.schema,validator:(t,n)=>void 0===t||n.check(t,e)})}function K(e){e instanceof u&&(e=e.schema);const t=Object.keys(e),n=P();return new u({type:`Partial<{${t.join(",")}}>`,schema:e,coercer:Y(e),*validator(i,a){if("object"!=typeof i||null==i)return void(yield a.fail());const r=new Set(Object.keys(i));for(const n of t){if(r.delete(n),!(n in i))continue;const t=e[n],o=i[n];yield*a.check(o,t,i,n)}for(const e of r){const t=i[e];yield*a.check(t,n,i,e)}}})}function j(e,t){return H(`Record<${e.type},${t.type}>`,(function*(n,i){if("object"==typeof n&&null!=n)for(const a in n){const r=n[a];yield*i.check(a,e,n,a),yield*i.check(r,t,n,a)}else yield i.fail()}))}function w(e){return H(`Set<${e.type}>`,(t,n)=>{if(!(t instanceof Set))return!1;for(const i of t){const[t]=n.check(i,e);if(t)return!1}return!0})}function x(){return H("string",e=>"string"==typeof e)}function H(e,t){return new u({type:e,validator:t,schema:null})}function W(e){const t=P();return H(`[${e.map(e=>e.type).join(",")}]`,(function*(n,i){if(Array.isArray(n)){for(const[t,a]of e.entries()){const e=n[t];yield*i.check(e,a,n,t)}if(n.length>e.length){const a=e.length,r=n[a];yield*i.check(r,t,n,a)}}else yield i.fail()}))}function J(e){const t=Object.keys(e);return H(`Type<{${t.join(",")}}>`,(function*(n,i){if("object"==typeof n&&null!=n)for(const a of t){const t=e[a],r=n[a];yield*i.check(r,t,n,a)}else yield i.fail()}))}function q(e){return H(""+e.map(e=>e.type).join(" | "),(function*(t,n){for(const i of e){const[...e]=n.check(t,i);if(0===e.length)return}yield n.fail()}))}function Q(e){return"string"==typeof e?`"${e.replace(/"/g,'"')}"`:""+e}function Y(e){const t=Object.keys(e);return n=>{if("object"!=typeof n||null==n)return n;const i={},a=new Set(Object.keys(n));for(const r of t){a.delete(r);const t=e[r],o=n[r];i[r]=E(o,t)}for(const e of a)i[e]=n[e];return i}}},function(e,t,n){function i(e,t){for(var n=0;n0&&(this.data._l=1),this.data}}])&&i(t.prototype,n),r&&i(t,r),e}();e.exports=r}])})); //# sourceMappingURL=vwo-javascript-sdk.min.js.map \ No newline at end of file diff --git a/dist/vwo-javascript-sdk.min.js.map b/dist/vwo-javascript-sdk.min.js.map index 9abbfa1..f19fd26 100644 --- a/dist/vwo-javascript-sdk.min.js.map +++ b/dist/vwo-javascript-sdk.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://vwoSdk/webpack/universalModuleDefinition","webpack://vwoSdk/webpack/bootstrap","webpack://vwoSdk/./lib/services/logging/index.js","webpack://vwoSdk/./lib/utils/DataTypeUtil.js","webpack://vwoSdk/./lib/enums/FileNameEnum.js","webpack://vwoSdk/./lib/constants/index.js","webpack://vwoSdk/./lib/utils/FunctionUtil.js","webpack://vwoSdk/./lib/enums/ApiEnum.js","webpack://vwoSdk/./lib/utils/ValidateUtil.js","webpack://vwoSdk/./lib/utils/CampaignUtil.js","webpack://vwoSdk/./lib/utils/DecisionUtil.js","webpack://vwoSdk/./lib/enums/GoalTypeEnum.js","webpack://vwoSdk/./lib/utils/ObjectUtil.js","webpack://vwoSdk/./lib/utils/ImpressionUtil.js","webpack://vwoSdk/./lib/enums/EventEnum.js","webpack://vwoSdk/./lib/utils/VWOFeatureFlags.js","webpack://vwoSdk/./lib/enums/UrlEnum.js","webpack://vwoSdk/./lib/core/BucketingService.js","webpack://vwoSdk/./lib/enums/LogLevelEnum.js","webpack://vwoSdk/./lib/enums/CampaignTypeEnum.js","webpack://vwoSdk/./lib/enums/segment/index.js","webpack://vwoSdk/./lib/services/HooksManager.js","webpack://vwoSdk/./lib/utils/UuidUtil.js","webpack://vwoSdk/./lib/services/UrlService.js","webpack://vwoSdk/./lib/utils/FetchUtil.js","webpack://vwoSdk/./lib/utils/XhrUtil.js","webpack://vwoSdk/./lib/utils/SettingsFileUtil.js","webpack://vwoSdk/./lib/index.js","webpack://vwoSdk/./lib/VWO.js","webpack://vwoSdk/./lib/api/index.js","webpack://vwoSdk/./lib/api/activate.js","webpack://vwoSdk/./lib/core/VariationDecider.js","webpack://vwoSdk/./lib/enums/DataTypeEnum.js","webpack://vwoSdk/./node_modules/murmurhash/murmurhash.js","webpack://vwoSdk/./lib/services/logging/LoggingManager.js","webpack://vwoSdk/./lib/enums/AnsiColorEnum.js","webpack://vwoSdk/./lib/utils/LogMessageUtil.js","webpack://vwoSdk/./lib/services/logging/ConsoleLogManager.js","webpack://vwoSdk/./lib/enums/StatusEnum.js","webpack://vwoSdk/./lib/core/SegmentEvaluator.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandTypesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperatorTypesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandValueTypeRegexesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandValuesEnum.js","webpack://vwoSdk/./lib/utils/SegmentUtil.js","webpack://vwoSdk/./lib/enums/HooksEnum.js","webpack://vwoSdk/./node_modules/uuid/v5.js","webpack://vwoSdk/./node_modules/uuid/lib/v35.js","webpack://vwoSdk/./node_modules/uuid/lib/bytesToUuid.js","webpack://vwoSdk/./node_modules/uuid/lib/sha1-browser.js","webpack://vwoSdk/./lib/api/getVariation.js","webpack://vwoSdk/./lib/api/track.js","webpack://vwoSdk/./lib/api/isFeatureEnabled.js","webpack://vwoSdk/./lib/api/getFeatureVariableValue.js","webpack://vwoSdk/./lib/utils/FeatureUtil.js","webpack://vwoSdk/./lib/enums/FeatureVariableTypeEnum.js","webpack://vwoSdk/./lib/api/push.js","webpack://vwoSdk/./lib/services/EventQueue.js","webpack://vwoSdk/./lib/utils/EventDispatcherUtil.js","webpack://vwoSdk/./lib/utils/HttpXMLUtil.js","webpack://vwoSdk/./lib/enums/HeadersEnum.js","webpack://vwoSdk/./lib/services/SettingsFileManager.js","webpack://vwoSdk/./lib/schemas/SettingsFileSchema.js","webpack://vwoSdk/./node_modules/superstruct/lib/index.es.js","webpack://vwoSdk/./lib/services/UsageStats.js"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","logging","require","DataTypeUtil","_toStringValue","val","toString","isNumber","isString","isObject","isFunction","isBoolean","isPromise","isUndefined","isNull","isArray","INDEX","concat","VWO","API","Activate","GetVariation","Track","IsFeatureEnabled","GetFeatureVariableValue","Push","SegmentEvaluator","BucketingService","VariationDecider","ConsoleLogManager","EventQueue","LoggingManager","SettingsFileManager","BatchEventsQueue","CampaignUtil","EventDispatcher","EventDispatcherUtil","FeatureUtil","Functionutil","ImpressionUtil","UuidUtil","ValidateUtil","DecisionUtil","HttpHandlerUtil","HttpImageUtil","HttpXMLUtil","UsageStatsUtil","packageFile","SDK_NAME","version","SDK_VERSION","PLATFORM","SEED_VALUE","MAX_TRAFFIC_PERCENT","MAX_TRAFFIC_VALUE","MAX_EVENTS_PER_REQUEST","DEFAULT_EVENTS_PER_REQUEST","DEFAULT_REQUEST_TIME_INTERVAL","STATUS_RUNNING","SEED_URL","HTTP_PROTOCOL","HTTPS_PROTOCOL","SDK_QUERY_PARAM","SDK_VERSION_QUERY_PARAM","FunctionUtil","cloneObject","obj","JSON","parse","stringify","getRandomNumber","Math","random","getCurrentUnixTimestamp","ceil","Date","getCurrentUnixTimestampInMillis","matchWithRegex","string","regex","match","RegExp","err","FileNameEnum","logger","getLogger","LogLevelEnum","LogMessageEnum","LogMessageUtil","file","log","ERROR","build","ERROR_MESSAGES","SEGMENTATION_REGEX_CREATION_FAILED","getCurrentTime","toISOString","convertObjectKeysToString","properties","excludedProperties","queryParams","prop","indexOf","objectValues","values","push","LAUNCH","ACTIVATE","GET_VARIATION_NAME","TRACK","IS_FEATURE_ENABLED","GET_FEATURE_VARIABLE_VALUE","PUSH","DataTypeEnum","ApiEnum","GoalTypeEnum","APIMethodArgumentsValidationEnum","_defineProperty","_APIMethodArgumentsVa","_ref","campaignKey","userId","_ref$customVariables","customVariables","_ref$variationTargeti","variationTargetingVariables","_ref$userStorageData","userStorageData","_ref$shouldTrackRetur","shouldTrackReturningUser","_ref$metaData","metaData","type","STRING","OBJECT","BOOLEAN","_ref2","goalIdentifier","_ref2$customVariables","_ref2$variationTarget","_ref2$userStorageData","_ref2$goalTypeToTrack","goalTypeToTrack","ALL","_ref2$shouldTrackRetu","_ref2$metaData","STRING_NULL_UNDEFINED_ARRAY","_ref3","_ref3$customVariables","_ref3$variationTarget","_ref3$userStorageData","_ref3$shouldTrackRetu","_ref3$metaData","_ref4","variableKey","_ref4$customVariables","_ref4$variationTarget","_ref4$userStorageData","_ref4$metaData","_ref5","tagKey","tagValue","customDimensionMap","isValidValue","undefined","isValidString","isValidNumber","isValidFunction","isValidBoolean","isValidObject","areValidParamsForAPIMethod","argsObj","args","method","validators","length","argConfig","argValue","NUMBER","every","VWOFeatureFlags","Constants","CampaignTypeEnum","_getVariationBucketRange","variationWeight","startRange","min","getCampaignBasedOnId","settingsFile","campaignId","campaign","campaigns","parseInt","id","scaleVariationWeights","variations","totalWeight","reduce","acc","variation","weight","forEach","getCampaign","getCampaignsForKeys","campaignKeys","getCampaignsForGoal","goal","getCampaignGoal","CAMPAIGN_NOT_FOUND_FOR_GOAL","getCampaignStatus","status","toLowerCase","isCampaignRunning","validateCampaign","keys","setVariationAllocation","numberOfVariations","currentAllocation","assignRangeValues","DEBUG","DEBUG_MESSAGES","VARIATION_RANGE_ALLOCATION","variationName","start","startVariationAllocation","end","endVariationAllocation","setCampaignAllocation","stepFactor","desiredCampaignGoal","goals","identifier","getCampaignVariation","desiredVariation","getControlForCampaign","control","isFeatureTestCampaign","FEATURE_TEST","isFeatureRolloutCampaign","FEATURE_ROLLOUT","isAbCampaign","AB","isPartOfGroup","campaignGroups","groupId","groupName","groups","getGroupCampaigns","getBucketingSeed","isNB","getAll","isNBv2","isBucketingSeedEnabled","StatusEnum","HooksManager","HooksEnum","SegmentationTypeEnum","getVariation","config","arguments","isTrackUserAPI","isTrackGoalAPI","newGoalIdentifier","api","vwoUserId","generateFor","accountId","USER_UUID","uuid","decision","campaignType","campaignName","event","DECISION_TYPES","CAMPAIGN_DECISION","isForcedVariationEnabled","sdkVersion","source","_CampaignUtil$isPartO","assign","_vwoUserId","isUserListEnabled","whitelistedVariation","_checkForWhitelisting","then","data","asyncStorageConfig","Promise","resolve","_checkForUserStorage","response","isStoredVariation","variationWithoutStorageLookup","evaluateAndGetVariationWithoutStorage","_checkForPreSegmentation","isUserPartOfCampaign","campaignList","isWhitelistedOrStoredVariation","_checkForStorageAndWhitelisting","INFO","INFO_MESSAGES","MEG_CALLED_CAMPAIGN_NOT_WINNER","inEligibleCampaignKeys","eligibleCampaignKeys","_DecisionUtil$getElig","getEligbleCampaigns","eligibleCampaigns","inEligibleCampaigns","MEG_ELIGIBLE_CAMPAIGNS","slice","inEligibleText","noOfEligibleCampaigns","noOfGroupCampaigns","megAlgoNumber","et","evaluateTrafficAndGetVariation","_normalizeAndFindWinningCampaign","_advancedAlgoFindWinningCampaign","_evaluateWhitelisting","disableLogs","targetedVariations","segments","PASSED","FAILED","SEGMENTATION_STATUS","segmentationType","SEGMENTATION_SKIPPED","_getVariation","calculateBucketValue","variationId","_getStoredUserData","userStorageMap","userStorageService","USER_STORAGE_SERVICE_NOT_CONFIGURED","GETTING_DATA_USER_STORAGE_SERVICE","_error","console","USER_STORAGE_SERVICE_GET_FAILED","error","_saveUserData","isSaved","set","SETTING_DATA_USER_STORAGE_SERVICE","USER_STORAGE_SERVICE_SET_FAILED","calledCampaign","otherCampaignWinner","some","groupCampaign","OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE","storedVariation","_VariationDecider$get","getVariationAllotted","USER_VARIATION_ALLOCATION_STATUS","execute","fromUserStorageService","isUserWhitelisted","isFeatureEnabled","variationString","whitelistingResult","WHITELISTING_SKIPPED","userData","_processAfterGettingFromStorage","USER_STORAGE_SERVICE_NO_STORED_DATA","GOT_STORED_VARIATION","storedGoalIdentifier","WARN","WARNING_MESSAGES","CAMPAIGN_NOT_ACTIVATED","apiName","reason","shortlistedCampaigns","floor","winnerCampaign","MEG_GOT_WINNER_CAMPAIGN","found","priorityOrder","wt","j","participatingCampaignList","clonedCampaign","REVENUE","CUSTOM","ObjectUtil","areObjectKeys","getKeyValue","map","UrlEnum","UrlService","getBaseProperties","configObj","sId","u","getPrimaryProperties","getReportingProperties","account_id","ap","buildEventForPushing","url","getBaseUrl","tags","encodeURIComponent","IMPRESSION_FOR_PUSH","_getStringifiedLogProperties","buildBatchEventForPushing","buildEventForTrackingUser","usageStats","visitorUserAgent","userIpAddress","experiment_id","combination","visitor_ua","visitor_ip","ed","TRACK_USER","IMPRESSION_FOR_TRACK_USER","buildBatchEventForTrackingUser","buildEventForTrackingGoal","revenue","goalId","TRACK_GOAL","IMPRESSION_FOR_TRACK_GOAL","buildBatchEventForTrackingGoal","sdkKey","getEventsBaseProperties","eventName","en","a","env","eTime","EVENTS","getEventBasePayload","props","vwo_sdkName","vwo_sdkVersion","vwo_envKey","msgId","visId","sessionId","time","visitor","vwo_fs_environment","getTrackUserPayloadData","isFirst","IMPRESSION_FOR_EVENT_ARCH_TRACK_USER","getTrackGoalPayloadData","metricMap","revenueValue","revenuePropList","eventProperties","metric","IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL","goalName","vwoMeta","size","revenueProp","isCustomEvent","getPushPayloadData","IMPRESSION_FOR_EVENT_ARCH_PUSH","logProperties","VWO_VARIATION_SHOWN","VWO_SYNC_VISITOR_PROP","init","isEventArchEnabled","BASE_URL","SETTINGS_URL","WEBHOOK_SETTINGS_URL","BATCH_EVENTS","Hasher","_generateBucketValue","hashValue","maxValue","multiplier","ratio","pow","multipliedValue","bucketValue","_getBucketValueForUser","seed","disableLog","v3","USER_HASH_BUCKET_VALUE","trafficAllocation","percentTraffic","valueAssignedToUser","isUserPart","USER_CAMPAIGN_ELIGIBILITY","bucketUserToVariation","isOB","isOBv2","_generateHashValue","USER_CAMPAIGN_BUCKET_VALUES","AnsiColorEnum","NOTSET","LogLevelColorInfoEnum","_LogLevelColorInfoEnu","BOLD","WHITE","RESET","LIGHTBLUE","CYAN","YELLOW","RED","LogLevelInfoEnum","_LogLevelInfoEnum","LogNumberLevel","_0","_1","_2","_3","_4","SegmentEnum","SegmentOperandTypes","SegmentOperatorTypes","SegmentOperandValueTypeRegexes","SegmentOperandValues","callback","integrations","uuidv5","VWO_NAMESPACE","URL","hash","userIdNamespace","generate","replace","toUpperCase","namespace","collectionPrefix","baseUrl","_require2","FetchUtil","_getStoredSettings","parsedSettings","isStoredData","getSettings","settings","info","warning","warn","send","payload","_ref$customHeaders","customHeaders","reject","_FetchUtil$_getStored","options","headers","body","fetch","res","text","jsonData","setSettings","XhrUtil","_this","_XhrUtil$_getStoredSe","xhr","XMLHttpRequest","xhrHandler","sendRequest","retries","maxRetries","_this2","delay","newHeaderName","timeout","onload","responseText","setTimeout","statusText","onerror","ontimeout","open","setRequestHeader","_this3","headerName","xhrOnLoad","xhrOnError","e","message","parsedXhrResponse","_require","SettingsFileUtil","protocol","hostname","path","isViaWebhook","port","handleHttpRequest","statusCode","contentType","rawData","test","resume","setEncoding","on","chunk","handleHttpResponse","parsedData","setLogHandler","setLogLevel","logError","parameter","CONFIG_PARAMETER_INVALID","Error","logInfo","CONFIG_PARAMETER_USED","setLogger","getSettingsFile","launch","sdkConfig","isDevelopmentMode","includes","level","pollingInterval","batchEvents","returnPromiseFor","CONFIG_CORRUPTED","setLogColorMode","haveColoredLogs","CONFIG_CUSTOM_LOGGER_USED","CONFIG_LOG_LEVEL_SET","CONFIG_DEVELOPMENT_MODE_STATUS","SettingsFileService","UsageStats","_classCallCheck","getVariationName","optOut","redisStorage","settingsFileManager","isSettingsFileValid","CONFIG_VALID","eventQueue","checkAndPoll","collectUsageStats","getConfig","processSettingsFile","SDK_INITIALIZED","SETTINGS_FILE_INVALID","self","CONFIG_ASYNC_RETURN_PROMISE","activate","API_NOT_ENABLED","all","CONFIG_RETURN_PROMISE","responseCallback","_response","apiResponse","campaignSpecifier","_this4","track","trackResponse","counter","filter","Boolean","_this5","isFeatureEnabledApiResponse","_this6","getFeatureVariableValue","typeCastedValue","_this7","API_BAD_PARAMETERS","_this8","OPT_OUT_API_CALLED","_destroyInstanceVariables","batchEventsQueue","flushEvents","getAndUpdateSettingsFile","EventEnum","_validateAndReturnVariation","vwoInstance","result","DECISION_NO_VARIATION_ALLOTED","CAMPAIGN_USER_ALREADY_TRACKED","enqueue","getUsageStats","process","areParamsValid","userAgent","isMAB","CAMPAIGN_NOT_RUNNING","API_NOT_APPLICABLE","Bucketer","USER_ID_INVALID","getVariationOfCampaignForUser","USER_NOT_PART_OF_CAMPAIGN","USER_VARIATION_STATUS","MurmurHashV3","remainder","bytes","h1","h1b","c1","c2","k1","charCodeAt","murmur","v2","str","k","h","globalLogLevel","isColoredLogEnabled","globalLogHandler","LogManager","_customLog","getLogLevel","getLogColorMode","GREEN","nargs","template","index","logLevel","prefix","logMessage","shouldLog","consoleLog","targetLogLevel","logArguments","apply","operandCustomVariablesParser","operandUserParser","_SegmentEnum$SegmentO","AND","OR","NOT","_SegmentEnum$SegmentO2","CUSTOM_VARIABLE","USER","evaluator","dsl","_getKeyValue","operator","subDsl","list","SEGMENTATION_ERROR","LOWER","LOWER_MATCH","WILDCARD","WILDCARD_MATCH","REGEX","REGEX_MATCH","STARTING_STAR","ENDING_STAR","GREATER_THAN_MATCH","GREATER_THAN_EQUAL_TO_MATCH","LESS_THAN_MATCH","LESS_THAN_EQUAL_TO_MATCH","LOWER_VALUE","STARTING_ENDING_STAR_VALUE","STARTING_STAR_VALUE","ENDING_STAR_VALUE","REGEX_VALUE","EQUAL_VALUE","GREATER_THAN_VALUE","GREATER_THAN_EQUAL_TO_VALUE","LESS_THAN_VALUE","LESS_THAN_EQUAL_TO_VALUE","extractOperandValue","operand","processValues","operandValue","processedOperandValue","parseFloat","processedTagValue","preProcessTagValue","preProcessOperandValue","operandType","startingStar","endingStar","operandKey","_preProcessOperandVal","processedValues","endsWith","startsWith","pattern","extractResult","users","split","trim","v35","sha1","bytesToUuid","hashfunc","generateUUID","buf","offset","off","unescape","Array","stringToBytes","hex","uuidToBytes","TypeError","idx","DNS","byteToHex","substr","bth","join","f","x","y","z","ROTL","K","H","msg","N","M","W","b","T","GOAL_TYPE_TO_TRACK_DEFAULT","_validateAndReturnTrackValue","events","areGlobalGoals","trackCampaignGoal","TRACK_API_GOAL_NOT_FOUND","logIncorrectParamsForRevenueGoal","mca","add","_validateAndReturnTrackEvent","CAMPAIGN_GOAL_ALREADY_TRACKED","TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL","Set","areAllPromises","item","dataArray","ans","_validateAndReturnFeatureEnabled","FEATURE_STATUS","_validateAndReturnFeaureVariable","variable","getVariableForFeature","getVariableValueForVariation","FEATURE_VARIABLE_VALUE","variableValue","FEATURE_VARIABLE_DEFAULT_VALUE","VARIABLE_NOT_FOUND","getTypeCastVariableValue","FeatureVariableTypeEnum","variableData","variables","variationVariable","variableType","INTEGER","isNaN","UNABLE_TO_CAST_VALUE","DOUBLE","PUSH_INVALID_PARAMS","TAG_KEY_LENGTH_EXCEEDED","TAG_VALUE_LENGTH_EXCEEDED","success","customDimensionKeys","HeadersEnum","running","queue","USER_AGENT","IP","dispatchPostCall","dispatchGetCall","EVENT_QUEUE","queueType","executeNext","shift","sendCall","successCallback","endPoint","IMPRESSION_FAILED","handleGetResponse","baseParams","params","mainKeys","IMPRESSION_SUCCESS","handlePostResponse","IMPRESSION_SUCCESS_FOR_EVENT_ARCH","noop","printLog","errorCallback","isCallbackCalled","handleGetCall","_err","getAllResponseHeaders","validateSettingsFile","_configObj","_clonedSettingsFile","SETTINGS_FILE_CORRUPTED","lastSettingsFile","setInterval","latestSettingsFile","POLLING_SUCCESS","stringifiedLatestSettingsFile","updateSettingsFile","POLLING_SETTINGS_FILE_UPDATED","POLLING_SETTINGS_FILE_NOT_UPDATED","_e","POLLING_FAILED","POLLING_SETTINGS_FILE_REGISTERED","_setVariationBucketing","SETTINGS_FILE_PROCESSED","_reject","API_HAS_CORRUPTED_SETTINGS_FILE","validate","number","boolean","array","optional","union","record","campaignGoalSchema","variableObjectSchema","campaignVariationSchema","changes","campaignObjectSchema","groupSchema","settingsFileSchema","_slicedToArray","configurable","writable","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","target","getOwnPropertyDescriptors","defineProperties","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","toFailures","context","fail","iteratorShift","input","done","next","func","Struct","schema","coercer","validator","refiner","StructError","failure","moreFailures","branch","rest","failuresResult","super","failures","stack","__proto__","assert","struct","coerce","ret","is","coercing","check","ctx","v","parent","coercion","fn","defaulted","S","fallback","strict","isPlainObject","changed","masked","getPrototypeOf","empty","refinement","max","regexp","any","Element","entries","date","getTime","dynamic","enums","toLiteralString","instance","Class","intersection","Structs","lazy","literal","constant","Key","Value","Map","never","nullable","knowns","Never","createObjectCoercer","unknowns","delete","partial","tuple","Elements","Number"],"mappings":"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","file":"vwo-javascript-sdk.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\t// CommonJS2\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\t// AMD\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\t// CommonJS\n\telse if(typeof exports === 'object')\n\t\texports[\"vwoSdk\"] = factory();\n\t// Root\n\telse\n\t\troot[\"vwoSdk\"] = factory();\n})(this, 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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = 25);\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('./LoggingManager');\n\nmodule.exports = logging;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = {\n _toStringValue: function(val) {\n return Object.prototype.toString.call(val);\n },\n isNumber: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Number]';\n },\n isString: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object String]';\n },\n isObject: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Object]';\n },\n isFunction: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Function]';\n },\n isBoolean: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Boolean]';\n },\n isPromise: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Promise]';\n },\n isUndefined: function(val) {\n return (\n DataTypeUtil._toStringValue(val) === '[object Undefined]' ||\n // A third-party library sometimes overrides and returns [object Window]\n // therefore, adding a fallback as well\n typeof val === 'undefined'\n );\n },\n isNull: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Null]';\n },\n isArray: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Array]';\n }\n};\n\nmodule.exports = DataTypeUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst LIB_PATH = 'lib';\nconst CORE_PATH = 'lib/core';\nconst UTIL_PATH = 'lib/util';\nconst SERVICES_PATH = 'lib/services';\n\nmodule.exports = {\n INDEX: `${LIB_PATH}/index`,\n\n VWO: `${LIB_PATH}/VWO`,\n\n API: `${LIB_PATH}/api/index`,\n\n Activate: `${LIB_PATH}/api/activate`,\n GetVariation: `${LIB_PATH}/api/getVariation`,\n Track: `${LIB_PATH}/api/track`,\n IsFeatureEnabled: `${LIB_PATH}/api/isFeatureEnabled`,\n GetFeatureVariableValue: `${LIB_PATH}/api/getFeatureVariableValue`,\n Push: `${LIB_PATH}/api/push`,\n\n SegmentEvaluator: `${CORE_PATH}/SegmentEvaluator`,\n BucketingService: `${CORE_PATH}/BucketingService`,\n VariationDecider: `${CORE_PATH}/VariationDecider`,\n\n ConsoleLogManager: `${SERVICES_PATH}/ConsoleLogManager`,\n EventQueue: `${SERVICES_PATH}/EventQueue`,\n LoggingManager: `${SERVICES_PATH}/LoggingManager`,\n SettingsFileManager: `${SERVICES_PATH}/SettingsFileManager`,\n BatchEventsQueue: `${SERVICES_PATH}/BatchEventsQueue`,\n\n CampaignUtil: `${UTIL_PATH}/CampaignUtil`,\n DataTypeUtil: `${UTIL_PATH}/DataTypeUtil`,\n EventDispatcher: `${UTIL_PATH}/EventDispatcher`,\n EventDispatcherUtil: `${UTIL_PATH}/EventDispatcherUtil`,\n FeatureUtil: `${UTIL_PATH}/FeatureUtil`,\n Functionutil: `${UTIL_PATH}/Functionutil`,\n ImpressionUtil: `${UTIL_PATH}/ImpressionUtil`,\n UuidUtil: `${UTIL_PATH}/UuidUtil`,\n ValidateUtil: `${UTIL_PATH}/ValidateUtil`,\n DecisionUtil: `${UTIL_PATH}/DecisionUtils`,\n HttpHandlerUtil: `${UTIL_PATH}/HttpHandlerUtil`,\n HttpImageUtil: `${UTIL_PATH}/HttpImageUtil`,\n HttpXMLUtil: `${UTIL_PATH}/HttpXMLUtil`,\n\n UsageStatsUtil: `${SERVICES_PATH}/UsageStats`\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* global SDK_NAME, SDK_VERSION */\n\nlet packageFile = {};\n\n// For javascript-sdk, to keep the build size low\n// avoid adding the whole package file in the file\nif (typeof process.env === 'undefined') {\n packageFile = {\n name: SDK_NAME,\n version: SDK_VERSION\n };\n} else {\n packageFile = require('../../package.json');\n}\n\nmodule.exports = {\n SDK_NAME: packageFile.name,\n SDK_VERSION: packageFile.version,\n\n PLATFORM: 'server',\n\n SEED_VALUE: 1,\n\n MAX_TRAFFIC_PERCENT: 100,\n MAX_TRAFFIC_VALUE: 10000,\n MAX_EVENTS_PER_REQUEST: 5000,\n\n DEFAULT_EVENTS_PER_REQUEST: 100,\n DEFAULT_REQUEST_TIME_INTERVAL: 600, // 10 * 60(secs) = 600 secs i.e. 10 minutes\n\n STATUS_RUNNING: 'RUNNING',\n\n SEED_URL: 'https://vwo.com',\n\n HTTP_PROTOCOL: 'http://',\n HTTPS_PROTOCOL: 'https://',\n\n SDK_QUERY_PARAM: 'sdk',\n SDK_VERSION_QUERY_PARAM: 'sdk-v'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst FunctionUtil = {\n cloneObject: obj => {\n if (!obj) {\n return obj;\n }\n\n let clonedObj = JSON.parse(JSON.stringify(obj));\n\n return clonedObj;\n },\n getRandomNumber: () => {\n return Math.random();\n },\n getCurrentUnixTimestamp: () => {\n return Math.ceil(+new Date() / 1000);\n },\n getCurrentUnixTimestampInMillis: () => {\n return +new Date();\n },\n matchWithRegex: (string, regex) => {\n try {\n return string.match(new RegExp(regex));\n } catch (err) {\n const logging = require('../services/logging');\n const FileNameEnum = require('../enums/FileNameEnum');\n\n const logger = logging.getLogger();\n const { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n const file = FileNameEnum.FunctionUtil;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_REGEX_CREATION_FAILED, {\n file,\n regex\n })\n );\n return null;\n }\n },\n getCurrentTime() {\n return new Date().toISOString();\n },\n convertObjectKeysToString(properties, excludedProperties) {\n let queryParams = '';\n excludedProperties = excludedProperties || [];\n\n for (let prop in properties) {\n if (properties.hasOwnProperty(prop)) {\n if (excludedProperties.indexOf(prop) === -1) {\n queryParams += prop + '=' + properties[prop] + '&';\n }\n }\n }\n\n return queryParams;\n },\n objectValues(obj) {\n let values = [];\n\n for (const prop in obj) {\n values.push(obj[prop]);\n }\n return values;\n }\n};\n\nmodule.exports = FunctionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ApiEnum = {\n LAUNCH: 'launch',\n ACTIVATE: 'activate',\n GET_VARIATION_NAME: 'getVariation',\n TRACK: 'track',\n IS_FEATURE_ENABLED: 'isFeatureEnabled',\n GET_FEATURE_VARIABLE_VALUE: 'getFeatureVariableValue',\n PUSH: 'push'\n};\n\nmodule.exports = ApiEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('./DataTypeUtil');\nconst DataTypeEnum = require('../enums/DataTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\n\nconst APIMethodArgumentsValidationEnum = {\n [ApiEnum.ACTIVATE]: function({\n campaignKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.TRACK]: function({\n campaignKey,\n userId,\n goalIdentifier,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n goalTypeToTrack = GoalTypeEnum.ALL,\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING_NULL_UNDEFINED_ARRAY\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'goalIdentifier',\n value: goalIdentifier,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'goalTypeToTrack',\n value: goalTypeToTrack,\n type: DataTypeEnum.STRING\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.IS_FEATURE_ENABLED]: function({\n campaignKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.GET_FEATURE_VARIABLE_VALUE]: function({\n campaignKey,\n variableKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'variableKey',\n value: variableKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.PUSH]: function({ tagKey, tagValue, userId, customDimensionMap }) {\n return [\n {\n key: 'tagKey',\n value: tagKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'tagValue',\n value: tagValue,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customDimensionMap',\n value: customDimensionMap,\n type: DataTypeEnum.OBJECT\n }\n ];\n }\n};\n// both have same\nAPIMethodArgumentsValidationEnum[ApiEnum.GET_VARIATION_NAME] = APIMethodArgumentsValidationEnum[ApiEnum.ACTIVATE];\n\nconst ValidateUtil = {\n isValidValue: function(value) {\n return !!(value !== undefined && value);\n },\n isValidString: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isString(value);\n },\n isValidNumber: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isNumber(value);\n },\n isValidFunction: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isFunction(value);\n },\n isValidBoolean: function(value) {\n return value !== undefined && DataTypeUtil.isBoolean(value);\n },\n isValidObject: function(value) {\n return value !== undefined && DataTypeUtil.isObject(value);\n },\n areValidParamsForAPIMethod: argsObj => {\n let isValid = false;\n let args = APIMethodArgumentsValidationEnum[argsObj.method](argsObj);\n\n let validators = [];\n\n for (let i = 0; i < args.length; i++) {\n let argConfig = args[i];\n let argValue = argConfig.value;\n let dataType = argConfig.type;\n // let value;\n\n switch (dataType) {\n case DataTypeEnum.NUMBER:\n validators.push(ValidateUtil.isValidNumber(argValue));\n break;\n case DataTypeEnum.STRING:\n validators.push(ValidateUtil.isValidString(argValue));\n break;\n case DataTypeEnum.BOOLEAN:\n validators.push(ValidateUtil.isValidBoolean(argValue));\n break;\n // case DataTypeEnum.FUNCTION:\n // validators.push(ValidateUtil.isValidFunction(argValue));\n // break;\n case DataTypeEnum.OBJECT:\n validators.push(ValidateUtil.isValidObject(argValue));\n break;\n case DataTypeEnum.STRING_NULL_UNDEFINED_ARRAY:\n let value =\n ValidateUtil.isValidString(argValue) ||\n DataTypeUtil.isUndefined(argValue) ||\n DataTypeUtil.isNull(argValue) ||\n DataTypeUtil.isArray(argValue);\n validators.push(value);\n break;\n // case DataTypeEnum.NUMBER_STRING:\n // value = ValidateUtil.isValidNumber(argValue) || ValidateUtil.isValidString(argValue);\n // validators.push(value);\n // break;\n }\n }\n\n isValid = validators.every(val => val);\n\n return isValid;\n }\n};\n\nmodule.exports = ValidateUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ValidateUtil = require('./ValidateUtil');\nconst VWOFeatureFlags = require('./VWOFeatureFlags');\nconst Constants = require('../constants');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\nconst CampaignTypeEnum = require('../enums/CampaignTypeEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nlet CampaignUtil = {\n /**\n * Returns the bucket size of variation.\n *\n * @param {Number/Float} - weight of variation\n *\n * @return {Number} bucket start range of Variation\n */\n _getVariationBucketRange: variationWeight => {\n if (!variationWeight || variationWeight === 0) {\n return 0;\n }\n\n const startRange = Math.ceil(variationWeight * 100);\n\n return Math.min(startRange, Constants.MAX_TRAFFIC_VALUE);\n },\n\n /**\n * Get the campaign on the basis of campaign id\n *\n * @param {Object} settingsFile\n * @param {Number} campaignId\n *\n * @returns {Object} campaign object\n */\n getCampaignBasedOnId: (settingsFile, campaignId) => {\n let campaign;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n if (parseInt(settingsFile.campaigns[i].id, 10) === parseInt(campaignId, 10)) {\n campaign = settingsFile.campaigns[i];\n\n break;\n }\n }\n\n return campaign;\n },\n /**\n * It extracts the weights from all the variations inside the campaign\n and scales them so that the total sum of eligible variations' weights become 100%\n\n 1. variations\n */\n scaleVariationWeights: variations => {\n const totalWeight = variations.reduce((acc, variation) => {\n return acc + variation.weight;\n }, 0);\n if (!totalWeight) {\n const weight = 100 / variations.length;\n variations.forEach(variation => (variation.weight = weight));\n } else {\n variations.forEach(variation => (variation.weight = (variation.weight / totalWeight) * 100));\n }\n },\n\n getCampaign: (settingsFile, campaignKey) => {\n let campaign;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n if (settingsFile.campaigns[i].key === campaignKey) {\n campaign = settingsFile.campaigns[i];\n\n break;\n }\n }\n\n return campaign;\n },\n /**\n * Gets campaigns for corresponding campaignKeys\n *\n * @param {Object} settingsFile\n * @param {Array} campaignKeys\n *\n * @return {Array} Campaigns\n */\n getCampaignsForKeys: (settingsFile, campaignKeys) => {\n const campaigns = [];\n campaignKeys.forEach(key => {\n let campaign = CampaignUtil.getCampaign(settingsFile, key);\n if (campaign) {\n campaigns.push(campaign);\n } else {\n campaigns.push({\n key\n });\n }\n });\n return campaigns;\n },\n /**\n * Gets campaigns which have the goalIdentifier present\n *\n * @param {settingsFile}\n * @param {String} goalIdentifier\n * @param {String} goalTypeToTrack type of goal to track\n *\n * @return {Array} Campaigns\n */\n getCampaignsForGoal: (settingsFile, goalIdentifier, goalTypeToTrack) => {\n let campaigns = [];\n settingsFile.campaigns.forEach(campaign => {\n const goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier);\n if (goal && (goalTypeToTrack === GoalTypeEnum.ALL || goal.type === goalTypeToTrack)) {\n campaigns.push(campaign);\n }\n });\n if (!campaigns.length) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CAMPAIGN_NOT_FOUND_FOR_GOAL, {\n file: FileNameEnum.CampaignUtil,\n goalIdentifier\n })\n );\n }\n return campaigns;\n },\n getCampaignStatus: (settingsFile, campaignKey) => {\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign || !campaign.status) {\n // log error\n return '';\n }\n\n return campaign.status.toLowerCase();\n },\n\n isCampaignRunning: (settingsFile, campaignKey) => {\n return CampaignUtil.getCampaignStatus(settingsFile, campaignKey) === 'running';\n },\n /**\n * Validates the campaign\n *\n * @param {Campaign} campaign the campaign to be validated\n *\n * @return {Boolean} true is campaign is valid\n */\n validateCampaign: campaign => {\n return ValidateUtil.isValidValue(campaign) && campaign.variations && Object.keys(campaign.variations).length > 0;\n },\n\n /**\n * Assigns the buckets to the Variations of the campaign\n * depending on the traffic allocation\n *\n * @param {Campaign} campaign whose Variations are to be allocated\n */\n setVariationAllocation: campaign => {\n const numberOfVariations = campaign.variations.length;\n let stepFactor = 0;\n\n for (let i = 0, currentAllocation = 0; i < numberOfVariations; i++) {\n let variation = campaign.variations[i];\n\n stepFactor = CampaignUtil.assignRangeValues(variation, currentAllocation);\n currentAllocation += stepFactor;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.VARIATION_RANGE_ALLOCATION, {\n file: FileNameEnum.CampaignUtil,\n campaignKey: campaign.key,\n variationName: variation.name,\n variationWeight: variation.weight,\n start: variation.startVariationAllocation,\n end: variation.endVariationAllocation\n })\n );\n }\n },\n\n /**\n * Assign range allocation to the campaigns in the list to decide which campaign to choose out of the Mutually Exclusive group\n *\n * @param {Array} campaigns\n */\n setCampaignAllocation: campaigns => {\n let stepFactor = 0;\n\n for (let i = 0, currentAllocation = 0; i < campaigns.length; i++) {\n let campaign = campaigns[i];\n\n stepFactor = CampaignUtil.assignRangeValues(campaign, currentAllocation);\n currentAllocation += stepFactor;\n }\n },\n\n assignRangeValues: (variation, currentAllocation) => {\n let stepFactor;\n stepFactor = CampaignUtil._getVariationBucketRange(variation.weight);\n\n if (stepFactor) {\n variation.startVariationAllocation = currentAllocation + 1;\n variation.endVariationAllocation = currentAllocation + stepFactor;\n } else {\n variation.startVariationAllocation = -1;\n variation.endVariationAllocation = -1;\n }\n return stepFactor;\n },\n getCampaignGoal: (settingsFile, campaignKey, goalIdentifier) => {\n let desiredCampaignGoal = null;\n\n if (!settingsFile || !campaignKey || !goalIdentifier) {\n return desiredCampaignGoal;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign) {\n return desiredCampaignGoal;\n }\n\n for (let i = 0; i < campaign.goals.length; i++) {\n let goal = campaign.goals[i];\n\n if (goal.identifier === goalIdentifier) {\n desiredCampaignGoal = goal;\n break;\n }\n }\n\n return desiredCampaignGoal;\n },\n getCampaignVariation: (settingsFile, campaignKey, variationName) => {\n let desiredVariation = null;\n\n if (!settingsFile || !campaignKey || !variationName) {\n return desiredVariation;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign) {\n return desiredVariation;\n }\n\n for (let i = 0; i < campaign.variations.length; i++) {\n let variation = campaign.variations[i];\n\n if (variation.name === variationName) {\n desiredVariation = variation;\n\n break;\n }\n }\n\n return desiredVariation;\n },\n getControlForCampaign: campaign => {\n let control = {};\n\n if (!campaign || !campaign.variations) {\n return control;\n }\n\n for (let i = 0; i < campaign.variations.length; i++) {\n if (campaign.variations[i].id === 1) {\n control = campaign.variations[i];\n break;\n }\n }\n\n return control;\n },\n isFeatureTestCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.FEATURE_TEST) {\n return true;\n }\n\n return false;\n },\n isFeatureRolloutCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT) {\n return true;\n }\n\n return false;\n },\n isAbCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.AB) {\n return true;\n }\n\n return false;\n },\n\n /**\n * Check if the campaign is a part of mutually exclusive group\n *\n * @param {Object} settingsFile\n * @param {Number} campaignId\n *\n * @returns {Number} group id of the campaign.\n */\n isPartOfGroup: (settingsFile, campaignId) => {\n if (settingsFile.campaignGroups && Object.prototype.hasOwnProperty.call(settingsFile.campaignGroups, campaignId)) {\n return {\n groupId: settingsFile.campaignGroups[campaignId],\n groupName: settingsFile.groups[settingsFile.campaignGroups[campaignId]].name\n };\n }\n return {};\n },\n\n /**\n * Get the list of campaigns on the basis of their id\n *\n * @param {Object} settingsFile\n * @param {Number} groupId\n *\n * @returns {Array} list of campaigns\n */\n getGroupCampaigns: (settingsFile, groupId) => {\n const campaigns = [];\n if (Object.prototype.hasOwnProperty.call(settingsFile.groups, groupId)) {\n settingsFile.groups[groupId].campaigns.forEach(campaignId => {\n let campaign = CampaignUtil.getCampaignBasedOnId(settingsFile, campaignId);\n if (campaign) {\n campaigns.push(campaign);\n }\n });\n }\n return campaigns;\n },\n\n /**\n * Decide the Seed for murmurhash to bucket user.\n * @param {string} userId\n * @param {object} campaign\n * @param {number} groupId\n *\n * @returns {string} Seed value\n */\n getBucketingSeed: (userId, campaign, groupId) => {\n if (groupId) {\n return `${groupId}_${userId}`;\n }\n\n const isNB = VWOFeatureFlags.getAll().isNB;\n const isNBv2 = VWOFeatureFlags.getAll().isNBv2;\n\n if (isNB || isNBv2 || (campaign && campaign.isBucketingSeedEnabled)) {\n return `${campaign.id}_${userId}`;\n } else {\n return userId;\n }\n }\n};\n\nmodule.exports = CampaignUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VariationDecider = require('../core/VariationDecider');\nconst BucketingService = require('../core/BucketingService');\n\nconst CampaignUtil = require('./CampaignUtil');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst FunctionUtil = require('./FunctionUtil');\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst StatusEnum = require('../enums/StatusEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst SegmentEvaluator = require('../core/SegmentEvaluator');\nconst HooksManager = require('../services/HooksManager');\nconst HooksEnum = require('../enums/HooksEnum');\nconst UuidUtil = require('./UuidUtil');\nconst Constants = require('../constants');\nconst CampaignTypeEnum = require('../enums/CampaignTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\nconst RandomAlgo = 1;\n\nconst file = FileNameEnum.DecisionUtil;\n\nconst SegmentationTypeEnum = {\n WHITELISTING: 'whitelisting',\n PRE_SEGMENTATION: 'pre-segmentation'\n};\n\nlet DecisionUtil = {\n // PUBLIC METHODS\n /**\n * 1. Checks if there is a variation stored in userStorage, returns it\n * 2. If Whitelisting is applicable, evaluate it, if any eligible variation is found, store it in User Storage service and return, otherwise skip it.\n * 3. Check if the campaign is part of mutually exclusive group, if yes, get the winner campaign using campaign traffic normalization.\n * 4. If Pre-segmentation is applied and passes then go further otherwise return early and no further processing\n * 5. If no user storage value, no whitelisted variation and pre-segmentation evaluates to true, get variation using hashing logic if campaign traffic passes for that userId\n *\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} campaign\n * @param {Object} campaignKey\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} variationTargetingVariables\n *\n * @return {Object|null} - Object if a variation is assigned, otherwise null\n */\n getVariation: (\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables = {},\n userStorageData = {},\n metaData,\n isTrackUserAPI,\n isTrackGoalAPI,\n newGoalIdentifier,\n api = ''\n ) => {\n let vwoUserId = UuidUtil.generateFor(userId, settingsFile.accountId);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_UUID, {\n file: FileNameEnum.UuidUtil,\n userId,\n accountId: settingsFile.accountId,\n uuid: vwoUserId\n })\n );\n\n let decision = {\n // campaign info\n campaignId: campaign.id,\n campaignKey,\n campaignType: campaign.type,\n campaignName: campaign.name,\n // campaign segmentation conditions\n customVariables,\n // event name\n event: HooksEnum.DECISION_TYPES.CAMPAIGN_DECISION,\n // goal tracked in case of track API\n goalIdentifier: newGoalIdentifier,\n // campaign whitelisting flag\n isForcedVariationEnabled: campaign.isForcedVariationEnabled,\n sdkVersion: Constants.SDK_VERSION,\n // API name which triggered the event\n source: api,\n // Passed in API\n userId,\n // Campaign Whitelisting conditions\n variationTargetingVariables,\n // VWO generated UUID based on passed UserId and Account ID\n vwoUserId\n };\n\n // check if the campaign is a part of group\n const { groupId, groupName } = CampaignUtil.isPartOfGroup(settingsFile, campaign.id);\n\n if (groupId) {\n // append groupId and groupName, if campaign is a part of group\n decision['groupId'] = groupId;\n decision['groupName'] = groupName;\n }\n\n variationTargetingVariables = Object.assign({}, variationTargetingVariables, {\n _vwoUserId: campaign.isUserListEnabled ? vwoUserId : userId\n });\n\n // check if tbe campaign satisfies the whitelisting before checking for the group\n const whitelistedVariation = DecisionUtil._checkForWhitelisting(\n config,\n campaign,\n campaignKey,\n userId,\n variationTargetingVariables,\n decision\n );\n if (whitelistedVariation) {\n if (DataTypeUtil.isPromise(whitelistedVariation)) {\n return whitelistedVariation.then(data => {\n if (Object.keys(data).length > 0) {\n return data;\n }\n });\n } else {\n return whitelistedVariation;\n }\n }\n\n // check if the campaign is present in the storage before checking for the group\n\n let storedVariation;\n // check if asyncStorage, if yes then synchronously get the data and return promise\n if (config.asyncStorageConfig) {\n return new Promise(resolve => {\n return DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n ).then(function(response) {\n if (response && DataTypeUtil.isObject(response) && Object.keys(response).length > 0) {\n resolve(Object.assign({}, { isStoredVariation: true }, response));\n } else if (isTrackGoalAPI) {\n resolve(Object.assign({}));\n } else {\n const variationWithoutStorageLookup = DecisionUtil.evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n );\n resolve(variationWithoutStorageLookup);\n }\n });\n });\n } else {\n storedVariation = DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n );\n }\n\n if (storedVariation) {\n return storedVariation;\n }\n\n return DecisionUtil.evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n );\n },\n\n evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n ) {\n // check if the called campaign satisfies the pre-segmentation before further processing.\n if (\n !(\n DecisionUtil._checkForPreSegmentation(campaign, campaignKey, userId, customVariables, decision) &&\n BucketingService.isUserPartOfCampaign(userId, campaign, true)\n )\n ) {\n return {};\n }\n\n if (groupId) {\n // mutually exclusive group exists\n\n // get the list of the all the campaigns in a group\n const campaignList = CampaignUtil.getGroupCampaigns(settingsFile, groupId);\n\n if (campaignList.length === 0) {\n // return if no campaigns are active in a group\n return {};\n }\n\n // checking other campaigns for whitelisting and user storage.\n let isWhitelistedOrStoredVariation = DecisionUtil._checkForStorageAndWhitelisting(\n config,\n settingsFile,\n groupName,\n campaignList,\n campaign,\n userId,\n userStorageData,\n variationTargetingVariables,\n isTrackUserAPI\n );\n\n if (isWhitelistedOrStoredVariation) {\n // other campaigns satisfy the whitelisting or storage, therfore returning\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: campaignKey\n })\n );\n if (DataTypeUtil.isPromise(isWhitelistedOrStoredVariation)) {\n return new Promise(resolve => {\n resolve(Object.assign({}));\n });\n }\n return {};\n }\n\n // none of the group campaigns satisfy whitelisting or user storage\n // check each campaign for pre-segmentation and traffic allocation.\n let inEligibleCampaignKeys = '';\n let eligibleCampaignKeys = '';\n const { eligibleCampaigns, inEligibleCampaigns } = DecisionUtil.getEligbleCampaigns(\n campaignList,\n userId,\n customVariables\n );\n\n inEligibleCampaigns.forEach(campaign => {\n inEligibleCampaignKeys = inEligibleCampaignKeys + campaign.key + ',';\n });\n eligibleCampaigns.forEach(campaign => {\n eligibleCampaignKeys = eligibleCampaignKeys + campaign.key + ',';\n });\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS, {\n userId,\n groupName,\n file,\n eligibleCampaignKeys: eligibleCampaignKeys.slice(0, -1),\n inEligibleText:\n inEligibleCampaignKeys === '' ? 'no campaigns' : `campaigns: ${inEligibleCampaignKeys.slice(0, -1)}`\n })\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS, {\n userId,\n groupName,\n file,\n noOfEligibleCampaigns: eligibleCampaigns.length,\n noOfGroupCampaigns: inEligibleCampaigns.length + eligibleCampaigns.length\n })\n );\n\n // Whether normalised/random implementation has to be done or advanced\n let megAlgoNumber =\n typeof settingsFile.groups[groupId].et !== 'undefined' ? settingsFile.groups[groupId].et : RandomAlgo;\n\n if (eligibleCampaigns.length === 1) {\n // if the called campaign is the only winner.\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n eligibleCampaigns[0],\n eligibleCampaigns[0].key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n if (megAlgoNumber === RandomAlgo) {\n // normalize the eligible campaigns and decide winner\n return DecisionUtil._normalizeAndFindWinningCampaign(\n config,\n campaign,\n eligibleCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n return DecisionUtil._advancedAlgoFindWinningCampaign(\n config,\n settingsFile,\n campaign,\n eligibleCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n );\n }\n }\n } else {\n // campaign is not a part of mutually exclusive group\n // check if the user is eligible to become part of the campaign and assign variation.\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n campaign,\n campaignKey,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n }\n },\n // PRIVATE METHODS\n\n _evaluateWhitelisting: (campaign, campaignKey, userId, variationTargetingVariables, disableLogs = false) => {\n let whitelistedVariation;\n let status;\n const targetedVariations = [];\n campaign.variations.forEach(variation => {\n if (DataTypeUtil.isObject(variation.segments) && !Object.keys(variation.segments).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file,\n variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT ? '' : `, for ${variation.name}`\n }),\n disableLogs\n );\n return;\n }\n if (\n DataTypeUtil.isObject(variation.segments) &&\n SegmentEvaluator(variation.segments, variationTargetingVariables, campaignKey, userId, variation.name)\n ) {\n status = StatusEnum.PASSED;\n targetedVariations.push(FunctionUtil.cloneObject(variation));\n } else {\n status = StatusEnum.FAILED;\n }\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(variationTargetingVariables),\n file,\n status,\n segmentationType: SegmentationTypeEnum.WHITELISTING,\n variation:\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT && status === StatusEnum.PASSED\n ? 'and becomes part of the rollout'\n : `for ${variation.name}`\n }),\n disableLogs\n );\n });\n\n if (targetedVariations.length > 1) {\n CampaignUtil.scaleVariationWeights(targetedVariations);\n for (let i = 0, currentAllocation = 0, stepFactor = 0; i < targetedVariations.length; i++) {\n stepFactor = CampaignUtil.assignRangeValues(targetedVariations[i], currentAllocation);\n currentAllocation += stepFactor;\n }\n whitelistedVariation = BucketingService._getVariation(\n targetedVariations,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, campaign))\n );\n } else {\n whitelistedVariation = targetedVariations[0];\n }\n\n if (whitelistedVariation) {\n return {\n variation: whitelistedVariation,\n variationName: whitelistedVariation.name,\n variationId: whitelistedVariation.id\n };\n }\n },\n /**\n * Get the User Variation mapping by calling get method of UserStorageService being provided\n *\n * @param {Object} config\n * @param {String} UserID\n * @param {String} campaignKey\n *\n * @return {Object} - User Campaign Mapping\n */\n _getStoredUserData: function(config, userId, campaignKey, userStorageData, disableLogs) {\n let userStorageMap = {\n userId: userId,\n variationName: null,\n campaignKey: campaignKey,\n goalIdentifier: null\n };\n\n if (!config.userStorageService) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, {\n file\n }),\n disableLogs\n );\n return userStorageMap;\n }\n\n if (config.asyncStorageConfig) {\n try {\n return config.userStorageService\n .get(userId, campaignKey)\n .then(data => {\n // if data found\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey\n }),\n disableLogs\n );\n\n let finalData = Object.assign({}, data, userStorageData);\n\n return finalData;\n })\n .catch(_error => {\n // TODO: add log for failed fetch\n console.log('Failed to fetch data from Storage Service', _error);\n });\n } catch (err) {\n // if no data found\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_GET_FAILED, {\n file,\n userId,\n error: err\n }),\n disableLogs\n );\n }\n } else {\n try {\n let data = config.userStorageService.get(userId, campaignKey) || {};\n\n // if data found\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey\n }),\n disableLogs\n );\n\n return Object.assign({}, data, userStorageData);\n } catch (err) {\n // if no data found\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_GET_FAILED, {\n file,\n userId,\n error: err\n }),\n disableLogs\n );\n }\n }\n },\n\n /**\n * If UserStorageService is provided and variation was stored, save the assigned variation\n *\n * @param {Object} campaign\n * @param {String} variationName\n * @param {String} userId\n *\n * @return {Boolean} - true if found otherwise false\n */\n _saveUserData: function(config, campaign, variationName, userId, metaData, goalIdentifier) {\n let isSaved = false;\n\n if (!config.userStorageService) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, {\n file\n })\n );\n return isSaved;\n }\n\n try {\n const properties = {\n userId: userId,\n variationName,\n campaignKey: campaign.key\n };\n\n if (!DataTypeUtil.isUndefined(goalIdentifier)) {\n properties.goalIdentifier = goalIdentifier;\n }\n\n if (!DataTypeUtil.isUndefined(metaData)) {\n properties.metaData = metaData;\n }\n\n config.userStorageService.set(properties);\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey: campaign.key\n })\n );\n\n isSaved = true;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_SET_FAILED, {\n file,\n userId,\n error: err\n })\n );\n\n isSaved = false;\n }\n\n return isSaved;\n },\n\n /**\n * Evaluate the campaign for whitelisting and store\n * This method would be run only for MEG campaigns\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Array} campaignList\n * @param {Object} calledCampaign\n * @param {String} userId\n * @param {Object} userStorageData\n * @param {Object} variationTargetingVariables\n * @param {Boolean} isTrackUserAPI\n *\n * @returns {Boolean} - true, if whitelisting/storage is satisfied for any campaign\n */\n _checkForStorageAndWhitelisting(\n config,\n settingsFile,\n groupName,\n campaignList,\n calledCampaign,\n userId,\n userStorageData,\n variationTargetingVariables,\n isTrackUserAPI\n ) {\n let otherCampaignWinner = false;\n campaignList.some(groupCampaign => {\n if (groupCampaign.id === calledCampaign.id) {\n return;\n }\n // create a local copy of the campaigns\n // groupCampaign = FunctionUtil.cloneObject(groupCampaign);\n // checking other campaigns for whitelisting or user storage.\n const whitelistedVariation = DecisionUtil._checkForWhitelisting(\n config,\n groupCampaign,\n groupCampaign.key,\n userId,\n variationTargetingVariables\n );\n if (whitelistedVariation) {\n if (DataTypeUtil.isPromise(whitelistedVariation)) {\n return whitelistedVariation.then(data => {\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'whitelisting'\n })\n );\n return new Promise(resolve => {\n resolve(true);\n });\n });\n } else {\n // other campaign satisfy the whitelisting\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'whitelisting'\n })\n );\n return true;\n }\n }\n\n const storedVariation = DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n groupCampaign,\n groupCampaign.key,\n userId,\n userStorageData,\n isTrackUserAPI\n );\n\n if (storedVariation && DataTypeUtil.isPromise(storedVariation)) {\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'user storage'\n })\n );\n // return true;\n return new Promise(resolve => {\n resolve(true);\n });\n }\n if (storedVariation && DataTypeUtil.isObject(storedVariation) && Object.keys(storedVariation).length > 0) {\n // other campaign satisfy the user storage\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'user storage'\n })\n );\n return true;\n }\n });\n if (config.asyncStorageConfig) {\n return new Promise(resolve => {\n resolve(otherCampaignWinner);\n });\n }\n return otherCampaignWinner;\n },\n\n /**\n * Evaluate a campaign for pre-segmentation.\n *\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} decision\n *\n * @returns {Boolean} true, if the pre-segmentation is satisfied.\n */\n _checkForPreSegmentation: (campaign, campaignKey, userId, customVariables, decision) => {\n let status;\n if (DataTypeUtil.isObject(campaign.segments) && !Object.keys(campaign.segments).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n !decision\n );\n return true;\n } else {\n const preSegmentationResult = SegmentEvaluator(\n campaign.segments,\n customVariables,\n campaignKey,\n userId,\n !decision\n );\n if (!preSegmentationResult) {\n status = StatusEnum.FAILED;\n } else {\n status = StatusEnum.PASSED;\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(customVariables || {}),\n file,\n status,\n segmentationType: SegmentationTypeEnum.PRE_SEGMENTATION,\n variation: ''\n }),\n !decision\n );\n\n if (status === StatusEnum.FAILED) {\n return false;\n } else {\n return true;\n }\n }\n },\n\n /**\n * Check if user is eligible for the camapign based on traffic percentage and assign variation.\n * @param {Object} config\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n * @returns {Object} variation assigned to the user\n */\n evaluateTrafficAndGetVariation(config, campaign, campaignKey, userId, metaData, newGoalIdentifier, decision) {\n let variation, variationName, variationId;\n // Use our core's VariationDecider utility to get the deterministic variation assigned to the userId for that campaign\n ({ variation, variationName, variationId } = VariationDecider.getVariationAllotted(\n userId,\n campaign,\n config.settingsFile.accountId\n ));\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_ALLOCATION_STATUS, {\n file,\n campaignKey,\n userId,\n status: variationName ? `got variation:${variationName}` : 'did not get any variation'\n })\n );\n\n // Check if variation-name has been assigned to the userId. If not, return no variation\n if (variationName) {\n // If userStorageService is provided, look into it for the saved variation for the campaign and userId\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, newGoalIdentifier);\n }\n\n // Executing the callback when SDK makes the decision\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: false,\n isUserWhitelisted: false\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n\n return {\n variation: variation && variation.variation,\n variationName,\n variationId\n };\n },\n\n /**\n * Evaluate a campaign for whitelisting\n *\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} variationTargetingVariables\n * @param {Object} decision\n *\n * @returns {Object} whitelisted variation\n */\n _checkForWhitelisting: (config, campaign, campaignKey, userId, variationTargetingVariables, decision) => {\n let status;\n let variationName, variationId;\n if (campaign.isForcedVariationEnabled) {\n let whitelistingResult = DecisionUtil._evaluateWhitelisting(\n campaign,\n campaignKey,\n userId,\n variationTargetingVariables,\n !decision\n );\n let variationString;\n if (whitelistingResult) {\n status = StatusEnum.PASSED;\n variationString = whitelistingResult.variationName;\n } else {\n status = StatusEnum.FAILED;\n variationString = '';\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(variationTargetingVariables),\n file,\n status,\n segmentationType: SegmentationTypeEnum.WHITELISTING,\n variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT ? '' : `for variation: ${variationString}`\n }),\n !decision\n );\n\n if (whitelistingResult) {\n variationName = whitelistingResult.variationName;\n variationId = whitelistingResult.variationId;\n // Executing the callback when SDK has made a decision in case of whitelisting\n if (decision) {\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: false,\n isUserWhitelisted: !!variationName\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n }\n if (config.asyncStorageConfig) {\n return new Promise(resolve => resolve(whitelistingResult));\n }\n return whitelistingResult;\n }\n } else {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.WHITELISTING_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n !decision\n );\n }\n },\n\n /**\n * Check if the variation is present in the user storage\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} userStorageData\n * @param {Boolean} isTrackUserAPI\n * @param {Object} decision\n *\n * @returns {Object} stored variaition\n */\n _checkForUserStorage: (\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n ) => {\n let userData;\n\n if (config.asyncStorageConfig) {\n return DecisionUtil._getStoredUserData(config, userId, campaignKey, userStorageData, !decision).then(function(\n userData\n ) {\n userData = userData || { variationName: null, goalIdentifier: null };\n\n return DecisionUtil._processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n );\n });\n } else {\n userData = DecisionUtil._getStoredUserData(config, userId, campaignKey, userStorageData, !decision);\n\n return DecisionUtil._processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n );\n }\n },\n\n _processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n ) {\n let { variationName, goalIdentifier } = userData;\n let storedVariation;\n\n if (userData && userData.campaignKey && variationName) {\n storedVariation = CampaignUtil.getCampaignVariation(settingsFile, campaignKey, variationName);\n } else {\n // Log if stored variation is not found even after implementing UserStorageService\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NO_STORED_DATA, {\n file,\n campaignKey,\n userId\n }),\n !decision\n );\n }\n\n let variationId;\n\n // If stored variation is found, simply return the same\n if (storedVariation) {\n variationName = storedVariation.name;\n variationId = storedVariation.id;\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GOT_STORED_VARIATION, {\n file,\n campaignKey,\n userId,\n variationName\n }),\n !decision\n );\n\n // Executing the callback when SDK gets the decision from user storage service\n if (decision) {\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: !!variationName,\n isUserWhitelisted: false\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n }\n\n return {\n variation: storedVariation,\n variationName,\n variationId,\n storedGoalIdentifier: goalIdentifier,\n isStoredVariation: true\n };\n } else if (\n !DataTypeUtil.isUndefined(config.userStorageService) &&\n !isTrackUserAPI &&\n DataTypeUtil.isUndefined(storedVariation)\n ) {\n logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_ACTIVATED, {\n file,\n campaignKey,\n userId,\n api: config.apiName\n }),\n !decision\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_NOT_ACTIVATED, {\n file,\n campaignKey,\n userId,\n reason: config.apiName === ApiEnum.TRACK ? 'track it' : 'get the decision/value'\n }),\n !decision\n );\n return {};\n }\n },\n\n /**\n * Evaluate the list of campaigns for pre-segmentation and campaign traffic allocation and assign variation to the user.\n * This method will be used for MEG campaigns\n *\n * @param {Object} config\n * @param {Array} campaignList\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n *\n * @returns {Array} list of campaigns which satisfies the conditions.\n */\n getEligbleCampaigns(campaignList, userId, customVariables) {\n let eligibleCampaigns = [];\n let inEligibleCampaigns = [];\n\n campaignList.forEach(groupCampaign => {\n const isPartOfCampaign =\n DecisionUtil._checkForPreSegmentation(groupCampaign, groupCampaign.key, userId, customVariables) &&\n BucketingService.isUserPartOfCampaign(userId, groupCampaign, true);\n if (isPartOfCampaign) {\n groupCampaign = FunctionUtil.cloneObject(groupCampaign);\n // campaign satisfies the pre-segmentation\n eligibleCampaigns.push(groupCampaign);\n } else {\n inEligibleCampaigns.push(groupCampaign);\n }\n });\n\n return {\n eligibleCampaigns,\n inEligibleCampaigns\n };\n },\n\n /**\n * Equally distribute the traffic of campaigns and assign a winner campaign by murmur hash.\n *\n * @param {Object} config\n * @param {Object} calledCampaign\n * @param {Array} shortlistedCampaigns\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n *\n * @returns {Object} variation of the winner campaign\n */\n _normalizeAndFindWinningCampaign(\n config,\n calledCampaign,\n shortlistedCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n ) {\n // normalise the weights of all the shortlisted campaigns\n shortlistedCampaigns.forEach(campaign => {\n campaign.weight = Math.floor(100 / shortlistedCampaigns.length);\n });\n\n // re-distribute the traffic for each camapign\n CampaignUtil.setCampaignAllocation(shortlistedCampaigns);\n\n let winnerCampaign = BucketingService._getVariation(\n shortlistedCampaigns,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, {\n userId,\n groupName,\n file,\n campaignKey: winnerCampaign.key\n })\n );\n\n if (winnerCampaign.id === calledCampaign.id) {\n // if called campaign is the winner campaign, get the variation for the campaign\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n winnerCampaign,\n winnerCampaign.key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n // if winning campaign not the called camapaign, return\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: calledCampaign.key\n })\n );\n return {};\n }\n },\n /** Assign the winner campaign by checking priority order and/or weightage distribution\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} calledCampaign\n * @param {Array} shortlistedCampaigns\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n *\n * @returns {Object} variation of the winner campaign\n */\n _advancedAlgoFindWinningCampaign: (\n config,\n settingsFile,\n calledCampaign,\n shortlistedCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n ) => {\n let winnerCampaign = null;\n let found = false; // flag to check whether winnerCampaign has been found or not and helps to break from the outer loop\n let priorityOrder = typeof settingsFile.groups[groupId].p !== 'undefined' ? settingsFile.groups[groupId].p : {};\n let wt = typeof settingsFile.groups[groupId].wt !== 'undefined' ? settingsFile.groups[groupId].wt : {};\n\n for (let i = 0; i < priorityOrder.length; i++) {\n for (let j = 0; j < shortlistedCampaigns.length; j++) {\n if (shortlistedCampaigns[j].id === priorityOrder[i]) {\n winnerCampaign = FunctionUtil.cloneObject(shortlistedCampaigns[j]);\n found = true;\n break;\n }\n }\n if (found === true) break;\n }\n\n // If winnerCampaign not found through Priority, then go for weighted Random distribution and for that,\n // Store the list of campaigns (participatingCampaigns) out of shortlistedCampaigns and their corresponding weights present in weightage distribution array (wt)\n if (winnerCampaign === null) {\n let participatingCampaignList = [];\n // iterate over shortlisted campaigns and add weights from the weight array\n for (let i = 0; i < shortlistedCampaigns.length; i++) {\n let campaignId = shortlistedCampaigns[i].id;\n if (typeof wt[campaignId] !== 'undefined') {\n let clonedCampaign = FunctionUtil.cloneObject(shortlistedCampaigns[i]);\n clonedCampaign.weight = wt[campaignId];\n participatingCampaignList.push(clonedCampaign);\n }\n }\n /* Finding winner campaign using weighted Distibution :\n 1. Re-distribute the traffic by assigning range values for each camapign in particaptingCampaignList \n 2. Calculate bucket value for the given userId and groupId\n 3. Get the winnerCampaign by checking the Start and End Bucket Allocations of each campaign\n */\n\n CampaignUtil.setCampaignAllocation(participatingCampaignList);\n\n winnerCampaign = BucketingService._getVariation(\n participatingCampaignList,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))\n );\n }\n\n if (winnerCampaign != null) {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, {\n userId,\n groupName,\n file,\n campaignKey: winnerCampaign.key\n })\n );\n }\n // WinnerCampaign should not be null, in case when winnerCampaign hasn't been found through PriorityOrder and\n // also shortlistedCampaigns and wt array does not have a single campaign id in common\n if (winnerCampaign != null && winnerCampaign.id === calledCampaign.id) {\n // if called campaign is the winner campaign, get the variation for the campaign\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n winnerCampaign,\n winnerCampaign.key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n // if winning campaign not the called camapaign, return\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: calledCampaign.key\n })\n );\n return {};\n }\n }\n};\n\nmodule.exports = DecisionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst GoalTypeEnum = {\n REVENUE: 'REVENUE_TRACKING',\n CUSTOM: 'CUSTOM_GOAL',\n ALL: 'ALL'\n};\n\nmodule.exports = GoalTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ObjectUtil = {\n areObjectKeys: (obj = {}) => {\n return Object.keys(obj).length;\n },\n getKeyValue: obj => {\n if (!ObjectUtil.areObjectKeys(obj)) {\n return;\n }\n let key = Object.keys(obj)[0];\n let value = obj[key];\n return {\n key,\n value\n };\n },\n objectValues: obj => {\n return Object.keys(obj).map(key => obj[key]);\n }\n};\n\nmodule.exports = ObjectUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst UrlEnum = require('../enums/UrlEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\n\nconst UuidUtil = require('./UuidUtil');\nconst ValidateUtil = require('./ValidateUtil');\nconst FunctionUtil = require('./FunctionUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst UrlService = require('../services/UrlService');\n/**\n * Return primary properties required for every network call to VWO server\n * @param {Object} configObj\n * @param {String} userId\n *\n * @returns primary properties\n */\nfunction getPrimaryProperties(configObj, userId) {\n return {\n sId: FunctionUtil.getCurrentUnixTimestamp(),\n u: UuidUtil.generateFor(userId, configObj.accountId)\n };\n}\n\n/**\n * Return base properties required for every network call to VWO server\n * @param {Object} configObj\n * @param {String} userId\n *\n * @returns base properties\n */\nfunction getBaseProperties(configObj, userId) {\n const { accountId } = configObj;\n\n return Object.assign({}, getPrimaryProperties(configObj, userId), ImpressionUtil.getReportingProperties(configObj), {\n account_id: accountId,\n random: FunctionUtil.getRandomNumber(),\n ap: Constants.PLATFORM\n });\n}\n\nlet ImpressionUtil = {\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} tagKey the tag name\n * @param {String} tagValue the tag value\n */\n buildEventForPushing(configObj, tagKey, tagValue, userId) {\n const properties = Object.assign({}, getBaseProperties(configObj, userId));\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.PUSH;\n properties.tags = JSON.stringify({\n u: {\n [encodeURIComponent(tagKey)]: encodeURIComponent(tagValue)\n }\n });\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} tagKey the tag name\n * @param {String} tagValue the tag value\n */\n buildBatchEventForPushing(configObj, tagKey, tagValue, userId) {\n if (typeof process.env !== 'undefined') {\n const properties = Object.assign({}, getPrimaryProperties(configObj, userId));\n properties.eT = 3;\n properties.t = encodeURIComponent(\n JSON.stringify({\n u: {\n [tagKey]: tagValue\n }\n })\n );\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildEventForTrackingUser(\n configObj,\n campaignKey,\n variationId,\n userId,\n usageStats,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n let properties = Object.assign(\n {\n experiment_id: campaignKey,\n combination: variationId,\n visitor_ua: visitorUserAgent,\n visitor_ip: userIpAddress\n },\n getBaseProperties(configObj, userId),\n usageStats\n );\n properties.ed = JSON.stringify({ p: 'server' });\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.TRACK_USER;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} visitorUserAgent, user agent of visitor\n * @param {String} userIpAddress, IP of the visitor\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildBatchEventForTrackingUser(\n configObj,\n campaignKey,\n variationId,\n userId,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n if (typeof process.env !== 'undefined') {\n let properties = Object.assign(\n {\n e: campaignKey,\n c: variationId\n },\n getPrimaryProperties(configObj, userId)\n );\n properties.eT = 1;\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} goalId, the Goal ID\n * @param {String} revenue, the revenue generated on conversion\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildEventForTrackingGoal(\n configObj,\n campaignKey,\n variationId,\n userId,\n goal = {},\n revenue = null,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n const goalId = goal.id;\n\n let properties = Object.assign(\n {\n experiment_id: campaignKey,\n combination: variationId\n },\n getBaseProperties(configObj, userId)\n );\n\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.TRACK_GOAL;\n\n properties['goal_id'] = goalId;\n if (goal.type === GoalTypeEnum.REVENUE && ValidateUtil.isValidValue(revenue)) {\n properties['r'] = revenue;\n }\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} goalId, the Goal ID\n * @param {String} revenue, the revenue generated on conversion\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildBatchEventForTrackingGoal(\n configObj,\n campaignKey,\n variationId,\n userId,\n goal = {},\n revenue = null,\n eventProperties = {},\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n if (typeof process.env !== 'undefined') {\n let properties = Object.assign(\n {\n e: campaignKey,\n c: variationId\n },\n getPrimaryProperties(configObj, userId)\n );\n properties.eT = 2;\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n\n properties.g = goal.id;\n if (goal.type === GoalTypeEnum.REVENUE && ValidateUtil.isValidValue(revenue)) {\n properties.r = revenue;\n } else if (configObj.isEventArchEnabled && eventProperties.hasOwnProperty(goal.revenueProp)) {\n properties.r = eventProperties[goal.revenueProp];\n }\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n\n /**\n * Return an object containing properties required for segmenting reports\n * @param {Object} configObj\n * @returns reporting properties\n */\n getReportingProperties(configObj) {\n const { sdkKey } = configObj;\n\n return {\n [Constants.SDK_QUERY_PARAM]: Constants.SDK_NAME,\n [Constants.SDK_VERSION_QUERY_PARAM]: Constants.SDK_VERSION,\n env: sdkKey\n };\n },\n\n /**\n * Builds generic properties for different tracking calls required by VWO servers.\n * @param {Object} configObj\n * @param {String} eventName\n * @returns properties\n */\n getEventsBaseProperties(config, eventName, usageStats = {}, visitorUserAgent = '', userIpAddress = '') {\n const { sdkKey } = config;\n\n let properties = Object.assign(\n {\n en: eventName,\n a: config.accountId,\n env: sdkKey,\n eTime: FunctionUtil.getCurrentUnixTimestampInMillis(),\n random: FunctionUtil.getRandomNumber(),\n p: 'FS',\n visitor_ua: visitorUserAgent,\n visitor_ip: userIpAddress\n },\n usageStats\n );\n\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.EVENTS;\n return properties;\n },\n\n /**\n * Builds generic payload required by all the different tracking calls.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} usageStats\n * @returns properties\n */\n getEventBasePayload(configObj, userId, eventName) {\n const uuid = UuidUtil.generateFor(userId, configObj.accountId);\n const { sdkKey } = configObj;\n\n let props = {\n vwo_sdkName: Constants.SDK_NAME,\n vwo_sdkVersion: Constants.SDK_VERSION,\n vwo_envKey: sdkKey\n };\n\n // if (usageStats) {\n // props = Object.assign({}, props, usageStats);\n // }\n\n let properties = {\n d: {\n msgId: `${uuid}-${FunctionUtil.getCurrentUnixTimestampInMillis()}`,\n visId: uuid,\n sessionId: FunctionUtil.getCurrentUnixTimestamp(),\n event: {\n props: props,\n name: eventName,\n time: FunctionUtil.getCurrentUnixTimestampInMillis()\n },\n visitor: {\n props: {\n vwo_fs_environment: sdkKey\n }\n }\n }\n };\n\n return properties;\n },\n\n /**\n * Builds payload to track the visitor.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {String} campaignId\n * @param {Number} variationId\n * @returns track-user payload\n */\n getTrackUserPayloadData(configObj, userId, eventName, campaignId, variationId) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n properties.d.event.props.id = campaignId;\n properties.d.event.props.variation = variationId;\n\n // this is currently required by data-layer team, we can make changes on DACDN and remove it from here\n properties.d.event.props.isFirst = 1;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n accountId: configObj.accountId,\n userId,\n campaignId\n })\n );\n\n return properties;\n },\n\n /**\n * Builds payload to track the Goal.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} metricMap\n * @param {String} revenueValue\n * @returns track-goal payload\n */\n getTrackGoalPayloadData(\n configObj,\n userId,\n eventName,\n metricMap,\n revenueValue,\n revenuePropList,\n eventProperties = {}\n ) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n let metric = {};\n Object.keys(metricMap).forEach(key => {\n metric[`id_${key}`] = [`g_${metricMap[key].goal.id}`];\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n goalName: eventName,\n accountId: configObj.accountId,\n u: userId,\n campaignId: key\n })\n );\n });\n\n properties.d.event.props.vwoMeta = {\n metric: metric\n };\n\n if (revenuePropList && revenueValue && revenuePropList.size > 0) {\n revenuePropList.forEach(revenueProp => {\n properties.d.event.props.vwoMeta[revenueProp] = revenueValue;\n });\n }\n\n properties.d.event.props.isCustomEvent = true;\n\n if (Object.keys(eventProperties).length > 0) {\n for (const prop in eventProperties) {\n properties.d.event.props[prop] = eventProperties[prop];\n }\n }\n\n return properties;\n },\n\n /**\n * Builds payload to appply post segmentation on VWO campaign reports.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} customDimensionMap\n * @returns push payload\n */\n getPushPayloadData(configObj, userId, eventName, customDimensionMap) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n properties.d.event.props.isCustomEvent = true;\n\n Object.keys(customDimensionMap).forEach(function(key) {\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n properties.d.visitor.props[key] = tagValue;\n });\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n accountId: configObj.accountId,\n userId,\n property: JSON.stringify(customDimensionMap)\n })\n );\n\n return properties;\n },\n\n /**\n * Remove the sensitive keys from the properties to te displayed in the log.\n * @param {Object} properties\n * @returns properties without sensitive keys\n */\n _getStringifiedLogProperties(properties) {\n const logProperties = Object.assign({}, properties);\n delete logProperties.env;\n return JSON.stringify(logProperties);\n }\n};\n\nmodule.exports = ImpressionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst EventEnum = {\n VWO_VARIATION_SHOWN: 'vwo_variationShown',\n VWO_SYNC_VISITOR_PROP: 'vwo_syncVisitorProp'\n};\n\nmodule.exports = EventEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VWOFeatureFlags = {\n init(settingsFile) {\n VWOFeatureFlags.isEventArchEnabled = settingsFile.isEventArchEnabled;\n VWOFeatureFlags.isNB = settingsFile.isNB;\n VWOFeatureFlags.isNBv2 = settingsFile.isNBv2;\n },\n\n getAll() {\n return {\n isEventArchEnabled: VWOFeatureFlags.isEventArchEnabled,\n isNB: VWOFeatureFlags.isNB,\n isNBv2: VWOFeatureFlags.isNBv2\n };\n }\n};\n\nmodule.exports = VWOFeatureFlags;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst UrlEnum = {\n BASE_URL: 'dev.visualwebsiteoptimizer.com',\n SETTINGS_URL: '/server-side/settings',\n WEBHOOK_SETTINGS_URL: '/server-side/pull',\n TRACK_USER: '/server-side/track-user',\n TRACK_GOAL: '/server-side/track-goal',\n PUSH: '/server-side/push',\n BATCH_EVENTS: '/server-side/batch-events',\n EVENTS: '/events/t'\n};\n\nmodule.exports = UrlEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Hasher = require('murmurhash');\n\nconst Constants = require('../constants');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst VWOFeatureFlags = require('../utils/VWOFeatureFlags');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.BucketingService;\n\nlet BucketingService = {\n /**\n * Generates Bucket Value of the User by hashing the User ID by murmurHash\n * and scaling it down.\n *\n * @param {Number} hashValue the hashValue generated after hashing\n * @param {Number} maxValue the value up-to which hashValue needs to be scaled\n * @param {Number} multiplier multiplier in case the traffic allocation is less than 100\n *\n * @return {Number} bucket Value of the User\n */\n _generateBucketValue: (hashValue, maxValue, multiplier = 1) => {\n const ratio = hashValue / Math.pow(2, 32);\n const multipliedValue = (maxValue * ratio + 1) * multiplier;\n const value = Math.floor(multipliedValue);\n\n return value;\n },\n\n /**\n * Returns the Variation by checking the Start and End Bucket Allocations of each Variation\n *\n * @param {Object} campaign which contains the variations\n * @param {Number} bucketValue the bucket Value of the user\n *\n * @return {Object|null} variation data allotted to the user or null if not\n */\n _getVariation: (variations, bucketValue) => {\n for (let i = 0; i < Object.keys(variations).length; i++) {\n let variation = variations[i];\n\n if (bucketValue >= variation.startVariationAllocation && bucketValue <= variation.endVariationAllocation) {\n return variation;\n }\n }\n\n return null;\n },\n\n /**\n * Validates the User ID and generates Bucket Value of the User by hashing the userId by murmurHash and scaling it down.\n *\n * @param {String} userId the unique ID assigned to User\n *\n * @return {Number} the bucket Value allotted to User (between 1 to $this->$MAX_TRAFFIC_PERCENT)\n */\n _getBucketValueForUser: (seed, userId, disableLog) => {\n let hashValue = Hasher.v3(seed, Constants.SEED_VALUE);\n let bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_PERCENT);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_HASH_BUCKET_VALUE, {\n file,\n hashValue,\n bucketValue,\n userId\n }),\n disableLog\n );\n\n return bucketValue;\n },\n\n /**\n * Calculate if this user should become part of the campaign or not\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {Object} campaign fot getting the value of traffic allotted to the campaign\n *\n * @return {Boolean} if User is a part of Campaign or not\n */\n isUserPartOfCampaign: (userId, campaign, disableLog = false) => {\n if (!campaign) {\n return false;\n }\n\n let trafficAllocation = campaign.percentTraffic;\n let valueAssignedToUser = BucketingService._getBucketValueForUser(\n CampaignUtil.getBucketingSeed(userId, campaign),\n userId,\n disableLog\n );\n let isUserPart = valueAssignedToUser !== 0 && valueAssignedToUser <= trafficAllocation;\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_CAMPAIGN_ELIGIBILITY, {\n file,\n userId,\n campaignKey: campaign.key,\n status: isUserPart ? 'eligible' : 'not eligible'\n }),\n disableLog\n );\n\n return isUserPart;\n },\n\n /**\n * Validates the User ID and generates Variation into which the User is bucketed in.\n *\n * @param {String} userId the unique ID assigned to User\n * @param {Object} campaign the Campaign of which User is a part of\n *\n * @return {Object|null} variation data into which user is bucketed in or null if not\n */\n bucketUserToVariation: (userId, campaign, accountId) => {\n const isNB = VWOFeatureFlags.getAll().isNB;\n const isNBv2 = VWOFeatureFlags.getAll().isNBv2;\n let multiplier;\n let seed;\n\n if (!ValidateUtil.isValidValue(userId)) {\n return null;\n }\n\n if (!campaign) {\n return null;\n }\n\n if (((!isNB && !isNBv2) || (isNB && campaign.isOB)) && campaign.percentTraffic) {\n // Old bucketing logic if feature flag is OFF or\n // Feature flag is ON and campaign is old i.e. created before feature flag was turned ON\n multiplier = Constants.MAX_TRAFFIC_VALUE / campaign.percentTraffic / 100;\n seed = CampaignUtil.getBucketingSeed(userId, campaign);\n } else if ((isNB && !campaign.isOB && !isNBv2) || (isNBv2 && campaign.isOBv2)) {\n // New bucketing logic if feature flag is ON and campaign is new i.e. created after feature flag was turned ON\n multiplier = 1;\n seed = userId;\n } else {\n // new bucketing V2 Logic\n multiplier = 1;\n seed = CampaignUtil.getBucketingSeed(accountId + '_' + userId, campaign);\n }\n\n const hashValue = BucketingService._generateHashValue(seed);\n const bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_CAMPAIGN_BUCKET_VALUES, {\n file,\n userId,\n campaignKey: campaign.key,\n percentTraffic: campaign.percentTraffic,\n bucketValue,\n hashValue\n })\n );\n\n return BucketingService._getVariation(campaign.variations, bucketValue);\n },\n calculateBucketValue: (seed, multiplier = 1) => {\n const hashValue = BucketingService._generateHashValue(seed);\n return BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier);\n },\n _generateHashValue: userId => {\n return Hasher.v3(userId, Constants.SEED_VALUE);\n }\n};\n\nmodule.exports = BucketingService;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst AnsiColorEnum = require('./AnsiColorEnum');\n\nconst LogNumberLevel = {\n _0: 'NOTSET',\n _1: 'DEBUG',\n _2: 'INFO',\n _3: 'WARN',\n _4: 'ERROR'\n};\n\nconst LogLevelEnum = {\n NOTSET: 0,\n DEBUG: 1,\n INFO: 2,\n WARN: 3,\n ERROR: 4\n};\n\nconst LogLevelColorInfoEnum = {\n [LogLevelEnum.NOTSET]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.WHITE}[NOTSET]:${AnsiColorEnum.RESET}`,\n [LogLevelEnum.DEBUG]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.LIGHTBLUE}[DEBUG]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.INFO]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.CYAN}[INFO]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.WARN]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.YELLOW}[WARN]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.ERROR]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.RED}[ERROR]: ${AnsiColorEnum.RESET}`\n};\n\nconst LogLevelInfoEnum = {\n [LogLevelEnum.NOTSET]: `[NOTSET]:`,\n [LogLevelEnum.DEBUG]: `[DEBUG]: `,\n [LogLevelEnum.INFO]: `[INFO]: `,\n [LogLevelEnum.WARN]: `[WARN]: `,\n [LogLevelEnum.ERROR]: `[ERROR]: `\n};\n\nmodule.exports = {\n LogLevelEnum,\n LogNumberLevel,\n LogLevelInfoEnum,\n LogLevelColorInfoEnum\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignTypeEnum = {\n FEATURE_TEST: 'FEATURE_TEST',\n FEATURE_ROLLOUT: 'FEATURE_ROLLOUT',\n AB: 'VISUAL_AB'\n};\n\nmodule.exports = CampaignTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst SegmentOperandTypes = require('./SegmentOperandTypesEnum');\nconst SegmentOperatorTypes = require('./SegmentOperatorTypesEnum');\nconst SegmentOperandValueTypeRegexes = require('./SegmentOperandValueTypeRegexesEnum');\nconst SegmentOperandValues = require('./SegmentOperandValuesEnum');\n\nconst SegmentEnum = {\n SegmentOperandTypes,\n SegmentOperatorTypes,\n SegmentOperandValueTypeRegexes,\n SegmentOperandValues\n};\n\nmodule.exports = SegmentEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\n/**\n * Hooks Manager is responsible for triggering callbacks useful to the end-user based on certain lifecycle events.\n * Possible use with integrations when the user intends to send an event when a visitor is part of the experiment.\n */\nconst HooksManager = {\n /**\n * Initializes with configuration from VWO Object.\n * @param {Object} config\n */\n init(config = {}) {\n this.callback = config.integrations && config.integrations.callback;\n },\n /**\n * Executes the callback\n * @param {Object} properties Properties from the callback\n */\n execute(properties) {\n if (DataTypeUtil.isFunction(this.callback)) {\n this.callback(properties);\n }\n }\n};\n\nmodule.exports = HooksManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst uuidv5 = require('uuid/v5');\nconst Constants = require('../constants');\n\nconst VWO_NAMESPACE = uuidv5(Constants.SEED_URL, uuidv5.URL);\n\nconst UuidUtil = {\n generateFor: (userId, accountId) => {\n userId = `${userId}`; // type-cast\n const hash = `${accountId}`;\n const userIdNamespace = UuidUtil.generate(hash, VWO_NAMESPACE);\n const uuidForUserIdAccountId = UuidUtil.generate(userId, userIdNamespace);\n\n let desiredUuid = uuidForUserIdAccountId.replace(/-/gi, '').toUpperCase();\n\n return desiredUuid;\n },\n generate: (name, namespace) => {\n if (!name || !namespace) {\n return;\n }\n\n return uuidv5(name, namespace);\n }\n};\n\nmodule.exports = UuidUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst UrlEnum = require('../enums/UrlEnum');\nconst { isString } = require('../utils/DataTypeUtil');\n\nconst UrlService = {\n init({ collectionPrefix } = {}) {\n if (collectionPrefix && isString(collectionPrefix)) {\n UrlService.collectionPrefix = collectionPrefix;\n }\n\n return UrlService;\n },\n\n getBaseUrl() {\n const baseUrl = UrlEnum.BASE_URL;\n\n if (UrlService.collectionPrefix) {\n return `${baseUrl}/${UrlService.collectionPrefix}`;\n }\n\n return baseUrl;\n }\n};\n\nmodule.exports = UrlService;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { getCurrentTime } = require('./FunctionUtil');\nconst { isObject, isFunction } = require('./DataTypeUtil');\n\nconst FetchUtil = {\n _getStoredSettings: function(userStorageService) {\n let isStoredData = false;\n let parsedSettings;\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) {\n try {\n const settings = userStorageService.getSettings();\n parsedSettings = JSON.parse(settings);\n\n if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) {\n const info = `VWO-SDK - [INFO]: ${getCurrentTime()} VWO settings found in Storage Service.`;\n\n console.info(info);\n\n isStoredData = true;\n } else if (parsedSettings) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid.`;\n\n console.error(error);\n } else {\n const warning = `VWO-SDK - [WARNING]: ${getCurrentTime()} VWO settings is empty in Storage Service.`;\n\n console.warn(warning);\n }\n } catch (err) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid. ${err}`;\n\n console.error(error);\n isStoredData = false;\n }\n }\n\n return {\n isStoredData,\n parsedSettings\n };\n },\n\n send: function({ method, url, payload, userStorageService, customHeaders = {} } = {}) {\n if (!url || !method) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const { isStoredData, parsedSettings } = FetchUtil._getStoredSettings(userStorageService);\n\n if (isStoredData) {\n resolve(parsedSettings);\n } else {\n const options = {\n method,\n headers: customHeaders\n };\n\n if (method === 'POST') {\n options.body = JSON.stringify(payload);\n }\n\n return fetch(url, options)\n .then(res => {\n // Some endpoints return empty strings as the response body; treat\n // as raw text and handle potential JSON parsing errors below\n return res.text().then(text => {\n let jsonData = {};\n try {\n jsonData = JSON.parse(text);\n } catch (err) {\n console.info(\n `VWO-SDK - [INFO]: ${getCurrentTime()} VWO didn't send JSON response which is expected: ${err}`\n );\n }\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) {\n userStorageService.setSettings(jsonData);\n }\n\n if (res.status === 200) {\n resolve(jsonData);\n } else {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${\n res.status\n }`;\n\n console.error(error);\n reject(error);\n }\n });\n })\n .catch(err => {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${err}`;\n\n console.error(error);\n reject(error);\n });\n }\n });\n }\n};\n\nmodule.exports = FetchUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('../services/logging');\nconst { LogLevelEnum } = logging;\nconst { getCurrentTime } = require('./FunctionUtil');\nconst { isObject, isFunction } = require('./DataTypeUtil');\n\nconst XhrUtil = {\n _getStoredSettings: function(userStorageService) {\n let isStoredData = false;\n let parsedSettings;\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) {\n try {\n const settings = userStorageService.getSettings();\n parsedSettings = JSON.parse(settings);\n\n if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) {\n const info = `VWO-SDK - [INFO]: ${getCurrentTime()} VWO settings found in Storage Service.`;\n\n console.info(info);\n\n isStoredData = true;\n } else if (parsedSettings) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid.`;\n\n console.error(error);\n } else {\n const warning = `VWO-SDK - [WARNING]: ${getCurrentTime()} VWO settings is empty in Storage Service.`;\n\n console.warn(warning);\n }\n } catch (err) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid. ${err}`;\n\n console.error(error);\n isStoredData = false;\n }\n }\n\n return {\n isStoredData,\n parsedSettings\n };\n },\n send: function({ method, url, payload, userStorageService, customHeaders, logger } = {}) {\n if (!url || !method) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const { isStoredData, parsedSettings } = XhrUtil._getStoredSettings(userStorageService);\n\n if (isStoredData) {\n resolve(parsedSettings);\n } else {\n let xhr = new XMLHttpRequest();\n this.xhrHandler(xhr, method, url, payload, userStorageService, customHeaders, logger, resolve, reject);\n }\n });\n },\n\n // send request function definition (to allow for retries)\n sendRequest: function(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject) {\n let delay = 1000 * (retries + 1);\n let xhr = new XMLHttpRequest();\n\n // Configure timeout\n xhr.timeout = 5000; // Set timeout to 5 seconds (5000 ms)\n\n // onload event\n xhr.onload = () => {\n // retry if error and less than max retries\n if (xhr.status < 200 || xhr.status >= 300) {\n if (retries < maxRetries) {\n retries++;\n\n // log retried times\n logger.log(\n LogLevelEnum.ERROR,\n `Retrying with Status Code : ${xhr.status}, and Response : ${xhr.responseText}`\n );\n\n // call send request again, after delay\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n // log errors with status (clean up later)\n logger.log(\n LogLevelEnum.ERROR,\n `Request failed with Status Code : ${xhr.status} and Response : ${xhr.responseText}`\n );\n reject(`Got Error: ${xhr.statusText} and Status Code: ${xhr.status}`);\n }\n } else {\n // resolve the promise if all well\n resolve(xhr.responseText);\n }\n };\n\n // onerror event\n xhr.onerror = () => {\n if (retries < maxRetries) {\n retries++;\n logger.log(LogLevelEnum.ERROR, 'Retrying due to network error');\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n reject(`Network error: ${xhr.statusText}, Status Code: ${xhr.status}`);\n }\n };\n\n // ontimeout event\n xhr.ontimeout = () => {\n if (retries < maxRetries) {\n retries++;\n logger.log(LogLevelEnum.ERROR, 'Retrying due to timeout');\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n reject(`Timeout error: ${xhr.statusText}, Status Code: ${xhr.status}`);\n }\n };\n\n // open connection and add headers if any, and then send\n xhr.open(method, url, true);\n for (var newHeaderName in customHeaders) {\n if (customHeaders.hasOwnProperty(newHeaderName)) {\n xhr.setRequestHeader(newHeaderName, customHeaders[newHeaderName]);\n }\n }\n xhr.send(JSON.stringify(payload));\n },\n\n xhrHandler: function(xhr, method, url, payload, userStorageService, customHeaders = {}, logger, resolve, reject) {\n if (method === 'GET') {\n try {\n xhr.onload = () => {\n this.xhrOnLoad(xhr, userStorageService, resolve);\n };\n xhr.onerror = () => {\n this.xhrOnError(xhr, reject);\n };\n\n xhr.open(method, url);\n for (var headerName in customHeaders) {\n if (customHeaders.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, customHeaders[headerName]);\n }\n }\n xhr.send();\n } catch (e) {\n console.log(e.message);\n }\n } else if (method === 'POST') {\n // retry params\n let retries = 0;\n let maxRetries = 5;\n\n // send request\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }\n },\n\n xhrOnLoad: function(xhr, userStorageService, resolve) {\n try {\n let parsedXhrResponse = JSON.parse(xhr.response);\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) {\n userStorageService.setSettings(xhr.response);\n }\n\n resolve(parsedXhrResponse);\n } catch (err) {\n console.error(err);\n }\n },\n\n xhrOnError: function(xhr, reject) {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${\n xhr.status\n }`;\n\n console.error(error);\n reject(error);\n }\n};\n\nmodule.exports = XhrUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst UrlEnum = require('../enums/UrlEnum');\nconst { getRandomNumber, getCurrentTime } = require('./FunctionUtil');\n\nlet SettingsFileUtil = {\n get: (accountId, sdkKey, userStorageService, config = {}) => {\n if (!accountId || !sdkKey) {\n console.error('AccountId and sdkKey are required for fetching account settings. Aborting!');\n return;\n }\n\n let protocol = 'https';\n let port;\n let hostname = UrlEnum.BASE_URL;\n let path = UrlEnum.SETTINGS_URL;\n\n if (config.isViaWebhook) {\n path = UrlEnum.WEBHOOK_SETTINGS_URL;\n }\n\n path +=\n `?a=${accountId}&` +\n `i=${sdkKey}&` +\n `r=${getRandomNumber()}&` +\n `platform=${Constants.PLATFORM}&` +\n `${Constants.SDK_QUERY_PARAM}=${Constants.SDK_NAME}&` +\n `${Constants.SDK_VERSION_QUERY_PARAM}=${Constants.SDK_VERSION}`;\n\n if (config.hostname && config.path) {\n protocol = config.protocol;\n port = config.port;\n hostname = config.hostname || hostname;\n path = config.path || path;\n }\n\n if (typeof process.env === 'undefined') {\n if (typeof XMLHttpRequest === 'undefined') {\n return require('./FetchUtil').send({\n method: 'GET',\n url: `${protocol}://${hostname}${path}`,\n userStorageService\n });\n }\n return require('./XhrUtil').send({\n method: 'GET',\n url: `${protocol}://${hostname}${path}`,\n userStorageService\n });\n } else {\n const http = require('http');\n const https = require('https');\n\n return new Promise((resolve, reject) => {\n const options = {\n hostname,\n path,\n agent: false\n };\n\n if (port) {\n options.port = port;\n }\n\n (protocol === 'https' ? https : http).get(options, res => {\n SettingsFileUtil.handleHttpRequest(res, resolve, reject);\n });\n });\n }\n },\n\n handleHttpRequest: (res, resolve, reject) => {\n const { statusCode } = res;\n const contentType = res.headers['content-type'];\n\n let error;\n let rawData = '';\n\n if (!/^application\\/json/.test(contentType)) {\n error = `Invalid content-type.\\nExpected application/json but received ${contentType}`;\n }\n\n if (error) {\n console.error(error.message);\n // Consume response data to free up memory\n res.resume();\n reject(error);\n\n return;\n }\n\n res.setEncoding('utf8');\n\n res.on('data', chunk => {\n rawData += chunk;\n });\n\n res.on('end', () => {\n SettingsFileUtil.handleHttpResponse(statusCode, rawData, resolve, reject);\n });\n },\n\n handleHttpResponse: (statusCode, rawData, resolve, reject) => {\n try {\n const parsedData = JSON.parse(rawData);\n\n if (statusCode !== 200) {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${statusCode} and message: ${rawData}`;\n console.error(error);\n reject(error);\n\n return;\n }\n resolve(parsedData);\n } catch (err) {\n console.error(\n `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings - ${err.message}`\n );\n reject(err);\n }\n }\n};\n\nmodule.exports = SettingsFileUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VWO = require('./VWO');\n\nconst DataTypeUtil = require('./utils/DataTypeUtil');\nconst FunctionUtil = require('./utils/FunctionUtil');\nconst { objectValues } = require('./utils/ObjectUtil');\nconst SettingsFileUtil = require('./utils/SettingsFileUtil');\nconst GoalTypeEnum = require('./enums/GoalTypeEnum');\nconst { MAX_EVENTS_PER_REQUEST } = require('./constants');\n\nconst logging = require('./services/logging');\nconst ApiEnum = require('./enums/ApiEnum');\nconst FileNameEnum = require('./enums/FileNameEnum');\nconst file = FileNameEnum.INDEX;\nconst { setLogHandler, setLogLevel, LogLevelEnum, LogNumberLevel, LogMessageEnum, LogMessageUtil } = logging;\n\nconst logger = logging.getLogger();\n\n// By default, all ERRORS should be logged\nlogging.setLogLevel(LogLevelEnum.ERROR);\n\nfunction logError(parameter = '', type = '') {\n const log = LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CONFIG_PARAMETER_INVALID, {\n file: file,\n parameter,\n type,\n api: ApiEnum.LAUNCH\n });\n\n throw new Error(logger.log(LogLevelEnum.ERROR, log));\n}\n\nfunction logInfo(parameter = '', type = '') {\n const log = LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_PARAMETER_USED, {\n file: file,\n parameter,\n type\n });\n\n console.info(`VWO-SDK - [INFO]: ${FunctionUtil.getCurrentTime()} ${log}`);\n}\n\nmodule.exports = {\n logging,\n setLogger: setLogHandler,\n setLogLevel,\n getSettingsFile: SettingsFileUtil.get,\n GoalTypeEnum,\n LogLevelEnum,\n /**\n * Initializes the SDK and parses the settingsfile\n *\n * @param {Object} config configuration for the SDK\n */\n launch: function(sdkConfig) {\n let config = {};\n try {\n // validating config schema\n FunctionUtil.cloneObject(sdkConfig);\n if (\n !DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser) &&\n !DataTypeUtil.isBoolean(sdkConfig.shouldTrackReturningUser)\n ) {\n logError('shouldTrackReturningUser', 'boolean');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser)) {\n logInfo('shouldTrackReturningUser', 'boolean');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode) &&\n !DataTypeUtil.isBoolean(sdkConfig.isDevelopmentMode)\n ) {\n logError('isDevelopmentMode', 'boolean');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode)) {\n logInfo('isDevelopmentMode', 'boolean');\n }\n\n if (sdkConfig.goalTypeToTrack && !objectValues(GoalTypeEnum).includes(sdkConfig.goalTypeToTrack)) {\n logError('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)');\n } else if (sdkConfig.goalTypeToTrack) {\n logInfo('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)');\n }\n\n if (\n sdkConfig.logging &&\n sdkConfig.logging.level &&\n !objectValues(LogLevelEnum).includes(sdkConfig.logging.level)\n ) {\n logError('logLevel', 'number(1,2,3,4)');\n } else if (sdkConfig.logging && sdkConfig.logging.level) {\n logInfo('logLevel', 'number(1,2,3,4)');\n }\n\n if (sdkConfig.pollingInterval && !DataTypeUtil.isNumber(sdkConfig.pollingInterval)) {\n logError('pollingInterval', 'number(in miliiseconds)');\n } else if (sdkConfig.pollingInterval) {\n logInfo('pollingInterval', 'number(in miliiseconds)');\n }\n\n if (sdkConfig.pollingInterval && DataTypeUtil.isUndefined(sdkConfig.sdkKey)) {\n logError('sdkKey(required for polling)', 'string');\n }\n\n if (sdkConfig.pollingInterval && !DataTypeUtil.isString(sdkConfig.sdkKey)) {\n logError('sdkKey', 'string');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents) && !DataTypeUtil.isObject(sdkConfig.batchEvents)) {\n logError('batchEvents', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents)) {\n logInfo('batchEvents', 'object');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor) && !DataTypeUtil.isObject(sdkConfig.returnPromiseFor)) {\n logError('returnPromiseFor', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor)) {\n logInfo('returnPromiseFor', 'object');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig) &&\n !DataTypeUtil.isObject(sdkConfig.asyncStorageConfig)\n ) {\n logError('asyncStorageConfig', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig)) {\n logInfo('asyncStorageConfig', 'object');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.integrations) && !DataTypeUtil.isObject(sdkConfig.integrations)) {\n logError('integrations', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.integrations)) {\n logInfo('integrations', 'object');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.userStorageService) &&\n !DataTypeUtil.isObject(sdkConfig.userStorageService)\n ) {\n logError('userStorageService', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.userStorageService)) {\n logInfo('userStorageService', 'object');\n }\n\n // For JavaScript SDK, batching is not required and is not available\n if (DataTypeUtil.isObject(sdkConfig.batchEvents) && typeof process.env === 'undefined') {\n sdkConfig.batchEvents = null;\n }\n\n // For Node.js SDK\n if (typeof process.env !== 'undefined') {\n if (\n DataTypeUtil.isObject(sdkConfig.batchEvents) &&\n (!(\n (DataTypeUtil.isNumber(sdkConfig.batchEvents.eventsPerRequest) &&\n sdkConfig.batchEvents.eventsPerRequest > 0 &&\n sdkConfig.batchEvents.eventsPerRequest <= MAX_EVENTS_PER_REQUEST) ||\n (DataTypeUtil.isNumber(sdkConfig.batchEvents.requestTimeInterval) &&\n sdkConfig.batchEvents.requestTimeInterval >= 1)\n ) ||\n (sdkConfig.batchEvents.flushCallback && !DataTypeUtil.isFunction(sdkConfig.batchEvents.flushCallback)))\n ) {\n logError('batchEvents', 'object');\n }\n }\n\n config = sdkConfig;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CONFIG_CORRUPTED, {\n file: file,\n api: ApiEnum.LAUNCH\n })\n );\n\n config = {};\n }\n\n // If DEV mode, set colorful logs to true\n if (config.isDevelopmentMode) {\n logging.setLogColorMode(true);\n }\n\n // If logging is enabled, use the logger and logLevel defined by the client\n if (config.logging && DataTypeUtil.isObject(config.logging)) {\n if (config.logging.haveColoredLogs !== undefined) {\n logging.setLogColorMode(config.logging.haveColoredLogs);\n }\n\n if (\n config.logging.logger &&\n DataTypeUtil.isObject(config.logging.logger) &&\n DataTypeUtil.isFunction(config.logging.logger.log)\n ) {\n logging.setLogHandler(config.logging.logger);\n logging.setLogLevel(logging.LogLevelEnum.NOTSET);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_CUSTOM_LOGGER_USED, {\n file: file\n })\n );\n } else if (config.logging.logger) {\n logError('logging.logger', 'object');\n }\n\n if (config.logging.level !== undefined) {\n logging.setLogLevel(config.logging.level);\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_LOG_LEVEL_SET, {\n file: file,\n level: LogNumberLevel['_' + config.logging.level]\n })\n );\n }\n }\n\n // DEBUG log for knowing whether it's DEV mode\n if (config.isDevelopmentMode) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, {\n file: file\n })\n );\n }\n\n // Set logger on config Obkect, to be required later\n config.logger = (config.logging && config.logging.logger) || logger;\n\n // Create an instance of VWO class which exposes API methods\n return new VWO(config);\n }\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst api = require('./api');\n\nconst FileNameEnum = require('./enums/FileNameEnum');\nconst ApiEnum = require('./enums/ApiEnum');\n\nconst DataTypeUtil = require('./utils/DataTypeUtil');\nconst FunctionUtil = require('./utils/FunctionUtil');\nconst VWOFeatureFlags = require('./utils/VWOFeatureFlags');\n\nconst EventQueue = require('./services/EventQueue');\nconst SettingsFileService = require('./services/SettingsFileManager');\nconst logging = require('./services/logging');\nconst HooksManager = require('./services/HooksManager');\nconst UrlService = require('./services/UrlService');\nconst UsageStats = require('./services/UsageStats');\n\nlet BatchEventsDispatcher;\nlet customEventUtil;\nlet BatchEventsQueue;\n\nif (typeof process.env !== 'undefined') {\n BatchEventsQueue = require('./services/BatchEventsQueue');\n BatchEventsDispatcher = require('./utils/BatchEventsDispatcher').dispatch;\n customEventUtil = require('./utils/CustomEventUtil');\n}\n\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst file = FileNameEnum.VWO;\n\nclass VWO {\n // Setting various services on the instance to be accessible by its member functions\n constructor(config = {}) {\n this.getVariation = this.getVariationName; // to be backward compatible\n this.userStorageService = config.userStorageService;\n this.logger = config.logger;\n this.returnPromiseFor = config.returnPromiseFor;\n this.asyncStorageConfig = config.asyncStorageConfig;\n this.optOut = false;\n\n if (this.userStorageService === undefined && config.asyncStorageConfig) {\n // replace the userStorageService with the redisObject passed in asyncStorageConfig\n this.userStorageService = config.asyncStorageConfig.redisStorage;\n config.userStorageService = this.userStorageService;\n }\n let settingsFileManager = new SettingsFileService(config);\n\n // Validate the config file i.e. check if required fields contain appropriate data\n if (!settingsFileManager.isSettingsFileValid()) {\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_INVALID, {\n file\n })\n );\n\n return;\n }\n\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_VALID, {\n file\n })\n );\n\n // Initialize Hooks manager so that callbacks can be invoked\n HooksManager.init(config);\n\n // Setup event quque for sending impressions to VWO server\n this.eventQueue = new EventQueue();\n this.usageStats = new UsageStats();\n\n this.SettingsFileManager = settingsFileManager;\n settingsFileManager.checkAndPoll(); // Checks if pollingInterval is passed then starts polling settingsFile\n\n if (!config.isDevelopmentMode) {\n this.usageStats.collectUsageStats(settingsFileManager.getConfig());\n }\n\n // Only for Node.js SDK\n if (typeof process.env !== 'undefined') {\n if (config.batchEvents) {\n const accountId = settingsFileManager.getSettingsFile().accountId;\n const sdkKey = settingsFileManager.getSettingsFile().sdkKey;\n\n this.batchEventsQueue = new BatchEventsQueue(\n Object.assign(\n {},\n config.batchEvents,\n { isDevelopmentMode: config.isDevelopmentMode },\n {\n accountId,\n dispatcher: (events, callback) =>\n BatchEventsDispatcher(\n {\n ev: events\n },\n callback,\n Object.assign(\n {},\n {\n a: accountId\n },\n this.usageStats.getUsageStats()\n ),\n sdkKey\n )\n }\n )\n );\n\n this.batchEventsQueue.flushAndClearTimer.bind(this.batchEventsQueue);\n }\n }\n\n // Process settingsFile for various things. For eg: assign bucket range to variation, etc.\n this.SettingsFileManager.processSettingsFile();\n\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SDK_INITIALIZED, {\n file\n })\n );\n\n this.UrlService = UrlService.init(config.settingsFile);\n this.VWOFeatureFlags = VWOFeatureFlags.init(config.settingsFile);\n }\n\n // PUBLIC METHODS\n\n /**\n * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server\n *\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\n activate(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.ACTIVATE\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n resolve(null);\n } else {\n return api.activate(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.variationName);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.activate || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.ACTIVATE\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n resolve(null);\n } else {\n let variationName;\n options.responseCallback = (_error, _response) => {\n resolve(variationName);\n };\n variationName = api.activate(self, campaignKey, userId, options);\n\n // If we get null from the API i.e. no tracking call was sent\n // In this case, responseCallback will not be fired and hence we have to manually resolve the promise\n if (!variationName) {\n resolve(variationName);\n } else if (DataTypeUtil.isObject(variationName)) {\n resolve(variationName.variationName);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n return null;\n }\n\n const apiResponse = api.activate(self, campaignKey, userId, options);\n\n if (DataTypeUtil.isObject(apiResponse)) {\n return apiResponse.variationName;\n }\n\n return apiResponse;\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Gets the variation assigned for the user for the campaign\n *\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\n getVariationName(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_VARIATION_NAME\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n resolve(null);\n } else {\n return api.getVariation(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.variationName);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n if (self.returnPromiseFor && (self.returnPromiseFor.getVariationName || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_VARIATION_NAME\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n resolve(null);\n } else {\n // since this API does not send any async call, we can simply resolve the returned value\n resolve(api.getVariation(self, campaignKey, userId, options));\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n return null;\n }\n\n return api.getVariation(self, campaignKey, userId, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Marks the conversion of the campaign for a particular goal\n *\n * @param {String/Array/null/undefined} campaignSpecifier campaign keys to track unique campaignSpecifier\n * @param {String} userId ID assigned to a user\n * @param {String} goalIdentifier unique campaign's goal identifier\n * @param {Object} options optional params - customVariables, variationTargetingVariables, revenueValue\n */\n track(campaignSpecifier, userId, goalIdentifier, options = {}) {\n try {\n let self = this;\n\n // In case we use any asyncStorage like redis, promisify track\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.TRACK\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n resolve(null);\n } else {\n return api.track(self, campaignSpecifier, userId, goalIdentifier, options).then(function(trackResponse) {\n resolve(trackResponse);\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.track || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.TRACK\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n resolve(null);\n } else {\n let trackResponse;\n let counter = 0;\n options.responseCallback = (_error, _response) => {\n counter += 1;\n // For Data360, one single call is there to track multiple metrices\n // For global goals, we are now sending one single batch-events call\n if (\n self.isEventArchEnabled ||\n (DataTypeUtil.isArray(campaignSpecifier) ||\n ((DataTypeUtil.isUndefined(campaignSpecifier) || DataTypeUtil.isNull(campaignSpecifier)) &&\n FunctionUtil.objectValues(trackResponse).filter(Boolean).length))\n ) {\n resolve(trackResponse);\n } else if (counter === FunctionUtil.objectValues(trackResponse).filter(Boolean).length) {\n // In case of global goals, when all campaigns are tracked, then only resolve\n // TODO: verify if this can be removed as we are sending batch events call always for non-Data360 accounts\n resolve(trackResponse);\n }\n };\n trackResponse = api.track(self, campaignSpecifier, userId, goalIdentifier, options);\n // If we get null/false from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n // Or, in case of global goals, if none campaign got success, manually resolve\n if (!trackResponse || !FunctionUtil.objectValues(trackResponse).some(Boolean)) {\n resolve(trackResponse);\n } else if (trackResponse && trackResponse.isDevelopmentMode) {\n delete trackResponse.isDevelopmentMode;\n resolve(trackResponse);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n return null;\n }\n\n return api.track(self, campaignSpecifier, userId, goalIdentifier, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method checks: Whether a feature is enabled or not for the given user\n *\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} userId Unique identifier for the user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {Boolean} true if feature enabled, false otherwise\n */\n isFeatureEnabled(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n resolve(null);\n } else {\n return api.isFeatureEnabled(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.isFeatureEnabled);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.isFeatureEnabled || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n resolve(false);\n } else {\n let isFeatureEnabledApiResponse;\n options.responseCallback = (_error, _response) => {\n resolve(!!isFeatureEnabledApiResponse);\n };\n isFeatureEnabledApiResponse = api.isFeatureEnabled(self, campaignKey, userId, options);\n // If we get null from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n if (DataTypeUtil.isNull(isFeatureEnabledApiResponse)) {\n resolve(false);\n } else if (DataTypeUtil.isObject(isFeatureEnabledApiResponse)) {\n resolve(!!isFeatureEnabledApiResponse.isFeatureEnabled);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n return false;\n }\n\n const apiResponse = api.isFeatureEnabled(self, campaignKey, userId, options);\n\n if (DataTypeUtil.isObject(apiResponse)) {\n return !!apiResponse.isFeatureEnabled;\n }\n\n return !!apiResponse;\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return false;\n }\n }\n\n /**\n * This API method: Return the variable for that variation(if Feature Test),\n * otherwise the default values being set in Feature\n *\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} variableKey Unique key for a feature's variable\n * @param {String} userId Unique identifier for the user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {string|number|double|boolean|null} Variable value as is set in the VWO app i.e.\n * maintaining the data-type,\n * null if anything fails like campaign / variable not found\n */\n getFeatureVariableValue(campaignKey, variableKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n resolve(null);\n } else {\n return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.typeCastedValue);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n if (self.returnPromiseFor && (self.returnPromiseFor.getFeatureVariableValue || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n resolve(null);\n } else {\n // since this API does not send any async call, we can simply resolve the returned value\n resolve(api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options));\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n return null;\n }\n\n return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Pushes the key-value tag pair for a particular user\n *\n * @param {String} tagKey tag key\n * @param {String} tagValue tag Value\n * @param {String} userId ID assigned to a user\n *\n * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable\n */\n push(tagKey, tagValue, userId) {\n try {\n let self = this;\n let customDimensionMap;\n\n if (arguments.length === 2) {\n // Argument reshuffling.\n customDimensionMap = tagKey;\n userId = tagValue;\n\n tagKey = ' ';\n tagValue = ' ';\n } else if (arguments.length === 3) {\n customDimensionMap = {};\n } else {\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.PUSH\n })\n );\n return false;\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.push || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.PUSH\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.PUSH\n })\n );\n resolve(null);\n } else {\n let apiResponse;\n let counter = 0;\n\n const options = {\n responseCallback: (_error, _response) => {\n counter += 1;\n // In case of multiple custom dimensions, when all are tracked, then only resolve\n // if customDimensionMap is used\n if (\n customDimensionMap &&\n DataTypeUtil.isObject(customDimensionMap) &&\n FunctionUtil.objectValues(customDimensionMap).filter(Boolean).length > 1\n ) {\n resolve(apiResponse);\n }\n // else if custom dimensions are sent with tag key and value instead of a map\n else if (counter === FunctionUtil.objectValues(apiResponse).filter(Boolean).length) {\n resolve(apiResponse);\n }\n }\n };\n apiResponse = api.push(self, tagKey, tagValue, userId, customDimensionMap, options);\n // If we get false from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n if (!apiResponse) {\n resolve(false);\n } else if (apiResponse && apiResponse.isDevelopmentMode) {\n delete apiResponse.isDevelopmentMode;\n resolve(apiResponse);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.PUSH\n })\n );\n return null;\n }\n\n return api.push(self, tagKey, tagValue, userId, customDimensionMap);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return false;\n }\n }\n\n setOptOut() {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OPT_OUT_API_CALLED, {\n file\n })\n );\n\n if (this.returnPromiseFor && (this.returnPromiseFor.optOut || this.returnPromiseFor.all)) {\n return new Promise(resolve => {\n this._destroyInstanceVariables();\n if (this.batchEventsQueue) {\n this.flushEvents().then(() => {\n this.batchEventsQueue = undefined;\n resolve(true);\n });\n } else {\n resolve(true);\n }\n });\n }\n\n if (this.batchEventsQueue) {\n this.flushEvents().then(() => {\n this.batchEventsQueue = undefined;\n });\n }\n\n this._destroyInstanceVariables();\n\n return true;\n }\n /**\n * Manually flush impression events to VWO which are queued in batch queue as per batchEvents config\n */\n flushEvents() {\n const accountId = this.SettingsFileManager.getSettingsFile().accountId;\n\n if (typeof process.env !== 'undefined') {\n this.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.EVENT_BATCH_FLUSH, {\n file,\n accountId\n })\n );\n\n return new Promise((resolve, _reject) => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: 'flushEvents'\n })\n );\n resolve({\n status: false,\n message: 'opted out'\n });\n } else {\n if (this.batchEventsQueue) {\n customEventUtil.getInstance().once('batchCallCompleteion', (status, message) => {\n if (status) {\n resolve({\n status: true,\n message: message || 'Batch call sent to VWO'\n });\n } else {\n resolve({\n status: false,\n message: message || 'Batch call could not be processed'\n });\n }\n });\n\n this.batchEventsQueue.flushAndClearTimer();\n\n return;\n }\n\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.NO_BATCH_QUEUE, {\n file,\n accountId\n })\n );\n\n resolve({\n status: false,\n message: 'No batchEvents config present in launch API'\n });\n }\n });\n }\n }\n\n /**\n * Fetch latest settings-file and update so that vwoClientInstance could use latest settings\n * Helpful especially when using webhooks\n *\n * @param {Number} accountId\n * @param {String} sdkKey\n *\n * @return {Promise}\n */\n getAndUpdateSettingsFile(accountId, sdkKey) {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: 'getAndUpdateSettingsFile'\n })\n );\n return new Promise(resolve => {\n resolve(null);\n });\n }\n return this.SettingsFileManager.getAndUpdateSettingsFile(accountId, sdkKey);\n }\n\n _destroyInstanceVariables() {\n this.userStorageService = undefined;\n this.SettingsFileManager = undefined;\n this.usageStats = undefined;\n this.eventQueue = undefined;\n this.optOut = true;\n }\n}\n\nmodule.exports = VWO;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst activate = require('./activate');\nconst getVariation = require('./getVariation');\nconst track = require('./track');\nconst isFeatureEnabled = require('./isFeatureEnabled');\nconst getFeatureVariableValue = require('./getFeatureVariableValue');\nconst push = require('./push');\n\nmodule.exports = {\n activate,\n getVariation,\n track,\n isFeatureEnabled,\n getFeatureVariableValue,\n push\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Activate;\n\n/**\n * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Assigns the determinitic variation to the user(based on userId), if user becomes part of campaign\n * If userStorageService is used, it will look into it for the variation and if found, no further processing is done\n * 4. Sends an impression call to VWO server to track user\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options Optional params\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\nfunction activate(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.ACTIVATE;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n userAgent,\n userIpAddress\n } = options;\n\n var visitorUserAgent = userAgent;\n\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.ACTIVATE,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n visitorUserAgent,\n userIpAddress\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false;\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (!CampaignUtil.isAbCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n // Once the matching RUNNING campaign is found, assign the deterministic variation to the userId provided\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n true,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n data\n );\n });\n }\n\n return _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n result\n );\n}\n\nfunction _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n result\n) {\n var { variationId, variationName, isStoredVariation } = result;\n\n // Check if variation-name has been assigned to the userId. If not, return no variation\n if (!ValidateUtil.isValidValue(variationName)) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.DECISION_NO_VARIATION_ALLOTED, {\n file,\n userId,\n campaignKey\n })\n );\n\n return null;\n }\n\n // check if variation found from storage. return it without sending a call to VWO server\n if (isStoredVariation && !shouldTrackReturningUser) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, {\n file,\n userId,\n campaignKey,\n api\n })\n );\n return { variationName };\n }\n\n // Variation found...let VWO server knows about it to show report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n EventEnum.VWO_VARIATION_SHOWN,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackUserPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_VARIATION_SHOWN,\n campaign.id,\n variationId\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n } else {\n let properties = ImpressionUtil.buildEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n }\n\n if (config.isDevelopmentMode) {\n return { variationName };\n }\n\n return variationName;\n}\nmodule.exports = activate;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ValidateUtil = require('../utils/ValidateUtil');\n\nconst Bucketer = require('./BucketingService');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.VariationDecider;\n\nconst VariationDecider = {\n /**\n * Returns the Variation Allotted to User\n *\n * @param {String} userId the unique ID assigned to User\n * @param {Object} campaign\n *\n * @return {Object} Variation object allotted to User\n */\n getVariationAllotted: (userId, campaign, accountId) => {\n let response = {\n variation: null,\n variationId: null,\n variationName: null\n };\n\n if (!ValidateUtil.isValidValue(userId)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_ID_INVALID, {\n file,\n userId\n })\n );\n\n return response;\n }\n\n if (Bucketer.isUserPartOfCampaign(userId, campaign)) {\n let variation = VariationDecider.getVariationOfCampaignForUser(userId, campaign, accountId) || {};\n response.variation = variation;\n response.variationId = variation.id;\n response.variationName = variation.name;\n } else {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_NOT_PART_OF_CAMPAIGN, {\n file,\n userId,\n campaignKey: campaign.key\n })\n );\n }\n\n return response;\n },\n\n /**\n * Assigns random variation ID to a particular user depending on the PercentTraffic.\n * Makes user a part of campaign if user's included in Traffic.\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {Object} campaign the Campaign of which user is to be made a part of\n *\n * @return {Object|null} Variation allotted to User\n */\n getVariationOfCampaignForUser: (userId, campaign, accountId) => {\n if (!campaign) {\n return null;\n }\n\n let variation = Bucketer.bucketUserToVariation(userId, campaign, accountId);\n\n if (variation && variation.name) {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, {\n file,\n userId,\n campaignKey: campaign.key,\n status: `got Varation:${variation.name}`\n })\n );\n return {\n variation,\n name: variation.name,\n id: variation.id\n };\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, {\n file,\n userId,\n campaignKey: campaign.key,\n status: 'got no variation'\n })\n );\n\n return null;\n }\n};\n\nmodule.exports = VariationDecider;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeEnum = {\n NUMBER: 'number',\n STRING: 'string',\n // FUNCTION: 'function',\n BOOLEAN: 'boolean',\n OBJECT: 'object'\n};\n\nmodule.exports = DataTypeEnum;\n","(function(){\n var _global = this;\n\n /**\n * JS Implementation of MurmurHash2\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV2(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k =\n ((str.charCodeAt(i) & 0xff)) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24);\n\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n };\n\n /**\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV3(key, seed) {\n var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n remainder = key.length & 3; // key.length % 4\n bytes = key.length - remainder;\n h1 = seed;\n c1 = 0xcc9e2d51;\n c2 = 0x1b873593;\n i = 0;\n\n while (i < bytes) {\n k1 =\n ((key.charCodeAt(i) & 0xff)) |\n ((key.charCodeAt(++i) & 0xff) << 8) |\n ((key.charCodeAt(++i) & 0xff) << 16) |\n ((key.charCodeAt(++i) & 0xff) << 24);\n ++i;\n\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n case 1: k1 ^= (key.charCodeAt(i) & 0xff);\n\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= k1;\n }\n\n h1 ^= key.length;\n\n h1 ^= h1 >>> 16;\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= h1 >>> 13;\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n h1 ^= h1 >>> 16;\n\n return h1 >>> 0;\n }\n\n var murmur = MurmurHashV3;\n murmur.v2 = MurmurHashV2;\n murmur.v3 = MurmurHashV3;\n\n if (typeof(module) != 'undefined') {\n module.exports = murmur;\n } else {\n var _previousRoot = _global.murmur;\n murmur.noConflict = function() {\n _global.murmur = _previousRoot;\n return murmur;\n }\n _global.murmur = murmur;\n }\n}());\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Took reference from: \"loglevel\" - https://github.com/pimterry/loglevel\n *\n * Name: loglevel\n * Published Name: loglevel\n * URL: https://github.com/pimterry/loglevel\n * Description: Minimal lightweight logging for JavaScript, adding reliable log level methods to wrap any available console.log methods\n * Author: Tim Perry (https://github.com/pimterry)\n * LICENSE: MIT License\n * Local Modifications: This library is not used as a dependency. Source code was referenced and is modified as per requirements.\n *\n */\n\n// TODO: change path\nconst LogMessageEnum = {\n DEBUG_MESSAGES: require('vwo-sdk-log-messages/src/debug-messages.json'),\n INFO_MESSAGES: require('vwo-sdk-log-messages/src/info-messages.json'),\n WARNING_MESSAGES: require('vwo-sdk-log-messages/src/warning-messages.json'),\n ERROR_MESSAGES: require('vwo-sdk-log-messages/src/error-messages.json')\n};\n\nconst { LogLevelEnum, LogNumberLevel } = require('../../enums/LogLevelEnum');\nconst LogMessageUtil = require('../../utils/LogMessageUtil');\n\nconst ConsoleLogManager = require('./ConsoleLogManager');\n\nlet globalLogLevel = LogLevelEnum.NOTSET;\nlet isColoredLogEnabled = false;\nlet globalLogHandler = new ConsoleLogManager();\n\nclass LogManager {\n constructor(name) {\n this.name = name;\n this.isColoredLogEnabled = isColoredLogEnabled;\n }\n\n _customLog(level, message) {\n if (level < globalLogLevel) {\n return;\n }\n\n globalLogHandler.log(level, message);\n }\n\n log(level, message, disableLogs = false) {\n if (disableLogs) {\n return;\n }\n try {\n this._customLog(level, message);\n } catch (err) {\n console.error('VWO: Could not log.', err);\n }\n }\n\n info(message) {\n this._customLog(LogLevelEnum.INFO, message);\n }\n debug(message) {\n this._customLog(LogLevelEnum.DEBUG, message);\n }\n warn(message) {\n this._customLog(LogLevelEnum.WARN, message);\n }\n error(message) {\n this._customLog(LogLevelEnum.ERROR, message);\n }\n}\n\nfunction getLogger(name) {\n return new LogManager(name);\n}\n\nfunction setLogHandler(logger) {\n globalLogHandler = logger;\n}\n\nfunction setLogLevel(level) {\n if (level === undefined) {\n globalLogLevel = LogLevelEnum.ERROR;\n } else {\n globalLogLevel = level;\n }\n}\n\nfunction getLogLevel() {\n return globalLogLevel;\n}\n\nfunction setLogColorMode(value) {\n isColoredLogEnabled = value;\n globalLogHandler.isColoredLogEnabled = isColoredLogEnabled;\n}\n\nfunction getLogColorMode() {\n return isColoredLogEnabled;\n}\n\nmodule.exports = {\n LogLevelEnum,\n LogNumberLevel,\n LogMessageUtil,\n LogMessageEnum,\n getLogger,\n setLogHandler,\n setLogLevel,\n getLogLevel,\n LogManager,\n setLogColorMode,\n getLogColorMode,\n globalLogHandler\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst AnsiColorEnum = {\n BOLD: '\\x1b[1m',\n CYAN: '\\x1b[36m',\n GREEN: '\\x1b[32m',\n LIGHTBLUE: '\\x1b[94m',\n RED: '\\x1b[31m',\n RESET: '\\x1b[0m',\n WHITE: '\\x1b[30m',\n YELLOW: '\\x1b[33m'\n};\n\nmodule.exports = AnsiColorEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('./DataTypeUtil');\n\nconst nargs = /\\{([0-9a-zA-Z_]+)\\}/g;\n\nlet LogMessageUtil = {\n /**\n * Took reference from: string-template\n *\n * Name: string-template\n * Published Name: string-template\n * URL: https://github.com/Matt-Esch/string-template\n * Description: A lightweight string replace engine for text-based templates\n * Author: Matt-Esch (https://github.com/Matt-Esch)\n * License: MIT License\n * Local Modifications: This library is not used as a dependency.\n * Source code was referenced and is modified as per requirements.\n */\n build: (template, data) => {\n try {\n return template.replace(nargs, (match, key, index) => {\n let result;\n let isKey;\n\n if (template[index - 1] === '{' && template[index + match.length] === '}') {\n return key;\n } else {\n isKey = data.hasOwnProperty(key);\n\n if (isKey) {\n let value = data[key];\n\n if (DataTypeUtil.isFunction(value)) {\n value = data[key]();\n }\n result = value;\n } else {\n result = null;\n }\n if (result === null || result === undefined) {\n return '';\n }\n\n return result;\n }\n });\n } catch (err) {\n return template;\n }\n }\n};\n\nmodule.exports = LogMessageUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { getCurrentTime } = require('../../utils/FunctionUtil');\nconst { LogLevelEnum, LogLevelInfoEnum, LogLevelColorInfoEnum } = require('../../enums/LogLevelEnum');\n\nclass ConsoleLogManager {\n constructor() {\n this.logLevel = LogLevelEnum.NOTSET;\n this.prefix = `VWO-SDK`;\n this.isColoredLogEnabled = false;\n }\n\n log(level, message) {\n if (!this.shouldLog(level)) {\n return;\n }\n\n let logMessage;\n if (this.isColoredLogEnabled) {\n logMessage = `${this.prefix} - ${LogLevelColorInfoEnum[level]} ${getCurrentTime()} ${message}`;\n } else {\n logMessage = `${this.prefix} - ${LogLevelInfoEnum[level]} ${getCurrentTime()} ${message}`;\n }\n\n this.consoleLog(level, [logMessage]);\n }\n\n shouldLog(targetLogLevel) {\n return targetLogLevel >= this.logLevel;\n }\n\n setLogLevel(level) {\n if (level === undefined) {\n this.logLevel = LogLevelEnum.ERROR;\n } else {\n this.logLevel = level;\n }\n }\n\n consoleLog(level, logArguments) {\n switch (level) {\n case LogLevelEnum.INFO:\n console.info.apply(console, logArguments);\n break;\n case LogLevelEnum.WARN:\n console.warn.apply(console, logArguments);\n break;\n case LogLevelEnum.ERROR:\n console.error.apply(console, logArguments);\n break;\n default:\n console.log.apply(console, logArguments);\n break;\n }\n }\n}\n\nmodule.exports = ConsoleLogManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n PASSED: 'passed',\n FAILED: 'failed'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst SegmentEnum = require('../enums/segment');\nconst { getKeyValue } = require('../utils/ObjectUtil');\nconst { operandCustomVariablesParser, operandUserParser } = require('../utils/SegmentUtil');\nconst logging = require('../services/logging');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst FileNameEnum = require('../enums/FileNameEnum');\n\nconst { AND, OR, NOT } = SegmentEnum.SegmentOperatorTypes;\nconst { CUSTOM_VARIABLE, USER } = SegmentEnum.SegmentOperandTypes;\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst file = FileNameEnum.SegmentEvaluator;\n\nconst logger = logging.getLogger();\n\nmodule.exports = SegmentEvaluator;\n/**\n * This method: A parser which recursively evaluates the expression tree represented by dsl\n *\n * @param {Object} dsl The segments defined in the campaing\n * @param {Object} customVariables Key/value pair of custom_attributs properties\n *\n * @return {Boolean} true if user is to be made part of campaign, else false\n */\nfunction evaluator(dsl, customVariables) {\n let { key, value } = getKeyValue(dsl);\n let operator = key;\n let subDsl = value;\n if (operator === NOT) {\n return !evaluator(subDsl, customVariables);\n } else if (operator === AND) {\n let list = [];\n for (let i = 0; i < subDsl.length; i++) {\n list.push(evaluator(subDsl[i], customVariables));\n }\n\n return list.every(val => val);\n } else if (operator === OR) {\n let list = [];\n for (let i = 0; i < subDsl.length; i++) {\n list.push(evaluator(subDsl[i], customVariables));\n }\n\n return list.some(val => val);\n } else if (operator === CUSTOM_VARIABLE) {\n return operandCustomVariablesParser(subDsl, customVariables);\n } else if (operator === USER) {\n return operandUserParser(subDsl, customVariables);\n }\n}\n\nfunction SegmentEvaluator(dsl, customVariables = {}, campaignKey, userId, variation = '', disableLogs = false) {\n try {\n if (DataTypeUtil.isObject(dsl) && !Object.keys(dsl).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n disableLogs\n );\n return true;\n }\n if (DataTypeUtil.isObject(dsl) && Object.keys(dsl).length) {\n return evaluator(dsl, customVariables);\n }\n return true;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_ERROR, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(customVariables),\n file,\n err,\n variation\n }),\n disableLogs\n );\n return false;\n }\n}\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n CUSTOM_VARIABLE: 'custom_variable',\n USER: 'user'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n AND: 'and',\n NOT: 'not',\n OR: 'or'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n LOWER: /^lower/,\n LOWER_MATCH: /^lower\\((.*)\\)/,\n WILDCARD: /^wildcard/,\n WILDCARD_MATCH: /^wildcard\\((.*)\\)/,\n REGEX: /^regex/,\n REGEX_MATCH: /^regex\\((.*)\\)/,\n STARTING_STAR: /^\\*/,\n ENDING_STAR: /\\*$/,\n GREATER_THAN_MATCH: /^gt\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n GREATER_THAN_EQUAL_TO_MATCH: /^gte\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n LESS_THAN_MATCH: /^lt\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n LESS_THAN_EQUAL_TO_MATCH: /^lte\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n LOWER_VALUE: 1,\n STARTING_ENDING_STAR_VALUE: 2,\n STARTING_STAR_VALUE: 3,\n ENDING_STAR_VALUE: 4,\n REGEX_VALUE: 5,\n EQUAL_VALUE: 6,\n GREATER_THAN_VALUE: 7,\n GREATER_THAN_EQUAL_TO_VALUE: 8,\n LESS_THAN_VALUE: 9,\n LESS_THAN_EQUAL_TO_VALUE: 10\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst { matchWithRegex } = require('../utils/FunctionUtil');\nconst { getKeyValue } = require('../utils/ObjectUtil');\nconst SegmentEnum = require('../enums/segment');\n\nconst {\n LOWER_MATCH,\n WILDCARD_MATCH,\n REGEX_MATCH,\n STARTING_STAR,\n ENDING_STAR,\n GREATER_THAN_MATCH,\n GREATER_THAN_EQUAL_TO_MATCH,\n LESS_THAN_MATCH,\n LESS_THAN_EQUAL_TO_MATCH\n} = SegmentEnum.SegmentOperandValueTypeRegexes;\n\nconst {\n LOWER_VALUE,\n STARTING_ENDING_STAR_VALUE,\n STARTING_STAR_VALUE,\n ENDING_STAR_VALUE,\n REGEX_VALUE,\n EQUAL_VALUE,\n GREATER_THAN_VALUE,\n GREATER_THAN_EQUAL_TO_VALUE,\n LESS_THAN_VALUE,\n LESS_THAN_EQUAL_TO_VALUE\n} = SegmentEnum.SegmentOperandValues;\n\nfunction extractOperandValue(operand, regex) {\n return matchWithRegex(operand, regex) && matchWithRegex(operand, regex)[1];\n}\n\nfunction processValues(operandValue, tagValue) {\n // this is atomic, either both will be processed or none\n let processedOperandValue = parseFloat(operandValue, 10);\n let processedTagValue = parseFloat(tagValue, 10);\n if (!processedOperandValue || !processedTagValue) {\n return {\n operandValue: operandValue,\n tagValue: tagValue\n };\n }\n // now we have surity that both are numbers\n // now we can convert them independently to int type if they\n // are int rather than floats\n if (processedOperandValue === Math.floor(processedOperandValue)) {\n processedOperandValue = parseInt(processedOperandValue, 10);\n }\n if (processedTagValue === Math.floor(processedTagValue)) {\n processedTagValue = parseInt(processedTagValue, 10);\n }\n // convert it back to string and return\n return {\n operandValue: processedOperandValue.toString(),\n tagValue: processedTagValue.toString()\n };\n}\n\nfunction preProcessTagValue(tagValue) {\n if (tagValue === undefined) {\n tagValue = '';\n }\n if (DataTypeUtil.isBoolean(tagValue)) {\n if (tagValue) {\n tagValue = true;\n } else {\n tagValue = false;\n }\n }\n if (tagValue !== null) {\n tagValue = tagValue.toString();\n }\n return tagValue;\n}\n\nfunction preProcessOperandValue(operand) {\n let operandType;\n let operandValue;\n let startingStar;\n let endingStar;\n // Pre process operand value\n if (matchWithRegex(operand, LOWER_MATCH)) {\n operandType = LOWER_VALUE;\n operandValue = extractOperandValue(operand, LOWER_MATCH);\n } else if (matchWithRegex(operand, WILDCARD_MATCH)) {\n operandValue = extractOperandValue(operand, WILDCARD_MATCH);\n startingStar = matchWithRegex(operandValue, STARTING_STAR);\n endingStar = matchWithRegex(operandValue, ENDING_STAR);\n // In case of wildcard, the operand type is further divided into contains, startswith and endswith\n if (startingStar && endingStar) {\n operandType = STARTING_ENDING_STAR_VALUE;\n } else if (startingStar) {\n operandType = STARTING_STAR_VALUE;\n } else if (endingStar) {\n operandType = ENDING_STAR_VALUE;\n }\n operandValue = operandValue.replace(STARTING_STAR, '').replace(ENDING_STAR, '');\n } else if (matchWithRegex(operand, REGEX_MATCH)) {\n operandType = REGEX_VALUE;\n operandValue = extractOperandValue(operand, REGEX_MATCH);\n } else if (matchWithRegex(operand, GREATER_THAN_MATCH)) {\n operandType = GREATER_THAN_VALUE;\n operandValue = extractOperandValue(operand, GREATER_THAN_MATCH);\n } else if (matchWithRegex(operand, GREATER_THAN_EQUAL_TO_MATCH)) {\n operandType = GREATER_THAN_EQUAL_TO_VALUE;\n operandValue = extractOperandValue(operand, GREATER_THAN_EQUAL_TO_MATCH);\n } else if (matchWithRegex(operand, LESS_THAN_MATCH)) {\n operandType = LESS_THAN_VALUE;\n operandValue = extractOperandValue(operand, LESS_THAN_MATCH);\n } else if (matchWithRegex(operand, LESS_THAN_EQUAL_TO_MATCH)) {\n operandType = LESS_THAN_EQUAL_TO_VALUE;\n operandValue = extractOperandValue(operand, LESS_THAN_EQUAL_TO_MATCH);\n } else {\n operandType = EQUAL_VALUE;\n operandValue = operand;\n }\n return {\n operandType,\n operandValue\n };\n}\n\nfunction operandCustomVariablesParser(operand, customVariables) {\n // Extract custom_variable_key and custom_variable_value from operand\n let { key, value } = getKeyValue(operand);\n let operandKey = key;\n operand = value;\n if (!customVariables.hasOwnProperty(key)) {\n // For handling \".*\" regex case when key is not present in customVariables and matches regex is used.\n return false;\n }\n let tagValue = customVariables[operandKey];\n // Pre process tag value\n tagValue = preProcessTagValue(tagValue);\n let { operandType, operandValue } = preProcessOperandValue(operand);\n // Process both operand and tag values\n let processedValues = processValues(operandValue, tagValue);\n tagValue = processedValues.tagValue;\n return extractResult(operandType, processedValues.operandValue, tagValue);\n}\n\nfunction operandUserParser(operand, customVariables) {\n const users = operand.split(',');\n for (let i = 0; i < users.length; i++) {\n if (users[i].trim() === customVariables._vwoUserId) {\n return true;\n }\n }\n return false;\n}\n\nfunction extractResult(operandType, operandValue, tagValue) {\n let result;\n\n switch (operandType) {\n case LOWER_VALUE:\n if (tagValue !== null) {\n result = operandValue.toLowerCase() === tagValue.toLowerCase();\n }\n break;\n case STARTING_ENDING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.indexOf(operandValue) > -1;\n }\n break;\n case STARTING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.endsWith(operandValue);\n }\n break;\n case ENDING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.startsWith(operandValue);\n }\n break;\n case REGEX_VALUE:\n try {\n let pattern = new RegExp(operandValue, 'g');\n result = !!pattern.test(tagValue);\n } catch (err) {\n result = false;\n }\n break;\n case GREATER_THAN_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) < parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case GREATER_THAN_EQUAL_TO_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) <= parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case LESS_THAN_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) > parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case LESS_THAN_EQUAL_TO_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) >= parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n default:\n result = tagValue === operandValue;\n }\n\n return result;\n}\n\nmodule.exports = {\n extractOperandValue,\n processValues,\n preProcessTagValue,\n preProcessOperandValue,\n operandCustomVariablesParser,\n operandUserParser\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst HooksEnum = {\n DECISION_TYPES: {\n CAMPAIGN_DECISION: 'CAMPAIGN_DECISION'\n }\n};\n\nmodule.exports = HooksEnum;\n","var v35 = require('./lib/v35.js');\nvar sha1 = require('./lib/sha1');\nmodule.exports = v35('v5', 0x50, sha1);\n","var bytesToUuid = require('./bytesToUuid');\n\nfunction uuidToBytes(uuid) {\n // Note: We assume we're being passed a valid uuid string\n var bytes = [];\n uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) {\n bytes.push(parseInt(hex, 16));\n });\n\n return bytes;\n}\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n var bytes = new Array(str.length);\n for (var i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n return bytes;\n}\n\nmodule.exports = function(name, version, hashfunc) {\n var generateUUID = function(value, namespace, buf, offset) {\n var off = buf && offset || 0;\n\n if (typeof(value) == 'string') value = stringToBytes(value);\n if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace);\n\n if (!Array.isArray(value)) throw TypeError('value must be an array of bytes');\n if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values');\n\n // Per 4.3\n var bytes = hashfunc(namespace.concat(value));\n bytes[6] = (bytes[6] & 0x0f) | version;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n if (buf) {\n for (var idx = 0; idx < 16; ++idx) {\n buf[off+idx] = bytes[idx];\n }\n }\n\n return buf || bytesToUuid(bytes);\n };\n\n // Function#name is not settable on some platforms (#270)\n try {\n generateUUID.name = name;\n } catch (err) {\n }\n\n // Pre-defined namespaces, per Appendix C\n generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n\n return generateUUID;\n};\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\n'use strict';\n\nfunction f(s, x, y, z) {\n switch (s) {\n case 0: return (x & y) ^ (~x & z);\n case 1: return x ^ y ^ z;\n case 2: return (x & y) ^ (x & z) ^ (y & z);\n case 3: return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return (x << n) | (x>>> (32 - n));\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof(bytes) == 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n bytes = new Array(msg.length);\n for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i);\n }\n\n bytes.push(0x80);\n\n var l = bytes.length/4 + 2;\n var N = Math.ceil(l/16);\n var M = new Array(N);\n\n for (var i=0; i>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = (H[0] + a) >>> 0;\n H[1] = (H[1] + b) >>> 0;\n H[2] = (H[2] + c) >>> 0;\n H[3] = (H[3] + d) >>> 0;\n H[4] = (H[4] + e) >>> 0;\n }\n\n return [\n H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff,\n H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff,\n H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff,\n H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff,\n H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff\n ];\n}\n\nmodule.exports = sha1;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.GetVariation;\n\n/**\n * This API method: Gets the variation assigned for the user for the campaign\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Assigns the determinitic variation to the user(based on userId), if user becomes part of campaign\n * If userStorageService is used, it will look into it for the variation and if found, no further processing is done\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options Optional params\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\nfunction getVariation(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.GET_VARIATION_NAME;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var { customVariables, variationTargetingVariables, userStorageData, metaData } = options;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.GET_VARIATION_NAME,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey: campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return data;\n });\n }\n\n if (!result.variationName) {\n return null;\n }\n\n return result.variationName;\n}\n\nmodule.exports = getVariation;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst { objectValues } = require('../utils/ObjectUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\n\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Track;\nconst GOAL_TYPE_TO_TRACK_DEFAULT = GoalTypeEnum.ALL;\nconst GOAL_IDENTIFIER_SEPERATOR = '_vwo_';\nconst api = ApiEnum.TRACK;\n\nlet BatchEventsDispatcher;\nif (typeof process.env !== 'undefined') {\n BatchEventsDispatcher = require('../utils/BatchEventsDispatcher');\n}\n\n/**\n * This API method: Marks the conversion of the campaign for a particular goal\n *\n * 1. validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Gets the assigned determinitic variation to the user(based on userId), if user becomes part of campaign\n * 4. Sends an impression call to VWO server to track goal data\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {Number} campaignKey unique campaign test key\n * @param {String} userId ID assigned to a user\n * @param {String} goalIdentifier unique campaign's goal identifier\n * @param {Object} options Optional params\n */\nfunction track(vwoInstance, campaignKey, userId, goalIdentifier, options = {}) {\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n revenueValue,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n eventProperties,\n userAgent,\n userIpAddress\n } = options;\n var visitorUserAgent = userAgent;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.TRACK,\n campaignKey,\n userId,\n goalIdentifier,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n }) &&\n (!goalTypeToTrack || (goalTypeToTrack && objectValues(GoalTypeEnum).includes(goalTypeToTrack)))\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.TRACK\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n let revenuePropList = new Set();\n\n // If no settings are found, simply do not track goal and return false\n if (!settingsFile) {\n return null;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n let campaigns = [];\n goalTypeToTrack = goalTypeToTrack || config.goalTypeToTrack || GOAL_TYPE_TO_TRACK_DEFAULT; // priority order - options > launchConfig > default\n if (DataTypeUtil.isUndefined(shouldTrackReturningUser)) {\n // if shouldTrackReturningUser is not given in options\n if (DataTypeUtil.isBoolean(config.shouldTrackReturningUser)) {\n // if shouldTrackReturningUser is given in config at launch\n shouldTrackReturningUser = config.shouldTrackReturningUser;\n } else {\n shouldTrackReturningUser = false;\n }\n }\n if (!DataTypeUtil.isString(campaignKey)) {\n if (DataTypeUtil.isArray(campaignKey)) {\n campaigns = CampaignUtil.getCampaignsForKeys(settingsFile, campaignKey);\n } else {\n campaigns = CampaignUtil.getCampaignsForGoal(settingsFile, goalIdentifier, goalTypeToTrack);\n }\n } else {\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n campaigns.push(campaign || { key: campaignKey });\n }\n const result = {};\n let metricMap = {};\n let events = [];\n let areGlobalGoals = typeof process.env === 'undefined' ? false : campaigns.length > 1;\n\n campaigns.forEach(\n campaign =>\n (result[campaign.key] = trackCampaignGoal(\n vwoInstance,\n campaign,\n campaign.key,\n userId,\n settingsFile,\n goalIdentifier,\n revenueValue,\n config,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n metricMap,\n revenuePropList,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n ))\n );\n\n // Check if each object in result is a promise\n // in case of asyncStorageConfig, each object would be a promise only\n // Check if result is a non-empty object\n const areAllPromises =\n result && Object.keys(result).length > 0\n ? Object.values(result).every(item => DataTypeUtil.isPromise(item))\n : false;\n // const areAllPromises = Object.values(result).every(item => DataTypeUtil.isPromise(item));\n\n if (areAllPromises) {\n // Promise.all - This method takes an array of promises and returns a new promise that resolves to an array of the resolved values when all of the input promises have resolved.\n // If any of the promises in the array reject, the whole Promise.all is rejected.\n return Promise.all(Object.values(result)).then(dataArray => {\n dataArray.forEach((data, index) => {\n const campaignKey = Object.keys(result)[index];\n const ans = _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n { [campaignKey]: data }\n );\n result[campaignKey] = ans[campaignKey];\n });\n return result;\n });\n }\n return _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n if (!Object.keys(result).length) {\n return null;\n }\n\n if (typeof process.env === 'undefined') {\n if (events && events.length) {\n for (let k = 0; k < events.length; k++) {\n vwoInstance.eventQueue.process(config, events[k], vwoInstance, { responseCallback });\n }\n }\n } else if (!settingsFile.isEventArchEnabled && events && events.length) {\n if (!areGlobalGoals) {\n vwoInstance.eventQueue.process(config, events[0], vwoInstance, { responseCallback });\n } else if (!config.isDevelopmentMode) {\n BatchEventsDispatcher.dispatch(\n {\n ev: events\n },\n responseCallback,\n Object.assign(\n {},\n {\n a: vwoInstance.SettingsFileManager.getSettingsFile().accountId\n },\n vwoInstance.usageStats.getUsageStats()\n ),\n vwoInstance.SettingsFileManager.getSettingsFile().sdkKey\n );\n }\n }\n\n if (settingsFile.isEventArchEnabled && Object.keys(metricMap).length > 0) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n goalIdentifier,\n {},\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackGoalPayloadData(\n settingsFile,\n userId,\n goalIdentifier,\n metricMap,\n revenueValue,\n revenuePropList,\n eventProperties\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n Object.keys(metricMap).forEach(function(key) {\n DecisionUtil._saveUserData(\n config,\n metricMap[key].campaign,\n metricMap[key].variationName,\n metricMap[key].userId,\n metricMap[key].metaData,\n goalIdentifier\n );\n });\n }\n }\n\n if (config.isDevelopmentMode) {\n return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode });\n }\n\n return result;\n}\n\nfunction trackCampaignGoal(\n vwoInstance,\n campaign,\n campaignKey,\n userId,\n settingsFile,\n goalIdentifier,\n revenueValue,\n config,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n metricMap,\n revenuePropList,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n) {\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey: campaignKey,\n api\n })\n );\n\n return false;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return false;\n }\n\n let campaignId = campaign.id;\n\n // Get the campaign goal settings based on goalIdentifier\n let goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier);\n\n if (!goal) {\n // If no goal is found, something is wrong with the goalIdentifier\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_GOAL_NOT_FOUND, {\n file,\n userId,\n goalIdentifier,\n campaignKey: campaignKey\n })\n );\n return false;\n } else if (goalTypeToTrack !== GOAL_TYPE_TO_TRACK_DEFAULT && goal.type !== goalTypeToTrack) {\n return false;\n } else if (goal.type === GoalTypeEnum.REVENUE && !ValidateUtil.isValidValue(revenueValue)) {\n if (settingsFile.isEventArchEnabled) {\n /* \n If it's a metric of type - value of an event property and calculation logic is first Value (mca != -1 )\n */\n if (goal.mca !== -1) {\n /*\n In this case it is expected that goal will have revenueProp\n Error should be logged if eventProperties is not Defined ` OR ` eventProperties does not have revenueProp key\n */\n if (DataTypeUtil.isUndefined(eventProperties) || !eventProperties.hasOwnProperty(goal.revenueProp)) {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n } else {\n /*\n here mca == -1 so there could only be 2 scenarios, \n 1. If revenueProp is defined then eventProperties should have revenueProp key\n 2. if revenueProp is not defined then it's a metric of type - Number of times an event has been triggered.\n */\n if (goal.revenueProp) {\n // Error should be logged if eventProperties is not Defined ` OR ` eventProperties does not have revenueProp key\n if (DataTypeUtil.isUndefined(eventProperties) || !eventProperties.hasOwnProperty(goal.revenueProp)) {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n }\n }\n } else {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n }\n\n if (goal.type === GoalTypeEnum.REVENUE && goal.revenueProp) {\n revenuePropList.add(goal.revenueProp);\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n true,\n goalIdentifier,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n if (!Object.keys(data).length) {\n return null;\n }\n return _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n data\n );\n });\n }\n\n return _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n var { variationId, variationName, storedGoalIdentifier } = result;\n // Is User is a part of Campaign and has been decided to be a part of particular variation\n if (variationName) {\n if (storedGoalIdentifier) {\n const identifiers = storedGoalIdentifier.split(GOAL_IDENTIFIER_SEPERATOR);\n if (!identifiers.includes(goalIdentifier)) {\n storedGoalIdentifier += GOAL_IDENTIFIER_SEPERATOR + goalIdentifier;\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, storedGoalIdentifier);\n }\n } else if (!shouldTrackReturningUser && goal.mca !== -1) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_GOAL_ALREADY_TRACKED, {\n file,\n userId,\n goalIdentifier,\n campaignKey\n })\n );\n return false;\n }\n }\n // If goal is found, send an impression to VWO server for report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n metricMap[campaign.id] = {\n config,\n campaign,\n variationName,\n userId,\n metaData,\n goal\n };\n return true;\n } else {\n let properties = {};\n\n if (areGlobalGoals) {\n properties = ImpressionUtil.buildBatchEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n visitorUserAgent,\n userIpAddress\n );\n } else {\n properties = ImpressionUtil.buildEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n visitorUserAgent,\n userIpAddress\n );\n }\n\n events.push(properties);\n }\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, goalIdentifier);\n }\n return true;\n }\n\n return false;\n}\n\nfunction logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL, {\n file,\n userId,\n goalIdentifier,\n campaignKey\n })\n );\n}\n\nmodule.exports = track;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.IsFeatureEnabled;\n\n/**\n * This API checks: Whether a feature is enabled or not for the given user\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible for campaign and check if feature is enabled for the user.\n * 4. If feature enabled, sends a call to VWO server for tracking visitor\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} userId Unique identifier for the user\n * @param {Object} options Optional params\n *\n * @return {Boolean} true if feature enabled, false otherwise\n */\nfunction isFeatureEnabled(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.IS_FEATURE_ENABLED;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n userAgent,\n userIpAddress\n } = options;\n var visitorUserAgent = userAgent;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.IS_FEATURE_ENABLED,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n visitorUserAgent,\n userIpAddress\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.isFeatureEnabled\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply log and return false\n if (!settingsFile) {\n return null;\n }\n\n shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false;\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isAbCampaign(campaign)) {\n // API not allowed for full-stack AB campaigns\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n true,\n false,\n undefined,\n api\n );\n\n // check if result is a promise, if yes then wait for it untill it resolves, then only proceed further\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n data\n );\n });\n }\n\n return _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n var { variation, variationId, variationName, isStoredVariation } = result;\n\n let isFeatureEnabled = false;\n\n if (variationName) {\n isFeatureEnabled = CampaignUtil.isFeatureRolloutCampaign(campaign) || variation.isFeatureEnabled;\n\n if (isStoredVariation && !shouldTrackReturningUser) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, {\n file,\n userId,\n campaignKey,\n api\n })\n );\n } else {\n // Variation found...let VWO server knows about it to show report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n EventEnum.VWO_VARIATION_SHOWN,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackUserPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_VARIATION_SHOWN,\n campaign.id,\n variationId\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n } else {\n let properties = ImpressionUtil.buildEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n }\n\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: isFeatureEnabled ? 'enabled' : 'disabled'\n })\n );\n\n if (config.isDevelopmentMode) {\n return { isFeatureEnabled };\n }\n\n return isFeatureEnabled;\n }\n }\n\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: isFeatureEnabled ? 'enabled' : 'disabled'\n })\n );\n\n if (isStoredVariation || config.isDevelopmentMode) {\n return { isFeatureEnabled };\n }\n\n return { isFeatureEnabled };\n}\n\nmodule.exports = isFeatureEnabled;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst FeatureUtil = require('../utils/FeatureUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst ObjectUtil = require('../utils/ObjectUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.GetFeatureVariableValue;\n\n/**\n * This API method:\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible for campaign and check if feature is enabled for the user.\n * 4. If feature enabled, return the variable for that variation(if Feature Test),\n * otherwise the default values being set in Feature\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} variableKey Unique key for a feature's variable\n * @param {String} userId Unique identifier for the user\n * @param {Object} options Optional params\n *\n * @return {string|number|double|boolean|null} Variable value as is set in the VWO app i.e.\n * maintaining the data-type,\n * null if anything fails like campaign / variable not found\n */\nfunction getFeatureVariableValue(vwoInstance, campaignKey, variableKey, userId, options = {}) {\n try {\n const api = ApiEnum.GET_FEATURE_VARIABLE_VALUE;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var { customVariables, variationTargetingVariables, userStorageData, metaData } = options;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE,\n campaignKey,\n variableKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.GetFeatureVariableValue\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isAbCampaign(campaign)) {\n // API not allowed for full-stack AB campaigns\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, data);\n });\n }\n\n return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result);\n } catch (err) {\n vwoInstance.logger.log(LogLevelEnum.ERROR, err.message);\n\n return null;\n }\n}\n\nfunction _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result) {\n let variable;\n var { variation, variationName } = result;\n\n if (!variationName) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: 'disabled'\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n variable = FeatureUtil.getVariableForFeature(campaign, variableKey);\n } else if (CampaignUtil.isFeatureTestCampaign(campaign)) {\n variable = FeatureUtil.getVariableValueForVariation(campaign, variation, variableKey);\n\n if (ObjectUtil.areObjectKeys(variable) && variation.isFeatureEnabled) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_VARIABLE_VALUE, {\n file,\n variableKey,\n campaignKey: campaign.key,\n variableValue: variable.value,\n userId\n })\n );\n } else if (ObjectUtil.areObjectKeys(variable) && !variation.isFeatureEnabled) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_VARIABLE_DEFAULT_VALUE, {\n file,\n variableKey,\n variationName\n })\n );\n }\n }\n\n if (!ObjectUtil.areObjectKeys(variable)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.VARIABLE_NOT_FOUND, {\n file,\n variableKey,\n userId\n })\n );\n\n return null;\n }\n\n let variableValue = variable.value;\n let typeCastedValue = FeatureUtil.getTypeCastVariableValue(variableValue, variable.type);\n\n return typeCastedValue;\n}\n\nmodule.exports = getFeatureVariableValue;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignUtil = require('./CampaignUtil');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst FeatureVariableTypeEnum = require('../enums/FeatureVariableTypeEnum');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.FeatureUtil;\n\nlet FeatureUtil = {\n getVariableForFeature: (campaign, variableKey) => {\n let variableData = {};\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n let variables = campaign.variables || [];\n\n for (let i = 0; i < variables.length; i++) {\n if (variables[i].key === variableKey) {\n variableData = variables[i];\n\n break;\n }\n }\n\n return variableData;\n }\n\n return variableData;\n },\n getVariableValueForVariation: (campaign, variation, variableKey) => {\n let variationVariable = {};\n\n if (CampaignUtil.isFeatureTestCampaign(campaign)) {\n if (!variation || !variation || !variation.variables) {\n return variationVariable;\n }\n\n if (!variation.isFeatureEnabled) {\n variation = CampaignUtil.getControlForCampaign(campaign);\n }\n\n for (let i = 0; i < variation.variables.length; i++) {\n let variable = variation.variables[i];\n\n if (variableKey === variable.key) {\n variationVariable = variable;\n break;\n }\n }\n }\n\n return variationVariable;\n },\n getTypeCastVariableValue: (variableValue, variableType) => {\n let typeCastedValue;\n\n switch (variableType) {\n case FeatureVariableTypeEnum.INTEGER:\n typeCastedValue = parseInt(variableValue, 10);\n if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n }\n break;\n\n case FeatureVariableTypeEnum.DOUBLE:\n typeCastedValue = parseFloat(variableValue);\n if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n }\n break;\n\n case FeatureVariableTypeEnum.BOOLEAN:\n if (!DataTypeUtil.isBoolean(variableValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n } else {\n typeCastedValue = variableValue;\n }\n break;\n\n case FeatureVariableTypeEnum.JSON:\n if (!DataTypeUtil.isObject(variableValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n } else {\n typeCastedValue = variableValue;\n }\n break;\n\n default:\n typeCastedValue = variableValue;\n break;\n }\n\n return typeCastedValue;\n }\n};\n\nmodule.exports = FeatureUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst FeatureVariableTypeEnum = {\n BOOLEAN: 'boolean',\n DOUBLE: 'double',\n INTEGER: 'integer',\n STRING: 'string',\n JSON: 'json'\n};\n\nmodule.exports = FeatureVariableTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ApiEnum = require('../enums/ApiEnum');\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nlet BatchEventsDispatcher;\n\nif (typeof process.env !== 'undefined') {\n BatchEventsDispatcher = require('../utils/BatchEventsDispatcher');\n}\n\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Push;\n\n/**\n * This API method: Pushes the key-value tag pair for a particular user\n *\n * 1. validates the arguments being passed\n * 2. Sends a call to VWO push api\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} tagKey tag key\n * @param {String} tagValue tag Value\n * @param {String} userId ID assigned to a user\n *\n * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable\n */\nfunction push(vwoInstance, tagKey, tagValue, userId, customDimensionMap, { responseCallback } = {}) {\n const api = ApiEnum.PUSH;\n\n if (\n !ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.PUSH,\n tagKey,\n tagValue,\n userId,\n customDimensionMap,\n responseCallback\n })\n ) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.PUSH_INVALID_PARAMS, {\n file,\n method: api\n })\n );\n return false;\n }\n\n if (tagKey.length > 255) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_KEY_LENGTH_EXCEEDED, {\n file,\n tagKey,\n userId\n })\n );\n return false;\n }\n\n if (tagValue.length > 255) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_VALUE_LENGTH_EXCEEDED, {\n file,\n tagKey,\n userId,\n tagValue\n })\n );\n return false;\n }\n\n if (tagKey === ' ' && tagValue === ' ' && (!customDimensionMap || Object.keys(customDimensionMap).length === 0)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.PUSH_INVALID_PARAMS, {\n file,\n method: api\n })\n );\n return false;\n }\n\n if (tagKey !== ' ' && tagValue !== ' ') {\n customDimensionMap[tagKey] = tagValue;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply false\n if (!settingsFile) {\n return false;\n }\n\n let result = {};\n if (config.batchEvents) {\n Object.keys(customDimensionMap).forEach(key => {\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n let properties = ImpressionUtil.buildBatchEventForPushing(settingsFile, key, tagValue, userId);\n vwoInstance.batchEventsQueue.enqueue(properties);\n\n result[key] = true;\n });\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(settingsFile, EventEnum.VWO_SYNC_VISITOR_PROP);\n let payload = ImpressionUtil.getPushPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_SYNC_VISITOR_PROP,\n customDimensionMap\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n\n result.success = true;\n } else {\n const events = [];\n const customDimensionKeys = Object.keys(customDimensionMap);\n\n customDimensionKeys.forEach(key => {\n let properties;\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n\n if (typeof process.env === 'undefined') {\n properties = ImpressionUtil.buildEventForPushing(settingsFile, key, tagValue, userId);\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n } else if (customDimensionKeys.length === 1) {\n properties = ImpressionUtil.buildEventForPushing(settingsFile, key, tagValue, userId);\n } else {\n properties = ImpressionUtil.buildBatchEventForPushing(settingsFile, key, tagValue, userId);\n }\n\n events.push(properties);\n result[key] = true;\n });\n\n if (typeof process.env !== 'undefined') {\n if (customDimensionKeys.length === 1) {\n vwoInstance.eventQueue.process(config, events[0], vwoInstance, { responseCallback });\n } else {\n if (!config.isDevelopmentMode) {\n BatchEventsDispatcher.dispatch(\n {\n ev: events\n },\n responseCallback,\n Object.assign(\n {},\n {\n a: vwoInstance.SettingsFileManager.getSettingsFile().accountId\n },\n vwoInstance.usageStats.getUsageStats()\n ),\n vwoInstance.SettingsFileManager.getSettingsFile().sdkKey\n );\n }\n }\n }\n }\n\n if (config.isDevelopmentMode) {\n return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode });\n }\n\n return result;\n}\n\nmodule.exports = push;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst EventDispatcher = require('../utils/EventDispatcherUtil');\n\nconst logging = require('./logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst HeadersEnum = require('../enums/HeadersEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.EventQueue;\n\nclass EventQueue {\n constructor() {\n this.running = false;\n this.queue = [];\n }\n\n process(config, properties, vwoInstance, { payload, responseCallback } = {}) {\n let customHeaders = {};\n\n if (properties && properties.visitor_ua) {\n customHeaders[HeadersEnum.USER_AGENT] = encodeURIComponent(properties.visitor_ua);\n properties.visitor_ua = customHeaders[HeadersEnum.USER_AGENT];\n }\n if (properties && properties.visitor_ip) {\n customHeaders[HeadersEnum.IP] = encodeURIComponent(properties.visitor_ip);\n properties.visitor_ip = customHeaders[HeadersEnum.IP];\n }\n\n if (config && config.isDevelopmentMode) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, {\n file\n })\n );\n return;\n }\n\n this.enqueue(properties, vwoInstance, { payload, responseCallback }, customHeaders);\n }\n\n enqueue(properties, vwoInstance, { payload, responseCallback }, customHeaders = {}) {\n this.queue.push({\n eventName: properties.eventName,\n properties: properties,\n callback: () => {\n if (payload) {\n EventDispatcher.dispatchPostCall(properties, payload, { responseCallback }, customHeaders);\n } else {\n EventDispatcher.dispatchGetCall(properties, { responseCallback }, customHeaders);\n }\n }\n });\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.EVENT_QUEUE, {\n file,\n queueType: 'normal',\n event: 'VWO_MASKED_PAYLOAD'\n })\n );\n\n vwoInstance.eventQueue.executeNext(properties);\n\n if (!this.running) {\n // if nothing is running, then start the engines!\n this.executeNext(properties);\n }\n\n return this;\n }\n\n executeNext(properties) {\n this.running = false;\n\n // get the first element off the queue\n if (this.queue && this.queue.length) {\n let event = this.queue.shift();\n\n if (event) {\n this.running = true;\n if (event.callback && DataTypeUtil.isFunction(event.callback)) {\n event.callback(properties);\n }\n }\n }\n }\n}\n\nmodule.exports = EventQueue;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst FunctionUtil = require('./FunctionUtil');\nconst EventEnum = require('../enums/EventEnum');\nconst excludedProperties = ['url'];\n\nconst file = FileNameEnum.EventDispatcherUtil;\n\nlet EventDispatcher = {\n dispatchGetCall: function(properties, { responseCallback }, customHeaders = {}) {\n let parsedUrl;\n let queryParams = '?';\n\n queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties);\n\n try {\n // Require files only if required in respective Engine i.e. Node / Browser\n if (typeof process.env === 'undefined') {\n require('./HttpXMLUtil').sendCall(\n properties,\n queryParams,\n { successCallback: responseCallback },\n customHeaders\n );\n } else {\n const url = require('url');\n\n parsedUrl = url.parse(properties.url);\n\n require('./HttpHandlerUtil').sendGetCall(\n parsedUrl,\n queryParams,\n null,\n (error, response) => {\n this.handleGetResponse(properties, error, response);\n if (responseCallback) {\n responseCallback(error, response);\n }\n },\n customHeaders\n );\n }\n } catch (err) {\n let endPoint = properties.url;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file: FileNameEnum.EventDispatcher,\n endPoint,\n err\n })\n );\n }\n\n return false;\n },\n\n handleGetResponse: function(properties, error, response) {\n if (error) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file,\n endPoint: response.endPoint,\n err: error\n })\n );\n return false;\n } else {\n const baseParams = {\n file,\n endPoint: response.endPoint,\n accountId: properties && properties.account_id\n };\n let params = {};\n if (baseParams.endPoint.includes('push')) {\n let customVariables = JSON.parse(properties.tags).u;\n params = Object.assign({}, baseParams, { customVariables: customVariables });\n params.mainKeys = `customDimension:${JSON.stringify(params.customVariables)}`;\n } else {\n params = Object.assign({}, baseParams, {\n campaignId: properties && properties.experiment_id,\n variationId: properties && properties.combination\n });\n params.mainKeys = `campaignId:${params.campaignId} and variationId:${params.variationId}`;\n }\n logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params));\n return true;\n }\n },\n\n dispatchPostCall: function(properties, payload, { responseCallback }, customHeaders = {}) {\n let parsedUrl;\n let queryParams = '?';\n\n queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties);\n\n try {\n // Require files only if required in respective Engine i.e. Node / Browser\n\n if (typeof process.env === 'undefined') {\n if (typeof XMLHttpRequest === 'undefined') {\n return require('./FetchUtil')\n .send({\n method: 'POST',\n url: `${properties.url}${queryParams}`,\n payload,\n customHeaders\n })\n .then(() => {\n this.handlePostResponse(properties, payload);\n if (responseCallback) {\n responseCallback(null, { status: 'success' });\n }\n })\n .catch(error => {\n this.handlePostResponse(properties, payload, error);\n responseCallback(error, { status: 'failure' });\n });\n }\n\n return require('./XhrUtil')\n .send({\n method: 'POST',\n url: `${properties.url}${queryParams}`,\n payload,\n customHeaders,\n logger\n })\n .then(() => {\n this.handlePostResponse(properties, payload);\n if (responseCallback) {\n responseCallback(null, { status: 'success' });\n }\n })\n .catch(error => {\n this.handlePostResponse(properties, payload, error);\n responseCallback(error, { status: 'failure' });\n });\n } else {\n const url = require('url');\n\n parsedUrl = url.parse(properties.url);\n\n return new Promise(resolve => {\n require('./HttpHandlerUtil').sendPostCall(\n parsedUrl,\n payload,\n queryParams,\n null,\n error => {\n const result = this.handlePostResponse(properties, payload, error);\n if (responseCallback) {\n responseCallback(error, { status: 'success' });\n }\n resolve(result);\n },\n customHeaders\n );\n });\n }\n } catch (err) {\n let endPoint = properties.url;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file: FileNameEnum.EventDispatcherUtil,\n endPoint,\n err\n })\n );\n }\n\n return Promise.resolve(false);\n },\n\n handlePostResponse: function(properties, payload, error) {\n let endPoint = properties.url;\n\n if (error) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file,\n endPoint: endPoint,\n err: error\n })\n );\n return false;\n } else {\n let event = `${properties.en} event`;\n if (properties.en === EventEnum.VWO_SYNC_VISITOR_PROP) {\n delete payload.d.visitor.props.vwo_fs_environment;\n event = `visitor property:${JSON.stringify(payload.d.visitor.props)}`;\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS_FOR_EVENT_ARCH, {\n file,\n endPoint,\n accountId: properties.a,\n event: event\n })\n );\n\n return true;\n }\n }\n};\n\nmodule.exports = EventDispatcher;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst file = FileNameEnum.HttpXMLUtil;\n\nconst noop = () => {};\n\nconst printLog = properties => {\n const baseParams = {\n file,\n endPoint: properties.url,\n accountId: properties && properties.account_id\n };\n let params = {};\n if (baseParams.endPoint.includes('push')) {\n let customVariables = JSON.parse(properties.tags).u;\n params = Object.assign({}, baseParams, { customVariables: customVariables });\n params.mainKeys = `customDimension:${JSON.stringify(params.customVariables)}`;\n } else {\n params = Object.assign({}, baseParams, {\n campaignId: properties && properties.experiment_id,\n variationId: properties && properties.combination\n });\n params.mainKeys = `campaignId:${params.campaignId} and variationId:${params.variationId}`;\n }\n logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params));\n};\n\nconst HttpXMLUtil = {\n sendCall: function(properties, queryParams, options = {}, customHeaders = {}) {\n let endPoint = `${properties.url}${queryParams}`;\n\n let { successCallback, errorCallback } = options;\n\n errorCallback = errorCallback || successCallback;\n\n let isCallbackCalled = false;\n if (typeof XMLHttpRequest === 'undefined') {\n // if (typeof Image === 'undefined') {\n fetch(endPoint, { method: 'GET', headers: customHeaders })\n .then(() => {\n if (isCallbackCalled) {\n return;\n }\n isCallbackCalled = true;\n successCallback(null, { status: 'success' });\n })\n .catch(_err => {\n if (isCallbackCalled) {\n return;\n }\n isCallbackCalled = true;\n errorCallback(null, { status: 'success' });\n printLog(properties);\n });\n\n return;\n }\n this.handleGetCall(\n properties,\n queryParams,\n successCallback,\n errorCallback,\n endPoint,\n isCallbackCalled,\n customHeaders\n );\n },\n\n handleGetCall: function(\n properties,\n queryParams,\n successCallback,\n errorCallback,\n endPoint,\n isCallbackCalled,\n customHeaders = {}\n ) {\n successCallback = successCallback || noop;\n errorCallback = errorCallback || noop;\n\n const xhr = new XMLHttpRequest();\n\n xhr.open('GET', endPoint, true);\n // Set custom headers using setRequestHeader\n for (var headerName in customHeaders) {\n if (customHeaders.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, customHeaders[headerName]);\n }\n }\n console.log('Headers added to the request:', xhr.getAllResponseHeaders());\n\n xhr.onload = function() {\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = xhr.responseText;\n successCallback(response);\n printLog(properties);\n } else {\n errorCallback(xhr.statusText);\n printLog(properties);\n }\n };\n\n xhr.onerror = function() {\n errorCallback(xhr.statusText);\n printLog(properties);\n };\n\n xhr.send();\n }\n};\nmodule.exports = HttpXMLUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst HeadersEnum = {\n USER_AGENT: 'X-Device-User-Agent',\n IP: 'VWO-X-Forwarded-For'\n};\n\nmodule.exports = HeadersEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst FunctionUtil = require('../utils/FunctionUtil');\nconst SettingsFileUtil = require('../utils/SettingsFileUtil');\n\nconst logging = require('./logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst validateSettingsFile = require('../schemas/SettingsFileSchema');\nconst { isObject } = require('../utils/DataTypeUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.SettingsFileManager;\n\nclass SettingsFileManager {\n // PRIVATE METHODS\n\n constructor(config) {\n if (config) {\n if (\n (config.settingsFile && isObject(config.settingsFile.campaigns)) ||\n (config.settingsFile && !config.settingsFile.campaigns)\n ) {\n config.settingsFile.campaigns = [];\n }\n\n this._configObj = config;\n this._clonedSettingsFile = config.settingsFile ? FunctionUtil.cloneObject(config.settingsFile) : null;\n } else {\n this._configObj = null;\n this._clonedSettingsFile = null;\n }\n }\n\n _setVariationBucketing(campaign) {\n CampaignUtil.setVariationAllocation(campaign);\n }\n\n // PUBLIC METHODS\n\n isSettingsFileValid() {\n if (!this._configObj || !this._clonedSettingsFile) {\n return false;\n }\n let isValidSettingsFile = validateSettingsFile(this._clonedSettingsFile);\n\n if (!isValidSettingsFile) {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_CORRUPTED, {\n file\n })\n );\n\n return false;\n }\n\n return true;\n }\n\n checkAndPoll() {\n if (!this._configObj.pollingInterval || !this._configObj.sdkKey) {\n return;\n }\n\n let lastSettingsFile = JSON.stringify(this._clonedSettingsFile);\n setInterval(() => {\n SettingsFileUtil.get(this._clonedSettingsFile.accountId, this._configObj.sdkKey)\n .then(latestSettingsFile => {\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SUCCESS, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n const stringifiedLatestSettingsFile = JSON.stringify(latestSettingsFile);\n\n if (stringifiedLatestSettingsFile !== lastSettingsFile) {\n lastSettingsFile = stringifiedLatestSettingsFile;\n\n this.updateSettingsFile(latestSettingsFile);\n\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SETTINGS_FILE_UPDATED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n } else {\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SETTINGS_FILE_NOT_UPDATED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n }\n })\n .catch(_e => {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.POLLING_FAILED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n });\n }, this._configObj.pollingInterval);\n\n this._configObj.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.POLLING_SETTINGS_FILE_REGISTERED, {\n file,\n pollingInterval: this._configObj.pollingInterval\n })\n );\n }\n processSettingsFile() {\n let settingsFile = this._clonedSettingsFile;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n let campaign = settingsFile.campaigns[i];\n\n this._setVariationBucketing(campaign);\n }\n\n this._configObj.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SETTINGS_FILE_PROCESSED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n\n return settingsFile;\n }\n\n /**\n * Fetch latest settings-file and update so that vwoClientInstance could use latest settings\n * Helpful especially when using webhooks\n *\n * @param {Number} accountId\n * @param {String} sdkKey\n *\n * @return {Promise}\n */\n getAndUpdateSettingsFile(accountId = this._clonedSettingsFile.accountId, sdkKey = this._clonedSettingsFile.sdkKey) {\n return new Promise((resolve, _reject) => {\n SettingsFileUtil.get(accountId, sdkKey, null, { isViaWebhook: true })\n .then(settings => {\n this.updateSettingsFile(settings);\n resolve(settings);\n })\n .catch(_err => {});\n });\n }\n\n /**\n * Update the settings-file on the instance so that latest settings could be used from next hit onwards\n * @param {Object} settings\n */\n updateSettingsFile(settings) {\n this._clonedSettingsFile = FunctionUtil.cloneObject(settings);\n this.processSettingsFile();\n }\n\n getConfig() {\n return this._configObj;\n }\n\n getSettingsFile(api) {\n if (!this._clonedSettingsFile) {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_HAS_CORRUPTED_SETTINGS_FILE, {\n file,\n api\n })\n );\n }\n return this._clonedSettingsFile;\n }\n}\nmodule.exports = SettingsFileManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet { validate, number, string, boolean, array, object, optional, union, type, record } = require('superstruct');\n\nconst campaignGoalSchema = type({\n id: union([number(), string()]),\n identifier: string(),\n type: string(),\n revenueProp: optional(string()),\n mca: optional(union([number(), string()]))\n});\n\nconst variableObjectSchema = type({\n id: union([number(), string()]),\n type: string(),\n key: string(),\n value: union([number(), string(), boolean()])\n});\n\nconst campaignVariationSchema = type({\n id: union([number(), string()]),\n name: string(),\n weight: union([number(), string()]),\n changes: optional(object()),\n segments: optional(object()),\n variables: optional(union([object(), array(variableObjectSchema)])),\n isFeatureEnabled: optional(boolean()),\n startVariationAllocation: optional(number()),\n endVariationAllocation: optional(number())\n});\n\nconst campaignObjectSchema = type({\n id: union([number(), string()]),\n type: string(),\n key: string(),\n status: string(),\n name: optional(string()),\n isBucketingSeedEnabled: optional(boolean()),\n percentTraffic: number(),\n goals: union([object(), array(campaignGoalSchema)]),\n variations: union([object(), array(campaignVariationSchema)]),\n variables: optional(union([object(), array(variableObjectSchema)])),\n segments: object(),\n isForcedVariationEnabled: optional(boolean()),\n isUserListEnabled: optional(boolean()),\n isMAB: optional(boolean())\n});\n\nconst groupSchema = type({\n et: optional(string()),\n p: optional(array(number())),\n wt: optional(record(string(), number())),\n groupName: string(),\n campaigns: array(number())\n});\n\nconst settingsFileSchema = type({\n sdkKey: optional(string()),\n version: union([number(), string()]),\n accountId: union([number(), string()]),\n campaigns: array(campaignObjectSchema),\n campaignGroups: optional(record(string(), number())),\n isEventArchEnabled: optional(boolean()),\n collectionPrefix: optional(string()),\n groups: optional(union([object(), record(string(), groupSchema)]))\n});\n\nconst validateSettingsFile = function(settings) {\n const [error] = validate(settings, settingsFileSchema);\n return !error;\n};\n\nmodule.exports = validateSettingsFile;\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/**\n * Convert a validation result to an iterable of failures.\n */\nfunction* toFailures(result, context) {\n if (result === true) ; else if (result === false) {\n yield context.fail();\n } else {\n yield* result;\n }\n}\n/**\n * Shifts (removes and returns) the first value from the `input` iterator.\n * Like `Array.prototype.shift()` but for an `Iterator`.\n */\n\nfunction iteratorShift(input) {\n const {\n done,\n value\n } = input.next();\n return done ? undefined : value;\n}\n\n/**\n * `Struct` objects encapsulate the schema for a specific data type (with\n * optional coercion). You can then use the `assert`, `is` or `validate` helpers\n * to validate unknown data against a struct.\n */\n\nclass Struct {\n constructor(props) {\n const {\n type,\n schema,\n coercer = value => value,\n validator = () => [],\n refiner = () => []\n } = props;\n this.type = type;\n this.schema = schema;\n this.coercer = coercer;\n this.validator = validator;\n this.refiner = refiner;\n }\n\n}\n/**\n * `StructError` objects are thrown (or returned) by Superstruct when its\n * validation fails. The error represents the first error encountered during\n * validation. But they also have an `error.failures` property that holds\n * information for all of the failures encountered.\n */\n\nclass StructError extends TypeError {\n constructor(failure, moreFailures) {\n const {\n path,\n value,\n type,\n branch\n } = failure,\n rest = _objectWithoutProperties(failure, [\"path\", \"value\", \"type\", \"branch\"]);\n\n const message = `Expected a value of type \\`${type}\\`${path.length ? ` for \\`${path.join('.')}\\`` : ''} but received \\`${JSON.stringify(value)}\\`.`;\n let failuresResult;\n\n function failures() {\n if (!failuresResult) {\n failuresResult = [failure, ...moreFailures];\n }\n\n return failuresResult;\n }\n\n super(message);\n this.value = value;\n Object.assign(this, rest);\n this.type = type;\n this.path = path;\n this.branch = branch;\n this.failures = failures;\n this.stack = new Error().stack;\n this.__proto__ = StructError.prototype;\n }\n\n}\n/**\n * Assert that a value passes a `Struct`, throwing if it doesn't.\n */\n\nfunction assert(value, struct) {\n const result = validate(value, struct);\n\n if (result[0]) {\n throw result[0];\n }\n}\n/**\n * Coerce a value with the coercion logic of `Struct` and validate it.\n */\n\nfunction coerce(value, struct) {\n const ret = struct.coercer(value);\n assert(ret, struct);\n return ret;\n}\n/**\n * Check if a value passes a `Struct`.\n */\n\nfunction is(value, struct) {\n const result = validate(value, struct);\n return !result[0];\n}\n/**\n * Validate a value against a `Struct`, returning an error if invalid.\n */\n\nfunction validate(value, struct, coercing = false) {\n if (coercing) {\n value = struct.coercer(value);\n }\n\n const failures = check(value, struct);\n const failure = iteratorShift(failures);\n\n if (failure) {\n const error = new StructError(failure, failures);\n return [error, undefined];\n } else {\n return [undefined, value];\n }\n}\n/**\n * Check a value against a `Struct`, returning an iterable of failures.\n */\n\nfunction* check(value, struct, path = [], branch = []) {\n const {\n type\n } = struct;\n const ctx = {\n value,\n type,\n branch,\n path,\n\n fail(props = {}) {\n return _objectSpread2({\n value,\n type,\n path,\n branch: [...branch, value]\n }, props);\n },\n\n check(v, s, parent, key) {\n const p = parent !== undefined ? [...path, key] : path;\n const b = parent !== undefined ? [...branch, parent] : branch;\n return check(v, s, p, b);\n }\n\n };\n const failures = toFailures(struct.validator(value, ctx), ctx);\n const failure = iteratorShift(failures);\n\n if (failure) {\n yield failure;\n yield* failures;\n } else {\n yield* toFailures(struct.refiner(value, ctx), ctx);\n }\n}\n\n/**\n * Augment a `Struct` to add an additional coercion step to its input.\n */\n\nfunction coercion(struct, coercer) {\n const fn = struct.coercer;\n return new Struct(_objectSpread2(_objectSpread2({}, struct), {}, {\n coercer: value => {\n return fn(coercer(value));\n }\n }));\n}\n/**\n * Augment a struct to coerce a default value for missing values.\n *\n * Note: You must use `coerce(value, Struct)` on the value before validating it\n * to have the value defaulted!\n */\n\nfunction defaulted(S, fallback, strict) {\n return coercion(S, x => {\n const f = typeof fallback === 'function' ? fallback() : fallback;\n\n if (x === undefined) {\n return f;\n }\n\n if (strict !== true && isPlainObject(x) && isPlainObject(f)) {\n const ret = _objectSpread2({}, x);\n\n let changed = false;\n\n for (const key in f) {\n if (ret[key] === undefined) {\n ret[key] = f[key];\n changed = true;\n }\n }\n\n if (changed) {\n return ret;\n }\n }\n\n return x;\n });\n}\n/**\n * Coerce a value to mask its properties to only that defined in the struct.\n */\n\nfunction masked(S) {\n return coercion(S, x => {\n if (!isPlainObject(x)) {\n return x;\n }\n\n const ret = {};\n\n for (const key in S.schema) {\n ret[key] = x[key];\n }\n\n return ret;\n });\n}\n/**\n * Check if a value is a plain object.\n */\n\nfunction isPlainObject(value) {\n if (Object.prototype.toString.call(value) !== '[object Object]') {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Augment a string or array struct to constrain its length to zero.\n */\n\nfunction empty(S) {\n return refinement(S, `${S.type} & Empty`, value => {\n return value.length === 0;\n });\n}\n/**\n * Augment a string or array struct to constrain its length to being between a\n * minimum and maximum size.\n */\n\nfunction length(S, min, max) {\n return refinement(S, `${S.type} & Length<${min},${max}>`, value => {\n return min < value.length && value.length < max;\n });\n}\n/**\n * Refine a string struct to match a specific regexp pattern.\n */\n\nfunction pattern(S, regexp) {\n return refinement(S, `${S.type} & Pattern<${regexp.source}>`, value => {\n return regexp.test(value);\n });\n}\n/**\n * Augment a `Struct` to add an additional refinement to the validation.\n */\n\nfunction refinement(struct, type, refiner) {\n const fn = struct.refiner;\n return new Struct(_objectSpread2(_objectSpread2({}, struct), {}, {\n type,\n\n *refiner(value, fail) {\n yield* toFailures(fn(value, fail), fail);\n yield* toFailures(refiner(value, fail), fail);\n }\n\n }));\n}\n\n/**\n * Validate any value.\n */\n\nfunction any() {\n return struct('any', () => true);\n}\nfunction array(Element) {\n return new Struct({\n type: `Array<${Element ? Element.type : 'unknown'}>`,\n schema: Element,\n coercer: value => {\n return Element && Array.isArray(value) ? value.map(v => coerce(v, Element)) : value;\n },\n\n *validator(value, ctx) {\n if (!Array.isArray(value)) {\n yield ctx.fail();\n return;\n }\n\n if (Element) {\n for (const [i, v] of value.entries()) {\n yield* ctx.check(v, Element, value, i);\n }\n }\n }\n\n });\n}\n/**\n * Validate that boolean values.\n */\n\nfunction boolean() {\n return struct('boolean', value => {\n return typeof value === 'boolean';\n });\n}\n/**\n * Validate that `Date` values.\n *\n * Note: this also ensures that the value is *not* an invalid `Date` object,\n * which can occur when parsing a date fails but still returns a `Date`.\n */\n\nfunction date() {\n return struct('Date', value => {\n return value instanceof Date && !isNaN(value.getTime());\n });\n}\n/**\n * Validate that a value dynamically, determing which struct to use at runtime.\n */\n\nfunction dynamic(fn) {\n return struct('Dynamic<...>', (value, ctx) => {\n return ctx.check(value, fn(value, ctx));\n });\n}\nfunction enums(values) {\n return struct(`Enum<${values.map(toLiteralString)}>`, value => {\n return values.includes(value);\n });\n}\n/**\n * Validate that a value is a function.\n */\n\nfunction func() {\n return struct('Function', value => {\n return typeof value === 'function';\n });\n}\n/**\n * Validate that a value is an instance of a class.\n */\n\nfunction instance(Class) {\n return struct(`InstanceOf<${Class.name}>`, value => {\n return value instanceof Class;\n });\n}\nfunction intersection(Structs) {\n return struct(Structs.map(s => s.type).join(' & '), function* (value, ctx) {\n for (const S of Structs) {\n yield* ctx.check(value, S);\n }\n });\n}\n/**\n * Validate a value lazily, by constructing the struct right before the first\n * validation. This is useful for cases where you want to have self-referential\n * structs for nested data structures.\n */\n\nfunction lazy(fn) {\n let S;\n return struct('Lazy<...>', (value, ctx) => {\n if (!S) {\n S = fn();\n }\n\n return ctx.check(value, S);\n });\n}\nfunction literal(constant) {\n return struct(`Literal<${toLiteralString(constant)}>`, value => {\n return value === constant;\n });\n}\n/**\n * Validate that a value is a map with specific key and value entries.\n */\n\nfunction map(Key, Value) {\n return struct(`Map<${Key.type},${Value.type}>`, function* (value, ctx) {\n if (!(value instanceof Map)) {\n yield ctx.fail();\n return;\n }\n\n for (const [k, v] of value.entries()) {\n yield* ctx.check(k, Key, value, k);\n yield* ctx.check(v, Value, value, k);\n }\n });\n}\n/**\n * Validate that a value always fails.\n */\n\nfunction never() {\n return struct('never', () => false);\n}\n/**\n * Augment a struct to make it accept `null` values.\n */\n\nfunction nullable(S) {\n return new Struct({\n type: `${S.type} | null`,\n schema: S.schema,\n validator: (value, ctx) => {\n return value === null || ctx.check(value, S);\n }\n });\n}\n/**\n * Validate that a value is a number.\n */\n\nfunction number() {\n return struct(`number`, value => {\n return typeof value === 'number' && !isNaN(value);\n });\n}\nfunction object(Structs) {\n const knowns = Structs ? Object.keys(Structs) : [];\n const Never = never();\n return new Struct({\n type: Structs ? `Object<{${knowns.join(',')}}>` : 'Object',\n schema: Structs ? Structs : null,\n coercer: Structs ? createObjectCoercer(Structs) : x => x,\n\n *validator(value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n if (Structs) {\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n\n for (const key of unknowns) {\n const v = value[key];\n yield* ctx.check(v, Never, value, key);\n }\n }\n }\n\n });\n}\n/**\n * Augment a struct to make it optionally accept `undefined` values.\n */\n\nfunction optional(S) {\n return new Struct({\n type: `${S.type}?`,\n schema: S.schema,\n validator: (value, ctx) => {\n return value === undefined || ctx.check(value, S);\n }\n });\n}\n/**\n * Validate that a partial object with specific entry values.\n */\n\nfunction partial(Structs) {\n if (Structs instanceof Struct) {\n Structs = Structs.schema;\n }\n\n const knowns = Object.keys(Structs);\n const Never = never();\n return new Struct({\n type: `Partial<{${knowns.join(',')}}>`,\n schema: Structs,\n coercer: createObjectCoercer(Structs),\n\n *validator(value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n\n if (!(key in value)) {\n continue;\n }\n\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n\n for (const key of unknowns) {\n const v = value[key];\n yield* ctx.check(v, Never, value, key);\n }\n }\n\n });\n}\n/**\n * Validate that a value is a record with specific key and\n * value entries.\n */\n\nfunction record(Key, Value) {\n return struct(`Record<${Key.type},${Value.type}>`, function* (value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n for (const k in value) {\n const v = value[k];\n yield* ctx.check(k, Key, value, k);\n yield* ctx.check(v, Value, value, k);\n }\n });\n}\n/**\n * Validate that a set of values matches a specific type.\n */\n\nfunction set(Element) {\n return struct(`Set<${Element.type}>`, (value, ctx) => {\n if (!(value instanceof Set)) {\n return false;\n }\n\n for (const val of value) {\n const [failure] = ctx.check(val, Element);\n\n if (failure) {\n return false;\n }\n }\n\n return true;\n });\n}\n/**\n * Validate that a value is a string.\n */\n\nfunction string() {\n return struct('string', value => {\n return typeof value === 'string';\n });\n}\n/**\n * Define a `Struct` instance with a type and validation function.\n */\n\nfunction struct(name, validator) {\n return new Struct({\n type: name,\n validator,\n schema: null\n });\n}\nfunction tuple(Elements) {\n const Never = never();\n return struct(`[${Elements.map(s => s.type).join(',')}]`, function* (value, ctx) {\n if (!Array.isArray(value)) {\n yield ctx.fail();\n return;\n }\n\n for (const [index, Element] of Elements.entries()) {\n const v = value[index];\n yield* ctx.check(v, Element, value, index);\n }\n\n if (value.length > Elements.length) {\n const index = Elements.length;\n const v = value[index];\n yield* ctx.check(v, Never, value, index);\n }\n });\n}\n/**\n * Validate that a value matches a specific strutural interface, like the\n * structural typing that TypeScript uses.\n */\n\nfunction type(Structs) {\n const keys = Object.keys(Structs);\n return struct(`Type<{${keys.join(',')}}>`, function* (value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n for (const key of keys) {\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n });\n}\nfunction union(Structs) {\n return struct(`${Structs.map(s => s.type).join(' | ')}`, function* (value, ctx) {\n for (const S of Structs) {\n const [...failures] = ctx.check(value, S);\n\n if (failures.length === 0) {\n return;\n }\n }\n\n yield ctx.fail();\n });\n}\n/**\n * Convert a value to a literal string.\n */\n\nfunction toLiteralString(value) {\n return typeof value === 'string' ? `\"${value.replace(/\"/g, '\"')}\"` : `${value}`;\n}\n/**\n * Coerce the values of an object-like struct.\n */\n\n\nfunction createObjectCoercer(Structs) {\n const knowns = Object.keys(Structs);\n return value => {\n if (typeof value !== 'object' || value == null) {\n return value;\n }\n\n const ret = {};\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n const Value = Structs[key];\n const v = value[key];\n ret[key] = coerce(v, Value);\n }\n\n for (const key of unknowns) {\n ret[key] = value[key];\n }\n\n return ret;\n };\n}\n\nexport { Struct, StructError, any, array, assert, boolean, coerce, coercion, date, defaulted, dynamic, empty, enums, func, instance, intersection, is, lazy, length, literal, map, masked, never, nullable, number, object, optional, partial, pattern, record, refinement, set, string, struct, tuple, type, union, validate };\n//# sourceMappingURL=index.es.js.map\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { LogManager } = require('./logging');\n\nclass UsageStats {\n constructor() {\n this.data = {};\n }\n\n /**\n * Collect the usage stats from the params passed at the time of instantiating VWO and send them to VWO Server\n * @param {Object} config config passed at the time of instantiation.\n */\n collectUsageStats(config) {\n this.data['eb'] = Number(!!config.batchEvents);\n this.data['ig'] = Number(!!config.integrations);\n this.data['ss'] = Number(!!config.userStorageService);\n this.data['cl'] = Number(!(config.logger instanceof LogManager));\n this.data['ll'] = Number(config.logging && config.logging.level);\n this.data['tr'] = Number(config.shouldTrackReturningUser);\n this.data['gt'] = Number(!!config.goalTypeToTrack);\n this.data['pi'] = Number(!!config.pollingInterval);\n\n Object.keys(this.data).forEach(function(key) {\n if (!this.data[key]) {\n delete this.data[key];\n }\n }, this);\n }\n\n /**\n * Get the collected usage stats.\n * @returns collected usage stats data\n */\n getUsageStats() {\n if (Object.keys(this.data).length > 0) {\n this.data['_l'] = 1;\n }\n return this.data;\n }\n}\n\nmodule.exports = UsageStats;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://vwoSdk/webpack/universalModuleDefinition","webpack://vwoSdk/webpack/bootstrap","webpack://vwoSdk/./lib/services/logging/index.js","webpack://vwoSdk/./lib/utils/DataTypeUtil.js","webpack://vwoSdk/./lib/enums/FileNameEnum.js","webpack://vwoSdk/./lib/constants/index.js","webpack://vwoSdk/./lib/utils/FunctionUtil.js","webpack://vwoSdk/./lib/enums/ApiEnum.js","webpack://vwoSdk/./lib/utils/ValidateUtil.js","webpack://vwoSdk/./lib/utils/CampaignUtil.js","webpack://vwoSdk/./lib/utils/DecisionUtil.js","webpack://vwoSdk/./lib/enums/GoalTypeEnum.js","webpack://vwoSdk/./lib/utils/ObjectUtil.js","webpack://vwoSdk/./lib/utils/ImpressionUtil.js","webpack://vwoSdk/./lib/enums/EventEnum.js","webpack://vwoSdk/./lib/utils/VWOFeatureFlags.js","webpack://vwoSdk/./lib/enums/UrlEnum.js","webpack://vwoSdk/./lib/core/BucketingService.js","webpack://vwoSdk/./lib/enums/LogLevelEnum.js","webpack://vwoSdk/./lib/enums/CampaignTypeEnum.js","webpack://vwoSdk/./lib/enums/segment/index.js","webpack://vwoSdk/./lib/services/HooksManager.js","webpack://vwoSdk/./lib/utils/UuidUtil.js","webpack://vwoSdk/./lib/services/UrlService.js","webpack://vwoSdk/./lib/utils/FetchUtil.js","webpack://vwoSdk/./lib/utils/XhrUtil.js","webpack://vwoSdk/./lib/utils/SettingsFileUtil.js","webpack://vwoSdk/./lib/index.js","webpack://vwoSdk/./lib/VWO.js","webpack://vwoSdk/./lib/api/index.js","webpack://vwoSdk/./lib/api/activate.js","webpack://vwoSdk/./lib/core/VariationDecider.js","webpack://vwoSdk/./lib/enums/DataTypeEnum.js","webpack://vwoSdk/./node_modules/murmurhash/murmurhash.js","webpack://vwoSdk/./lib/services/logging/LoggingManager.js","webpack://vwoSdk/./lib/enums/AnsiColorEnum.js","webpack://vwoSdk/./lib/utils/LogMessageUtil.js","webpack://vwoSdk/./lib/services/logging/ConsoleLogManager.js","webpack://vwoSdk/./lib/enums/StatusEnum.js","webpack://vwoSdk/./lib/core/SegmentEvaluator.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandTypesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperatorTypesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandValueTypeRegexesEnum.js","webpack://vwoSdk/./lib/enums/segment/SegmentOperandValuesEnum.js","webpack://vwoSdk/./lib/utils/SegmentUtil.js","webpack://vwoSdk/./lib/enums/HooksEnum.js","webpack://vwoSdk/./node_modules/uuid/v5.js","webpack://vwoSdk/./node_modules/uuid/lib/v35.js","webpack://vwoSdk/./node_modules/uuid/lib/bytesToUuid.js","webpack://vwoSdk/./node_modules/uuid/lib/sha1-browser.js","webpack://vwoSdk/./lib/api/getVariation.js","webpack://vwoSdk/./lib/api/track.js","webpack://vwoSdk/./lib/api/isFeatureEnabled.js","webpack://vwoSdk/./lib/api/getFeatureVariableValue.js","webpack://vwoSdk/./lib/utils/FeatureUtil.js","webpack://vwoSdk/./lib/enums/FeatureVariableTypeEnum.js","webpack://vwoSdk/./lib/api/push.js","webpack://vwoSdk/./lib/services/EventQueue.js","webpack://vwoSdk/./lib/utils/EventDispatcherUtil.js","webpack://vwoSdk/./lib/utils/HttpXMLUtil.js","webpack://vwoSdk/./lib/enums/HeadersEnum.js","webpack://vwoSdk/./lib/services/SettingsFileManager.js","webpack://vwoSdk/./lib/schemas/SettingsFileSchema.js","webpack://vwoSdk/./node_modules/superstruct/lib/index.es.js","webpack://vwoSdk/./lib/services/UsageStats.js"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","logging","require","DataTypeUtil","_toStringValue","val","toString","isNumber","isString","isObject","isFunction","isBoolean","isPromise","isUndefined","isNull","isArray","INDEX","VWO","API","Activate","GetVariation","Track","IsFeatureEnabled","GetFeatureVariableValue","Push","SegmentEvaluator","BucketingService","VariationDecider","ConsoleLogManager","EventQueue","LoggingManager","SettingsFileManager","BatchEventsQueue","CampaignUtil","EventDispatcher","EventDispatcherUtil","FeatureUtil","Functionutil","ImpressionUtil","UuidUtil","ValidateUtil","DecisionUtil","HttpHandlerUtil","HttpImageUtil","HttpXMLUtil","UsageStatsUtil","packageFile","SDK_NAME","version","SDK_VERSION","PLATFORM","SEED_VALUE","MAX_TRAFFIC_PERCENT","MAX_TRAFFIC_VALUE","MAX_EVENTS_PER_REQUEST","DEFAULT_EVENTS_PER_REQUEST","DEFAULT_REQUEST_TIME_INTERVAL","STATUS_RUNNING","SEED_URL","HTTP_PROTOCOL","HTTPS_PROTOCOL","SDK_QUERY_PARAM","SDK_VERSION_QUERY_PARAM","FunctionUtil","cloneObject","obj","JSON","parse","stringify","getRandomNumber","Math","random","getCurrentUnixTimestamp","ceil","Date","getCurrentUnixTimestampInMillis","matchWithRegex","string","regex","match","RegExp","err","FileNameEnum","logger","getLogger","LogLevelEnum","LogMessageEnum","LogMessageUtil","file","log","ERROR","build","ERROR_MESSAGES","SEGMENTATION_REGEX_CREATION_FAILED","getCurrentTime","toISOString","convertObjectKeysToString","properties","excludedProperties","queryParams","prop","indexOf","objectValues","values","push","LAUNCH","ACTIVATE","GET_VARIATION_NAME","TRACK","IS_FEATURE_ENABLED","GET_FEATURE_VARIABLE_VALUE","PUSH","DataTypeEnum","ApiEnum","GoalTypeEnum","APIMethodArgumentsValidationEnum","campaignKey","userId","customVariables","variationTargetingVariables","userStorageData","shouldTrackReturningUser","metaData","type","STRING","OBJECT","BOOLEAN","goalIdentifier","goalTypeToTrack","ALL","STRING_NULL_UNDEFINED_ARRAY","variableKey","tagKey","tagValue","customDimensionMap","isValidValue","undefined","isValidString","isValidNumber","isValidFunction","isValidBoolean","isValidObject","areValidParamsForAPIMethod","argsObj","args","method","validators","length","argConfig","argValue","NUMBER","every","VWOFeatureFlags","Constants","CampaignTypeEnum","_getVariationBucketRange","variationWeight","startRange","min","getCampaignBasedOnId","settingsFile","campaignId","campaign","campaigns","parseInt","id","scaleVariationWeights","variations","totalWeight","reduce","acc","variation","weight","forEach","getCampaign","getCampaignsForKeys","campaignKeys","getCampaignsForGoal","goal","getCampaignGoal","CAMPAIGN_NOT_FOUND_FOR_GOAL","getCampaignStatus","status","toLowerCase","isCampaignRunning","validateCampaign","keys","setVariationAllocation","numberOfVariations","currentAllocation","assignRangeValues","DEBUG","DEBUG_MESSAGES","VARIATION_RANGE_ALLOCATION","variationName","start","startVariationAllocation","end","endVariationAllocation","setCampaignAllocation","stepFactor","desiredCampaignGoal","goals","identifier","getCampaignVariation","desiredVariation","getControlForCampaign","control","isFeatureTestCampaign","FEATURE_TEST","isFeatureRolloutCampaign","FEATURE_ROLLOUT","isAbCampaign","AB","isPartOfGroup","campaignGroups","groupId","groupName","groups","getGroupCampaigns","getBucketingSeed","isNB","getAll","isNBv2","isBucketingSeedEnabled","StatusEnum","HooksManager","HooksEnum","SegmentationTypeEnum","getVariation","config","isTrackUserAPI","isTrackGoalAPI","newGoalIdentifier","api","vwoUserId","generateFor","accountId","USER_UUID","uuid","decision","campaignType","campaignName","event","DECISION_TYPES","CAMPAIGN_DECISION","isForcedVariationEnabled","sdkVersion","source","assign","_vwoUserId","isUserListEnabled","whitelistedVariation","_checkForWhitelisting","then","data","asyncStorageConfig","Promise","resolve","_checkForUserStorage","response","isStoredVariation","variationWithoutStorageLookup","evaluateAndGetVariationWithoutStorage","_checkForPreSegmentation","isUserPartOfCampaign","campaignList","isWhitelistedOrStoredVariation","_checkForStorageAndWhitelisting","INFO","INFO_MESSAGES","MEG_CALLED_CAMPAIGN_NOT_WINNER","inEligibleCampaignKeys","eligibleCampaignKeys","getEligbleCampaigns","eligibleCampaigns","inEligibleCampaigns","MEG_ELIGIBLE_CAMPAIGNS","slice","inEligibleText","noOfEligibleCampaigns","noOfGroupCampaigns","megAlgoNumber","et","evaluateTrafficAndGetVariation","_normalizeAndFindWinningCampaign","_advancedAlgoFindWinningCampaign","_evaluateWhitelisting","disableLogs","targetedVariations","segments","PASSED","FAILED","SEGMENTATION_STATUS","segmentationType","SEGMENTATION_SKIPPED","_getVariation","calculateBucketValue","variationId","_getStoredUserData","userStorageMap","userStorageService","USER_STORAGE_SERVICE_NOT_CONFIGURED","GETTING_DATA_USER_STORAGE_SERVICE","_error","console","USER_STORAGE_SERVICE_GET_FAILED","error","_saveUserData","isSaved","set","SETTING_DATA_USER_STORAGE_SERVICE","USER_STORAGE_SERVICE_SET_FAILED","calledCampaign","otherCampaignWinner","some","groupCampaign","OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE","storedVariation","getVariationAllotted","USER_VARIATION_ALLOCATION_STATUS","execute","fromUserStorageService","isUserWhitelisted","isFeatureEnabled","variationString","whitelistingResult","WHITELISTING_SKIPPED","userData","_processAfterGettingFromStorage","USER_STORAGE_SERVICE_NO_STORED_DATA","GOT_STORED_VARIATION","storedGoalIdentifier","WARN","WARNING_MESSAGES","CAMPAIGN_NOT_ACTIVATED","apiName","reason","shortlistedCampaigns","floor","winnerCampaign","MEG_GOT_WINNER_CAMPAIGN","found","priorityOrder","wt","j","participatingCampaignList","clonedCampaign","REVENUE","CUSTOM","ObjectUtil","areObjectKeys","getKeyValue","map","UrlEnum","UrlService","getBaseProperties","configObj","sId","u","getPrimaryProperties","getReportingProperties","account_id","ap","buildEventForPushing","url","getBaseUrl","tags","encodeURIComponent","IMPRESSION_FOR_PUSH","_getStringifiedLogProperties","buildBatchEventForPushing","buildEventForTrackingUser","usageStats","visitorUserAgent","userIpAddress","experiment_id","combination","visitor_ua","visitor_ip","ed","TRACK_USER","IMPRESSION_FOR_TRACK_USER","buildBatchEventForTrackingUser","buildEventForTrackingGoal","revenue","goalId","TRACK_GOAL","IMPRESSION_FOR_TRACK_GOAL","buildBatchEventForTrackingGoal","sdkKey","getEventsBaseProperties","eventName","en","a","env","eTime","EVENTS","getEventBasePayload","props","vwo_sdkName","vwo_sdkVersion","vwo_envKey","msgId","visId","sessionId","time","visitor","vwo_fs_environment","getTrackUserPayloadData","isFirst","IMPRESSION_FOR_EVENT_ARCH_TRACK_USER","getTrackGoalPayloadData","metricMap","revenueValue","revenuePropList","eventProperties","metric","IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL","goalName","vwoMeta","size","revenueProp","isCustomEvent","getPushPayloadData","IMPRESSION_FOR_EVENT_ARCH_PUSH","logProperties","VWO_VARIATION_SHOWN","VWO_SYNC_VISITOR_PROP","init","isEventArchEnabled","BASE_URL","SETTINGS_URL","WEBHOOK_SETTINGS_URL","BATCH_EVENTS","Hasher","_generateBucketValue","hashValue","maxValue","multiplier","ratio","pow","multipliedValue","bucketValue","_getBucketValueForUser","seed","disableLog","v3","USER_HASH_BUCKET_VALUE","trafficAllocation","percentTraffic","valueAssignedToUser","isUserPart","USER_CAMPAIGN_ELIGIBILITY","bucketUserToVariation","isOB","isOBv2","_generateHashValue","USER_CAMPAIGN_BUCKET_VALUES","AnsiColorEnum","NOTSET","LogLevelColorInfoEnum","BOLD","WHITE","RESET","LIGHTBLUE","CYAN","YELLOW","RED","LogLevelInfoEnum","LogNumberLevel","_0","_1","_2","_3","_4","SegmentEnum","SegmentOperandTypes","SegmentOperatorTypes","SegmentOperandValueTypeRegexes","SegmentOperandValues","callback","integrations","uuidv5","VWO_NAMESPACE","URL","hash","userIdNamespace","generate","replace","toUpperCase","namespace","collectionPrefix","baseUrl","FetchUtil","_getStoredSettings","parsedSettings","isStoredData","getSettings","settings","info","warning","warn","send","payload","customHeaders","reject","options","headers","body","fetch","res","text","jsonData","setSettings","XhrUtil","xhr","XMLHttpRequest","xhrHandler","sendRequest","retries","maxRetries","delay","newHeaderName","timeout","onload","responseText","setTimeout","statusText","onerror","ontimeout","open","setRequestHeader","headerName","xhrOnLoad","xhrOnError","e","message","parsedXhrResponse","SettingsFileUtil","protocol","hostname","path","isViaWebhook","port","handleHttpRequest","statusCode","contentType","rawData","test","resume","setEncoding","on","chunk","handleHttpResponse","parsedData","setLogHandler","setLogLevel","logError","parameter","CONFIG_PARAMETER_INVALID","Error","logInfo","CONFIG_PARAMETER_USED","setLogger","getSettingsFile","launch","sdkConfig","isDevelopmentMode","includes","level","pollingInterval","batchEvents","returnPromiseFor","CONFIG_CORRUPTED","setLogColorMode","haveColoredLogs","CONFIG_CUSTOM_LOGGER_USED","CONFIG_LOG_LEVEL_SET","CONFIG_DEVELOPMENT_MODE_STATUS","SettingsFileService","UsageStats","getVariationName","optOut","redisStorage","settingsFileManager","isSettingsFileValid","CONFIG_VALID","eventQueue","checkAndPoll","collectUsageStats","getConfig","processSettingsFile","SDK_INITIALIZED","SETTINGS_FILE_INVALID","self","CONFIG_ASYNC_RETURN_PROMISE","activate","API_NOT_ENABLED","all","CONFIG_RETURN_PROMISE","responseCallback","_response","apiResponse","campaignSpecifier","track","trackResponse","counter","filter","Boolean","isFeatureEnabledApiResponse","getFeatureVariableValue","typeCastedValue","arguments","API_BAD_PARAMETERS","OPT_OUT_API_CALLED","_destroyInstanceVariables","batchEventsQueue","flushEvents","getAndUpdateSettingsFile","EventEnum","_validateAndReturnVariation","vwoInstance","result","DECISION_NO_VARIATION_ALLOTED","CAMPAIGN_USER_ALREADY_TRACKED","enqueue","getUsageStats","process","areParamsValid","userAgent","isMAB","CAMPAIGN_NOT_RUNNING","API_NOT_APPLICABLE","Bucketer","USER_ID_INVALID","getVariationOfCampaignForUser","USER_NOT_PART_OF_CAMPAIGN","USER_VARIATION_STATUS","MurmurHashV3","remainder","bytes","h1","h1b","c1","c2","k1","charCodeAt","murmur","v2","str","k","h","globalLogLevel","isColoredLogEnabled","globalLogHandler","LogManager","_customLog","getLogLevel","getLogColorMode","GREEN","nargs","template","index","logLevel","prefix","logMessage","shouldLog","consoleLog","targetLogLevel","logArguments","apply","operandCustomVariablesParser","operandUserParser","AND","OR","NOT","CUSTOM_VARIABLE","USER","evaluator","dsl","operator","subDsl","list","SEGMENTATION_ERROR","LOWER","LOWER_MATCH","WILDCARD","WILDCARD_MATCH","REGEX","REGEX_MATCH","STARTING_STAR","ENDING_STAR","GREATER_THAN_MATCH","GREATER_THAN_EQUAL_TO_MATCH","LESS_THAN_MATCH","LESS_THAN_EQUAL_TO_MATCH","LOWER_VALUE","STARTING_ENDING_STAR_VALUE","STARTING_STAR_VALUE","ENDING_STAR_VALUE","REGEX_VALUE","EQUAL_VALUE","GREATER_THAN_VALUE","GREATER_THAN_EQUAL_TO_VALUE","LESS_THAN_VALUE","LESS_THAN_EQUAL_TO_VALUE","extractOperandValue","operand","processValues","operandValue","processedOperandValue","parseFloat","processedTagValue","preProcessTagValue","preProcessOperandValue","operandType","startingStar","endingStar","operandKey","processedValues","endsWith","startsWith","pattern","extractResult","users","split","trim","v35","sha1","bytesToUuid","hashfunc","generateUUID","buf","offset","off","unescape","Array","stringToBytes","hex","uuidToBytes","TypeError","concat","idx","DNS","byteToHex","substr","bth","join","f","x","y","z","ROTL","K","H","msg","N","M","W","b","T","GOAL_TYPE_TO_TRACK_DEFAULT","_validateAndReturnTrackValue","events","areGlobalGoals","trackCampaignGoal","TRACK_API_GOAL_NOT_FOUND","logIncorrectParamsForRevenueGoal","mca","add","_validateAndReturnTrackEvent","CAMPAIGN_GOAL_ALREADY_TRACKED","TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL","Set","areAllPromises","item","dataArray","ans","_validateAndReturnFeatureEnabled","FEATURE_STATUS","_validateAndReturnFeaureVariable","variable","getVariableForFeature","getVariableValueForVariation","FEATURE_VARIABLE_VALUE","variableValue","FEATURE_VARIABLE_DEFAULT_VALUE","VARIABLE_NOT_FOUND","getTypeCastVariableValue","FeatureVariableTypeEnum","variableData","variables","variationVariable","variableType","INTEGER","isNaN","UNABLE_TO_CAST_VALUE","DOUBLE","PUSH_INVALID_PARAMS","TAG_KEY_LENGTH_EXCEEDED","TAG_VALUE_LENGTH_EXCEEDED","success","customDimensionKeys","HeadersEnum","running","queue","USER_AGENT","IP","dispatchPostCall","dispatchGetCall","EVENT_QUEUE","queueType","executeNext","shift","sendCall","successCallback","endPoint","IMPRESSION_FAILED","handleGetResponse","baseParams","params","mainKeys","IMPRESSION_SUCCESS","handlePostResponse","IMPRESSION_SUCCESS_FOR_EVENT_ARCH","noop","printLog","errorCallback","isCallbackCalled","handleGetCall","_err","validateSettingsFile","_configObj","_clonedSettingsFile","SETTINGS_FILE_CORRUPTED","lastSettingsFile","setInterval","latestSettingsFile","POLLING_SUCCESS","stringifiedLatestSettingsFile","updateSettingsFile","POLLING_SETTINGS_FILE_UPDATED","POLLING_SETTINGS_FILE_NOT_UPDATED","_e","POLLING_FAILED","POLLING_SETTINGS_FILE_REGISTERED","_setVariationBucketing","SETTINGS_FILE_PROCESSED","_reject","API_HAS_CORRUPTED_SETTINGS_FILE","validate","number","boolean","array","optional","union","record","campaignGoalSchema","variableObjectSchema","campaignVariationSchema","changes","campaignObjectSchema","groupSchema","settingsFileSchema","_defineProperty","configurable","writable","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","target","getOwnPropertyDescriptors","defineProperties","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","toFailures","context","fail","iteratorShift","input","done","next","func","Struct","schema","coercer","validator","refiner","StructError","failure","moreFailures","branch","rest","failuresResult","super","failures","stack","__proto__","assert","struct","coerce","ret","is","coercing","check","ctx","v","parent","coercion","fn","defaulted","S","fallback","strict","isPlainObject","changed","masked","getPrototypeOf","empty","refinement","max","regexp","any","Element","entries","date","getTime","dynamic","enums","toLiteralString","instance","Class","intersection","Structs","lazy","literal","constant","Key","Value","Map","never","nullable","knowns","Never","createObjectCoercer","unknowns","delete","partial","tuple","Elements","Number"],"mappings":"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","file":"vwo-javascript-sdk.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\t// CommonJS2\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\t// AMD\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\t// CommonJS\n\telse if(typeof exports === 'object')\n\t\texports[\"vwoSdk\"] = factory();\n\t// Root\n\telse\n\t\troot[\"vwoSdk\"] = factory();\n})(this, 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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = 25);\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('./LoggingManager');\n\nmodule.exports = logging;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = {\n _toStringValue: function(val) {\n return Object.prototype.toString.call(val);\n },\n isNumber: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Number]';\n },\n isString: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object String]';\n },\n isObject: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Object]';\n },\n isFunction: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Function]';\n },\n isBoolean: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Boolean]';\n },\n isPromise: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Promise]';\n },\n isUndefined: function(val) {\n return (\n DataTypeUtil._toStringValue(val) === '[object Undefined]' ||\n // A third-party library sometimes overrides and returns [object Window]\n // therefore, adding a fallback as well\n typeof val === 'undefined'\n );\n },\n isNull: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Null]';\n },\n isArray: function(val) {\n return DataTypeUtil._toStringValue(val) === '[object Array]';\n }\n};\n\nmodule.exports = DataTypeUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst LIB_PATH = 'lib';\nconst CORE_PATH = 'lib/core';\nconst UTIL_PATH = 'lib/util';\nconst SERVICES_PATH = 'lib/services';\n\nmodule.exports = {\n INDEX: `${LIB_PATH}/index`,\n\n VWO: `${LIB_PATH}/VWO`,\n\n API: `${LIB_PATH}/api/index`,\n\n Activate: `${LIB_PATH}/api/activate`,\n GetVariation: `${LIB_PATH}/api/getVariation`,\n Track: `${LIB_PATH}/api/track`,\n IsFeatureEnabled: `${LIB_PATH}/api/isFeatureEnabled`,\n GetFeatureVariableValue: `${LIB_PATH}/api/getFeatureVariableValue`,\n Push: `${LIB_PATH}/api/push`,\n\n SegmentEvaluator: `${CORE_PATH}/SegmentEvaluator`,\n BucketingService: `${CORE_PATH}/BucketingService`,\n VariationDecider: `${CORE_PATH}/VariationDecider`,\n\n ConsoleLogManager: `${SERVICES_PATH}/ConsoleLogManager`,\n EventQueue: `${SERVICES_PATH}/EventQueue`,\n LoggingManager: `${SERVICES_PATH}/LoggingManager`,\n SettingsFileManager: `${SERVICES_PATH}/SettingsFileManager`,\n BatchEventsQueue: `${SERVICES_PATH}/BatchEventsQueue`,\n\n CampaignUtil: `${UTIL_PATH}/CampaignUtil`,\n DataTypeUtil: `${UTIL_PATH}/DataTypeUtil`,\n EventDispatcher: `${UTIL_PATH}/EventDispatcher`,\n EventDispatcherUtil: `${UTIL_PATH}/EventDispatcherUtil`,\n FeatureUtil: `${UTIL_PATH}/FeatureUtil`,\n Functionutil: `${UTIL_PATH}/Functionutil`,\n ImpressionUtil: `${UTIL_PATH}/ImpressionUtil`,\n UuidUtil: `${UTIL_PATH}/UuidUtil`,\n ValidateUtil: `${UTIL_PATH}/ValidateUtil`,\n DecisionUtil: `${UTIL_PATH}/DecisionUtils`,\n HttpHandlerUtil: `${UTIL_PATH}/HttpHandlerUtil`,\n HttpImageUtil: `${UTIL_PATH}/HttpImageUtil`,\n HttpXMLUtil: `${UTIL_PATH}/HttpXMLUtil`,\n\n UsageStatsUtil: `${SERVICES_PATH}/UsageStats`\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* global SDK_NAME, SDK_VERSION */\n\nlet packageFile = {};\n\n// For javascript-sdk, to keep the build size low\n// avoid adding the whole package file in the file\nif (typeof process.env === 'undefined') {\n packageFile = {\n name: SDK_NAME,\n version: SDK_VERSION\n };\n} else {\n packageFile = require('../../package.json');\n}\n\nmodule.exports = {\n SDK_NAME: packageFile.name,\n SDK_VERSION: packageFile.version,\n\n PLATFORM: 'server',\n\n SEED_VALUE: 1,\n\n MAX_TRAFFIC_PERCENT: 100,\n MAX_TRAFFIC_VALUE: 10000,\n MAX_EVENTS_PER_REQUEST: 5000,\n\n DEFAULT_EVENTS_PER_REQUEST: 100,\n DEFAULT_REQUEST_TIME_INTERVAL: 600, // 10 * 60(secs) = 600 secs i.e. 10 minutes\n\n STATUS_RUNNING: 'RUNNING',\n\n SEED_URL: 'https://vwo.com',\n\n HTTP_PROTOCOL: 'http://',\n HTTPS_PROTOCOL: 'https://',\n\n SDK_QUERY_PARAM: 'sdk',\n SDK_VERSION_QUERY_PARAM: 'sdk-v'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst FunctionUtil = {\n cloneObject: obj => {\n if (!obj) {\n return obj;\n }\n\n let clonedObj = JSON.parse(JSON.stringify(obj));\n\n return clonedObj;\n },\n getRandomNumber: () => {\n return Math.random();\n },\n getCurrentUnixTimestamp: () => {\n return Math.ceil(+new Date() / 1000);\n },\n getCurrentUnixTimestampInMillis: () => {\n return +new Date();\n },\n matchWithRegex: (string, regex) => {\n try {\n return string.match(new RegExp(regex));\n } catch (err) {\n const logging = require('../services/logging');\n const FileNameEnum = require('../enums/FileNameEnum');\n\n const logger = logging.getLogger();\n const { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n const file = FileNameEnum.FunctionUtil;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_REGEX_CREATION_FAILED, {\n file,\n regex\n })\n );\n return null;\n }\n },\n getCurrentTime() {\n return new Date().toISOString();\n },\n convertObjectKeysToString(properties, excludedProperties) {\n let queryParams = '';\n excludedProperties = excludedProperties || [];\n\n for (let prop in properties) {\n if (properties.hasOwnProperty(prop)) {\n if (excludedProperties.indexOf(prop) === -1) {\n queryParams += prop + '=' + properties[prop] + '&';\n }\n }\n }\n\n return queryParams;\n },\n objectValues(obj) {\n let values = [];\n\n for (const prop in obj) {\n values.push(obj[prop]);\n }\n return values;\n }\n};\n\nmodule.exports = FunctionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ApiEnum = {\n LAUNCH: 'launch',\n ACTIVATE: 'activate',\n GET_VARIATION_NAME: 'getVariation',\n TRACK: 'track',\n IS_FEATURE_ENABLED: 'isFeatureEnabled',\n GET_FEATURE_VARIABLE_VALUE: 'getFeatureVariableValue',\n PUSH: 'push'\n};\n\nmodule.exports = ApiEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('./DataTypeUtil');\nconst DataTypeEnum = require('../enums/DataTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\n\nconst APIMethodArgumentsValidationEnum = {\n [ApiEnum.ACTIVATE]: function({\n campaignKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.TRACK]: function({\n campaignKey,\n userId,\n goalIdentifier,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n goalTypeToTrack = GoalTypeEnum.ALL,\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING_NULL_UNDEFINED_ARRAY\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'goalIdentifier',\n value: goalIdentifier,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'goalTypeToTrack',\n value: goalTypeToTrack,\n type: DataTypeEnum.STRING\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.IS_FEATURE_ENABLED]: function({\n campaignKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n shouldTrackReturningUser = false,\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'shouldTrackReturningUser',\n value: shouldTrackReturningUser,\n type: DataTypeEnum.BOOLEAN\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.GET_FEATURE_VARIABLE_VALUE]: function({\n campaignKey,\n variableKey,\n userId,\n customVariables = {},\n variationTargetingVariables = {},\n userStorageData = {},\n metaData = {}\n }) {\n return [\n {\n key: 'campaignKey',\n value: campaignKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'variableKey',\n value: variableKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customVariables',\n value: customVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'variationTargetingVariables',\n value: variationTargetingVariables,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'userStorageData',\n value: userStorageData,\n type: DataTypeEnum.OBJECT\n },\n {\n key: 'metaData',\n value: metaData,\n type: DataTypeEnum.OBJECT\n }\n ];\n },\n [ApiEnum.PUSH]: function({ tagKey, tagValue, userId, customDimensionMap }) {\n return [\n {\n key: 'tagKey',\n value: tagKey,\n type: DataTypeEnum.STRING\n },\n {\n key: 'tagValue',\n value: tagValue,\n type: DataTypeEnum.STRING\n },\n {\n key: 'userId',\n value: userId,\n type: DataTypeEnum.STRING\n },\n {\n key: 'customDimensionMap',\n value: customDimensionMap,\n type: DataTypeEnum.OBJECT\n }\n ];\n }\n};\n// both have same\nAPIMethodArgumentsValidationEnum[ApiEnum.GET_VARIATION_NAME] = APIMethodArgumentsValidationEnum[ApiEnum.ACTIVATE];\n\nconst ValidateUtil = {\n isValidValue: function(value) {\n return !!(value !== undefined && value);\n },\n isValidString: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isString(value);\n },\n isValidNumber: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isNumber(value);\n },\n isValidFunction: function(value) {\n return ValidateUtil.isValidValue(value) && DataTypeUtil.isFunction(value);\n },\n isValidBoolean: function(value) {\n return value !== undefined && DataTypeUtil.isBoolean(value);\n },\n isValidObject: function(value) {\n return value !== undefined && DataTypeUtil.isObject(value);\n },\n areValidParamsForAPIMethod: argsObj => {\n let isValid = false;\n let args = APIMethodArgumentsValidationEnum[argsObj.method](argsObj);\n\n let validators = [];\n\n for (let i = 0; i < args.length; i++) {\n let argConfig = args[i];\n let argValue = argConfig.value;\n let dataType = argConfig.type;\n // let value;\n\n switch (dataType) {\n case DataTypeEnum.NUMBER:\n validators.push(ValidateUtil.isValidNumber(argValue));\n break;\n case DataTypeEnum.STRING:\n validators.push(ValidateUtil.isValidString(argValue));\n break;\n case DataTypeEnum.BOOLEAN:\n validators.push(ValidateUtil.isValidBoolean(argValue));\n break;\n // case DataTypeEnum.FUNCTION:\n // validators.push(ValidateUtil.isValidFunction(argValue));\n // break;\n case DataTypeEnum.OBJECT:\n validators.push(ValidateUtil.isValidObject(argValue));\n break;\n case DataTypeEnum.STRING_NULL_UNDEFINED_ARRAY:\n let value =\n ValidateUtil.isValidString(argValue) ||\n DataTypeUtil.isUndefined(argValue) ||\n DataTypeUtil.isNull(argValue) ||\n DataTypeUtil.isArray(argValue);\n validators.push(value);\n break;\n // case DataTypeEnum.NUMBER_STRING:\n // value = ValidateUtil.isValidNumber(argValue) || ValidateUtil.isValidString(argValue);\n // validators.push(value);\n // break;\n }\n }\n\n isValid = validators.every(val => val);\n\n return isValid;\n }\n};\n\nmodule.exports = ValidateUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ValidateUtil = require('./ValidateUtil');\nconst VWOFeatureFlags = require('./VWOFeatureFlags');\nconst Constants = require('../constants');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\nconst CampaignTypeEnum = require('../enums/CampaignTypeEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nlet CampaignUtil = {\n /**\n * Returns the bucket size of variation.\n *\n * @param {Number/Float} - weight of variation\n *\n * @return {Number} bucket start range of Variation\n */\n _getVariationBucketRange: variationWeight => {\n if (!variationWeight || variationWeight === 0) {\n return 0;\n }\n\n const startRange = Math.ceil(variationWeight * 100);\n\n return Math.min(startRange, Constants.MAX_TRAFFIC_VALUE);\n },\n\n /**\n * Get the campaign on the basis of campaign id\n *\n * @param {Object} settingsFile\n * @param {Number} campaignId\n *\n * @returns {Object} campaign object\n */\n getCampaignBasedOnId: (settingsFile, campaignId) => {\n let campaign;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n if (parseInt(settingsFile.campaigns[i].id, 10) === parseInt(campaignId, 10)) {\n campaign = settingsFile.campaigns[i];\n\n break;\n }\n }\n\n return campaign;\n },\n /**\n * It extracts the weights from all the variations inside the campaign\n and scales them so that the total sum of eligible variations' weights become 100%\n\n 1. variations\n */\n scaleVariationWeights: variations => {\n const totalWeight = variations.reduce((acc, variation) => {\n return acc + variation.weight;\n }, 0);\n if (!totalWeight) {\n const weight = 100 / variations.length;\n variations.forEach(variation => (variation.weight = weight));\n } else {\n variations.forEach(variation => (variation.weight = (variation.weight / totalWeight) * 100));\n }\n },\n\n getCampaign: (settingsFile, campaignKey) => {\n let campaign;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n if (settingsFile.campaigns[i].key === campaignKey) {\n campaign = settingsFile.campaigns[i];\n\n break;\n }\n }\n\n return campaign;\n },\n /**\n * Gets campaigns for corresponding campaignKeys\n *\n * @param {Object} settingsFile\n * @param {Array} campaignKeys\n *\n * @return {Array} Campaigns\n */\n getCampaignsForKeys: (settingsFile, campaignKeys) => {\n const campaigns = [];\n campaignKeys.forEach(key => {\n let campaign = CampaignUtil.getCampaign(settingsFile, key);\n if (campaign) {\n campaigns.push(campaign);\n } else {\n campaigns.push({\n key\n });\n }\n });\n return campaigns;\n },\n /**\n * Gets campaigns which have the goalIdentifier present\n *\n * @param {settingsFile}\n * @param {String} goalIdentifier\n * @param {String} goalTypeToTrack type of goal to track\n *\n * @return {Array} Campaigns\n */\n getCampaignsForGoal: (settingsFile, goalIdentifier, goalTypeToTrack) => {\n let campaigns = [];\n settingsFile.campaigns.forEach(campaign => {\n const goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier);\n if (goal && (goalTypeToTrack === GoalTypeEnum.ALL || goal.type === goalTypeToTrack)) {\n campaigns.push(campaign);\n }\n });\n if (!campaigns.length) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CAMPAIGN_NOT_FOUND_FOR_GOAL, {\n file: FileNameEnum.CampaignUtil,\n goalIdentifier\n })\n );\n }\n return campaigns;\n },\n getCampaignStatus: (settingsFile, campaignKey) => {\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign || !campaign.status) {\n // log error\n return '';\n }\n\n return campaign.status.toLowerCase();\n },\n\n isCampaignRunning: (settingsFile, campaignKey) => {\n return CampaignUtil.getCampaignStatus(settingsFile, campaignKey) === 'running';\n },\n /**\n * Validates the campaign\n *\n * @param {Campaign} campaign the campaign to be validated\n *\n * @return {Boolean} true is campaign is valid\n */\n validateCampaign: campaign => {\n return ValidateUtil.isValidValue(campaign) && campaign.variations && Object.keys(campaign.variations).length > 0;\n },\n\n /**\n * Assigns the buckets to the Variations of the campaign\n * depending on the traffic allocation\n *\n * @param {Campaign} campaign whose Variations are to be allocated\n */\n setVariationAllocation: campaign => {\n const numberOfVariations = campaign.variations.length;\n let stepFactor = 0;\n\n for (let i = 0, currentAllocation = 0; i < numberOfVariations; i++) {\n let variation = campaign.variations[i];\n\n stepFactor = CampaignUtil.assignRangeValues(variation, currentAllocation);\n currentAllocation += stepFactor;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.VARIATION_RANGE_ALLOCATION, {\n file: FileNameEnum.CampaignUtil,\n campaignKey: campaign.key,\n variationName: variation.name,\n variationWeight: variation.weight,\n start: variation.startVariationAllocation,\n end: variation.endVariationAllocation\n })\n );\n }\n },\n\n /**\n * Assign range allocation to the campaigns in the list to decide which campaign to choose out of the Mutually Exclusive group\n *\n * @param {Array} campaigns\n */\n setCampaignAllocation: campaigns => {\n let stepFactor = 0;\n\n for (let i = 0, currentAllocation = 0; i < campaigns.length; i++) {\n let campaign = campaigns[i];\n\n stepFactor = CampaignUtil.assignRangeValues(campaign, currentAllocation);\n currentAllocation += stepFactor;\n }\n },\n\n assignRangeValues: (variation, currentAllocation) => {\n let stepFactor;\n stepFactor = CampaignUtil._getVariationBucketRange(variation.weight);\n\n if (stepFactor) {\n variation.startVariationAllocation = currentAllocation + 1;\n variation.endVariationAllocation = currentAllocation + stepFactor;\n } else {\n variation.startVariationAllocation = -1;\n variation.endVariationAllocation = -1;\n }\n return stepFactor;\n },\n getCampaignGoal: (settingsFile, campaignKey, goalIdentifier) => {\n let desiredCampaignGoal = null;\n\n if (!settingsFile || !campaignKey || !goalIdentifier) {\n return desiredCampaignGoal;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign) {\n return desiredCampaignGoal;\n }\n\n for (let i = 0; i < campaign.goals.length; i++) {\n let goal = campaign.goals[i];\n\n if (goal.identifier === goalIdentifier) {\n desiredCampaignGoal = goal;\n break;\n }\n }\n\n return desiredCampaignGoal;\n },\n getCampaignVariation: (settingsFile, campaignKey, variationName) => {\n let desiredVariation = null;\n\n if (!settingsFile || !campaignKey || !variationName) {\n return desiredVariation;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign) {\n return desiredVariation;\n }\n\n for (let i = 0; i < campaign.variations.length; i++) {\n let variation = campaign.variations[i];\n\n if (variation.name === variationName) {\n desiredVariation = variation;\n\n break;\n }\n }\n\n return desiredVariation;\n },\n getControlForCampaign: campaign => {\n let control = {};\n\n if (!campaign || !campaign.variations) {\n return control;\n }\n\n for (let i = 0; i < campaign.variations.length; i++) {\n if (campaign.variations[i].id === 1) {\n control = campaign.variations[i];\n break;\n }\n }\n\n return control;\n },\n isFeatureTestCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.FEATURE_TEST) {\n return true;\n }\n\n return false;\n },\n isFeatureRolloutCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT) {\n return true;\n }\n\n return false;\n },\n isAbCampaign: campaign => {\n if (campaign && campaign.type === CampaignTypeEnum.AB) {\n return true;\n }\n\n return false;\n },\n\n /**\n * Check if the campaign is a part of mutually exclusive group\n *\n * @param {Object} settingsFile\n * @param {Number} campaignId\n *\n * @returns {Number} group id of the campaign.\n */\n isPartOfGroup: (settingsFile, campaignId) => {\n if (settingsFile.campaignGroups && Object.prototype.hasOwnProperty.call(settingsFile.campaignGroups, campaignId)) {\n return {\n groupId: settingsFile.campaignGroups[campaignId],\n groupName: settingsFile.groups[settingsFile.campaignGroups[campaignId]].name\n };\n }\n return {};\n },\n\n /**\n * Get the list of campaigns on the basis of their id\n *\n * @param {Object} settingsFile\n * @param {Number} groupId\n *\n * @returns {Array} list of campaigns\n */\n getGroupCampaigns: (settingsFile, groupId) => {\n const campaigns = [];\n if (Object.prototype.hasOwnProperty.call(settingsFile.groups, groupId)) {\n settingsFile.groups[groupId].campaigns.forEach(campaignId => {\n let campaign = CampaignUtil.getCampaignBasedOnId(settingsFile, campaignId);\n if (campaign) {\n campaigns.push(campaign);\n }\n });\n }\n return campaigns;\n },\n\n /**\n * Decide the Seed for murmurhash to bucket user.\n * @param {string} userId\n * @param {object} campaign\n * @param {number} groupId\n *\n * @returns {string} Seed value\n */\n getBucketingSeed: (userId, campaign, groupId) => {\n if (groupId) {\n return `${groupId}_${userId}`;\n }\n\n const isNB = VWOFeatureFlags.getAll().isNB;\n const isNBv2 = VWOFeatureFlags.getAll().isNBv2;\n\n if (isNB || isNBv2 || (campaign && campaign.isBucketingSeedEnabled)) {\n return `${campaign.id}_${userId}`;\n } else {\n return userId;\n }\n }\n};\n\nmodule.exports = CampaignUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VariationDecider = require('../core/VariationDecider');\nconst BucketingService = require('../core/BucketingService');\n\nconst CampaignUtil = require('./CampaignUtil');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst FunctionUtil = require('./FunctionUtil');\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst StatusEnum = require('../enums/StatusEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst SegmentEvaluator = require('../core/SegmentEvaluator');\nconst HooksManager = require('../services/HooksManager');\nconst HooksEnum = require('../enums/HooksEnum');\nconst UuidUtil = require('./UuidUtil');\nconst Constants = require('../constants');\nconst CampaignTypeEnum = require('../enums/CampaignTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\nconst RandomAlgo = 1;\n\nconst file = FileNameEnum.DecisionUtil;\n\nconst SegmentationTypeEnum = {\n WHITELISTING: 'whitelisting',\n PRE_SEGMENTATION: 'pre-segmentation'\n};\n\nlet DecisionUtil = {\n // PUBLIC METHODS\n /**\n * 1. Checks if there is a variation stored in userStorage, returns it\n * 2. If Whitelisting is applicable, evaluate it, if any eligible variation is found, store it in User Storage service and return, otherwise skip it.\n * 3. Check if the campaign is part of mutually exclusive group, if yes, get the winner campaign using campaign traffic normalization.\n * 4. If Pre-segmentation is applied and passes then go further otherwise return early and no further processing\n * 5. If no user storage value, no whitelisted variation and pre-segmentation evaluates to true, get variation using hashing logic if campaign traffic passes for that userId\n *\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} campaign\n * @param {Object} campaignKey\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} variationTargetingVariables\n *\n * @return {Object|null} - Object if a variation is assigned, otherwise null\n */\n getVariation: (\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables = {},\n userStorageData = {},\n metaData,\n isTrackUserAPI,\n isTrackGoalAPI,\n newGoalIdentifier,\n api = ''\n ) => {\n let vwoUserId = UuidUtil.generateFor(userId, settingsFile.accountId);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_UUID, {\n file: FileNameEnum.UuidUtil,\n userId,\n accountId: settingsFile.accountId,\n uuid: vwoUserId\n })\n );\n\n let decision = {\n // campaign info\n campaignId: campaign.id,\n campaignKey,\n campaignType: campaign.type,\n campaignName: campaign.name,\n // campaign segmentation conditions\n customVariables,\n // event name\n event: HooksEnum.DECISION_TYPES.CAMPAIGN_DECISION,\n // goal tracked in case of track API\n goalIdentifier: newGoalIdentifier,\n // campaign whitelisting flag\n isForcedVariationEnabled: campaign.isForcedVariationEnabled,\n sdkVersion: Constants.SDK_VERSION,\n // API name which triggered the event\n source: api,\n // Passed in API\n userId,\n // Campaign Whitelisting conditions\n variationTargetingVariables,\n // VWO generated UUID based on passed UserId and Account ID\n vwoUserId\n };\n\n // check if the campaign is a part of group\n const { groupId, groupName } = CampaignUtil.isPartOfGroup(settingsFile, campaign.id);\n\n if (groupId) {\n // append groupId and groupName, if campaign is a part of group\n decision['groupId'] = groupId;\n decision['groupName'] = groupName;\n }\n\n variationTargetingVariables = Object.assign({}, variationTargetingVariables, {\n _vwoUserId: campaign.isUserListEnabled ? vwoUserId : userId\n });\n\n // check if tbe campaign satisfies the whitelisting before checking for the group\n const whitelistedVariation = DecisionUtil._checkForWhitelisting(\n config,\n campaign,\n campaignKey,\n userId,\n variationTargetingVariables,\n decision\n );\n if (whitelistedVariation) {\n if (DataTypeUtil.isPromise(whitelistedVariation)) {\n return whitelistedVariation.then(data => {\n if (Object.keys(data).length > 0) {\n return data;\n }\n });\n } else {\n return whitelistedVariation;\n }\n }\n\n // check if the campaign is present in the storage before checking for the group\n\n let storedVariation;\n // check if asyncStorage, if yes then synchronously get the data and return promise\n if (config.asyncStorageConfig) {\n return new Promise(resolve => {\n return DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n ).then(function(response) {\n if (response && DataTypeUtil.isObject(response) && Object.keys(response).length > 0) {\n resolve(Object.assign({}, { isStoredVariation: true }, response));\n } else if (isTrackGoalAPI) {\n resolve(Object.assign({}));\n } else {\n const variationWithoutStorageLookup = DecisionUtil.evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n );\n resolve(variationWithoutStorageLookup);\n }\n });\n });\n } else {\n storedVariation = DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n );\n }\n\n if (storedVariation) {\n return storedVariation;\n }\n\n return DecisionUtil.evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n );\n },\n\n evaluateAndGetVariationWithoutStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n isTrackUserAPI,\n newGoalIdentifier,\n decision,\n groupId,\n groupName\n ) {\n // check if the called campaign satisfies the pre-segmentation before further processing.\n if (\n !(\n DecisionUtil._checkForPreSegmentation(campaign, campaignKey, userId, customVariables, decision) &&\n BucketingService.isUserPartOfCampaign(userId, campaign, true)\n )\n ) {\n return {};\n }\n\n if (groupId) {\n // mutually exclusive group exists\n\n // get the list of the all the campaigns in a group\n const campaignList = CampaignUtil.getGroupCampaigns(settingsFile, groupId);\n\n if (campaignList.length === 0) {\n // return if no campaigns are active in a group\n return {};\n }\n\n // checking other campaigns for whitelisting and user storage.\n let isWhitelistedOrStoredVariation = DecisionUtil._checkForStorageAndWhitelisting(\n config,\n settingsFile,\n groupName,\n campaignList,\n campaign,\n userId,\n userStorageData,\n variationTargetingVariables,\n isTrackUserAPI\n );\n\n if (isWhitelistedOrStoredVariation) {\n // other campaigns satisfy the whitelisting or storage, therfore returning\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: campaignKey\n })\n );\n if (DataTypeUtil.isPromise(isWhitelistedOrStoredVariation)) {\n return new Promise(resolve => {\n resolve(Object.assign({}));\n });\n }\n return {};\n }\n\n // none of the group campaigns satisfy whitelisting or user storage\n // check each campaign for pre-segmentation and traffic allocation.\n let inEligibleCampaignKeys = '';\n let eligibleCampaignKeys = '';\n const { eligibleCampaigns, inEligibleCampaigns } = DecisionUtil.getEligbleCampaigns(\n campaignList,\n userId,\n customVariables\n );\n\n inEligibleCampaigns.forEach(campaign => {\n inEligibleCampaignKeys = inEligibleCampaignKeys + campaign.key + ',';\n });\n eligibleCampaigns.forEach(campaign => {\n eligibleCampaignKeys = eligibleCampaignKeys + campaign.key + ',';\n });\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS, {\n userId,\n groupName,\n file,\n eligibleCampaignKeys: eligibleCampaignKeys.slice(0, -1),\n inEligibleText:\n inEligibleCampaignKeys === '' ? 'no campaigns' : `campaigns: ${inEligibleCampaignKeys.slice(0, -1)}`\n })\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_ELIGIBLE_CAMPAIGNS, {\n userId,\n groupName,\n file,\n noOfEligibleCampaigns: eligibleCampaigns.length,\n noOfGroupCampaigns: inEligibleCampaigns.length + eligibleCampaigns.length\n })\n );\n\n // Whether normalised/random implementation has to be done or advanced\n let megAlgoNumber =\n typeof settingsFile.groups[groupId].et !== 'undefined' ? settingsFile.groups[groupId].et : RandomAlgo;\n\n if (eligibleCampaigns.length === 1) {\n // if the called campaign is the only winner.\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n eligibleCampaigns[0],\n eligibleCampaigns[0].key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n if (megAlgoNumber === RandomAlgo) {\n // normalize the eligible campaigns and decide winner\n return DecisionUtil._normalizeAndFindWinningCampaign(\n config,\n campaign,\n eligibleCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n return DecisionUtil._advancedAlgoFindWinningCampaign(\n config,\n settingsFile,\n campaign,\n eligibleCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n );\n }\n }\n } else {\n // campaign is not a part of mutually exclusive group\n // check if the user is eligible to become part of the campaign and assign variation.\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n campaign,\n campaignKey,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n }\n },\n // PRIVATE METHODS\n\n _evaluateWhitelisting: (campaign, campaignKey, userId, variationTargetingVariables, disableLogs = false) => {\n let whitelistedVariation;\n let status;\n const targetedVariations = [];\n campaign.variations.forEach(variation => {\n if (DataTypeUtil.isObject(variation.segments) && !Object.keys(variation.segments).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file,\n variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT ? '' : `, for ${variation.name}`\n }),\n disableLogs\n );\n return;\n }\n if (\n DataTypeUtil.isObject(variation.segments) &&\n SegmentEvaluator(variation.segments, variationTargetingVariables, campaignKey, userId, variation.name)\n ) {\n status = StatusEnum.PASSED;\n targetedVariations.push(FunctionUtil.cloneObject(variation));\n } else {\n status = StatusEnum.FAILED;\n }\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(variationTargetingVariables),\n file,\n status,\n segmentationType: SegmentationTypeEnum.WHITELISTING,\n variation:\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT && status === StatusEnum.PASSED\n ? 'and becomes part of the rollout'\n : `for ${variation.name}`\n }),\n disableLogs\n );\n });\n\n if (targetedVariations.length > 1) {\n CampaignUtil.scaleVariationWeights(targetedVariations);\n for (let i = 0, currentAllocation = 0, stepFactor = 0; i < targetedVariations.length; i++) {\n stepFactor = CampaignUtil.assignRangeValues(targetedVariations[i], currentAllocation);\n currentAllocation += stepFactor;\n }\n whitelistedVariation = BucketingService._getVariation(\n targetedVariations,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, campaign))\n );\n } else {\n whitelistedVariation = targetedVariations[0];\n }\n\n if (whitelistedVariation) {\n return {\n variation: whitelistedVariation,\n variationName: whitelistedVariation.name,\n variationId: whitelistedVariation.id\n };\n }\n },\n /**\n * Get the User Variation mapping by calling get method of UserStorageService being provided\n *\n * @param {Object} config\n * @param {String} UserID\n * @param {String} campaignKey\n *\n * @return {Object} - User Campaign Mapping\n */\n _getStoredUserData: function(config, userId, campaignKey, userStorageData, disableLogs) {\n let userStorageMap = {\n userId: userId,\n variationName: null,\n campaignKey: campaignKey,\n goalIdentifier: null\n };\n\n if (!config.userStorageService) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, {\n file\n }),\n disableLogs\n );\n return userStorageMap;\n }\n\n if (config.asyncStorageConfig) {\n try {\n return config.userStorageService\n .get(userId, campaignKey)\n .then(data => {\n // if data found\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey\n }),\n disableLogs\n );\n\n let finalData = Object.assign({}, data, userStorageData);\n\n return finalData;\n })\n .catch(_error => {\n // TODO: add log for failed fetch\n console.log('Failed to fetch data from Storage Service', _error);\n });\n } catch (err) {\n // if no data found\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_GET_FAILED, {\n file,\n userId,\n error: err\n }),\n disableLogs\n );\n }\n } else {\n try {\n let data = config.userStorageService.get(userId, campaignKey) || {};\n\n // if data found\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey\n }),\n disableLogs\n );\n\n return Object.assign({}, data, userStorageData);\n } catch (err) {\n // if no data found\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_GET_FAILED, {\n file,\n userId,\n error: err\n }),\n disableLogs\n );\n }\n }\n },\n\n /**\n * If UserStorageService is provided and variation was stored, save the assigned variation\n *\n * @param {Object} campaign\n * @param {String} variationName\n * @param {String} userId\n *\n * @return {Boolean} - true if found otherwise false\n */\n _saveUserData: function(config, campaign, variationName, userId, metaData, goalIdentifier) {\n let isSaved = false;\n\n if (!config.userStorageService) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NOT_CONFIGURED, {\n file\n })\n );\n return isSaved;\n }\n\n try {\n const properties = {\n userId: userId,\n variationName,\n campaignKey: campaign.key\n };\n\n if (!DataTypeUtil.isUndefined(goalIdentifier)) {\n properties.goalIdentifier = goalIdentifier;\n }\n\n if (!DataTypeUtil.isUndefined(metaData)) {\n properties.metaData = metaData;\n }\n\n config.userStorageService.set(properties);\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SETTING_DATA_USER_STORAGE_SERVICE, {\n file,\n userId,\n campaignKey: campaign.key\n })\n );\n\n isSaved = true;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_STORAGE_SERVICE_SET_FAILED, {\n file,\n userId,\n error: err\n })\n );\n\n isSaved = false;\n }\n\n return isSaved;\n },\n\n /**\n * Evaluate the campaign for whitelisting and store\n * This method would be run only for MEG campaigns\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Array} campaignList\n * @param {Object} calledCampaign\n * @param {String} userId\n * @param {Object} userStorageData\n * @param {Object} variationTargetingVariables\n * @param {Boolean} isTrackUserAPI\n *\n * @returns {Boolean} - true, if whitelisting/storage is satisfied for any campaign\n */\n _checkForStorageAndWhitelisting(\n config,\n settingsFile,\n groupName,\n campaignList,\n calledCampaign,\n userId,\n userStorageData,\n variationTargetingVariables,\n isTrackUserAPI\n ) {\n let otherCampaignWinner = false;\n campaignList.some(groupCampaign => {\n if (groupCampaign.id === calledCampaign.id) {\n return;\n }\n // create a local copy of the campaigns\n // groupCampaign = FunctionUtil.cloneObject(groupCampaign);\n // checking other campaigns for whitelisting or user storage.\n const whitelistedVariation = DecisionUtil._checkForWhitelisting(\n config,\n groupCampaign,\n groupCampaign.key,\n userId,\n variationTargetingVariables\n );\n if (whitelistedVariation) {\n if (DataTypeUtil.isPromise(whitelistedVariation)) {\n return whitelistedVariation.then(data => {\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'whitelisting'\n })\n );\n return new Promise(resolve => {\n resolve(true);\n });\n });\n } else {\n // other campaign satisfy the whitelisting\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'whitelisting'\n })\n );\n return true;\n }\n }\n\n const storedVariation = DecisionUtil._checkForUserStorage(\n config,\n settingsFile,\n groupCampaign,\n groupCampaign.key,\n userId,\n userStorageData,\n isTrackUserAPI\n );\n\n if (storedVariation && DataTypeUtil.isPromise(storedVariation)) {\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'user storage'\n })\n );\n // return true;\n return new Promise(resolve => {\n resolve(true);\n });\n }\n if (storedVariation && DataTypeUtil.isObject(storedVariation) && Object.keys(storedVariation).length > 0) {\n // other campaign satisfy the user storage\n otherCampaignWinner = true;\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OTHER_CAMPAIGN_SATISFIES_WHITELISTING_STORAGE, {\n file,\n campaignKey: groupCampaign.key,\n groupName,\n userId,\n type: 'user storage'\n })\n );\n return true;\n }\n });\n if (config.asyncStorageConfig) {\n return new Promise(resolve => {\n resolve(otherCampaignWinner);\n });\n }\n return otherCampaignWinner;\n },\n\n /**\n * Evaluate a campaign for pre-segmentation.\n *\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} decision\n *\n * @returns {Boolean} true, if the pre-segmentation is satisfied.\n */\n _checkForPreSegmentation: (campaign, campaignKey, userId, customVariables, decision) => {\n let status;\n if (DataTypeUtil.isObject(campaign.segments) && !Object.keys(campaign.segments).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n !decision\n );\n return true;\n } else {\n const preSegmentationResult = SegmentEvaluator(\n campaign.segments,\n customVariables,\n campaignKey,\n userId,\n !decision\n );\n if (!preSegmentationResult) {\n status = StatusEnum.FAILED;\n } else {\n status = StatusEnum.PASSED;\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(customVariables || {}),\n file,\n status,\n segmentationType: SegmentationTypeEnum.PRE_SEGMENTATION,\n variation: ''\n }),\n !decision\n );\n\n if (status === StatusEnum.FAILED) {\n return false;\n } else {\n return true;\n }\n }\n },\n\n /**\n * Check if user is eligible for the camapign based on traffic percentage and assign variation.\n * @param {Object} config\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n * @returns {Object} variation assigned to the user\n */\n evaluateTrafficAndGetVariation(config, campaign, campaignKey, userId, metaData, newGoalIdentifier, decision) {\n let variation, variationName, variationId;\n // Use our core's VariationDecider utility to get the deterministic variation assigned to the userId for that campaign\n ({ variation, variationName, variationId } = VariationDecider.getVariationAllotted(\n userId,\n campaign,\n config.settingsFile.accountId\n ));\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_ALLOCATION_STATUS, {\n file,\n campaignKey,\n userId,\n status: variationName ? `got variation:${variationName}` : 'did not get any variation'\n })\n );\n\n // Check if variation-name has been assigned to the userId. If not, return no variation\n if (variationName) {\n // If userStorageService is provided, look into it for the saved variation for the campaign and userId\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, newGoalIdentifier);\n }\n\n // Executing the callback when SDK makes the decision\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: false,\n isUserWhitelisted: false\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n\n return {\n variation: variation && variation.variation,\n variationName,\n variationId\n };\n },\n\n /**\n * Evaluate a campaign for whitelisting\n *\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} variationTargetingVariables\n * @param {Object} decision\n *\n * @returns {Object} whitelisted variation\n */\n _checkForWhitelisting: (config, campaign, campaignKey, userId, variationTargetingVariables, decision) => {\n let status;\n let variationName, variationId;\n if (campaign.isForcedVariationEnabled) {\n let whitelistingResult = DecisionUtil._evaluateWhitelisting(\n campaign,\n campaignKey,\n userId,\n variationTargetingVariables,\n !decision\n );\n let variationString;\n if (whitelistingResult) {\n status = StatusEnum.PASSED;\n variationString = whitelistingResult.variationName;\n } else {\n status = StatusEnum.FAILED;\n variationString = '';\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SEGMENTATION_STATUS, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(variationTargetingVariables),\n file,\n status,\n segmentationType: SegmentationTypeEnum.WHITELISTING,\n variation: campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT ? '' : `for variation: ${variationString}`\n }),\n !decision\n );\n\n if (whitelistingResult) {\n variationName = whitelistingResult.variationName;\n variationId = whitelistingResult.variationId;\n // Executing the callback when SDK has made a decision in case of whitelisting\n if (decision) {\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: false,\n isUserWhitelisted: !!variationName\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n }\n if (config.asyncStorageConfig) {\n return new Promise(resolve => resolve(whitelistingResult));\n }\n return whitelistingResult;\n }\n } else {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.WHITELISTING_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n !decision\n );\n }\n },\n\n /**\n * Check if the variation is present in the user storage\n *\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} campaign\n * @param {String} campaignKey\n * @param {String} userId\n * @param {Object} userStorageData\n * @param {Boolean} isTrackUserAPI\n * @param {Object} decision\n *\n * @returns {Object} stored variaition\n */\n _checkForUserStorage: (\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n userStorageData,\n isTrackUserAPI,\n decision\n ) => {\n let userData;\n\n if (config.asyncStorageConfig) {\n return DecisionUtil._getStoredUserData(config, userId, campaignKey, userStorageData, !decision).then(function(\n userData\n ) {\n userData = userData || { variationName: null, goalIdentifier: null };\n\n return DecisionUtil._processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n );\n });\n } else {\n userData = DecisionUtil._getStoredUserData(config, userId, campaignKey, userStorageData, !decision);\n\n return DecisionUtil._processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n );\n }\n },\n\n _processAfterGettingFromStorage(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n isTrackUserAPI,\n decision,\n userData\n ) {\n let { variationName, goalIdentifier } = userData;\n let storedVariation;\n\n if (userData && userData.campaignKey && variationName) {\n storedVariation = CampaignUtil.getCampaignVariation(settingsFile, campaignKey, variationName);\n } else {\n // Log if stored variation is not found even after implementing UserStorageService\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_STORAGE_SERVICE_NO_STORED_DATA, {\n file,\n campaignKey,\n userId\n }),\n !decision\n );\n }\n\n let variationId;\n\n // If stored variation is found, simply return the same\n if (storedVariation) {\n variationName = storedVariation.name;\n variationId = storedVariation.id;\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.GOT_STORED_VARIATION, {\n file,\n campaignKey,\n userId,\n variationName\n }),\n !decision\n );\n\n // Executing the callback when SDK gets the decision from user storage service\n if (decision) {\n HooksManager.execute(\n Object.assign(\n {\n fromUserStorageService: !!variationName,\n isUserWhitelisted: false\n },\n campaign.type === CampaignTypeEnum.FEATURE_ROLLOUT\n ? {\n isFeatureEnabled: !!variationName\n }\n : {\n variationName,\n variationId\n },\n decision\n )\n );\n }\n\n return {\n variation: storedVariation,\n variationName,\n variationId,\n storedGoalIdentifier: goalIdentifier,\n isStoredVariation: true\n };\n } else if (\n !DataTypeUtil.isUndefined(config.userStorageService) &&\n !isTrackUserAPI &&\n DataTypeUtil.isUndefined(storedVariation)\n ) {\n logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_ACTIVATED, {\n file,\n campaignKey,\n userId,\n api: config.apiName\n }),\n !decision\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_NOT_ACTIVATED, {\n file,\n campaignKey,\n userId,\n reason: config.apiName === ApiEnum.TRACK ? 'track it' : 'get the decision/value'\n }),\n !decision\n );\n return {};\n }\n },\n\n /**\n * Evaluate the list of campaigns for pre-segmentation and campaign traffic allocation and assign variation to the user.\n * This method will be used for MEG campaigns\n *\n * @param {Object} config\n * @param {Array} campaignList\n * @param {String} userId\n * @param {Object} customVariables\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n *\n * @returns {Array} list of campaigns which satisfies the conditions.\n */\n getEligbleCampaigns(campaignList, userId, customVariables) {\n let eligibleCampaigns = [];\n let inEligibleCampaigns = [];\n\n campaignList.forEach(groupCampaign => {\n const isPartOfCampaign =\n DecisionUtil._checkForPreSegmentation(groupCampaign, groupCampaign.key, userId, customVariables) &&\n BucketingService.isUserPartOfCampaign(userId, groupCampaign, true);\n if (isPartOfCampaign) {\n groupCampaign = FunctionUtil.cloneObject(groupCampaign);\n // campaign satisfies the pre-segmentation\n eligibleCampaigns.push(groupCampaign);\n } else {\n inEligibleCampaigns.push(groupCampaign);\n }\n });\n\n return {\n eligibleCampaigns,\n inEligibleCampaigns\n };\n },\n\n /**\n * Equally distribute the traffic of campaigns and assign a winner campaign by murmur hash.\n *\n * @param {Object} config\n * @param {Object} calledCampaign\n * @param {Array} shortlistedCampaigns\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n *\n * @returns {Object} variation of the winner campaign\n */\n _normalizeAndFindWinningCampaign(\n config,\n calledCampaign,\n shortlistedCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n ) {\n // normalise the weights of all the shortlisted campaigns\n shortlistedCampaigns.forEach(campaign => {\n campaign.weight = Math.floor(100 / shortlistedCampaigns.length);\n });\n\n // re-distribute the traffic for each camapign\n CampaignUtil.setCampaignAllocation(shortlistedCampaigns);\n\n let winnerCampaign = BucketingService._getVariation(\n shortlistedCampaigns,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))\n );\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, {\n userId,\n groupName,\n file,\n campaignKey: winnerCampaign.key\n })\n );\n\n if (winnerCampaign.id === calledCampaign.id) {\n // if called campaign is the winner campaign, get the variation for the campaign\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n winnerCampaign,\n winnerCampaign.key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n // if winning campaign not the called camapaign, return\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: calledCampaign.key\n })\n );\n return {};\n }\n },\n /** Assign the winner campaign by checking priority order and/or weightage distribution\n * @param {Object} config\n * @param {Object} settingsFile\n * @param {Object} calledCampaign\n * @param {Array} shortlistedCampaigns\n * @param {String} userId\n * @param {Object} metaData\n * @param {String} newGoalIdentifier\n * @param {Object} decision\n *\n * @returns {Object} variation of the winner campaign\n */\n _advancedAlgoFindWinningCampaign: (\n config,\n settingsFile,\n calledCampaign,\n shortlistedCampaigns,\n userId,\n groupName,\n groupId,\n metaData,\n newGoalIdentifier,\n decision\n ) => {\n let winnerCampaign = null;\n let found = false; // flag to check whether winnerCampaign has been found or not and helps to break from the outer loop\n let priorityOrder = typeof settingsFile.groups[groupId].p !== 'undefined' ? settingsFile.groups[groupId].p : {};\n let wt = typeof settingsFile.groups[groupId].wt !== 'undefined' ? settingsFile.groups[groupId].wt : {};\n\n for (let i = 0; i < priorityOrder.length; i++) {\n for (let j = 0; j < shortlistedCampaigns.length; j++) {\n if (shortlistedCampaigns[j].id === priorityOrder[i]) {\n winnerCampaign = FunctionUtil.cloneObject(shortlistedCampaigns[j]);\n found = true;\n break;\n }\n }\n if (found === true) break;\n }\n\n // If winnerCampaign not found through Priority, then go for weighted Random distribution and for that,\n // Store the list of campaigns (participatingCampaigns) out of shortlistedCampaigns and their corresponding weights present in weightage distribution array (wt)\n if (winnerCampaign === null) {\n let participatingCampaignList = [];\n // iterate over shortlisted campaigns and add weights from the weight array\n for (let i = 0; i < shortlistedCampaigns.length; i++) {\n let campaignId = shortlistedCampaigns[i].id;\n if (typeof wt[campaignId] !== 'undefined') {\n let clonedCampaign = FunctionUtil.cloneObject(shortlistedCampaigns[i]);\n clonedCampaign.weight = wt[campaignId];\n participatingCampaignList.push(clonedCampaign);\n }\n }\n /* Finding winner campaign using weighted Distibution :\n 1. Re-distribute the traffic by assigning range values for each camapign in particaptingCampaignList \n 2. Calculate bucket value for the given userId and groupId\n 3. Get the winnerCampaign by checking the Start and End Bucket Allocations of each campaign\n */\n\n CampaignUtil.setCampaignAllocation(participatingCampaignList);\n\n winnerCampaign = BucketingService._getVariation(\n participatingCampaignList,\n BucketingService.calculateBucketValue(CampaignUtil.getBucketingSeed(userId, undefined, groupId))\n );\n }\n\n if (winnerCampaign != null) {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_GOT_WINNER_CAMPAIGN, {\n userId,\n groupName,\n file,\n campaignKey: winnerCampaign.key\n })\n );\n }\n // WinnerCampaign should not be null, in case when winnerCampaign hasn't been found through PriorityOrder and\n // also shortlistedCampaigns and wt array does not have a single campaign id in common\n if (winnerCampaign != null && winnerCampaign.id === calledCampaign.id) {\n // if called campaign is the winner campaign, get the variation for the campaign\n return DecisionUtil.evaluateTrafficAndGetVariation(\n config,\n winnerCampaign,\n winnerCampaign.key,\n userId,\n metaData,\n newGoalIdentifier,\n decision\n );\n } else {\n // if winning campaign not the called camapaign, return\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.MEG_CALLED_CAMPAIGN_NOT_WINNER, {\n userId,\n groupName,\n file,\n campaignKey: calledCampaign.key\n })\n );\n return {};\n }\n }\n};\n\nmodule.exports = DecisionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst GoalTypeEnum = {\n REVENUE: 'REVENUE_TRACKING',\n CUSTOM: 'CUSTOM_GOAL',\n ALL: 'ALL'\n};\n\nmodule.exports = GoalTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ObjectUtil = {\n areObjectKeys: (obj = {}) => {\n return Object.keys(obj).length;\n },\n getKeyValue: obj => {\n if (!ObjectUtil.areObjectKeys(obj)) {\n return;\n }\n let key = Object.keys(obj)[0];\n let value = obj[key];\n return {\n key,\n value\n };\n },\n objectValues: obj => {\n return Object.keys(obj).map(key => obj[key]);\n }\n};\n\nmodule.exports = ObjectUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst UrlEnum = require('../enums/UrlEnum');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\n\nconst UuidUtil = require('./UuidUtil');\nconst ValidateUtil = require('./ValidateUtil');\nconst FunctionUtil = require('./FunctionUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst UrlService = require('../services/UrlService');\n/**\n * Return primary properties required for every network call to VWO server\n * @param {Object} configObj\n * @param {String} userId\n *\n * @returns primary properties\n */\nfunction getPrimaryProperties(configObj, userId) {\n return {\n sId: FunctionUtil.getCurrentUnixTimestamp(),\n u: UuidUtil.generateFor(userId, configObj.accountId)\n };\n}\n\n/**\n * Return base properties required for every network call to VWO server\n * @param {Object} configObj\n * @param {String} userId\n *\n * @returns base properties\n */\nfunction getBaseProperties(configObj, userId) {\n const { accountId } = configObj;\n\n return Object.assign({}, getPrimaryProperties(configObj, userId), ImpressionUtil.getReportingProperties(configObj), {\n account_id: accountId,\n random: FunctionUtil.getRandomNumber(),\n ap: Constants.PLATFORM\n });\n}\n\nlet ImpressionUtil = {\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} tagKey the tag name\n * @param {String} tagValue the tag value\n */\n buildEventForPushing(configObj, tagKey, tagValue, userId) {\n const properties = Object.assign({}, getBaseProperties(configObj, userId));\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.PUSH;\n properties.tags = JSON.stringify({\n u: {\n [encodeURIComponent(tagKey)]: encodeURIComponent(tagValue)\n }\n });\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} tagKey the tag name\n * @param {String} tagValue the tag value\n */\n buildBatchEventForPushing(configObj, tagKey, tagValue, userId) {\n if (typeof process.env !== 'undefined') {\n const properties = Object.assign({}, getPrimaryProperties(configObj, userId));\n properties.eT = 3;\n properties.t = encodeURIComponent(\n JSON.stringify({\n u: {\n [tagKey]: tagValue\n }\n })\n );\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildEventForTrackingUser(\n configObj,\n campaignKey,\n variationId,\n userId,\n usageStats,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n let properties = Object.assign(\n {\n experiment_id: campaignKey,\n combination: variationId,\n visitor_ua: visitorUserAgent,\n visitor_ip: userIpAddress\n },\n getBaseProperties(configObj, userId),\n usageStats\n );\n properties.ed = JSON.stringify({ p: 'server' });\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.TRACK_USER;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} visitorUserAgent, user agent of visitor\n * @param {String} userIpAddress, IP of the visitor\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildBatchEventForTrackingUser(\n configObj,\n campaignKey,\n variationId,\n userId,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n if (typeof process.env !== 'undefined') {\n let properties = Object.assign(\n {\n e: campaignKey,\n c: variationId\n },\n getPrimaryProperties(configObj, userId)\n );\n properties.eT = 1;\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n /**\n * Build properties for the impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} goalId, the Goal ID\n * @param {String} revenue, the revenue generated on conversion\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildEventForTrackingGoal(\n configObj,\n campaignKey,\n variationId,\n userId,\n goal = {},\n revenue = null,\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n const goalId = goal.id;\n\n let properties = Object.assign(\n {\n experiment_id: campaignKey,\n combination: variationId\n },\n getBaseProperties(configObj, userId)\n );\n\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.TRACK_GOAL;\n\n properties['goal_id'] = goalId;\n if (goal.type === GoalTypeEnum.REVENUE && ValidateUtil.isValidValue(revenue)) {\n properties['r'] = revenue;\n }\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n properties: this._getStringifiedLogProperties(properties)\n })\n );\n\n return properties;\n },\n /**\n * Build properties for the bulk impression event\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {String} campaignKey, the Campaign ID\n * @param {Number} variationId, the Variation ID\n * @param {String} goalId, the Goal ID\n * @param {String} revenue, the revenue generated on conversion\n *\n * @return null if campaign ID or variation ID is invalid\n */\n buildBatchEventForTrackingGoal(\n configObj,\n campaignKey,\n variationId,\n userId,\n goal = {},\n revenue = null,\n eventProperties = {},\n visitorUserAgent = '',\n userIpAddress = ''\n ) {\n if (typeof process.env !== 'undefined') {\n let properties = Object.assign(\n {\n e: campaignKey,\n c: variationId\n },\n getPrimaryProperties(configObj, userId)\n );\n properties.eT = 2;\n properties.visitor_ua = visitorUserAgent;\n properties.visitor_ip = userIpAddress;\n\n properties.g = goal.id;\n if (goal.type === GoalTypeEnum.REVENUE && ValidateUtil.isValidValue(revenue)) {\n properties.r = revenue;\n } else if (configObj.isEventArchEnabled && eventProperties.hasOwnProperty(goal.revenueProp)) {\n properties.r = eventProperties[goal.revenueProp];\n }\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n properties: JSON.stringify(properties)\n })\n );\n\n return properties;\n }\n },\n\n /**\n * Return an object containing properties required for segmenting reports\n * @param {Object} configObj\n * @returns reporting properties\n */\n getReportingProperties(configObj) {\n const { sdkKey } = configObj;\n\n return {\n [Constants.SDK_QUERY_PARAM]: Constants.SDK_NAME,\n [Constants.SDK_VERSION_QUERY_PARAM]: Constants.SDK_VERSION,\n env: sdkKey\n };\n },\n\n /**\n * Builds generic properties for different tracking calls required by VWO servers.\n * @param {Object} configObj\n * @param {String} eventName\n * @returns properties\n */\n getEventsBaseProperties(config, eventName, usageStats = {}, visitorUserAgent = '', userIpAddress = '') {\n const { sdkKey } = config;\n\n let properties = Object.assign(\n {\n en: eventName,\n a: config.accountId,\n env: sdkKey,\n eTime: FunctionUtil.getCurrentUnixTimestampInMillis(),\n random: FunctionUtil.getRandomNumber(),\n p: 'FS',\n visitor_ua: visitorUserAgent,\n visitor_ip: userIpAddress\n },\n usageStats\n );\n\n properties.url = Constants.HTTPS_PROTOCOL + UrlService.getBaseUrl() + UrlEnum.EVENTS;\n return properties;\n },\n\n /**\n * Builds generic payload required by all the different tracking calls.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} usageStats\n * @returns properties\n */\n getEventBasePayload(configObj, userId, eventName) {\n const uuid = UuidUtil.generateFor(userId, configObj.accountId);\n const { sdkKey } = configObj;\n\n let props = {\n vwo_sdkName: Constants.SDK_NAME,\n vwo_sdkVersion: Constants.SDK_VERSION,\n vwo_envKey: sdkKey\n };\n\n // if (usageStats) {\n // props = Object.assign({}, props, usageStats);\n // }\n\n let properties = {\n d: {\n msgId: `${uuid}-${FunctionUtil.getCurrentUnixTimestampInMillis()}`,\n visId: uuid,\n sessionId: FunctionUtil.getCurrentUnixTimestamp(),\n event: {\n props: props,\n name: eventName,\n time: FunctionUtil.getCurrentUnixTimestampInMillis()\n },\n visitor: {\n props: {\n vwo_fs_environment: sdkKey\n }\n }\n }\n };\n\n return properties;\n },\n\n /**\n * Builds payload to track the visitor.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {String} campaignId\n * @param {Number} variationId\n * @returns track-user payload\n */\n getTrackUserPayloadData(configObj, userId, eventName, campaignId, variationId) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n properties.d.event.props.id = campaignId;\n properties.d.event.props.variation = variationId;\n\n // this is currently required by data-layer team, we can make changes on DACDN and remove it from here\n properties.d.event.props.isFirst = 1;\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_USER, {\n file: FileNameEnum.ImpressionUtil,\n accountId: configObj.accountId,\n userId,\n campaignId\n })\n );\n\n return properties;\n },\n\n /**\n * Builds payload to track the Goal.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} metricMap\n * @param {String} revenueValue\n * @returns track-goal payload\n */\n getTrackGoalPayloadData(\n configObj,\n userId,\n eventName,\n metricMap,\n revenueValue,\n revenuePropList,\n eventProperties = {}\n ) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n let metric = {};\n Object.keys(metricMap).forEach(key => {\n metric[`id_${key}`] = [`g_${metricMap[key].goal.id}`];\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_TRACK_GOAL, {\n file: FileNameEnum.ImpressionUtil,\n goalName: eventName,\n accountId: configObj.accountId,\n u: userId,\n campaignId: key\n })\n );\n });\n\n properties.d.event.props.vwoMeta = {\n metric: metric\n };\n\n if (revenuePropList && revenueValue && revenuePropList.size > 0) {\n revenuePropList.forEach(revenueProp => {\n properties.d.event.props.vwoMeta[revenueProp] = revenueValue;\n });\n }\n\n properties.d.event.props.isCustomEvent = true;\n\n if (Object.keys(eventProperties).length > 0) {\n for (const prop in eventProperties) {\n properties.d.event.props[prop] = eventProperties[prop];\n }\n }\n\n return properties;\n },\n\n /**\n * Builds payload to appply post segmentation on VWO campaign reports.\n * @param {Object} configObj\n * @param {String} userId\n * @param {String} eventName\n * @param {Object} customDimensionMap\n * @returns push payload\n */\n getPushPayloadData(configObj, userId, eventName, customDimensionMap) {\n const properties = this.getEventBasePayload(configObj, userId, eventName);\n\n properties.d.event.props.isCustomEvent = true;\n\n Object.keys(customDimensionMap).forEach(function(key) {\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n properties.d.visitor.props[key] = tagValue;\n });\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.IMPRESSION_FOR_EVENT_ARCH_PUSH, {\n file: FileNameEnum.ImpressionUtil,\n accountId: configObj.accountId,\n userId,\n property: JSON.stringify(customDimensionMap)\n })\n );\n\n return properties;\n },\n\n /**\n * Remove the sensitive keys from the properties to te displayed in the log.\n * @param {Object} properties\n * @returns properties without sensitive keys\n */\n _getStringifiedLogProperties(properties) {\n const logProperties = Object.assign({}, properties);\n delete logProperties.env;\n return JSON.stringify(logProperties);\n }\n};\n\nmodule.exports = ImpressionUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst EventEnum = {\n VWO_VARIATION_SHOWN: 'vwo_variationShown',\n VWO_SYNC_VISITOR_PROP: 'vwo_syncVisitorProp'\n};\n\nmodule.exports = EventEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VWOFeatureFlags = {\n init(settingsFile) {\n VWOFeatureFlags.isEventArchEnabled = settingsFile.isEventArchEnabled;\n VWOFeatureFlags.isNB = settingsFile.isNB;\n VWOFeatureFlags.isNBv2 = settingsFile.isNBv2;\n },\n\n getAll() {\n return {\n isEventArchEnabled: VWOFeatureFlags.isEventArchEnabled,\n isNB: VWOFeatureFlags.isNB,\n isNBv2: VWOFeatureFlags.isNBv2\n };\n }\n};\n\nmodule.exports = VWOFeatureFlags;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst UrlEnum = {\n BASE_URL: 'dev.visualwebsiteoptimizer.com',\n SETTINGS_URL: '/server-side/settings',\n WEBHOOK_SETTINGS_URL: '/server-side/pull',\n TRACK_USER: '/server-side/track-user',\n TRACK_GOAL: '/server-side/track-goal',\n PUSH: '/server-side/push',\n BATCH_EVENTS: '/server-side/batch-events',\n EVENTS: '/events/t'\n};\n\nmodule.exports = UrlEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Hasher = require('murmurhash');\n\nconst Constants = require('../constants');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst VWOFeatureFlags = require('../utils/VWOFeatureFlags');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.BucketingService;\n\nlet BucketingService = {\n /**\n * Generates Bucket Value of the User by hashing the User ID by murmurHash\n * and scaling it down.\n *\n * @param {Number} hashValue the hashValue generated after hashing\n * @param {Number} maxValue the value up-to which hashValue needs to be scaled\n * @param {Number} multiplier multiplier in case the traffic allocation is less than 100\n *\n * @return {Number} bucket Value of the User\n */\n _generateBucketValue: (hashValue, maxValue, multiplier = 1) => {\n const ratio = hashValue / Math.pow(2, 32);\n const multipliedValue = (maxValue * ratio + 1) * multiplier;\n const value = Math.floor(multipliedValue);\n\n return value;\n },\n\n /**\n * Returns the Variation by checking the Start and End Bucket Allocations of each Variation\n *\n * @param {Object} campaign which contains the variations\n * @param {Number} bucketValue the bucket Value of the user\n *\n * @return {Object|null} variation data allotted to the user or null if not\n */\n _getVariation: (variations, bucketValue) => {\n for (let i = 0; i < Object.keys(variations).length; i++) {\n let variation = variations[i];\n\n if (bucketValue >= variation.startVariationAllocation && bucketValue <= variation.endVariationAllocation) {\n return variation;\n }\n }\n\n return null;\n },\n\n /**\n * Validates the User ID and generates Bucket Value of the User by hashing the userId by murmurHash and scaling it down.\n *\n * @param {String} userId the unique ID assigned to User\n *\n * @return {Number} the bucket Value allotted to User (between 1 to $this->$MAX_TRAFFIC_PERCENT)\n */\n _getBucketValueForUser: (seed, userId, disableLog) => {\n let hashValue = Hasher.v3(seed, Constants.SEED_VALUE);\n let bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_PERCENT);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_HASH_BUCKET_VALUE, {\n file,\n hashValue,\n bucketValue,\n userId\n }),\n disableLog\n );\n\n return bucketValue;\n },\n\n /**\n * Calculate if this user should become part of the campaign or not\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {Object} campaign fot getting the value of traffic allotted to the campaign\n *\n * @return {Boolean} if User is a part of Campaign or not\n */\n isUserPartOfCampaign: (userId, campaign, disableLog = false) => {\n if (!campaign) {\n return false;\n }\n\n let trafficAllocation = campaign.percentTraffic;\n let valueAssignedToUser = BucketingService._getBucketValueForUser(\n CampaignUtil.getBucketingSeed(userId, campaign),\n userId,\n disableLog\n );\n let isUserPart = valueAssignedToUser !== 0 && valueAssignedToUser <= trafficAllocation;\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_CAMPAIGN_ELIGIBILITY, {\n file,\n userId,\n campaignKey: campaign.key,\n status: isUserPart ? 'eligible' : 'not eligible'\n }),\n disableLog\n );\n\n return isUserPart;\n },\n\n /**\n * Validates the User ID and generates Variation into which the User is bucketed in.\n *\n * @param {String} userId the unique ID assigned to User\n * @param {Object} campaign the Campaign of which User is a part of\n *\n * @return {Object|null} variation data into which user is bucketed in or null if not\n */\n bucketUserToVariation: (userId, campaign, accountId) => {\n const isNB = VWOFeatureFlags.getAll().isNB;\n const isNBv2 = VWOFeatureFlags.getAll().isNBv2;\n let multiplier;\n let seed;\n\n if (!ValidateUtil.isValidValue(userId)) {\n return null;\n }\n\n if (!campaign) {\n return null;\n }\n\n if (((!isNB && !isNBv2) || (isNB && campaign.isOB)) && campaign.percentTraffic) {\n // Old bucketing logic if feature flag is OFF or\n // Feature flag is ON and campaign is old i.e. created before feature flag was turned ON\n multiplier = Constants.MAX_TRAFFIC_VALUE / campaign.percentTraffic / 100;\n seed = CampaignUtil.getBucketingSeed(userId, campaign);\n } else if ((isNB && !campaign.isOB && !isNBv2) || (isNBv2 && campaign.isOBv2)) {\n // New bucketing logic if feature flag is ON and campaign is new i.e. created after feature flag was turned ON\n multiplier = 1;\n seed = userId;\n } else {\n // new bucketing V2 Logic\n multiplier = 1;\n seed = CampaignUtil.getBucketingSeed(accountId + '_' + userId, campaign);\n }\n\n const hashValue = BucketingService._generateHashValue(seed);\n const bucketValue = BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.USER_CAMPAIGN_BUCKET_VALUES, {\n file,\n userId,\n campaignKey: campaign.key,\n percentTraffic: campaign.percentTraffic,\n bucketValue,\n hashValue\n })\n );\n\n return BucketingService._getVariation(campaign.variations, bucketValue);\n },\n calculateBucketValue: (seed, multiplier = 1) => {\n const hashValue = BucketingService._generateHashValue(seed);\n return BucketingService._generateBucketValue(hashValue, Constants.MAX_TRAFFIC_VALUE, multiplier);\n },\n _generateHashValue: userId => {\n return Hasher.v3(userId, Constants.SEED_VALUE);\n }\n};\n\nmodule.exports = BucketingService;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst AnsiColorEnum = require('./AnsiColorEnum');\n\nconst LogNumberLevel = {\n _0: 'NOTSET',\n _1: 'DEBUG',\n _2: 'INFO',\n _3: 'WARN',\n _4: 'ERROR'\n};\n\nconst LogLevelEnum = {\n NOTSET: 0,\n DEBUG: 1,\n INFO: 2,\n WARN: 3,\n ERROR: 4\n};\n\nconst LogLevelColorInfoEnum = {\n [LogLevelEnum.NOTSET]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.WHITE}[NOTSET]:${AnsiColorEnum.RESET}`,\n [LogLevelEnum.DEBUG]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.LIGHTBLUE}[DEBUG]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.INFO]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.CYAN}[INFO]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.WARN]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.YELLOW}[WARN]: ${AnsiColorEnum.RESET}`,\n [LogLevelEnum.ERROR]: `${AnsiColorEnum.BOLD}${AnsiColorEnum.RED}[ERROR]: ${AnsiColorEnum.RESET}`\n};\n\nconst LogLevelInfoEnum = {\n [LogLevelEnum.NOTSET]: `[NOTSET]:`,\n [LogLevelEnum.DEBUG]: `[DEBUG]: `,\n [LogLevelEnum.INFO]: `[INFO]: `,\n [LogLevelEnum.WARN]: `[WARN]: `,\n [LogLevelEnum.ERROR]: `[ERROR]: `\n};\n\nmodule.exports = {\n LogLevelEnum,\n LogNumberLevel,\n LogLevelInfoEnum,\n LogLevelColorInfoEnum\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignTypeEnum = {\n FEATURE_TEST: 'FEATURE_TEST',\n FEATURE_ROLLOUT: 'FEATURE_ROLLOUT',\n AB: 'VISUAL_AB'\n};\n\nmodule.exports = CampaignTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst SegmentOperandTypes = require('./SegmentOperandTypesEnum');\nconst SegmentOperatorTypes = require('./SegmentOperatorTypesEnum');\nconst SegmentOperandValueTypeRegexes = require('./SegmentOperandValueTypeRegexesEnum');\nconst SegmentOperandValues = require('./SegmentOperandValuesEnum');\n\nconst SegmentEnum = {\n SegmentOperandTypes,\n SegmentOperatorTypes,\n SegmentOperandValueTypeRegexes,\n SegmentOperandValues\n};\n\nmodule.exports = SegmentEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\n/**\n * Hooks Manager is responsible for triggering callbacks useful to the end-user based on certain lifecycle events.\n * Possible use with integrations when the user intends to send an event when a visitor is part of the experiment.\n */\nconst HooksManager = {\n /**\n * Initializes with configuration from VWO Object.\n * @param {Object} config\n */\n init(config = {}) {\n this.callback = config.integrations && config.integrations.callback;\n },\n /**\n * Executes the callback\n * @param {Object} properties Properties from the callback\n */\n execute(properties) {\n if (DataTypeUtil.isFunction(this.callback)) {\n this.callback(properties);\n }\n }\n};\n\nmodule.exports = HooksManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst uuidv5 = require('uuid/v5');\nconst Constants = require('../constants');\n\nconst VWO_NAMESPACE = uuidv5(Constants.SEED_URL, uuidv5.URL);\n\nconst UuidUtil = {\n generateFor: (userId, accountId) => {\n userId = `${userId}`; // type-cast\n const hash = `${accountId}`;\n const userIdNamespace = UuidUtil.generate(hash, VWO_NAMESPACE);\n const uuidForUserIdAccountId = UuidUtil.generate(userId, userIdNamespace);\n\n let desiredUuid = uuidForUserIdAccountId.replace(/-/gi, '').toUpperCase();\n\n return desiredUuid;\n },\n generate: (name, namespace) => {\n if (!name || !namespace) {\n return;\n }\n\n return uuidv5(name, namespace);\n }\n};\n\nmodule.exports = UuidUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst UrlEnum = require('../enums/UrlEnum');\nconst { isString } = require('../utils/DataTypeUtil');\n\nconst UrlService = {\n init({ collectionPrefix } = {}) {\n if (collectionPrefix && isString(collectionPrefix)) {\n UrlService.collectionPrefix = collectionPrefix;\n }\n\n return UrlService;\n },\n\n getBaseUrl() {\n const baseUrl = UrlEnum.BASE_URL;\n\n if (UrlService.collectionPrefix) {\n return `${baseUrl}/${UrlService.collectionPrefix}`;\n }\n\n return baseUrl;\n }\n};\n\nmodule.exports = UrlService;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { getCurrentTime } = require('./FunctionUtil');\nconst { isObject, isFunction } = require('./DataTypeUtil');\n\nconst FetchUtil = {\n _getStoredSettings: function(userStorageService) {\n let isStoredData = false;\n let parsedSettings;\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) {\n try {\n const settings = userStorageService.getSettings();\n parsedSettings = JSON.parse(settings);\n\n if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) {\n const info = `VWO-SDK - [INFO]: ${getCurrentTime()} VWO settings found in Storage Service.`;\n\n console.info(info);\n\n isStoredData = true;\n } else if (parsedSettings) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid.`;\n\n console.error(error);\n } else {\n const warning = `VWO-SDK - [WARNING]: ${getCurrentTime()} VWO settings is empty in Storage Service.`;\n\n console.warn(warning);\n }\n } catch (err) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid. ${err}`;\n\n console.error(error);\n isStoredData = false;\n }\n }\n\n return {\n isStoredData,\n parsedSettings\n };\n },\n\n send: function({ method, url, payload, userStorageService, customHeaders = {} } = {}) {\n if (!url || !method) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const { isStoredData, parsedSettings } = FetchUtil._getStoredSettings(userStorageService);\n\n if (isStoredData) {\n resolve(parsedSettings);\n } else {\n const options = {\n method,\n headers: customHeaders\n };\n\n if (method === 'POST') {\n options.body = JSON.stringify(payload);\n }\n\n return fetch(url, options)\n .then(res => {\n // Some endpoints return empty strings as the response body; treat\n // as raw text and handle potential JSON parsing errors below\n return res.text().then(text => {\n let jsonData = {};\n try {\n jsonData = JSON.parse(text);\n } catch (err) {\n console.info(\n `VWO-SDK - [INFO]: ${getCurrentTime()} VWO didn't send JSON response which is expected: ${err}`\n );\n }\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) {\n userStorageService.setSettings(jsonData);\n }\n\n if (res.status === 200) {\n resolve(jsonData);\n } else {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${\n res.status\n }`;\n\n console.error(error);\n reject(error);\n }\n });\n })\n .catch(err => {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${err}`;\n\n console.error(error);\n reject(error);\n });\n }\n });\n }\n};\n\nmodule.exports = FetchUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('../services/logging');\nconst { LogLevelEnum } = logging;\nconst { getCurrentTime } = require('./FunctionUtil');\nconst { isObject, isFunction } = require('./DataTypeUtil');\n\nconst XhrUtil = {\n _getStoredSettings: function(userStorageService) {\n let isStoredData = false;\n let parsedSettings;\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.getSettings)) {\n try {\n const settings = userStorageService.getSettings();\n parsedSettings = JSON.parse(settings);\n\n if (parsedSettings && isObject(parsedSettings) && Object.keys(parsedSettings).length > 3) {\n const info = `VWO-SDK - [INFO]: ${getCurrentTime()} VWO settings found in Storage Service.`;\n\n console.info(info);\n\n isStoredData = true;\n } else if (parsedSettings) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid.`;\n\n console.error(error);\n } else {\n const warning = `VWO-SDK - [WARNING]: ${getCurrentTime()} VWO settings is empty in Storage Service.`;\n\n console.warn(warning);\n }\n } catch (err) {\n const error = `VWO-SDK - [ERROR]: ${getCurrentTime()} VWO settings found in Storage Service is not valid. ${err}`;\n\n console.error(error);\n isStoredData = false;\n }\n }\n\n return {\n isStoredData,\n parsedSettings\n };\n },\n send: function({ method, url, payload, userStorageService, customHeaders, logger } = {}) {\n if (!url || !method) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const { isStoredData, parsedSettings } = XhrUtil._getStoredSettings(userStorageService);\n\n if (isStoredData) {\n resolve(parsedSettings);\n } else {\n let xhr = new XMLHttpRequest();\n this.xhrHandler(xhr, method, url, payload, userStorageService, customHeaders, logger, resolve, reject);\n }\n });\n },\n\n // send request function definition (to allow for retries)\n sendRequest: function(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject) {\n let delay = 1000 * (retries + 1);\n let xhr = new XMLHttpRequest();\n\n // Configure timeout\n xhr.timeout = 5000; // Set timeout to 5 seconds (5000 ms)\n\n // onload event\n xhr.onload = () => {\n // retry if error and less than max retries\n if (xhr.status < 200 || xhr.status >= 300) {\n if (retries < maxRetries) {\n retries++;\n\n // log retried times\n logger.log(\n LogLevelEnum.ERROR,\n `Retrying with Status Code : ${xhr.status}, and Response : ${xhr.responseText}`\n );\n\n // call send request again, after delay\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n // log errors with status (clean up later)\n logger.log(\n LogLevelEnum.ERROR,\n `Request failed with Status Code : ${xhr.status} and Response : ${xhr.responseText}`\n );\n reject(`Got Error: ${xhr.statusText} and Status Code: ${xhr.status}`);\n }\n } else {\n // resolve the promise if all well\n resolve(xhr.responseText);\n }\n };\n\n // onerror event\n xhr.onerror = () => {\n if (retries < maxRetries) {\n retries++;\n logger.log(LogLevelEnum.ERROR, 'Retrying due to network error');\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n reject(`Network error: ${xhr.statusText}, Status Code: ${xhr.status}`);\n }\n };\n\n // ontimeout event\n xhr.ontimeout = () => {\n if (retries < maxRetries) {\n retries++;\n logger.log(LogLevelEnum.ERROR, 'Retrying due to timeout');\n setTimeout(() => {\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }, delay);\n } else {\n reject(`Timeout error: ${xhr.statusText}, Status Code: ${xhr.status}`);\n }\n };\n\n // open connection and add headers if any, and then send\n xhr.open(method, url, true);\n for (var newHeaderName in customHeaders) {\n if (customHeaders.hasOwnProperty(newHeaderName)) {\n xhr.setRequestHeader(newHeaderName, customHeaders[newHeaderName]);\n }\n }\n xhr.send(JSON.stringify(payload));\n },\n\n xhrHandler: function(xhr, method, url, payload, userStorageService, customHeaders = {}, logger, resolve, reject) {\n if (method === 'GET') {\n try {\n xhr.onload = () => {\n this.xhrOnLoad(xhr, userStorageService, resolve);\n };\n xhr.onerror = () => {\n this.xhrOnError(xhr, reject);\n };\n\n xhr.open(method, url);\n for (var headerName in customHeaders) {\n if (customHeaders.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, customHeaders[headerName]);\n }\n }\n xhr.send();\n } catch (e) {\n console.log(e.message);\n }\n } else if (method === 'POST') {\n // retry params\n let retries = 0;\n let maxRetries = 5;\n\n // send request\n this.sendRequest(retries, maxRetries, logger, customHeaders, payload, method, url, resolve, reject);\n }\n },\n\n xhrOnLoad: function(xhr, userStorageService, resolve) {\n try {\n let parsedXhrResponse = JSON.parse(xhr.response);\n\n if (userStorageService && isObject(userStorageService) && isFunction(userStorageService.setSettings)) {\n userStorageService.setSettings(xhr.response);\n }\n\n resolve(parsedXhrResponse);\n } catch (err) {\n console.error(err);\n }\n },\n\n xhrOnError: function(xhr, reject) {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${\n xhr.status\n }`;\n\n console.error(error);\n reject(error);\n }\n};\n\nmodule.exports = XhrUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst UrlEnum = require('../enums/UrlEnum');\nconst { getRandomNumber, getCurrentTime } = require('./FunctionUtil');\n\nlet SettingsFileUtil = {\n get: (accountId, sdkKey, userStorageService, config = {}) => {\n if (!accountId || !sdkKey) {\n console.error('AccountId and sdkKey are required for fetching account settings. Aborting!');\n return;\n }\n\n let protocol = 'https';\n let port;\n let hostname = UrlEnum.BASE_URL;\n let path = UrlEnum.SETTINGS_URL;\n\n if (config.isViaWebhook) {\n path = UrlEnum.WEBHOOK_SETTINGS_URL;\n }\n\n path +=\n `?a=${accountId}&` +\n `i=${sdkKey}&` +\n `r=${getRandomNumber()}&` +\n `platform=${Constants.PLATFORM}&` +\n `${Constants.SDK_QUERY_PARAM}=${Constants.SDK_NAME}&` +\n `${Constants.SDK_VERSION_QUERY_PARAM}=${Constants.SDK_VERSION}`;\n\n if (config.hostname && config.path) {\n protocol = config.protocol;\n port = config.port;\n hostname = config.hostname || hostname;\n path = config.path || path;\n }\n\n if (typeof process.env === 'undefined') {\n if (typeof XMLHttpRequest === 'undefined') {\n return require('./FetchUtil').send({\n method: 'GET',\n url: `${protocol}://${hostname}${path}`,\n userStorageService\n });\n }\n return require('./XhrUtil').send({\n method: 'GET',\n url: `${protocol}://${hostname}${path}`,\n userStorageService\n });\n } else {\n const http = require('http');\n const https = require('https');\n\n return new Promise((resolve, reject) => {\n const options = {\n hostname,\n path,\n agent: false\n };\n\n if (port) {\n options.port = port;\n }\n\n (protocol === 'https' ? https : http).get(options, res => {\n SettingsFileUtil.handleHttpRequest(res, resolve, reject);\n });\n });\n }\n },\n\n handleHttpRequest: (res, resolve, reject) => {\n const { statusCode } = res;\n const contentType = res.headers['content-type'];\n\n let error;\n let rawData = '';\n\n if (!/^application\\/json/.test(contentType)) {\n error = `Invalid content-type.\\nExpected application/json but received ${contentType}`;\n }\n\n if (error) {\n console.error(error.message);\n // Consume response data to free up memory\n res.resume();\n reject(error);\n\n return;\n }\n\n res.setEncoding('utf8');\n\n res.on('data', chunk => {\n rawData += chunk;\n });\n\n res.on('end', () => {\n SettingsFileUtil.handleHttpResponse(statusCode, rawData, resolve, reject);\n });\n },\n\n handleHttpResponse: (statusCode, rawData, resolve, reject) => {\n try {\n const parsedData = JSON.parse(rawData);\n\n if (statusCode !== 200) {\n let error = `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings. Got Status Code: ${statusCode} and message: ${rawData}`;\n console.error(error);\n reject(error);\n\n return;\n }\n resolve(parsedData);\n } catch (err) {\n console.error(\n `VWO-SDK - [ERROR]: ${getCurrentTime()} Request failed for fetching account settings - ${err.message}`\n );\n reject(err);\n }\n }\n};\n\nmodule.exports = SettingsFileUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst VWO = require('./VWO');\n\nconst DataTypeUtil = require('./utils/DataTypeUtil');\nconst FunctionUtil = require('./utils/FunctionUtil');\nconst { objectValues } = require('./utils/ObjectUtil');\nconst SettingsFileUtil = require('./utils/SettingsFileUtil');\nconst GoalTypeEnum = require('./enums/GoalTypeEnum');\nconst { MAX_EVENTS_PER_REQUEST } = require('./constants');\n\nconst logging = require('./services/logging');\nconst ApiEnum = require('./enums/ApiEnum');\nconst FileNameEnum = require('./enums/FileNameEnum');\nconst file = FileNameEnum.INDEX;\nconst { setLogHandler, setLogLevel, LogLevelEnum, LogNumberLevel, LogMessageEnum, LogMessageUtil } = logging;\n\nconst logger = logging.getLogger();\n\n// By default, all ERRORS should be logged\nlogging.setLogLevel(LogLevelEnum.ERROR);\n\nfunction logError(parameter = '', type = '') {\n const log = LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CONFIG_PARAMETER_INVALID, {\n file: file,\n parameter,\n type,\n api: ApiEnum.LAUNCH\n });\n\n throw new Error(logger.log(LogLevelEnum.ERROR, log));\n}\n\nfunction logInfo(parameter = '', type = '') {\n const log = LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_PARAMETER_USED, {\n file: file,\n parameter,\n type\n });\n\n console.info(`VWO-SDK - [INFO]: ${FunctionUtil.getCurrentTime()} ${log}`);\n}\n\nmodule.exports = {\n logging,\n setLogger: setLogHandler,\n setLogLevel,\n getSettingsFile: SettingsFileUtil.get,\n GoalTypeEnum,\n LogLevelEnum,\n /**\n * Initializes the SDK and parses the settingsfile\n *\n * @param {Object} config configuration for the SDK\n */\n launch: function(sdkConfig) {\n let config = {};\n try {\n // validating config schema\n FunctionUtil.cloneObject(sdkConfig);\n if (\n !DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser) &&\n !DataTypeUtil.isBoolean(sdkConfig.shouldTrackReturningUser)\n ) {\n logError('shouldTrackReturningUser', 'boolean');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.shouldTrackReturningUser)) {\n logInfo('shouldTrackReturningUser', 'boolean');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode) &&\n !DataTypeUtil.isBoolean(sdkConfig.isDevelopmentMode)\n ) {\n logError('isDevelopmentMode', 'boolean');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.isDevelopmentMode)) {\n logInfo('isDevelopmentMode', 'boolean');\n }\n\n if (sdkConfig.goalTypeToTrack && !objectValues(GoalTypeEnum).includes(sdkConfig.goalTypeToTrack)) {\n logError('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)');\n } else if (sdkConfig.goalTypeToTrack) {\n logInfo('goalTypeToTrack', 'string(REVENUE_TRACKING, CUSTOM_GOAL, ALL)');\n }\n\n if (\n sdkConfig.logging &&\n sdkConfig.logging.level &&\n !objectValues(LogLevelEnum).includes(sdkConfig.logging.level)\n ) {\n logError('logLevel', 'number(1,2,3,4)');\n } else if (sdkConfig.logging && sdkConfig.logging.level) {\n logInfo('logLevel', 'number(1,2,3,4)');\n }\n\n if (sdkConfig.pollingInterval && !DataTypeUtil.isNumber(sdkConfig.pollingInterval)) {\n logError('pollingInterval', 'number(in miliiseconds)');\n } else if (sdkConfig.pollingInterval) {\n logInfo('pollingInterval', 'number(in miliiseconds)');\n }\n\n if (sdkConfig.pollingInterval && DataTypeUtil.isUndefined(sdkConfig.sdkKey)) {\n logError('sdkKey(required for polling)', 'string');\n }\n\n if (sdkConfig.pollingInterval && !DataTypeUtil.isString(sdkConfig.sdkKey)) {\n logError('sdkKey', 'string');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents) && !DataTypeUtil.isObject(sdkConfig.batchEvents)) {\n logError('batchEvents', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.batchEvents)) {\n logInfo('batchEvents', 'object');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor) && !DataTypeUtil.isObject(sdkConfig.returnPromiseFor)) {\n logError('returnPromiseFor', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.returnPromiseFor)) {\n logInfo('returnPromiseFor', 'object');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig) &&\n !DataTypeUtil.isObject(sdkConfig.asyncStorageConfig)\n ) {\n logError('asyncStorageConfig', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.asyncStorageConfig)) {\n logInfo('asyncStorageConfig', 'object');\n }\n\n if (!DataTypeUtil.isUndefined(sdkConfig.integrations) && !DataTypeUtil.isObject(sdkConfig.integrations)) {\n logError('integrations', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.integrations)) {\n logInfo('integrations', 'object');\n }\n\n if (\n !DataTypeUtil.isUndefined(sdkConfig.userStorageService) &&\n !DataTypeUtil.isObject(sdkConfig.userStorageService)\n ) {\n logError('userStorageService', 'object');\n } else if (!DataTypeUtil.isUndefined(sdkConfig.userStorageService)) {\n logInfo('userStorageService', 'object');\n }\n\n // For JavaScript SDK, batching is not required and is not available\n if (DataTypeUtil.isObject(sdkConfig.batchEvents) && typeof process.env === 'undefined') {\n sdkConfig.batchEvents = null;\n }\n\n // For Node.js SDK\n if (typeof process.env !== 'undefined') {\n if (\n DataTypeUtil.isObject(sdkConfig.batchEvents) &&\n (!(\n (DataTypeUtil.isNumber(sdkConfig.batchEvents.eventsPerRequest) &&\n sdkConfig.batchEvents.eventsPerRequest > 0 &&\n sdkConfig.batchEvents.eventsPerRequest <= MAX_EVENTS_PER_REQUEST) ||\n (DataTypeUtil.isNumber(sdkConfig.batchEvents.requestTimeInterval) &&\n sdkConfig.batchEvents.requestTimeInterval >= 1)\n ) ||\n (sdkConfig.batchEvents.flushCallback && !DataTypeUtil.isFunction(sdkConfig.batchEvents.flushCallback)))\n ) {\n logError('batchEvents', 'object');\n }\n }\n\n config = sdkConfig;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.CONFIG_CORRUPTED, {\n file: file,\n api: ApiEnum.LAUNCH\n })\n );\n\n config = {};\n }\n\n // If DEV mode, set colorful logs to true\n if (config.isDevelopmentMode) {\n logging.setLogColorMode(true);\n }\n\n // If logging is enabled, use the logger and logLevel defined by the client\n if (config.logging && DataTypeUtil.isObject(config.logging)) {\n if (config.logging.haveColoredLogs !== undefined) {\n logging.setLogColorMode(config.logging.haveColoredLogs);\n }\n\n if (\n config.logging.logger &&\n DataTypeUtil.isObject(config.logging.logger) &&\n DataTypeUtil.isFunction(config.logging.logger.log)\n ) {\n logging.setLogHandler(config.logging.logger);\n logging.setLogLevel(logging.LogLevelEnum.NOTSET);\n\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_CUSTOM_LOGGER_USED, {\n file: file\n })\n );\n } else if (config.logging.logger) {\n logError('logging.logger', 'object');\n }\n\n if (config.logging.level !== undefined) {\n logging.setLogLevel(config.logging.level);\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_LOG_LEVEL_SET, {\n file: file,\n level: LogNumberLevel['_' + config.logging.level]\n })\n );\n }\n }\n\n // DEBUG log for knowing whether it's DEV mode\n if (config.isDevelopmentMode) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, {\n file: file\n })\n );\n }\n\n // Set logger on config Obkect, to be required later\n config.logger = (config.logging && config.logging.logger) || logger;\n\n // Create an instance of VWO class which exposes API methods\n return new VWO(config);\n }\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst api = require('./api');\n\nconst FileNameEnum = require('./enums/FileNameEnum');\nconst ApiEnum = require('./enums/ApiEnum');\n\nconst DataTypeUtil = require('./utils/DataTypeUtil');\nconst FunctionUtil = require('./utils/FunctionUtil');\nconst VWOFeatureFlags = require('./utils/VWOFeatureFlags');\n\nconst EventQueue = require('./services/EventQueue');\nconst SettingsFileService = require('./services/SettingsFileManager');\nconst logging = require('./services/logging');\nconst HooksManager = require('./services/HooksManager');\nconst UrlService = require('./services/UrlService');\nconst UsageStats = require('./services/UsageStats');\n\nlet BatchEventsDispatcher;\nlet customEventUtil;\nlet BatchEventsQueue;\n\nif (typeof process.env !== 'undefined') {\n BatchEventsQueue = require('./services/BatchEventsQueue');\n BatchEventsDispatcher = require('./utils/BatchEventsDispatcher').dispatch;\n customEventUtil = require('./utils/CustomEventUtil');\n}\n\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst file = FileNameEnum.VWO;\n\nclass VWO {\n // Setting various services on the instance to be accessible by its member functions\n constructor(config = {}) {\n this.getVariation = this.getVariationName; // to be backward compatible\n this.userStorageService = config.userStorageService;\n this.logger = config.logger;\n this.returnPromiseFor = config.returnPromiseFor;\n this.asyncStorageConfig = config.asyncStorageConfig;\n this.optOut = false;\n\n if (this.userStorageService === undefined && config.asyncStorageConfig) {\n // replace the userStorageService with the redisObject passed in asyncStorageConfig\n this.userStorageService = config.asyncStorageConfig.redisStorage;\n config.userStorageService = this.userStorageService;\n }\n let settingsFileManager = new SettingsFileService(config);\n\n // Validate the config file i.e. check if required fields contain appropriate data\n if (!settingsFileManager.isSettingsFileValid()) {\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_INVALID, {\n file\n })\n );\n\n return;\n }\n\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_VALID, {\n file\n })\n );\n\n // Initialize Hooks manager so that callbacks can be invoked\n HooksManager.init(config);\n\n // Setup event quque for sending impressions to VWO server\n this.eventQueue = new EventQueue();\n this.usageStats = new UsageStats();\n\n this.SettingsFileManager = settingsFileManager;\n settingsFileManager.checkAndPoll(); // Checks if pollingInterval is passed then starts polling settingsFile\n\n if (!config.isDevelopmentMode) {\n this.usageStats.collectUsageStats(settingsFileManager.getConfig());\n }\n\n // Only for Node.js SDK\n if (typeof process.env !== 'undefined') {\n if (config.batchEvents) {\n const accountId = settingsFileManager.getSettingsFile().accountId;\n const sdkKey = settingsFileManager.getSettingsFile().sdkKey;\n\n this.batchEventsQueue = new BatchEventsQueue(\n Object.assign(\n {},\n config.batchEvents,\n { isDevelopmentMode: config.isDevelopmentMode },\n {\n accountId,\n dispatcher: (events, callback) =>\n BatchEventsDispatcher(\n {\n ev: events\n },\n callback,\n Object.assign(\n {},\n {\n a: accountId\n },\n this.usageStats.getUsageStats()\n ),\n sdkKey\n )\n }\n )\n );\n\n this.batchEventsQueue.flushAndClearTimer.bind(this.batchEventsQueue);\n }\n }\n\n // Process settingsFile for various things. For eg: assign bucket range to variation, etc.\n this.SettingsFileManager.processSettingsFile();\n\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.SDK_INITIALIZED, {\n file\n })\n );\n\n this.UrlService = UrlService.init(config.settingsFile);\n this.VWOFeatureFlags = VWOFeatureFlags.init(config.settingsFile);\n }\n\n // PUBLIC METHODS\n\n /**\n * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server\n *\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\n activate(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.ACTIVATE\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n resolve(null);\n } else {\n return api.activate(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.variationName);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.activate || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.ACTIVATE\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n resolve(null);\n } else {\n let variationName;\n options.responseCallback = (_error, _response) => {\n resolve(variationName);\n };\n variationName = api.activate(self, campaignKey, userId, options);\n\n // If we get null from the API i.e. no tracking call was sent\n // In this case, responseCallback will not be fired and hence we have to manually resolve the promise\n if (!variationName) {\n resolve(variationName);\n } else if (DataTypeUtil.isObject(variationName)) {\n resolve(variationName.variationName);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n return null;\n }\n\n const apiResponse = api.activate(self, campaignKey, userId, options);\n\n if (DataTypeUtil.isObject(apiResponse)) {\n return apiResponse.variationName;\n }\n\n return apiResponse;\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Gets the variation assigned for the user for the campaign\n *\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\n getVariationName(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_VARIATION_NAME\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n resolve(null);\n } else {\n return api.getVariation(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.variationName);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n if (self.returnPromiseFor && (self.returnPromiseFor.getVariationName || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_VARIATION_NAME\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n resolve(null);\n } else {\n // since this API does not send any async call, we can simply resolve the returned value\n resolve(api.getVariation(self, campaignKey, userId, options));\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n return null;\n }\n\n return api.getVariation(self, campaignKey, userId, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Marks the conversion of the campaign for a particular goal\n *\n * @param {String/Array/null/undefined} campaignSpecifier campaign keys to track unique campaignSpecifier\n * @param {String} userId ID assigned to a user\n * @param {String} goalIdentifier unique campaign's goal identifier\n * @param {Object} options optional params - customVariables, variationTargetingVariables, revenueValue\n */\n track(campaignSpecifier, userId, goalIdentifier, options = {}) {\n try {\n let self = this;\n\n // In case we use any asyncStorage like redis, promisify track\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.TRACK\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n resolve(null);\n } else {\n return api.track(self, campaignSpecifier, userId, goalIdentifier, options).then(function(trackResponse) {\n resolve(trackResponse);\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.track || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.TRACK\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n resolve(null);\n } else {\n let trackResponse;\n let counter = 0;\n options.responseCallback = (_error, _response) => {\n counter += 1;\n // For Data360, one single call is there to track multiple metrices\n // For global goals, we are now sending one single batch-events call\n if (\n self.isEventArchEnabled ||\n (DataTypeUtil.isArray(campaignSpecifier) ||\n ((DataTypeUtil.isUndefined(campaignSpecifier) || DataTypeUtil.isNull(campaignSpecifier)) &&\n FunctionUtil.objectValues(trackResponse).filter(Boolean).length))\n ) {\n resolve(trackResponse);\n } else if (counter === FunctionUtil.objectValues(trackResponse).filter(Boolean).length) {\n // In case of global goals, when all campaigns are tracked, then only resolve\n // TODO: verify if this can be removed as we are sending batch events call always for non-Data360 accounts\n resolve(trackResponse);\n }\n };\n trackResponse = api.track(self, campaignSpecifier, userId, goalIdentifier, options);\n // If we get null/false from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n // Or, in case of global goals, if none campaign got success, manually resolve\n if (!trackResponse || !FunctionUtil.objectValues(trackResponse).some(Boolean)) {\n resolve(trackResponse);\n } else if (trackResponse && trackResponse.isDevelopmentMode) {\n delete trackResponse.isDevelopmentMode;\n resolve(trackResponse);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.TRACK\n })\n );\n return null;\n }\n\n return api.track(self, campaignSpecifier, userId, goalIdentifier, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method checks: Whether a feature is enabled or not for the given user\n *\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} userId Unique identifier for the user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {Boolean} true if feature enabled, false otherwise\n */\n isFeatureEnabled(campaignKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n resolve(null);\n } else {\n return api.isFeatureEnabled(self, campaignKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.isFeatureEnabled);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.isFeatureEnabled || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n resolve(false);\n } else {\n let isFeatureEnabledApiResponse;\n options.responseCallback = (_error, _response) => {\n resolve(!!isFeatureEnabledApiResponse);\n };\n isFeatureEnabledApiResponse = api.isFeatureEnabled(self, campaignKey, userId, options);\n // If we get null from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n if (DataTypeUtil.isNull(isFeatureEnabledApiResponse)) {\n resolve(false);\n } else if (DataTypeUtil.isObject(isFeatureEnabledApiResponse)) {\n resolve(!!isFeatureEnabledApiResponse.isFeatureEnabled);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.IS_FEATURE_ENABLED\n })\n );\n return false;\n }\n\n const apiResponse = api.isFeatureEnabled(self, campaignKey, userId, options);\n\n if (DataTypeUtil.isObject(apiResponse)) {\n return !!apiResponse.isFeatureEnabled;\n }\n\n return !!apiResponse;\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return false;\n }\n }\n\n /**\n * This API method: Return the variable for that variation(if Feature Test),\n * otherwise the default values being set in Feature\n *\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} variableKey Unique key for a feature's variable\n * @param {String} userId Unique identifier for the user\n * @param {Object} options optional params - customVariables, variationTargetingVariables\n *\n * @return {string|number|double|boolean|null} Variable value as is set in the VWO app i.e.\n * maintaining the data-type,\n * null if anything fails like campaign / variable not found\n */\n getFeatureVariableValue(campaignKey, variableKey, userId, options = {}) {\n try {\n let self = this;\n\n if (self.asyncStorageConfig && DataTypeUtil.isObject(self.asyncStorageConfig)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_ASYNC_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n resolve(null);\n } else {\n return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options).then(function(data) {\n if (DataTypeUtil.isObject(data)) {\n resolve(data.typeCastedValue);\n } else {\n resolve(data);\n }\n });\n }\n });\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n if (self.returnPromiseFor && (self.returnPromiseFor.getFeatureVariableValue || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n resolve(null);\n } else {\n // since this API does not send any async call, we can simply resolve the returned value\n resolve(api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options));\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.GET_FEATURE_VARIABLE_VALUE\n })\n );\n return null;\n }\n\n return api.getFeatureVariableValue(self, campaignKey, variableKey, userId, options);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return null;\n }\n }\n\n /**\n * This API method: Pushes the key-value tag pair for a particular user\n *\n * @param {String} tagKey tag key\n * @param {String} tagValue tag Value\n * @param {String} userId ID assigned to a user\n *\n * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable\n */\n push(tagKey, tagValue, userId) {\n try {\n let self = this;\n let customDimensionMap;\n\n if (arguments.length === 2) {\n // Argument reshuffling.\n customDimensionMap = tagKey;\n userId = tagValue;\n\n tagKey = ' ';\n tagValue = ' ';\n } else if (arguments.length === 3) {\n customDimensionMap = {};\n } else {\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.PUSH\n })\n );\n return false;\n }\n\n // Check if returnPromiseFor is provided. If yes, return a promise instead of value\n // i.e. wait till the network call is not successful\n if (self.returnPromiseFor && (self.returnPromiseFor.push || self.returnPromiseFor.all)) {\n self.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CONFIG_RETURN_PROMISE, {\n file,\n method: ApiEnum.PUSH\n })\n );\n return new Promise(resolve => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.PUSH\n })\n );\n resolve(null);\n } else {\n let apiResponse;\n let counter = 0;\n\n const options = {\n responseCallback: (_error, _response) => {\n counter += 1;\n // In case of multiple custom dimensions, when all are tracked, then only resolve\n // if customDimensionMap is used\n if (\n customDimensionMap &&\n DataTypeUtil.isObject(customDimensionMap) &&\n FunctionUtil.objectValues(customDimensionMap).filter(Boolean).length > 1\n ) {\n resolve(apiResponse);\n }\n // else if custom dimensions are sent with tag key and value instead of a map\n else if (counter === FunctionUtil.objectValues(apiResponse).filter(Boolean).length) {\n resolve(apiResponse);\n }\n }\n };\n apiResponse = api.push(self, tagKey, tagValue, userId, customDimensionMap, options);\n // If we get false from the API i.e. no tracking call was sent\n // In this case, respponseCallback will not be fired and hence we have to manually resolve the promise\n if (!apiResponse) {\n resolve(false);\n } else if (apiResponse && apiResponse.isDevelopmentMode) {\n delete apiResponse.isDevelopmentMode;\n resolve(apiResponse);\n }\n }\n });\n }\n\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: ApiEnum.PUSH\n })\n );\n return null;\n }\n\n return api.push(self, tagKey, tagValue, userId, customDimensionMap);\n } catch (err) {\n this.logger.log(LogLevelEnum.ERROR, err.message);\n return false;\n }\n }\n\n setOptOut() {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.OPT_OUT_API_CALLED, {\n file\n })\n );\n\n if (this.returnPromiseFor && (this.returnPromiseFor.optOut || this.returnPromiseFor.all)) {\n return new Promise(resolve => {\n this._destroyInstanceVariables();\n if (this.batchEventsQueue) {\n this.flushEvents().then(() => {\n this.batchEventsQueue = undefined;\n resolve(true);\n });\n } else {\n resolve(true);\n }\n });\n }\n\n if (this.batchEventsQueue) {\n this.flushEvents().then(() => {\n this.batchEventsQueue = undefined;\n });\n }\n\n this._destroyInstanceVariables();\n\n return true;\n }\n /**\n * Manually flush impression events to VWO which are queued in batch queue as per batchEvents config\n */\n flushEvents() {\n const accountId = this.SettingsFileManager.getSettingsFile().accountId;\n\n if (typeof process.env !== 'undefined') {\n this.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.EVENT_BATCH_FLUSH, {\n file,\n accountId\n })\n );\n\n return new Promise((resolve, _reject) => {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: 'flushEvents'\n })\n );\n resolve({\n status: false,\n message: 'opted out'\n });\n } else {\n if (this.batchEventsQueue) {\n customEventUtil.getInstance().once('batchCallCompleteion', (status, message) => {\n if (status) {\n resolve({\n status: true,\n message: message || 'Batch call sent to VWO'\n });\n } else {\n resolve({\n status: false,\n message: message || 'Batch call could not be processed'\n });\n }\n });\n\n this.batchEventsQueue.flushAndClearTimer();\n\n return;\n }\n\n this.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.NO_BATCH_QUEUE, {\n file,\n accountId\n })\n );\n\n resolve({\n status: false,\n message: 'No batchEvents config present in launch API'\n });\n }\n });\n }\n }\n\n /**\n * Fetch latest settings-file and update so that vwoClientInstance could use latest settings\n * Helpful especially when using webhooks\n *\n * @param {Number} accountId\n * @param {String} sdkKey\n *\n * @return {Promise}\n */\n getAndUpdateSettingsFile(accountId, sdkKey) {\n if (this.optOut) {\n this.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.API_NOT_ENABLED, {\n file,\n api: 'getAndUpdateSettingsFile'\n })\n );\n return new Promise(resolve => {\n resolve(null);\n });\n }\n return this.SettingsFileManager.getAndUpdateSettingsFile(accountId, sdkKey);\n }\n\n _destroyInstanceVariables() {\n this.userStorageService = undefined;\n this.SettingsFileManager = undefined;\n this.usageStats = undefined;\n this.eventQueue = undefined;\n this.optOut = true;\n }\n}\n\nmodule.exports = VWO;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst activate = require('./activate');\nconst getVariation = require('./getVariation');\nconst track = require('./track');\nconst isFeatureEnabled = require('./isFeatureEnabled');\nconst getFeatureVariableValue = require('./getFeatureVariableValue');\nconst push = require('./push');\n\nmodule.exports = {\n activate,\n getVariation,\n track,\n isFeatureEnabled,\n getFeatureVariableValue,\n push\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Activate;\n\n/**\n * This API method: Gets the variation assigned for the user for the campaign and send the metrics to VWO server\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Assigns the determinitic variation to the user(based on userId), if user becomes part of campaign\n * If userStorageService is used, it will look into it for the variation and if found, no further processing is done\n * 4. Sends an impression call to VWO server to track user\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options Optional params\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\nfunction activate(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.ACTIVATE;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n userAgent,\n userIpAddress\n } = options;\n\n var visitorUserAgent = userAgent;\n\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.ACTIVATE,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n visitorUserAgent,\n userIpAddress\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.ACTIVATE\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false;\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (!CampaignUtil.isAbCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n // Once the matching RUNNING campaign is found, assign the deterministic variation to the userId provided\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n true,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n data\n );\n });\n }\n\n return _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n result\n );\n}\n\nfunction _validateAndReturnVariation(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n visitorUserAgent,\n userIpAddress,\n responseCallback,\n result\n) {\n var { variationId, variationName, isStoredVariation } = result;\n\n // Check if variation-name has been assigned to the userId. If not, return no variation\n if (!ValidateUtil.isValidValue(variationName)) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.DECISION_NO_VARIATION_ALLOTED, {\n file,\n userId,\n campaignKey\n })\n );\n\n return null;\n }\n\n // check if variation found from storage. return it without sending a call to VWO server\n if (isStoredVariation && !shouldTrackReturningUser) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, {\n file,\n userId,\n campaignKey,\n api\n })\n );\n return { variationName };\n }\n\n // Variation found...let VWO server knows about it to show report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n EventEnum.VWO_VARIATION_SHOWN,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackUserPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_VARIATION_SHOWN,\n campaign.id,\n variationId\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n } else {\n let properties = ImpressionUtil.buildEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n }\n\n if (config.isDevelopmentMode) {\n return { variationName };\n }\n\n return variationName;\n}\nmodule.exports = activate;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ValidateUtil = require('../utils/ValidateUtil');\n\nconst Bucketer = require('./BucketingService');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.VariationDecider;\n\nconst VariationDecider = {\n /**\n * Returns the Variation Allotted to User\n *\n * @param {String} userId the unique ID assigned to User\n * @param {Object} campaign\n *\n * @return {Object} Variation object allotted to User\n */\n getVariationAllotted: (userId, campaign, accountId) => {\n let response = {\n variation: null,\n variationId: null,\n variationName: null\n };\n\n if (!ValidateUtil.isValidValue(userId)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.USER_ID_INVALID, {\n file,\n userId\n })\n );\n\n return response;\n }\n\n if (Bucketer.isUserPartOfCampaign(userId, campaign)) {\n let variation = VariationDecider.getVariationOfCampaignForUser(userId, campaign, accountId) || {};\n response.variation = variation;\n response.variationId = variation.id;\n response.variationName = variation.name;\n } else {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_NOT_PART_OF_CAMPAIGN, {\n file,\n userId,\n campaignKey: campaign.key\n })\n );\n }\n\n return response;\n },\n\n /**\n * Assigns random variation ID to a particular user depending on the PercentTraffic.\n * Makes user a part of campaign if user's included in Traffic.\n *\n * @param {String} userId the unique ID assigned to a user\n * @param {Object} campaign the Campaign of which user is to be made a part of\n *\n * @return {Object|null} Variation allotted to User\n */\n getVariationOfCampaignForUser: (userId, campaign, accountId) => {\n if (!campaign) {\n return null;\n }\n\n let variation = Bucketer.bucketUserToVariation(userId, campaign, accountId);\n\n if (variation && variation.name) {\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, {\n file,\n userId,\n campaignKey: campaign.key,\n status: `got Varation:${variation.name}`\n })\n );\n return {\n variation,\n name: variation.name,\n id: variation.id\n };\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.USER_VARIATION_STATUS, {\n file,\n userId,\n campaignKey: campaign.key,\n status: 'got no variation'\n })\n );\n\n return null;\n }\n};\n\nmodule.exports = VariationDecider;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeEnum = {\n NUMBER: 'number',\n STRING: 'string',\n // FUNCTION: 'function',\n BOOLEAN: 'boolean',\n OBJECT: 'object'\n};\n\nmodule.exports = DataTypeEnum;\n","(function(){\n var _global = this;\n\n /**\n * JS Implementation of MurmurHash2\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV2(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k =\n ((str.charCodeAt(i) & 0xff)) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24);\n\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n };\n\n /**\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV3(key, seed) {\n var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n remainder = key.length & 3; // key.length % 4\n bytes = key.length - remainder;\n h1 = seed;\n c1 = 0xcc9e2d51;\n c2 = 0x1b873593;\n i = 0;\n\n while (i < bytes) {\n k1 =\n ((key.charCodeAt(i) & 0xff)) |\n ((key.charCodeAt(++i) & 0xff) << 8) |\n ((key.charCodeAt(++i) & 0xff) << 16) |\n ((key.charCodeAt(++i) & 0xff) << 24);\n ++i;\n\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n case 1: k1 ^= (key.charCodeAt(i) & 0xff);\n\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= k1;\n }\n\n h1 ^= key.length;\n\n h1 ^= h1 >>> 16;\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= h1 >>> 13;\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n h1 ^= h1 >>> 16;\n\n return h1 >>> 0;\n }\n\n var murmur = MurmurHashV3;\n murmur.v2 = MurmurHashV2;\n murmur.v3 = MurmurHashV3;\n\n if (typeof(module) != 'undefined') {\n module.exports = murmur;\n } else {\n var _previousRoot = _global.murmur;\n murmur.noConflict = function() {\n _global.murmur = _previousRoot;\n return murmur;\n }\n _global.murmur = murmur;\n }\n}());\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Took reference from: \"loglevel\" - https://github.com/pimterry/loglevel\n *\n * Name: loglevel\n * Published Name: loglevel\n * URL: https://github.com/pimterry/loglevel\n * Description: Minimal lightweight logging for JavaScript, adding reliable log level methods to wrap any available console.log methods\n * Author: Tim Perry (https://github.com/pimterry)\n * LICENSE: MIT License\n * Local Modifications: This library is not used as a dependency. Source code was referenced and is modified as per requirements.\n *\n */\n\n// TODO: change path\nconst LogMessageEnum = {\n DEBUG_MESSAGES: require('vwo-sdk-log-messages/src/debug-messages.json'),\n INFO_MESSAGES: require('vwo-sdk-log-messages/src/info-messages.json'),\n WARNING_MESSAGES: require('vwo-sdk-log-messages/src/warning-messages.json'),\n ERROR_MESSAGES: require('vwo-sdk-log-messages/src/error-messages.json')\n};\n\nconst { LogLevelEnum, LogNumberLevel } = require('../../enums/LogLevelEnum');\nconst LogMessageUtil = require('../../utils/LogMessageUtil');\n\nconst ConsoleLogManager = require('./ConsoleLogManager');\n\nlet globalLogLevel = LogLevelEnum.NOTSET;\nlet isColoredLogEnabled = false;\nlet globalLogHandler = new ConsoleLogManager();\n\nclass LogManager {\n constructor(name) {\n this.name = name;\n this.isColoredLogEnabled = isColoredLogEnabled;\n }\n\n _customLog(level, message) {\n if (level < globalLogLevel) {\n return;\n }\n\n globalLogHandler.log(level, message);\n }\n\n log(level, message, disableLogs = false) {\n if (disableLogs) {\n return;\n }\n try {\n this._customLog(level, message);\n } catch (err) {\n console.error('VWO: Could not log.', err);\n }\n }\n\n info(message) {\n this._customLog(LogLevelEnum.INFO, message);\n }\n debug(message) {\n this._customLog(LogLevelEnum.DEBUG, message);\n }\n warn(message) {\n this._customLog(LogLevelEnum.WARN, message);\n }\n error(message) {\n this._customLog(LogLevelEnum.ERROR, message);\n }\n}\n\nfunction getLogger(name) {\n return new LogManager(name);\n}\n\nfunction setLogHandler(logger) {\n globalLogHandler = logger;\n}\n\nfunction setLogLevel(level) {\n if (level === undefined) {\n globalLogLevel = LogLevelEnum.ERROR;\n } else {\n globalLogLevel = level;\n }\n}\n\nfunction getLogLevel() {\n return globalLogLevel;\n}\n\nfunction setLogColorMode(value) {\n isColoredLogEnabled = value;\n globalLogHandler.isColoredLogEnabled = isColoredLogEnabled;\n}\n\nfunction getLogColorMode() {\n return isColoredLogEnabled;\n}\n\nmodule.exports = {\n LogLevelEnum,\n LogNumberLevel,\n LogMessageUtil,\n LogMessageEnum,\n getLogger,\n setLogHandler,\n setLogLevel,\n getLogLevel,\n LogManager,\n setLogColorMode,\n getLogColorMode,\n globalLogHandler\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst AnsiColorEnum = {\n BOLD: '\\x1b[1m',\n CYAN: '\\x1b[36m',\n GREEN: '\\x1b[32m',\n LIGHTBLUE: '\\x1b[94m',\n RED: '\\x1b[31m',\n RESET: '\\x1b[0m',\n WHITE: '\\x1b[30m',\n YELLOW: '\\x1b[33m'\n};\n\nmodule.exports = AnsiColorEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('./DataTypeUtil');\n\nconst nargs = /\\{([0-9a-zA-Z_]+)\\}/g;\n\nlet LogMessageUtil = {\n /**\n * Took reference from: string-template\n *\n * Name: string-template\n * Published Name: string-template\n * URL: https://github.com/Matt-Esch/string-template\n * Description: A lightweight string replace engine for text-based templates\n * Author: Matt-Esch (https://github.com/Matt-Esch)\n * License: MIT License\n * Local Modifications: This library is not used as a dependency.\n * Source code was referenced and is modified as per requirements.\n */\n build: (template, data) => {\n try {\n return template.replace(nargs, (match, key, index) => {\n let result;\n let isKey;\n\n if (template[index - 1] === '{' && template[index + match.length] === '}') {\n return key;\n } else {\n isKey = data.hasOwnProperty(key);\n\n if (isKey) {\n let value = data[key];\n\n if (DataTypeUtil.isFunction(value)) {\n value = data[key]();\n }\n result = value;\n } else {\n result = null;\n }\n if (result === null || result === undefined) {\n return '';\n }\n\n return result;\n }\n });\n } catch (err) {\n return template;\n }\n }\n};\n\nmodule.exports = LogMessageUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { getCurrentTime } = require('../../utils/FunctionUtil');\nconst { LogLevelEnum, LogLevelInfoEnum, LogLevelColorInfoEnum } = require('../../enums/LogLevelEnum');\n\nclass ConsoleLogManager {\n constructor() {\n this.logLevel = LogLevelEnum.NOTSET;\n this.prefix = `VWO-SDK`;\n this.isColoredLogEnabled = false;\n }\n\n log(level, message) {\n if (!this.shouldLog(level)) {\n return;\n }\n\n let logMessage;\n if (this.isColoredLogEnabled) {\n logMessage = `${this.prefix} - ${LogLevelColorInfoEnum[level]} ${getCurrentTime()} ${message}`;\n } else {\n logMessage = `${this.prefix} - ${LogLevelInfoEnum[level]} ${getCurrentTime()} ${message}`;\n }\n\n this.consoleLog(level, [logMessage]);\n }\n\n shouldLog(targetLogLevel) {\n return targetLogLevel >= this.logLevel;\n }\n\n setLogLevel(level) {\n if (level === undefined) {\n this.logLevel = LogLevelEnum.ERROR;\n } else {\n this.logLevel = level;\n }\n }\n\n consoleLog(level, logArguments) {\n switch (level) {\n case LogLevelEnum.INFO:\n console.info.apply(console, logArguments);\n break;\n case LogLevelEnum.WARN:\n console.warn.apply(console, logArguments);\n break;\n case LogLevelEnum.ERROR:\n console.error.apply(console, logArguments);\n break;\n default:\n console.log.apply(console, logArguments);\n break;\n }\n }\n}\n\nmodule.exports = ConsoleLogManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n PASSED: 'passed',\n FAILED: 'failed'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst SegmentEnum = require('../enums/segment');\nconst { getKeyValue } = require('../utils/ObjectUtil');\nconst { operandCustomVariablesParser, operandUserParser } = require('../utils/SegmentUtil');\nconst logging = require('../services/logging');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst FileNameEnum = require('../enums/FileNameEnum');\n\nconst { AND, OR, NOT } = SegmentEnum.SegmentOperatorTypes;\nconst { CUSTOM_VARIABLE, USER } = SegmentEnum.SegmentOperandTypes;\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst file = FileNameEnum.SegmentEvaluator;\n\nconst logger = logging.getLogger();\n\nmodule.exports = SegmentEvaluator;\n/**\n * This method: A parser which recursively evaluates the expression tree represented by dsl\n *\n * @param {Object} dsl The segments defined in the campaing\n * @param {Object} customVariables Key/value pair of custom_attributs properties\n *\n * @return {Boolean} true if user is to be made part of campaign, else false\n */\nfunction evaluator(dsl, customVariables) {\n let { key, value } = getKeyValue(dsl);\n let operator = key;\n let subDsl = value;\n if (operator === NOT) {\n return !evaluator(subDsl, customVariables);\n } else if (operator === AND) {\n let list = [];\n for (let i = 0; i < subDsl.length; i++) {\n list.push(evaluator(subDsl[i], customVariables));\n }\n\n return list.every(val => val);\n } else if (operator === OR) {\n let list = [];\n for (let i = 0; i < subDsl.length; i++) {\n list.push(evaluator(subDsl[i], customVariables));\n }\n\n return list.some(val => val);\n } else if (operator === CUSTOM_VARIABLE) {\n return operandCustomVariablesParser(subDsl, customVariables);\n } else if (operator === USER) {\n return operandUserParser(subDsl, customVariables);\n }\n}\n\nfunction SegmentEvaluator(dsl, customVariables = {}, campaignKey, userId, variation = '', disableLogs = false) {\n try {\n if (DataTypeUtil.isObject(dsl) && !Object.keys(dsl).length) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SEGMENTATION_SKIPPED, {\n campaignKey,\n userId,\n file\n }),\n disableLogs\n );\n return true;\n }\n if (DataTypeUtil.isObject(dsl) && Object.keys(dsl).length) {\n return evaluator(dsl, customVariables);\n }\n return true;\n } catch (err) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SEGMENTATION_ERROR, {\n campaignKey,\n userId,\n customVariables: JSON.stringify(customVariables),\n file,\n err,\n variation\n }),\n disableLogs\n );\n return false;\n }\n}\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n CUSTOM_VARIABLE: 'custom_variable',\n USER: 'user'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n AND: 'and',\n NOT: 'not',\n OR: 'or'\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n LOWER: /^lower/,\n LOWER_MATCH: /^lower\\((.*)\\)/,\n WILDCARD: /^wildcard/,\n WILDCARD_MATCH: /^wildcard\\((.*)\\)/,\n REGEX: /^regex/,\n REGEX_MATCH: /^regex\\((.*)\\)/,\n STARTING_STAR: /^\\*/,\n ENDING_STAR: /\\*$/,\n GREATER_THAN_MATCH: /^gt\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n GREATER_THAN_EQUAL_TO_MATCH: /^gte\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n LESS_THAN_MATCH: /^lt\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/,\n LESS_THAN_EQUAL_TO_MATCH: /^lte\\(((\\d+\\.?\\d*)|(\\.\\d+))\\)/\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n LOWER_VALUE: 1,\n STARTING_ENDING_STAR_VALUE: 2,\n STARTING_STAR_VALUE: 3,\n ENDING_STAR_VALUE: 4,\n REGEX_VALUE: 5,\n EQUAL_VALUE: 6,\n GREATER_THAN_VALUE: 7,\n GREATER_THAN_EQUAL_TO_VALUE: 8,\n LESS_THAN_VALUE: 9,\n LESS_THAN_EQUAL_TO_VALUE: 10\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst { matchWithRegex } = require('../utils/FunctionUtil');\nconst { getKeyValue } = require('../utils/ObjectUtil');\nconst SegmentEnum = require('../enums/segment');\n\nconst {\n LOWER_MATCH,\n WILDCARD_MATCH,\n REGEX_MATCH,\n STARTING_STAR,\n ENDING_STAR,\n GREATER_THAN_MATCH,\n GREATER_THAN_EQUAL_TO_MATCH,\n LESS_THAN_MATCH,\n LESS_THAN_EQUAL_TO_MATCH\n} = SegmentEnum.SegmentOperandValueTypeRegexes;\n\nconst {\n LOWER_VALUE,\n STARTING_ENDING_STAR_VALUE,\n STARTING_STAR_VALUE,\n ENDING_STAR_VALUE,\n REGEX_VALUE,\n EQUAL_VALUE,\n GREATER_THAN_VALUE,\n GREATER_THAN_EQUAL_TO_VALUE,\n LESS_THAN_VALUE,\n LESS_THAN_EQUAL_TO_VALUE\n} = SegmentEnum.SegmentOperandValues;\n\nfunction extractOperandValue(operand, regex) {\n return matchWithRegex(operand, regex) && matchWithRegex(operand, regex)[1];\n}\n\nfunction processValues(operandValue, tagValue) {\n // this is atomic, either both will be processed or none\n let processedOperandValue = parseFloat(operandValue, 10);\n let processedTagValue = parseFloat(tagValue, 10);\n if (!processedOperandValue || !processedTagValue) {\n return {\n operandValue: operandValue,\n tagValue: tagValue\n };\n }\n // now we have surity that both are numbers\n // now we can convert them independently to int type if they\n // are int rather than floats\n if (processedOperandValue === Math.floor(processedOperandValue)) {\n processedOperandValue = parseInt(processedOperandValue, 10);\n }\n if (processedTagValue === Math.floor(processedTagValue)) {\n processedTagValue = parseInt(processedTagValue, 10);\n }\n // convert it back to string and return\n return {\n operandValue: processedOperandValue.toString(),\n tagValue: processedTagValue.toString()\n };\n}\n\nfunction preProcessTagValue(tagValue) {\n if (tagValue === undefined) {\n tagValue = '';\n }\n if (DataTypeUtil.isBoolean(tagValue)) {\n if (tagValue) {\n tagValue = true;\n } else {\n tagValue = false;\n }\n }\n if (tagValue !== null) {\n tagValue = tagValue.toString();\n }\n return tagValue;\n}\n\nfunction preProcessOperandValue(operand) {\n let operandType;\n let operandValue;\n let startingStar;\n let endingStar;\n // Pre process operand value\n if (matchWithRegex(operand, LOWER_MATCH)) {\n operandType = LOWER_VALUE;\n operandValue = extractOperandValue(operand, LOWER_MATCH);\n } else if (matchWithRegex(operand, WILDCARD_MATCH)) {\n operandValue = extractOperandValue(operand, WILDCARD_MATCH);\n startingStar = matchWithRegex(operandValue, STARTING_STAR);\n endingStar = matchWithRegex(operandValue, ENDING_STAR);\n // In case of wildcard, the operand type is further divided into contains, startswith and endswith\n if (startingStar && endingStar) {\n operandType = STARTING_ENDING_STAR_VALUE;\n } else if (startingStar) {\n operandType = STARTING_STAR_VALUE;\n } else if (endingStar) {\n operandType = ENDING_STAR_VALUE;\n }\n operandValue = operandValue.replace(STARTING_STAR, '').replace(ENDING_STAR, '');\n } else if (matchWithRegex(operand, REGEX_MATCH)) {\n operandType = REGEX_VALUE;\n operandValue = extractOperandValue(operand, REGEX_MATCH);\n } else if (matchWithRegex(operand, GREATER_THAN_MATCH)) {\n operandType = GREATER_THAN_VALUE;\n operandValue = extractOperandValue(operand, GREATER_THAN_MATCH);\n } else if (matchWithRegex(operand, GREATER_THAN_EQUAL_TO_MATCH)) {\n operandType = GREATER_THAN_EQUAL_TO_VALUE;\n operandValue = extractOperandValue(operand, GREATER_THAN_EQUAL_TO_MATCH);\n } else if (matchWithRegex(operand, LESS_THAN_MATCH)) {\n operandType = LESS_THAN_VALUE;\n operandValue = extractOperandValue(operand, LESS_THAN_MATCH);\n } else if (matchWithRegex(operand, LESS_THAN_EQUAL_TO_MATCH)) {\n operandType = LESS_THAN_EQUAL_TO_VALUE;\n operandValue = extractOperandValue(operand, LESS_THAN_EQUAL_TO_MATCH);\n } else {\n operandType = EQUAL_VALUE;\n operandValue = operand;\n }\n return {\n operandType,\n operandValue\n };\n}\n\nfunction operandCustomVariablesParser(operand, customVariables) {\n // Extract custom_variable_key and custom_variable_value from operand\n let { key, value } = getKeyValue(operand);\n let operandKey = key;\n operand = value;\n if (!customVariables.hasOwnProperty(key)) {\n // For handling \".*\" regex case when key is not present in customVariables and matches regex is used.\n return false;\n }\n let tagValue = customVariables[operandKey];\n // Pre process tag value\n tagValue = preProcessTagValue(tagValue);\n let { operandType, operandValue } = preProcessOperandValue(operand);\n // Process both operand and tag values\n let processedValues = processValues(operandValue, tagValue);\n tagValue = processedValues.tagValue;\n return extractResult(operandType, processedValues.operandValue, tagValue);\n}\n\nfunction operandUserParser(operand, customVariables) {\n const users = operand.split(',');\n for (let i = 0; i < users.length; i++) {\n if (users[i].trim() === customVariables._vwoUserId) {\n return true;\n }\n }\n return false;\n}\n\nfunction extractResult(operandType, operandValue, tagValue) {\n let result;\n\n switch (operandType) {\n case LOWER_VALUE:\n if (tagValue !== null) {\n result = operandValue.toLowerCase() === tagValue.toLowerCase();\n }\n break;\n case STARTING_ENDING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.indexOf(operandValue) > -1;\n }\n break;\n case STARTING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.endsWith(operandValue);\n }\n break;\n case ENDING_STAR_VALUE:\n if (tagValue !== null) {\n result = tagValue.startsWith(operandValue);\n }\n break;\n case REGEX_VALUE:\n try {\n let pattern = new RegExp(operandValue, 'g');\n result = !!pattern.test(tagValue);\n } catch (err) {\n result = false;\n }\n break;\n case GREATER_THAN_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) < parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case GREATER_THAN_EQUAL_TO_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) <= parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case LESS_THAN_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) > parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n case LESS_THAN_EQUAL_TO_VALUE:\n if (tagValue !== null) {\n try {\n result = parseFloat(operandValue) >= parseFloat(tagValue);\n } catch (err) {\n result = false;\n }\n }\n break;\n default:\n result = tagValue === operandValue;\n }\n\n return result;\n}\n\nmodule.exports = {\n extractOperandValue,\n processValues,\n preProcessTagValue,\n preProcessOperandValue,\n operandCustomVariablesParser,\n operandUserParser\n};\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst HooksEnum = {\n DECISION_TYPES: {\n CAMPAIGN_DECISION: 'CAMPAIGN_DECISION'\n }\n};\n\nmodule.exports = HooksEnum;\n","var v35 = require('./lib/v35.js');\nvar sha1 = require('./lib/sha1');\nmodule.exports = v35('v5', 0x50, sha1);\n","var bytesToUuid = require('./bytesToUuid');\n\nfunction uuidToBytes(uuid) {\n // Note: We assume we're being passed a valid uuid string\n var bytes = [];\n uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) {\n bytes.push(parseInt(hex, 16));\n });\n\n return bytes;\n}\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n var bytes = new Array(str.length);\n for (var i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n return bytes;\n}\n\nmodule.exports = function(name, version, hashfunc) {\n var generateUUID = function(value, namespace, buf, offset) {\n var off = buf && offset || 0;\n\n if (typeof(value) == 'string') value = stringToBytes(value);\n if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace);\n\n if (!Array.isArray(value)) throw TypeError('value must be an array of bytes');\n if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values');\n\n // Per 4.3\n var bytes = hashfunc(namespace.concat(value));\n bytes[6] = (bytes[6] & 0x0f) | version;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n if (buf) {\n for (var idx = 0; idx < 16; ++idx) {\n buf[off+idx] = bytes[idx];\n }\n }\n\n return buf || bytesToUuid(bytes);\n };\n\n // Function#name is not settable on some platforms (#270)\n try {\n generateUUID.name = name;\n } catch (err) {\n }\n\n // Pre-defined namespaces, per Appendix C\n generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n\n return generateUUID;\n};\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\n'use strict';\n\nfunction f(s, x, y, z) {\n switch (s) {\n case 0: return (x & y) ^ (~x & z);\n case 1: return x ^ y ^ z;\n case 2: return (x & y) ^ (x & z) ^ (y & z);\n case 3: return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return (x << n) | (x>>> (32 - n));\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof(bytes) == 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n bytes = new Array(msg.length);\n for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i);\n }\n\n bytes.push(0x80);\n\n var l = bytes.length/4 + 2;\n var N = Math.ceil(l/16);\n var M = new Array(N);\n\n for (var i=0; i>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = (H[0] + a) >>> 0;\n H[1] = (H[1] + b) >>> 0;\n H[2] = (H[2] + c) >>> 0;\n H[3] = (H[3] + d) >>> 0;\n H[4] = (H[4] + e) >>> 0;\n }\n\n return [\n H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff,\n H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff,\n H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff,\n H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff,\n H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff\n ];\n}\n\nmodule.exports = sha1;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.GetVariation;\n\n/**\n * This API method: Gets the variation assigned for the user for the campaign\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Assigns the determinitic variation to the user(based on userId), if user becomes part of campaign\n * If userStorageService is used, it will look into it for the variation and if found, no further processing is done\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey unique campaign key specified in VWO app\n * @param {String} userId ID assigned to a user\n * @param {Object} options Optional params\n *\n * @return {String|null} If variation is assigned then variation-name otherwise null in case of user not becoming part\n */\nfunction getVariation(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.GET_VARIATION_NAME;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var { customVariables, variationTargetingVariables, userStorageData, metaData } = options;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.GET_VARIATION_NAME,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.GET_VARIATION_NAME\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey: campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return data;\n });\n }\n\n if (!result.variationName) {\n return null;\n }\n\n return result.variationName;\n}\n\nmodule.exports = getVariation;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst GoalTypeEnum = require('../enums/GoalTypeEnum');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst { objectValues } = require('../utils/ObjectUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\n\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Track;\nconst GOAL_TYPE_TO_TRACK_DEFAULT = GoalTypeEnum.ALL;\nconst GOAL_IDENTIFIER_SEPERATOR = '_vwo_';\nconst api = ApiEnum.TRACK;\n\nlet BatchEventsDispatcher;\nif (typeof process.env !== 'undefined') {\n BatchEventsDispatcher = require('../utils/BatchEventsDispatcher');\n}\n\n/**\n * This API method: Marks the conversion of the campaign for a particular goal\n *\n * 1. validates the arguments being passed\n * 2. Checks if user is eligible to get bucketed into the campaign,\n * 3. Gets the assigned determinitic variation to the user(based on userId), if user becomes part of campaign\n * 4. Sends an impression call to VWO server to track goal data\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {Number} campaignKey unique campaign test key\n * @param {String} userId ID assigned to a user\n * @param {String} goalIdentifier unique campaign's goal identifier\n * @param {Object} options Optional params\n */\nfunction track(vwoInstance, campaignKey, userId, goalIdentifier, options = {}) {\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n revenueValue,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n eventProperties,\n userAgent,\n userIpAddress\n } = options;\n var visitorUserAgent = userAgent;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.TRACK,\n campaignKey,\n userId,\n goalIdentifier,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n }) &&\n (!goalTypeToTrack || (goalTypeToTrack && objectValues(GoalTypeEnum).includes(goalTypeToTrack)))\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.TRACK\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n let revenuePropList = new Set();\n\n // If no settings are found, simply do not track goal and return false\n if (!settingsFile) {\n return null;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n let campaigns = [];\n goalTypeToTrack = goalTypeToTrack || config.goalTypeToTrack || GOAL_TYPE_TO_TRACK_DEFAULT; // priority order - options > launchConfig > default\n if (DataTypeUtil.isUndefined(shouldTrackReturningUser)) {\n // if shouldTrackReturningUser is not given in options\n if (DataTypeUtil.isBoolean(config.shouldTrackReturningUser)) {\n // if shouldTrackReturningUser is given in config at launch\n shouldTrackReturningUser = config.shouldTrackReturningUser;\n } else {\n shouldTrackReturningUser = false;\n }\n }\n if (!DataTypeUtil.isString(campaignKey)) {\n if (DataTypeUtil.isArray(campaignKey)) {\n campaigns = CampaignUtil.getCampaignsForKeys(settingsFile, campaignKey);\n } else {\n campaigns = CampaignUtil.getCampaignsForGoal(settingsFile, goalIdentifier, goalTypeToTrack);\n }\n } else {\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n campaigns.push(campaign || { key: campaignKey });\n }\n const result = {};\n let metricMap = {};\n let events = [];\n let areGlobalGoals = typeof process.env === 'undefined' ? false : campaigns.length > 1;\n\n campaigns.forEach(\n campaign =>\n (result[campaign.key] = trackCampaignGoal(\n vwoInstance,\n campaign,\n campaign.key,\n userId,\n settingsFile,\n goalIdentifier,\n revenueValue,\n config,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n metricMap,\n revenuePropList,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n ))\n );\n\n // Check if each object in result is a promise\n // in case of asyncStorageConfig, each object would be a promise only\n // Check if result is a non-empty object\n const areAllPromises =\n result && Object.keys(result).length > 0\n ? Object.values(result).every(item => DataTypeUtil.isPromise(item))\n : false;\n // const areAllPromises = Object.values(result).every(item => DataTypeUtil.isPromise(item));\n\n if (areAllPromises) {\n // Promise.all - This method takes an array of promises and returns a new promise that resolves to an array of the resolved values when all of the input promises have resolved.\n // If any of the promises in the array reject, the whole Promise.all is rejected.\n return Promise.all(Object.values(result)).then(dataArray => {\n dataArray.forEach((data, index) => {\n const campaignKey = Object.keys(result)[index];\n const ans = _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n { [campaignKey]: data }\n );\n result[campaignKey] = ans[campaignKey];\n });\n return result;\n });\n }\n return _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnTrackValue(\n vwoInstance,\n config,\n settingsFile,\n revenuePropList,\n userId,\n goalIdentifier,\n revenueValue,\n metricMap,\n events,\n areGlobalGoals,\n responseCallback,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n if (!Object.keys(result).length) {\n return null;\n }\n\n if (typeof process.env === 'undefined') {\n if (events && events.length) {\n for (let k = 0; k < events.length; k++) {\n vwoInstance.eventQueue.process(config, events[k], vwoInstance, { responseCallback });\n }\n }\n } else if (!settingsFile.isEventArchEnabled && events && events.length) {\n if (!areGlobalGoals) {\n vwoInstance.eventQueue.process(config, events[0], vwoInstance, { responseCallback });\n } else if (!config.isDevelopmentMode) {\n BatchEventsDispatcher.dispatch(\n {\n ev: events\n },\n responseCallback,\n Object.assign(\n {},\n {\n a: vwoInstance.SettingsFileManager.getSettingsFile().accountId\n },\n vwoInstance.usageStats.getUsageStats()\n ),\n vwoInstance.SettingsFileManager.getSettingsFile().sdkKey\n );\n }\n }\n\n if (settingsFile.isEventArchEnabled && Object.keys(metricMap).length > 0) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n goalIdentifier,\n {},\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackGoalPayloadData(\n settingsFile,\n userId,\n goalIdentifier,\n metricMap,\n revenueValue,\n revenuePropList,\n eventProperties\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n Object.keys(metricMap).forEach(function(key) {\n DecisionUtil._saveUserData(\n config,\n metricMap[key].campaign,\n metricMap[key].variationName,\n metricMap[key].userId,\n metricMap[key].metaData,\n goalIdentifier\n );\n });\n }\n }\n\n if (config.isDevelopmentMode) {\n return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode });\n }\n\n return result;\n}\n\nfunction trackCampaignGoal(\n vwoInstance,\n campaign,\n campaignKey,\n userId,\n settingsFile,\n goalIdentifier,\n revenueValue,\n config,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n goalTypeToTrack,\n shouldTrackReturningUser,\n metaData,\n metricMap,\n revenuePropList,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n) {\n // If matching campaign is not found with campaignKey or if found but is in not RUNNING state, simply return no variation\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey: campaignKey,\n api\n })\n );\n\n return false;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return false;\n }\n\n let campaignId = campaign.id;\n\n // Get the campaign goal settings based on goalIdentifier\n let goal = CampaignUtil.getCampaignGoal(settingsFile, campaign.key, goalIdentifier);\n\n if (!goal) {\n // If no goal is found, something is wrong with the goalIdentifier\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_GOAL_NOT_FOUND, {\n file,\n userId,\n goalIdentifier,\n campaignKey: campaignKey\n })\n );\n return false;\n } else if (goalTypeToTrack !== GOAL_TYPE_TO_TRACK_DEFAULT && goal.type !== goalTypeToTrack) {\n return false;\n } else if (goal.type === GoalTypeEnum.REVENUE && !ValidateUtil.isValidValue(revenueValue)) {\n if (settingsFile.isEventArchEnabled) {\n /* \n If it's a metric of type - value of an event property and calculation logic is first Value (mca != -1 )\n */\n if (goal.mca !== -1) {\n /*\n In this case it is expected that goal will have revenueProp\n Error should be logged if eventProperties is not Defined ` OR ` eventProperties does not have revenueProp key\n */\n if (DataTypeUtil.isUndefined(eventProperties) || !eventProperties.hasOwnProperty(goal.revenueProp)) {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n } else {\n /*\n here mca == -1 so there could only be 2 scenarios, \n 1. If revenueProp is defined then eventProperties should have revenueProp key\n 2. if revenueProp is not defined then it's a metric of type - Number of times an event has been triggered.\n */\n if (goal.revenueProp) {\n // Error should be logged if eventProperties is not Defined ` OR ` eventProperties does not have revenueProp key\n if (DataTypeUtil.isUndefined(eventProperties) || !eventProperties.hasOwnProperty(goal.revenueProp)) {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n }\n }\n } else {\n logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey);\n return false;\n }\n }\n\n if (goal.type === GoalTypeEnum.REVENUE && goal.revenueProp) {\n revenuePropList.add(goal.revenueProp);\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n true,\n goalIdentifier,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n if (!Object.keys(data).length) {\n return null;\n }\n return _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n data\n );\n });\n }\n\n return _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnTrackEvent(\n vwoInstance,\n campaignKey,\n campaignId,\n userId,\n config,\n goal,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n goalIdentifier,\n revenueValue,\n metaData,\n metricMap,\n events,\n areGlobalGoals,\n eventProperties,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n var { variationId, variationName, storedGoalIdentifier } = result;\n // Is User is a part of Campaign and has been decided to be a part of particular variation\n if (variationName) {\n if (storedGoalIdentifier) {\n const identifiers = storedGoalIdentifier.split(GOAL_IDENTIFIER_SEPERATOR);\n if (!identifiers.includes(goalIdentifier)) {\n storedGoalIdentifier += GOAL_IDENTIFIER_SEPERATOR + goalIdentifier;\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, storedGoalIdentifier);\n }\n } else if (!shouldTrackReturningUser && goal.mca !== -1) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_GOAL_ALREADY_TRACKED, {\n file,\n userId,\n goalIdentifier,\n campaignKey\n })\n );\n return false;\n }\n }\n // If goal is found, send an impression to VWO server for report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n eventProperties,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n metricMap[campaign.id] = {\n config,\n campaign,\n variationName,\n userId,\n metaData,\n goal\n };\n return true;\n } else {\n let properties = {};\n\n if (areGlobalGoals) {\n properties = ImpressionUtil.buildBatchEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n visitorUserAgent,\n userIpAddress\n );\n } else {\n properties = ImpressionUtil.buildEventForTrackingGoal(\n settingsFile,\n campaignId,\n variationId,\n userId,\n goal,\n revenueValue,\n visitorUserAgent,\n userIpAddress\n );\n }\n\n events.push(properties);\n }\n\n // save to user storage if not event arch\n if (!settingsFile.isEventArchEnabled) {\n DecisionUtil._saveUserData(config, campaign, variationName, userId, metaData, goalIdentifier);\n }\n return true;\n }\n\n return false;\n}\n\nfunction logIncorrectParamsForRevenueGoal(vwoInstance, userId, goalIdentifier, campaignKey) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL, {\n file,\n userId,\n goalIdentifier,\n campaignKey\n })\n );\n}\n\nmodule.exports = track;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.IsFeatureEnabled;\n\n/**\n * This API checks: Whether a feature is enabled or not for the given user\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible for campaign and check if feature is enabled for the user.\n * 4. If feature enabled, sends a call to VWO server for tracking visitor\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} userId Unique identifier for the user\n * @param {Object} options Optional params\n *\n * @return {Boolean} true if feature enabled, false otherwise\n */\nfunction isFeatureEnabled(vwoInstance, campaignKey, userId, options = {}) {\n const api = ApiEnum.IS_FEATURE_ENABLED;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var {\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n userAgent,\n userIpAddress\n } = options;\n var visitorUserAgent = userAgent;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.IS_FEATURE_ENABLED,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n shouldTrackReturningUser,\n metaData,\n responseCallback,\n visitorUserAgent,\n userIpAddress\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.isFeatureEnabled\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply log and return false\n if (!settingsFile) {\n return null;\n }\n\n shouldTrackReturningUser = shouldTrackReturningUser || config.shouldTrackReturningUser || false;\n\n // Get the campaign settings based on campaignKey from the settings\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n // check if MAB enabled, if yes, then userStorage must be defined\n if (campaign && campaign.hasOwnProperty('isMAB') && campaign.isMAB === true) {\n if (vwoInstance.userStorageService === undefined) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n '(' +\n file +\n ') This campaign: ' +\n campaignKey +\n ' has MAB configured. Please configure User Storage to proceed.'\n );\n\n return null;\n }\n }\n\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isAbCampaign(campaign)) {\n // API not allowed for full-stack AB campaigns\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n true,\n false,\n undefined,\n api\n );\n\n // check if result is a promise, if yes then wait for it untill it resolves, then only proceed further\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n data\n );\n });\n }\n\n return _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n result\n );\n}\n\nfunction _validateAndReturnFeatureEnabled(\n vwoInstance,\n campaignKey,\n userId,\n config,\n api,\n shouldTrackReturningUser,\n settingsFile,\n campaign,\n responseCallback,\n visitorUserAgent,\n userIpAddress,\n result\n) {\n var { variation, variationId, variationName, isStoredVariation } = result;\n\n let isFeatureEnabled = false;\n\n if (variationName) {\n isFeatureEnabled = CampaignUtil.isFeatureRolloutCampaign(campaign) || variation.isFeatureEnabled;\n\n if (isStoredVariation && !shouldTrackReturningUser) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.CAMPAIGN_USER_ALREADY_TRACKED, {\n file,\n userId,\n campaignKey,\n api\n })\n );\n } else {\n // Variation found...let VWO server knows about it to show report stats\n if (config.batchEvents) {\n let properties = ImpressionUtil.buildBatchEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.batchEventsQueue.enqueue(properties);\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(\n settingsFile,\n EventEnum.VWO_VARIATION_SHOWN,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n let payload = ImpressionUtil.getTrackUserPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_VARIATION_SHOWN,\n campaign.id,\n variationId\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n } else {\n let properties = ImpressionUtil.buildEventForTrackingUser(\n settingsFile,\n campaign.id,\n variationId,\n userId,\n vwoInstance.usageStats.getUsageStats(),\n visitorUserAgent,\n userIpAddress\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n }\n\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: isFeatureEnabled ? 'enabled' : 'disabled'\n })\n );\n\n if (config.isDevelopmentMode) {\n return { isFeatureEnabled };\n }\n\n return isFeatureEnabled;\n }\n }\n\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: isFeatureEnabled ? 'enabled' : 'disabled'\n })\n );\n\n if (isStoredVariation || config.isDevelopmentMode) {\n return { isFeatureEnabled };\n }\n\n return { isFeatureEnabled };\n}\n\nmodule.exports = isFeatureEnabled;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst Constants = require('../constants');\nconst ApiEnum = require('../enums/ApiEnum');\n\nconst DecisionUtil = require('../utils/DecisionUtil');\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst FeatureUtil = require('../utils/FeatureUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst ObjectUtil = require('../utils/ObjectUtil');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.GetFeatureVariableValue;\n\n/**\n * This API method:\n *\n * 1. Validates the arguments being passed\n * 2. Checks if user is eligible for campaign and check if feature is enabled for the user.\n * 4. If feature enabled, return the variable for that variation(if Feature Test),\n * otherwise the default values being set in Feature\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} campaignKey Unique key for a campaign\n * @param {String} variableKey Unique key for a feature's variable\n * @param {String} userId Unique identifier for the user\n * @param {Object} options Optional params\n *\n * @return {string|number|double|boolean|null} Variable value as is set in the VWO app i.e.\n * maintaining the data-type,\n * null if anything fails like campaign / variable not found\n */\nfunction getFeatureVariableValue(vwoInstance, campaignKey, variableKey, userId, options = {}) {\n try {\n const api = ApiEnum.GET_FEATURE_VARIABLE_VALUE;\n let areParamsValid = false;\n if (DataTypeUtil.isObject(options)) {\n var { customVariables, variationTargetingVariables, userStorageData, metaData } = options;\n // Check if arguments have valid data-type\n if (\n ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.GET_FEATURE_VARIABLE_VALUE,\n campaignKey,\n variableKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData\n })\n ) {\n areParamsValid = true;\n }\n }\n\n if (areParamsValid === false) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_BAD_PARAMETERS, {\n file,\n api: ApiEnum.GetFeatureVariableValue\n })\n );\n return null;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n config.apiName = api;\n\n // If no settings are found, simply return no variation\n if (!settingsFile) {\n return null;\n }\n\n let campaign = CampaignUtil.getCampaign(settingsFile, campaignKey);\n\n if (!campaign || campaign.status !== Constants.STATUS_RUNNING) {\n vwoInstance.logger.log(\n LogLevelEnum.WARN,\n LogMessageUtil.build(LogMessageEnum.WARNING_MESSAGES.CAMPAIGN_NOT_RUNNING, {\n file,\n campaignKey,\n api\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isAbCampaign(campaign)) {\n // API not allowed for full-stack AB campaigns\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_NOT_APPLICABLE, {\n file,\n campaignKey,\n campaignType: campaign.type,\n userId,\n api\n })\n );\n\n return null;\n }\n\n const result = DecisionUtil.getVariation(\n config,\n settingsFile,\n campaign,\n campaignKey,\n userId,\n customVariables,\n variationTargetingVariables,\n userStorageData,\n metaData,\n false,\n false,\n undefined,\n api\n );\n\n if (DataTypeUtil.isPromise(result)) {\n return result.then(function(data) {\n return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, data);\n });\n }\n\n return _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result);\n } catch (err) {\n vwoInstance.logger.log(LogLevelEnum.ERROR, err.message);\n\n return null;\n }\n}\n\nfunction _validateAndReturnFeaureVariable(vwoInstance, campaignKey, variableKey, userId, campaign, result) {\n let variable;\n var { variation, variationName } = result;\n\n if (!variationName) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_STATUS, {\n file,\n campaignKey,\n userId,\n status: 'disabled'\n })\n );\n\n return null;\n }\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n variable = FeatureUtil.getVariableForFeature(campaign, variableKey);\n } else if (CampaignUtil.isFeatureTestCampaign(campaign)) {\n variable = FeatureUtil.getVariableValueForVariation(campaign, variation, variableKey);\n\n if (ObjectUtil.areObjectKeys(variable) && variation.isFeatureEnabled) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_VARIABLE_VALUE, {\n file,\n variableKey,\n campaignKey: campaign.key,\n variableValue: variable.value,\n userId\n })\n );\n } else if (ObjectUtil.areObjectKeys(variable) && !variation.isFeatureEnabled) {\n vwoInstance.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.FEATURE_VARIABLE_DEFAULT_VALUE, {\n file,\n variableKey,\n variationName\n })\n );\n }\n }\n\n if (!ObjectUtil.areObjectKeys(variable)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.VARIABLE_NOT_FOUND, {\n file,\n variableKey,\n userId\n })\n );\n\n return null;\n }\n\n let variableValue = variable.value;\n let typeCastedValue = FeatureUtil.getTypeCastVariableValue(variableValue, variable.type);\n\n return typeCastedValue;\n}\n\nmodule.exports = getFeatureVariableValue;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignUtil = require('./CampaignUtil');\nconst DataTypeUtil = require('./DataTypeUtil');\nconst FeatureVariableTypeEnum = require('../enums/FeatureVariableTypeEnum');\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.FeatureUtil;\n\nlet FeatureUtil = {\n getVariableForFeature: (campaign, variableKey) => {\n let variableData = {};\n\n if (CampaignUtil.isFeatureRolloutCampaign(campaign)) {\n let variables = campaign.variables || [];\n\n for (let i = 0; i < variables.length; i++) {\n if (variables[i].key === variableKey) {\n variableData = variables[i];\n\n break;\n }\n }\n\n return variableData;\n }\n\n return variableData;\n },\n getVariableValueForVariation: (campaign, variation, variableKey) => {\n let variationVariable = {};\n\n if (CampaignUtil.isFeatureTestCampaign(campaign)) {\n if (!variation || !variation || !variation.variables) {\n return variationVariable;\n }\n\n if (!variation.isFeatureEnabled) {\n variation = CampaignUtil.getControlForCampaign(campaign);\n }\n\n for (let i = 0; i < variation.variables.length; i++) {\n let variable = variation.variables[i];\n\n if (variableKey === variable.key) {\n variationVariable = variable;\n break;\n }\n }\n }\n\n return variationVariable;\n },\n getTypeCastVariableValue: (variableValue, variableType) => {\n let typeCastedValue;\n\n switch (variableType) {\n case FeatureVariableTypeEnum.INTEGER:\n typeCastedValue = parseInt(variableValue, 10);\n if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n }\n break;\n\n case FeatureVariableTypeEnum.DOUBLE:\n typeCastedValue = parseFloat(variableValue);\n if (!DataTypeUtil.isNumber(typeCastedValue) || isNaN(typeCastedValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n }\n break;\n\n case FeatureVariableTypeEnum.BOOLEAN:\n if (!DataTypeUtil.isBoolean(variableValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n } else {\n typeCastedValue = variableValue;\n }\n break;\n\n case FeatureVariableTypeEnum.JSON:\n if (!DataTypeUtil.isObject(variableValue)) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.UNABLE_TO_CAST_VALUE, {\n file,\n variableValue,\n variableType\n })\n );\n typeCastedValue = null;\n } else {\n typeCastedValue = variableValue;\n }\n break;\n\n default:\n typeCastedValue = variableValue;\n break;\n }\n\n return typeCastedValue;\n }\n};\n\nmodule.exports = FeatureUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst FeatureVariableTypeEnum = {\n BOOLEAN: 'boolean',\n DOUBLE: 'double',\n INTEGER: 'integer',\n STRING: 'string',\n JSON: 'json'\n};\n\nmodule.exports = FeatureVariableTypeEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ApiEnum = require('../enums/ApiEnum');\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst EventEnum = require('../enums/EventEnum');\nconst ValidateUtil = require('../utils/ValidateUtil');\nconst ImpressionUtil = require('../utils/ImpressionUtil');\nconst DataTypeUtil = require('../utils/DataTypeUtil');\n\nlet BatchEventsDispatcher;\n\nif (typeof process.env !== 'undefined') {\n BatchEventsDispatcher = require('../utils/BatchEventsDispatcher');\n}\n\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.Push;\n\n/**\n * This API method: Pushes the key-value tag pair for a particular user\n *\n * 1. validates the arguments being passed\n * 2. Sends a call to VWO push api\n *\n * @param {Object} vwoInstance VWO instance which has logger, settingsFile etc.\n * @param {String} tagKey tag key\n * @param {String} tagValue tag Value\n * @param {String} userId ID assigned to a user\n *\n * @return {Boolean} true if request is pushed to eventQueue, false if params are invalid or settings file is unavailable\n */\nfunction push(vwoInstance, tagKey, tagValue, userId, customDimensionMap, { responseCallback } = {}) {\n const api = ApiEnum.PUSH;\n\n if (\n !ValidateUtil.areValidParamsForAPIMethod({\n method: ApiEnum.PUSH,\n tagKey,\n tagValue,\n userId,\n customDimensionMap,\n responseCallback\n })\n ) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.PUSH_INVALID_PARAMS, {\n file,\n method: api\n })\n );\n return false;\n }\n\n if (tagKey.length > 255) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_KEY_LENGTH_EXCEEDED, {\n file,\n tagKey,\n userId\n })\n );\n return false;\n }\n\n if (tagValue.length > 255) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.TAG_VALUE_LENGTH_EXCEEDED, {\n file,\n tagKey,\n userId,\n tagValue\n })\n );\n return false;\n }\n\n if (tagKey === ' ' && tagValue === ' ' && (!customDimensionMap || Object.keys(customDimensionMap).length === 0)) {\n vwoInstance.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.PUSH_INVALID_PARAMS, {\n file,\n method: api\n })\n );\n return false;\n }\n\n if (tagKey !== ' ' && tagValue !== ' ') {\n customDimensionMap[tagKey] = tagValue;\n }\n\n // Get the cached configuration\n let config = vwoInstance.SettingsFileManager.getConfig();\n let settingsFile = vwoInstance.SettingsFileManager.getSettingsFile(api);\n\n // If no settings are found, simply false\n if (!settingsFile) {\n return false;\n }\n\n let result = {};\n if (config.batchEvents) {\n Object.keys(customDimensionMap).forEach(key => {\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n let properties = ImpressionUtil.buildBatchEventForPushing(settingsFile, key, tagValue, userId);\n vwoInstance.batchEventsQueue.enqueue(properties);\n\n result[key] = true;\n });\n } else if (settingsFile.isEventArchEnabled) {\n let properties = ImpressionUtil.getEventsBaseProperties(settingsFile, EventEnum.VWO_SYNC_VISITOR_PROP);\n let payload = ImpressionUtil.getPushPayloadData(\n settingsFile,\n userId,\n EventEnum.VWO_SYNC_VISITOR_PROP,\n customDimensionMap\n );\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { payload, responseCallback });\n\n result.success = true;\n } else {\n const events = [];\n const customDimensionKeys = Object.keys(customDimensionMap);\n\n customDimensionKeys.forEach(key => {\n let properties;\n const tagValue = DataTypeUtil.isString(customDimensionMap[key])\n ? customDimensionMap[key]\n : JSON.stringify(customDimensionMap[key]);\n\n if (typeof process.env === 'undefined') {\n properties = ImpressionUtil.buildEventForPushing(settingsFile, key, tagValue, userId);\n vwoInstance.eventQueue.process(config, properties, vwoInstance, { responseCallback });\n } else if (customDimensionKeys.length === 1) {\n properties = ImpressionUtil.buildEventForPushing(settingsFile, key, tagValue, userId);\n } else {\n properties = ImpressionUtil.buildBatchEventForPushing(settingsFile, key, tagValue, userId);\n }\n\n events.push(properties);\n result[key] = true;\n });\n\n if (typeof process.env !== 'undefined') {\n if (customDimensionKeys.length === 1) {\n vwoInstance.eventQueue.process(config, events[0], vwoInstance, { responseCallback });\n } else {\n if (!config.isDevelopmentMode) {\n BatchEventsDispatcher.dispatch(\n {\n ev: events\n },\n responseCallback,\n Object.assign(\n {},\n {\n a: vwoInstance.SettingsFileManager.getSettingsFile().accountId\n },\n vwoInstance.usageStats.getUsageStats()\n ),\n vwoInstance.SettingsFileManager.getSettingsFile().sdkKey\n );\n }\n }\n }\n }\n\n if (config.isDevelopmentMode) {\n return Object.assign({}, result, { isDevelopmentMode: config.isDevelopmentMode });\n }\n\n return result;\n}\n\nmodule.exports = push;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DataTypeUtil = require('../utils/DataTypeUtil');\nconst EventDispatcher = require('../utils/EventDispatcherUtil');\n\nconst logging = require('./logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst HeadersEnum = require('../enums/HeadersEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\n\nconst file = FileNameEnum.EventQueue;\n\nclass EventQueue {\n constructor() {\n this.running = false;\n this.queue = [];\n }\n\n process(config, properties, vwoInstance, { payload, responseCallback } = {}) {\n let customHeaders = {};\n\n if (properties && properties.visitor_ua) {\n customHeaders[HeadersEnum.USER_AGENT] = encodeURIComponent(properties.visitor_ua);\n properties.visitor_ua = customHeaders[HeadersEnum.USER_AGENT];\n }\n if (properties && properties.visitor_ip) {\n customHeaders[HeadersEnum.IP] = encodeURIComponent(properties.visitor_ip);\n properties.visitor_ip = customHeaders[HeadersEnum.IP];\n }\n\n if (config && config.isDevelopmentMode) {\n logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.CONFIG_DEVELOPMENT_MODE_STATUS, {\n file\n })\n );\n return;\n }\n\n this.enqueue(properties, vwoInstance, { payload, responseCallback }, customHeaders);\n }\n\n enqueue(properties, vwoInstance, { payload, responseCallback }, customHeaders = {}) {\n this.queue.push({\n eventName: properties.eventName,\n properties: properties,\n callback: () => {\n if (payload) {\n EventDispatcher.dispatchPostCall(properties, payload, { responseCallback }, customHeaders);\n } else {\n EventDispatcher.dispatchGetCall(properties, { responseCallback }, customHeaders);\n }\n }\n });\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.EVENT_QUEUE, {\n file,\n queueType: 'normal',\n event: 'VWO_MASKED_PAYLOAD'\n })\n );\n\n vwoInstance.eventQueue.executeNext(properties);\n\n if (!this.running) {\n // if nothing is running, then start the engines!\n this.executeNext(properties);\n }\n\n return this;\n }\n\n executeNext(properties) {\n this.running = false;\n\n // get the first element off the queue\n if (this.queue && this.queue.length) {\n let event = this.queue.shift();\n\n if (event) {\n this.running = true;\n if (event.callback && DataTypeUtil.isFunction(event.callback)) {\n event.callback(properties);\n }\n }\n }\n }\n}\n\nmodule.exports = EventQueue;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst FunctionUtil = require('./FunctionUtil');\nconst EventEnum = require('../enums/EventEnum');\nconst excludedProperties = ['url'];\n\nconst file = FileNameEnum.EventDispatcherUtil;\n\nlet EventDispatcher = {\n dispatchGetCall: function(properties, { responseCallback }, customHeaders = {}) {\n let parsedUrl;\n let queryParams = '?';\n\n queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties);\n\n try {\n // Require files only if required in respective Engine i.e. Node / Browser\n if (typeof process.env === 'undefined') {\n require('./HttpXMLUtil').sendCall(\n properties,\n queryParams,\n { successCallback: responseCallback },\n customHeaders\n );\n } else {\n const url = require('url');\n\n parsedUrl = url.parse(properties.url);\n\n require('./HttpHandlerUtil').sendGetCall(\n parsedUrl,\n queryParams,\n null,\n (error, response) => {\n this.handleGetResponse(properties, error, response);\n if (responseCallback) {\n responseCallback(error, response);\n }\n },\n customHeaders\n );\n }\n } catch (err) {\n let endPoint = properties.url;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file: FileNameEnum.EventDispatcher,\n endPoint,\n err\n })\n );\n }\n\n return false;\n },\n\n handleGetResponse: function(properties, error, response) {\n if (error) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file,\n endPoint: response.endPoint,\n err: error\n })\n );\n return false;\n } else {\n const baseParams = {\n file,\n endPoint: response.endPoint,\n accountId: properties && properties.account_id\n };\n let params = {};\n if (baseParams.endPoint.includes('push')) {\n let customVariables = JSON.parse(properties.tags).u;\n params = Object.assign({}, baseParams, { customVariables: customVariables });\n params.mainKeys = `customDimension:${JSON.stringify(params.customVariables)}`;\n } else {\n params = Object.assign({}, baseParams, {\n campaignId: properties && properties.experiment_id,\n variationId: properties && properties.combination\n });\n params.mainKeys = `campaignId:${params.campaignId} and variationId:${params.variationId}`;\n }\n logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params));\n return true;\n }\n },\n\n dispatchPostCall: function(properties, payload, { responseCallback }, customHeaders = {}) {\n let parsedUrl;\n let queryParams = '?';\n\n queryParams += FunctionUtil.convertObjectKeysToString(properties, excludedProperties);\n\n try {\n // Require files only if required in respective Engine i.e. Node / Browser\n\n if (typeof process.env === 'undefined') {\n if (typeof XMLHttpRequest === 'undefined') {\n return require('./FetchUtil')\n .send({\n method: 'POST',\n url: `${properties.url}${queryParams}`,\n payload,\n customHeaders\n })\n .then(() => {\n this.handlePostResponse(properties, payload);\n if (responseCallback) {\n responseCallback(null, { status: 'success' });\n }\n })\n .catch(error => {\n this.handlePostResponse(properties, payload, error);\n responseCallback(error, { status: 'failure' });\n });\n }\n\n return require('./XhrUtil')\n .send({\n method: 'POST',\n url: `${properties.url}${queryParams}`,\n payload,\n customHeaders,\n logger\n })\n .then(() => {\n this.handlePostResponse(properties, payload);\n if (responseCallback) {\n responseCallback(null, { status: 'success' });\n }\n })\n .catch(error => {\n this.handlePostResponse(properties, payload, error);\n responseCallback(error, { status: 'failure' });\n });\n } else {\n const url = require('url');\n\n parsedUrl = url.parse(properties.url);\n\n return new Promise(resolve => {\n require('./HttpHandlerUtil').sendPostCall(\n parsedUrl,\n payload,\n queryParams,\n null,\n error => {\n const result = this.handlePostResponse(properties, payload, error);\n if (responseCallback) {\n responseCallback(error, { status: 'success' });\n }\n resolve(result);\n },\n customHeaders\n );\n });\n }\n } catch (err) {\n let endPoint = properties.url;\n\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file: FileNameEnum.EventDispatcherUtil,\n endPoint,\n err\n })\n );\n }\n\n return Promise.resolve(false);\n },\n\n handlePostResponse: function(properties, payload, error) {\n let endPoint = properties.url;\n\n if (error) {\n logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.IMPRESSION_FAILED, {\n file,\n endPoint: endPoint,\n err: error\n })\n );\n return false;\n } else {\n let event = `${properties.en} event`;\n if (properties.en === EventEnum.VWO_SYNC_VISITOR_PROP) {\n delete payload.d.visitor.props.vwo_fs_environment;\n event = `visitor property:${JSON.stringify(payload.d.visitor.props)}`;\n }\n\n logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS_FOR_EVENT_ARCH, {\n file,\n endPoint,\n accountId: properties.a,\n event: event\n })\n );\n\n return true;\n }\n }\n};\n\nmodule.exports = EventDispatcher;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logging = require('../services/logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\nconst logger = logging.getLogger();\nconst file = FileNameEnum.HttpXMLUtil;\n\nconst noop = () => {};\n\nconst printLog = properties => {\n const baseParams = {\n file,\n endPoint: properties.url,\n accountId: properties && properties.account_id\n };\n let params = {};\n if (baseParams.endPoint.includes('push')) {\n let customVariables = JSON.parse(properties.tags).u;\n params = Object.assign({}, baseParams, { customVariables: customVariables });\n params.mainKeys = `customDimension:${JSON.stringify(params.customVariables)}`;\n } else {\n params = Object.assign({}, baseParams, {\n campaignId: properties && properties.experiment_id,\n variationId: properties && properties.combination\n });\n params.mainKeys = `campaignId:${params.campaignId} and variationId:${params.variationId}`;\n }\n logger.log(LogLevelEnum.INFO, LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.IMPRESSION_SUCCESS, params));\n};\n\nconst HttpXMLUtil = {\n sendCall: function(properties, queryParams, options = {}, customHeaders = {}) {\n let endPoint = `${properties.url}${queryParams}`;\n\n let { successCallback, errorCallback } = options;\n\n errorCallback = errorCallback || successCallback;\n\n let isCallbackCalled = false;\n if (typeof XMLHttpRequest === 'undefined') {\n // if (typeof Image === 'undefined') {\n fetch(endPoint, { method: 'GET', headers: customHeaders })\n .then(() => {\n if (isCallbackCalled) {\n return;\n }\n isCallbackCalled = true;\n successCallback(null, { status: 'success' });\n })\n .catch(_err => {\n if (isCallbackCalled) {\n return;\n }\n isCallbackCalled = true;\n errorCallback(null, { status: 'success' });\n printLog(properties);\n });\n\n return;\n }\n this.handleGetCall(\n properties,\n queryParams,\n successCallback,\n errorCallback,\n endPoint,\n isCallbackCalled,\n customHeaders\n );\n },\n\n handleGetCall: function(\n properties,\n queryParams,\n successCallback,\n errorCallback,\n endPoint,\n isCallbackCalled,\n customHeaders = {}\n ) {\n successCallback = successCallback || noop;\n errorCallback = errorCallback || noop;\n\n const xhr = new XMLHttpRequest();\n\n xhr.open('GET', endPoint, true);\n // Set custom headers using setRequestHeader\n for (var headerName in customHeaders) {\n if (customHeaders.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, customHeaders[headerName]);\n }\n }\n\n xhr.onload = function() {\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = xhr.responseText;\n successCallback(response);\n printLog(properties);\n } else {\n errorCallback(xhr.statusText);\n printLog(properties);\n }\n };\n\n xhr.onerror = function() {\n errorCallback(xhr.statusText);\n printLog(properties);\n };\n\n xhr.send();\n }\n};\nmodule.exports = HttpXMLUtil;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst HeadersEnum = {\n USER_AGENT: 'X-Device-User-Agent',\n IP: 'VWO-X-Forwarded-For'\n};\n\nmodule.exports = HeadersEnum;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CampaignUtil = require('../utils/CampaignUtil');\nconst FunctionUtil = require('../utils/FunctionUtil');\nconst SettingsFileUtil = require('../utils/SettingsFileUtil');\n\nconst logging = require('./logging');\nconst FileNameEnum = require('../enums/FileNameEnum');\nconst validateSettingsFile = require('../schemas/SettingsFileSchema');\nconst { isObject } = require('../utils/DataTypeUtil');\nconst { LogLevelEnum, LogMessageEnum, LogMessageUtil } = logging;\n\nconst file = FileNameEnum.SettingsFileManager;\n\nclass SettingsFileManager {\n // PRIVATE METHODS\n\n constructor(config) {\n if (config) {\n if (\n (config.settingsFile && isObject(config.settingsFile.campaigns)) ||\n (config.settingsFile && !config.settingsFile.campaigns)\n ) {\n config.settingsFile.campaigns = [];\n }\n\n this._configObj = config;\n this._clonedSettingsFile = config.settingsFile ? FunctionUtil.cloneObject(config.settingsFile) : null;\n } else {\n this._configObj = null;\n this._clonedSettingsFile = null;\n }\n }\n\n _setVariationBucketing(campaign) {\n CampaignUtil.setVariationAllocation(campaign);\n }\n\n // PUBLIC METHODS\n\n isSettingsFileValid() {\n if (!this._configObj || !this._clonedSettingsFile) {\n return false;\n }\n let isValidSettingsFile = validateSettingsFile(this._clonedSettingsFile);\n\n if (!isValidSettingsFile) {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.SETTINGS_FILE_CORRUPTED, {\n file\n })\n );\n\n return false;\n }\n\n return true;\n }\n\n checkAndPoll() {\n if (!this._configObj.pollingInterval || !this._configObj.sdkKey) {\n return;\n }\n\n let lastSettingsFile = JSON.stringify(this._clonedSettingsFile);\n setInterval(() => {\n SettingsFileUtil.get(this._clonedSettingsFile.accountId, this._configObj.sdkKey)\n .then(latestSettingsFile => {\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SUCCESS, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n const stringifiedLatestSettingsFile = JSON.stringify(latestSettingsFile);\n\n if (stringifiedLatestSettingsFile !== lastSettingsFile) {\n lastSettingsFile = stringifiedLatestSettingsFile;\n\n this.updateSettingsFile(latestSettingsFile);\n\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SETTINGS_FILE_UPDATED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n } else {\n this._configObj.logger.log(\n LogLevelEnum.INFO,\n LogMessageUtil.build(LogMessageEnum.INFO_MESSAGES.POLLING_SETTINGS_FILE_NOT_UPDATED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n }\n })\n .catch(_e => {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.POLLING_FAILED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n });\n }, this._configObj.pollingInterval);\n\n this._configObj.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.POLLING_SETTINGS_FILE_REGISTERED, {\n file,\n pollingInterval: this._configObj.pollingInterval\n })\n );\n }\n processSettingsFile() {\n let settingsFile = this._clonedSettingsFile;\n\n for (let i = 0; i < settingsFile.campaigns.length; i++) {\n let campaign = settingsFile.campaigns[i];\n\n this._setVariationBucketing(campaign);\n }\n\n this._configObj.logger.log(\n LogLevelEnum.DEBUG,\n LogMessageUtil.build(LogMessageEnum.DEBUG_MESSAGES.SETTINGS_FILE_PROCESSED, {\n file,\n accountId: this._clonedSettingsFile.accountId\n })\n );\n\n return settingsFile;\n }\n\n /**\n * Fetch latest settings-file and update so that vwoClientInstance could use latest settings\n * Helpful especially when using webhooks\n *\n * @param {Number} accountId\n * @param {String} sdkKey\n *\n * @return {Promise}\n */\n getAndUpdateSettingsFile(accountId = this._clonedSettingsFile.accountId, sdkKey = this._clonedSettingsFile.sdkKey) {\n return new Promise((resolve, _reject) => {\n SettingsFileUtil.get(accountId, sdkKey, null, { isViaWebhook: true })\n .then(settings => {\n this.updateSettingsFile(settings);\n resolve(settings);\n })\n .catch(_err => {});\n });\n }\n\n /**\n * Update the settings-file on the instance so that latest settings could be used from next hit onwards\n * @param {Object} settings\n */\n updateSettingsFile(settings) {\n this._clonedSettingsFile = FunctionUtil.cloneObject(settings);\n this.processSettingsFile();\n }\n\n getConfig() {\n return this._configObj;\n }\n\n getSettingsFile(api) {\n if (!this._clonedSettingsFile) {\n this._configObj.logger.log(\n LogLevelEnum.ERROR,\n LogMessageUtil.build(LogMessageEnum.ERROR_MESSAGES.API_HAS_CORRUPTED_SETTINGS_FILE, {\n file,\n api\n })\n );\n }\n return this._clonedSettingsFile;\n }\n}\nmodule.exports = SettingsFileManager;\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet { validate, number, string, boolean, array, object, optional, union, type, record } = require('superstruct');\n\nconst campaignGoalSchema = type({\n id: union([number(), string()]),\n identifier: string(),\n type: string(),\n revenueProp: optional(string()),\n mca: optional(union([number(), string()]))\n});\n\nconst variableObjectSchema = type({\n id: union([number(), string()]),\n type: string(),\n key: string(),\n value: union([number(), string(), boolean()])\n});\n\nconst campaignVariationSchema = type({\n id: union([number(), string()]),\n name: string(),\n weight: union([number(), string()]),\n changes: optional(object()),\n segments: optional(object()),\n variables: optional(union([object(), array(variableObjectSchema)])),\n isFeatureEnabled: optional(boolean()),\n startVariationAllocation: optional(number()),\n endVariationAllocation: optional(number())\n});\n\nconst campaignObjectSchema = type({\n id: union([number(), string()]),\n type: string(),\n key: string(),\n status: string(),\n name: optional(string()),\n isBucketingSeedEnabled: optional(boolean()),\n percentTraffic: number(),\n goals: union([object(), array(campaignGoalSchema)]),\n variations: union([object(), array(campaignVariationSchema)]),\n variables: optional(union([object(), array(variableObjectSchema)])),\n segments: object(),\n isForcedVariationEnabled: optional(boolean()),\n isUserListEnabled: optional(boolean()),\n isMAB: optional(boolean())\n});\n\nconst groupSchema = type({\n et: optional(string()),\n p: optional(array(number())),\n wt: optional(record(string(), number())),\n groupName: string(),\n campaigns: array(number())\n});\n\nconst settingsFileSchema = type({\n sdkKey: optional(string()),\n version: union([number(), string()]),\n accountId: union([number(), string()]),\n campaigns: array(campaignObjectSchema),\n campaignGroups: optional(record(string(), number())),\n isEventArchEnabled: optional(boolean()),\n collectionPrefix: optional(string()),\n groups: optional(union([object(), record(string(), groupSchema)]))\n});\n\nconst validateSettingsFile = function(settings) {\n const [error] = validate(settings, settingsFileSchema);\n return !error;\n};\n\nmodule.exports = validateSettingsFile;\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/**\n * Convert a validation result to an iterable of failures.\n */\nfunction* toFailures(result, context) {\n if (result === true) ; else if (result === false) {\n yield context.fail();\n } else {\n yield* result;\n }\n}\n/**\n * Shifts (removes and returns) the first value from the `input` iterator.\n * Like `Array.prototype.shift()` but for an `Iterator`.\n */\n\nfunction iteratorShift(input) {\n const {\n done,\n value\n } = input.next();\n return done ? undefined : value;\n}\n\n/**\n * `Struct` objects encapsulate the schema for a specific data type (with\n * optional coercion). You can then use the `assert`, `is` or `validate` helpers\n * to validate unknown data against a struct.\n */\n\nclass Struct {\n constructor(props) {\n const {\n type,\n schema,\n coercer = value => value,\n validator = () => [],\n refiner = () => []\n } = props;\n this.type = type;\n this.schema = schema;\n this.coercer = coercer;\n this.validator = validator;\n this.refiner = refiner;\n }\n\n}\n/**\n * `StructError` objects are thrown (or returned) by Superstruct when its\n * validation fails. The error represents the first error encountered during\n * validation. But they also have an `error.failures` property that holds\n * information for all of the failures encountered.\n */\n\nclass StructError extends TypeError {\n constructor(failure, moreFailures) {\n const {\n path,\n value,\n type,\n branch\n } = failure,\n rest = _objectWithoutProperties(failure, [\"path\", \"value\", \"type\", \"branch\"]);\n\n const message = `Expected a value of type \\`${type}\\`${path.length ? ` for \\`${path.join('.')}\\`` : ''} but received \\`${JSON.stringify(value)}\\`.`;\n let failuresResult;\n\n function failures() {\n if (!failuresResult) {\n failuresResult = [failure, ...moreFailures];\n }\n\n return failuresResult;\n }\n\n super(message);\n this.value = value;\n Object.assign(this, rest);\n this.type = type;\n this.path = path;\n this.branch = branch;\n this.failures = failures;\n this.stack = new Error().stack;\n this.__proto__ = StructError.prototype;\n }\n\n}\n/**\n * Assert that a value passes a `Struct`, throwing if it doesn't.\n */\n\nfunction assert(value, struct) {\n const result = validate(value, struct);\n\n if (result[0]) {\n throw result[0];\n }\n}\n/**\n * Coerce a value with the coercion logic of `Struct` and validate it.\n */\n\nfunction coerce(value, struct) {\n const ret = struct.coercer(value);\n assert(ret, struct);\n return ret;\n}\n/**\n * Check if a value passes a `Struct`.\n */\n\nfunction is(value, struct) {\n const result = validate(value, struct);\n return !result[0];\n}\n/**\n * Validate a value against a `Struct`, returning an error if invalid.\n */\n\nfunction validate(value, struct, coercing = false) {\n if (coercing) {\n value = struct.coercer(value);\n }\n\n const failures = check(value, struct);\n const failure = iteratorShift(failures);\n\n if (failure) {\n const error = new StructError(failure, failures);\n return [error, undefined];\n } else {\n return [undefined, value];\n }\n}\n/**\n * Check a value against a `Struct`, returning an iterable of failures.\n */\n\nfunction* check(value, struct, path = [], branch = []) {\n const {\n type\n } = struct;\n const ctx = {\n value,\n type,\n branch,\n path,\n\n fail(props = {}) {\n return _objectSpread2({\n value,\n type,\n path,\n branch: [...branch, value]\n }, props);\n },\n\n check(v, s, parent, key) {\n const p = parent !== undefined ? [...path, key] : path;\n const b = parent !== undefined ? [...branch, parent] : branch;\n return check(v, s, p, b);\n }\n\n };\n const failures = toFailures(struct.validator(value, ctx), ctx);\n const failure = iteratorShift(failures);\n\n if (failure) {\n yield failure;\n yield* failures;\n } else {\n yield* toFailures(struct.refiner(value, ctx), ctx);\n }\n}\n\n/**\n * Augment a `Struct` to add an additional coercion step to its input.\n */\n\nfunction coercion(struct, coercer) {\n const fn = struct.coercer;\n return new Struct(_objectSpread2(_objectSpread2({}, struct), {}, {\n coercer: value => {\n return fn(coercer(value));\n }\n }));\n}\n/**\n * Augment a struct to coerce a default value for missing values.\n *\n * Note: You must use `coerce(value, Struct)` on the value before validating it\n * to have the value defaulted!\n */\n\nfunction defaulted(S, fallback, strict) {\n return coercion(S, x => {\n const f = typeof fallback === 'function' ? fallback() : fallback;\n\n if (x === undefined) {\n return f;\n }\n\n if (strict !== true && isPlainObject(x) && isPlainObject(f)) {\n const ret = _objectSpread2({}, x);\n\n let changed = false;\n\n for (const key in f) {\n if (ret[key] === undefined) {\n ret[key] = f[key];\n changed = true;\n }\n }\n\n if (changed) {\n return ret;\n }\n }\n\n return x;\n });\n}\n/**\n * Coerce a value to mask its properties to only that defined in the struct.\n */\n\nfunction masked(S) {\n return coercion(S, x => {\n if (!isPlainObject(x)) {\n return x;\n }\n\n const ret = {};\n\n for (const key in S.schema) {\n ret[key] = x[key];\n }\n\n return ret;\n });\n}\n/**\n * Check if a value is a plain object.\n */\n\nfunction isPlainObject(value) {\n if (Object.prototype.toString.call(value) !== '[object Object]') {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Augment a string or array struct to constrain its length to zero.\n */\n\nfunction empty(S) {\n return refinement(S, `${S.type} & Empty`, value => {\n return value.length === 0;\n });\n}\n/**\n * Augment a string or array struct to constrain its length to being between a\n * minimum and maximum size.\n */\n\nfunction length(S, min, max) {\n return refinement(S, `${S.type} & Length<${min},${max}>`, value => {\n return min < value.length && value.length < max;\n });\n}\n/**\n * Refine a string struct to match a specific regexp pattern.\n */\n\nfunction pattern(S, regexp) {\n return refinement(S, `${S.type} & Pattern<${regexp.source}>`, value => {\n return regexp.test(value);\n });\n}\n/**\n * Augment a `Struct` to add an additional refinement to the validation.\n */\n\nfunction refinement(struct, type, refiner) {\n const fn = struct.refiner;\n return new Struct(_objectSpread2(_objectSpread2({}, struct), {}, {\n type,\n\n *refiner(value, fail) {\n yield* toFailures(fn(value, fail), fail);\n yield* toFailures(refiner(value, fail), fail);\n }\n\n }));\n}\n\n/**\n * Validate any value.\n */\n\nfunction any() {\n return struct('any', () => true);\n}\nfunction array(Element) {\n return new Struct({\n type: `Array<${Element ? Element.type : 'unknown'}>`,\n schema: Element,\n coercer: value => {\n return Element && Array.isArray(value) ? value.map(v => coerce(v, Element)) : value;\n },\n\n *validator(value, ctx) {\n if (!Array.isArray(value)) {\n yield ctx.fail();\n return;\n }\n\n if (Element) {\n for (const [i, v] of value.entries()) {\n yield* ctx.check(v, Element, value, i);\n }\n }\n }\n\n });\n}\n/**\n * Validate that boolean values.\n */\n\nfunction boolean() {\n return struct('boolean', value => {\n return typeof value === 'boolean';\n });\n}\n/**\n * Validate that `Date` values.\n *\n * Note: this also ensures that the value is *not* an invalid `Date` object,\n * which can occur when parsing a date fails but still returns a `Date`.\n */\n\nfunction date() {\n return struct('Date', value => {\n return value instanceof Date && !isNaN(value.getTime());\n });\n}\n/**\n * Validate that a value dynamically, determing which struct to use at runtime.\n */\n\nfunction dynamic(fn) {\n return struct('Dynamic<...>', (value, ctx) => {\n return ctx.check(value, fn(value, ctx));\n });\n}\nfunction enums(values) {\n return struct(`Enum<${values.map(toLiteralString)}>`, value => {\n return values.includes(value);\n });\n}\n/**\n * Validate that a value is a function.\n */\n\nfunction func() {\n return struct('Function', value => {\n return typeof value === 'function';\n });\n}\n/**\n * Validate that a value is an instance of a class.\n */\n\nfunction instance(Class) {\n return struct(`InstanceOf<${Class.name}>`, value => {\n return value instanceof Class;\n });\n}\nfunction intersection(Structs) {\n return struct(Structs.map(s => s.type).join(' & '), function* (value, ctx) {\n for (const S of Structs) {\n yield* ctx.check(value, S);\n }\n });\n}\n/**\n * Validate a value lazily, by constructing the struct right before the first\n * validation. This is useful for cases where you want to have self-referential\n * structs for nested data structures.\n */\n\nfunction lazy(fn) {\n let S;\n return struct('Lazy<...>', (value, ctx) => {\n if (!S) {\n S = fn();\n }\n\n return ctx.check(value, S);\n });\n}\nfunction literal(constant) {\n return struct(`Literal<${toLiteralString(constant)}>`, value => {\n return value === constant;\n });\n}\n/**\n * Validate that a value is a map with specific key and value entries.\n */\n\nfunction map(Key, Value) {\n return struct(`Map<${Key.type},${Value.type}>`, function* (value, ctx) {\n if (!(value instanceof Map)) {\n yield ctx.fail();\n return;\n }\n\n for (const [k, v] of value.entries()) {\n yield* ctx.check(k, Key, value, k);\n yield* ctx.check(v, Value, value, k);\n }\n });\n}\n/**\n * Validate that a value always fails.\n */\n\nfunction never() {\n return struct('never', () => false);\n}\n/**\n * Augment a struct to make it accept `null` values.\n */\n\nfunction nullable(S) {\n return new Struct({\n type: `${S.type} | null`,\n schema: S.schema,\n validator: (value, ctx) => {\n return value === null || ctx.check(value, S);\n }\n });\n}\n/**\n * Validate that a value is a number.\n */\n\nfunction number() {\n return struct(`number`, value => {\n return typeof value === 'number' && !isNaN(value);\n });\n}\nfunction object(Structs) {\n const knowns = Structs ? Object.keys(Structs) : [];\n const Never = never();\n return new Struct({\n type: Structs ? `Object<{${knowns.join(',')}}>` : 'Object',\n schema: Structs ? Structs : null,\n coercer: Structs ? createObjectCoercer(Structs) : x => x,\n\n *validator(value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n if (Structs) {\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n\n for (const key of unknowns) {\n const v = value[key];\n yield* ctx.check(v, Never, value, key);\n }\n }\n }\n\n });\n}\n/**\n * Augment a struct to make it optionally accept `undefined` values.\n */\n\nfunction optional(S) {\n return new Struct({\n type: `${S.type}?`,\n schema: S.schema,\n validator: (value, ctx) => {\n return value === undefined || ctx.check(value, S);\n }\n });\n}\n/**\n * Validate that a partial object with specific entry values.\n */\n\nfunction partial(Structs) {\n if (Structs instanceof Struct) {\n Structs = Structs.schema;\n }\n\n const knowns = Object.keys(Structs);\n const Never = never();\n return new Struct({\n type: `Partial<{${knowns.join(',')}}>`,\n schema: Structs,\n coercer: createObjectCoercer(Structs),\n\n *validator(value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n\n if (!(key in value)) {\n continue;\n }\n\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n\n for (const key of unknowns) {\n const v = value[key];\n yield* ctx.check(v, Never, value, key);\n }\n }\n\n });\n}\n/**\n * Validate that a value is a record with specific key and\n * value entries.\n */\n\nfunction record(Key, Value) {\n return struct(`Record<${Key.type},${Value.type}>`, function* (value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n for (const k in value) {\n const v = value[k];\n yield* ctx.check(k, Key, value, k);\n yield* ctx.check(v, Value, value, k);\n }\n });\n}\n/**\n * Validate that a set of values matches a specific type.\n */\n\nfunction set(Element) {\n return struct(`Set<${Element.type}>`, (value, ctx) => {\n if (!(value instanceof Set)) {\n return false;\n }\n\n for (const val of value) {\n const [failure] = ctx.check(val, Element);\n\n if (failure) {\n return false;\n }\n }\n\n return true;\n });\n}\n/**\n * Validate that a value is a string.\n */\n\nfunction string() {\n return struct('string', value => {\n return typeof value === 'string';\n });\n}\n/**\n * Define a `Struct` instance with a type and validation function.\n */\n\nfunction struct(name, validator) {\n return new Struct({\n type: name,\n validator,\n schema: null\n });\n}\nfunction tuple(Elements) {\n const Never = never();\n return struct(`[${Elements.map(s => s.type).join(',')}]`, function* (value, ctx) {\n if (!Array.isArray(value)) {\n yield ctx.fail();\n return;\n }\n\n for (const [index, Element] of Elements.entries()) {\n const v = value[index];\n yield* ctx.check(v, Element, value, index);\n }\n\n if (value.length > Elements.length) {\n const index = Elements.length;\n const v = value[index];\n yield* ctx.check(v, Never, value, index);\n }\n });\n}\n/**\n * Validate that a value matches a specific strutural interface, like the\n * structural typing that TypeScript uses.\n */\n\nfunction type(Structs) {\n const keys = Object.keys(Structs);\n return struct(`Type<{${keys.join(',')}}>`, function* (value, ctx) {\n if (typeof value !== 'object' || value == null) {\n yield ctx.fail();\n return;\n }\n\n for (const key of keys) {\n const Value = Structs[key];\n const v = value[key];\n yield* ctx.check(v, Value, value, key);\n }\n });\n}\nfunction union(Structs) {\n return struct(`${Structs.map(s => s.type).join(' | ')}`, function* (value, ctx) {\n for (const S of Structs) {\n const [...failures] = ctx.check(value, S);\n\n if (failures.length === 0) {\n return;\n }\n }\n\n yield ctx.fail();\n });\n}\n/**\n * Convert a value to a literal string.\n */\n\nfunction toLiteralString(value) {\n return typeof value === 'string' ? `\"${value.replace(/\"/g, '\"')}\"` : `${value}`;\n}\n/**\n * Coerce the values of an object-like struct.\n */\n\n\nfunction createObjectCoercer(Structs) {\n const knowns = Object.keys(Structs);\n return value => {\n if (typeof value !== 'object' || value == null) {\n return value;\n }\n\n const ret = {};\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n const Value = Structs[key];\n const v = value[key];\n ret[key] = coerce(v, Value);\n }\n\n for (const key of unknowns) {\n ret[key] = value[key];\n }\n\n return ret;\n };\n}\n\nexport { Struct, StructError, any, array, assert, boolean, coerce, coercion, date, defaulted, dynamic, empty, enums, func, instance, intersection, is, lazy, length, literal, map, masked, never, nullable, number, object, optional, partial, pattern, record, refinement, set, string, struct, tuple, type, union, validate };\n//# sourceMappingURL=index.es.js.map\n","/**\n * Copyright 2019-2022 Wingify Software Pvt. Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { LogManager } = require('./logging');\n\nclass UsageStats {\n constructor() {\n this.data = {};\n }\n\n /**\n * Collect the usage stats from the params passed at the time of instantiating VWO and send them to VWO Server\n * @param {Object} config config passed at the time of instantiation.\n */\n collectUsageStats(config) {\n this.data['eb'] = Number(!!config.batchEvents);\n this.data['ig'] = Number(!!config.integrations);\n this.data['ss'] = Number(!!config.userStorageService);\n this.data['cl'] = Number(!(config.logger instanceof LogManager));\n this.data['ll'] = Number(config.logging && config.logging.level);\n this.data['tr'] = Number(config.shouldTrackReturningUser);\n this.data['gt'] = Number(!!config.goalTypeToTrack);\n this.data['pi'] = Number(!!config.pollingInterval);\n\n Object.keys(this.data).forEach(function(key) {\n if (!this.data[key]) {\n delete this.data[key];\n }\n }, this);\n }\n\n /**\n * Get the collected usage stats.\n * @returns collected usage stats data\n */\n getUsageStats() {\n if (Object.keys(this.data).length > 0) {\n this.data['_l'] = 1;\n }\n return this.data;\n }\n}\n\nmodule.exports = UsageStats;\n"],"sourceRoot":""} \ No newline at end of file From 151ba2c3477b8377e9ccbbcb78d8e8ae985787cf Mon Sep 17 00:00:00 2001 From: sakshamg1304 Date: Mon, 16 Sep 2024 12:58:31 +0530 Subject: [PATCH 3/4] fix: changelog updated --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06b0075..058626f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.70.1] - 2024-09-16 + +### Fix +- Removed extra logging in HttpXMLUtil + ## [1.70.0] - 2024-07-18 ### Fix - Retry on failed network calls From 2c89033d0a8ab7473125ac6c7bd4bc0a5fd66d71 Mon Sep 17 00:00:00 2001 From: sakshamg1304 Date: Mon, 7 Oct 2024 13:45:41 +0530 Subject: [PATCH 4/4] fix: changelog date updated --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 058626f..4671e2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [1.70.1] - 2024-09-16 +## [1.70.1] - 2024-10-07 ### Fix - Removed extra logging in HttpXMLUtil