{"version":3,"sources":["webpack://elc-service-analytics/webpack/universalModuleDefinition","webpack://elc-service-analytics/./node_modules/debug/node_modules/ms/index.js","webpack://elc-service-analytics/./node_modules/debug/src/browser.js","webpack://elc-service-analytics/./node_modules/debug/src/common.js","webpack://elc-service-analytics/./node_modules/debug/src/index.js","webpack://elc-service-analytics/./node_modules/debug/src/node.js","webpack://elc-service-analytics/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://elc-service-analytics/./node_modules/process/browser.js","webpack://elc-service-analytics/./node_modules/react-is/cjs/react-is.production.min.js","webpack://elc-service-analytics/./node_modules/react-is/index.js","webpack://elc-service-analytics/./node_modules/supports-color/browser.js","webpack://elc-service-analytics/./node_modules/tty-browserify/index.js","webpack://elc-service-analytics/./node_modules/util/node_modules/inherits/inherits.js","webpack://elc-service-analytics/./node_modules/util/node_modules/inherits/inherits_browser.js","webpack://elc-service-analytics/./node_modules/util/support/isBufferBrowser.js","webpack://elc-service-analytics/./node_modules/util/util.js","webpack://elc-service-analytics/external umd \"ElcServiceBus\"","webpack://elc-service-analytics/external umd {\"root\":[\"ElcRuntime\",\"HypoContainer\"],\"commonjs2\":\"HypoContainer\",\"commonjs\":\"HypoContainer\",\"amd\":\"HypoContainer\"}","webpack://elc-service-analytics/external umd {\"root\":[\"ElcRuntime\",\"React\"],\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"}","webpack://elc-service-analytics/external umd {\"root\":[\"ElcRuntime\",\"mobx\"],\"commonjs2\":\"mobx\",\"commonjs\":\"mobx\",\"amd\":\"mobx\"}","webpack://elc-service-analytics/webpack/bootstrap","webpack://elc-service-analytics/webpack/runtime/compat get default export","webpack://elc-service-analytics/webpack/runtime/define property getters","webpack://elc-service-analytics/webpack/runtime/global","webpack://elc-service-analytics/webpack/runtime/hasOwnProperty shorthand","webpack://elc-service-analytics/webpack/runtime/make namespace object","webpack://elc-service-analytics/./node_modules/@estee/elc-universal-utils/src/UniversalUtils.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-universal-utils/src/Service/ServiceUtils.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-universal-utils/src/BrowserStorage.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-universal-utils/src/Service/ServiceVersion.ts","webpack://elc-service-analytics/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://elc-service-analytics/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://elc-service-analytics/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://elc-service-analytics/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://elc-service-analytics/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://elc-service-analytics/./node_modules/@loadable/component/dist/loadable.esm.js","webpack://elc-service-analytics/./node_modules/@estee/elc-service/node_modules/@estee/elc-universal-utils/src/UniversalUtils.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-service/node_modules/@estee/elc-universal-utils/src/Service/ServiceUtils.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-service/node_modules/@estee/elc-universal-utils/src/BrowserStorage.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-service/node_modules/@estee/elc-universal-utils/src/Service/ServiceVersion.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-service/node_modules/@estee/elc-universal-utils/src/Polyfill/RequestIdleCallback.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-logging/node_modules/@estee/elc-universal-utils/src/UniversalUtils.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-logging/node_modules/@estee/elc-universal-utils/src/Service/ServiceUtils.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-logging/node_modules/@estee/elc-universal-utils/src/BrowserStorage.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-logging/node_modules/@estee/elc-universal-utils/src/Service/ServiceVersion.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-logging/node_modules/@estee/elc-universal-utils/src/Polyfill/RequestIdleCallback.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-logging/src/ELCLoggerValidations.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-logging/src/LoggerApiSDK.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-logging/src/ELCLogger.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-service/src/Service/utils/index.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-service/src/Service/Service.ts","webpack://elc-service-analytics/./src/service-setup/AnalyticsService.ts","webpack://elc-service-analytics/./src/internal/AnalyticsDriver.ts","webpack://elc-service-analytics/./src/utils/dataAggregator.ts","webpack://elc-service-analytics/./src/internal/DataAggregator.ts","webpack://elc-service-analytics/./src/internal/QueryMap.ts","webpack://elc-service-analytics/./src/internal/repositories/EventRepository.ts","webpack://elc-service-analytics/./src/mock/QueryProvidersMock.ts","webpack://elc-service-analytics/./src/internal/EventSubmitter.ts","webpack://elc-service-analytics/./src/service-setup/ConfigStore.ts","webpack://elc-service-analytics/./node_modules/@estee/elc-service/src/decorators/Decorators.ts","webpack://elc-service-analytics/./src/internal/OutboundLinkListener.ts","webpack://elc-service-analytics/./src/service-setup/diContainer.ts","webpack://elc-service-analytics/./src/constants/Views.ts","webpack://elc-service-analytics/./src/internal/domain/entities/Event.ts","webpack://elc-service-analytics/./src/internal/use-cases/AccountPageLandedUseCase.ts","webpack://elc-service-analytics/./src/constants/Routes.ts","webpack://elc-service-analytics/./src/internal/use-cases/AuthAttemptUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AuthFailedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/CartLandingPageViewedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/CartLoggedInUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ProductImpressionsUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ProductViewedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/CreateAccountAttemptUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/CreateAccountFailUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/CreateAccountSuccessUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ItemAddedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/LoggedInSuccessfulUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ManualOfferCodeAppliedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/MppFilteredUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/OrderConfirmationPageLandedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/OutboundClickedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/PaymentMethodCompletedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/PaymentPageViewedUseCase.ts","webpack://elc-service-analytics/./src/constants/UseCasesConstants.ts","webpack://elc-service-analytics/./src/internal/use-cases/ProductClickedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/QuickViewUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/RemoveItemUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/SampleAddedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/SearchAddressSubmittedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ShippingAddressFilledUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ShippingOptionSelectedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ShippingPageViewedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/StoreLocationSelectedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/StoreLocatorClickedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/StoreMarkerClickedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/StoreTownSelectedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/SubscribedForEmailsUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/TransactionFailedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/TransactionSuccededUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/PageViewUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AnalyticsLoadedUseCase.ts","webpack://elc-service-analytics/./src/constants/SkuEngraving.ts","webpack://elc-service-analytics/./src/internal/use-cases/SkuEngravingUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/GridFilteredUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/GridSortedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ShadeGroupSelectedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/LiveChatInterfaceClickedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ProductComparisonViewedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/SocialShareIconTriggeredUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/StoreBookVirtualAppointmentClickedUseCase.ts","webpack://elc-service-analytics/./src/constants/ActionType.ts","webpack://elc-service-analytics/./src/internal/use-cases/SkuPickerInteractionUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AccountSidebarMenuOptionClickedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AccountSidebarShowcaseClickedUseCase.ts","webpack://elc-service-analytics/./src/constants/Account.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentVirtualSelectedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentServiceSelectedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentDateTimeSelectedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentEditClickedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentStartedOverUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentArtistSelectedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentStepLoadedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentProcessCompletedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentAddedToCalendarUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/SearchProductsQueriedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/SearchTermSelectedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/VTOActionUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ProductNotifyMeTriggeredUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/ProductNotifyMeRequestCompletedUseCase.ts","webpack://elc-service-analytics/./src/internal/use-cases/RatingsReviewsUseCase.ts","webpack://elc-service-analytics/./src/constants/RatingsReviews.ts","webpack://elc-service-analytics/./src/internal/use-cases/SmartGiftUseCase.ts","webpack://elc-service-analytics/./src/constants/SmartGift.ts","webpack://elc-service-analytics/./src/constants/Vto.ts","webpack://elc-service-analytics/./src/internal/use-cases/OfferViewed.ts","webpack://elc-service-analytics/./src/internal/use-cases/OfferClicked.ts","webpack://elc-service-analytics/./src/internal/use-cases/OffersTabClicked.ts","webpack://elc-service-analytics/./src/internal/use-cases/CartOverlayClosed.ts","webpack://elc-service-analytics/./src/internal/use-cases/CartOverlayOpened.ts","webpack://elc-service-analytics/./src/internal/use-cases/AppointmentLocationSelectedUseCase.ts","webpack://elc-service-analytics/./src/service-setup/ServiceBusController.ts","webpack://elc-service-analytics/./src/index.ts"],"names":[],"mappings":"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UA,GADN,SAAG,oCACG,wCAUA,GADN,SAAG,4CACG,+CASA,GADN,SAAG,mCACG,uCAMA,GADN,SAAG,+BACG,mCAMA,GADN,SAAG,oCACG,wCAMA,GADN,SAAG,8BACG,mCAKA,GADN,SAAG,kCACG,sCAMA,GADN,SAAG,kCACG,sCAMA,GADN,SAAG,uBACG,4BAMA,GADN,SAAG,+BACG,mCAMA,GADN,SAAG,uBACG,4BAMA,GADN,SAAG,wBACG,6BAMA,GADN,SAAG,qCACG,gCAMA,GADN,SAAG,6BACG,iCAMA,GADN,SAAG,2BACG,gCAYA,GADN,SAAG,uCACG,0CAMA,GADN,SAAG,6CACG,+CAYA,GADN,SAAG,6CACG,+CAYA,GADN,SAAG,sBACG,2BAMA,GADN,SAAG,wBACG,6BAMA,GADN,SAAG,oCACG,wCAMA,GADN,SAAG,0BACG,8BAMA,GADN,SAAG,gCACG,oCAMA,GADN,SAAG,qCACG,uCAQA,GADN,SAAG,yBACG,wCAMA,GADN,SAAG,mCACG,6CAMA,GADN,SAAG,iCACG,qCAMA,GADN,SAAG,4BACG,iCAMA,GADN,SAAG,0BACG,8BAMA,GADN,SAAG,8BACG,mCAMA,GADN,SAAG,gCACG,qCAMA,GADN,SAAG,wBACG,2BAMA,GADN,SAAG,yBACG,4BAMA,GADN,SAAG,uBACG,0BAMA,GADN,SAAG,gCACG,mCAUA,GADN,SAAG,+BACG,mCAGA,GADN,SAAG,+BACG,mCAGA,GADN,SAAG,oCACG,gCAMA,GADN,SAAG,sCACG,yCAKA,GADN,SAAG,qCACG,wCAKA,GADN,SAAG,wCACG,oCAeA,GADN,SAAG,qCACG,yCAOA,GADN,SAAG,mCACG,uCAMA,GADN,SAAG,gCACG,oCAMA,GADN,SAAG,oBACG,qCAwBA,GADN,SAAG,6BACG,iCAYA,GADN,SAAG,6BACG,iCAYA,GADN,SAAG,6BACG,iCAYA,GADN,SAAG,uBACG,4BAYA,GADN,SAAG,gCACG,oCAYA,GADN,SAAG,sBACG,2BAYA,GADN,SAAG,6BACG,iCAYA,GADN,SAAG,iDACG,kDAYA,GADN,SAAG,iDACG,kDAYA,GADN,SAAG,sBACG,2BAYA,GADN,SAAG,uBACG,4BAYA,GADN,SAAG,6BACG,iCAYA,GADN,SAAG,sBACG,2BAYA,GADN,SAAG,sCACG,wCAYA,GADN,SAAG,mCACG,sCAYA,GADN,SAAG,4BACG,gCAYA,GADN,SAAG,2BACG,+BAYA,GADN,SAAG,gCACG,oCAYA,GADN,SAAG,qBACG,0BAYA,GADN,SAAG,4BACG,gCAYA,GADN,SAAG,iCACG,kCAYA,GADN,SAAG,kCACG,mCAYA,GADN,SAAG,oCACG,uCAYA,GADN,SAAG,sCACG,yCAYA,GADN,SAAG,sCACG,yCAYA,GADN,SAAG,gCACG,mCAYA,GADN,SAAG,oBACG,yBAYA,GADN,SAAG,2BACG,+BAYA,GADN,SAAG,6BACG,iCAYA,GADN,SAAG,kCACG,sCAYA,GADN,SAAG,gCACG,mCAYA,GADN,SAAG,uCACG,yCAYA,GADN,SAAG,uCACG,yCAYA,GADN,SAAG,uCACG,yCAYA,GADN,SAAG,iCACG,oCAYA,GADN,SAAG,gCACG,mCAYA,GADN,SAAG,sCACG,wCAYA,GADN,SAAG,qCACG,4CAYA,GADN,SAAG,sCACG,6CAYA,GADN,SAAG,sCACG,4CAYA,GADN,SAAG,gCACG,mCAYA,GADN,SAAG,yCACG,2CAgBA,GADN,SAAG,mCACG,oCAYA,GADN,SAAG,sCACG,2CASA,GADN,SAAG,qCACG,2CASA,GADN,SAAG,uCACG,0CAYA,GADN,SAAG,sCACG,yCASA,GADN,SAAG,uCACG,0CAYA,GADN,SAAG,kCACG,sCASA,GADN,SAAG,kCACG,sCASA,GADN,SAAG,kCACG,qCASA,GADN,SAAG,oCACG,uCASA,GADN,SAAG,yCACG,2CAYA,GADN,SAAG,8CACG,+CAYA,GADN,SAAG,6CACG,8CAYA,GADN,SAAG,4CACG,6CAYA,GADN,SAAG,mCACG,sCASA,GADN,SAAG,2CACG,2CAYA,GADN,SAAG,gCACG,oCASA,GADN,SAAG,iCACG,qCASA,GADN,SAAG,iCACG,qCASA,GADN,SAAG,2BACG,gCASA,GADN,SAAG,4BACG,iCASA,GADN,SAAG,8BACG,mCASA,GADN,SAAG,oCACG,wCASA,GADN,SAAG,6BACG,kCASA,GADN,SAAG,+BACG,oCASA,GADN,SAAG,iCACG,mCASA,GADN,SAAG,iCACG,qCASA,GADN,SAAG,6CACG,2CASA,GADN,SAAG,gDACG,8CASA,GADN,SAAG,iDACG,+CASA,GADN,SAAG,uCACG,0CAMA,GADN,SAAG,uCACG,0CAMA,GADN,SAAG,6BACG,iCAOA,GADN,SAAG,6BACG,iCAOA,GADN,SAAG,wCACG,4CAMA,GADN,SAAG,yCACG,6CAOA,GADN,SAAG,wCACG,4CAOA,GADN,SAAG,0CACG,6CAOA,GADN,SAAG,oCACG,wCAMA,GADN,SAAG,oCACG,wCAMA,GADN,SAAG,uCACG,2CAOA,GADN,SAAG,mCACG,uCAOA,GADN,SAAG,yCACG,6CAMA,GADN,SAAG,yCACG,4CC32CX,EAAiB,qI","file":"bundle.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"), require(\"mobx\"), require(\"ElcServiceBus\"), require(\"HypoContainer\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\", \"mobx\", \"ElcServiceBus\", \"HypoContainer\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"elc-service-analytics\"] = factory(require(\"react\"), require(\"mobx\"), require(\"ElcServiceBus\"), require(\"HypoContainer\"));\n\telse\n\t\troot[\"elc-service-analytics\"] = factory(root[\"ElcRuntime\"][\"React\"], root[\"ElcRuntime\"][\"mobx\"], root[\"ElcServiceBus\"], root[\"ElcRuntime\"][\"HypoContainer\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE_react__, __WEBPACK_EXTERNAL_MODULE_mobx__, __WEBPACK_EXTERNAL_MODULE__estee_elc_service_bus__, __WEBPACK_EXTERNAL_MODULE_hypo_container__) {\nreturn ","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\nmodule.exports = {\n\tstdout: false,\n\tstderr: false\n};\n","exports.isatty = function () { return false; };\n\nfunction ReadStream() {\n throw new Error('tty.ReadStream is not implemented');\n}\nexports.ReadStream = ReadStream;\n\nfunction WriteStream() {\n throw new Error('tty.ReadStream is not implemented');\n}\nexports.WriteStream = WriteStream;\n","try {\n var util = require('util');\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n module.exports = require('./inherits_browser.js');\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__estee_elc_service_bus__;","module.exports = __WEBPACK_EXTERNAL_MODULE_hypo_container__;","module.exports = __WEBPACK_EXTERNAL_MODULE_react__;","module.exports = __WEBPACK_EXTERNAL_MODULE_mobx__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ServiceBus } from 'elc-service-bus';\nimport {\n IServiceRegistry,\n IComponentViewController,\n AllServicesTypes\n} from './Service/ServiceUtils';\n\nexport const MOBILE_VERSION_SELECTOR = 'js-mobile-version';\nexport const DESKTOP_VERSION_SELECTOR = 'js-desktop-version';\n\nexport interface ISingleServiceInfo {\n [key: string]: string;\n}\n\nexport interface IServiceInfo {\n [name: string]: ISingleServiceInfo;\n}\n\nexport type ArrayMinOne = {\n 0: T;\n} & T[];\n\ninterface IObjectOfStrings {\n [key: string]: string;\n}\n\ninterface IServiceBusTopics {\n commands: IObjectOfStrings;\n events: IObjectOfStrings;\n queries: IObjectOfStrings;\n}\n\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n}\n\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\n\nexport interface IRequestOptions {\n debounceInterval?: number;\n}\n\nexport type HeaderType = 'Business-Unit' | 'Authorization' | 'AuthorizationToken' | 'ClientId';\nexport type HeaderObject = { [key in HeaderType]?: string };\nexport type IHeaderSetter = () => Promise;\nexport type IRequestTransformerConfig = { url: string } & RequestInit;\nexport type IRequestTransformer = (config: IRequestTransformerConfig) => Promise;\n\nexport interface IHttpTransport {\n getStaticGlobalHeaders(): HeaderObject;\n setBaseUrl(baseUrl: string): void;\n addGlobalHeaders(headers: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n addGlobalHeaderSetter(setter: IHeaderSetter): void;\n removeGlobalHeaderSetter(setter: IHeaderSetter): void;\n addRequestTransformer(transformer: IRequestTransformer): void;\n removeRequestTransformer(transformer: IRequestTransformer): void;\n delete(payload: string | IPayload): Promise;\n post(payload: IPayload): Promise;\n patch(payload: IPayload): Promise;\n put(payload: IPayload): Promise;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise;\n readonly isAuthFailureHandlingEnabled: boolean;\n setAuthFailureHandlingEnabled(enabled: boolean): void;\n}\n\nexport interface IUtagData {\n [key: string]: string | string[] | undefined | boolean | number | null | number[];\n}\nexport interface IUtagCfgOvrd {\n noview: boolean;\n dom_complete?: boolean;\n lowerqp?: boolean;\n noload?: boolean | number;\n nocookie?: boolean;\n readywait?: boolean | number;\n waittimer?: number;\n}\nexport interface IUtag {\n link(data: IUtagData, cb?: Function): void;\n view(data: IUtagData, cb?: Function): void;\n}\n\ninterface IDrupalSite {\n translations?: any;\n trackingDataLayer?: any;\n client?: {\n subdomain?: string;\n isMobile?: number;\n };\n}\nexport type AnyObject = { [key: string]: any };\ntype ITranslationsCollection = { [key: string]: string | IObjectOfStrings };\ntype ViewDataPreloader = {\n addConfigs(configs: AnyObject): void;\n addTranslations(translations: ITranslationsCollection): void;\n getPreloadedConfigs(arg: string[]): AnyObject | null;\n getPreloadedTranslations(arg: string[]): ITranslationsCollection | null;\n preload(): Promise;\n registerTranslationFieldsToPreload(fields?: string[]): void;\n registerConfigFieldsToPreload(fields?: string[]): void;\n};\ninterface IComponentRenderer {\n init(): Promise;\n getDataPreloader(): ViewDataPreloader | null;\n setDataPreloader(arg: ViewDataPreloader): void;\n}\n\ntype IObjectLike = { [key: string]: any } | null;\nexport interface IViewManager {\n loadComponent(): Promise;\n module: React.ComponentType | null;\n controllerFromView: IComponentViewController | null;\n}\nexport interface IViewsManager {\n lazyServicesStarted: boolean;\n getViewManager(viewName: string): IViewManager;\n startService(service: AllServicesTypes): Promise;\n startLazyServices(): Promise;\n}\ndeclare global {\n // Augment Node.js `global`\n namespace NodeJS {\n interface Global {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n site?: IDrupalSite;\n location: Location;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n serviceInfo: IServiceInfo;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(\n message: string,\n url: string,\n line: number,\n column: number,\n error: Error\n ): boolean;\n env: string;\n buid: string;\n }\n }\n\n // Augment Browser `window`\n interface Window {\n ServiceBusTopics: IServiceBusTopics;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n replaceSrc(originalSrc: string): string;\n utag_data: any;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n site?: IDrupalSite;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(message: string, url: string, line: number, column: number, error: Error): boolean;\n env: string;\n buid: string;\n serviceInfo: IServiceInfo;\n }\n\n // Augment Web Worker `self`\n interface WorkerGlobalScope {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n }\n}\n\nexport const isWebRendered = typeof self === 'object' && self.self === self;\n\nexport const root: NodeJS.Global | Window =\n (isWebRendered && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n window;\n\nexport const setupServiceInfo = (serviceInfo: ISingleServiceInfo) => {\n const { name, ...rest } = serviceInfo;\n\n root.serviceInfo = root.serviceInfo || {};\n root.serviceInfo[name] = rest;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { LoadableComponent } from '@loadable/component';\n\nexport const SERVICE_VIEW_CLASSNAME = 'elc-service-view-renderer';\nexport const SERVICE_VIEW_RENDERED_ATTRIBUTE = 'data-rendered-view';\n\nexport interface ICachedComponentsRegistry {\n [key: string]: React.ComponentType;\n}\n\nexport type RegisteredComponent = () => Promise<{\n ['default']: React.ComponentType;\n}>;\n\ntype AnyObject = { [key: string]: any };\n\nexport interface IAppConfig extends AnyObject {\n env?: string;\n businessUnitId?: string;\n}\n\nexport interface IViewControllerData {\n [key: string]: any;\n}\n\nexport type ViewControllerLoadedMethod = (...args: any[]) => Promise;\n\nexport interface IComponentViewController {\n id?: string;\n loaded?: ViewControllerLoadedMethod;\n data?: IViewControllerData;\n dataState?: IViewControllerData;\n configMergeStrategy?: Function;\n initialize?(...args: any[]): void;\n handleState?(...args: any[]): void;\n setSSRState(data: IViewControllerData): void;\n setId(id: string): void;\n isLoading: boolean;\n}\n\nexport interface IComponent {\n componentName: string;\n component: LoadableComponent;\n viewController?(): IComponentViewController;\n}\n\nexport interface IComponentRegistry {\n [key: string]: IComponent;\n}\n\ninterface IBaseServiceRegistryComp {\n isStarted: boolean;\n isStarting: boolean;\n name: string;\n isLazy?: boolean;\n start(appConfig: IAppConfig): Promise;\n version: string;\n views: string[];\n}\n\nexport type IManifestService = {\n events: string[];\n queries: string[];\n};\n\ntype BaseServiceRegistryComponent = {\n cachedComponentsRegistry: ICachedComponentsRegistry;\n componentsRegistry: IComponentRegistry;\n getView(componentName: string): IComponent | null;\n getViewFromCache(componentName: string): React.ComponentType | null;\n registerView(\n componentName: string,\n component: RegisteredComponent,\n viewController?: () => IComponentViewController\n ): void;\n serviceInitializer: any;\n serviceBusController?: any;\n setViewInCache(componentName: string, component: React.ComponentType): void;\n};\n// Exported object by the createServiceManifest method\nexport type IManifestServiceRegistryComp = IBaseServiceRegistryComp & IManifestService;\n// Service exported by the register method after applying the manifest\nexport type ILazyServiceRegistryComponent = BaseServiceRegistryComponent &\n IManifestServiceRegistryComp;\n// Service exported by the register method if manifest is not applied (non lazy service)\nexport type IServiceRegistryComponent = BaseServiceRegistryComponent & IBaseServiceRegistryComp;\n\n// Remove after SDFEFND-1853\n// Exported from older versions of the register method (elc-service < v7)\nexport interface IOlderServiceRegistryComponent\n extends Omit {\n getView(componentName: string): IComponent | undefined;\n start(appConfig: IAppConfig): Promise;\n // These keys doesn't exist but this will avoid TS errors\n views?: string[];\n isLazy?: boolean;\n}\n\nexport type AllUpdatedServicesTypes =\n | ILazyServiceRegistryComponent\n | IManifestServiceRegistryComp\n | IServiceRegistryComponent;\n\nexport type AllServicesTypes = AllUpdatedServicesTypes | IOlderServiceRegistryComponent;\n\nexport interface IServiceRegistry {\n [key: string]: AllServicesTypes;\n}\n","export type storageKeyType = 'localStorage' | 'sessionStorage';\nexport namespace BrowserStorage {\n export function eraseCookie(name: string) {\n document.cookie = `${name}=; Max-Age=-99999999;`;\n }\n\n export function setCookie(name: string, value: string, daysOrDate: number | Date) {\n let expires = '';\n if (daysOrDate) {\n const expirationDate =\n typeof daysOrDate === 'number'\n ? new Date(Date.now() + daysOrDate * 24 * 60 * 60 * 1000)\n : daysOrDate;\n expires = `; expires=${expirationDate.toUTCString()}`;\n }\n document.cookie = `${name}=${value || ''}${expires};path=/`;\n }\n\n export function getCookie(name: string) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n\n return null;\n }\n\n export function getItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n if (window[storageKey].getItem(key) !== null) {\n return window[storageKey].getItem(key);\n }\n } catch (e) {\n console.error(e);\n\n return getCookie(key);\n }\n }\n\n export function setItem(\n key: string,\n value: string,\n storageKey: storageKeyType = 'localStorage'\n ) {\n try {\n window[storageKey].setItem(key, value);\n } catch (e) {\n console.error(e);\n setCookie(key, value, 20);\n }\n }\n\n export function removeItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n window[storageKey].removeItem(key);\n } catch (e) {\n console.error(e);\n eraseCookie(key);\n }\n }\n\n export function storagePolling(key: string, callBack: Function) {\n let storageValue = getItem(key);\n\n const checkForKeyChange = () => {\n const latestValue = getItem(key);\n\n if (storageValue !== latestValue) {\n storageValue = latestValue;\n callBack(latestValue);\n }\n };\n\n return setInterval(checkForKeyChange, 2000);\n }\n}\n","import { root, ISingleServiceInfo } from '../UniversalUtils';\n\nconst extractServiceVersion = (serviceInfo: ISingleServiceInfo) =>\n serviceInfo && serviceInfo.version;\n\nconst searchForServiceInfo = (serviceName: string) =>\n root.serviceInfo[serviceName] || root.ServiceRegistry[serviceName];\n\nexport const getServiceVersion = (serviceName: string, fallback: string = '') =>\n extractServiceVersion(searchForServiceInfo(serviceName)) || fallback;\n","export default function _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}","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","import React from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport { isValidElementType } from 'react-is';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\n\n/* eslint-disable import/prefer-default-export */\nfunction invariant(condition, message) {\n if (condition) return;\n var error = new Error(\"loadable: \" + message);\n error.framesToPop = 1;\n error.name = 'Invariant Violation';\n throw error;\n}\nfunction warn(message) {\n // eslint-disable-next-line no-console\n console.warn(\"loadable: \" + message);\n}\n\nvar Context = /*#__PURE__*/\nReact.createContext();\n\nvar LOADABLE_REQUIRED_CHUNKS_KEY = '__LOADABLE_REQUIRED_CHUNKS__';\nfunction getRequiredChunkKey(namespace) {\n return \"\" + namespace + LOADABLE_REQUIRED_CHUNKS_KEY;\n}\n\nvar sharedInternals = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getRequiredChunkKey: getRequiredChunkKey,\n invariant: invariant,\n Context: Context\n});\n\nvar LOADABLE_SHARED = {\n initialChunks: {}\n};\n\nvar STATUS_PENDING = 'PENDING';\nvar STATUS_RESOLVED = 'RESOLVED';\nvar STATUS_REJECTED = 'REJECTED';\n\nfunction resolveConstructor(ctor) {\n if (typeof ctor === 'function') {\n return {\n requireAsync: ctor,\n resolve: function resolve() {\n return undefined;\n },\n chunkName: function chunkName() {\n return undefined;\n }\n };\n }\n\n return ctor;\n}\n\nvar withChunkExtractor = function withChunkExtractor(Component) {\n var LoadableWithChunkExtractor = function LoadableWithChunkExtractor(props) {\n return React.createElement(Context.Consumer, null, function (extractor) {\n return React.createElement(Component, Object.assign({\n __chunkExtractor: extractor\n }, props));\n });\n };\n\n if (Component.displayName) {\n LoadableWithChunkExtractor.displayName = Component.displayName + \"WithChunkExtractor\";\n }\n\n return LoadableWithChunkExtractor;\n};\n\nvar identity = function identity(v) {\n return v;\n};\n\nfunction createLoadable(_ref) {\n var _ref$defaultResolveCo = _ref.defaultResolveComponent,\n defaultResolveComponent = _ref$defaultResolveCo === void 0 ? identity : _ref$defaultResolveCo,\n _render = _ref.render,\n onLoad = _ref.onLoad;\n\n function loadable(loadableConstructor, options) {\n if (options === void 0) {\n options = {};\n }\n\n var ctor = resolveConstructor(loadableConstructor);\n var cache = {};\n /**\n * Cachekey represents the component to be loaded\n * if key changes - component has to be reloaded\n * @param props\n * @returns {null|Component}\n */\n\n function _getCacheKey(props) {\n if (options.cacheKey) {\n return options.cacheKey(props);\n }\n\n if (ctor.resolve) {\n return ctor.resolve(props);\n }\n\n return 'static';\n }\n /**\n * Resolves loaded `module` to a specific `Component\n * @param module\n * @param props\n * @param Loadable\n * @returns Component\n */\n\n\n function resolve(module, props, Loadable) {\n var Component = options.resolveComponent ? options.resolveComponent(module, props) : defaultResolveComponent(module);\n\n if (options.resolveComponent && !isValidElementType(Component)) {\n throw new Error(\"resolveComponent returned something that is not a React component!\");\n }\n\n hoistNonReactStatics(Loadable, Component, {\n preload: true\n });\n return Component;\n }\n\n var InnerLoadable =\n /*#__PURE__*/\n function (_React$Component) {\n _inheritsLoose(InnerLoadable, _React$Component);\n\n InnerLoadable.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n var cacheKey = _getCacheKey(props);\n\n return _extends({}, state, {\n cacheKey: cacheKey,\n // change of a key triggers loading state automatically\n loading: state.loading || state.cacheKey !== cacheKey\n });\n };\n\n function InnerLoadable(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.state = {\n result: null,\n error: null,\n loading: true,\n cacheKey: _getCacheKey(props)\n };\n invariant(!props.__chunkExtractor || ctor.requireSync, 'SSR requires `@loadable/babel-plugin`, please install it'); // Server-side\n\n if (props.__chunkExtractor) {\n // This module has been marked with no SSR\n if (options.ssr === false) {\n return _assertThisInitialized(_this);\n } // We run load function, we assume that it won't fail and that it\n // triggers a synchronous loading of the module\n\n\n ctor.requireAsync(props)[\"catch\"](function () {\n return null;\n }); // So we can require now the module synchronously\n\n _this.loadSync();\n\n props.__chunkExtractor.addChunk(ctor.chunkName(props));\n\n return _assertThisInitialized(_this);\n } // Client-side with `isReady` method present (SSR probably)\n // If module is already loaded, we use a synchronous loading\n // Only perform this synchronous loading if the component has not\n // been marked with no SSR, else we risk hydration mismatches\n\n\n if (options.ssr !== false && ( // is ready - was loaded in this session\n ctor.isReady && ctor.isReady(props) || // is ready - was loaded during SSR process\n ctor.chunkName && LOADABLE_SHARED.initialChunks[ctor.chunkName(props)])) {\n _this.loadSync();\n }\n\n return _this;\n }\n\n var _proto = InnerLoadable.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.mounted = true; // retrieve loading promise from a global cache\n\n var cachedPromise = this.getCache(); // if promise exists, but rejected - clear cache\n\n if (cachedPromise && cachedPromise.status === STATUS_REJECTED) {\n this.setCache();\n } // component might be resolved synchronously in the constructor\n\n\n if (this.state.loading) {\n this.loadAsync();\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // Component has to be reloaded on cacheKey change\n if (prevState.cacheKey !== this.state.cacheKey) {\n this.loadAsync();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n if (this.mounted) {\n this.setState(nextState, callback);\n }\n }\n /**\n * returns a cache key for the current props\n * @returns {Component|string}\n */\n ;\n\n _proto.getCacheKey = function getCacheKey() {\n return _getCacheKey(this.props);\n }\n /**\n * access the persistent cache\n */\n ;\n\n _proto.getCache = function getCache() {\n return cache[this.getCacheKey()];\n }\n /**\n * sets the cache value. If called without value sets it as undefined\n */\n ;\n\n _proto.setCache = function setCache(value) {\n if (value === void 0) {\n value = undefined;\n }\n\n cache[this.getCacheKey()] = value;\n };\n\n _proto.triggerOnLoad = function triggerOnLoad() {\n var _this2 = this;\n\n if (onLoad) {\n setTimeout(function () {\n onLoad(_this2.state.result, _this2.props);\n });\n }\n }\n /**\n * Synchronously loads component\n * target module is expected to already exists in the module cache\n * or be capable to resolve synchronously (webpack target=node)\n */\n ;\n\n _proto.loadSync = function loadSync() {\n // load sync is expecting component to be in the \"loading\" state already\n // sounds weird, but loading=true is the initial state of InnerLoadable\n if (!this.state.loading) return;\n\n try {\n var loadedModule = ctor.requireSync(this.props);\n var result = resolve(loadedModule, this.props, Loadable);\n this.state.result = result;\n this.state.loading = false;\n } catch (error) {\n console.error('loadable-components: failed to synchronously load component, which expected to be available', {\n fileName: ctor.resolve(this.props),\n chunkName: ctor.chunkName(this.props),\n error: error ? error.message : error\n });\n this.state.error = error;\n }\n }\n /**\n * Asynchronously loads a component.\n */\n ;\n\n _proto.loadAsync = function loadAsync() {\n var _this3 = this;\n\n var promise = this.resolveAsync();\n promise.then(function (loadedModule) {\n var result = resolve(loadedModule, _this3.props, {\n Loadable: Loadable\n });\n\n _this3.safeSetState({\n result: result,\n loading: false\n }, function () {\n return _this3.triggerOnLoad();\n });\n })[\"catch\"](function (error) {\n return _this3.safeSetState({\n error: error,\n loading: false\n });\n });\n return promise;\n }\n /**\n * Asynchronously resolves(not loads) a component.\n * Note - this function does not change the state\n */\n ;\n\n _proto.resolveAsync = function resolveAsync() {\n var _this4 = this;\n\n var _this$props = this.props,\n __chunkExtractor = _this$props.__chunkExtractor,\n forwardedRef = _this$props.forwardedRef,\n props = _objectWithoutPropertiesLoose(_this$props, [\"__chunkExtractor\", \"forwardedRef\"]);\n\n var promise = this.getCache();\n\n if (!promise) {\n promise = ctor.requireAsync(props);\n promise.status = STATUS_PENDING;\n this.setCache(promise);\n promise.then(function () {\n promise.status = STATUS_RESOLVED;\n }, function (error) {\n console.error('loadable-components: failed to asynchronously load component', {\n fileName: ctor.resolve(_this4.props),\n chunkName: ctor.chunkName(_this4.props),\n error: error ? error.message : error\n });\n promise.status = STATUS_REJECTED;\n });\n }\n\n return promise;\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n forwardedRef = _this$props2.forwardedRef,\n propFallback = _this$props2.fallback,\n __chunkExtractor = _this$props2.__chunkExtractor,\n props = _objectWithoutPropertiesLoose(_this$props2, [\"forwardedRef\", \"fallback\", \"__chunkExtractor\"]);\n\n var _this$state = this.state,\n error = _this$state.error,\n loading = _this$state.loading,\n result = _this$state.result;\n\n if (options.suspense) {\n var cachedPromise = this.getCache() || this.loadAsync();\n\n if (cachedPromise.status === STATUS_PENDING) {\n throw this.loadAsync();\n }\n }\n\n if (error) {\n throw error;\n }\n\n var fallback = propFallback || options.fallback || null;\n\n if (loading) {\n return fallback;\n }\n\n return _render({\n fallback: fallback,\n result: result,\n options: options,\n props: _extends({}, props, {\n ref: forwardedRef\n })\n });\n };\n\n return InnerLoadable;\n }(React.Component);\n\n var EnhancedInnerLoadable = withChunkExtractor(InnerLoadable);\n var Loadable = React.forwardRef(function (props, ref) {\n return React.createElement(EnhancedInnerLoadable, Object.assign({\n forwardedRef: ref\n }, props));\n });\n Loadable.displayName = 'Loadable'; // In future, preload could use ``\n\n Loadable.preload = function (props) {\n ctor.requireAsync(props);\n };\n\n Loadable.load = function (props) {\n return ctor.requireAsync(props);\n };\n\n return Loadable;\n }\n\n function lazy(ctor, options) {\n return loadable(ctor, _extends({}, options, {\n suspense: true\n }));\n }\n\n return {\n loadable: loadable,\n lazy: lazy\n };\n}\n\nfunction defaultResolveComponent(loadedModule) {\n // eslint-disable-next-line no-underscore-dangle\n return loadedModule.__esModule ? loadedModule[\"default\"] : loadedModule[\"default\"] || loadedModule;\n}\n\n/* eslint-disable no-use-before-define, react/no-multi-comp */\n\nvar _createLoadable =\n/*#__PURE__*/\ncreateLoadable({\n defaultResolveComponent: defaultResolveComponent,\n render: function render(_ref) {\n var Component = _ref.result,\n props = _ref.props;\n return React.createElement(Component, props);\n }\n}),\n loadable = _createLoadable.loadable,\n lazy = _createLoadable.lazy;\n\n/* eslint-disable no-use-before-define, react/no-multi-comp */\n\nvar _createLoadable$1 =\n/*#__PURE__*/\ncreateLoadable({\n onLoad: function onLoad(result, props) {\n if (result && props.forwardedRef) {\n if (typeof props.forwardedRef === 'function') {\n props.forwardedRef(result);\n } else {\n props.forwardedRef.current = result;\n }\n }\n },\n render: function render(_ref) {\n var result = _ref.result,\n props = _ref.props;\n\n if (props.children) {\n return props.children(result);\n }\n\n return null;\n }\n}),\n loadable$1 = _createLoadable$1.loadable,\n lazy$1 = _createLoadable$1.lazy;\n\n/* eslint-disable no-underscore-dangle, camelcase */\nvar BROWSER = typeof window !== 'undefined';\nfunction loadableReady(done, _temp) {\n if (done === void 0) {\n done = function done() {};\n }\n\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$namespace = _ref.namespace,\n namespace = _ref$namespace === void 0 ? '' : _ref$namespace,\n _ref$chunkLoadingGlob = _ref.chunkLoadingGlobal,\n chunkLoadingGlobal = _ref$chunkLoadingGlob === void 0 ? '__LOADABLE_LOADED_CHUNKS__' : _ref$chunkLoadingGlob;\n\n if (!BROWSER) {\n warn('`loadableReady()` must be called in browser only');\n done();\n return Promise.resolve();\n }\n\n var requiredChunks = null;\n\n if (BROWSER) {\n var id = getRequiredChunkKey(namespace);\n var dataElement = document.getElementById(id);\n\n if (dataElement) {\n requiredChunks = JSON.parse(dataElement.textContent);\n var extElement = document.getElementById(id + \"_ext\");\n\n if (extElement) {\n var _JSON$parse = JSON.parse(extElement.textContent),\n namedChunks = _JSON$parse.namedChunks;\n\n namedChunks.forEach(function (chunkName) {\n LOADABLE_SHARED.initialChunks[chunkName] = true;\n });\n } else {\n // version mismatch\n throw new Error('loadable-component: @loadable/server does not match @loadable/component');\n }\n }\n }\n\n if (!requiredChunks) {\n warn('`loadableReady()` requires state, please use `getScriptTags` or `getScriptElements` server-side');\n done();\n return Promise.resolve();\n }\n\n var resolved = false;\n return new Promise(function (resolve) {\n window[chunkLoadingGlobal] = window[chunkLoadingGlobal] || [];\n var loadedChunks = window[chunkLoadingGlobal];\n var originalPush = loadedChunks.push.bind(loadedChunks);\n\n function checkReadyState() {\n if (requiredChunks.every(function (chunk) {\n return loadedChunks.some(function (_ref2) {\n var chunks = _ref2[0];\n return chunks.indexOf(chunk) > -1;\n });\n })) {\n if (!resolved) {\n resolved = true;\n resolve();\n }\n }\n }\n\n loadedChunks.push = function () {\n originalPush.apply(void 0, arguments);\n checkReadyState();\n };\n\n checkReadyState();\n }).then(done);\n}\n\n/* eslint-disable no-underscore-dangle */\nvar loadable$2 = loadable;\nloadable$2.lib = loadable$1;\nvar lazy$2 = lazy;\nlazy$2.lib = lazy$1;\nvar __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = sharedInternals;\n\nexport default loadable$2;\nexport { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, lazy$2 as lazy, loadableReady };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ServiceBus } from '@estee/elc-service-bus';\nimport {\n IServiceRegistry,\n IComponentViewController,\n AllServicesTypes\n} from './Service/ServiceUtils';\n\nexport const MOBILE_VERSION_SELECTOR = 'js-mobile-version';\nexport const DESKTOP_VERSION_SELECTOR = 'js-desktop-version';\n\nexport interface ISingleServiceInfo {\n [key: string]: string;\n}\n\nexport interface IServiceInfo {\n [name: string]: ISingleServiceInfo;\n}\n\nexport type ArrayMinOne = {\n 0: T;\n} & T[];\n\ninterface IObjectOfStrings {\n [key: string]: string;\n}\n\ninterface IServiceBusTopics {\n commands: IObjectOfStrings;\n events: IObjectOfStrings;\n queries: IObjectOfStrings;\n}\n\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n}\n\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\n\nexport interface IRequestOptions {\n debounceInterval?: number;\n}\n\nexport type HeaderType = 'Business-Unit' | 'Authorization' | 'AuthorizationToken' | 'ClientId';\nexport type HeaderObject = { [key in HeaderType]?: string };\nexport type IHeaderSetter = () => Promise;\nexport type IRequestTransformerConfig = { url: string } & RequestInit;\nexport type IRequestTransformer = (config: IRequestTransformerConfig) => Promise;\n\nexport interface IHttpTransport {\n getStaticGlobalHeaders(): HeaderObject;\n setBaseUrl(baseUrl: string): void;\n addGlobalHeaders(headers: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n addGlobalHeaderSetter(setter: IHeaderSetter): void;\n removeGlobalHeaderSetter(setter: IHeaderSetter): void;\n addRequestTransformer(transformer: IRequestTransformer): void;\n removeRequestTransformer(transformer: IRequestTransformer): void;\n delete(payload: string | IPayload): Promise;\n post(payload: IPayload): Promise;\n patch(payload: IPayload): Promise;\n put(payload: IPayload): Promise;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise;\n readonly isAuthFailureHandlingEnabled: boolean;\n setAuthFailureHandlingEnabled(enabled: boolean): void;\n}\n\nexport interface IUtagData {\n [key: string]: string | string[] | undefined | boolean | number | null | number[];\n}\nexport interface IUtagCfgOvrd {\n noview: boolean;\n dom_complete?: boolean;\n lowerqp?: boolean;\n noload?: boolean | number;\n nocookie?: boolean;\n readywait?: boolean | number;\n waittimer?: number;\n}\nexport interface IUtag {\n link(data: IUtagData, cb?: Function): void;\n view(data: IUtagData, cb?: Function): void;\n}\n\nexport interface IFrontendLogger {\n isEnabled?: boolean;\n loggedServices?: {\n [key: string]: {\n isEnabled?: boolean;\n };\n };\n}\n\ninterface ILoggerApiSDK {\n sendLog: Function;\n}\ninterface IDrupalSite {\n translations?: any;\n trackingDataLayer?: any;\n client?: {\n subdomain?: string;\n isMobile?: number;\n };\n frontendLogger?: IFrontendLogger;\n}\nexport type AnyObject = { [key: string]: any };\ntype ITranslationsCollection = { [key: string]: string | IObjectOfStrings };\ntype ViewDataPreloader = {\n addConfigs(configs: AnyObject): void;\n addTranslations(translations: ITranslationsCollection): void;\n getPreloadedConfigs(arg: string[]): AnyObject | null;\n getPreloadedTranslations(arg: string[]): ITranslationsCollection | null;\n preload(): Promise;\n registerTranslationFieldsToPreload(fields?: string[]): void;\n registerConfigFieldsToPreload(fields?: string[]): void;\n};\ninterface IComponentRenderer {\n init(): Promise;\n getDataPreloader(): ViewDataPreloader | null;\n setDataPreloader(arg: ViewDataPreloader): void;\n}\n\ntype IObjectLike = { [key: string]: any } | null;\nexport interface IViewManager {\n loadComponent(): Promise;\n module: React.ComponentType | null;\n controllerFromView: IComponentViewController | null;\n}\nexport interface IViewsManager {\n lazyServicesStarted: boolean;\n getViewManager(viewName: string): IViewManager;\n startService(service: AllServicesTypes): Promise;\n startLazyServices(): Promise;\n}\ndeclare global {\n // Augment Node.js `global`\n namespace NodeJS {\n interface Global {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n site?: IDrupalSite;\n location: Location;\n navigator: Navigator;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n serviceInfo: IServiceInfo;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(\n message: string,\n url: string,\n line: number,\n column: number,\n error: Error\n ): boolean;\n env: string;\n buid: string;\n loggerApiSDK: ILoggerApiSDK;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n }\n }\n\n // Augment Browser `window`\n interface Window {\n ServiceBusTopics: IServiceBusTopics;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n replaceSrc(originalSrc: string): string;\n utag_data: any;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n site?: IDrupalSite;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(message: string, url: string, line: number, column: number, error: Error): boolean;\n env: string;\n buid: string;\n serviceInfo: IServiceInfo;\n loggerApiSDK: ILoggerApiSDK;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n }\n\n // Augment Web Worker `self`\n interface WorkerGlobalScope {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n }\n}\n\nexport const isWebRendered = typeof self === 'object' && self.self === self;\n\nexport const root: NodeJS.Global | Window =\n (isWebRendered && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n window;\n\nexport const setupServiceInfo = (serviceInfo: ISingleServiceInfo) => {\n const { name, ...rest } = serviceInfo;\n\n root.serviceInfo = root.serviceInfo || {};\n root.serviceInfo[name] = rest;\n};\n\nexport enum ISandboxEnvironment {\n LIVE = 'live',\n FEATURE = 'feature',\n DEV = 'dev',\n STAGE = 'stage',\n CMS = 'cms',\n PERSONAL = 'personal',\n PRODUCTION = 'production'\n}\n\nexport const getSandboxEnvironment: () => string = () => {\n let urlParts = root.location.hostname.split('.');\n const { LIVE, FEATURE, DEV, STAGE, CMS, PERSONAL } = ISandboxEnvironment;\n\n urlParts = urlParts.filter(part => !['www', 'm'].includes(part));\n const isLive = !(urlParts[0] === 'c') && !(urlParts[0] === 'e');\n\n return isLive\n ? LIVE\n : urlParts.includes(FEATURE)\n ? FEATURE\n : urlParts.includes(DEV)\n ? DEV\n : urlParts.includes(STAGE)\n ? STAGE\n : urlParts.includes(CMS)\n ? CMS\n : PERSONAL;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { LoadableComponent } from '@loadable/component';\n\nexport const SERVICE_VIEW_CLASSNAME = 'elc-service-view-renderer';\nexport const SERVICE_VIEW_RENDERED_ATTRIBUTE = 'data-rendered-view';\n\nexport interface ICachedComponentsRegistry {\n [key: string]: React.ComponentType;\n}\n\nexport type RegisteredComponent = () => Promise<{\n ['default']: React.ComponentType;\n}>;\n\ntype AnyObject = { [key: string]: any };\n\nexport interface IAppConfig extends AnyObject {\n env?: string;\n businessUnitId?: string;\n}\n\nexport type ServiceInitializer = (config: IAppConfig) => Promise | void;\n\nexport interface IViewControllerData {\n [key: string]: any;\n}\n\nexport type ViewControllerLoadedMethod = (...args: any[]) => Promise;\n\nexport interface IComponentViewController {\n id?: string;\n loaded?: ViewControllerLoadedMethod;\n data?: IViewControllerData;\n dataState?: IViewControllerData;\n configMergeStrategy?: Function;\n initialize?(...args: any[]): void;\n handleState?(...args: any[]): void;\n setSSRState(data: IViewControllerData): void;\n setId(id: string): void;\n isLoading: boolean;\n}\n\nexport interface IComponent {\n componentName: string;\n component: LoadableComponent;\n viewController?(): IComponentViewController;\n}\n\nexport interface IComponentRegistry {\n [key: string]: IComponent;\n}\n\ninterface IBaseServiceRegistryComp {\n isStarted: boolean;\n name: string;\n isLazy?: boolean;\n start(appConfig: IAppConfig): Promise;\n startPromise?: Promise;\n version: string;\n views: string[];\n}\n\nexport type IManifestService = {\n events: string[];\n queries: string[];\n};\n\ntype BaseServiceRegistryComponent = {\n cachedComponentsRegistry: ICachedComponentsRegistry;\n componentsRegistry: IComponentRegistry;\n getView(componentName: string): IComponent | null;\n getViewFromCache(componentName: string): React.ComponentType | null;\n registerView(\n componentName: string,\n component: RegisteredComponent,\n viewController?: () => IComponentViewController\n ): void;\n serviceInitializer: ServiceInitializer;\n serviceBusController?: any;\n setViewInCache(componentName: string, component: React.ComponentType): void;\n};\n// Exported object by the createServiceManifest method\nexport type IManifestServiceRegistryComp = IBaseServiceRegistryComp & IManifestService;\n// Service exported by the register method after applying the manifest\nexport type ILazyServiceRegistryComponent = BaseServiceRegistryComponent &\n IManifestServiceRegistryComp;\n// Service exported by the register method if manifest is not applied (non lazy service)\nexport type IServiceRegistryComponent = BaseServiceRegistryComponent & IBaseServiceRegistryComp;\n\n// Remove after SDFEFND-1853\n// Exported from older versions of the register method (elc-service < v7)\nexport interface IOlderServiceRegistryComponent\n extends Omit<\n IServiceRegistryComponent,\n 'getView' | 'start' | 'views' | 'isLazy' | 'startPromise'\n > {\n getView(componentName: string): IComponent | undefined;\n start(appConfig: IAppConfig): Promise;\n // These keys doesn't exist but this will avoid TS errors\n views?: string[];\n isLazy?: boolean;\n}\n\nexport type AllUpdatedServicesTypes =\n | ILazyServiceRegistryComponent\n | IManifestServiceRegistryComp\n | IServiceRegistryComponent;\n\nexport type AllServicesTypes = AllUpdatedServicesTypes | IOlderServiceRegistryComponent;\n\nexport interface IServiceRegistry {\n [key: string]: AllServicesTypes;\n}\n","export type storageKeyType = 'localStorage' | 'sessionStorage';\nexport namespace BrowserStorage {\n export function eraseCookie(name: string) {\n document.cookie = `${name}=; Max-Age=-99999999;`;\n }\n\n export function setCookie(name: string, value: string, daysOrDate: number | Date) {\n let expires = '';\n if (daysOrDate) {\n const expirationDate =\n typeof daysOrDate === 'number'\n ? new Date(Date.now() + daysOrDate * 24 * 60 * 60 * 1000)\n : daysOrDate;\n expires = `; expires=${expirationDate.toUTCString()}`;\n }\n document.cookie = `${name}=${value || ''}${expires};path=/`;\n }\n\n export function getCookie(name: string) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n\n return null;\n }\n\n export function getItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n if (window[storageKey].getItem(key) !== null) {\n return window[storageKey].getItem(key);\n }\n } catch (e) {\n console.error(e);\n\n return getCookie(key);\n }\n }\n\n export function setItem(\n key: string,\n value: string,\n storageKey: storageKeyType = 'localStorage'\n ) {\n try {\n window[storageKey].setItem(key, value);\n } catch (e) {\n console.error(e);\n setCookie(key, value, 20);\n }\n }\n\n export function removeItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n window[storageKey].removeItem(key);\n } catch (e) {\n console.error(e);\n eraseCookie(key);\n }\n }\n\n export function storagePolling(key: string, callBack: Function) {\n let storageValue = getItem(key);\n\n const checkForKeyChange = () => {\n const latestValue = getItem(key);\n\n if (storageValue !== latestValue) {\n storageValue = latestValue;\n callBack(latestValue);\n }\n };\n\n return setInterval(checkForKeyChange, 2000);\n }\n}\n","import { root, ISingleServiceInfo } from '../UniversalUtils';\n\nconst extractServiceVersion = (serviceInfo: ISingleServiceInfo) =>\n serviceInfo && serviceInfo.version;\n\nconst searchForServiceInfo = (serviceName: string) =>\n root.serviceInfo[serviceName] || root.ServiceRegistry[serviceName];\n\nexport const getServiceVersion = (serviceName: string, fallback: string = '') =>\n extractServiceVersion(searchForServiceInfo(serviceName)) || fallback;\n","import { root } from '../UniversalUtils';\n\nexport const addRequestIdleCallbackPolyfill = () => {\n root.requestIdleCallback =\n root.requestIdleCallback ||\n function (cb: Function) {\n // eslint-disable-next-line no-var\n var start = Date.now();\n\n return setTimeout(function () {\n cb({\n didTimeout: false,\n timeRemaining: function () {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n };\n\n root.cancelIdleCallback =\n root.cancelIdleCallback ||\n function (id: number) {\n clearTimeout(id);\n };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ServiceBus } from '@estee/elc-service-bus';\nimport {\n IServiceRegistry,\n IComponentViewController,\n AllServicesTypes\n} from './Service/ServiceUtils';\n\nexport const MOBILE_VERSION_SELECTOR = 'js-mobile-version';\nexport const DESKTOP_VERSION_SELECTOR = 'js-desktop-version';\n\nexport interface ISingleServiceInfo {\n [key: string]: string;\n}\n\nexport interface IServiceInfo {\n [name: string]: ISingleServiceInfo;\n}\n\nexport type ArrayMinOne = {\n 0: T;\n} & T[];\n\ninterface IObjectOfStrings {\n [key: string]: string;\n}\n\ninterface IServiceBusTopics {\n commands: IObjectOfStrings;\n events: IObjectOfStrings;\n queries: IObjectOfStrings;\n}\n\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n}\n\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\n\nexport interface IRequestOptions {\n debounceInterval?: number;\n}\n\nexport type HeaderType = 'Business-Unit' | 'Authorization' | 'AuthorizationToken' | 'ClientId';\nexport type HeaderObject = { [key in HeaderType]?: string };\nexport type IHeaderSetter = () => Promise;\nexport type IRequestTransformerConfig = { url: string } & RequestInit;\nexport type IRequestTransformer = (config: IRequestTransformerConfig) => Promise;\n\nexport interface IHttpTransport {\n getStaticGlobalHeaders(): HeaderObject;\n setBaseUrl(baseUrl: string): void;\n addGlobalHeaders(headers: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n addGlobalHeaderSetter(setter: IHeaderSetter): void;\n removeGlobalHeaderSetter(setter: IHeaderSetter): void;\n addRequestTransformer(transformer: IRequestTransformer): void;\n removeRequestTransformer(transformer: IRequestTransformer): void;\n delete(payload: string | IPayload): Promise;\n post(payload: IPayload): Promise;\n patch(payload: IPayload): Promise;\n put(payload: IPayload): Promise;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise;\n readonly isAuthFailureHandlingEnabled: boolean;\n setAuthFailureHandlingEnabled(enabled: boolean): void;\n}\n\nexport interface IUtagData {\n [key: string]: string | string[] | undefined | boolean | number | null | number[];\n}\nexport interface IUtagCfgOvrd {\n noview: boolean;\n dom_complete?: boolean;\n lowerqp?: boolean;\n noload?: boolean | number;\n nocookie?: boolean;\n readywait?: boolean | number;\n waittimer?: number;\n}\nexport interface IUtag {\n link(data: IUtagData, cb?: Function): void;\n view(data: IUtagData, cb?: Function): void;\n}\n\nexport interface IFrontendLogger {\n isEnabled?: boolean;\n loggedServices?: {\n [key: string]: {\n isEnabled?: boolean;\n };\n };\n}\n\ninterface ILoggerApiSDK {\n sendLog: Function;\n}\ninterface IDrupalSite {\n translations?: any;\n trackingDataLayer?: any;\n client?: {\n subdomain?: string;\n isMobile?: number;\n };\n frontendLogger?: IFrontendLogger;\n}\nexport type AnyObject = { [key: string]: any };\ntype ITranslationsCollection = { [key: string]: string | IObjectOfStrings };\ntype ViewDataPreloader = {\n addConfigs(configs: AnyObject): void;\n addTranslations(translations: ITranslationsCollection): void;\n getPreloadedConfigs(arg: string[]): AnyObject | null;\n getPreloadedTranslations(arg: string[]): ITranslationsCollection | null;\n preload(): Promise;\n registerTranslationFieldsToPreload(fields?: string[]): void;\n registerConfigFieldsToPreload(fields?: string[]): void;\n};\ninterface IComponentRenderer {\n init(): Promise;\n getDataPreloader(): ViewDataPreloader | null;\n setDataPreloader(arg: ViewDataPreloader): void;\n}\n\ntype IObjectLike = { [key: string]: any } | null;\nexport interface IViewManager {\n loadComponent(): Promise;\n module: React.ComponentType | null;\n controllerFromView: IComponentViewController | null;\n}\nexport interface IViewsManager {\n lazyServicesStarted: boolean;\n getViewManager(viewName: string): IViewManager;\n startService(service: AllServicesTypes): Promise;\n startLazyServices(): Promise;\n}\ndeclare global {\n // Augment Node.js `global`\n namespace NodeJS {\n interface Global {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n site?: IDrupalSite;\n location: Location;\n navigator: Navigator;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n serviceInfo: IServiceInfo;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(\n message: string,\n url: string,\n line: number,\n column: number,\n error: Error\n ): boolean;\n env: string;\n buid: string;\n loggerApiSDK: ILoggerApiSDK;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n }\n }\n\n // Augment Browser `window`\n interface Window {\n ServiceBusTopics: IServiceBusTopics;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n replaceSrc(originalSrc: string): string;\n utag_data: any;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n site?: IDrupalSite;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(message: string, url: string, line: number, column: number, error: Error): boolean;\n env: string;\n buid: string;\n serviceInfo: IServiceInfo;\n loggerApiSDK: ILoggerApiSDK;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n }\n\n // Augment Web Worker `self`\n interface WorkerGlobalScope {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n }\n}\n\nexport const isWebRendered = typeof self === 'object' && self.self === self;\n\nexport const root: NodeJS.Global | Window =\n (isWebRendered && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n window;\n\nexport const setupServiceInfo = (serviceInfo: ISingleServiceInfo) => {\n const { name, ...rest } = serviceInfo;\n\n root.serviceInfo = root.serviceInfo || {};\n root.serviceInfo[name] = rest;\n};\n\nexport enum ISandboxEnvironment {\n LIVE = 'live',\n FEATURE = 'feature',\n DEV = 'dev',\n STAGE = 'stage',\n CMS = 'cms',\n PERSONAL = 'personal',\n PRODUCTION = 'production'\n}\n\nexport const getSandboxEnvironment: () => string = () => {\n let urlParts = root.location.hostname.split('.');\n const { LIVE, FEATURE, DEV, STAGE, CMS, PERSONAL } = ISandboxEnvironment;\n\n urlParts = urlParts.filter(part => !['www', 'm'].includes(part));\n const isLive = !(urlParts[0] === 'c') && !(urlParts[0] === 'e');\n\n return isLive\n ? LIVE\n : urlParts.includes(FEATURE)\n ? FEATURE\n : urlParts.includes(DEV)\n ? DEV\n : urlParts.includes(STAGE)\n ? STAGE\n : urlParts.includes(CMS)\n ? CMS\n : PERSONAL;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { LoadableComponent } from '@loadable/component';\n\nexport const SERVICE_VIEW_CLASSNAME = 'elc-service-view-renderer';\nexport const SERVICE_VIEW_RENDERED_ATTRIBUTE = 'data-rendered-view';\n\nexport interface ICachedComponentsRegistry {\n [key: string]: React.ComponentType;\n}\n\nexport type RegisteredComponent = () => Promise<{\n ['default']: React.ComponentType;\n}>;\n\ntype AnyObject = { [key: string]: any };\n\nexport interface IAppConfig extends AnyObject {\n env?: string;\n businessUnitId?: string;\n}\n\nexport type ServiceInitializer = (config: IAppConfig) => Promise | void;\n\nexport interface IViewControllerData {\n [key: string]: any;\n}\n\nexport type ViewControllerLoadedMethod = (...args: any[]) => Promise;\n\nexport interface IComponentViewController {\n id?: string;\n loaded?: ViewControllerLoadedMethod;\n data?: IViewControllerData;\n dataState?: IViewControllerData;\n configMergeStrategy?: Function;\n initialize?(...args: any[]): void;\n handleState?(...args: any[]): void;\n setSSRState(data: IViewControllerData): void;\n setId(id: string): void;\n isLoading: boolean;\n}\n\nexport interface IComponent {\n componentName: string;\n component: LoadableComponent;\n viewController?(): IComponentViewController;\n}\n\nexport interface IComponentRegistry {\n [key: string]: IComponent;\n}\n\ninterface IBaseServiceRegistryComp {\n isStarted: boolean;\n name: string;\n isLazy?: boolean;\n start(appConfig: IAppConfig): Promise;\n startPromise?: Promise;\n version: string;\n views: string[];\n}\n\nexport type IManifestService = {\n events: string[];\n queries: string[];\n};\n\ntype BaseServiceRegistryComponent = {\n cachedComponentsRegistry: ICachedComponentsRegistry;\n componentsRegistry: IComponentRegistry;\n getView(componentName: string): IComponent | null;\n getViewFromCache(componentName: string): React.ComponentType | null;\n registerView(\n componentName: string,\n component: RegisteredComponent,\n viewController?: () => IComponentViewController\n ): void;\n serviceInitializer: ServiceInitializer;\n serviceBusController?: any;\n setViewInCache(componentName: string, component: React.ComponentType): void;\n};\n// Exported object by the createServiceManifest method\nexport type IManifestServiceRegistryComp = IBaseServiceRegistryComp & IManifestService;\n// Service exported by the register method after applying the manifest\nexport type ILazyServiceRegistryComponent = BaseServiceRegistryComponent &\n IManifestServiceRegistryComp;\n// Service exported by the register method if manifest is not applied (non lazy service)\nexport type IServiceRegistryComponent = BaseServiceRegistryComponent & IBaseServiceRegistryComp;\n\n// Remove after SDFEFND-1853\n// Exported from older versions of the register method (elc-service < v7)\nexport interface IOlderServiceRegistryComponent\n extends Omit<\n IServiceRegistryComponent,\n 'getView' | 'start' | 'views' | 'isLazy' | 'startPromise'\n > {\n getView(componentName: string): IComponent | undefined;\n start(appConfig: IAppConfig): Promise;\n // These keys doesn't exist but this will avoid TS errors\n views?: string[];\n isLazy?: boolean;\n}\n\nexport type AllUpdatedServicesTypes =\n | ILazyServiceRegistryComponent\n | IManifestServiceRegistryComp\n | IServiceRegistryComponent;\n\nexport type AllServicesTypes = AllUpdatedServicesTypes | IOlderServiceRegistryComponent;\n\nexport interface IServiceRegistry {\n [key: string]: AllServicesTypes;\n}\n","export type storageKeyType = 'localStorage' | 'sessionStorage';\nexport namespace BrowserStorage {\n export function eraseCookie(name: string) {\n document.cookie = `${name}=; Max-Age=-99999999;`;\n }\n\n export function setCookie(name: string, value: string, daysOrDate: number | Date) {\n let expires = '';\n if (daysOrDate) {\n const expirationDate =\n typeof daysOrDate === 'number'\n ? new Date(Date.now() + daysOrDate * 24 * 60 * 60 * 1000)\n : daysOrDate;\n expires = `; expires=${expirationDate.toUTCString()}`;\n }\n document.cookie = `${name}=${value || ''}${expires};path=/`;\n }\n\n export function getCookie(name: string) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n\n return null;\n }\n\n export function getItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n if (window[storageKey].getItem(key) !== null) {\n return window[storageKey].getItem(key);\n }\n } catch (e) {\n console.error(e);\n\n return getCookie(key);\n }\n }\n\n export function setItem(\n key: string,\n value: string,\n storageKey: storageKeyType = 'localStorage'\n ) {\n try {\n window[storageKey].setItem(key, value);\n } catch (e) {\n console.error(e);\n setCookie(key, value, 20);\n }\n }\n\n export function removeItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n window[storageKey].removeItem(key);\n } catch (e) {\n console.error(e);\n eraseCookie(key);\n }\n }\n\n export function storagePolling(key: string, callBack: Function) {\n let storageValue = getItem(key);\n\n const checkForKeyChange = () => {\n const latestValue = getItem(key);\n\n if (storageValue !== latestValue) {\n storageValue = latestValue;\n callBack(latestValue);\n }\n };\n\n return setInterval(checkForKeyChange, 2000);\n }\n}\n","import { root, ISingleServiceInfo } from '../UniversalUtils';\n\nconst extractServiceVersion = (serviceInfo: ISingleServiceInfo) =>\n serviceInfo && serviceInfo.version;\n\nconst searchForServiceInfo = (serviceName: string) =>\n root.serviceInfo[serviceName] || root.ServiceRegistry[serviceName];\n\nexport const getServiceVersion = (serviceName: string, fallback: string = '') =>\n extractServiceVersion(searchForServiceInfo(serviceName)) || fallback;\n","import { root } from '../UniversalUtils';\n\nexport const addRequestIdleCallbackPolyfill = () => {\n root.requestIdleCallback =\n root.requestIdleCallback ||\n function (cb: Function) {\n // eslint-disable-next-line no-var\n var start = Date.now();\n\n return setTimeout(function () {\n cb({\n didTimeout: false,\n timeRemaining: function () {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n };\n\n root.cancelIdleCallback =\n root.cancelIdleCallback ||\n function (id: number) {\n clearTimeout(id);\n };\n};\n","const isString: Function = (value: unknown) => typeof value === 'string';\n\nconst VALIDATORS: { [key: string]: Function[] } = {\n buid: [Boolean],\n context: [Boolean],\n environment: [Boolean, isString],\n level: [Boolean, isString],\n message: [Boolean, isString],\n serviceName: [Boolean, isString],\n serviceVersion: [Boolean, isString],\n triggerType: [Boolean, isString],\n userAgent: [Boolean, isString]\n};\n\nexport const validate = (requestBody: { [key: string]: unknown }) => {\n const result = Object.keys(VALIDATORS).reduce((acc: boolean[], key) => {\n VALIDATORS[key].forEach((validator: (value: unknown) => boolean) => {\n const requestValue = requestBody[key];\n acc.push(validator(requestValue));\n });\n\n return acc;\n }, []);\n\n return result.every(Boolean);\n};\n","import { root, IFrontendLogger } from '@estee/elc-universal-utils';\nimport { validate } from './ELCLoggerValidations';\nimport { ILogData, IFullData } from './ELCLogger';\n\nexport class LoggerApiSDK {\n private loggingServiceUrl: string = '/stardust-fe-logging-v0/logMessage';\n private queue: ILogData[] = [];\n private isRequestIdleCallbackScheduled: boolean;\n private lastTimeExecuted: number = Date.now();\n private frontendLogger: IFrontendLogger = root.site ? root.site.frontendLogger || {} : {};\n\n private generateRequestBody(fullData: IFullData) {\n const { config, level, logdata } = fullData;\n\n const { payload = {}, message, triggerType } = logdata;\n const {\n serviceName: payloadServiceName,\n serviceVersion: payloadServiceVersion,\n context,\n error\n } = payload;\n\n const {\n serviceName: configServiceName,\n serviceVersion: configServiceVersion,\n buid: configBuid,\n environment: configEnvironment\n } = config;\n const stringifiedError = error && JSON.stringify(error, Object.getOwnPropertyNames(error));\n\n return {\n context: {\n ...context,\n date: new Date().toUTCString(),\n error: stringifiedError\n },\n environment: configEnvironment || root.env,\n level: level,\n message,\n serviceName: payloadServiceName || configServiceName,\n serviceVersion: payloadServiceVersion || configServiceVersion,\n siteUrl: root.location.href,\n buid: configBuid || root.buid,\n triggerType,\n userAgent: root.navigator.userAgent\n };\n }\n\n public sendLog(fullData: IFullData) {\n const requestBody = this.generateRequestBody(fullData);\n const loggedServices = this.frontendLogger.loggedServices || {};\n const serviceConfig = loggedServices[requestBody.serviceName] || {};\n const isServiceEnabled = serviceConfig.isEnabled;\n\n if (this.frontendLogger.isEnabled && isServiceEnabled) {\n if (!validate(requestBody)) {\n throw new Error(`Request body for error logging did not validate`);\n }\n\n this.addLogToQueue(requestBody);\n }\n }\n\n public addLogToQueue = (log: ILogData) => {\n this.queue.push(log);\n this.schedulePendingEvents();\n };\n\n private schedulePendingEvents = () => {\n if (this.isRequestIdleCallbackScheduled) {\n return;\n }\n\n this.isRequestIdleCallbackScheduled = true;\n root.requestIdleCallback(this.processPendingLogs);\n };\n\n private processPendingLogs = () => {\n this.isRequestIdleCallbackScheduled = false;\n\n if (this.queue.length > 0 && Date.now() - this.lastTimeExecuted > 2000) {\n root.HttpTransport.post({\n url: this.loggingServiceUrl,\n body: this.queue\n }).catch(() => console.error('Errors failed to be sent to sumoLogic', this.queue));\n\n this.queue = [];\n this.lastTimeExecuted = Date.now();\n }\n\n if (this.queue.length > 0) {\n this.schedulePendingEvents();\n }\n };\n}\n","import { debug, Debugger } from 'debug';\nimport { LoggerApiSDK } from './LoggerApiSDK';\nimport { getSandboxEnvironment, root, ISandboxEnvironment } from '@estee/elc-universal-utils';\n\nexport interface IFullData {\n logdata: ILogData;\n level: string;\n config: IELCLogger;\n}\n\nexport interface IPayload {\n error?: Error;\n context?: object;\n serviceName?: string;\n serviceVersion?: string;\n}\n\nexport interface ILogData {\n triggerType: TriggerType;\n message: string;\n payload?: IPayload;\n}\n\nexport enum TriggerType {\n runtimeError = 'runtimeError',\n api = 'api',\n graphqlApi = 'graphqlApi',\n render = 'render',\n serviceBus = 'serviceBus',\n config = 'config',\n translation = 'translation',\n other = 'other'\n}\n\nexport interface IELCLogger {\n serviceName: string;\n serviceVersion?: string;\n environment?: string;\n buid?: string;\n}\n\nexport class ELCLogger {\n private config: IELCLogger;\n\n private errorDebugger?: Debugger;\n private infoDebugger?: Debugger;\n private warningDebugger?: Debugger;\n private eventDebugger?: Debugger;\n private queryDebugger?: Debugger;\n private commandDebugger?: Debugger;\n\n constructor(config: IELCLogger) {\n this.config = config;\n const logger = debug(this.config.serviceName);\n root.loggerApiSDK = root.loggerApiSDK || new LoggerApiSDK();\n\n this.errorDebugger = logger.extend('error');\n this.infoDebugger = logger.extend('info');\n this.warningDebugger = logger.extend('warning');\n this.eventDebugger = logger.extend('event');\n this.queryDebugger = logger.extend('query');\n this.commandDebugger = logger.extend('command');\n }\n\n public error = async (logdata: ILogData) => {\n if (this.errorDebugger) {\n this.errorDebugger(this.enhanceLogData(logdata));\n }\n\n const isProd =\n this.config.environment === ISandboxEnvironment.PRODUCTION ||\n root.env === ISandboxEnvironment.PRODUCTION;\n\n if ((isProd && getSandboxEnvironment() === ISandboxEnvironment.LIVE) || !isProd) {\n return this.sendLog(logdata, 'error');\n }\n };\n\n public info = (logdata: ILogData) => {\n if (this.infoDebugger) {\n this.infoDebugger(this.enhanceLogData(logdata));\n }\n };\n\n public warning = (logdata: ILogData) => {\n if (this.warningDebugger) {\n this.warningDebugger(this.enhanceLogData(logdata));\n }\n };\n\n public event = (logdata: ILogData) => {\n if (this.eventDebugger) {\n this.eventDebugger(this.enhanceLogData(logdata));\n }\n };\n\n public query = (logdata: ILogData) => {\n if (this.queryDebugger) {\n this.queryDebugger(this.enhanceLogData(logdata));\n }\n };\n\n public command = (logdata: ILogData) => {\n if (this.commandDebugger) {\n this.commandDebugger(this.enhanceLogData(logdata));\n }\n };\n\n private enhanceLogData = (logdata: ILogData) => ({\n ...logdata,\n triggerSource: this.config.serviceName,\n date: new Date().toUTCString()\n });\n // @ts-ignore\n private async sendLog(logdata: ILogData, level: string) {\n try {\n root.loggerApiSDK.sendLog({ logdata, level, config: this.config });\n } catch (e) {\n if (this.errorDebugger) {\n this.errorDebugger(\n this.enhanceLogData({\n message: 'Could not send log',\n triggerType: TriggerType.api,\n payload: {\n error: e,\n context: logdata\n }\n })\n );\n }\n }\n }\n}\n","import { root, AllServicesTypes, IComponentViewController } from '@estee/elc-universal-utils';\n\nexport function getServices() {\n return root.ServiceRegistry || {};\n}\n\nexport function hasServiceStarted(service: AllServicesTypes) {\n return service.isStarted;\n}\n// isLazy is true for exported services by createServiceManifest\nexport function isServiceLazy(service: AllServicesTypes) {\n return Boolean(service.isLazy);\n}\n// createServiceManifest exports an object with fewer keys\nexport function isServiceFromManifest(service: AllServicesTypes) {\n // @ts-ignore\n return Boolean(service.getView) && isServiceLazy(service);\n}\n// To be removed after SDFEFND-1853\nexport function isServiceUpdated(service: AllServicesTypes) {\n return Boolean(service.views); // key added in elc-service v7.x\n}\n\n/* SSR */\nexport interface IComponentDataState {\n [key: string]: object | number | string;\n}\nexport interface IComponentState extends IComponentDataState {\n children: string[];\n}\n\nexport function setStateInController(state: object, controller: IComponentViewController) {\n const viewState = Object.values(state)[0]; // { [VIEW_NAME]: { ...state } }\n if (viewState && controller.setSSRState) {\n controller.setSSRState(viewState);\n }\n}\n\nexport function setControllerId(config: string | null, controller: IComponentViewController) {\n if (config && controller.setId) {\n controller.setId(config);\n }\n}\n\nexport function parseState(state: string | null) {\n let parsedState: IComponentState | undefined;\n try {\n if (state) {\n parsedState = JSON.parse(state);\n }\n } finally {\n parsedState = parsedState ? parsedState : { children: [] };\n }\n\n return parsedState;\n}\n\nexport function initializeControllerForSSR(\n viewController: IComponentViewController | null,\n state: IComponentDataState,\n config: string | null\n) {\n if (viewController) {\n setStateInController(state, viewController);\n setControllerId(config, viewController);\n }\n}\n","import loadable from '@loadable/component';\nimport {\n root,\n IAppConfig,\n ICachedComponentsRegistry,\n IComponentRegistry,\n IComponentViewController,\n IServiceRegistryComponent,\n RegisteredComponent,\n AllServicesTypes,\n IManifestServiceRegistryComp\n} from '@estee/elc-universal-utils';\nimport { ELCLogger, TriggerType } from '@estee/elc-logging';\nimport { ServiceBusController } from './ServiceBusController';\nimport { getServices } from './utils';\n\nexport type ServiceInitializer = (config: IAppConfig) => ServiceBusController | void;\n\nroot.ServiceRegistry = root.ServiceRegistry || {};\n\nexport abstract class Service {\n protected logger: ELCLogger;\n\n public serviceBusController: ServiceBusController;\n public componentsRegistry: IComponentRegistry = {};\n public cachedComponentsRegistry: ICachedComponentsRegistry = {};\n public isLazy: boolean = false;\n public isStarted: boolean = false;\n public isStarting: boolean = false;\n public views: string[] = [];\n\n constructor(\n public name: string,\n public version: string,\n public serviceInitializer: ServiceInitializer\n ) {}\n\n public async start(appConfig: IAppConfig): Promise {\n this.isStarting = true;\n this.logger =\n this.logger ||\n new ELCLogger({\n serviceName: this.name,\n environment: appConfig.env || root.env,\n buid: appConfig.businessUnitId || root.buid,\n serviceVersion: this.version\n });\n\n try {\n if (!this.isStarted) {\n await this.serviceInitializer(appConfig);\n this.isStarted = true;\n }\n } catch (error) {\n this.logger.error({\n message: `Could not start service ${this.name}`,\n triggerType: TriggerType.render,\n payload: {\n error,\n context: {\n serviceRegistry: root.ServiceRegistry\n }\n }\n });\n }\n\n return root.ServiceRegistry[this.name];\n }\n\n public register = (overrideProperties?: Omit) => {\n root.ServiceRegistry = getServices();\n\n root.ServiceRegistry[this.name] = Object.assign(\n root.ServiceRegistry[this.name] || {},\n {\n start: this.start,\n name: this.name,\n version: this.version,\n views: this.views,\n getView: this.getView,\n registerView: this.registerView,\n setViewInCache: this.setViewInCache,\n getViewFromCache: this.getViewFromCache,\n serviceInitializer: this.serviceInitializer,\n componentsRegistry: this.componentsRegistry,\n cachedComponentsRegistry: this.cachedComponentsRegistry,\n isStarted: this.isStarted,\n isLazy: this.isLazy,\n isStarting: this.isStarting\n } as IServiceRegistryComponent,\n overrideProperties || {}\n );\n };\n\n public getView = (componentName: string) => {\n return this.componentsRegistry[componentName] || null;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setViewInCache = (componentName: string, component: React.ComponentType) => {\n this.cachedComponentsRegistry[componentName] = component;\n };\n\n public getViewFromCache = (componentName: string) => {\n return this.cachedComponentsRegistry[componentName] || null;\n };\n\n public registerView = (\n componentName: string,\n component: RegisteredComponent,\n viewController?: () => IComponentViewController\n ) => {\n this.views.push(componentName);\n\n this.componentsRegistry[componentName] = {\n componentName,\n component: loadable(component),\n viewController\n };\n };\n}\n","import { Service, ServiceInitializer } from '@estee/elc-service';\n\nconst { name, version } = __serviceInfo__;\n\nexport class AnalyticsService extends Service {\n constructor(serviceIntializer: ServiceInitializer) {\n super(name, version, serviceIntializer);\n }\n}\n","import { observable, action } from 'mobx';\nimport { root, IUtag, IUtagData } from '@estee/elc-universal-utils';\n\nexport class AnalyticsDriver {\n public client: IUtag;\n public utagData: IUtagData = root.utag_data;\n\n @observable public isLoaded: boolean = false;\n\n constructor() {}\n\n public trackEvent = (data: IUtagData, cb?: Function) => {\n this.client.link(data, cb);\n };\n\n public pageTrack = (data: IUtagData, cb?: Function) => {\n this.client.view({ ...this.utagData, ...data }, cb);\n };\n\n @action\n public enable() {\n if (root.utag) {\n this.client = root.utag;\n this.utagData = root.utag_data;\n this.isLoaded = true;\n }\n }\n\n @action\n public disable() {\n this.client = {};\n this.isLoaded = false;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport const isTagId = (tags: string[]) => {\n return !isNaN(Number(tags[0]));\n};\n\nconst getProductSkuMap = (product: any) => (skuData: any, sku: any) => {\n const { skus, ...productDetails } = product;\n const newSku = { ...productDetails, ...sku };\n\n return { ...skuData, [sku.skuId]: newSku };\n};\n\nexport const mapProductSkusById = (data: any, product: any) => {\n const skusData = product.skus.reduce(getProductSkuMap(product), {});\n\n return { ...data, ...skusData };\n};\n","import { EventRepository } from './repositories/EventRepository';\nimport { Event } from '../internal/domain/entities/Event';\nimport { query, serviceQueries } from '@estee/elc-service-bus';\nimport { $mobx, reaction } from 'mobx';\nimport { root } from '@estee/elc-universal-utils';\nimport { isTagId, mapProductSkusById } from '../utils/dataAggregator';\n\nimport {\n IProductImpressions,\n IProductViewed,\n IProduct,\n ICartProducts\n} from './interfaces/IAnalytics';\n\nexport class DataAggregator {\n private eventRepository: EventRepository;\n\n constructor(eventRepository: EventRepository) {\n this.eventRepository = eventRepository;\n reaction(() => this.eventRepository.incompleteEvents, this.saturateIncompleteEvents);\n }\n\n public saturateIncompleteEvents = (incompleteEvents: Event[]) => {\n incompleteEvents.forEach((event) => {\n if (!event.isExecuting) {\n event.markEventAsExecuting();\n this.checkForMissingInformation(event);\n }\n });\n };\n\n public checkForMissingInformation = async (event: Event) => {\n const collectionsResults = await Promise.all(\n Object.keys(event.data).map((collection) => {\n if (collection === 'cartProduct' && event.data.cartProduct) {\n return this.getCartProductInfo(event.data.cartProduct);\n } else if (collection === 'cartProducts' && event.data.cartProducts) {\n return this.getCartProductsInfo(event.data.cartProducts);\n } else if (collection === 'product' && event.data.product) {\n return this.getProductInfo(event.data.product);\n } else if (collection === 'productImpressions' && event.data.productImpressions) {\n return this.getProductImpresionsInfo(event.data.productImpressions);\n } else if (collection === 'productShort' && event.data.productShort) {\n return this.getShortProductInfo(event.data.productShort);\n }\n })\n );\n\n const collectionsInfo = collectionsResults.reduce(\n (collectionInfoPayload, currentCollection) => {\n return { ...collectionInfoPayload, ...currentCollection };\n },\n {}\n );\n\n this.eventRepository.markEventAsComplete(event.id, {\n ...collectionsInfo\n });\n };\n\n // TODO: determine an easier way to map product data to the data layer format - maybe see how this is done in search DataMappings\n // eslint-disable-next-line complexity\n public getProductInfo = async (productViewedPayload: IProductViewed) => {\n const skuId = productViewedPayload.skuId;\n const product = productViewedPayload.product;\n const productId = productViewedPayload.productId;\n\n let productInfo;\n let skuInfo;\n\n if (skuId) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { skus: { skuIds: [skuId] } }\n });\n const skuIdMap = data.reduce(mapProductSkusById, {});\n productInfo = skuIdMap[skuId];\n skuInfo = skuIdMap[skuId];\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let data: { skus: any[] }[] = [];\n if (productId) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { productIds: [productId] }\n }) || [];\n } else if (product) {\n data = [product];\n }\n\n if (data.length) {\n productInfo = data[0];\n skuInfo = data[0].skus[0];\n }\n }\n\n if (!productInfo) {\n return {};\n }\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const productInfoPayload: any = {\n product_base_id: [productInfo.productId],\n product_category: productInfo.defaultCategory ? [productInfo.defaultCategory.id] : [],\n product_category_id: productInfo.defaultCategory\n ? [productInfo.defaultCategory.id]\n : [],\n product_category_name: productInfo.defaultCategory\n ? [productInfo.defaultCategory.value]\n : [],\n product_id: [`PROD${productInfo.productId.toString()}`],\n product_name: [productInfo.displayName.toString()],\n product_price: skuInfo.prices && skuInfo.prices.length ? [skuInfo.prices[0].price] : [],\n product_product_code: [skuInfo.skuId],\n product_shade: skuInfo.shades && skuInfo.shades.length ? [skuInfo.shades[0].name] : [],\n product_short_desc: [productInfo.shortDescription.toString()],\n product_size: skuInfo.sizes && skuInfo.sizes.length ? [skuInfo.sizes[0].label] : [],\n product_sku: [`SKU${skuInfo.perlgem.SKU_BASE_ID.toString()}`],\n product_sku_large_image_url:\n skuInfo.media && skuInfo.media.large.length ? [skuInfo.media.large[0].src] : [],\n product_sku_small_image_url:\n skuInfo.media && skuInfo.media.small.length ? [skuInfo.media.small[0].src] : [],\n product_small_image_url:\n productInfo.media && productInfo.media.small.length\n ? [productInfo.media.small[0].src]\n : [],\n product_upc: [skuInfo.upc],\n product_url: [productInfo.productUrl]\n };\n\n return productInfoPayload;\n };\n\n // TODO: this needs to return product data specific to a customer cart interaction, ie add to bag\n public getCartProductInfo = async (cartProductPayload: IProduct) => {\n // TODO: I moved this from the above getProductInfo function\n /*if (event.name === events.ITEM_ADDED || event.name === events.REMOVE_ITEM) {\n productInfoPayload.event_label = `${productInfo.displayName.toString()} - PROD${productInfo.productId.toString()}`;\n }*/\n\n return {};\n };\n\n // TODO: determine an easier way to map product data to the data layer format - maybe see how this is done in search DataMappings\n // TODO: this should be if an event needs the entire cart\n public getCartProductsInfo = async (cartProductsPayload: ICartProducts) => {\n const skus = cartProductsPayload.skuIds;\n if (!root.ServiceRegistry['elc-service-cart']) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let productsInfo: any = {};\n let skuIds: string[];\n\n if (skus) {\n skuIds = skus;\n } else {\n skuIds = await query(serviceQueries.CART_SKUS_IDS);\n }\n\n const cartProducts = skuIds.length\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { skus: { skuIds } }\n })\n : [];\n const skuIdMap = cartProducts.reduce(mapProductSkusById, {});\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cartItems: any = Object.keys(skuIdMap)\n .filter((sku) => skuIds.indexOf(sku) !== -1)\n .reduce((acc, next) => ({ ...acc, [next]: skuIdMap[next] }), {});\n\n const isCartEmpty = Object.keys(cartItems).length === 0;\n\n if (!isCartEmpty) {\n productsInfo = {\n cart_product_category: [],\n cart_product_category_name: [],\n cart_product_id: [],\n cart_product_name: [],\n cart_product_price: [],\n cart_product_shade: [],\n cart_product_size: [],\n cart_product_sku: [],\n cart_product_url: [],\n cart_product_is_preorder: [],\n cart_product_quantity: [],\n cart_product_discount_amount: [],\n cart_product_bronto_image: ''\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cart = await query(serviceQueries.GET_CART, {});\n\n const cartItemsQuantity = Object.assign(\n {},\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...cart.cartItems.map((sku: any) => ({ [sku.skuId]: sku.quantity }))\n );\n const cartItemsDiscounts = Object.assign(\n {},\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...cart.cartItems.map((sku: any) => ({\n [sku.skuId]: sku.discountsPercent\n ? ((sku.appliedPriceWithoutTax * sku.discountsPercent) / 100).toFixed(2)\n : 0\n }))\n );\n\n Object.keys(cartItems).forEach((key) => {\n const sku = cartItems[key];\n productsInfo.cart_product_category.push(\n sku.defaultCategory ? sku.defaultCategory.id : ''\n );\n productsInfo.cart_product_category_name.push(\n sku.defaultCategory ? sku.defaultCategory.value : ''\n );\n productsInfo.cart_product_id.push(`PROD${sku.product_id.toString()}`);\n productsInfo.cart_product_name.push(sku.display_name.toString());\n productsInfo.cart_product_price.push(sku.prices.map((price: any) => price.price));\n productsInfo.cart_product_shade.push(sku.shades.map((shade: any) => shade.name));\n productsInfo.cart_product_size.push(sku.sizes.map((size: any) => size.label));\n productsInfo.cart_product_sku.push(`SKU${sku.perlgem.SKU_BASE_ID.toString()}`);\n productsInfo.cart_product_url.push(sku.url);\n productsInfo.cart_product_is_preorder.push(sku.product_date ? 1 : 0);\n productsInfo.cart_product_quantity.push(cartItemsQuantity[key]);\n productsInfo.cart_product_discount_amount.push(cartItemsDiscounts[key]);\n });\n }\n\n return productsInfo;\n };\n\n // TODO: determine an easier way to map product data to the data layer format - maybe see how this is done in search DataMappings\n public getShortProductInfo = async (productPayload: IProduct) => {\n const skuId = productPayload.skuId;\n const productId = productPayload.productId;\n\n let productInfo;\n let skuInfo;\n\n if (skuId) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { skus: { skuIds: [skuId] } }\n });\n const skuIdMap = data.reduce(mapProductSkusById, {});\n productInfo = skuIdMap[skuId];\n skuInfo = skuIdMap[skuId];\n } else if (productId) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { productIds: [productId] }\n });\n if (data.length) {\n productInfo = data[0];\n skuInfo = data[0].skus[0];\n }\n }\n\n if (!productInfo) {\n return {};\n }\n\n const shortDescription = productInfo.short_description\n ? productInfo.short_description.toString()\n : '';\n const productIdString = productInfo.product_id ? productInfo.product_id.toString() : '';\n const displayName = productInfo.display_name ? productInfo.display_name.toString() : '';\n const skuBaseId = skuInfo.perlgem.SKU_BASE_ID ? skuInfo.perlgem.SKU_BASE_ID.toString() : '';\n\n return {\n product_base_id: [productInfo.product_id],\n product_category_name: productInfo.defaultCategory\n ? [productInfo.defaultCategory.value]\n : [],\n product_id: [`PROD${productIdString}`],\n product_price: skuInfo.prices.map((price: any) => price.price),\n product_name: [displayName],\n product_shade: skuInfo.shades.map((shade: any) => shade.name),\n product_short_desc: [shortDescription],\n product_size: skuInfo.sizes.map((size: any) => size.label),\n product_sku: [`SKU${skuBaseId}`]\n };\n };\n\n public getProductImpresionsInfo = async (productImpressionsPayload: IProductImpressions) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let filteredItemsList: any;\n\n if (!productImpressionsPayload.products) {\n const skuIds = productImpressionsPayload.skuIds || [];\n const productIds = productImpressionsPayload.productIds || [];\n const productTags = productImpressionsPayload.productTags || [];\n\n if (!skuIds.length && !productIds.length && !productTags.length) {\n return {};\n }\n\n const skuIdList = skuIds.slice(0);\n const productIdList = productIds.slice(0);\n const productTagsList = productTags.slice(0);\n\n const tagList = isTagId(productTagsList)\n ? { ids: productTags.slice(0) }\n : { keys: productTags.slice(0) };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const skuList = skuIdList.length ? await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { skus: { skuIds: skuIdList } }\n }) : [];\n\n const skuIdMap = skuList.reduce(mapProductSkusById, {});\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const productList =\n productIdList.length || productTagsList.length\n ? await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: {\n productIds: productIdList,\n tags: { ...tagList, includeInnerHits: true }\n },\n sortBy: {\n tags: { productDisplayOrder: 'ASCENDING' }\n }\n })\n : [];\n\n filteredItemsList = Object.keys(skuIdMap)\n .filter((key) => skuIds.includes(key))\n .map((key) => skuIdMap[key])\n .concat(productList);\n } else {\n filteredItemsList = productImpressionsPayload.products;\n }\n\n if (filteredItemsList.length === 0) {\n return {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const impressionsInfo: any = {\n product_impression_base_id: [],\n product_impression_id: [],\n product_impression_name: [],\n product_impression_position: [],\n product_impression_shade: [],\n product_impression_size: [],\n product_impression_price: [],\n product_impression_sku_large_image_url: [],\n product_impression_sku_small_image_url: [],\n product_impression_small_image_url: [],\n product_impression_url: [],\n product_impression_short_desc: [],\n product_impression_sku: [],\n product_impression_product_code: [],\n product_impression_category: [],\n product_impression_category_id: [],\n product_impression_category_name: [],\n product_impression_list: [],\n product_impression_upc: []\n };\n\n /*\n // need to determine source for these\n product_impression_brand: [],\n product_impression_was_price: []\n */\n\n Object.keys(filteredItemsList).forEach((key, index) => {\n const item = filteredItemsList[key];\n\n let product;\n let sku;\n\n if (typeof item[$mobx] === 'object') {\n //product request\n product = item;\n sku = item.skus[0];\n } else {\n //sku request\n product = item;\n sku = item;\n }\n\n if (typeof sku === 'undefined') {\n return;\n }\n\n impressionsInfo.product_impression_base_id.push(Number(product.productId));\n impressionsInfo.product_impression_id.push(`PROD${product.productId.toString()}`);\n impressionsInfo.product_impression_name.push(product.displayName.toString());\n impressionsInfo.product_impression_position.push(index + 1);\n impressionsInfo.product_impression_shade.push(\n sku.shades && sku.shades.length ? sku.shades[0].name : ''\n );\n impressionsInfo.product_impression_size.push(\n sku.sizes && sku.sizes.length ? sku.sizes[0].label : ''\n );\n impressionsInfo.product_impression_price.push(sku.prices[0].price.toString());\n impressionsInfo.product_impression_sku_large_image_url.push(\n sku.media && sku.media.large.length ? sku.media.large[0].src : ''\n );\n impressionsInfo.product_impression_sku_small_image_url.push(\n sku.media && sku.media.small.length ? sku.media.small[0].src : ''\n );\n impressionsInfo.product_impression_small_image_url.push(\n product.media && product.media.small.length ? product.media.small[0].src : ''\n );\n impressionsInfo.product_impression_url.push(product.productUrl);\n impressionsInfo.product_impression_short_desc.push(product.shortDescription);\n impressionsInfo.product_impression_category.push(\n product.defaultCategory ? product.defaultCategory.id : ''\n );\n impressionsInfo.product_impression_category_id.push(\n product.defaultCategory ? product.defaultCategory.id : ''\n );\n impressionsInfo.product_impression_category_name.push(\n product.defaultCategory ? product.defaultCategory.value : ''\n );\n impressionsInfo.product_impression_sku.push(`SKU${sku.perlgem.SKU_BASE_ID}`);\n impressionsInfo.product_impression_product_code.push(sku.skuId);\n impressionsInfo.product_impression_list.push(\n productImpressionsPayload.listOverride || root.location.pathname\n );\n\n impressionsInfo.product_impression_upc.push(sku.upc);\n // need to confirm that originalPrice is correct for this mapping\n //impressionsInfo.product_impression_was_price.push(sku.prices[0].originalPrice?.toString());\n // need to confirm where to get this data\n //impressionsInfo.product_impression_brand.push('');\n });\n\n return {\n ...impressionsInfo\n };\n };\n}\n","import { serviceQueries } from '@estee/elc-service-bus';\nconst queryMap = new Map();\n\nqueryMap.set('isAuthenticated', 'isAuthenticated');\nqueryMap.set('get.config', 'get.config');\nqueryMap.set('cartItemsCounter', serviceQueries.CART_ITEMS_COUNT);\nqueryMap.set('saveForLaterItemsCount', serviceQueries.SAVE_FOR_LATER_ITEMS_COUNT);\nqueryMap.set('recognized_user', serviceQueries.IS_AUTHENTICATED);\nqueryMap.set('signed_in', serviceQueries.IS_AUTHENTICATED);\nqueryMap.set('registered_user', serviceQueries.IS_AUTHENTICATED);\nqueryMap.set('birth_date_onfile', serviceQueries.BIRTH_DATE);\nqueryMap.set('email_signup', serviceQueries.EMAIL_OPT_IN);\nqueryMap.set('opt_in_state', serviceQueries.EMAIL_OPT_IN);\nqueryMap.set('pc_email_optin', serviceQueries.EMAIL_OPT_IN);\nqueryMap.set('ELC_USER_ID', serviceQueries.USER_ID);\nqueryMap.set('USER_ID', serviceQueries.USER_ID);\nqueryMap.set('first_order_date', serviceQueries.FIRST_ORDER_DATE);\nqueryMap.set('last_order_date', serviceQueries.LAST_ORDER_DATE);\nqueryMap.set('first_order_value', serviceQueries.FIRST_ORDER_VALUE);\nqueryMap.set('first_order_value_bucket', serviceQueries.FIRST_ORDER_VALUE);\nqueryMap.set('last_order_value', serviceQueries.LAST_ORDER_VALUE);\nqueryMap.set('orders_avg', serviceQueries.ORDERS_AVG);\nqueryMap.set('total_count_of_orders', serviceQueries.TOTAL_COUNT_OF_ORDERS);\nqueryMap.set('total_count_of_orders_bucket', serviceQueries.TOTAL_COUNT_OF_ORDERS);\nqueryMap.set('crm_total_count_of_orders_bucket', serviceQueries.TOTAL_COUNT_OF_ORDERS);\nqueryMap.set('total_sum_of_revenue', serviceQueries.TOTAL_SUM_OF_REVENUE);\nqueryMap.set('total_sum_of_revenue_bucket', serviceQueries.TOTAL_SUM_OF_REVENUE);\nqueryMap.set('crm_total_sum_of_revenue_bucket', serviceQueries.TOTAL_SUM_OF_REVENUE);\nqueryMap.set('aov', serviceQueries.ORDERS_AVG);\nqueryMap.set('cart_total_value', serviceQueries.CART_ITEMS_SUBTOTAL);\nqueryMap.set('cart_total_items', serviceQueries.CART_ITEMS_COUNT);\nqueryMap.set('order_promo_code', serviceQueries.SUCCESSFUL_OFFER_CODES);\nqueryMap.set('join_date', serviceQueries.GET_USER_CREATION_DATE);\nqueryMap.set('join_date_year_month', serviceQueries.GET_USER_CREATION_DATE);\nqueryMap.set('registration_date', serviceQueries.GET_USER_CREATION_DATE);\nqueryMap.set('length_of_relationship', serviceQueries.GET_USER_CREATION_DATE);\n\nexport { queryMap };\n","import { Event } from '../domain/entities/Event';\nimport { IUtagData } from '@estee/elc-universal-utils';\nimport { computed, action, observable } from 'mobx';\n\nexport class EventRepository {\n @observable public events: Event[] = [];\n private idCounter: number = 1000;\n\n @action\n public generateId = () => {\n this.idCounter = this.idCounter + 1;\n\n return `event-${this.idCounter}-${Math.floor(Math.random() * 10000)}`;\n };\n\n @action\n public prependEventToQueue = (event: Event) => {\n this.events.unshift(event);\n };\n\n @action\n public addEventToQueue = (event: Event) => {\n this.events.push(event);\n };\n\n @action\n public removeEventFromQueue = (id: string) => {\n this.events = this.events.filter((event) => event.id !== id);\n };\n\n public markEventAsComplete = (id: string, missingInfos: IUtagData) => {\n const index = this.events.findIndex((e) => e.id === id);\n const markedEvent = this.events[index];\n if (!markedEvent) {\n return;\n }\n markedEvent.addPayload(missingInfos);\n };\n\n @computed\n public get completeEvents() {\n return this.events.filter((event) => event.isComplete);\n }\n\n @computed\n public get incompleteEvents() {\n return this.events.filter((event) => !event.isComplete);\n }\n\n @computed\n public get incompleteViewEvents() {\n return this.events.filter((event) => !event.isComplete && event.type === 'view');\n }\n\n @computed\n public get incompleteLinkEvents() {\n return this.events.filter((event) => !event.isComplete && event.type === 'link');\n }\n\n @computed\n public get incompleteDataEvents() {\n return this.events.filter((event) => !event.isComplete && event.type === 'data');\n }\n\n @computed\n public get hasEventsToSubmit() {\n return this.completeEvents.length > 0;\n }\n\n @computed\n public get hasIncompleteEvents() {\n return this.incompleteEvents.length > 0;\n }\n\n @computed\n public get hasIncompleteViewEvents() {\n return this.incompleteViewEvents.length > 0;\n }\n\n @computed\n public get hasIncompleteLinkEvents() {\n return this.incompleteLinkEvents.length > 0;\n }\n\n @computed\n public get hasIncompleteDataEvents() {\n return this.incompleteDataEvents.length > 0;\n }\n}\n","import { queryProvider } from '@estee/elc-service-bus';\n\nexport class QueryProvidersMock {\n @queryProvider('isAuthenticated')\n public isAuthenticated = () => {\n return true;\n };\n\n @queryProvider('birth.date')\n public birthDate = () => {\n return '';\n };\n\n @queryProvider('get.config')\n public getConfig = () => {\n return 'EUR';\n };\n}\n","import { AnalyticsDriver } from './AnalyticsDriver';\nimport { EventRepository } from './repositories/EventRepository';\nimport { observable, autorun } from 'mobx';\nimport { Event } from '../internal/domain/entities/Event';\nimport { IUtagData, BrowserStorage } from '@estee/elc-universal-utils';\n\nexport class EventSubmitter {\n @observable private analyticsDriver: AnalyticsDriver;\n @observable private eventRepository: EventRepository;\n @observable public isAnalyticsEnabled: boolean = false;\n\n constructor(analyticsDriver: AnalyticsDriver, eventRepository: EventRepository) {\n this.analyticsDriver = analyticsDriver;\n this.eventRepository = eventRepository;\n autorun(() => {\n this.trackEvents(\n this.eventRepository.hasEventsToSubmit,\n this.analyticsDriver.isLoaded,\n this.isAnalyticsEnabled\n );\n });\n }\n\n public updateUtagData = (payload: IUtagData, extend: boolean = false) => {\n Object.keys(payload).forEach((key) => {\n if (extend && typeof payload[key] === 'object') {\n const utagData = this.analyticsDriver.utagData[key] || [];\n const payloadData = payload[key] || [];\n this.analyticsDriver.utagData[key] = utagData.concat(payloadData);\n } else {\n this.analyticsDriver.utagData[key] = payload[key];\n }\n });\n\n if (!!this.analyticsDriver.utagData.product_impression_id) {\n this.analyticsDriver.utagData.product_impression_position = ((\n this.analyticsDriver.utagData.product_impression_id\n )).map((pos, i) => i + 1);\n }\n };\n\n public enableAnalytics = () => {\n this.isAnalyticsEnabled = true;\n };\n\n public disableAnalytics = () => {\n this.isAnalyticsEnabled = false;\n };\n\n private isQACookieSet = () => BrowserStorage.getCookie('analyticsQA') === 'enabled';\n\n private logEvent = (payload: IUtagData) => {\n if (!this.isQACookieSet()) {\n return;\n }\n const tealiumEvents = sessionStorage.getItem('tealiumEvents');\n if (!tealiumEvents) {\n sessionStorage.setItem('tealiumEvents', JSON.stringify([payload]));\n } else {\n const tealiumEventsFromSessionStorage = JSON.parse(tealiumEvents);\n tealiumEventsFromSessionStorage.push(payload);\n sessionStorage.setItem(\n 'tealiumEvents',\n JSON.stringify(tealiumEventsFromSessionStorage)\n );\n }\n };\n\n private transformPayload = (payload: IUtagData) => {\n return JSON.parse(JSON.stringify(payload));\n };\n\n public trackEvents = (\n hasEventsToSubmit: boolean,\n driverLoaded: boolean,\n isAnalyticsEnabled: boolean\n ) => {\n if (driverLoaded && hasEventsToSubmit && isAnalyticsEnabled) {\n this.eventRepository.completeEvents.forEach((event) => {\n if (event.type === 'view' && this.eventRepository.hasIncompleteDataEvents) {\n return true;\n }\n if (event.type === 'link' && this.eventRepository.hasIncompleteViewEvents) {\n return true;\n }\n void this.sendEvent(event, this.logEvent);\n this.eventRepository.removeEventFromQueue(event.id);\n });\n }\n };\n\n public sendEvent = async (event: Event, cb: Function) => {\n const payload = this.transformPayload({\n ...event.payload\n });\n\n if (event.type === 'link') {\n this.analyticsDriver.trackEvent(payload);\n } else if (event.type === 'data') {\n this.updateUtagData(this.transformPayload(event.payload), true);\n } else if (event.type === 'view') {\n this.updateUtagData(this.transformPayload(event.payload));\n this.analyticsDriver.pageTrack(payload);\n }\n\n cb(payload);\n };\n}\n","import { observable, action } from 'mobx';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class ConfigStore {\n @observable public config: any;\n @observable\n public breakpoints: Theme.IBreakpoints = {\n desktop: 768,\n largeScreen: 1024,\n extraLargeScreen: 1200\n };\n\n constructor(config: any) {\n this.updateConfig(config);\n }\n\n @action\n public updateConfig(config: any) {\n this.config = { ...config };\n }\n}\n","import { Container } from 'hypo-container';\nexport const getDecorators = (container: Container) => ({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lazyInject: (name?: string) => (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n target: any,\n key: string,\n descriptor?: PropertyDescriptor\n ) => {\n const resourceName = name || key;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sbGetter = function (this: any) {\n const resource = container.get(resourceName);\n if (!resource) {\n throw new Error(`The requested ${resourceName} does not exists`);\n }\n\n return resource;\n };\n let propertyDescriptor = descriptor || {};\n if (!descriptor) {\n propertyDescriptor = {\n get: sbGetter\n };\n Object.defineProperty(target, key, propertyDescriptor);\n } else {\n propertyDescriptor.get = sbGetter;\n }\n }\n});\n","import { root, isWebRendered } from '@estee/elc-universal-utils';\nimport { emit, events } from '@estee/elc-service-bus';\n\ninterface IMouseEvent extends Event {\n target: HTMLAnchorElement;\n}\n\nexport class OutboundLinkListener {\n private root: Window;\n\n constructor() {\n this.root = root;\n }\n\n public init = () => {\n if (isWebRendered) {\n this.root.addEventListener('click', (e: IMouseEvent) => {\n if (!e.target || !e.target.tagName || !e.target.href) {\n return;\n }\n if (e.target.tagName === 'A') {\n const currentDomain = (root.location).hostname;\n const linkHref = e.target.href;\n if (linkHref.indexOf(currentDomain) === -1) {\n emit(events.OUTBOUND_CLICKED, linkHref);\n }\n }\n });\n }\n };\n}\n","import { AnalyticsDriver } from './../internal/AnalyticsDriver';\nimport { EventSubmitter } from '../internal/EventSubmitter';\nimport { ConfigStore } from './ConfigStore';\nimport { Container } from 'hypo-container';\nimport { ServiceBusController } from './ServiceBusController';\nimport { AnalyticsService } from './AnalyticsService';\nimport { getDecorators } from '@estee/elc-service';\nimport { EventRepository } from '../internal/repositories/EventRepository';\nimport { DataAggregator } from '../internal/DataAggregator';\nimport { OutboundLinkListener } from '../internal/OutboundLinkListener';\n\nexport const diContainer = new Container();\n\nexport const serviceNames = {\n configStore: 'CONFIG_STORE',\n serviceBusController: 'SERVICE_BUS_CONTROLLER',\n analyticsService: 'ANALYTICS_SERVICE',\n analyticsDriver: 'ANALYTICS_DRIVER',\n eventSubmitter: 'EVENT_SUBMITTER',\n eventRepository: 'EVENT_REPOSITORY',\n dataAggregator: 'DATA_AGGREGATOR',\n outboundLinkListener: 'OUTBOUND_LINK_LISTENER'\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const setConfig = (configJSON: any) => {\n diContainer.config = configJSON;\n};\n\ndiContainer\n .register(\n serviceNames.configStore,\n diContainer.factory((c) => new ConfigStore(c.config))\n )\n .register(serviceNames.eventRepository, (c) => new EventRepository())\n .register(\n serviceNames.dataAggregator,\n (c) => new DataAggregator(c.get(serviceNames.eventRepository))\n )\n\n .register(serviceNames.serviceBusController, (c) => new ServiceBusController())\n .register(serviceNames.analyticsDriver, (c) => new AnalyticsDriver())\n .register(\n serviceNames.eventSubmitter,\n (c) =>\n new EventSubmitter(\n c.get(serviceNames.analyticsDriver),\n c.get(serviceNames.eventRepository)\n )\n )\n .register(\n serviceNames.analyticsService,\n (c) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new AnalyticsService((config: any) => {\n setConfig(config);\n diContainer.get(serviceNames.dataAggregator);\n diContainer.get(serviceNames.eventSubmitter);\n\n return c.get(serviceNames.serviceBusController);\n })\n )\n .register(serviceNames.outboundLinkListener, (c) => new OutboundLinkListener());\n\ndiContainer.get(serviceNames.analyticsService).register();\n\nconst { lazyInject } = getDecorators(diContainer);\n\nexport { lazyInject };\n","export const SPP_VIEW = 'spp.page.landed';\nexport const ACCOUNT_VIEW = 'account.page.landed';\nexport const PAYMENT_VIEW = 'payment.page.viewed';\nexport const CART_VIEW = 'cart.landing.page.viewed';\nexport const SHIPPING_VIEW = 'shipping.page.viewed';\nexport const ORDER_CONFIRMATION_VIEW = 'order.confirmation.viewed';\nexport const HOME_PAGE_LOADED = 'home.page.loaded';\n","import { observable, action } from 'mobx';\nimport { IEvent, IEventType, IEventData } from '../../interfaces/IAnalytics';\nimport { IUtagData } from '@estee/elc-universal-utils';\n\nexport class Event {\n @observable public isComplete: boolean = false;\n @observable public isExecuting: boolean = false;\n @observable public name: string;\n @observable public payload: IUtagData;\n @observable public type: IEventType;\n @observable public id: string;\n @observable public data: IEventData;\n\n constructor(event: IEvent) {\n this.id = event.id;\n this.name = event.name;\n this.type = event.type;\n this.data = event.data || {};\n this.payload = event.payload || {};\n }\n\n @action\n private markEventAsCompleted = () => {\n this.isComplete = true;\n this.isExecuting = false;\n };\n\n @action\n public markEventAsExecuting = () => {\n this.isExecuting = true;\n };\n\n @action\n public addPayload = (missingInfo: IUtagData) => {\n this.payload = { ...this.payload, ...missingInfo };\n this.markEventAsCompleted();\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport * as views from '../../constants/Views';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class AccountPageLandedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = () => {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: views.ACCOUNT_VIEW,\n type: 'data'\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","export const CHECKOUT = 'checkout';\nexport const CART = 'cart';\nexport const LOGIN = 'login';\nexport const ACCOUNT_LANDING = 'accountLanding';\nexport const ORDER = 'order';\nexport const GUEST_ORDER = 'guestOrder';\nexport const SHIPPING = 'shipping';\nexport const PAYMENT = 'payment';\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events, query, serviceQueries } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport * as routes from '../../constants/Routes';\n\nexport class AuthAttemptUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const isCartPage = window.location.href.indexOf('cart') !== -1 ? true : false;\n const routerStatus = await query(serviceQueries.GET_CURRENT_ROUTE);\n const currentRoute = isCartPage ? 'cart' : routerStatus.currentRoute;\n const authSource =\n currentRoute === routes.ACCOUNT_LANDING\n ? 'account'\n : currentRoute === routes.CART\n ? 'cart'\n : 'checkout';\n\n const authAttemptPayload = {\n event_name: 'login_attempt',\n event_category: authSource,\n event_action: 'login attempt',\n active_checkout_panel: authSource,\n event_label: 'standard'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.AUTH_ATTEMPT,\n type: 'link',\n payload: authAttemptPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events, query, serviceQueries } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport * as routes from '../../constants/Routes';\n\nexport class AuthFailedUseCase {\n private eventRepository: EventRepository;\n private error: string;\n constructor(error: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.error = error;\n }\n\n public execute = async () => {\n const isCartPage = window.location.href.indexOf('cart') !== -1 ? true : false;\n // TODO: can this be passed in instead of querying for it?\n const routerStatus = await query(serviceQueries.GET_CURRENT_ROUTE);\n const currentRoute = isCartPage ? 'cart' : routerStatus.currentRoute;\n\n const authFailedPayload = {\n event_name: 'login_fail',\n event_category:\n currentRoute === routes.LOGIN\n ? 'account'\n : currentRoute === routes.CART\n ? 'cart'\n : 'checkout',\n event_action: 'login fail',\n event_noninteraction: 0,\n event_label: `standard - ${this.error}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.AUTH_FAILED,\n type: 'link',\n payload: authFailedPayload\n });\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport * as views from '../../constants/Views';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { query, serviceQueries } from '@estee/elc-service-bus';\n\nexport class CartLandingPageViewedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const skuIds = await query(serviceQueries.RECOMMENDED_PRODUCTS_SKUID_LIST);\n const cartLandingPageViewedPayload = {\n active_checkout_panel: 'checkout'\n };\n\n const productImpressionsPayload = {\n skuIds: skuIds,\n listOverride: '/cart'\n };\n\n const newEvent = new Event({\n name: views.CART_VIEW,\n payload: cartLandingPageViewedPayload,\n type: 'data',\n id: this.eventRepository.generateId(),\n data: {\n // TODO: figure out what to do with these values\n /*requiredData: [\n 'cart_total_value',\n 'cart_total_items',\n 'order_promo_code'\n ],*/\n\n productImpressions: productImpressionsPayload\n }\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class CartLoggedInUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = () => {\n const cartLoggedInPayload = {\n event_name: 'login_success',\n event_category: 'checkout',\n event_action: 'login success'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.CART_LOGGED_IN,\n type: 'link',\n payload: cartLoggedInPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { IProductImpressions } from '../interfaces/IAnalytics';\n\nexport class ProductImpressionsUseCase {\n private eventRepository: EventRepository;\n private productImpressionsPayload: IProductImpressions;\n\n constructor(productImpressionsPayload: IProductImpressions) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.productImpressionsPayload = productImpressionsPayload;\n }\n\n public execute = async () => {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.ANALYTICS_PRODUCTS_VIEWED,\n type: 'link',\n payload: {\n event_name: 'product_impression',\n event_category: 'ecommerce',\n event_action: 'view_item_list',\n event_label: 'view_item_list',\n event_noninteraction: true\n },\n data: {\n productImpressions: this.productImpressionsPayload\n }\n });\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { IProductViewed } from '../interfaces/IAnalytics';\n\nexport class ProductViewedUseCase {\n private eventRepository: EventRepository;\n private productViewedPayload: IProductViewed;\n\n constructor(productViewedPayload: IProductViewed) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.productViewedPayload = productViewedPayload;\n }\n\n public execute = () => {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.ANALYTICS_PRODUCT_VIEWED,\n type: 'link',\n payload: {\n event_name: 'product_detail',\n event_category: 'ecommerce',\n event_action: 'spp',\n event_label: 'view_item',\n event_noninteraction: true,\n enh_action: 'detail'\n },\n data: {\n product: this.productViewedPayload\n }\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class CreateAccountAttemptUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = () => {\n const createAccountAttemptPayload = {\n event_name: 'create_account_attempt',\n event_category: 'account',\n event_action: 'create account attempt'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.CREATE_ACCOUNT_ATTEMPT,\n type: 'link',\n payload: createAccountAttemptPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class CreateAccountFailUseCase {\n private eventRepository: EventRepository;\n private error: string;\n\n constructor(error: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.error = error;\n }\n\n public execute = () => {\n const createAccountFailPayload = {\n event_name: 'create_account_fail',\n event_category: 'account',\n event_action: 'create account fail',\n event_label: `standard - ${this.error}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.CREATE_ACCOUNT_FAIL,\n type: 'link',\n payload: createAccountFailPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events, query, serviceQueries } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport * as routes from '../../constants/Routes';\n\nexport class CreateAccountSuccessUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n // TODO: can this be passed in instead of querying for it?\n const routerStatus = await query(serviceQueries.GET_CURRENT_ROUTE);\n const currentRoute = routerStatus.currentRoute;\n const isAccountPage =\n currentRoute === routes.ACCOUNT_LANDING || currentRoute === routes.LOGIN;\n\n const eventInfo = {\n event_name: 'create_account_success',\n event_category: 'account',\n event_action: 'create account success'\n };\n\n const createAccountSuccessPayload = {\n join_date: new Date(Date.now()).toISOString().split('T')[0],\n join_date_year_month: new Date(Date.now()).toISOString().substr(0, 7),\n length_of_relationship: 0,\n registration_date: new Date(Date.now()).toISOString(),\n ...eventInfo\n };\n Object.assign(\n createAccountSuccessPayload,\n !isAccountPage ? { active_checkout_panel: 'order_confirmation' } : {}\n );\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.CREATE_ACCOUNT_SUCCESS,\n type: 'link',\n payload: createAccountSuccessPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class ItemAddedUseCase {\n private eventRepository: EventRepository;\n private skuId: string;\n\n constructor(skuId: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.skuId = skuId;\n }\n\n public execute = () => {\n const itemAddedPayload = {\n event_name: 'add',\n event_category: 'ecommerce',\n event_action: 'add to bag',\n enh_action: 'add',\n Add_to_Bag_Module: 'Add_to_Bag_Module'\n };\n\n const cartProductPayload = {\n skuId: this.skuId\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.ITEM_ADDED,\n type: 'link',\n payload: itemAddedPayload,\n data: {\n cartProduct: cartProductPayload\n }\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events, query, serviceQueries } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport * as routes from '../../constants/Routes';\n\nexport class LoggedInSuccessfulUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const isCartPage = window.location.href.indexOf('cart') !== -1 ? true : false;\n // TODO: can we pass this in instead of querying for it?\n const routerStatus = await query(serviceQueries.GET_CURRENT_ROUTE);\n const currentRoute = routerStatus.currentRoute;\n const logInSource = isCartPage\n ? 'cart'\n : currentRoute === routes.ACCOUNT_LANDING\n ? 'account'\n : 'checkout';\n\n const loggedInSuccessfulPayload = {\n event_name: 'login_success',\n event_category: logInSource,\n event_action: 'login success',\n active_checkout_panel: logInSource,\n event_label: 'standard'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.LOGGED_IN_SUCCESSFUL,\n type: 'link',\n payload: loggedInSuccessfulPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events, query, serviceQueries } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class ManualOfferCodeAppliedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n // TODO: can we pass this in instead of querying for it?\n const manualOffer = await query(serviceQueries.GET_MANUAL_OFFER);\n const offerStatus = manualOffer.message && Object.keys(manualOffer.message)[0];\n const isOfferFailed = offerStatus === 'error';\n\n const offerCodePayload = {\n event_name: isOfferFailed ? 'offers_fail' : 'offers_success',\n event_category: 'offers',\n event_action: isOfferFailed ? 'fail' : 'success',\n event_label: isOfferFailed\n ? `${manualOffer.offerCode} - ${manualOffer.message.error}`\n : `${manualOffer.offerCode}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: isOfferFailed ? events.OFFER_CODE_FAILED : events.OFFER_CODE_SUCCEDED,\n type: 'link',\n payload: offerCodePayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events, query, serviceQueries } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport interface IAnalyticsFilters {\n category: string;\n option: string;\n}\n\nexport enum FILTER_METHODS {\n filter = 'filter',\n sort = 'sort'\n}\n\nexport class MppFilteredUseCase {\n private eventRepository: EventRepository;\n private method: string;\n\n constructor(method: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.method = method;\n }\n\n public execute = async () => {\n let event_label: string = '';\n\n // TODO: can we pass the filters in instead of querying for them?\n if (this.method === FILTER_METHODS.filter) {\n const filters = <{ category: string; option: string }[]>(\n await query(serviceQueries.GET_SELECTED_FILTERS, {})\n );\n filters.forEach((filter: IAnalyticsFilters) => {\n event_label += `${filter.category} - ${filter.option} | `;\n });\n } else {\n const filters = await query(serviceQueries.GET_SORTBY_VALUE, {});\n event_label += `${this.method} - ${filters.replace(/_/g, '').replace('sort', '')} `;\n }\n\n const filterMppPayload = {\n event_name: 'filters_and_sort_selection',\n event_category: 'filter & sort selection',\n event_action: this.method,\n event_label: event_label.slice(0, -3)\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.MPP_FILTERED,\n type: 'link',\n payload: filterMppPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport * as views from '../../constants/Views';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport interface IOrderDetail {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport class OrderConfirmationPageLandedUseCase {\n private eventRepository: EventRepository;\n private payload: IOrderDetail;\n\n constructor(payload: IOrderDetail) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.payload = payload;\n }\n\n public execute = async () => {\n const pageDetails = {\n category_id: 'checkout',\n category_name: 'checkout',\n page_name: 'checkout | confirm',\n page_type: 'order',\n page_site_area: 'checkout',\n page_template: 'checkout'\n };\n\n const { order } = this.payload || {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const skus = order?.items?.map((item: any) => item.skuId);\n\n const orderConfirmationPayload = {\n order_currency_code: order?.currency?.isoCode,\n order_discount_amount: order?.totals?.totalDiscounts,\n order_grand_total: order?.totals?.totalWithTax,\n order_id: order?.id,\n order_merchandise_total: order?.totals?.subTotalWithTax,\n order_payment_type: this.payload?.paymentMethods?.[0],\n order_shipping_amount: order?.shippingInfo?.[0].priceWithTax,\n order_subtotal: order?.totals?.subTotalWithTax,\n order_tax_amount: order?.totals?.tax,\n order_total_product_units: order?.items?.length,\n order_type: order?.orderType,\n orders_compare: '',\n orders_total: order?.totals?.subTotalWithTax\n };\n\n const cartProductsPayload = {\n skuIds: skus\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: views.ORDER_CONFIRMATION_VIEW,\n type: 'view',\n payload: { ...pageDetails, ...orderConfirmationPayload },\n data: {\n cartProducts: cartProductsPayload\n }\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class OutboundClickedUseCase {\n private eventRepository: EventRepository;\n private url: string;\n\n constructor(url: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.url = url;\n }\n\n public execute = () => {\n const outboundPayload = {\n event_name: 'outbound_click',\n event_category: 'outbound_link_click',\n event_action: this.url,\n event_label: this.url\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.OUTBOUND_CLICKED,\n type: 'link',\n payload: outboundPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { serviceCommands } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class PaymentMethodCompletedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = () => {\n const paymentMethodCompletedPayload = {\n event_name: 'payment',\n event_category: 'ecommerce',\n event_action: 'checkout',\n event_label: 'Payment'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: serviceCommands.ORDER_CREATE,\n type: 'link',\n payload: paymentMethodCompletedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport * as views from '../../constants/Views';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class PaymentPageViewedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = () => {\n const paymentPageViewedPayload = {\n active_checkout_panel: 'checkout'\n };\n\n // TODO: this is probably going to need to be a view type\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: views.PAYMENT_VIEW,\n type: 'data',\n payload: paymentPageViewedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","export const PRODUCT_CLICKED = 'product_click';\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events, serviceQueries, query } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { PRODUCT_CLICKED } from '../../constants/UseCasesConstants';\nimport { root } from '@estee/elc-universal-utils';\nimport { mapProductSkusById } from '../../utils/dataAggregator';\nimport { ISkuData } from './ProductNotifyMeTriggeredUseCase';\n\nexport interface IProductClickedPayload {\n [key: string]: string | string[] | number[];\n}\n\nexport class ProductClickedUseCase {\n private eventRepository: EventRepository;\n private skuId: string;\n private pageType: string;\n private positionIndex: number;\n\n constructor(skudId: string, pageType: string = '', positionIndex: number) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.skuId = skudId;\n this.pageType = pageType;\n this.positionIndex = positionIndex;\n }\n\n public execute = async () => {\n // TODO: we shouldn't need to call this here\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { skus: { skuIds: [this.skuId] } }\n });\n const skuIdMap: ISkuData = data.reduce(mapProductSkusById, {});\n const productInfo = skuIdMap[this.skuId];\n\n // TODO: figure out a way to get productInfo from DataAggregator\n const productClickedPayload: IProductClickedPayload = {\n event_name: PRODUCT_CLICKED,\n event_category: 'ecommerce',\n event_action: 'product click',\n enh_action: PRODUCT_CLICKED,\n event_noninteraction: 'FALSE',\n event_label: `${productInfo.display_name} - PROD${productInfo.product_id}`,\n product_position: [this.positionIndex],\n product_list: [root.location.pathname],\n product_id: [`PROD${productInfo.product_id.toString()}`]\n };\n\n if (!!this.pageType) {\n productClickedPayload.page_name = `${this.pageType} | ${productInfo.display_name}`;\n }\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.PRODUCT_CLICKED,\n type: 'link',\n payload: productClickedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events, query, serviceQueries } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { mapProductSkusById } from '../../utils/dataAggregator';\nimport { ISkuData } from './ProductNotifyMeTriggeredUseCase';\n\nexport class QuickViewUseCase {\n private eventRepository: EventRepository;\n private skuId: string;\n\n constructor(skuId: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.skuId = skuId;\n }\n\n public execute = async () => {\n // TODO: we shouldn't need to call this twice\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { skus: { skuIds: [this.skuId] } }\n });\n const skuIdMap: ISkuData = data.reduce(mapProductSkusById, {});\n\n const productInfo = skuIdMap[this.skuId];\n\n // TODO: figure out a way to deal with productInfo here so that it can be done in DataAggregator\n const quickViewPayload = {\n enh_action: 'detail',\n event_action: 'product detail view',\n event_category: 'ecommerce',\n event_label: `${productInfo.display_name} - PROD${productInfo.product_id}`,\n event_name: 'mpp_qv',\n event_noninteraction: 'FALSE',\n page_name: `QV | ${productInfo.display_name}`\n };\n\n const productShortPayload = {\n skuId: this.skuId\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.QUICK_VIEW_TRIGGERED,\n type: 'link',\n payload: quickViewPayload,\n data: {\n productShort: productShortPayload\n }\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class RemoveItemUseCase {\n private eventRepository: EventRepository;\n private skuId: string;\n\n constructor(skuId: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.skuId = skuId;\n }\n\n public execute = async () => {\n const removeItemPayload = {\n event_name: 'remove',\n event_category: 'ecommerce',\n event_action: 'remove from bag',\n enh_action: 'remove'\n };\n\n const cartProductPayload = {\n skuId: this.skuId\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.REMOVE_ITEM,\n type: 'link',\n payload: removeItemPayload,\n data: {\n cartProduct: cartProductPayload\n }\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class SampleAddedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const sampleAddedPayload = {\n event_name: 'samples',\n event_category: 'samples',\n event_action: 'sample added',\n active_checkout_panel: 'cart'\n };\n\n // TODO: we need to pass in skuId of the sample added\n const cartProductPayload = {\n skuId: ''\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.SAMPLE_ADDED,\n type: 'link',\n payload: sampleAddedPayload,\n data: {\n cartProduct: cartProductPayload\n }\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class SearchAddressSubmittedUseCase {\n private eventRepository: EventRepository;\n private address: string;\n\n constructor(address: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.address = address;\n }\n\n public execute = async () => {\n const searchAddressSubmittedPayload = {\n event_name: 'search address submitted',\n event_action: 'search address submitted',\n event_label: `${this.address}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.SEARCH_ADDRESS_SUBMITTED,\n type: 'link',\n payload: searchAddressSubmittedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { root } from '@estee/elc-universal-utils';\nimport { ConfigStore } from '../../service-setup/ConfigStore';\n\nexport class ShippingAddressFilledUseCase {\n private eventRepository: EventRepository;\n private configStore: ConfigStore;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.configStore = diContainer.get(serviceNames.configStore);\n }\n\n private getLocation = () => {\n const pathName = root.location.pathname;\n if (pathName.indexOf(this.configStore.config.routes.checkout) !== -1) {\n return 'checkout';\n } else if (pathName.indexOf(this.configStore.config.routes.settings) !== -1) {\n return 'account';\n } else {\n return '';\n }\n };\n\n public execute = () => {\n const shippingAddressFilled = {\n event_name: 'shipping_address',\n event_category: 'ecommerce',\n event_action: 'checkout',\n event_label: this.getLocation()\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.SHIPPING_ADDRESS_FILLED,\n type: 'link',\n payload: shippingAddressFilled\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class ShippingOptionSelectedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = () => {\n const shippingOptionSelectedPayload = {\n event_name: 'shipping_options',\n event_category: 'ecommerce',\n event_action: 'checkout',\n event_label: 'Shipping Options'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.SHIPPING_OPTION_SELECTED,\n type: 'link',\n payload: shippingOptionSelectedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport * as views from '../../constants/Views';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class ShippingPageViewedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = () => {\n const shippingPageViewed = {\n active_checkout_panel: 'checkout'\n };\n\n // TODO: figure out if this should be type \"view\"\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: views.SHIPPING_VIEW,\n type: 'data',\n payload: shippingPageViewed\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class StoreLocationSelectedUseCase {\n private eventRepository: EventRepository;\n private storeId: string;\n\n constructor(storeId: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.storeId = storeId;\n }\n\n public execute = async () => {\n const storeLocationSelectedPayload = {\n event_name: 'store location selected',\n event_action: 'store location selected',\n event_label: `store Id - $${this.storeId}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.STORE_LOCATION_SELECTED,\n type: 'link',\n payload: storeLocationSelectedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class StoreLocatorClickedUseCase {\n private eventRepository: EventRepository;\n private storeId: string;\n private storeName: string;\n private eventLabel: string;\n\n constructor(storeId: string, storeName: string, eventLabel: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.storeId = storeId;\n this.storeName = storeName;\n this.eventLabel = eventLabel;\n }\n\n public execute = async () => {\n const storeLocatorClickedPayload = {\n event_name: `${this.eventLabel}`,\n event_action: `${this.eventLabel}`,\n event_label: `${this.storeName} -${this.storeId}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: this.eventLabel,\n type: 'link',\n payload: storeLocatorClickedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { events } from '@estee/elc-service-bus';\n\nexport class StoreMarkerClickedUseCase {\n private eventRepository: EventRepository;\n private storeId: string;\n\n constructor(storeId: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.storeId = storeId;\n }\n\n public execute = async () => {\n const storeMarkerClickedPayload = {\n event_action: `${events.STORE_MARKER_CLICKED}`,\n event_label: `${this.storeId}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.STORE_MARKER_CLICKED,\n type: 'link',\n payload: storeMarkerClickedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class StoreTownSelectedUseCase {\n private eventRepository: EventRepository;\n private town: string;\n\n constructor(town: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.town = town;\n }\n\n public execute = async () => {\n const storeTownSelectedPayload = {\n event_name: 'store town selected',\n event_action: 'store town selected',\n event_label: `${this.town}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.STORE_LOCATION_SELECTED,\n type: 'link',\n payload: storeTownSelectedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class SubscribedForEmailsUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = () => {\n const subscribedForEmailsPayload = {\n event_name: 'signup',\n event_category: 'signup',\n event_action: 'email'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.SUBSCRIBED_FOR_EMAILS,\n type: 'link',\n payload: subscribedForEmailsPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events, query, serviceQueries } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { IOrderQueryData } from '../../service-setup/ServiceBusController';\n\nexport class TransactionFailedUseCase {\n private eventRepository: EventRepository;\n private orderQueryData: IOrderQueryData;\n private error: string;\n\n constructor(orderQueryData: IOrderQueryData, error?: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.orderQueryData = orderQueryData;\n this.error = error || '';\n }\n\n public execute = async () => {\n // TODO: can retrieval of this order data be moved to DataAggregator? Or can it be passed in?\n const totalCountOfOrders = await query(serviceQueries.TOTAL_COUNT_OF_ORDERS);\n const orderQuery = await query(serviceQueries.GET_ORDER_DATA, this.orderQueryData);\n\n const { order } = orderQuery;\n const event_label = 'event_label';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const event_info: any = {\n event_name: 'transaction_fail',\n event_category: 'ecommerce',\n event_action: 'transaction fail'\n };\n\n if (this.error) {\n event_info[event_label] = this.error;\n }\n\n const transactionFailedPayload = {\n order_currency_code: order.currency.isoCode,\n order_discount_amount: order.totals.totalDiscounts,\n order_grand_total: order.totals.totalWithTax,\n order_id: order.id,\n order_merchandise_total: order.totals.subTotalWithTax,\n order_payment_type: this.orderQueryData.paymentType,\n order_shipping_amount: order.shippingInfo[0].priceWithTax,\n order_subtotal: order.totals.subTotalWithTax,\n order_tax_amount: order.totals.tax,\n order_total_product_units: order.items.length,\n order_type: order.orderType,\n orders_compare: '',\n orders_count: totalCountOfOrders,\n orders_total: order.totals.subTotalWithTax,\n ...event_info\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.TRANSACTION_FAILED,\n type: 'link',\n payload: transactionFailedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events, query, serviceQueries } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { IOrderQueryData } from '../../service-setup/ServiceBusController';\n\nexport class TransactionSuccededUseCase {\n private eventRepository: EventRepository;\n private orderQueryData: IOrderQueryData;\n\n constructor(orderQueryData: IOrderQueryData) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.orderQueryData = orderQueryData;\n }\n\n public execute = async () => {\n // TODO: can retrieval of this order data be moved to DataAggregator? Or can it be passed in?\n const totalCountOfOrders = await query(serviceQueries.TOTAL_COUNT_OF_ORDERS);\n const orderQuery = await query(serviceQueries.GET_ORDER_DATA, this.orderQueryData);\n\n const { order } = orderQuery;\n\n const event_info = {\n event_name: 'transaction',\n event_category: 'ecommerce',\n event_action: 'transaction',\n event_label: `${order.orderNumber}`\n };\n\n const transactionSuccededPayload = {\n ...event_info,\n order_currency_code: order.currency.isoCode,\n order_discount_amount: order.totals.totalDiscounts,\n order_grand_total: order.totals.totalWithTax,\n order_id: order.id,\n order_merchandise_total: order.totals.subTotalWithTax,\n order_payment_type: this.orderQueryData.paymentType,\n order_shipping_amount: order.shippingInfo[0].priceWithTax,\n order_subtotal: order.totals.subTotalWithTax,\n order_tax_amount: order.totals.tax,\n order_total_product_units: order.items.length,\n order_type: order.orderType,\n orders_compare: '',\n orders_count: totalCountOfOrders,\n orders_total: order.totals.subTotalWithTax\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.TRANSACTION_SUCCEDED,\n type: 'link',\n payload: transactionSuccededPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class PageViewUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.ANALYTICS_PAGE_VIEWED,\n type: 'view'\n });\n this.eventRepository.prependEventToQueue(newEvent);\n };\n}\n","import { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { EventSubmitter } from '../EventSubmitter';\nimport { AnalyticsDriver } from '../AnalyticsDriver';\nimport { PageViewUseCase } from './PageViewUseCase';\n\nexport class AnalyticsLoadedUseCase {\n private eventSubmitter: EventSubmitter;\n private analyticsDriver: AnalyticsDriver;\n\n constructor() {\n this.eventSubmitter = diContainer.get(serviceNames.eventSubmitter);\n this.analyticsDriver = diContainer.get(serviceNames.analyticsDriver);\n }\n\n public execute = () => {\n // TODO: load user data into data layer\n // TODO: load cart data into data layer\n new PageViewUseCase().execute();\n this.analyticsDriver.enable();\n this.eventSubmitter.enableAnalytics();\n };\n}\n","export enum SkuEngraving {\n EVENT_NAME = 'engraving',\n EVENT_CATEGORY = 'engraving',\n EVENT_ACTION = 'overlay',\n EVENT_LABEL = '1st page loaded',\n EVENT_NONINTERACTION = 'FALSE'\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { SkuEngraving } from '../../constants/SkuEngraving';\nimport { IEngravingData } from '../interfaces/IAnalytics';\n\nexport class SkuEngravingUseCase {\n private eventRepository: EventRepository;\n private engravingData: IEngravingData;\n\n constructor(engravingData: IEngravingData) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.engravingData = engravingData;\n }\n\n private getEngravingEvent = () => {\n const {\n EVENT_ACTION,\n EVENT_CATEGORY,\n EVENT_LABEL,\n EVENT_NAME,\n EVENT_NONINTERACTION\n } = SkuEngraving;\n\n return {\n event_action: EVENT_ACTION,\n event_category: EVENT_CATEGORY,\n event_label: EVENT_LABEL,\n event_name: EVENT_NAME,\n event_noninteraction: EVENT_NONINTERACTION\n };\n };\n\n public execute = async () => {\n // TODO: this data is being passed in - do we need productShort still? Can we just use this data?\n //const { skuId, skuBaseId, size, price, name } = this.engravingData;\n const { skuId, skuBaseId } = this.engravingData;\n\n const engravingPayload = {\n ...this.getEngravingEvent(),\n enh_action: 'detail',\n page_name: `Engraving | ${skuId} | SKU${skuBaseId}`\n };\n\n const productShortPayload = {\n skuId: skuId\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.SKU_ENGRAVING_TRIGGERED,\n type: 'link',\n payload: engravingPayload,\n data: {\n productShort: productShortPayload\n }\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport interface IAnalyticsFilters {\n category: string;\n option: string;\n}\n\nexport enum GRID_ACTIONS {\n filter = 'filter',\n sort = 'sort'\n}\n\nexport const EVENT_NAME = 'filters_and_sort_selection';\nexport const EVENT_CATEGORY = 'filter & sort selection';\n\nexport class GridFilteredUseCase {\n private eventRepository: EventRepository;\n private appliedFilters: IAnalyticsFilters[];\n\n constructor(appliedFilters: IAnalyticsFilters[]) {\n this.appliedFilters = appliedFilters;\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n let eventLabel: string = '';\n\n eventLabel = this.appliedFilters.reduce(\n (previousValue: string, filter: IAnalyticsFilters) => {\n return `${previousValue} ${filter.category} - ${filter.option} | `;\n },\n ''\n );\n\n const filterGridPayload = {\n event_name: EVENT_NAME,\n event_category: EVENT_CATEGORY,\n event_action: GRID_ACTIONS.filter,\n event_label: eventLabel.slice(0, -3)\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.GRID_FILTERED,\n type: 'link',\n payload: filterGridPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { GRID_ACTIONS, EVENT_NAME, EVENT_CATEGORY } from './GridFilteredUseCase';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class GridSortedUseCase {\n private eventRepository: EventRepository;\n private appliedSort: string;\n\n constructor(appliedSort: string) {\n this.appliedSort = appliedSort;\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const eventLabel = `${GRID_ACTIONS.sort} - ${this.appliedSort\n .replace(/_/g, '')\n .replace('sort', '')}`;\n\n const sortGridPayload = {\n event_name: EVENT_NAME,\n event_category: EVENT_CATEGORY,\n event_action: GRID_ACTIONS.sort,\n event_label: eventLabel\n };\n\n const sortEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.GRID_SORTED,\n type: 'link',\n payload: sortGridPayload\n });\n\n this.eventRepository.addEventToQueue(sortEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class ShadeGroupSelectedUseCase {\n private eventRepository: EventRepository;\n private shadeGroupKey: string;\n private eventName: string;\n private eventAction: string;\n\n constructor(shadeGroupKey: string, eventName: string, eventAction: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.shadeGroupKey = shadeGroupKey;\n this.eventName = eventName;\n this.eventAction = eventAction;\n }\n\n public execute = () => {\n const payload = {\n event_name: this.eventName,\n event_category: 'filter & sort selection ',\n event_action: this.eventAction,\n event_label: this.shadeGroupKey\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.PRODUCT_SHADE_GROUP_SELECTED,\n type: 'link',\n payload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { IGenericAnalyticsData } from '../interfaces/IAnalytics';\n\nexport class LiveChatInterfaceClickedUseCase {\n private eventRepository: EventRepository;\n private liveChatData: IGenericAnalyticsData;\n\n constructor(liveChatData: IGenericAnalyticsData) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.liveChatData = liveChatData;\n }\n\n public execute = () => {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.LIVE_CHAT_INTERFACE_CLICKED,\n type: 'link',\n payload: this.getLiveChatPayload()\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n\n private getLiveChatPayload() {\n const { eventLabel } = this.liveChatData;\n\n return {\n event_name: 'liveperson chat interface open',\n event_category: 'live chat interaction ',\n event_action: 'user initiated chat',\n event_label: eventLabel\n };\n }\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class ProductComparisonViewedUseCase {\n private eventRepository: EventRepository;\n private productIds: string[];\n\n constructor(productIds: string[]) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.productIds = productIds;\n }\n\n public execute = () => {\n const eventLabel = this.productIds.join('|');\n const payload = {\n event_name: 'comparison view',\n event_category: 'product comparison',\n event_action: 'comparison',\n event_label: eventLabel,\n event_noninteraction: 'true'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.PRODUCT_COMPARISON_VIEWED,\n type: 'view',\n payload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { IGenericAnalyticsData } from '../interfaces/IAnalytics';\n\nexport class SocialShareIconTriggeredUseCase {\n private eventRepository: EventRepository;\n private socialShareData: IGenericAnalyticsData;\n\n constructor(socialShareData: IGenericAnalyticsData) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.socialShareData = socialShareData;\n }\n\n public execute = () => {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.SOCIAL_SHARE_ICON_TRIGGERED,\n type: 'link',\n payload: this.getSocialSharePayload()\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n\n private getSocialSharePayload() {\n const { eventLabel } = this.socialShareData;\n\n return {\n event_name: 'social share',\n event_category: 'social',\n event_action: 'share',\n event_label: eventLabel\n };\n }\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class StoreBookVirtualAppointmentClickedUseCase {\n private eventRepostiory: EventRepository;\n private isVirtual: boolean;\n private eventLabel: string;\n\n constructor(isVirtual: boolean, eventLabel: string) {\n this.eventRepostiory = diContainer.get(serviceNames.eventRepository);\n this.isVirtual = isVirtual;\n this.eventLabel = eventLabel;\n }\n\n public execute = async () => {\n const storeLocatorBookVirtualAppointmentClickedPayload = {\n event_name: this.eventLabel,\n event_action: this.eventLabel,\n event_label: this.isVirtual\n };\n\n const newEvent = new Event({\n id: this.eventRepostiory.generateId(),\n name: this.eventLabel,\n type: 'link',\n payload: storeLocatorBookVirtualAppointmentClickedPayload\n });\n\n this.eventRepostiory.addEventToQueue(newEvent);\n };\n}\n","export enum ActionType {\n OPEN = 'open',\n CLOSE = 'close'\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { ActionType } from '../../constants/ActionType';\n\nexport class SkuPickerInteractionUseCase {\n private eventRepository: EventRepository;\n private productId: string;\n private action: string;\n\n constructor(productId: string, action: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.productId = productId;\n this.action = action;\n }\n\n public execute = () => {\n const eventName =\n this.action === ActionType.OPEN ? events.SKU_PICKER_OPENED : events.SKU_PICKER_CLOSED;\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: eventName,\n type: 'link',\n payload: this.getSkuPickerPayload()\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n\n private getSkuPickerPayload() {\n return {\n event_name: `sku picker ${this.action}`,\n event_category: 'sku picker',\n event_action: `${this.action}`,\n event_label: `PROD${this.productId}`\n };\n }\n}\n","import { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { EventRepository } from '../repositories/EventRepository';\nimport { Event } from '../domain/entities/Event';\nimport { IAccountSidebarBaseData } from '../interfaces/IAnalytics';\n\nexport class AccountSidebarMenuOptionClickedUseCase {\n private eventRepository: EventRepository;\n private accountSidebarData: IAccountSidebarBaseData;\n\n constructor(accountSidebarData: IAccountSidebarBaseData) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.accountSidebarData = accountSidebarData;\n }\n\n public execute() {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: this.accountSidebarData.eventAction,\n type: 'link',\n payload: this.getAccountSidebarPayload()\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n }\n\n private getAccountSidebarPayload() {\n const { eventAction, label } = this.accountSidebarData;\n\n return {\n event_name: 'my account page',\n event_category: 'my account page',\n event_action: eventAction,\n event_label: label\n };\n }\n}\n","import { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { EventRepository } from '../repositories/EventRepository';\nimport { Event } from '../domain/entities/Event';\nimport { IAccountSidebarShowcaseData } from '../interfaces/IAnalytics';\n\nexport class AccountSidebarShowcaseClickedUseCase {\n private eventRepository: EventRepository;\n private accountSidebarData: IAccountSidebarShowcaseData;\n\n constructor(accountSidebarData: IAccountSidebarShowcaseData) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.accountSidebarData = accountSidebarData;\n }\n\n public execute() {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: this.accountSidebarData.eventAction,\n type: 'link',\n payload: this.getAccountSidebarPayload()\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n }\n\n private getAccountSidebarPayload() {\n const { key, item_title, eventAction } = this.accountSidebarData;\n\n return {\n event_name: 'content_module_click',\n enh_action: 'promo_click',\n event_category: 'ecommerce',\n event_action: eventAction,\n event_label: `banner click | [${item_title}]`,\n promo_pos: ['module'],\n promo_creative: [`${key}`],\n promo_name: [`${item_title}`],\n promo_id: [`module-${key}-${item_title}`]\n };\n }\n}\n","export enum AccountEventAction {\n ACCOUNT_SIDEBAR_MENU_CLICKED = 'navigation click',\n ACCOUNT_SIDEBAR_LOYALTY_CLICKED = 'cta click',\n ACCOUNT_SIDEBAR_SHOWCASE_CLICKED = 'promotion click'\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class AppointmentVirtualSelectedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const appointmentVirtualSelectedPayload = {\n event_name: 'appointment booking',\n event_category: 'appointment booking',\n event_action: 'location selected',\n event_label: 'virtual consultation'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APPOINTMENT_VIRTUAL_SELECTED,\n type: 'link',\n payload: appointmentVirtualSelectedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class AppointmentServiceSelectedUseCase {\n private eventRepository: EventRepository;\n private serviceName: string[];\n\n constructor(serviceName: string[]) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.serviceName = serviceName;\n }\n\n public execute = async () => {\n const appointmentServiceSelectedPayload = {\n event_name: 'appointment booking',\n event_category: 'appointment booking',\n event_action: 'service selected',\n event_label: this.serviceName\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APPOINTMENT_SERVICE_SELECTED,\n type: 'link',\n payload: appointmentServiceSelectedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class AppointmentDateTimeSelectedUseCase {\n private eventRepository: EventRepository;\n private dateTime: string;\n\n constructor(dateTime: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.dateTime = dateTime;\n }\n\n public execute = async () => {\n const appointmentDateTimeSelectedPayload = {\n event_name: 'appointment booking',\n event_category: 'appointment booking',\n event_action: 'date and time selected',\n event_label: this.dateTime\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APPOINTMENT_DATE_TIME_SELECTED,\n type: 'link',\n payload: appointmentDateTimeSelectedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class AppointmentEditClickedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const appointmentEditPayload = {\n event_name: 'appointment booking',\n event_category: 'appointment booking',\n event_action: 'review',\n event_label: 'edit'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APPOINTMENT_EDIT_CLICKED,\n type: 'link',\n payload: appointmentEditPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class AppointmentStartedOverUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const appointmentStartedOverPayload = {\n event_name: 'appointment booking',\n event_category: 'appointment booking',\n event_action: 'review',\n event_label: 'cancel and start over'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APPOINTMENT_STARTED_OVER,\n type: 'link',\n payload: appointmentStartedOverPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class AppointmentArtistSelectedUseCase {\n private eventRepository: EventRepository;\n private artistName: string;\n\n constructor(artistName: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.artistName = artistName;\n }\n\n public execute = async () => {\n const appointmentArtistSelectedPayload = {\n event_name: 'appointment booking',\n event_category: 'appointment booking',\n event_action: 'artist selected',\n event_label: this.artistName\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APPOINTMENT_ARTIST_SELECTED,\n type: 'link',\n payload: appointmentArtistSelectedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class AppointmentStepLoadedUseCase {\n private eventRepository: EventRepository;\n private step: string;\n\n constructor(step: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.step = step;\n }\n\n public execute = async () => {\n const appointmentStepPayload = {\n page_url: `/book-appointment/step${this.step}`,\n page_name: `Book Appointment - Step ${this.step}`,\n location: `${location.origin}/book-appointment/step${this.step}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APPOINTMENT_STEP_LOADED,\n type: 'view',\n payload: appointmentStepPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class AppointmentProcessCompletedUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const appointmentProcessCompletedPayload = {\n page_url: '/book-appointment/complete',\n page_name: 'Book Appointment - Complete',\n location: `${window.location.origin}/book-appointment/complete`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APOOINTMENT_PROCESS_COMPLETED,\n type: 'view',\n payload: appointmentProcessCompletedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\n\nexport class AppointmentAddedToCalendarUseCase {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const appointmentAddedToCalendarPayload = {\n event_name: 'appointment booking',\n event_category: 'appointment booking',\n event_action: 'completion page interaction',\n event_label: 'save to calendar'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APPOINTMENT_ADDED_TO_CALENDAR,\n type: 'link',\n payload: appointmentAddedToCalendarPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { events } from '@estee/elc-service-bus';\n\nexport interface ISearchProductsQueried {\n searchTerm: string;\n searchType?: string;\n skuIds?: string[];\n}\n\nexport class SearchProductsQueriedUseCase {\n private eventRepository: EventRepository;\n private searchTerm: string;\n private searchType: string;\n private skuIds: string[];\n\n constructor(payload: ISearchProductsQueried) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.searchTerm = payload.searchTerm;\n this.searchType = payload.searchType || 'standard';\n this.skuIds = payload.skuIds || [];\n }\n\n public execute = async () => {\n let location = `?search=${this.searchTerm}&searchtype=${this.searchType}`;\n\n if (this.searchType === 'predictive') {\n location = `/searchresultsoverlay${location}`;\n } else {\n location = `/search${location}`;\n }\n\n const productImpressionsPayload = {\n skuIds: this.skuIds,\n listOverride: location\n };\n\n const searchProductsQueriedPayload = {\n location: location,\n search_keyword: this.searchTerm,\n search_type: this.searchType,\n search_results: this.skuIds.length.toString(),\n site_search_results_found: this.skuIds.length ? 'yes' : 'no',\n Number_of_On_Site_Searches: '1'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.SEARCH_PRODUCTS_QUERIED,\n type: 'view',\n payload: searchProductsQueriedPayload,\n data: {\n productImpressions: productImpressionsPayload\n }\n });\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { events } from '@estee/elc-service-bus';\n\nexport interface ISearchTermSelected {\n searchTerm: string;\n}\n\nexport class SearchTermSelectedUseCase {\n private eventRepository: EventRepository;\n private searchTerm: string;\n\n constructor(payload: ISearchTermSelected) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.searchTerm = payload.searchTerm;\n }\n\n public execute = async () => {\n const searchTermSelectedPayload = {\n event_name: 'onsite_search',\n event_category: 'onsite search',\n event_action: 'predictive text click',\n event_label: this.searchTerm\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.SEARCH_TERM_SELECTED,\n type: 'link',\n payload: searchTermSelectedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../../internal/repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport interface IVtoAction {\n event: string;\n pageType: string;\n vtoType: string;\n}\n\nexport class VTOActionUseCase {\n private eventRepository: EventRepository;\n private event: string;\n private pageType: string;\n private vtoType: string;\n\n constructor(vtoAction: IVtoAction) {\n const { event, pageType, vtoType = '' } = vtoAction;\n\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.event = event;\n this.pageType = pageType;\n this.vtoType = vtoType;\n }\n\n public execute = () => {\n const vtoActionPayload = {\n event_name: 'YouCam',\n event_category: 'YouCam',\n event_action: this.event,\n event_label: 'event',\n modiface_evar: `YouCam | ${this.event} | event`,\n page_name: `${this.pageType} | ${this.event} | event`,\n vto_type: this.vtoType\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: this.event,\n type: 'link',\n payload: vtoActionPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { events, serviceQueries, query } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { mapProductSkusById } from '../../utils/dataAggregator';\n\ninterface IProductInfo {\n display_name: string;\n product_id: string;\n}\n\nexport interface ISkuData {\n [key: string]: IProductInfo;\n}\n\nexport const EVENT_NAME = 'notify_me';\nexport const EVENT_CATEGORY = 'ecommerce';\nexport const EVENT_ACTION = 'notify me - request';\n\nexport class ProductNotifyMeTriggeredUseCase {\n private eventRepository: EventRepository;\n private skuId: string;\n\n constructor(skudId: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.skuId = skudId;\n }\n\n public execute = async () => {\n // TODO: can this data be passed in instead of querying it?\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { skus: { skuIds: [this.skuId] } }\n });\n const skuIdMap: ISkuData = data.reduce(mapProductSkusById, {});\n const productInfo = skuIdMap[this.skuId];\n\n const productNotifyMeTriggeredPayload = {\n event_name: EVENT_NAME,\n event_action: EVENT_ACTION,\n event_category: EVENT_CATEGORY,\n event_label: `${productInfo.display_name} - PROD${productInfo.product_id}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.PRODUCT_NOTIFY_ME_TRIGGERED,\n type: 'link',\n payload: productNotifyMeTriggeredPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { serviceQueries, query } from '@estee/elc-service-bus';\nimport { Event } from '../domain/entities/Event';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { ISkuData } from './ProductNotifyMeTriggeredUseCase';\nimport { mapProductSkusById } from '../../utils/dataAggregator';\n\nexport const EVENT_NAME = 'notify_me';\nexport const EVENT_CATEGORY = 'ecommerce';\n\nexport class ProductNotifyMeRequestCompletedUseCase {\n private eventRepository: EventRepository;\n private skuId: string;\n private event: string;\n private eventAction: string;\n\n constructor(skudId: string, event: string, eventAction: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.skuId = skudId;\n this.event = event;\n this.eventAction = eventAction;\n }\n\n public execute = async () => {\n // TODO: are we requesting this data here just to get the name and id? if so, can't we pass it that data in?\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = await query(serviceQueries.GET_PRODUCT_DATA, {\n filterBy: { skus: { skuIds: [this.skuId] } }\n });\n const skuIdMap: ISkuData = data.reduce(mapProductSkusById, {});\n const productInfo = skuIdMap[this.skuId];\n\n const productNotifyMeRequestCompletedPayload = {\n event_name: EVENT_NAME,\n event_action: this.eventAction,\n event_category: EVENT_CATEGORY,\n event_label: `${productInfo.display_name} - PROD${productInfo.product_id}`\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: this.event,\n type: 'link',\n payload: productNotifyMeRequestCompletedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { IReviewsData } from '../interfaces/IAnalytics';\n\nexport class RatingsReviewsUseCase {\n private eventRepository: EventRepository;\n private event: string;\n private reviewsData: IReviewsData;\n\n constructor(event: string, reviewsData: IReviewsData) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.reviewsData = reviewsData;\n this.event = event;\n }\n\n public execute = () => {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: this.event,\n type: 'link',\n payload: this.getRatingsReviewsPayload()\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n\n private getRatingsReviewsPayload() {\n const { id, name, reviewCategory, selectedValue, eventAction } = this.reviewsData;\n\n return {\n event_name: 'read_write_review',\n event_category: reviewCategory,\n event_action: selectedValue ? `${eventAction} - ${selectedValue}` : eventAction,\n event_label: `${name} - ${id}`\n };\n }\n}\n","export enum ReviewsEventAction {\r\n READ_REVIEW = 'review - read',\r\n WRITE_REVIEW = 'review - write - start',\r\n HELPFUL_YES = 'review - helpful - thumbs up',\r\n HELPFUL_NO = 'review - helpful - thumbs down',\r\n FLAG_REVIEW = 'review - helpful - flag this review',\r\n REVIEWS_FILTER = 'review - filter',\r\n REVIEWS_SEARCH = 'review - search',\r\n ASK_AND_ANSWER = 'ask answer - read',\r\n ASK_AND_ANSWER_SUBMIT = 'ask answer - ask a question - end',\r\n ASK_AND_ANSWER_SEARCH = 'ask answer - ask a question - search',\r\n ASK_AND_ANSWER_HELPFUL_YES = 'ask answer - helpful - thumbs up',\r\n ASK_AND_ANSWER_HELPFUL_NO = 'ask answer - helpful - thumbs down',\r\n ASK_AND_ANSWER_SHOW_MORE = 'ask answer - show more q&a',\r\n REVIEW_SORT = 'Review - Sort',\r\n ASK_AND_ANSWER_SORT = 'ask answer - sort',\r\n REVIEW_OVERLAY_OPEN = 'review overlay - open',\r\n REVIEW_OVERLAY_CLOSE = 'review overlay - close'\r\n}\r\n","import { EventRepository } from '../repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\nimport { ISmartGiftData } from '../interfaces/IAnalytics';\n\nexport class SmartGiftUseCase {\n private eventRepository: EventRepository;\n private eventName: string;\n private smartGiftData: ISmartGiftData;\n\n constructor(eventName: string, smartGiftData: ISmartGiftData) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this.smartGiftData = smartGiftData;\n this.eventName = eventName;\n }\n\n public execute() {\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: this.eventName,\n type: 'link',\n payload: this.getSmartGiftPayload()\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n }\n\n private getSmartGiftPayload() {\n const { productId, eventAction } = this.smartGiftData;\n\n return {\n event_name: 'smartgift',\n event_category: 'smartgift',\n event_action: eventAction,\n event_label: `PROD${productId}`\n };\n }\n}\n","export enum SmartGiftEventAction {\n SMARTGIFT_ADDED = 'launch',\n SMARTGIFT_VIEWED = 'see gift',\n SMARTGIFT_PREPARED = 'prepare my gift',\n SMARTGIFT_WIDGET_TOGGLED = 'minimize / maximize',\n SMARTGIFT_REMOVED = 'remove this item',\n SMARTGIFT_CANCELLED = 'cancel this gift',\n SMARTGIFT_HELP_OPENED = 'help - open',\n SMARTGIFT_HELP_CLOSED = 'help - close'\n}\n","export enum VTO_EVENTS {\n ALL_SHADES_VIEWED = 'allShadesViewed',\n BEST_SHADES_VIEWED = 'bestShadesViewed',\n CAMERA_CLOSED = 'cameraClosed',\n CAMERA_FAILED = 'cameraFailed',\n CAMERA_OPENED = 'cameraOpened',\n CLOSED = 'closed',\n COMPARE = 'compare',\n COMPARE_DISABLED = 'compareDisabled',\n ENGINE_CLOSED = 'engineClosed',\n FOUNDATION_QR_CODE_OVERLAY_CLOSED = 'foundationQrCodeOverlayClosed',\n FOUNDATION_QR_CODE_OVERLAY_OPENED = 'foundationQrCodeOverlayOpened',\n KISS_DETECTED = 'kissDetected',\n LOADED = 'loaded',\n LOADING = 'loading',\n MATCH_PERSONALIZED = 'myMatchPersonalized',\n MATCH_REMOVED = 'myMatchRemoved',\n MATCH_SAVED = 'myMatchSaved',\n NON_SHOPPABLE_PRODUCTS_LOADED = 'nonShoppableProductsLoaded',\n OPENED = 'opened',\n PAIR_SHADE_GRID_OPENED = 'pairShadeGridOpened',\n PAIR_SHADE_SELECTED = 'pairShadeSelected',\n PHOTO_LOADED = 'photoLoaded',\n PHOTO_SAVED = 'photoSaved',\n PRICE_SUPPRESSED = 'priceSuppressed',\n RESET = 'reset',\n SHADE_FINDER_CANCELLED = 'shadeFinderCancelled',\n SHADE_FINDER_COMPLETED = 'shadeFinderCompleted',\n SHADE_FINDER_STARTED = 'shadeFinderStared',\n SHOPPABLE_PRODUCTS_LOADED = 'shoppableProductsLoaded',\n SKIN_ANALYSIS_FINISHED = 'skinAnalysisFinished',\n SKIN_ANALYSIS_STARTED = 'skinAnalysisStarted',\n SKIN_BACK_TO_DETECTING = 'skinBackToDetecting',\n SKIN_SHADE_FOUND = 'skinShadeFound',\n VIDEO_LOADED = 'videoLoaded',\n ZOOM = 'zoom'\n}\nexport const YOUCAM = 'YouCam';\nexport const YOUCAM_SKINCARE = 'YouCamSkincare';\n","import { events } from '@estee/elc-service-bus';\n\nimport { EventRepository } from '../repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nlet debounceTimeout: NodeJS.Timeout;\nconst debounceTimeInMs = 5;\n\nconst allPayloads: IOfferCodePayload[] = [];\n\nexport interface IOfferViewedProps {\n placement: string;\n promotionId: string;\n promotionName: string;\n}\n\ninterface IOfferCodePayload {\n event_name: string;\n enh_action: string;\n event_category: string;\n event_action: string;\n event_label: string[];\n promo_pos: string[];\n promo_creative: string[];\n promo_name: string[];\n promo_id: string[];\n}\n\nconst blankOfferCodePayload = (): IOfferCodePayload => ({\n event_name: 'content_module_view',\n enh_action: 'promo_view',\n event_category: 'ecommerce',\n event_action: 'promotion view',\n event_label: [],\n promo_pos: [],\n promo_creative: [],\n promo_name: [],\n promo_id: []\n});\n\nconst mergeOfferCodePayload = (offerCodePayload: IOfferCodePayload[]) =>\n offerCodePayload.reduce(\n (acc, event) => ({\n event_name: acc.event_name,\n event_category: acc.event_category,\n event_action: acc.event_action,\n event_label: acc.event_label.concat(event.event_label),\n promo_pos: acc.promo_pos.concat(event.promo_pos),\n promo_creative: acc.promo_creative.concat(event.promo_creative),\n promo_name: acc.promo_name.concat(event.promo_name),\n promo_id: acc.promo_id.concat(event.promo_id)\n }),\n\n blankOfferCodePayload() as IOfferCodePayload\n );\n\nexport class OfferViewed {\n private eventRepository: EventRepository;\n private _promotionName: string;\n private _promotionId: string;\n\n constructor({ placement, promotionId, promotionName }: IOfferViewedProps) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this._promotionName = promotionName;\n this._promotionId = promotionId;\n }\n\n public execute = () => {\n const offerCodePayload: IOfferCodePayload = {\n event_name: 'content_module_click',\n enh_action: 'promo_view',\n event_category: 'ecommerce',\n event_action: 'promotion view',\n event_label: this._promotionName ? [`${this._promotionId}`] : ['content module click'],\n promo_pos: ['module'],\n promo_creative: ['Cart Overlay'],\n promo_name: [`${this._promotionName}`],\n promo_id: [`module-Cart Overlay-${this._promotionId}`]\n };\n allPayloads.push(offerCodePayload);\n\n clearTimeout(debounceTimeout);\n debounceTimeout = setTimeout(() => {\n const eventsToMerge = allPayloads.splice(0, allPayloads.length);\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.CART_OVERLAY_OFFER_CLICKED,\n type: 'link',\n payload: mergeOfferCodePayload(eventsToMerge)\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n }, debounceTimeInMs);\n };\n}\n","import { events } from '@estee/elc-service-bus';\n\nimport { EventRepository } from '../repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport interface IOfferClickedProps {\n placement: string;\n promotionId: string;\n promotionName: string;\n}\n\nexport class OfferClicked {\n private eventRepository: EventRepository;\n private _promotionName: string;\n private _promotionId: string;\n\n constructor({ promotionId, promotionName }: IOfferClickedProps) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this._promotionName = promotionName;\n this._promotionId = promotionId;\n }\n\n public execute = () => {\n const offerCodeFailedPayload = {\n event_name: 'content_module_click',\n enh_action: 'promo_click',\n event_category: 'ecommerce',\n event_action: 'promotion click',\n event_label: this._promotionName ? [`${this._promotionId}`] : 'content module click',\n promo_pos: ['module'],\n promo_creative: ['Cart Overlay'],\n promo_name: [`${this._promotionName}`],\n promo_id: [`module-Cart Overlay-${this._promotionId}`]\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.CART_OVERLAY_OFFER_CLICKED,\n type: 'link',\n payload: offerCodeFailedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { EventRepository } from '../repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nconst eventActionMap: { [key: string]: string } = {\n offers: 'offer tab - cart overlay',\n cart: 'cart tab - cart overlay'\n};\n\ninterface ICartTabTabClickedProps {\n tabId: string;\n event: string;\n}\n\nexport class CartTabTabClicked {\n private eventRepository: EventRepository;\n private _tabId: string;\n private _event: string;\n\n constructor({ tabId, event }: ICartTabTabClickedProps) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n this._tabId = tabId;\n this._event = event;\n }\n\n public execute = () => {\n const offerCodeFailedPayload = {\n event_name: 'cart overlay',\n event_category: 'ecommerce',\n event_action: eventActionMap[this._tabId] || this._tabId,\n event_label: 'click'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: this._event,\n type: 'link',\n payload: offerCodeFailedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { events } from '@estee/elc-service-bus';\n\nimport { EventRepository } from '../repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\nexport class CartOverlayClosed {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = () => {\n const payload = {\n event_name: 'cart overlay',\n event_category: 'ecommerce',\n event_action: 'cart overlay',\n event_label: 'close'\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.CART_OVERLAY_CLOSED,\n type: 'link',\n payload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { events, query, serviceQueries } from '@estee/elc-service-bus';\n\nimport { EventRepository } from '../repositories/EventRepository';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { Event } from '../domain/entities/Event';\n\ninterface IAnalyticsPayload {\n cart_product_id: string[];\n cart_product_price: number[];\n cart_product_quantity: number[];\n cart_product_shade: string[];\n cart_product_size: string[];\n cart_product_sku: string[];\n cart_product_is_replenishment_item: string[];\n cart_product_product_code: string[];\n cart_product_upc: string[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst CartDataToAnalyticsPayload = (cartItems: any[]): IAnalyticsPayload =>\n cartItems.reduce(\n (acc, cartItem) => ({\n cart_product_id: [...(acc.cart_product_id || []), cartItem.product.productId],\n cart_product_price: [...(acc.cart_product_price || []), cartItem.unitPriceWithTax],\n cart_product_quantity: [...(acc.cart_product_quantity || []), cartItem.quantity],\n cart_product_shade: [...(acc.cart_product_shade || []), cartItem.product.shade],\n cart_product_size: [...(acc.cart_product_size || []), cartItem.product.size],\n cart_product_sku: [...(acc.cart_product_sku || []), cartItem.skuId],\n cart_product_is_replenishment_item: [],\n cart_product_product_code: [],\n cart_product_replenishment_frequency: [],\n cart_product_upc: []\n }),\n {} as IAnalyticsPayload\n );\n\nexport class CartOverlayOpened {\n private eventRepository: EventRepository;\n\n constructor() {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cart = (await query(serviceQueries.GET_CART, {})) as any;\n\n const payload = {\n event_name: 'checkout_option',\n enh_action: 'checkout',\n event_category: 'cart',\n event_action: 'view',\n checkout_step: '1',\n checkout_type: 'react',\n location: '/checkout/viewcart.tmpl',\n ...CartDataToAnalyticsPayload(cart.cartItems)\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.CART_OVERLAY_OPENED,\n type: 'link',\n payload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { EventRepository } from '../repositories/EventRepository';\nimport { Event } from '../domain/entities/Event';\nimport { events } from '@estee/elc-service-bus';\n\nexport class AppointmentLocationSelectedUseCase {\n private readonly eventRepository: EventRepository;\n\n // eslint-disable-next-line @typescript-eslint/no-parameter-properties\n constructor(private readonly storeName: string) {\n this.eventRepository = diContainer.get(serviceNames.eventRepository);\n }\n\n public execute = async () => {\n const appointmentLocationSelectedPayload = {\n event_name: 'appointment booking',\n event_category: 'appointment booking',\n event_action: 'location selected',\n event_label: this.storeName\n };\n\n const newEvent = new Event({\n id: this.eventRepository.generateId(),\n name: events.APPOINTMENT_LOCATION_SELECTED,\n type: 'link',\n payload: appointmentLocationSelectedPayload\n });\n\n this.eventRepository.addEventToQueue(newEvent);\n };\n}\n","import { on, events } from '@estee/elc-service-bus';\nimport { diContainer, serviceNames } from '../service-setup/diContainer';\nimport { AccountPageLandedUseCase } from '../internal/use-cases/AccountPageLandedUseCase';\nimport { AuthAttemptUseCase } from '../internal/use-cases/AuthAttemptUseCase';\nimport { AuthFailedUseCase } from '../internal/use-cases/AuthFailedUseCase';\nimport { CartLandingPageViewedUseCase } from '../internal/use-cases/CartLandingPageViewedUseCase';\nimport { CartLoggedInUseCase } from '../internal/use-cases/CartLoggedInUseCase';\nimport { ProductImpressionsUseCase } from '../internal/use-cases/ProductImpressionsUseCase';\nimport { ProductViewedUseCase } from '../internal/use-cases/ProductViewedUseCase';\nimport { CreateAccountAttemptUseCase } from '../internal/use-cases/CreateAccountAttemptUseCase';\nimport { CreateAccountFailUseCase } from '../internal/use-cases/CreateAccountFailUseCase';\nimport { CreateAccountSuccessUseCase } from '../internal/use-cases/CreateAccountSuccessUseCase';\nimport { ItemAddedUseCase } from '../internal/use-cases/ItemAddedUseCase';\nimport { LoggedInSuccessfulUseCase } from '../internal/use-cases/LoggedInSuccessfulUseCase';\nimport { ManualOfferCodeAppliedUseCase } from '../internal/use-cases/ManualOfferCodeAppliedUseCase';\nimport { MppFilteredUseCase } from '../internal/use-cases/MppFilteredUseCase';\nimport { OrderConfirmationPageLandedUseCase } from '../internal/use-cases/OrderConfirmationPageLandedUseCase';\nimport { OutboundClickedUseCase } from '../internal/use-cases/OutboundClickedUseCase';\nimport { PaymentMethodCompletedUseCase } from '../internal/use-cases/PaymentMethodCompletedUseCase';\nimport { PaymentPageViewedUseCase } from '../internal/use-cases/PaymentPageViewedUseCase';\nimport { ProductClickedUseCase } from '../internal/use-cases/ProductClickedUseCase';\nimport { QuickViewUseCase } from '../internal/use-cases/QuickViewUseCase';\nimport { RemoveItemUseCase } from '../internal/use-cases/RemoveItemUseCase';\nimport { SampleAddedUseCase } from '../internal/use-cases/SampleAddedUseCase';\nimport { SearchAddressSubmittedUseCase } from '../internal/use-cases/SearchAddressSubmittedUseCase';\nimport { ShippingAddressFilledUseCase } from '../internal/use-cases/ShippingAddressFilledUseCase';\nimport { ShippingOptionSelectedUseCase } from '../internal/use-cases/ShippingOptionSelectedUseCase';\nimport { ShippingPageViewedUseCase } from '../internal/use-cases/ShippingPageViewedUseCase';\nimport { StoreLocationSelectedUseCase } from '../internal/use-cases/StoreLocationSelectedUseCase';\nimport { StoreLocatorClickedUseCase } from '../internal/use-cases/StoreLocatorClickedUseCase';\nimport { StoreMarkerClickedUseCase } from '../internal/use-cases/StoreMarkerClickedUseCase';\nimport { StoreTownSelectedUseCase } from '../internal/use-cases/StoreTownSelectedUseCase';\nimport { SubscribedForEmailsUseCase } from '../internal/use-cases/SubscribedForEmailsUseCase';\nimport { TransactionFailedUseCase } from '../internal/use-cases/TransactionFailedUseCase';\nimport { TransactionSuccededUseCase } from '../internal/use-cases/TransactionSuccededUseCase';\nimport { AnalyticsLoadedUseCase } from '../internal/use-cases/AnalyticsLoadedUseCase';\nimport { SkuEngravingUseCase } from '../internal/use-cases/SkuEngravingUseCase';\nimport { GridFilteredUseCase, IAnalyticsFilters } from '../internal/use-cases/GridFilteredUseCase';\nimport { GridSortedUseCase } from '../internal/use-cases/GridSortedUseCase';\nimport { ShadeGroupSelectedUseCase } from '../internal/use-cases/ShadeGroupSelectedUseCase';\nimport { LiveChatInterfaceClickedUseCase } from '../internal/use-cases/LiveChatInterfaceClickedUseCase';\nimport { ProductComparisonViewedUseCase } from '../internal/use-cases/ProductComparisonViewedUseCase';\nimport { SocialShareIconTriggeredUseCase } from '../internal/use-cases/SocialShareIconTriggeredUseCase';\nimport { StoreBookVirtualAppointmentClickedUseCase } from '../internal/use-cases/StoreBookVirtualAppointmentClickedUseCase';\nimport { SkuPickerInteractionUseCase } from '../internal/use-cases/SkuPickerInteractionUseCase';\nimport { AccountSidebarMenuOptionClickedUseCase } from '../internal/use-cases/AccountSidebarMenuOptionClickedUseCase';\nimport { AccountSidebarShowcaseClickedUseCase } from '../internal/use-cases/AccountSidebarShowcaseClickedUseCase';\nimport { AccountEventAction } from '../constants/Account';\nimport { AppointmentVirtualSelectedUseCase } from '../internal/use-cases/AppointmentVirtualSelectedUseCase';\nimport { AppointmentServiceSelectedUseCase } from '../internal/use-cases/AppointmentServiceSelectedUseCase';\nimport { AppointmentDateTimeSelectedUseCase } from '../internal/use-cases/AppointmentDateTimeSelectedUseCase';\nimport { AppointmentEditClickedUseCase } from '../internal/use-cases/AppointmentEditClickedUseCase';\nimport { AppointmentStartedOverUseCase } from '../internal/use-cases/AppointmentStartedOverUseCase';\nimport { AppointmentArtistSelectedUseCase } from '../internal/use-cases/AppointmentArtistSelectedUseCase';\nimport { AppointmentStepLoadedUseCase } from '../internal/use-cases/AppointmentStepLoadedUseCase';\nimport { AppointmentProcessCompletedUseCase } from '../internal/use-cases/AppointmentProcessCompletedUseCase';\nimport { AppointmentAddedToCalendarUseCase } from '../internal/use-cases/AppointmentAddedToCalendarUseCase';\n\nimport {\n SearchProductsQueriedUseCase,\n ISearchProductsQueried\n} from '../internal/use-cases/SearchProductsQueriedUseCase';\nimport {\n SearchTermSelectedUseCase,\n ISearchTermSelected\n} from '../internal/use-cases/SearchTermSelectedUseCase';\nimport { VTOActionUseCase } from '../internal/use-cases/VTOActionUseCase';\n\nimport * as routes from '../constants/Routes';\nimport { ProductNotifyMeTriggeredUseCase } from '../internal/use-cases/ProductNotifyMeTriggeredUseCase';\nimport { ProductNotifyMeRequestCompletedUseCase } from '../internal/use-cases/ProductNotifyMeRequestCompletedUseCase';\n\nimport {\n IAccountSidebarBaseData,\n IAccountSidebarShowcaseData,\n IGenericAnalyticsData,\n IProductViewed,\n IProductImpressions,\n IReviewsData,\n ISmartGiftData,\n ISkinCareProducts,\n IVtoType\n} from '../internal/interfaces/IAnalytics';\nimport { RatingsReviewsUseCase } from '../internal/use-cases/RatingsReviewsUseCase';\n\nimport { ReviewsEventAction } from '../constants/RatingsReviews';\nimport { SmartGiftUseCase } from '../internal/use-cases/SmartGiftUseCase';\nimport { SmartGiftEventAction } from '../constants/SmartGift';\nimport { VTO_EVENTS, YOUCAM, YOUCAM_SKINCARE } from '../constants/Vto';\nimport { ActionType } from '../constants/ActionType';\nimport { IOfferViewedProps, OfferViewed } from '../internal/use-cases/OfferViewed';\nimport { IOfferClickedProps, OfferClicked } from '../internal/use-cases/OfferClicked';\nimport { CartTabTabClicked } from '../internal/use-cases/OffersTabClicked';\nimport { CartOverlayClosed } from '../internal/use-cases/CartOverlayClosed';\nimport { CartOverlayOpened } from '../internal/use-cases/CartOverlayOpened';\nimport { AppointmentLocationSelectedUseCase } from '../internal/use-cases/AppointmentLocationSelectedUseCase';\n\nexport interface IOrderDetail {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface IOrderQueryData {\n orderId: string;\n guestToken: string;\n paymentType: string;\n}\n\nconst SHIPPING_SCREEN_SHIPPING_ADDRESS_SELECTION_CONTEXT =\n 'checkout_shipping_screen_shipping_address_selection';\nconst QUICK_VIEW = 'QV';\n\nexport class ServiceBusController {\n private orderQueryData: IOrderQueryData;\n\n constructor() {\n diContainer.get(serviceNames.outboundLinkListener).init();\n }\n\n @on(events.ANALYTICS_LOADED)\n public analyticsLoaded = () => {\n const analyticsLoadedUseCase = new AnalyticsLoadedUseCase();\n analyticsLoadedUseCase.execute();\n };\n\n @on(events.PRODUCT_FULL_VIEWED)\n public productViewedUseCase = (payload: IProductViewed) => {\n new ProductViewedUseCase(payload).execute();\n };\n\n @on(events.PRODUCT_GRID_VIEWED)\n public productImpressionUseCase = (payload: IProductImpressions) => {\n new ProductImpressionsUseCase(payload).execute();\n };\n\n @on(events.STORE_DETAILS_CLICKED)\n public StoreDetailsClicked = (payload: { storeId: string; storeName: string }) => {\n const storeLocatorClickedUseCase = new StoreLocatorClickedUseCase(\n payload.storeId,\n payload.storeName,\n events.STORE_DETAILS_CLICKED\n );\n storeLocatorClickedUseCase.execute();\n };\n\n @on(events.GET_DIRECTIONS_CLICKED)\n public GetDirectionsClicked = (payload: { storeId: string; storeName: string }) => {\n const getDirectionsClickedUseCase = new StoreLocatorClickedUseCase(\n payload.storeId,\n payload.storeName,\n events.GET_DIRECTIONS_CLICKED\n );\n getDirectionsClickedUseCase.execute();\n };\n\n @on(events.STORE_INFO_CLICKED)\n public StoreInfoClicked = (payload: { storeId: string; storeName: string }) => {\n const storeInfoClickedUseCase = new StoreLocatorClickedUseCase(\n payload.storeId,\n payload.storeName,\n events.STORE_INFO_CLICKED\n );\n storeInfoClickedUseCase.execute();\n };\n\n @on(events.STORE_MARKER_CLICKED)\n public StoreMarkerClicked = (payload: { storeId: string }) => {\n const storeMarkerClickedUseCase = new StoreMarkerClickedUseCase(payload.storeId);\n storeMarkerClickedUseCase.execute();\n };\n\n @on(events.STORE_PHONE_CLICKED)\n public StorePhoneClicked = (payload: { storeId: string; storeName: string }) => {\n const storePhoneClickedUseCase = new StoreLocatorClickedUseCase(\n payload.storeId,\n payload.storeName,\n events.STORE_PHONE_CLICKED\n );\n storePhoneClickedUseCase.execute();\n };\n\n @on(events.BOOK_APPOINTMENT_CLICKED)\n public BookAppointmentClicked = (payload: { storeId: string; storeName: string }) => {\n const bookAppointmentClickedUseCase = new StoreLocatorClickedUseCase(\n payload.storeId,\n payload.storeName,\n events.BOOK_APPOINTMENT_CLICKED\n );\n bookAppointmentClickedUseCase.execute();\n };\n\n @on(events.BOOK_VIRTUAL_APPOINTMENT_CLICKED)\n public BookVirtualAppointmentClicked = (payload: { isVirtual: boolean }) => {\n const bookVirtualAppointmentClickedUseCase = new StoreBookVirtualAppointmentClickedUseCase(\n payload.isVirtual,\n events.BOOK_VIRTUAL_APPOINTMENT_CLICKED\n );\n bookVirtualAppointmentClickedUseCase.execute();\n };\n\n @on(events.STORE_LOCATION_SELECTED)\n public StoreLocationSelected = (payload: { storeId: string }) => {\n const storeLocationSelectedUseCase = new StoreLocationSelectedUseCase(payload.storeId);\n storeLocationSelectedUseCase.execute();\n };\n\n @on(events.STORE_TOWN_SELECTED)\n public StoreTownSelected = (payload: { town: string }) => {\n const storeTownSelectedUseCase = new StoreTownSelectedUseCase(payload.town);\n storeTownSelectedUseCase.execute();\n };\n\n @on(events.SEARCH_ADDRESS_SUBMITTED)\n public SearchAddressSubmitted = (payload: { address: string }) => {\n const searchAddressSubmittedUseCase = new SearchAddressSubmittedUseCase(payload.address);\n searchAddressSubmittedUseCase.execute();\n };\n\n @on(events.PAYMENT_SUBMITTING)\n public trackOrderDetails = (orderQueryData: IOrderQueryData) => {\n this.orderQueryData = orderQueryData;\n };\n\n @on(events.CREATE_ACCOUNT_SUCCESS)\n public createAccountSuccess = async (payload: {}) => {\n const createAccountSuccessUseCase = new CreateAccountSuccessUseCase();\n createAccountSuccessUseCase.execute();\n };\n\n @on(events.CREATE_ACCOUNT_ATTEMPT)\n public createAccountAttempt = (payload: {}) => {\n const createAccountAttemptUseCase = new CreateAccountAttemptUseCase();\n createAccountAttemptUseCase.execute();\n };\n\n @on(events.REMOVE_ITEM)\n public removeItem = async (payload: { skuId: string; quantity: number }) => {\n const removeItemUseCase = new RemoveItemUseCase(payload.skuId);\n removeItemUseCase.execute();\n };\n\n @on(events.CREATE_ACCOUNT_FAIL)\n public createAccountFail = (error: string) => {\n const createAccountFailUseCase = new CreateAccountFailUseCase(error);\n createAccountFailUseCase.execute();\n };\n\n @on(events.AUTH_FAILED)\n public authFailed = async (error: string) => {\n const authFailedUseCase = new AuthFailedUseCase(error);\n authFailedUseCase.execute();\n };\n\n @on(events.AUTH_ATTEMPT)\n public authAttempt = async (payload: {}) => {\n const authAttemptUseCase = new AuthAttemptUseCase();\n authAttemptUseCase.execute();\n };\n\n @on(events.MANUAL_OFFER_CODE_APPLIED)\n public applyOfferCode = async () => {\n const manualOfferCodeAppliedUseCase = new ManualOfferCodeAppliedUseCase();\n manualOfferCodeAppliedUseCase.execute();\n };\n\n @on(events.OFFER_CODE_FAILED)\n public offerCodeFailed = async () => {\n const manualOfferCodeAppliedUseCase = new ManualOfferCodeAppliedUseCase();\n manualOfferCodeAppliedUseCase.execute();\n };\n\n @on(events.PRODUCT_CLICKED)\n public productClicked = async (payload: {\n skuId: string;\n pageType: string;\n positionIndex: number;\n }) => {\n const { skuId, positionIndex } = payload;\n const pageType = '';\n const productClickedUseCase = new ProductClickedUseCase(skuId, pageType, positionIndex);\n productClickedUseCase.execute();\n };\n\n @on(events.PRODUCT_NOTIFY_ME_TRIGGERED)\n public productNotifyMeTriggered = async (payload: { skuId: string }) => {\n const productNotifyMeTriggeredUseCase = new ProductNotifyMeTriggeredUseCase(payload.skuId);\n productNotifyMeTriggeredUseCase.execute();\n };\n\n @on(events.PRODUCT_NOTIFY_ME_REQUEST_SUCCESS)\n public productNotifyMeRequestSuccess = async (payload: { skuId: string }) => {\n const eventAction = 'notify me - success';\n\n const productNotifyMeRequestCompletedUseCase = new ProductNotifyMeRequestCompletedUseCase(\n payload.skuId,\n events.PRODUCT_NOTIFY_ME_REQUEST_SUCCESS,\n eventAction\n );\n productNotifyMeRequestCompletedUseCase.execute();\n };\n\n @on(events.PRODUCT_NOTIFY_ME_REQUEST_FAILURE)\n public productNotifyMeRequestFailure = async (payload: { skuId: string }) => {\n const eventAction = 'notify me - fail';\n\n const productNotifyMeRequestCompletedUseCase = new ProductNotifyMeRequestCompletedUseCase(\n payload.skuId,\n events.PRODUCT_NOTIFY_ME_REQUEST_FAILURE,\n eventAction\n );\n productNotifyMeRequestCompletedUseCase.execute();\n };\n\n @on(events.ITEM_ADDED)\n public itemAdded = async (payload: { skuId: string }) => {\n const itemAddedUseCase = new ItemAddedUseCase(payload.skuId);\n itemAddedUseCase.execute();\n };\n\n @on(events.SAMPLE_ADDED)\n public sampleAdded = async () => {\n const sampleAddedUseCase = new SampleAddedUseCase();\n sampleAddedUseCase.execute();\n };\n\n @on(events.SHIPPING_OPTION_SELECTED)\n public shippingOptionSelected = (payload: {}) => {\n const shippingOptionSelectedUseCase = new ShippingOptionSelectedUseCase();\n shippingOptionSelectedUseCase.execute();\n };\n\n @on(events.CART_LOGGED_IN)\n public cartLoggedIn = (payload: {}) => {\n const cartLoggedInUseCase = new CartLoggedInUseCase();\n cartLoggedInUseCase.execute();\n };\n\n @on(events.LOGGED_IN_SUCCESSFUL)\n public loggedInSuccessful = async (payload: {}) => {\n const loggedInSuccessfulUseCase = new LoggedInSuccessfulUseCase();\n loggedInSuccessfulUseCase.execute();\n };\n\n @on(events.ADDRESS_SELECTION_CHANGED)\n public shippingAddressFilled = ({ context }: { context: string }) => {\n if (context === SHIPPING_SCREEN_SHIPPING_ADDRESS_SELECTION_CONTEXT) {\n const shippingAddressFilledUseCase = new ShippingAddressFilledUseCase();\n shippingAddressFilledUseCase.execute();\n }\n };\n\n @on(events.ORDER_CREATED)\n public paymentMethodCompleted = (payload: {}) => {\n const paymentMethodCompletedUseCase = new PaymentMethodCompletedUseCase();\n paymentMethodCompletedUseCase.execute();\n };\n\n @on(events.ORDER_CONFIRMATION_VIEW)\n public orderConfirmationPageLanded = async (payload: IOrderDetail) => {\n const orderConfirmationPageLandedUseCase = new OrderConfirmationPageLandedUseCase(payload);\n orderConfirmationPageLandedUseCase.execute();\n };\n\n @on(events.SUBSCRIBED_FOR_EMAILS)\n public subscribedForEvents = () => {\n const subscribedForEventsUseCase = new SubscribedForEmailsUseCase();\n subscribedForEventsUseCase.execute();\n };\n\n @on(events.OUTBOUND_CLICKED)\n public outboundClicked = (url: string) => {\n const outboundClickedUseCase = new OutboundClickedUseCase(url);\n outboundClickedUseCase.execute();\n };\n\n @on(events.CART_PAGE_VIEW)\n public cartPageView = async (payload: {}) => {\n const cartLandingPageViewedUseCase = new CartLandingPageViewedUseCase();\n cartLandingPageViewedUseCase.execute();\n };\n\n @on(events.TRANSACTION_FAILED)\n public transactionFailed = () => {\n const transactionFailedUseCase = new TransactionFailedUseCase(this.orderQueryData);\n transactionFailedUseCase.execute();\n };\n\n @on(events.TRANSACTION_SUCCEDED)\n public transactionSucceded = () => {\n const transactionSuccededUseCase = new TransactionSuccededUseCase(this.orderQueryData);\n transactionSuccededUseCase.execute();\n };\n\n @on(events.MPP_FILTERED)\n public filterMpp = async (payload: { method: string }) => {\n const mppFilteredUseCase = new MppFilteredUseCase(payload.method);\n mppFilteredUseCase.execute();\n };\n\n @on(events.GRID_FILTERED)\n public filterGrid = async (payload: { appliedFilters: IAnalyticsFilters[] }) => {\n const gridFilteredUseCase = new GridFilteredUseCase(payload.appliedFilters);\n gridFilteredUseCase.execute();\n };\n\n @on(events.GRID_SORTED)\n public sortGrid = async (payload: { appliedSort: string }) => {\n const sortFilteredUseCase = new GridSortedUseCase(payload.appliedSort);\n sortFilteredUseCase.execute();\n };\n\n @on(events.QUICK_VIEW_TRIGGERED)\n public quickViewSelected = (payload: { skuId: string; positionIndex: number }) => {\n const pageType = QUICK_VIEW;\n const { skuId, positionIndex } = payload;\n const quickViewSelectedUseCase = new QuickViewUseCase(skuId);\n const productClickedUseCase = new ProductClickedUseCase(skuId, pageType, positionIndex);\n quickViewSelectedUseCase.execute();\n productClickedUseCase.execute();\n };\n\n @on(events.CART_OVERLAY_CLOSED)\n public cartOverlayClosed = async () => new CartOverlayClosed().execute();\n\n @on(events.CART_OVERLAY_OPENED)\n public cartOverlayOpened = async () => new CartOverlayOpened().execute();\n\n @on(events.CART_OVERLAY_TAB_CLICKED)\n public cartTabClicked = async ({ tabId }: { tabId: string }) => {\n const payload = { tabId, event: events.CART_OVERLAY_TAB_CLICKED };\n new CartTabTabClicked(payload).execute();\n };\n\n @on(events.CART_OVERLAY_OFFER_CLICKED)\n public cartOverlayOfferClicked = async (payload: IOfferClickedProps) => {\n new OfferClicked(payload).execute();\n };\n\n @on(events.CART_OVERLAY_OFFER_VIEWED)\n public cartOverlayOfferViewed = async (payload: IOfferViewedProps) => {\n new OfferViewed(payload).execute();\n };\n\n @on(events.PRODUCT_SHADE_GROUP_SELECTED)\n public shadeGroupSelected = (payload: {\n shadeGroupKey: string;\n eventName: string;\n eventAction: string;\n }) => {\n const { shadeGroupKey, eventName, eventAction } = payload;\n const shadeGroupSelectedUseCase = new ShadeGroupSelectedUseCase(\n shadeGroupKey,\n eventName,\n eventAction\n );\n shadeGroupSelectedUseCase.execute();\n };\n\n @on(events.PRODUCT_COMPARISON_VIEWED)\n public productComparisonViewed = (payload: { productIds: string[] }) => {\n const { productIds } = payload;\n const productComparisonViewedUseCase = new ProductComparisonViewedUseCase(productIds);\n productComparisonViewedUseCase.execute();\n };\n\n @on(events.SEARCH_PRODUCTS_QUERIED)\n public searchProductsQueried = (payload: ISearchProductsQueried) => {\n const searchProductsQueriedUseCase = new SearchProductsQueriedUseCase(payload);\n searchProductsQueriedUseCase.execute();\n };\n\n @on(events.SEARCH_TERM_SELECTED)\n public searchTermSelected = (payload: ISearchTermSelected) => {\n const searchTermSelectedUseCase = new SearchTermSelectedUseCase(payload);\n searchTermSelectedUseCase.execute();\n };\n\n @on(events.NAVIGATE)\n public navigatedToPageView = async ({ currentRoute }: { currentRoute: string }) => {\n switch (currentRoute) {\n case routes.ACCOUNT_LANDING:\n case routes.LOGIN:\n const accountPageLandedUseCase = new AccountPageLandedUseCase();\n accountPageLandedUseCase.execute();\n break;\n\n case routes.SHIPPING:\n const shippingPageViewedUseCase = new ShippingPageViewedUseCase();\n shippingPageViewedUseCase.execute();\n break;\n\n case routes.PAYMENT:\n const paymentPageViewedUseCase = new PaymentPageViewedUseCase();\n paymentPageViewedUseCase.execute();\n break;\n\n default:\n return;\n }\n };\n\n @on(events.VTO_CAMERA_CLOSED)\n public vtoCameraClosed = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.CAMERA_CLOSED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoCameraClosedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoCameraClosedUseCase.execute();\n };\n\n @on(events.VTO_CAMERA_FAILED)\n public vtoCameraFailed = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.CAMERA_FAILED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoCameraFailedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoCameraFailedUseCase.execute();\n };\n\n @on(events.VTO_CAMERA_OPENED)\n public vtoCameraOpened = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.CAMERA_OPENED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoCameraOpenedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoCameraOpenedUseCase.execute();\n };\n\n @on(events.VTO_COMPARE)\n public vtoCompare = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.COMPARE,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoCompareUseCase = new VTOActionUseCase(vtoAction);\n\n vtoCompareUseCase.execute();\n };\n\n @on(events.VTO_COMPARE_DISABLED)\n public vtoCompareDisabled = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.COMPARE_DISABLED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoCompareDisabledUseCase = new VTOActionUseCase(vtoAction);\n\n vtoCompareDisabledUseCase.execute();\n };\n\n @on(events.VTO_CLOSED)\n public vtoClosed = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.CLOSED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoClosedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoClosedUseCase.execute();\n };\n\n @on(events.VTO_ENGINE_CLOSED)\n public vtoEngineClosed = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.ENGINE_CLOSED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoEngineClosedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoEngineClosedUseCase.execute();\n };\n\n @on(events.VTO_FOUNDATION_QR_CODE_OVERLAY_CLOSED)\n public vtoFoundationQrCodeOverlayClosed = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.FOUNDATION_QR_CODE_OVERLAY_CLOSED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoFoundationQrCodeOverlayClosedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoFoundationQrCodeOverlayClosedUseCase.execute();\n };\n\n @on(events.VTO_FOUNDATION_QR_CODE_OVERLAY_OPENED)\n public vtoFoundationQrCodeOverlayOpened = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.FOUNDATION_QR_CODE_OVERLAY_OPENED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoFoundationQrCodeOverlayOpenedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoFoundationQrCodeOverlayOpenedUseCase.execute();\n };\n\n @on(events.VTO_LOADED)\n public vtoLoaded = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.LOADED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoLoadedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoLoadedUseCase.execute();\n };\n\n @on(events.VTO_LOADING)\n public vtoLoading = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.LOADING,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoLoadingUseCase = new VTOActionUseCase(vtoAction);\n\n vtoLoadingUseCase.execute();\n };\n\n @on(events.VTO_KISS_DETECTED)\n public vtoKissDetected = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.KISS_DETECTED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoKissDetectedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoKissDetectedUseCase.execute();\n };\n\n @on(events.VTO_OPENED)\n public vtoOpened = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.OPENED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoOpenedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoOpenedUseCase.execute();\n };\n\n @on(events.VTO_PAIR_SHADE_GRID_OPENED)\n public vtoPairShadeGridOpened = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.PAIR_SHADE_GRID_OPENED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoOpenedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoOpenedUseCase.execute();\n };\n\n @on(events.VTO_PAIR_SHADE_SELECTED)\n public vtoPairShadeSelected = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.PAIR_SHADE_SELECTED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoOpenedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoOpenedUseCase.execute();\n };\n\n @on(events.VTO_PHOTO_LOADED)\n public vtoPhotoLoaded = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.PHOTO_LOADED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoPhotoLoadedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoPhotoLoadedUseCase.execute();\n };\n\n @on(events.VTO_PHOTO_SAVED)\n public vtoPhotoSaved = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.PHOTO_SAVED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoPhotoSavedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoPhotoSavedUseCase.execute();\n };\n\n @on(events.VTO_PRICE_SUPPRESSED)\n public vtoPriceSuppressed = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.PRICE_SUPPRESSED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoPriceSuppressedUsedCase = new VTOActionUseCase(vtoAction);\n\n vtoPriceSuppressedUsedCase.execute();\n };\n\n @on(events.VTO_RESET)\n public vtoReset = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.RESET,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoResetUseCase = new VTOActionUseCase(vtoAction);\n\n vtoResetUseCase.execute();\n };\n\n @on(events.VTO_VIDEO_LOADED)\n public vtoVideoLoaded = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.VIDEO_LOADED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoVideoLoadedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoVideoLoadedUseCase.execute();\n };\n\n @on(events.VTO_ALL_SHADES_VIEWED)\n public vtoViewAllShades = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.ALL_SHADES_VIEWED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoViewAllShadesUseCase = new VTOActionUseCase(vtoAction);\n\n vtoViewAllShadesUseCase.execute();\n };\n\n @on(events.VTO_BEST_SHADES_VIEWED)\n public vtoViewBestShades = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.BEST_SHADES_VIEWED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoViewBestShadesUseCase = new VTOActionUseCase(vtoAction);\n\n vtoViewBestShadesUseCase.execute();\n };\n\n @on(events.VTO_SHADE_FINDER_STARTED)\n public vtoShadeFinderStarted = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.SHADE_FINDER_STARTED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoShadeFinderStartedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoShadeFinderStartedUseCase.execute();\n };\n\n @on(events.VTO_SHADE_FINDER_COMPLETED)\n public vtoShadeFinderCompleted = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.SHADE_FINDER_COMPLETED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoShadeFinderCompletedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoShadeFinderCompletedUseCase.execute();\n };\n\n @on(events.VTO_SHADE_FINDER_CANCELLED)\n public vtoShadeFinderCancelled = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.SHADE_FINDER_CANCELLED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoShadeFinderCancelledUseCase = new VTOActionUseCase(vtoAction);\n\n vtoShadeFinderCancelledUseCase.execute();\n };\n\n @on(events.VTO_SKIN_SHADE_FOUND)\n public vtoSkinShadeFound = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.SKIN_SHADE_FOUND,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoSkinShadeFoundUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinShadeFoundUseCase.execute();\n };\n\n @on(events.VTO_ZOOM)\n public vtoZoom = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.ZOOM,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoZoomUseCase = new VTOActionUseCase(vtoAction);\n\n vtoZoomUseCase.execute();\n };\n\n @on(events.VTO_MATCH_SAVED)\n public vtoMatchSaved = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.MATCH_SAVED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoMatchSavedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoMatchSavedUseCase.execute();\n };\n\n @on(events.VTO_MATCH_REMOVED)\n public vtoMatchRemoved = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.MATCH_REMOVED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoMatchRemovedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoMatchRemovedUseCase.execute();\n };\n\n @on(events.VTO_MATCH_PERSONALIZED)\n public vtoMatchPersonalized = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.MATCH_PERSONALIZED,\n pageType: YOUCAM,\n vtoType: payload.vtoType\n };\n const vtoMatchPersonalizedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoMatchPersonalizedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_CARE_OPENED)\n public vtoSkinCareOpened = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.OPENED,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareOpenedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareOpenedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_CARE_CAMERA_OPENED)\n public vtoSkinCareCameraOpened = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.CAMERA_OPENED,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareCameraOpenedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareCameraOpenedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_CARE_CAMERA_FAILED)\n public vtoSkinCareCameraFailed = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.CAMERA_FAILED,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareCameraFailedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareCameraFailedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_CARE_CAMERA_CLOSED)\n public vtoSkinCareCameraClosed = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.CAMERA_CLOSED,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareCameraClosedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareCameraClosedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_CARE_LOADING)\n public vtoSkinCareLoading = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.LOADING,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareLoadingUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareLoadingUseCase.execute();\n };\n\n @on(events.VTO_SKIN_CARE_LOADED)\n public vtoSkinCareLoaded = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.LOADED,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareLoadedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareLoadedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_CARE_VIDEO_LOADED)\n public vtoSkinCareVideoLoaded = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.VIDEO_LOADED,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareVideoLoadedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareVideoLoadedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_ANALYSIS_STARTED)\n public vtoSkinCareAnalysisStarted = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.SKIN_ANALYSIS_STARTED,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareAnalysisStartedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareAnalysisStartedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_ANALYSIS_FINISHED)\n public vtoSkinCareAnalysisFinished = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.SKIN_ANALYSIS_FINISHED,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareAnalysisFinishedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareAnalysisFinishedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_BACK_TO_DETECTING)\n public vtoSkinCareBackToDetecting = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.SKIN_BACK_TO_DETECTING,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareBackToDetectingUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareBackToDetectingUseCase.execute();\n };\n\n @on(events.VTO_SKIN_CARE_CLOSED)\n public vtoSkinCareClosed = (payload: IVtoType) => {\n const vtoAction = {\n event: VTO_EVENTS.CLOSED,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareClosedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareClosedUseCase.execute();\n };\n\n @on(events.VTO_SKIN_CARE_PRODUCTS_LOADED)\n public vtoSkinCareProductsLoaded = (payload: ISkinCareProducts) => {\n const { SHOPPABLE_PRODUCTS_LOADED, NON_SHOPPABLE_PRODUCTS_LOADED } = VTO_EVENTS;\n const event = payload.isShoppable\n ? SHOPPABLE_PRODUCTS_LOADED\n : NON_SHOPPABLE_PRODUCTS_LOADED;\n const vtoAction = {\n event,\n pageType: YOUCAM_SKINCARE,\n vtoType: payload.vtoType\n };\n const vtoSkinCareProductsLoadedUseCase = new VTOActionUseCase(vtoAction);\n\n vtoSkinCareProductsLoadedUseCase.execute();\n };\n\n @on(events.SKU_ENGRAVING_TRIGGERED)\n public engravingTriggered = (payload: {\n skuId: string;\n skuBaseId?: number;\n size: string;\n price: string;\n name: string;\n }) => {\n const skuEngravingUseCase = new SkuEngravingUseCase(payload);\n skuEngravingUseCase.execute();\n };\n\n @on(events.WRITE_REVIEWS_LINK_CLICKED)\n public writeReviewEventTriggered = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.WRITE_REVIEWS_LINK_CLICKED, {\n ...payload,\n eventAction: ReviewsEventAction.WRITE_REVIEW\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.READ_REVIEWS_LINK_CLICKED)\n public readReviewsEventTriggered = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.WRITE_REVIEWS_LINK_CLICKED, {\n ...payload,\n eventAction: ReviewsEventAction.READ_REVIEW\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.REVIEWS_HELPFUL_YES_CLICKED)\n public reviewsHelpfulYesClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(\n events.REVIEWS_HELPFUL_YES_CLICKED,\n {\n ...payload,\n eventAction: ReviewsEventAction.HELPFUL_YES\n }\n );\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.REVIEWS_HELPFUL_NO_CLICKED)\n public reviewsHelpfulNoClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.REVIEWS_HELPFUL_NO_CLICKED, {\n ...payload,\n eventAction: ReviewsEventAction.HELPFUL_NO\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.REVIEWS_FLAG_REVIEW_CLICKED)\n public reviewsFlagReviewClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(\n events.REVIEWS_FLAG_REVIEW_CLICKED,\n {\n ...payload,\n eventAction: ReviewsEventAction.FLAG_REVIEW\n }\n );\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.REVIEWS_FILTER_CLICKED)\n public reviewsFilterClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.REVIEWS_FILTER_CLICKED, {\n ...payload,\n eventAction: ReviewsEventAction.REVIEWS_FILTER\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.REVIEWS_SEARCH_CLICKED)\n public reviewsSearchClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.REVIEWS_SEARCH_CLICKED, {\n ...payload,\n eventAction: ReviewsEventAction.REVIEWS_SEARCH\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.ASK_AND_ANSWER_CLICKED)\n public askAndAnswerClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.ASK_AND_ANSWER_CLICKED, {\n ...payload,\n eventAction: ReviewsEventAction.ASK_AND_ANSWER\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.ASK_AND_ANSWER_SUBMITTED)\n public askAndAnswerSubmitted = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.ASK_AND_ANSWER_SUBMITTED, {\n ...payload,\n eventAction: ReviewsEventAction.ASK_AND_ANSWER_SUBMIT\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.ASK_AND_ANSWER_SEARCH_CLICKED)\n public askAndAnswerSearchClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(\n events.ASK_AND_ANSWER_SEARCH_CLICKED,\n {\n ...payload,\n eventAction: ReviewsEventAction.ASK_AND_ANSWER_SEARCH\n }\n );\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.ASK_AND_ANSWER_HELPFUL_YES_CLICKED)\n public askAndAnswerHelpfulYesClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(\n events.ASK_AND_ANSWER_HELPFUL_YES_CLICKED,\n {\n ...payload,\n eventAction: ReviewsEventAction.ASK_AND_ANSWER_HELPFUL_YES\n }\n );\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.ASK_AND_ANSWER_HELPFUL_NO_CLICKED)\n public askAndAnswerHelpfulNoClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(\n events.ASK_AND_ANSWER_HELPFUL_NO_CLICKED,\n {\n ...payload,\n eventAction: ReviewsEventAction.ASK_AND_ANSWER_HELPFUL_NO\n }\n );\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.ASK_AND_ANSWER_SHOW_MORE_CLICKED)\n public askAndAnswerShowMoreClicked = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(\n events.ASK_AND_ANSWER_SHOW_MORE_CLICKED,\n {\n ...payload,\n eventAction: ReviewsEventAction.ASK_AND_ANSWER_SHOW_MORE\n }\n );\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.REVIEWS_SORT_BY_CHANGED)\n public reviewsSortByChanged = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.REVIEWS_SORT_BY_CHANGED, {\n ...payload,\n eventAction: ReviewsEventAction.REVIEW_SORT\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.ASK_AND_ANSWERS_SORT_BY_CHANGED)\n public askAndAnswerSortByChanged = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(\n events.ASK_AND_ANSWERS_SORT_BY_CHANGED,\n {\n ...payload,\n eventAction: ReviewsEventAction.ASK_AND_ANSWER_SORT\n }\n );\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.WRITE_REVIEW_STARTED)\n public writeReviewStarted = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.WRITE_REVIEW_STARTED, {\n ...payload,\n eventAction: ReviewsEventAction.WRITE_REVIEW\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.REVIEW_OVERLAY_OPENED)\n public reviewOverlayOpened = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.REVIEW_OVERLAY_OPENED, {\n ...payload,\n eventAction: ReviewsEventAction.REVIEW_OVERLAY_OPEN\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.REVIEW_OVERLAY_CLOSED)\n public reviewOverlayClosed = (payload: IReviewsData) => {\n const ratingsReviewsUseCase = new RatingsReviewsUseCase(events.REVIEW_OVERLAY_CLOSED, {\n ...payload,\n eventAction: ReviewsEventAction.REVIEW_OVERLAY_CLOSE\n });\n ratingsReviewsUseCase.execute();\n };\n\n @on(events.SMARTGIFT_ADDED)\n public smartGiftAdded = (payload: ISmartGiftData) => {\n const smartGiftUseCase = new SmartGiftUseCase(events.SMARTGIFT_ADDED, {\n ...payload,\n eventAction: SmartGiftEventAction.SMARTGIFT_ADDED\n });\n smartGiftUseCase.execute();\n };\n\n @on(events.SMARTGIFT_VIEWED)\n public smartGiftViewed = (payload: ISmartGiftData) => {\n const smartGiftUseCase = new SmartGiftUseCase(events.SMARTGIFT_VIEWED, {\n ...payload,\n eventAction: SmartGiftEventAction.SMARTGIFT_VIEWED\n });\n smartGiftUseCase.execute();\n };\n\n @on(events.SMARTGIFT_PREPARED)\n public smartGiftPrepared = (payload: ISmartGiftData) => {\n const smartGiftUseCase = new SmartGiftUseCase(events.SMARTGIFT_PREPARED, {\n ...payload,\n eventAction: SmartGiftEventAction.SMARTGIFT_PREPARED\n });\n smartGiftUseCase.execute();\n };\n\n @on(events.SMARTGIFT_WIDGET_TOGGLED)\n public smartGiftWidgetToggled = (payload: ISmartGiftData) => {\n const smartGiftUseCase = new SmartGiftUseCase(events.SMARTGIFT_WIDGET_TOGGLED, {\n ...payload,\n eventAction: SmartGiftEventAction.SMARTGIFT_WIDGET_TOGGLED\n });\n smartGiftUseCase.execute();\n };\n\n @on(events.SMARTGIFT_REMOVED)\n public smartGiftRemoved = (payload: ISmartGiftData) => {\n const smartGiftUseCase = new SmartGiftUseCase(events.SMARTGIFT_REMOVED, {\n ...payload,\n eventAction: SmartGiftEventAction.SMARTGIFT_REMOVED\n });\n smartGiftUseCase.execute();\n };\n\n @on(events.SMARTGIFT_CANCELLED)\n public smartGiftCancelled = (payload: ISmartGiftData) => {\n const smartGiftUseCase = new SmartGiftUseCase(events.SMARTGIFT_CANCELLED, {\n ...payload,\n eventAction: SmartGiftEventAction.SMARTGIFT_CANCELLED\n });\n smartGiftUseCase.execute();\n };\n\n @on(events.SMARTGIFT_HELP_OPENED)\n public smartgiftHelpOpen = (payload: ISmartGiftData) => {\n const smartGiftUseCase = new SmartGiftUseCase(events.SMARTGIFT_HELP_OPENED, {\n ...payload,\n eventAction: SmartGiftEventAction.SMARTGIFT_HELP_OPENED\n });\n smartGiftUseCase.execute();\n };\n\n @on(events.SMARTGIFT_HELP_CLOSED)\n public smartgiftHelpClosed = (payload: ISmartGiftData) => {\n const smartGiftUseCase = new SmartGiftUseCase(events.SMARTGIFT_HELP_CLOSED, {\n ...payload,\n eventAction: SmartGiftEventAction.SMARTGIFT_HELP_CLOSED\n });\n smartGiftUseCase.execute();\n };\n\n @on(events.ACCOUNT_SIDEBAR_MENU_LINK_CLICKED)\n public accountSidebarMenuClicked = (payload: IAccountSidebarBaseData) => {\n const accountSidebarUseCase = new AccountSidebarMenuOptionClickedUseCase({\n ...payload,\n eventAction: AccountEventAction.ACCOUNT_SIDEBAR_MENU_CLICKED\n });\n accountSidebarUseCase.execute();\n };\n\n @on(events.ACCOUNT_SIDEBAR_LOYALTY_LINK_CLICKED)\n public accountSidebarLoyaltyClicked = (payload: IAccountSidebarBaseData) => {\n const accountSidebarUseCase = new AccountSidebarMenuOptionClickedUseCase({\n ...payload,\n eventAction: AccountEventAction.ACCOUNT_SIDEBAR_LOYALTY_CLICKED\n });\n accountSidebarUseCase.execute();\n };\n\n @on(events.ACCOUNT_SIDEBAR_SHOWCASE_LINK_CLICKED)\n public accountSidebarShowcaseClicked = (payload: IAccountSidebarShowcaseData) => {\n const accountSidebarUseCase = new AccountSidebarShowcaseClickedUseCase({\n ...payload,\n eventAction: AccountEventAction.ACCOUNT_SIDEBAR_SHOWCASE_CLICKED\n });\n accountSidebarUseCase.execute();\n };\n\n @on(events.LIVE_CHAT_INTERFACE_CLICKED)\n public liveChatInterfaceClicked = (payload: IGenericAnalyticsData) => {\n const liveChatInterfaceClicked = new LiveChatInterfaceClickedUseCase(payload);\n liveChatInterfaceClicked.execute();\n };\n\n @on(events.SOCIAL_SHARE_ICON_TRIGGERED)\n public socialShareIconTriggered = (payload: IGenericAnalyticsData) => {\n const socialShareIconTriggered = new SocialShareIconTriggeredUseCase(payload);\n socialShareIconTriggered.execute();\n };\n\n @on(events.SKU_PICKER_OPENED)\n public skuPickerOpened = (payload: { productId: string }) => {\n const { productId } = payload;\n const skuPickerOpened = new SkuPickerInteractionUseCase(productId, ActionType.OPEN);\n skuPickerOpened.execute();\n };\n\n @on(events.SKU_PICKER_CLOSED)\n public skuPickerClosed = (payload: { productId: string }) => {\n const { productId } = payload;\n const skuPickerClosed = new SkuPickerInteractionUseCase(productId, ActionType.CLOSE);\n skuPickerClosed.execute();\n };\n\n @on(events.APPOINTMENT_VIRTUAL_SELECTED)\n public appointmentVirtualSelected = () => {\n const appointmentVirtualSelected = new AppointmentVirtualSelectedUseCase();\n void appointmentVirtualSelected.execute();\n };\n\n @on(events.APPOINTMENT_LOCATION_SELECTED)\n public appointmentLocationSelected = (payload: { storeName: string }) => {\n const { storeName } = payload;\n const appointmentLocationSelected = new AppointmentLocationSelectedUseCase(storeName);\n void appointmentLocationSelected.execute();\n };\n\n @on(events.APPOINTMENT_SERVICE_SELECTED)\n public appointmentServiceSelected = (payload: { serviceName: string[] }) => {\n const { serviceName } = payload;\n const appointmentServiceSelected = new AppointmentServiceSelectedUseCase(serviceName);\n void appointmentServiceSelected.execute();\n };\n\n @on(events.APPOINTMENT_DATE_TIME_SELECTED)\n public appointmentDateTimeSelected = (payload: { dateTime: string }) => {\n const { dateTime } = payload;\n const appointmentDateTimeSelected = new AppointmentDateTimeSelectedUseCase(dateTime);\n void appointmentDateTimeSelected.execute();\n };\n\n @on(events.APPOINTMENT_EDIT_CLICKED)\n public appointmentEditClicked = () => {\n const appointmentEditClicked = new AppointmentEditClickedUseCase();\n void appointmentEditClicked.execute();\n };\n\n @on(events.APPOINTMENT_STARTED_OVER)\n public appointmentStartedOver = () => {\n const appointmentStartedOver = new AppointmentStartedOverUseCase();\n void appointmentStartedOver.execute();\n };\n\n @on(events.APPOINTMENT_ARTIST_SELECTED)\n public appointmentArtistSelected = (payload: { artistName: string }) => {\n const { artistName } = payload;\n const appointmentArtistSelected = new AppointmentArtistSelectedUseCase(artistName);\n void appointmentArtistSelected.execute();\n };\n\n @on(events.APPOINTMENT_STEP_LOADED)\n public appointmentStepLoaded = (payload: { step: string }) => {\n const { step } = payload;\n const appointmentStepLoaded = new AppointmentStepLoadedUseCase(step);\n void appointmentStepLoaded.execute();\n };\n\n @on(events.APOOINTMENT_PROCESS_COMPLETED)\n public appointmentProcessCompleted = () => {\n const appointmentProcessCompleted = new AppointmentProcessCompletedUseCase();\n void appointmentProcessCompleted.execute();\n };\n\n @on(events.APPOINTMENT_ADDED_TO_CALENDAR)\n public appointmentAddedToCalendar = () => {\n const appointmentAddedToCalendar = new AppointmentAddedToCalendarUseCase();\n void appointmentAddedToCalendar.execute();\n };\n}\n","/* eslint-disable no-restricted-syntax */\nimport { setupServiceInfo } from '@estee/elc-universal-utils';\nsetupServiceInfo(__serviceInfo__);\n\nexport { AnalyticsService } from './service-setup/AnalyticsService';\nexport { AnalyticsDriver } from './internal/AnalyticsDriver';\nexport { DataAggregator } from './internal/DataAggregator';\nexport { queryMap } from './internal/QueryMap';\nexport { EventRepository } from './internal/repositories/EventRepository';\nexport { QueryProvidersMock } from './mock/QueryProvidersMock';\nexport { ServiceBusController } from './service-setup/ServiceBusController';\nexport { diContainer } from './service-setup/diContainer';\n"],"sourceRoot":""}