{"version":3,"sources":["webpack://elc-service-bus/webpack/universalModuleDefinition","webpack://elc-service-bus/webpack/bootstrap","webpack://elc-service-bus/./node_modules/@estee/elc-logging/node_modules/debug/src/browser.js","webpack://elc-service-bus/./node_modules/@estee/elc-logging/node_modules/debug/src/common.js","webpack://elc-service-bus/./node_modules/@estee/elc-logging/node_modules/debug/src/index.js","webpack://elc-service-bus/./node_modules/@estee/elc-logging/node_modules/debug/src/node.js","webpack://elc-service-bus/(webpack)/buildin/global.js","webpack://elc-service-bus/(webpack)/buildin/harmony-module.js","webpack://elc-service-bus/./node_modules/@estee/elc-universal-utils/src/UniversalUtils.ts","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/debug-build.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/env.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/is.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/logger.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/memo.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/node.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/normalize.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/browser.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/object.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/stacktrace.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/string.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/time.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/worldwide.js","webpack://elc-service-bus/./node_modules/ms/index.js","webpack://elc-service-bus/./node_modules/process/browser.js","webpack://elc-service-bus/./node_modules/supports-color/browser.js","webpack://elc-service-bus/./node_modules/tty-browserify/index.js","webpack://elc-service-bus/./node_modules/util/node_modules/inherits/inherits.js","webpack://elc-service-bus/./node_modules/util/node_modules/inherits/inherits_browser.js","webpack://elc-service-bus/./node_modules/util/support/isBufferBrowser.js","webpack://elc-service-bus/./node_modules/util/util.js","webpack://elc-service-bus/./src/service-bus-topics/events/elc-ecomm.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-account.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-appt-booking.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-cart.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-checkout.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-communications.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-component-renderer.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-forgot-password.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-offers.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-order-history.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-order.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-password-strength.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-payment.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-prodcat.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-save-for-later.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-search.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-sign-in.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-sign-up.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-stores.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-user-profile.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-analytics.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-vto.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-smartgift.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-ratings-reviews.ts","webpack://elc-service-bus/./src/service-bus-topics/events/elc-care.ts","webpack://elc-service-bus/./src/service-bus-topics/events/elc-ramp.ts","webpack://elc-service-bus/./src/service-bus-topics/events/elc-video.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-service-content.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-pg-service-order-tracking.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-elc-react-checkout-app.ts","webpack://elc-service-bus/./src/service-bus-topics/events/cart.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-pg-service-ramp.ts","webpack://elc-service-bus/./src/service-bus-topics/events/fe-pg-service-loyalty.ts","webpack://elc-service-bus/./src/service-bus-topics/events/index.ts","webpack://elc-service-bus/./src/ServiceBusDecorators.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-ecomm.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-analytics.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-cart.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-checkout.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-communications.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-offers.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-order-history.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-order.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-password-strength.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-payment.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-prodcat.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-save-for-later.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-sign-up.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-user-profile.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-config-manager.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-translations.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-stores.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-appt-booking.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-legal.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-content.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-ratings-reviews.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-vto.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-elc-service-session-mgmt.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/fe-pg-service-loyalty.ts","webpack://elc-service-bus/./src/service-bus-topics/queries/index.ts","webpack://elc-service-bus/./src/service-bus-topics/commands/fe-elc-ecomm.ts","webpack://elc-service-bus/./src/service-bus-topics/commands/fe-elc-service-cart.ts","webpack://elc-service-bus/./src/service-bus-topics/commands/fe-elc-service-prodcat.ts","webpack://elc-service-bus/./src/service-bus-topics/commands/fe-elc-service-ratings-reviews.ts","webpack://elc-service-bus/./src/service-bus-topics/commands/fe-elc-service-sign-in.ts","webpack://elc-service-bus/./src/service-bus-topics/commands/fe-elc-service-user-profile.ts","webpack://elc-service-bus/./src/service-bus-topics/commands/fe-elc-service-order.ts","webpack://elc-service-bus/./src/service-bus-topics/commands/index.ts","webpack://elc-service-bus/./node_modules/@estee/elc-universal-utils/src/BrowserStorage.ts","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/misc.js","webpack://elc-service-bus/./node_modules/@sentry/core/esm/debug-build.js","webpack://elc-service-bus/./node_modules/@sentry/core/esm/constants.js","webpack://elc-service-bus/./node_modules/@sentry/utils/esm/syncpromise.js","webpack://elc-service-bus/./node_modules/@sentry/core/esm/eventProcessors.js","webpack://elc-service-bus/./node_modules/@sentry/core/esm/session.js","webpack://elc-service-bus/./node_modules/@sentry/core/esm/scope.js","webpack://elc-service-bus/./node_modules/@sentry/core/esm/hub.js","webpack://elc-service-bus/./node_modules/@sentry/core/esm/utils/prepareEvent.js","webpack://elc-service-bus/./node_modules/@sentry/core/esm/exports.js","webpack://elc-service-bus/./node_modules/@estee/elc-logging/src/ELCLogger.ts","webpack://elc-service-bus/./src/ServiceBus.ts","webpack://elc-service-bus/./src/ServiceBusLogHook.ts","webpack://elc-service-bus/./src/index.ts"],"names":["root","factory","exports","module","define","amd","a","i","window","installedModules","jsonpScriptSrc","original_jsonpScriptSrc","patchJsonpScriptSrc","replaceSrc","Error","newSrc","apply","this","arguments","e","console","error","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","useColors","process","type","__nwjs","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","firebug","exception","table","parseInt","RegExp","$1","formatArgs","args","namespace","humanize","diff","color","splice","index","lastC","replace","save","namespaces","storage","setItem","removeItem","load","getItem","DEBUG","localstorage","localStorage","colors","log","debug","formatters","j","v","JSON","stringify","message","setup","env","selectColor","hash","length","charCodeAt","createDebug","Math","abs","prevTime","enabled","self","curr","Number","Date","ms","prev","coerce","unshift","format","formatter","val","destroy","extend","init","instances","push","indexOf","delimiter","newDebug","enable","names","skips","split","len","substr","instance","disable","map","toNamespace","join","test","regexp","toString","substring","stack","default","keys","forEach","browser","tty","util","supportsColor","stderr","level","inspectOpts","Boolean","isatty","fd","colorCode","prefix","getDate","hideDate","toISOString","write","filter","reduce","obj","prop","_","k","toUpperCase","inspect","O","g","Function","originalModule","webpackPolyfill","children","global","setupServiceInfo","serviceInfo","rest","ISandboxEnvironment","getSandboxEnvironment","urlParts","location","hostname","LIVE","FEATURE","DEV","STAGE","CMS","PERSONAL","part","includes","DEBUG_BUILD","__SENTRY_DEBUG__","isBrowserBundle","__SENTRY_BROWSER_BUNDLE__","objectToString","isError","wat","isInstanceOf","isBuiltin","className","isString","isPrimitive","isPlainObject","isEvent","Event","isElement","Element","isRegExp","isThenable","then","isSyntheticEvent","isNaN","base","_e","isVueViewModel","__isVue","_isVue","PREFIX","CONSOLE_LEVELS","originalConsoleMethods","consoleSandbox","callback","wrappedFuncs","wrappedLevels","originalConsoleMethod","makeLogger","logger","isEnabled","memoBuilder","hasWeakSet","WeakSet","inner","memoize","has","add","unmemoize","delete","isNodeEnv","dynamicRequire","mod","request","require","normalize","input","depth","maxProperties","Infinity","visit","err","ERROR","memo","stringified","stringifyValue","startsWith","remainingDepth","valueWithToJSON","toJSON","normalized","Array","isArray","numAdded","visitable","visitKey","visitValue","_events","String","objName","getConstructorName","getPrototypeOf","constructor","DEFAULT_MAX_STRING_LENGTH","htmlTreeAsString","elem","options","currentElem","MAX_TRAVERSE_HEIGHT","out","height","separator","sepLength","nextStr","keyAttrs","maxStringLength","_htmlElementAsString","parentNode","reverse","_oO","el","classes","attr","tagName","keyAttrPairs","keyAttr","getAttribute","keyAttrPair","id","is","allowedAttrs","addNonEnumerableProperty","writable","configurable","o_O","convertToPlainObject","getOwnProperties","newObj","target","serializeEventTarget","currentTarget","CustomEvent","detail","extractedProps","dropUndefinedKeys","inputValue","_dropUndefinedKeys","Map","memoizationMap","memoVal","undefined","returnValue","set","item","defaultFunctionName","getFunctionName","fn","truncate","str","max","slice","snipLine","line","colno","newLine","lineLength","start","end","min","WINDOW","dateTimestampSource","nowSeconds","now","getBrowserPerformance","performance","timeOrigin","getNodePerformance","platformPerformance","timestampSource","dateTimestampInSeconds","timestampInSeconds","_browserPerformanceTimeOriginMode","threshold","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","timing","navigationStartDelta","isGlobalObj","GLOBAL_OBJ","globalThis","getGlobalObject","getGlobalSingleton","creator","gbl","__SENTRY__","h","w","y","parse","exec","parseFloat","fmtShort","msAbs","round","fmtLong","plural","isPlural","isFinite","long","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","runClearTimeout","marker","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","run","Item","array","noop","nextTick","title","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","stdout","ReadStream","WriteStream","inherits","ctor","superCtor","super_","TempCtor","arg","copy","fill","readUInt8","getOwnPropertyDescriptors","descriptors","getOwnPropertyDescriptor","formatRegExp","f","objects","x","isNull","isObject","deprecate","msg","noDeprecation","warned","deprecated","throwDeprecation","traceDeprecation","trace","debugEnviron","debugs","opts","ctx","seen","stylize","stylizeNoColor","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","styles","arrayToHash","idx","recurseTimes","isFunction","ret","primitive","formatPrimitive","visibleKeys","getOwnPropertyNames","formatError","isDate","output","braces","toUTCString","formatArray","formatProperty","pop","reduceToSingleString","simple","isNumber","desc","cur","numLinesEst","ar","isNullOrUndefined","isSymbol","re","pad","debuglog","NODE_DEBUG","pid","isBuffer","months","timestamp","time","getHours","getMinutes","getSeconds","getMonth","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","cb","newReason","callbackify","original","TypeError","callbackified","maybeCb","rej","setPrototypeOf","defineProperties","promisify","promiseResolve","promiseReject","promise","Promise","resolve","reject","custom","SERVICE_STARTED","ECOMM_STARTED","NAVIGATE","SESSION_EXPIRED","NAVIGATE_EXTERNAL_URL","PRODUCT_OUT_OF_STOCK","ORDER_PAYMENT_CONFIRMED","GUEST_ORDER_PAYMENT_CONFIRMED","REQUEST_LOGIN_AND_ASSOCIATE_ORDER","HOME_PAGE_LOADED","NAVIGATE_APPT_BOOKING_REQUESTED","NAVIGATE_STORES_REQUESTED","NAVIGATE_LOCATION_REQUESTED","ACCOUNT_SIDEBAR_OVERLAY_OPENED","ACCOUNT_SIDEBAR_MENU_LINK_CLICKED","ACCOUNT_SIDEBAR_LOYALTY_LINK_CLICKED","ACCOUNT_SIDEBAR_SHOWCASE_LINK_CLICKED","LOYALTY_ACCOUNT_ENROLMENT","ACCOUNT_LOYALTY_POINTS_INFO_LINK_CLICKED","ACCOUNT_NONLOYALTY_ENROLLMENT_SIGNUP_CLICKED","ACCOUNT_NONLOYALTY_ENROLLMENT_LINK_CLICKED","STORE_LOCATION_SELECTED","STORE_TOWN_SELECTED","APPOINTMENT_BOOKED","APPOINTMENT_STEP_LOADED","APPOINTMENT_SERVICE_SELECTED","APPOINTMENT_DATE_TIME_SELECTED","APPOINTMENT_ARTIST_SELECTED","APPOINTMENT_EDIT_CLICKED","APPOINTMENT_STARTED_OVER","APPOINTMENT_ADDED_TO_CALENDAR","APPOINTMENT_VIRTUAL_SELECTED","APOOINTMENT_PROCESS_COMPLETED","APPOINTMENT_LOCATION_SELECTED","APPOINTMENT_REVIEW_WIDGET_CLICK","APPOINTMENT_REVIEW_PAGINATION","APPOINTMENT_REVIEW_WIDGET_FILTERS","APPOINTMENT_ACCOUNT_BUTTON_CLICKED","APPOINTMENT_CALL_STORE_CLICKED","CART_BADGE_CLICKED","MOBILE_CART_BADGE_CLICKED","CART_SAMPLES_SET","CART_UPDATED","CART_VIEWED","CART_FAILURE","SHIPPING_OPTION_SELECTED","EDIT_ADDRESS_CLICKED","CONTINUE_AS_GUEST_CLICKED","GUEST_DESELECTED","CART_PAGE_VIEW","CART_PRODUCT_SKU_LIMIT_REACHED","SHOPPING_BAG_BUTTON_CLICKED","MANUAL_OFFER_CODE_APPLIED","REMOVE_ITEM","ITEM_ADDED","REVIEW_SCREEN_SUBMITTING","SAVE_FOR_LATER_REMOVE","CART_LOGGED_IN","SAMPLE_ADDED","CHANGE_LOCATION","OFFER_CODE_FAILED","NOT_ENOUGH_PRODUCTS","CART_PAYMENT_SOURCES_SET","PAYMENT_SUBMITTING","SHIPPING_SCREEN_SUBMITTING","BACK_HEADER_CLICKED","EXTERNAL_PAYMENT_ERROR_RESTORE_PROCESSED","CHECKOUT_SESSION_SAVED","SUBSCRIBED_FOR_EMAILS","PRODUCT_NOTIFY_ME_REQUEST","PRODUCT_NOTIFY_ME_REQUEST_SUCCESS","PRODUCT_NOTIFY_ME_REQUEST_FAILURE","PRODUCT_NOTIFY_ME_TRIGGERED","COMPONENTS_LOADED","FORGOT_PASSWORD_SIGNIN_CLICK","PASSWORD_RESET","OFFERS_LOADED","APPLY_OFFER_CODE","OFFER_CODE_SUCCEDED","ORDER_HISTORY_REDIRECT","ORDER_DETAILS_CLICKED","ORDER_HISTORY_NO_ORDERS_LINK_CLICK","ORDER_CREATED","ORDER_CONFLICT","ORDER_FAILED","ORDER_CONFIRMATION_VIEW","ROUTE_NOT_FOUND","ORDER_CHECK","ORDER_ASSOCIATE","ORDER_ASSOCIATE_SUCCESS","ORDER_ASSOCIATE_FAILURE","PASSWORD_WITH_STRENGTH_CHANGED","TRANSACTION_FAILED","TRANSACTION_SUCCEDED","SHIPPING_SCREEN_FAILURE","PAYMENT_STRATEGY_CHANGED","PAYMENT_STRATEGY_LOAD","PAYMENT_STRATEGY_LOAD_DONE","PAYMENT_STRATEGY_SAVE","PAYMENT_STRATEGY_SAVE_DONE","PAYMENT_STRATEGY_AVAILABILITY_SET","PAYMENT_SUBMIT_REQUEST","PaymentStatus","ADD_SKU_TO_COLLECTION_TRIGGERED","ADD_SKU_TO_COLLECTION_SUCCESS","ITEMS_LOADED_INTO_COLLECTION","GRID_FILTERED","GRID_SORTED","LIVE_CHAT_INTERFACE_CLICKED","MPP_FILTERED","MPP_PAGE_VIEWED","PRODUCTS_FILTERED_AND_SORTED","PRODUCT_CLICKED","PRODUCT_COMPARISON_VIEWED","PRODUCT_COMPARISON_ITEM_CLICKED","ADD_TO_BAG_CLICKED","PRODUCT_FULL_LOADED","PRODUCT_FULL_VIEWED","PRODUCT_GRID_VIEWED","PRODUCT_IMAGE_ENABLED","PRODUCT_IMAGE_DISPLAY_TRIGGERED","PRODUCT_IMAGE_NAVIGATION_TRIGGERED","PRODUCT_IMAGE_ZOOM_TRIGGERED","PRODUCT_INFO_POPUP_CTA_CLICKED","PRODUCT_LOADED","PRODUCT_SHADE_GROUP_SELECTED","PRODUCT_SHADE_SELECTED","PRODUCT_SHADE_SIZE_SELECTED","PRODUCT_SKU_SELECTED","PRODUCT_VIEWED","QUICK_VIEW_TRIGGERED","SHADE_SIDEBAR_CLOSED","SHADE_SIDEBAR_IMAGE_ENABLED","SHADE_SIDEBAR_OPENED","SKU_ENGRAVING_TRIGGERED","SKU_PICKER_OPENED","SKU_PICKER_CLOSED","SOCIAL_SHARE_ICON_TRIGGERED","SPP_PAGE_LOADED","SPP_PAGE_VIEWED","SPP_POWER_REVIEWS_INIT","SPP_SELECTION","FILTER_METHODS","SAVE_FOR_LATER_ADD_BACK_TO_CART","SAVE_FOR_LATER_UPDATE_FAILED","SEARCH_PRODUCTS_QUERIED","SEARCH_TERM_SELECTED","SEARCH_OVERLAY_DISPLAYED","SEARCH_FILTERS_SELECTED","SEARCH_SHOULD_RENDER","SEARCH_ICON_HIDE","AUTH_ATTEMPT","AUTH_FAILED","AUTH_SUCCEDED","FORGOT_PASSWORD_LINK_CLICK","SIGNED_OUT","UNAUTHORIZED_REQUEST","SIGN_UP_LINK_CLICKED","REQUEST_CARE_AUTH","CREATE_ACCOUNT_ATTEMPT","CREATE_ACCOUNT_FAIL","CHANGE_EMAIL_LINK_CLICKED","REGISTRATION_CONFIRMED","SIGN_IN_LINK_CLICKED","BOOK_APPOINTMENT_CLICKED","GET_DIRECTIONS_CLICKED","SEARCH_ADDRESS_SUBMITTED","STORE_DETAILS_CLICKED","STORE_INFO_CLICKED","STORE_MARKER_CLICKED","STORE_PHONE_CLICKED","BOOK_VIRTUAL_APPOINTMENT_CLICKED","STORE_DELIVERY_TYPE_SELECTED","STORE_SEARCH_ADDRESS_SUBMITTED","STORE_CHANGE_LINK_CLICKED","STORE_SELECTED","STORE_OPENING_HOURS_TOGGLED","STORE_FILTER_TOGGLED","STORE_DIRECTORY_LINK_CLICKED","STORE_DIRECTORY_MAP_LINK_CLICKED","STORE_DIRECTORY_STORE_LINK_CLICKED","STORE_MAP_MARKER_CLICKED","STORE_GET_DIRECTIONS_CLICKED","STORE_DETAILS_LINK_CLICKED","STORE_BOOK_APPOINTMENT_LINK_CLICKED","STORE_DETAILS_ADDRESS_LINK_CLICKED","STORE_DETAILS_IN_STORE_PICKUP_LINK_CLICKED","STORE_NEAR_BY_GET_DIRECTIONS_CLICKED","STORE_LOCATION_RESET_CLICKED","STORE_TAB_VIEW_SECTION_CLICKED","SHIPPING_ADDRESS_FILLED","ACCOUNT_SETTINGS_LINK_CLICK","CREATE_ACCOUNT_SUCCESS","LOGGED_IN_SUCCESSFUL","USER_LOADED","GUEST_FORM_VALIDITY_CHANGED","USER_PROFILE_CHANGED","GET_OPTIN_PROFILE_LOAD","SIGN_OUT_COMPLETED","ADDRESS_SELECTION_CHANGED","ADDRESS_SELECTION_VALIDITY_CHANGED","ADDRESS_EDIT_CHANGED","ADDRESS_EDIT_VALIDITY_CHANGED","FAVORITES_LOADED","FAVORITE_SELECTED","FAVORITE_STATUS_UPDATED","CONFIG_ANALYTICS","ANALYTICS_LOADED","ANALYTICS_PRODUCTS_VIEWED","ANALYTICS_PRODUCT_VIEWED","ANALYTICS_PAGE_VIEWED","VTO_ALL_SHADES_VIEWED","VTO_BEST_SHADES_VIEWED","VTO_CAMERA_CLOSED","VTO_CAMERA_FAILED","VTO_CAMERA_OPENED","VTO_CLOSED","VTO_COMPARE","VTO_COMPARE_DISABLED","VTO_ENABLED","VTO_ENGINE_CLOSED","VTO_FOUNDATION_OVERLAY_TOGGLED","VTO_FOUNDATION_QR_CODE_OVERLAY_CLOSED","VTO_FOUNDATION_QR_CODE_OVERLAY_OPENED","VTO_KISS_DETECTED","VTO_LOADED","VTO_LOADING","VTO_MATCH_REMOVED","VTO_MATCH_SAVED","VTO_MATCH_PERSONALIZED","VTO_OPENED","VTO_PAIR_SHADE_GRID_OPENED","VTO_PAIR_SHADE_SELECTED","VTO_PHOTO_LOADED","VTO_PHOTO_SAVED","VTO_PRICE_SUPPRESSED","VTO_RESET","VTO_SHADE_FINDER_CANCELLED","VTO_SHADE_FINDER_COMPLETED","VTO_SHADE_FINDER_STARTED","VTO_SHADE_REMINDER_OVERLAY_CLOSED","VTO_SHADE_REMINDER_OVERLAY_OPENED","VTO_SHADE_REMINDER_OVERLAY_RETAINED","VTO_SHADE_REMINDER_OVERLAY_RETAKEN","VTO_SHADE_SELECTED","VTO_SKIN_ANALYSIS_FINISHED","VTO_SKIN_ANALYSIS_STARTED","VTO_SKIN_BACK_TO_DETECTING","VTO_SKIN_CARE_CAMERA_CLOSED","VTO_SKIN_CARE_CAMERA_FAILED","VTO_SKIN_CARE_CAMERA_OPENED","VTO_SKIN_CARE_CLOSED","VTO_SKIN_CARE_LOADED","VTO_SKIN_CARE_LOADING","VTO_SKIN_CARE_OPENED","VTO_SKIN_CARE_PRODUCTS_LOADED","VTO_SKIN_CARE_RESULT_LOADED","VTO_SKIN_CARE_VIDEO_LOADED","VTO_SKIN_SHADE_FOUND","VTO_SPLIT_FOUR_WAY_DISABLED","VTO_SPLIT_FOUR_WAY_ENABLED","VTO_SURVEY_IGNORED","VTO_SURVEY_LOADED","VTO_SURVEY_SUBMITTED","VTO_VIDEO_LOADED","VTO_ZOOM","VTO_TUTORIAL_STARTED","VTO_TUTORIAL_UNMUTED","VTO_TUTORIAL_MUTED","VTO_TUTORIAL_PAUSED","VTO_TUTORIAL_STOPPED","VTO_TUTORIAL_RESUMED","VTO_TUTORIAL_PLAY_SPEED_UPDATED","VTO_TUTORIAL_PREVIOUS_STEP","VTO_TUTORIAL_NEXT_STEP","VTO_TUTORIAL_LOOK_SELECTED","VTO_TUTORIAL_PRODUCT_LIST_CLICKED","VTO_TUTORIAL_PRODUCTS_USED_ITEM_CLICKED","VTO_BROW_FACE_ATTRIBUTE_PREDICTION_STARTED","VTO_BROW_FACE_ATTRIBUTE_UPDATED","VTO_BROW_GOAL_SELECTED","VTO_BROW_TIPS_CLICKED","VTO_BROW_BACK_TO_GOALS_CLICKED","VTO_BROW_SHAPE_CHANGED","VTO_BROW_SHADE_TRY_ON","VTO_BROW_LENGTH_CHANGED","VTO_BROW_THICKNESS_CHANGED","VTO_BROW_OPACITY_CHANGED","VTO_BROW_GOLDEN_RATION_ENABLED","VTO_BROW_GOLDEN_RATION_DISABLED","VTO_BROW_STENCIL_ENABLED","VTO_BROW_STENCIL_DISABLED","VTO_BROW_COMPARE_ENABLED","VTO_BROW_CAPTURE_CLICKED","VTO_BROW_SEE_ALL_SHADES_CLICKED","VTO_BROW_GET_BROW_CLICKED","SMARTGIFT_ADDED","SMARTGIFT_VIEWED","SMARTGIFT_WIDGET_TOGGLED","SMARTGIFT_PREPARED","SMARTGIFT_REMOVED","SMARTGIFT_CANCELLED","SMARTGIFT_HELP_OPENED","SMARTGIFT_HELP_CLOSED","READ_REVIEWS_LINK_CLICKED","WRITE_REVIEWS_LINK_CLICKED","REVIEWS_HELPFUL_YES_CLICKED","REVIEWS_HELPFUL_NO_CLICKED","REVIEWS_FLAG_REVIEW_CLICKED","REVIEWS_SORT_BY_CHANGED","REVIEWS_SEARCH_CLICKED","REVIEWS_FILTER_CLICKED","ASK_AND_ANSWER_CLICKED","ASK_AND_ANSWER_SUBMITTED","ASK_AND_ANSWER_SEARCH_CLICKED","ASK_AND_ANSWER_HELPFUL_YES_CLICKED","ASK_AND_ANSWER_HELPFUL_NO_CLICKED","ASK_AND_ANSWER_SHOW_MORE_CLICKED","ASK_AND_ANSWERS_SORT_BY_CHANGED","WRITE_REVIEW_STARTED","REVIEW_OVERLAY_OPENED","REVIEW_OVERLAY_CLOSED","REVIEWS_RATING_CLICKED","REVIEWS_PAGINATION_CLICKED","CARE_NAVIGATE_SIGN_IN","CARE_NAVIGATE_SIGN_UP","CARE_NAVIGATE_PASSWORD_FORGOT","CARE_NAVIGATE_PASSWORD_RESET_LINK_SENT","RAMP_SIGN_UP_SUBMITTED","RAMP_SIGN_UP_SUCCESSFUL","RAMP_SIGN_UP_FAILED","RAMP_LOG_IN_SUBMITTED","RAMP_LOG_IN_SUCCESSFUL","RAMP_LOG_IN_FAILED","VIDEO_READY","VIDEO_PLAY","VIDEO_PAUSE","VIDEO_END","FINDATION_BUTTON_CLICKED","BASIC_TOUT_LOADED","ORDER_TRACKING_SUBMITTED","ORDER_TRACKING_INVALID_NUMBER","ORDER_TRACKING_SUCCESSFUL","RCO_PAYMENT_SELECTED","RCO_SHIPPING_ADDRESS_ADD","RCO_SHIPPING_OPTION_SELECTED","RCO_EMAIL_SIGNUP","RCO_LINK_CLICKED","RCO_SAME_DAY_DELIVERY_TIME_SELECTED","RCO_PAYMENT_DELIVERY_EDITED","RCO_DELIVERY_OPTION_SELECTED","RCO_BOPIS_STORE_SEARCHED","RCO_BOPIS_STORE_SELECTED","RCO_BOPIS_STORE_HOURS_OPENED","RCO_BOPIS_STORE_CHANGED","RCO_BOPIS_CART_EDITED","RCO_BOPIS_DELIVERY_TIME_EDITED","RCO_BOPIS_UNAVAILABLE_ITEMS_REMOVED","CART_OVERLAY_OPENED","CART_OVERLAY_CLOSED","CART_OVERLAY_ICON_CLICKED","CART_OVERLAY_TAB_CLICKED","CART_OVERLAY_OFFER_VIEWED","CART_OVERLAY_OFFER_CLICKED","IAM_SIGN_UP_SUCCESSFUL","IAM_SIGN_UP_FAILED","IAM_SIGN_IN_SUCCESSFUL","IAM_SIGN_IN_FAILED","LOYALTY_LOADMORE_LINK_CLICKED","LOYALTY_ONLINE_ORDER_NUMBER_CLICKED","LOYALTY_SHOP_NOW_CLICKED","LOYALTY_ALL_BENEFITS_CLICKED","LOYALTY_BENEFITS_REDEEM_CLICKED","LOYALTY_BENEFITS_REMOVE_CLICKED","LOYALTY_REWARDS_REDEEM_CLICKED","LOYALTY_REWARDS_REMOVE_CLICKED","LOYALTY_REWARDS_TAB_CLICKED","LOYALTY_LINK_CLICKED","events","getDecorators","globalServiceBus","evName","descriptor","payload","evt","query","command","commandProvider","queryName","queryToProvide","registerCommandProvider","watchQuery","__serviceBusDecorators__","registerWatchers","sname","registerQueryWatcher","newQueryResult","queryProvider","registerQueryProvider","CONFIRM_REGISTRATION_TOKEN","CONFIRM_REGISTRATION_URL","RESET_PASSWORD_URL","GET_CURRENT_ROUTE","CARE_HANDLER_URL","PAGE_VIEW_TRACK_PRODUCT_GRID","PAGE_VIEW_TRACK_PRODUCT_FULL","IS_CART_VALID","CHOICE_OF_SKUS_ITEMS_COUNT","CART_ITEMS_SUBTOTAL","CART_ITEMS_COUNT","CART_DIGITAL_SIGNATURE","SUCCESSFUL_OFFER_CODES","CART_SKUS_IDS","GET_CART","RECOMMENDED_PRODUCTS_SKUID_LIST","IS_SHIPPING_SCREEN_VALID","EMAIL_OPT_IN","GET_MANUAL_OFFER","GET_MANUAL_OFFER_BY_CODE","FIRST_ORDER_DATE","FIRST_ORDER_VALUE","LAST_ORDER_DATE","LAST_ORDER_VALUE","ORDERS_AVG","TOTAL_COUNT_OF_ORDERS","TOTAL_SUM_OF_REVENUE","ORDER_SHIPPING_ADDRESS","GET_ORDER_DATA","IS_PASSWORD_VALID","IS_PAYMENT_SCREEN_VALID","GET_PRODUCT_DATA","GET_PRODUCTS","GET_PRODUCTS_V2","GET_PRODUCTS_V3","GET_REVIEW_PRODUCT","GET_SELECTED_FILTERS","GET_SORTBY_VALUE","GET_SKUS","GET_PRODCAT_INVENTORY","GET_INVENTORY","SortDirection","SAVE_FOR_LATER_ITEMS_COUNT","IS_EMAIL_JUST_VERIFIED","FULL_NAME","BASIC_USER_DETAILS","IS_SIGN_IN_FORM_OPEN","EMAIL_VERIFIED","GUEST_EMAIL","EMAIL","BIRTH_DATE","GET_USER_CREATION_DATE","GET_FORMATTED_ADDRESS","GET_USER_ACCOUNT_ID","GET_USER_AUTH_STATE","AuthStates","GET_CONFIG","GET_TRANSLATIONS","GET_STORE_INVENTORY","GET_APPT_BOOKING_ACCESS_TOKEN","GET_APPT_BOOKING_COUNTERS","GET_APPT_BOOKING_CONTENTS_TEMPLATE","LEGAL_ACCEPTANCE_TOKEN","TEMPLATES_CONTENT_GET","GET_REVIEW_SNIPPET","GET_BEST_MATCH_SKU_ID","GET_USER_DETAILS","GET_LEGACY_GUEST_AUTH_TOKEN","GET_GUEST_AUTH_TOKEN","IS_AUTHENTICATED","GET_ACCESS_TOKEN","USER_ID","IS_LOYALTY_MEMBER","LOYALTY_POINTS","serviceQueries","CHANGE_ROUTE_PROFILE","CHANGE_ROUTE_SETTINGS","CHANGE_ROUTE_ORDER_HISTORY","CART_ADD_ITEM","CART_CLEAR_ERRORS","CART_CLEAR","CART_SET_SHIPPING_METHOD","CART_ADD_ADDRESSES","SAVE_FOR_LATER_ADD","CART_OVERLAY_SHOW","CART_OVERLAY_HIDE","UPDATE_INVENTORY","UPDATE_POWER_REVIEWS_CONFIGS","AUTH_UPDATE_DATA","SET_SIGN_IN_EMAIL","UPDATE_USER_DATA","CLEAR_USER_DATA","ACCOUNT_OVERLAY_SHOW","ACCOUNT_OVERLAY_HIDE","ADD_USER_ADDRESS","ORDER_CREATE","ORDER_UPDATE","serviceCommands","BrowserStorage","eraseCookie","cookie","setCookie","daysOrDate","expires","expirationDate","getCookie","nameEQ","ca","charAt","storageKey","storagePolling","callBack","storageValue","setInterval","latestValue","uuid4","crypto","msCrypto","getRandomByte","random","randomUUID","getRandomValues","Uint8Array","arrayify","maybeArray","DEFAULT_ENVIRONMENT","States","PENDING","RESOLVED","REJECTED","executor","__init","__init2","__init3","__init4","_state","_handlers","_resolve","_reject","onfulfilled","onrejected","result","_executeHandlers","onfinally","isRejected","_setResult","state","_value","cachedHandlers","handler","getGlobalEventProcessors","notifyEventProcessors","processors","event","hint","processor","final","makeSession","context","startingTime","session","sid","started","duration","status","errors","ignoreDuration","sessionToJSON","updateSession","user","ipAddress","ip_address","did","email","username","abnormal_mechanism","release","environment","closeSession","attrs","user_agent","DEFAULT_MAX_BREADCRUMBS","_notifyingListeners","_scopeListeners","_eventProcessors","_breadcrumbs","_attachments","_user","_tags","_extra","_contexts","_sdkProcessingMetadata","_propagationContext","generatePropagationContext","scope","newScope","_level","_span","_session","_transactionName","_fingerprint","_requestSession","_notifyScopeListeners","requestSession","tags","extras","extra","fingerprint","span","getSpan","transaction","captureContext","updatedScope","contexts","propagationContext","breadcrumb","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","breadcrumbs","attachment","additionalEventProcessors","getTraceContext","sdkProcessingMetadata","dynamicSamplingContext","getDynamicSamplingContext","transactionName","_applyFingerprint","scopeBreadcrumbs","_getBreadcrumbs","newData","traceId","spanId","API_VERSION","DEFAULT_BREADCRUMBS","client","_version","_stack","bindClient","getStackTop","setupIntegrations","clone","getScope","getStack","getClient","pushScope","popScope","eventId","_lastEventId","event_id","syntheticException","_withClient","captureException","originalException","captureMessage","captureEvent","beforeBreadcrumb","getOptions","finalBreadcrumb","addBreadcrumb","setUser","setTags","setExtras","setTag","setExtra","setContext","oldHub","makeMain","integration","getIntegration","warn","customSamplingContext","_callExtensionMethod","endSession","_sendSessionUpdate","getSession","setSession","getUser","currentSession","sendDefaultPii","captureSession","method","sentry","getMainCarrier","extensions","hub","registry","getHubFromCarrier","setHubOnCarrier","getCurrentHub","acs","getGlobalHub","hasHubOnCarrier","isOlderThan","carrier","WeakMap","TriggerType","config","async","errorDebugger","enhanceLogData","logdata","isProd","PRODUCTION","sendLog","info","infoDebugger","warning","warningDebugger","eventDebugger","queryDebugger","commandDebugger","triggerSource","serviceName","date","triggerType","api","LogTypes","unsolvedQueries","hooks","serviceVersion","buid","dummyHook","listener","next","serviceBus","eventName","runHooks","runOn","replay","callbacks","eventWatchers","eventsEmitted","applyHook","hook","hookObj","hookName","hookFn","hkCol","solveQueries","hookEvent","hasUnsolvedQueries","unsolvedQuery","hooksPromise","potentialPromise","isPromise","results","runEmit","commandName","runQuery","qp","queryProviders","find","resolveFn","queryPromise","provider","afterQuery","runRegisterQueryProvider","unsolvedProviderQueries","uq","executeUnsolvedQuery","queryWatcher","queryWatchers","queryCache","hookChain","executeHook","dirtyCheckQueries","localQueryCache","qw","beforeEmit","beforeQuery","beforeEventListenerRegister","beforeQueryRegister","shift","Logger","ServiceBusLogHook","action","afterEmit","GlobalServiceBus","ServiceBusTopics","commands","queries","ElcServiceBus"],"mappings":"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","file":"bundle.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n \t// WebpackRequireFrom - monkey-patching\n \tif (typeof jsonpScriptSrc === 'function') {\n \t var original_jsonpScriptSrc = jsonpScriptSrc;\n \t function patchJsonpScriptSrc () {\n \t try {\n \t if (typeof replaceSrc !== \"function\") {\n \t throw new Error(\"WebpackRequireFrom: 'replaceSrc' is not a function or not available at runtime. See https://github.com/agoldis/webpack-require-from#troubleshooting\");\n \t }\n \t var newSrc = replaceSrc(original_jsonpScriptSrc.apply(this, arguments));\n \t if (!newSrc || typeof newSrc !== 'string') {\n \t throw new Error(\"WebpackRequireFrom: 'replaceSrc' does not return string. See https://github.com/agoldis/webpack-require-from#troubleshooting\");\n \t }\n \t return newSrc;\n \t } catch (e) {\n \t if (!false) {\n \t console.error(e);\n \t }\n \t return original_jsonpScriptSrc.apply(this, arguments);\n \t }\n \t }\n \t jsonpScriptSrc = patchJsonpScriptSrc\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n \t// WebpackRequireFrom\n \tObject.defineProperty(__webpack_require__, \"p\", {\n \t get: function () {\n \treturn \"elc-service-bus/\";\n \t }\n \t})\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\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();\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\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* Active `debug` instances.\n\t*/\n\tcreateDebug.instances = [];\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\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 match;\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.enabled = createDebug.enabled(namespace);\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.destroy = destroy;\n\t\tdebug.extend = extend;\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\tcreateDebug.instances.push(debug);\n\n\t\treturn debug;\n\t}\n\n\tfunction destroy() {\n\t\tconst index = createDebug.instances.indexOf(this);\n\t\tif (index !== -1) {\n\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\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\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\n\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\tconst instance = createDebug.instances[i];\n\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\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\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;\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.replace(/\\s*\\n\\s*/g, ' ');\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","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ServiceBus } from '@estee/elc-service-bus';\nimport {\n IServiceRegistry,\n IComponentViewController,\n IEcommApp,\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 __SENTRY__: IObjectLike;\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 EcommApp?: IEcommApp;\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 __SENTRY__: IObjectLike;\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 __SENTRY__: IObjectLike;\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 = typeof window === 'undefined' ? global : 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","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","/*\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nfunction isBrowserBundle() {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nfunction getSDKSource() {\n // @ts-expect-error \"npm\" is injected by rollup during build process\n return \"npm\";\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n return wat === null || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isNaN(wat) {\n return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n return !!(typeof wat === 'object' && wat !== null && ((wat ).__isVue || (wat )._isVue));\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isNaN, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] ;\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/** JSDoc */\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console ;\n const wrappedFuncs = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] ;\n wrappedFuncs[level] = console[level] ;\n console[level] = originalConsoleMethod;\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n wrappedLevels.forEach(level => {\n console[level] = wrappedFuncs[level] ;\n });\n }\n}\n\nfunction makeLogger() {\n let enabled = false;\n const logger = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n isEnabled: () => enabled,\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n logger[name] = (...args) => {\n if (enabled) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger ;\n}\n\nconst logger = makeLogger();\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };\n//# sourceMappingURL=logger.js.map\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder() {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner = hasWeakSet ? new WeakSet() : [];\n function memoize(obj) {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj) {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n\nexport { memoBuilder };\n//# sourceMappingURL=memo.js.map\n","import { isBrowserBundle } from './env.js';\n\n/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nfunction isNodeEnv() {\n // explicitly check for browser bundles as those can be optimized statically\n // by terser/rollup.\n return (\n !isBrowserBundle() &&\n Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\nfunction dynamicRequire(mod, request) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nfunction loadModule(moduleName) {\n let mod;\n\n try {\n mod = dynamicRequire(module, moduleName);\n } catch (e) {\n // no-empty\n }\n\n try {\n const { cwd } = dynamicRequire(module, 'process');\n mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) ;\n } catch (e) {\n // no-empty\n }\n\n return mod;\n}\n\nexport { dynamicRequire, isNodeEnv, loadModule };\n//# sourceMappingURL=node.js.map\n","import { isNaN, isVueViewModel, isSyntheticEvent } from './is.js';\nimport { memoBuilder } from './memo.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object,\n // Default Node.js REPL depth\n depth = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize = 100 * 1024,\n) {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key,\n value,\n depth = +Infinity,\n maxProperties = +Infinity,\n memo = memoBuilder(),\n) {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (\n value == null || // this matches null and undefined -> eqeq not eqeqeq\n (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))\n ) {\n return value ;\n }\n\n const stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value )['__sentry_skip_normalization__']) {\n return value ;\n }\n\n // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n // We keep a certain amount of depth.\n // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n const remainingDepth =\n typeof (value )['__sentry_override_normalization_depth__'] === 'number'\n ? ((value )['__sentry_override_normalization_depth__'] )\n : depth;\n\n // We're also done if we've reached the max depth\n if (remainingDepth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n const valueWithToJSON = value ;\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n const normalized = (Array.isArray(value) ? [] : {}) ;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n const visitable = convertToPlainObject(value );\n\n for (const visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n numAdded++;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value,\n) {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n if (isVueViewModel(value)) {\n return '[VueViewModel]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && value !== value) {\n return '[NaN]';\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n const objName = getConstructorName(value);\n\n // Handle HTML Elements\n if (/^HTML(\\w*)Element$/.test(objName)) {\n return `[HTMLElement: ${objName}]`;\n }\n\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value) {\n const prototype = Object.getPrototypeOf(value);\n\n return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nexport { normalize, normalizeToSize, visit as walk };\n//# sourceMappingURL=normalize.js.map\n","import { isString } from './is.js';\nimport { getGlobalObject } from './worldwide.js';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject();\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(\n elem,\n options = {},\n) {\n\n if (!elem) {\n return '';\n }\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem ;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds maxStringLength\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n const elem = el\n\n;\n\n const out = [];\n let className;\n let classes;\n let key;\n let attr;\n let i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n // eslint-disable-next-line prefer-const\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push(`.${classes[i]}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (i = 0; i < allowedAttrs.length; i++) {\n key = allowedAttrs[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push(`[${key}=\"${attr}\"]`);\n }\n }\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getDomElement(selector) {\n if (WINDOW.document && WINDOW.document.querySelector) {\n return WINDOW.document.querySelector(selector) ;\n }\n return null;\n}\n\nexport { getDomElement, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { logger } from './logger.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] ;\n const wrapped = replacementFactory(original) ;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n markFunctionWrapped(wrapped, original);\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n } catch (o_O) {\n DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nfunction getOriginalFunction(func) {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nfunction urlEncode(object) {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n * an Error.\n */\nfunction convertToPlainObject(\n value,\n)\n\n {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n const newObj\n\n = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj )[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return truncate(keys[0], maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n const memoizationMap = new Map();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n if (isPlainObject(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (const key of Object.keys(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue ;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue ;\n }\n\n return inputValue;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat ).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode };\n//# sourceMappingURL=object.js.map\n","import { node } from './node-stack-trace.js';\nexport { filenameIsInApp } from './node-stack-trace.js';\n\nconst STACKTRACE_FRAME_LIMIT = 50;\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack, skipFirst = 0) => {\n const frames = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirst; i < lines.length; i++) {\n const line = lines[i];\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue;\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue;\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames);\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n if (!stack.length) {\n return [];\n }\n\n const localStack = Array.from(stack);\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n\n // Reversing in the middle of the procedure allows us to just pop the values off the stack\n localStack.reverse();\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n\n // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n // is produced within the hub itself, making it:\n //\n // Sentry.captureException()\n // getCurrentHub().captureException()\n //\n // instead of just the top `Sentry` call itself.\n // This forces us to possibly strip an additional frame in the exact same was as above.\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || localStack[localStack.length - 1].filename,\n function: frame.function || '?',\n }));\n}\n\nconst defaultFunctionName = '';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nfunction nodeStackLineParser(getModule) {\n return [90, node(getModule)];\n}\n\nexport { createStackParser, getFunctionName, nodeStackLineParser, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { isVueViewModel, isString, isRegExp } from './is.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n // console warnings. This happens when a Vue template is rendered with\n // an undeclared variable, which we try to stringify, ultimately causing\n // Vue to issue another warning which repeats indefinitely.\n // see: https://github.com/getsentry/sentry-javascript/pull/8981\n if (isVueViewModel(value)) {\n output.push('[VueViewModel]');\n } else {\n output.push(String(value));\n }\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n value,\n pattern,\n requireExactStringMatch = false,\n) {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n\n return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n testString,\n patterns = [],\n requireExactStringMatch = false,\n) {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","import { isNodeEnv, dynamicRequire } from './node.js';\nimport { getGlobalObject } from './worldwide.js';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject();\n\n/**\n * An object that can return the current timestamp in seconds since the UNIX epoch.\n */\n\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nconst dateTimestampSource = {\n nowSeconds: () => Date.now() / 1000,\n};\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction getBrowserPerformance() {\n const { performance } = WINDOW;\n if (!performance || !performance.now) {\n return undefined;\n }\n\n // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n //\n // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n // performance.now() gives a date arbitrarily in the past.\n //\n // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n // undefined.\n //\n // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n // interact with data coming out of performance entries.\n //\n // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n // observed skews that can be as long as days, weeks or months.\n //\n // See https://github.com/getsentry/sentry-javascript/issues/2590.\n //\n // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n // transactions of long-lived web pages.\n const timeOrigin = Date.now() - performance.now();\n\n return {\n now: () => performance.now(),\n timeOrigin,\n };\n}\n\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance() {\n try {\n const perfHooks = dynamicRequire(module, 'perf_hooks') ;\n return perfHooks.performance;\n } catch (_) {\n return undefined;\n }\n}\n\n/**\n * The Performance API implementation for the current platform, if available.\n */\nconst platformPerformance = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\n\nconst timestampSource =\n platformPerformance === undefined\n ? dateTimestampSource\n : {\n nowSeconds: () => (platformPerformance.timeOrigin + platformPerformance.now()) / 1000,\n };\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nconst dateTimestampInSeconds = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nconst timestampInSeconds = timestampSource.nowSeconds.bind(timestampSource);\n\n/**\n * Re-exported with an old name for backwards-compatibility.\n * TODO (v8): Remove this\n *\n * @deprecated Use `timestampInSeconds` instead.\n */\nconst timestampWithMs = timestampInSeconds;\n\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nconst usingPerformanceAPI = platformPerformance !== undefined;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nlet _browserPerformanceTimeOriginMode;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nconst browserPerformanceTimeOrigin = (() => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = WINDOW;\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds, timestampWithMs, usingPerformanceAPI };\n//# sourceMappingURL=time.js.map\n","/** Internal global with common properties and Sentry extensions */\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj) {\n return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ =\n (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n // eslint-disable-next-line no-restricted-globals\n (typeof window == 'object' && isGlobalObj(window)) ||\n (typeof self == 'object' && isGlobalObj(self)) ||\n (typeof global == 'object' && isGlobalObj(global)) ||\n (function () {\n return this;\n })() ||\n {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nfunction getGlobalObject() {\n return GLOBAL_OBJ ;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(name, creator, obj) {\n const gbl = (obj || GLOBAL_OBJ) ;\n const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n return singleton;\n}\n\nexport { GLOBAL_OBJ, getGlobalObject, getGlobalSingleton };\n//# sourceMappingURL=worldwide.js.map\n","/**\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","// 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","'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","export const SERVICE_STARTED = 'service.started';\nexport const ECOMM_STARTED = 'ecomm.started';\nexport const NAVIGATE = 'navigate';\nexport const SESSION_EXPIRED = 'session.expired';\nexport const NAVIGATE_EXTERNAL_URL = 'navigate.external.url';\nexport const PRODUCT_OUT_OF_STOCK = 'product.out.of.stock';\nexport const ORDER_PAYMENT_CONFIRMED = 'order.payment.confirmed';\nexport const GUEST_ORDER_PAYMENT_CONFIRMED = 'guest.order.payment.confirmed';\nexport const REQUEST_LOGIN_AND_ASSOCIATE_ORDER = 'request.login.associate.order';\nexport const HOME_PAGE_LOADED = 'home.page.loaded';\nexport const NAVIGATE_APPT_BOOKING_REQUESTED = 'navigate.appt_booking.requested';\nexport const NAVIGATE_STORES_REQUESTED = 'mavigate.stores.requested';\nexport const NAVIGATE_LOCATION_REQUESTED = 'navigate.location.requested';\n\nexport type IStringMap = {\n [key: string]: string;\n};\n\nexport interface INavigate {\n currentRoute: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params: Record | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n queryParams: Record | undefined;\n}\n\nexport interface IOrderPaymentConfirmedPayload {\n orderId: string;\n}\n\nexport interface IGuestOrderPaymentConfirmedPayload {\n orderId: string;\n guestToken: string;\n}\n\nexport interface IRequestNavigateLocationRequested {\n location: string;\n queryParams?: IStringMap;\n}\n\nexport interface IRequestLoginAndAssociateOrderEventData {\n orderId: string;\n guestToken: string;\n}\n\nexport interface IRequestNavigateApptBookingPayload {\n counterId?: string;\n}\n\nexport interface IServiceStarted {\n serviceName: string;\n}\n\nexport type ServiceElcEcommEvents = {\n [SERVICE_STARTED]: IServiceStarted;\n [ECOMM_STARTED]: undefined;\n [NAVIGATE]: INavigate;\n [SESSION_EXPIRED]: undefined;\n [NAVIGATE_EXTERNAL_URL]: string;\n [PRODUCT_OUT_OF_STOCK]: undefined;\n [ORDER_PAYMENT_CONFIRMED]: IOrderPaymentConfirmedPayload;\n [GUEST_ORDER_PAYMENT_CONFIRMED]: IGuestOrderPaymentConfirmedPayload;\n [REQUEST_LOGIN_AND_ASSOCIATE_ORDER]: IRequestLoginAndAssociateOrderEventData;\n [HOME_PAGE_LOADED]: undefined;\n [NAVIGATE_LOCATION_REQUESTED]: IRequestNavigateLocationRequested;\n [NAVIGATE_APPT_BOOKING_REQUESTED]: IRequestNavigateApptBookingPayload;\n [NAVIGATE_STORES_REQUESTED]: undefined;\n};\n","export const ACCOUNT_SIDEBAR_OVERLAY_OPENED = 'accountSidebar.overlay.opened';\nexport const ACCOUNT_SIDEBAR_MENU_LINK_CLICKED = 'accountSidebar.menuLinkClicked';\nexport const ACCOUNT_SIDEBAR_LOYALTY_LINK_CLICKED = 'accountSidebar.loyaltyLinkClicked';\nexport const ACCOUNT_SIDEBAR_SHOWCASE_LINK_CLICKED = 'accountSidebar.showcaseLinkClicked';\nexport const LOYALTY_ACCOUNT_ENROLMENT = 'account.loyaltyEnrolment';\nexport const ACCOUNT_LOYALTY_POINTS_INFO_LINK_CLICKED = 'accountLoyalty.pointsInfoLinkClicked';\nexport const ACCOUNT_NONLOYALTY_ENROLLMENT_SIGNUP_CLICKED =\n 'accountNonLoyalty.EnrollmentSignupClicked';\nexport const ACCOUNT_NONLOYALTY_ENROLLMENT_LINK_CLICKED = 'accountNonLoyalty.EnrollmentLinkClicked';\n\nexport interface IAccountSidebarBasePayload {\n label: string;\n}\n\nexport interface IAccountSidebarShowcasePayload {\n key?: string;\n item_title?: string;\n item_teaser?: string;\n link_label?: string;\n link_url?: string;\n}\n\nexport interface ILoyaltyAccountEnrolment {\n loyaltyFlag?: boolean | null;\n}\n\nexport type ServiceAccountEvents = {\n [ACCOUNT_SIDEBAR_OVERLAY_OPENED]: void | undefined;\n [ACCOUNT_SIDEBAR_MENU_LINK_CLICKED]: IAccountSidebarBasePayload;\n [ACCOUNT_SIDEBAR_LOYALTY_LINK_CLICKED]: IAccountSidebarBasePayload;\n [ACCOUNT_SIDEBAR_SHOWCASE_LINK_CLICKED]: IAccountSidebarShowcasePayload;\n [LOYALTY_ACCOUNT_ENROLMENT]: ILoyaltyAccountEnrolment;\n [ACCOUNT_LOYALTY_POINTS_INFO_LINK_CLICKED]: IAccountSidebarBasePayload;\n [ACCOUNT_NONLOYALTY_ENROLLMENT_SIGNUP_CLICKED]: ILoyaltyAccountEnrolment;\n [ACCOUNT_NONLOYALTY_ENROLLMENT_LINK_CLICKED]: IAccountSidebarBasePayload;\n};\n","export const STORE_LOCATION_SELECTED = 'store.location.selected';\nexport const STORE_TOWN_SELECTED = 'store.town.selected';\nexport const APPOINTMENT_BOOKED = 'appointment.booked';\nexport const APPOINTMENT_STEP_LOADED = 'appointment.step.loaded';\nexport const APPOINTMENT_SERVICE_SELECTED = 'appointment.service.selected';\nexport const APPOINTMENT_DATE_TIME_SELECTED = 'appointment.date.time.selected';\nexport const APPOINTMENT_ARTIST_SELECTED = 'appointment.artist.selected';\nexport const APPOINTMENT_EDIT_CLICKED = 'appointment.edit.clicked';\nexport const APPOINTMENT_STARTED_OVER = 'appointment.started.over';\nexport const APPOINTMENT_ADDED_TO_CALENDAR = 'appointment.added.to.calendar';\nexport const APPOINTMENT_VIRTUAL_SELECTED = 'appointment.virtual.selected';\nexport const APOOINTMENT_PROCESS_COMPLETED = 'appointment.process.completed';\nexport const APPOINTMENT_LOCATION_SELECTED = 'appointment.location.selected';\nexport const APPOINTMENT_REVIEW_WIDGET_CLICK = 'appointment.review.widget.click';\nexport const APPOINTMENT_REVIEW_PAGINATION = 'appointment.review.pagination';\nexport const APPOINTMENT_REVIEW_WIDGET_FILTERS = 'appointment.review.widget.filters';\nexport const APPOINTMENT_ACCOUNT_BUTTON_CLICKED = 'appointment.account.button.clicked';\nexport const APPOINTMENT_CALL_STORE_CLICKED = 'appointment.call.store.clicked';\n\nexport interface IStoreLocationSelectionData {\n storeId?: string;\n}\n\nexport interface IStoreTownSelectionData {\n town?: string;\n}\n\nexport interface IAppointmentBookedData {\n email: string;\n source: string;\n}\n\nexport interface IAppointmentBookingStepLoadData {\n step: string;\n}\n\nexport interface IAppointmentLocationData {\n storeName?: string;\n}\n\nexport interface IAppointmentServiceData {\n serviceName: string[];\n}\n\nexport interface IAppointmentDateTimeData {\n dateTime: string;\n}\n\nexport interface IAppointmentArtistData {\n artistName: string;\n}\n\nexport interface IAppointmentReviewWidgetClick {\n serviceName: string;\n}\n\nexport interface IAppointmentReviewPagination {\n optionSelection: string;\n}\n\nexport interface IAppointmentReviewWidgetFilters extends IAppointmentReviewWidgetClick {\n location: string;\n sortBy: string;\n}\n\nexport interface IAppointmentAccountButtonClicked {\n accountButtonLabel: string;\n}\n\nexport interface IAppointmentCallStoreClicked {\n storeName: string;\n}\n\nexport type ServiceAppointmentBookingEvents = {\n [STORE_LOCATION_SELECTED]: IStoreLocationSelectionData | void;\n [STORE_TOWN_SELECTED]: IStoreTownSelectionData | void;\n [APPOINTMENT_LOCATION_SELECTED]: IAppointmentLocationData;\n [APPOINTMENT_BOOKED]: IAppointmentBookedData;\n [APPOINTMENT_STEP_LOADED]: IAppointmentBookingStepLoadData;\n [APPOINTMENT_SERVICE_SELECTED]: IAppointmentServiceData;\n [APPOINTMENT_DATE_TIME_SELECTED]: IAppointmentDateTimeData;\n [APPOINTMENT_ARTIST_SELECTED]: IAppointmentArtistData;\n [APPOINTMENT_EDIT_CLICKED]: void;\n [APPOINTMENT_STARTED_OVER]: void;\n [APPOINTMENT_ADDED_TO_CALENDAR]: void;\n [APPOINTMENT_VIRTUAL_SELECTED]: void;\n [APOOINTMENT_PROCESS_COMPLETED]: void;\n [APPOINTMENT_REVIEW_WIDGET_CLICK]: IAppointmentReviewWidgetClick;\n [APPOINTMENT_REVIEW_PAGINATION]: IAppointmentReviewPagination;\n [APPOINTMENT_REVIEW_WIDGET_FILTERS]: IAppointmentReviewWidgetFilters;\n [APPOINTMENT_ACCOUNT_BUTTON_CLICKED]: IAppointmentAccountButtonClicked;\n [APPOINTMENT_CALL_STORE_CLICKED]: IAppointmentCallStoreClicked;\n};\n","import { ICart, IOfferMessage } from './CartInterfaces';\n\nexport const CART_BADGE_CLICKED = 'cart.badge.clicked';\nexport const MOBILE_CART_BADGE_CLICKED = 'mobile.cart.badge.clicked';\nexport const CART_SAMPLES_SET = 'cart.samples.set';\nexport const CART_UPDATED = 'cart.updated';\nexport const CART_VIEWED = 'cart.viewed';\nexport const CART_FAILURE = 'cart.failure';\nexport const SHIPPING_OPTION_SELECTED = 'shipping.option.selected';\nexport const EDIT_ADDRESS_CLICKED = 'edit.address.clicked';\nexport const CONTINUE_AS_GUEST_CLICKED = 'continue.as.guest.clicked';\nexport const GUEST_DESELECTED = 'guest.deselected';\nexport const CART_PAGE_VIEW = 'cart.page.view';\nexport const CART_PRODUCT_SKU_LIMIT_REACHED = 'cart.product.sku.limit.reached';\nexport const SHOPPING_BAG_BUTTON_CLICKED = 'shoppingbag.button.clicked';\nexport const MANUAL_OFFER_CODE_APPLIED = 'checkout.manualOfferCodeApplied';\nexport const REMOVE_ITEM = 'checkout.removeItem';\nexport const ITEM_ADDED = 'item.added';\nexport const REVIEW_SCREEN_SUBMITTING = 'review.screen.submitting';\nexport const SAVE_FOR_LATER_REMOVE = 'saveforlater.removeItem';\nexport const CART_LOGGED_IN = 'cart.logged.in';\nexport const SAMPLE_ADDED = 'sample.added';\nexport const CHANGE_LOCATION = 'change.location';\nexport const OFFER_CODE_FAILED = 'offer.code.failed';\nexport const NOT_ENOUGH_PRODUCTS = 'not.enough.products';\nexport const CART_PAYMENT_SOURCES_SET = 'cart.payment.methods.set';\n\nexport interface IContinueAsGuestEvent {\n source: string;\n email: string;\n}\n\nexport interface IGuestDeselectedEvent {\n guestEmail: string;\n}\n\nexport interface ILimitReachedEventData {\n itemMaxQuantity: number;\n}\n\nexport interface IRemoveItemEvent {\n skuId: string;\n}\n\nexport interface IAddItemEvent {\n skuId: string;\n quantity: number;\n}\n\nexport interface IRemoveSaveForLaterEvent {\n skuId: string;\n quantity: number;\n}\n\nexport interface IChangeLocation {\n redirectUrl: string;\n}\n\nexport interface ISamplesSetEvent {\n skuIds: string[];\n offerCode: string;\n offerType: string;\n}\n\nexport interface IPaymentMethodDescription {\n providerId: string;\n methodId: string;\n}\n\nexport interface ICartPaymentMethodsSetEventData {\n paymentSources: IPaymentMethodDescription[];\n}\n\nexport type ServiceCartEvents = {\n [CART_BADGE_CLICKED]: undefined;\n [MOBILE_CART_BADGE_CLICKED]: undefined;\n [CART_UPDATED]: ICart;\n [CART_VIEWED]: undefined;\n [CART_FAILURE]: ICart;\n [SHIPPING_OPTION_SELECTED]: undefined;\n [EDIT_ADDRESS_CLICKED]: undefined;\n [CONTINUE_AS_GUEST_CLICKED]: IContinueAsGuestEvent;\n [GUEST_DESELECTED]: IGuestDeselectedEvent;\n [CART_PAGE_VIEW]: undefined;\n [CART_PRODUCT_SKU_LIMIT_REACHED]: ILimitReachedEventData;\n [SHOPPING_BAG_BUTTON_CLICKED]: undefined;\n [MANUAL_OFFER_CODE_APPLIED]: undefined;\n [REMOVE_ITEM]: IRemoveItemEvent;\n [ITEM_ADDED]: IAddItemEvent;\n [REVIEW_SCREEN_SUBMITTING]: undefined;\n [SAVE_FOR_LATER_REMOVE]: IRemoveSaveForLaterEvent;\n [CART_LOGGED_IN]: undefined;\n [SAMPLE_ADDED]: undefined;\n [CHANGE_LOCATION]: IChangeLocation;\n // an undefined payload can occur on any network error or 500 codes\n [OFFER_CODE_FAILED]: IOfferMessage | undefined;\n [NOT_ENOUGH_PRODUCTS]: undefined;\n [CART_SAMPLES_SET]: ISamplesSetEvent;\n [CART_PAYMENT_SOURCES_SET]: ICartPaymentMethodsSetEventData;\n};\n","export const PAYMENT_SUBMITTING = 'payment.submitting';\nexport const SHIPPING_SCREEN_SUBMITTING = 'shipping.screen.submitting';\nexport const BACK_HEADER_CLICKED = 'back.header.clicked';\nexport const EXTERNAL_PAYMENT_ERROR_RESTORE_PROCESSED = 'external.payment.error.restore.processed';\nexport const CHECKOUT_SESSION_SAVED = 'checkout.session.saved';\n\nexport interface IPaymentSubmitting {\n orderId: string;\n orderNumber: string;\n guestToken: string;\n amount: number;\n billingAddress: IAddress;\n}\n\nexport interface IAddress {\n addressMetadataId: string;\n attributes: {\n [key: string]: string;\n };\n}\n\nexport interface IExternalPaymentErrorRestoreProcessedEventData {\n success: boolean;\n}\n\nexport type ServiceCheckoutEvents = {\n [PAYMENT_SUBMITTING]: IPaymentSubmitting;\n [SHIPPING_SCREEN_SUBMITTING]: undefined;\n [BACK_HEADER_CLICKED]: undefined;\n [EXTERNAL_PAYMENT_ERROR_RESTORE_PROCESSED]: IExternalPaymentErrorRestoreProcessedEventData;\n [CHECKOUT_SESSION_SAVED]: undefined;\n};\n","export const SUBSCRIBED_FOR_EMAILS = 'subscribed.for.emails';\nexport const PRODUCT_NOTIFY_ME_REQUEST = 'product_notify.request';\nexport const PRODUCT_NOTIFY_ME_REQUEST_SUCCESS = 'product_notify.request.success';\nexport const PRODUCT_NOTIFY_ME_REQUEST_FAILURE = 'product_notify.request.failure';\nexport const PRODUCT_NOTIFY_ME_TRIGGERED = 'product_notify.triggered';\n\nexport interface IProductNotifyMeTriggered {\n skuId: string;\n skuBaseId: string;\n}\n\nexport interface IProductNotifyMeRequestData {\n context?: string;\n skuId: string;\n skuBaseId: string;\n email: string;\n subscriptionType: string;\n}\n\n//eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IProductNotifyMeRequestSuccessData extends IProductNotifyMeRequestData {}\n\nexport interface IProductNotifyMeRequestFailureData extends IProductNotifyMeRequestData {\n error?: string;\n}\n\nexport type ServiceCommunicationsEvents = {\n [SUBSCRIBED_FOR_EMAILS]: undefined;\n [PRODUCT_NOTIFY_ME_REQUEST]: IProductNotifyMeRequestData;\n [PRODUCT_NOTIFY_ME_REQUEST_SUCCESS]: IProductNotifyMeRequestSuccessData;\n [PRODUCT_NOTIFY_ME_REQUEST_FAILURE]: IProductNotifyMeRequestFailureData;\n [PRODUCT_NOTIFY_ME_TRIGGERED]: IProductNotifyMeTriggered;\n};\n","export const COMPONENTS_LOADED = 'components.loaded';\n\nexport interface IComponentsLoaded {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any[];\n}\n\nexport type ServiceComponentRendererEvents = {\n [COMPONENTS_LOADED]: IComponentsLoaded;\n};\n","export const FORGOT_PASSWORD_SIGNIN_CLICK = 'forgot.password.signin.click';\nexport const PASSWORD_RESET = 'password.reset';\n\nexport type ServiceForgotPasswordEvents = {\n [FORGOT_PASSWORD_SIGNIN_CLICK]: undefined;\n [PASSWORD_RESET]: undefined;\n};\n","import { IOfferMessage } from './CartInterfaces';\n\nexport const OFFERS_LOADED = 'offers.loaded';\nexport const APPLY_OFFER_CODE = 'apply.offer.code';\nexport const OFFER_CODE_SUCCEDED = 'offer.code.succeded';\n\nexport interface IMessage {\n readonly threshold: string | null;\n readonly deferred: string | null;\n readonly success: string | null;\n readonly error: string | null;\n}\n\nexport type ServiceOffersEvents = {\n [OFFERS_LOADED]: IOfferMessage[];\n [APPLY_OFFER_CODE]: string;\n [OFFER_CODE_SUCCEDED]: {};\n};\n","export const ORDER_HISTORY_REDIRECT = 'order.history.redirect';\nexport const ORDER_DETAILS_CLICKED = 'order.details.clicked';\nexport const ORDER_HISTORY_NO_ORDERS_LINK_CLICK = 'order.history.no.orders.link.click';\nexport type ServiceOrderHistoryEvents = {\n [ORDER_HISTORY_REDIRECT]: undefined;\n [ORDER_DETAILS_CLICKED]: string;\n [ORDER_HISTORY_NO_ORDERS_LINK_CLICK]: undefined;\n};\n","export const ORDER_CREATED = 'order.created';\nexport const ORDER_CONFLICT = 'order.conflict';\nexport const ORDER_FAILED = 'order.failed';\nexport const ORDER_CONFIRMATION_VIEW = 'order.confirmation.page.landed';\nexport const ROUTE_NOT_FOUND = 'route.not.found';\nexport const ORDER_CHECK = 'order.check';\nexport const ORDER_ASSOCIATE = 'order.associate';\nexport const ORDER_ASSOCIATE_SUCCESS = 'order.associate.success';\nexport const ORDER_ASSOCIATE_FAILURE = 'order.associate.failure';\n\nexport interface IOrderAddress {\n addressMetadataId: string;\n attributes: {\n [key: string]: string;\n };\n}\n\nexport interface IOrderCreated {\n id: string;\n amount: number;\n token: string;\n\n billingAddress: IOrderAddress;\n shippingAddresses: IOrderAddress[];\n}\n\nexport type orderErrorCodeType = '402' | '409' | '';\n\nexport interface IOrderConflict {\n message: orderErrorCodeType;\n}\n\nexport interface IOrderCheckEventData {\n orderId: string;\n}\n\nexport interface IOrderDetail {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface IOrderAssociateEventData {\n orderId: string;\n guestToken: string;\n}\n\nexport type ServiceOrderEvents = {\n [ORDER_CREATED]: IOrderCreated;\n [ORDER_CONFLICT]: IOrderConflict;\n [ORDER_FAILED]: IOrderDetail;\n [ORDER_CONFIRMATION_VIEW]: IOrderDetail;\n [ROUTE_NOT_FOUND]: undefined;\n [ORDER_CHECK]: IOrderCheckEventData;\n [ORDER_ASSOCIATE]: IOrderAssociateEventData;\n [ORDER_ASSOCIATE_SUCCESS]: IOrderAssociateEventData;\n [ORDER_ASSOCIATE_FAILURE]: IOrderAssociateEventData;\n};\n","export const PASSWORD_WITH_STRENGTH_CHANGED = 'password.with.strength.changed';\n\nexport interface IPasswordWithStrengthEvent {\n password: string;\n}\nexport type ServicePasswordStrengthEvents = {\n [PASSWORD_WITH_STRENGTH_CHANGED]: IPasswordWithStrengthEvent;\n};\n","export const TRANSACTION_FAILED = 'transaction.failed';\nexport const TRANSACTION_SUCCEDED = 'transaction.succeded';\nexport const SHIPPING_SCREEN_FAILURE = 'shipping.screen.failure';\nexport const PAYMENT_STRATEGY_CHANGED = 'payment.strategy.changed';\nexport const PAYMENT_STRATEGY_LOAD = 'payment.strategy.load';\nexport const PAYMENT_STRATEGY_LOAD_DONE = 'payment.strategy.load.done';\nexport const PAYMENT_STRATEGY_SAVE = 'payment.strategy.save';\nexport const PAYMENT_STRATEGY_SAVE_DONE = 'payment.strategy.save.done';\nexport const PAYMENT_STRATEGY_AVAILABILITY_SET = 'payment.strategy.availability.set';\nexport const PAYMENT_SUBMIT_REQUEST = 'payment.submit.request';\n\nenum PaymentStatus {\n AUTHORIZED = 'AUTHORIZED',\n PENDING = 'PENDING',\n REFUSED = 'REFUSED',\n UNKNOWN = 'UNKNOWN'\n}\n\ninterface IPaymentStrategyDetails {\n providerId: string;\n methodId: string;\n}\n\nexport interface ITransactionSuccededPayload {\n orderId: string;\n guestToken: string;\n paymentType: string;\n orderNumber: string;\n amount: number;\n info: string;\n tokenId?: string;\n status: PaymentStatus;\n paymentUrl: string | null;\n}\n\n/**\n * Triggered when the user changes the payment strategy.\n */\nexport interface IPaymentStrategyChangedEventData {\n /**\n * The logical name for the payment strategy.\n * If null then no payment strategy has been set.\n */\n name: string | null;\n\n /**\n * The payment provider id and method id pair used for the strategy\n */\n details: IPaymentStrategyDetails | null;\n\n /**\n * If set, the label for the 'Continue' checkout button.\n */\n continueCheckoutLabel?: string;\n}\n\nexport interface IPaymentStrategyLoadEventData {\n /**\n * The payment strategy name to restore to\n */\n name: string;\n\n /**\n * The load context\n */\n context: string;\n\n /**\n * Data used to restore the payment strategy\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any;\n}\n\nexport interface IPaymentStrategyLoadDoneEventData {\n /**\n * The payment strategy name\n */\n name: string;\n\n /**\n * The context\n */\n context: string;\n\n /**\n * Operation success\n */\n success: boolean;\n}\n\nexport interface IPaymentStrategySaveEventData {\n /**\n * The name of the payment strategy to save\n */\n name: string;\n\n /**\n * The context for the save operation\n */\n context: string;\n}\n\nexport interface IPaymentStrategySaveDoneEventData {\n /**\n * Payment strategy name\n */\n name: string;\n\n /**\n * Serialized data or null in case of failure\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any;\n\n /**\n * Operation context\n */\n context: string;\n\n /**\n * Operation success\n */\n success: boolean;\n}\n\nexport interface IPaymentSourceAvailability {\n name: string;\n enabled: boolean;\n}\n\nexport interface IPaymentStrategyAvailabilitySetEventData {\n paymentSources: IPaymentSourceAvailability[];\n}\n\nexport type ServicePaymentEvents = {\n [TRANSACTION_FAILED]: {};\n [TRANSACTION_SUCCEDED]: ITransactionSuccededPayload;\n [SHIPPING_SCREEN_FAILURE]: undefined;\n [PAYMENT_STRATEGY_CHANGED]: IPaymentStrategyChangedEventData;\n [PAYMENT_STRATEGY_LOAD]: IPaymentStrategyLoadEventData;\n [PAYMENT_STRATEGY_LOAD_DONE]: IPaymentStrategyLoadDoneEventData;\n [PAYMENT_STRATEGY_SAVE]: IPaymentStrategySaveEventData;\n [PAYMENT_STRATEGY_SAVE_DONE]: IPaymentStrategySaveDoneEventData;\n [PAYMENT_STRATEGY_AVAILABILITY_SET]: IPaymentStrategyAvailabilitySetEventData;\n [PAYMENT_SUBMIT_REQUEST]: undefined;\n};\n","export const ADD_SKU_TO_COLLECTION_TRIGGERED = 'sku.addToCollection';\nexport const ADD_SKU_TO_COLLECTION_SUCCESS = 'sku.addToCollectionSuccess';\nexport const ITEMS_LOADED_INTO_COLLECTION = 'sku.itemsLoadedIntoCollection';\nexport const GRID_FILTERED = 'grid.filtered';\nexport const GRID_SORTED = 'grid.sorted';\nexport const LIVE_CHAT_INTERFACE_CLICKED = 'product.liveChatInterfaceClicked';\nexport const MPP_FILTERED = 'mpp.filtered';\nexport const MPP_PAGE_VIEWED = 'mpp.page.viewed';\nexport const PRODUCTS_FILTERED_AND_SORTED = 'product.filteredAndSorted';\nexport const PRODUCT_CLICKED = 'product.clicked';\nexport const PRODUCT_COMPARISON_VIEWED = 'product.comparison.viewed';\nexport const PRODUCT_COMPARISON_ITEM_CLICKED = 'product.comparison.itemClicked';\nexport const ADD_TO_BAG_CLICKED = 'product.addToBagClicked';\nexport const PRODUCT_FULL_LOADED = 'product.full.loaded';\nexport const PRODUCT_FULL_VIEWED = 'product.full.viewed';\nexport const PRODUCT_GRID_VIEWED = 'product.grid.viewed';\nexport const PRODUCT_IMAGE_ENABLED = 'product.imageEnabled';\nexport const PRODUCT_IMAGE_DISPLAY_TRIGGERED = 'product.imageDisplay.triggered';\nexport const PRODUCT_IMAGE_NAVIGATION_TRIGGERED = 'product.imageNavigation.triggered';\nexport const PRODUCT_IMAGE_ZOOM_TRIGGERED = 'product.imageZoom.triggered';\nexport const PRODUCT_INFO_POPUP_CTA_CLICKED = 'product.infoPopupCtaClicked';\nexport const PRODUCT_LOADED = 'product.loaded';\nexport const PRODUCT_SHADE_GROUP_SELECTED = 'product.shadeGroupSelected';\nexport const PRODUCT_SHADE_SELECTED = 'product.shadeSelected';\nexport const PRODUCT_SHADE_SIZE_SELECTED = 'product.shadeSizeSelected';\nexport const PRODUCT_SKU_SELECTED = 'product.sku.selected';\nexport const PRODUCT_VIEWED = 'product.viewed';\nexport const QUICK_VIEW_TRIGGERED = 'quick.view.triggered';\nexport const SHADE_SIDEBAR_CLOSED = 'shade.sidebar.closed';\nexport const SHADE_SIDEBAR_IMAGE_ENABLED = 'shade.sidebar.imageEnabled';\nexport const SHADE_SIDEBAR_OPENED = 'shade.sidebar.opened';\nexport const SKU_ENGRAVING_TRIGGERED = 'sku.engraving.triggered';\nexport const SKU_PICKER_OPENED = 'sku.picker.opened';\nexport const SKU_PICKER_CLOSED = 'sku.picker.closed';\nexport const SOCIAL_SHARE_ICON_TRIGGERED = 'product.socialShareIconTriggered';\nexport const SPP_PAGE_LOADED = 'spp.page.loaded';\nexport const SPP_PAGE_VIEWED = 'spp.page.viewed';\nexport const SPP_POWER_REVIEWS_INIT = 'spp.powerReviews.init';\nexport const SPP_SELECTION = 'spp.shade.size.selected';\n\nenum FILTER_METHODS {\n filter = 'filter',\n sort = 'sort'\n}\n\nexport interface IAppliedFilter {\n category: string;\n option: string;\n}\n\nexport interface IMPPPageViewedEvent {\n skuIds: string[];\n}\n\ninterface IProductFullLoaded {\n productId: string;\n skuId: string;\n}\n\ninterface IProductFullViewed {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n product: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n selectedSku: any;\n}\n\ninterface IProductGridViewed {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n products: any[];\n}\n\ninterface IProductClicked {\n skuId: string;\n positionIndex: number;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n product?: any;\n}\n\nexport interface IMppFiltered {\n method: FILTER_METHODS;\n}\nexport interface IGridFitlered {\n appliedFilters: IAppliedFilter[];\n}\n\nexport interface IGridSorted {\n appliedSort: string;\n}\n\nexport interface IProductInfoPopupPayload {\n dataField: string;\n level?: string;\n header?: string;\n}\n\nexport interface IProductImage {\n eventAction: string;\n eventLabel: string;\n enhancedAction?: string;\n promoCreative?: string;\n promoId?: string;\n promoName?: string;\n promoPosition?: number;\n}\n\nexport interface ISkuEngravingEvent {\n skuId: string;\n skuBaseId?: number;\n size: string;\n price: string;\n name: string;\n}\n\nexport interface IItemsCollectionInfo {\n productQtys: { [skuId in string | number]: number };\n}\n\nexport type ServiceProdcatEvents = {\n [ADD_SKU_TO_COLLECTION_TRIGGERED]: { skuId: string; quantity?: number };\n [ADD_SKU_TO_COLLECTION_SUCCESS]: undefined;\n [ITEMS_LOADED_INTO_COLLECTION]: IItemsCollectionInfo;\n [GRID_FILTERED]: IGridFitlered;\n [GRID_SORTED]: IGridSorted;\n [LIVE_CHAT_INTERFACE_CLICKED]: { eventLabel?: string };\n [MPP_FILTERED]: IMppFiltered;\n [MPP_PAGE_VIEWED]: IMPPPageViewedEvent;\n [PRODUCTS_FILTERED_AND_SORTED]: {};\n [PRODUCT_CLICKED]: IProductClicked;\n [PRODUCT_COMPARISON_VIEWED]: { productIds: string[] };\n [PRODUCT_COMPARISON_ITEM_CLICKED]: { productPosition: number; productId: string };\n [ADD_TO_BAG_CLICKED]: { productId: string; context: string };\n [PRODUCT_FULL_LOADED]: IProductFullLoaded;\n [PRODUCT_FULL_VIEWED]: IProductFullViewed;\n [PRODUCT_GRID_VIEWED]: IProductGridViewed;\n [PRODUCT_IMAGE_ENABLED]: boolean;\n [PRODUCT_IMAGE_DISPLAY_TRIGGERED]: IProductImage;\n [PRODUCT_IMAGE_NAVIGATION_TRIGGERED]: IProductImage;\n [PRODUCT_IMAGE_ZOOM_TRIGGERED]: IProductImage;\n [PRODUCT_INFO_POPUP_CTA_CLICKED]: IProductInfoPopupPayload;\n [PRODUCT_LOADED]: string[];\n [PRODUCT_SHADE_GROUP_SELECTED]: {\n eventAction: string;\n eventName: string;\n shadeGroupKey: string;\n };\n [PRODUCT_SHADE_SELECTED]: { shadeName: string };\n [PRODUCT_SHADE_SIZE_SELECTED]: {};\n [PRODUCT_SKU_SELECTED]: { skuId: string; payload?: object };\n [PRODUCT_VIEWED]: { skuId: string };\n [QUICK_VIEW_TRIGGERED]: IProductClicked;\n [SHADE_SIDEBAR_CLOSED]: undefined;\n [SHADE_SIDEBAR_IMAGE_ENABLED]: { isEnabled: boolean };\n [SHADE_SIDEBAR_OPENED]: undefined;\n [SKU_ENGRAVING_TRIGGERED]: ISkuEngravingEvent;\n [SKU_PICKER_OPENED]: { productId: string };\n [SKU_PICKER_CLOSED]: { productId: string };\n [SOCIAL_SHARE_ICON_TRIGGERED]: { eventLabel?: string };\n [SPP_PAGE_LOADED]: {};\n [SPP_PAGE_VIEWED]: string;\n [SPP_POWER_REVIEWS_INIT]: string;\n [SPP_SELECTION]: {};\n};\n","export const SAVE_FOR_LATER_ADD_BACK_TO_CART = 'saveforlater.addItemBack';\nexport const SAVE_FOR_LATER_UPDATE_FAILED = 'saveforlater.updateFailed';\nexport interface ISaveForLaterAddBackToCart {\n skuId: string;\n quantity: number;\n}\n\nexport type ServiceSaveForLaterEvents = {\n [SAVE_FOR_LATER_ADD_BACK_TO_CART]: ISaveForLaterAddBackToCart;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [SAVE_FOR_LATER_UPDATE_FAILED]: Record;\n};\n","export const SEARCH_PRODUCTS_QUERIED = 'search.products.queried';\nexport const SEARCH_TERM_SELECTED = 'search.term.selected';\nexport const SEARCH_OVERLAY_DISPLAYED = 'search.overlay.displayed';\nexport const SEARCH_FILTERS_SELECTED = 'search.filters.selected';\nexport const SEARCH_SHOULD_RENDER = 'search.should.render';\nexport const SEARCH_ICON_HIDE = 'search.icon.hide';\n\nexport interface ISearchProductsQueried {\n searchTerm: string;\n searchType?: string;\n skuIds?: string[];\n}\n\nexport interface ISearchTermSelected {\n searchTerm: string;\n}\n\nexport interface ISearchOverlayDisplayed {\n promoItemNumber?: string;\n promoItemName?: string;\n}\n\nexport interface ISearchFiltersSelected {\n facetId: string;\n responseId?: string;\n filterCategory?: string;\n filterLabel?: string;\n}\n\nexport type ServiceSearchEvents = {\n [SEARCH_PRODUCTS_QUERIED]: ISearchProductsQueried;\n [SEARCH_TERM_SELECTED]: ISearchTermSelected;\n [SEARCH_OVERLAY_DISPLAYED]: ISearchOverlayDisplayed;\n [SEARCH_FILTERS_SELECTED]: ISearchFiltersSelected;\n [SEARCH_SHOULD_RENDER]: undefined;\n [SEARCH_ICON_HIDE]: undefined;\n};","export const AUTH_ATTEMPT = 'authentication.attempt';\nexport const AUTH_FAILED = 'authentication.failed';\nexport const AUTH_SUCCEDED = 'authentication.succeded';\nexport const FORGOT_PASSWORD_LINK_CLICK = 'forgot.password.link.click';\nexport const SIGNED_OUT = 'authentication.signed-out';\nexport const UNAUTHORIZED_REQUEST = 'app.elc-unauthorized-request';\nexport const SIGN_UP_LINK_CLICKED = 'sign.up.link.clicked';\nexport const REQUEST_CARE_AUTH = 'request.care.auth';\n\nexport type IStrategyConfig = {\n [key: string]: unknown;\n};\n\nexport interface IRequestCareAuthPayload {\n context?: string;\n strategy?: string;\n redirectUrl?: string;\n strategies?: {\n [name: string]: IStrategyConfig;\n };\n}\n\nexport interface IAuthSession {\n token: string;\n source: string;\n email: string;\n}\n\nexport interface IPayloadSignUpClick {\n urlRedirectOnSuccess?: string;\n}\n\nexport type ServiceSignInEvents = {\n [AUTH_ATTEMPT]: undefined;\n [AUTH_FAILED]: string;\n [AUTH_SUCCEDED]: IAuthSession | {};\n [FORGOT_PASSWORD_LINK_CLICK]: undefined;\n [SIGNED_OUT]: undefined;\n [UNAUTHORIZED_REQUEST]: undefined;\n [SIGN_UP_LINK_CLICKED]: IPayloadSignUpClick | void;\n [REQUEST_CARE_AUTH]: IRequestCareAuthPayload | undefined;\n};\n","export const CREATE_ACCOUNT_ATTEMPT = 'create.account.attempt';\nexport const CREATE_ACCOUNT_FAIL = 'create.account.fail';\nexport const CHANGE_EMAIL_LINK_CLICKED = 'change.email.link.clicked';\nexport const REGISTRATION_CONFIRMED = 'registration.confirmed';\nexport const SIGN_IN_LINK_CLICKED = 'sign.in.link.clicked';\n\nexport interface IPayloadSignInClick {\n urlRedirectOnSuccess?: string;\n}\nexport type ServiceSignUpEvents = {\n [CREATE_ACCOUNT_ATTEMPT]: {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CREATE_ACCOUNT_FAIL]: any;\n [CHANGE_EMAIL_LINK_CLICKED]: undefined;\n [REGISTRATION_CONFIRMED]: undefined;\n [SIGN_IN_LINK_CLICKED]: IPayloadSignInClick | void;\n};\n","export const BOOK_APPOINTMENT_CLICKED = 'book.appointment.clicked';\nexport const GET_DIRECTIONS_CLICKED = 'get.directions.clicked';\nexport const SEARCH_ADDRESS_SUBMITTED = 'search.address.submited';\nexport const STORE_DETAILS_CLICKED = 'store.detail.clicked';\nexport const STORE_INFO_CLICKED = 'store.info.clicked';\nexport const STORE_MARKER_CLICKED = 'store.marker.clicked';\nexport const STORE_PHONE_CLICKED = 'store.phone.clicked';\nexport const BOOK_VIRTUAL_APPOINTMENT_CLICKED = 'book.virtual.appointment.clicked';\nexport const STORE_DELIVERY_TYPE_SELECTED = 'store.delivery.type.selected';\nexport const STORE_SEARCH_ADDRESS_SUBMITTED = 'store.search.address.submited';\nexport const STORE_CHANGE_LINK_CLICKED = 'store.change.link.clicked';\nexport const STORE_SELECTED = 'store.selected';\nexport const STORE_OPENING_HOURS_TOGGLED = 'store.opening.hours.toggled';\nexport const STORE_FILTER_TOGGLED = 'store.filter.toggled';\nexport const STORE_DIRECTORY_LINK_CLICKED = 'store.directory.link.clicked';\nexport const STORE_DIRECTORY_MAP_LINK_CLICKED = 'store.directory.map.link.clicked';\nexport const STORE_DIRECTORY_STORE_LINK_CLICKED = 'store.directory.store.link.clicked';\nexport const STORE_MAP_MARKER_CLICKED = 'store.map.marker.clicked';\nexport const STORE_GET_DIRECTIONS_CLICKED = 'store.get.directions.clicked';\nexport const STORE_DETAILS_LINK_CLICKED = 'store.details.link.clicked';\nexport const STORE_BOOK_APPOINTMENT_LINK_CLICKED = 'store.book.appointment.link.clicked';\nexport const STORE_DETAILS_ADDRESS_LINK_CLICKED = 'store.details.address.link.clicked';\nexport const STORE_DETAILS_IN_STORE_PICKUP_LINK_CLICKED = 'store.details.in.store.pickup.link.clicked';\nexport const STORE_NEAR_BY_GET_DIRECTIONS_CLICKED = 'store.near.by.get.directions.link.clicked';\nexport const STORE_LOCATION_RESET_CLICKED = 'store.location.reset.link.clicked';\nexport const STORE_TAB_VIEW_SECTION_CLICKED = 'store.tab.view.section.clicked';\n\nexport interface IStoreData {\n storeId?: string;\n storeName?: string | undefined;\n}\n\nexport interface ISearchAddress {\n address?: string | undefined;\n}\n\nexport interface IVirtualAppointmentData {\n isVirtual: boolean;\n}\n\nexport interface IStoreDeliveryMethodData {\n eventAction: string;\n eventLabel: string;\n eventName?: string;\n eventCategory?: string;\n}\n\nexport type ServiceStoresEvents = {\n [BOOK_APPOINTMENT_CLICKED]: IStoreData | void;\n [GET_DIRECTIONS_CLICKED]: IStoreData | void;\n [SEARCH_ADDRESS_SUBMITTED]: ISearchAddress;\n [STORE_DETAILS_CLICKED]: IStoreData | void;\n [STORE_INFO_CLICKED]: IStoreData | void;\n [STORE_MARKER_CLICKED]: IStoreData | void;\n [STORE_PHONE_CLICKED]: IStoreData | void;\n [BOOK_VIRTUAL_APPOINTMENT_CLICKED]: IVirtualAppointmentData | void;\n [STORE_DELIVERY_TYPE_SELECTED]: IStoreDeliveryMethodData | void;\n [STORE_SEARCH_ADDRESS_SUBMITTED]: IStoreDeliveryMethodData | void;\n [STORE_CHANGE_LINK_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_SELECTED]: IStoreDeliveryMethodData | void;\n [STORE_OPENING_HOURS_TOGGLED]: IStoreDeliveryMethodData | void;\n [STORE_FILTER_TOGGLED]: IStoreDeliveryMethodData | void;\n [STORE_DIRECTORY_LINK_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_DIRECTORY_MAP_LINK_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_DIRECTORY_STORE_LINK_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_MAP_MARKER_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_GET_DIRECTIONS_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_DETAILS_LINK_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_BOOK_APPOINTMENT_LINK_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_DETAILS_ADDRESS_LINK_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_DETAILS_IN_STORE_PICKUP_LINK_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_NEAR_BY_GET_DIRECTIONS_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_LOCATION_RESET_CLICKED]: IStoreDeliveryMethodData | void;\n [STORE_TAB_VIEW_SECTION_CLICKED]: IStoreDeliveryMethodData | void;\n};\n","export const SHIPPING_ADDRESS_FILLED = 'shipping.address.filled';\nexport const ACCOUNT_SETTINGS_LINK_CLICK = 'account.settings.link.click';\nexport const CREATE_ACCOUNT_SUCCESS = 'create.account.success';\nexport const LOGGED_IN_SUCCESSFUL = 'logged.in.successful';\nexport const USER_LOADED = 'user.loaded';\nexport const GUEST_FORM_VALIDITY_CHANGED = 'guest.form.validity.changed';\nexport const USER_PROFILE_CHANGED = 'user.profile.changed';\nexport const GET_OPTIN_PROFILE_LOAD = 'get.optin.profile.load';\nexport const SIGN_OUT_COMPLETED = 'sign.out.completed';\nexport const ADDRESS_SELECTION_CHANGED = 'address.selection.changed';\nexport const ADDRESS_SELECTION_VALIDITY_CHANGED = 'address.selection.validity.changed';\nexport const ADDRESS_EDIT_CHANGED = 'address.edit.changed';\nexport const ADDRESS_EDIT_VALIDITY_CHANGED = 'address.edit.validity.changed';\nexport const FAVORITES_LOADED = 'user.favorites.loaded';\nexport const FAVORITE_SELECTED = 'user.favorite.selected';\nexport const FAVORITE_STATUS_UPDATED = 'user.favorite.status.updated';\n\nexport interface IAddressAttributes {\n [field: string]: string;\n}\n\nexport interface IAddress {\n id: string;\n isDefault?: boolean;\n addressMetadataId: string;\n attributes: IAddressAttributes;\n}\n\nexport interface IUserProfileChangedEventData {\n email: string;\n}\n\nexport interface IOptionProfileLoadEventData {\n email: string;\n source: string;\n}\n\nexport interface IValidityChangedEventData {\n isValid: boolean;\n}\n\nexport interface IAddressSelectionValidityChangedEventData {\n isValid: boolean;\n context: string;\n}\n\nexport interface IAddressSelectionChangedEventData {\n context: string;\n address: IAddress | null;\n isNew?: boolean;\n}\n\nexport interface IAddressEditChangedEventData {\n context: string;\n address: IAddress;\n}\n\nexport interface IAddressEditValidityChangedEventData {\n context: string;\n isValid: boolean;\n}\n\nexport interface IFavoriteSelectedEventData {\n skuBaseId: number;\n}\n\nexport interface IFavoritesLoadedEventData {\n skuBaseIds: number[];\n}\n\nexport interface IFavoriteStatusUpdatedEventData {\n skuBaseId: number;\n isFavorite?: boolean;\n isAlreadyAdded?: boolean;\n}\n\nexport type ServiceUserProfileEvents = {\n [ACCOUNT_SETTINGS_LINK_CLICK]: undefined;\n [CREATE_ACCOUNT_SUCCESS]: undefined;\n [LOGGED_IN_SUCCESSFUL]: undefined;\n [USER_LOADED]: undefined;\n [GUEST_FORM_VALIDITY_CHANGED]: IValidityChangedEventData;\n [USER_PROFILE_CHANGED]: IUserProfileChangedEventData;\n [SIGN_OUT_COMPLETED]: undefined;\n [GET_OPTIN_PROFILE_LOAD]: IOptionProfileLoadEventData;\n [ADDRESS_SELECTION_CHANGED]: IAddressSelectionChangedEventData;\n [ADDRESS_SELECTION_VALIDITY_CHANGED]: IAddressSelectionValidityChangedEventData;\n [ADDRESS_EDIT_CHANGED]: IAddressEditChangedEventData;\n [ADDRESS_EDIT_VALIDITY_CHANGED]: IAddressEditValidityChangedEventData;\n [FAVORITES_LOADED]: IFavoritesLoadedEventData;\n [FAVORITE_SELECTED]: IFavoriteSelectedEventData;\n [FAVORITE_STATUS_UPDATED]: IFavoriteStatusUpdatedEventData;\n};\n","// TODO: remove this once all sites are on elc-serivce-analytics@3.0\nexport const CONFIG_ANALYTICS = 'config.analytics';\nexport const ANALYTICS_LOADED = 'analytics.loaded';\nexport const ANALYTICS_PRODUCTS_VIEWED = 'analytics.products.viewed';\nexport const ANALYTICS_PRODUCT_VIEWED = 'analytics.product.viewed';\nexport const ANALYTICS_PAGE_VIEWED = 'analytics.page.viewed';\n\nexport interface IConfigAnalytics {\n enabled: boolean;\n}\n\nexport interface IProductsViewed {\n skuIds?: string[];\n productIds?: string[];\n productTags?: string[];\n}\n\nexport interface IProductViewed {\n skuId?: string;\n productId?: string;\n}\n\nexport type ServiceAnalyticsEvents = {\n [CONFIG_ANALYTICS]: IConfigAnalytics;\n [ANALYTICS_LOADED]: undefined;\n [ANALYTICS_PRODUCTS_VIEWED]: IProductsViewed;\n [ANALYTICS_PRODUCT_VIEWED]: IProductViewed;\n [ANALYTICS_PAGE_VIEWED]: undefined;\n};\n","export const VTO_ALL_SHADES_VIEWED = 'vto.allShadesViewed';\nexport const VTO_BEST_SHADES_VIEWED = 'vto.bestShadesViewed';\nexport const VTO_CAMERA_CLOSED = 'vto.cameraClosed';\nexport const VTO_CAMERA_FAILED = 'vto.cameraFailed';\nexport const VTO_CAMERA_OPENED = 'vto.cameraOpened';\nexport const VTO_CLOSED = 'vto.closed';\nexport const VTO_COMPARE = 'vto.compare';\nexport const VTO_COMPARE_DISABLED = 'vto.compareDisabled';\nexport const VTO_ENABLED = 'vto.enabled';\nexport const VTO_ENGINE_CLOSED = 'vto.engineClosed';\nexport const VTO_FOUNDATION_OVERLAY_TOGGLED = 'vto.foundation.overlay.toggled';\nexport const VTO_FOUNDATION_QR_CODE_OVERLAY_CLOSED = 'vto.foundationQrCodeOverlayClosed';\nexport const VTO_FOUNDATION_QR_CODE_OVERLAY_OPENED = 'vto.foundationQrCodeOverlayOpened';\nexport const VTO_KISS_DETECTED = 'vto.kissDetected';\nexport const VTO_LOADED = 'vto.loaded';\nexport const VTO_LOADING = 'vto.loading';\nexport const VTO_MATCH_REMOVED = 'vto.match.removed';\nexport const VTO_MATCH_SAVED = 'vto.match.saved';\nexport const VTO_MATCH_PERSONALIZED = 'vto.match.personalized';\nexport const VTO_OPENED = 'vto.opened';\nexport const VTO_PAIR_SHADE_GRID_OPENED = 'vto.pairShadeGridOpened';\nexport const VTO_PAIR_SHADE_SELECTED = 'vto.pairShadeSelected';\nexport const VTO_PHOTO_LOADED = 'vto.photoLoaded';\nexport const VTO_PHOTO_SAVED = 'vto.photoSaved';\nexport const VTO_PRICE_SUPPRESSED = 'vto.priceSuppressed';\nexport const VTO_RESET = 'vto.reset';\nexport const VTO_SHADE_FINDER_CANCELLED = 'vto.shadeFinderCancelled';\nexport const VTO_SHADE_FINDER_COMPLETED = 'vto.shadeFinderCompleted';\nexport const VTO_SHADE_FINDER_STARTED = 'vto.shadeFinderStarted';\nexport const VTO_SHADE_REMINDER_OVERLAY_CLOSED = 'vto.shadeReminderOverlayClosed';\nexport const VTO_SHADE_REMINDER_OVERLAY_OPENED = 'vto.shadeReminderOverlayOpened';\nexport const VTO_SHADE_REMINDER_OVERLAY_RETAINED = 'vto.shadeReminderOverlayRetained';\nexport const VTO_SHADE_REMINDER_OVERLAY_RETAKEN = 'vto.shadeReminderOverlayRetaken';\nexport const VTO_SHADE_SELECTED = 'vto.shadeSelected';\nexport const VTO_SKIN_ANALYSIS_FINISHED = 'vto.skin.care.analysisFinished';\nexport const VTO_SKIN_ANALYSIS_STARTED = 'vto.skin.care.analysisStarted';\nexport const VTO_SKIN_BACK_TO_DETECTING = 'vto.skin.care.backToDetecting';\nexport const VTO_SKIN_CARE_CAMERA_CLOSED = 'vto.skin.care.cameraClosed';\nexport const VTO_SKIN_CARE_CAMERA_FAILED = 'vto.skin.care.cameraFailed';\nexport const VTO_SKIN_CARE_CAMERA_OPENED = 'vto.skin.care.cameraOpened';\nexport const VTO_SKIN_CARE_CLOSED = 'vto.skin.care.closed';\nexport const VTO_SKIN_CARE_LOADED = 'vto.skin.care.loaded';\nexport const VTO_SKIN_CARE_LOADING = 'vto.skin.care.loading';\nexport const VTO_SKIN_CARE_OPENED = 'vto.skin.care.opened';\nexport const VTO_SKIN_CARE_PRODUCTS_LOADED = 'vto.skinCareProductsLoaded';\nexport const VTO_SKIN_CARE_RESULT_LOADED = 'vto.skin.care.result.loaded';\nexport const VTO_SKIN_CARE_VIDEO_LOADED = 'vto.skin.care.videoLoaded';\nexport const VTO_SKIN_SHADE_FOUND = 'vto.skinShadeFound';\nexport const VTO_SPLIT_FOUR_WAY_DISABLED = 'vto.splitFourWayDisabled';\nexport const VTO_SPLIT_FOUR_WAY_ENABLED = 'vto.splitFourWayEnabled';\nexport const VTO_SURVEY_IGNORED = 'vto.surveyIgnored';\nexport const VTO_SURVEY_LOADED = 'vto.surveyLoaded';\nexport const VTO_SURVEY_SUBMITTED = 'vto.surveySubmitted';\nexport const VTO_VIDEO_LOADED = 'vto.videoLoaded';\nexport const VTO_ZOOM = 'vto.zoom';\nexport const VTO_TUTORIAL_STARTED = 'vto.tutorialStarted';\nexport const VTO_TUTORIAL_UNMUTED = 'vto.tutorialUnmuted';\nexport const VTO_TUTORIAL_MUTED = 'vto.tutorialMuted';\nexport const VTO_TUTORIAL_PAUSED = 'vto.tutorialPaused';\nexport const VTO_TUTORIAL_STOPPED = 'vto.tutorialStopped';\nexport const VTO_TUTORIAL_RESUMED = 'vto.tutorialResumed';\nexport const VTO_TUTORIAL_PLAY_SPEED_UPDATED = 'vto.tutorialPlaySpeedUpdated';\nexport const VTO_TUTORIAL_PREVIOUS_STEP = 'vto.tutorialPreviousStep';\nexport const VTO_TUTORIAL_NEXT_STEP = 'vto.tutorialNextStep';\nexport const VTO_TUTORIAL_LOOK_SELECTED = 'vto.lookSelected';\nexport const VTO_TUTORIAL_PRODUCT_LIST_CLICKED = 'vto.productListClicked';\nexport const VTO_TUTORIAL_PRODUCTS_USED_ITEM_CLICKED = 'vto.productsUsedItemClicked';\nexport const VTO_BROW_FACE_ATTRIBUTE_PREDICTION_STARTED = 'vto.faceAttributePredictionStarted';\nexport const VTO_BROW_FACE_ATTRIBUTE_UPDATED = 'vto.faceAttributeUpdated';\nexport const VTO_BROW_GOAL_SELECTED = 'vto.browGoalSelected';\nexport const VTO_BROW_TIPS_CLICKED = 'vto.tipsClicked';\nexport const VTO_BROW_BACK_TO_GOALS_CLICKED = 'vto.backToGoalsClicked';\nexport const VTO_BROW_SHAPE_CHANGED = 'vto.shapeChanged';\nexport const VTO_BROW_SHADE_TRY_ON = 'vto.browShadeTryOn';\nexport const VTO_BROW_LENGTH_CHANGED = 'vto.lengthChanged';\nexport const VTO_BROW_THICKNESS_CHANGED = 'vto.thicknessChanged';\nexport const VTO_BROW_OPACITY_CHANGED = 'vto.opacityChanged';\nexport const VTO_BROW_GOLDEN_RATION_ENABLED = 'vto.goldenRatioEnabled';\nexport const VTO_BROW_GOLDEN_RATION_DISABLED = 'vto.goldenRatioDisabled';\nexport const VTO_BROW_STENCIL_ENABLED = 'vto.stencilEnabled';\nexport const VTO_BROW_STENCIL_DISABLED = 'vto.stencilDisabled';\nexport const VTO_BROW_COMPARE_ENABLED = 'vto.compareEnabled';\nexport const VTO_BROW_CAPTURE_CLICKED = 'vto.captureClicked';\nexport const VTO_BROW_SEE_ALL_SHADES_CLICKED = 'vto.seeAllShadesClicked';\nexport const VTO_BROW_GET_BROW_CLICKED = 'vto.getBrowClicked';\n\ninterface IVtoEvent {\n vtoType?: string;\n vtoMediaType?: string;\n}\ninterface ISkinCareProductsLoaded extends IVtoEvent {\n isShoppable: boolean;\n}\ninterface IFoundationOverlayOpened extends IVtoEvent {\n isOverlayOpened: boolean;\n}\ninterface IVtoLoaded extends IVtoEvent {\n eventValue?: number;\n}\ninterface IVtoClosed extends IVtoEvent {\n eventValue?: number;\n}\ninterface IVtoShadeSelected extends IVtoEvent {\n eventLabel: string;\n}\n\ninterface IVtoLookSelected extends IVtoEvent {\n vtoLookIndex?: number;\n vtoLookId?: string;\n}\n\ninterface IVtoProductsUsedItemClicked extends IVtoEvent {\n vtoItemId?: string;\n}\n\ninterface IVtoBrowGoalSelected extends IVtoEvent {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n vtoBrowGoals?: any[];\n}\n\ninterface IVtoShapeChanged extends IVtoEvent {\n vtoBrowShape?: string;\n}\n\ninterface IVtoBrowShadeTryOn extends IVtoEvent {\n vtoBrowSkuId?: string;\n}\n\ninterface IVtoLengthChanged extends IVtoEvent {\n vtoBrowLength?: string;\n}\n\ninterface IVtoThicknessChanged extends IVtoEvent {\n vtoBrowThickness?: string;\n}\n\ninterface IVtoOpacityChanged extends IVtoEvent {\n vtoBrowOpacity?: number;\n}\n\nexport type ServiceVtoEvents = {\n [VTO_ALL_SHADES_VIEWED]: IVtoEvent | void;\n [VTO_BEST_SHADES_VIEWED]: IVtoEvent | void;\n [VTO_CAMERA_CLOSED]: IVtoEvent | void;\n [VTO_CAMERA_FAILED]: IVtoEvent | void;\n [VTO_CAMERA_OPENED]: IVtoEvent | void;\n [VTO_CLOSED]: IVtoClosed | void;\n [VTO_COMPARE]: IVtoEvent | void;\n [VTO_COMPARE_DISABLED]: IVtoEvent | void;\n [VTO_ENABLED]: IVtoEvent;\n [VTO_ENGINE_CLOSED]: IVtoEvent | void;\n [VTO_FOUNDATION_OVERLAY_TOGGLED]: IFoundationOverlayOpened;\n [VTO_FOUNDATION_QR_CODE_OVERLAY_CLOSED]: IVtoEvent | void;\n [VTO_FOUNDATION_QR_CODE_OVERLAY_OPENED]: IVtoEvent | void;\n [VTO_KISS_DETECTED]: IVtoEvent | void;\n [VTO_LOADED]: IVtoLoaded | void;\n [VTO_LOADING]: IVtoEvent | void;\n [VTO_MATCH_REMOVED]: IVtoEvent | void;\n [VTO_MATCH_SAVED]: IVtoEvent | void;\n [VTO_MATCH_PERSONALIZED]: IVtoEvent | void;\n [VTO_OPENED]: IVtoEvent | void;\n [VTO_PAIR_SHADE_GRID_OPENED]: IVtoEvent | void;\n [VTO_PAIR_SHADE_SELECTED]: IVtoEvent | void;\n [VTO_PHOTO_LOADED]: IVtoEvent | void;\n [VTO_PHOTO_SAVED]: IVtoEvent | void;\n [VTO_PRICE_SUPPRESSED]: IVtoEvent | void;\n [VTO_RESET]: IVtoEvent | void;\n [VTO_SHADE_FINDER_CANCELLED]: IVtoEvent | void;\n [VTO_SHADE_FINDER_COMPLETED]: IVtoEvent | void;\n [VTO_SHADE_FINDER_STARTED]: IVtoEvent | void;\n [VTO_SHADE_REMINDER_OVERLAY_CLOSED]: IVtoEvent;\n [VTO_SHADE_REMINDER_OVERLAY_OPENED]: IVtoEvent;\n [VTO_SHADE_REMINDER_OVERLAY_RETAINED]: IVtoEvent;\n [VTO_SHADE_REMINDER_OVERLAY_RETAKEN]: IVtoEvent;\n [VTO_SHADE_SELECTED]: IVtoShadeSelected;\n [VTO_SKIN_ANALYSIS_FINISHED]: IVtoEvent | void;\n [VTO_SKIN_ANALYSIS_STARTED]: IVtoEvent | void;\n [VTO_SKIN_BACK_TO_DETECTING]: IVtoEvent | void;\n [VTO_SKIN_CARE_CAMERA_CLOSED]: IVtoEvent | void;\n [VTO_SKIN_CARE_CAMERA_FAILED]: IVtoEvent | void;\n [VTO_SKIN_CARE_CAMERA_OPENED]: IVtoEvent | void;\n [VTO_SKIN_CARE_CLOSED]: IVtoEvent | void;\n [VTO_SKIN_CARE_CLOSED]: IVtoEvent | void;\n [VTO_SKIN_CARE_LOADED]: IVtoEvent | void;\n [VTO_SKIN_CARE_LOADING]: IVtoEvent | void;\n [VTO_SKIN_CARE_OPENED]: IVtoEvent | void;\n [VTO_SKIN_CARE_PRODUCTS_LOADED]: ISkinCareProductsLoaded;\n [VTO_SKIN_CARE_RESULT_LOADED]: IVtoEvent | void;\n [VTO_SKIN_CARE_VIDEO_LOADED]: IVtoEvent | void;\n [VTO_SKIN_SHADE_FOUND]: IVtoEvent | void;\n [VTO_SPLIT_FOUR_WAY_DISABLED]: IVtoEvent;\n [VTO_SPLIT_FOUR_WAY_ENABLED]: IVtoEvent;\n [VTO_SURVEY_IGNORED]: IVtoEvent;\n [VTO_SURVEY_LOADED]: IVtoEvent;\n [VTO_SURVEY_SUBMITTED]: IVtoEvent;\n [VTO_VIDEO_LOADED]: IVtoEvent | void;\n [VTO_ZOOM]: IVtoEvent | void;\n [VTO_TUTORIAL_STARTED]: IVtoEvent | void;\n [VTO_TUTORIAL_UNMUTED]: IVtoEvent | void;\n [VTO_TUTORIAL_MUTED]: IVtoEvent | void;\n [VTO_TUTORIAL_PAUSED]: IVtoEvent | void;\n [VTO_TUTORIAL_STOPPED]: IVtoEvent | void;\n [VTO_TUTORIAL_RESUMED]: IVtoEvent | void;\n [VTO_TUTORIAL_PLAY_SPEED_UPDATED]: IVtoEvent | void;\n [VTO_TUTORIAL_PREVIOUS_STEP]: IVtoEvent | void;\n [VTO_TUTORIAL_NEXT_STEP]: IVtoEvent | void;\n [VTO_TUTORIAL_LOOK_SELECTED]: IVtoLookSelected;\n [VTO_TUTORIAL_PRODUCT_LIST_CLICKED]: IVtoEvent | void;\n [VTO_TUTORIAL_PRODUCTS_USED_ITEM_CLICKED]: IVtoProductsUsedItemClicked;\n [VTO_BROW_FACE_ATTRIBUTE_PREDICTION_STARTED]: IVtoEvent | void;\n [VTO_BROW_FACE_ATTRIBUTE_UPDATED]: IVtoEvent | void;\n [VTO_BROW_GOAL_SELECTED]: IVtoBrowGoalSelected;\n [VTO_BROW_TIPS_CLICKED]: IVtoEvent | void;\n [VTO_BROW_BACK_TO_GOALS_CLICKED]: IVtoEvent | void;\n [VTO_BROW_SHAPE_CHANGED]: IVtoShapeChanged;\n [VTO_BROW_SHADE_TRY_ON]: IVtoBrowShadeTryOn;\n [VTO_BROW_LENGTH_CHANGED]: IVtoLengthChanged;\n [VTO_BROW_THICKNESS_CHANGED]: IVtoThicknessChanged;\n [VTO_BROW_OPACITY_CHANGED]: IVtoOpacityChanged;\n [VTO_BROW_GOLDEN_RATION_ENABLED]: IVtoEvent | void;\n [VTO_BROW_GOLDEN_RATION_DISABLED]: IVtoEvent | void;\n [VTO_BROW_STENCIL_ENABLED]: IVtoEvent | void;\n [VTO_BROW_STENCIL_DISABLED]: IVtoEvent | void;\n [VTO_BROW_COMPARE_ENABLED]: IVtoEvent | void;\n [VTO_BROW_CAPTURE_CLICKED]: IVtoEvent | void;\n [VTO_BROW_SEE_ALL_SHADES_CLICKED]: IVtoEvent | void;\n [VTO_BROW_GET_BROW_CLICKED]: IVtoEvent | void;\n};\n","export const SMARTGIFT_ADDED = 'smartGift.added';\nexport const SMARTGIFT_VIEWED = 'smartGift.viewed';\nexport const SMARTGIFT_WIDGET_TOGGLED = 'smartGift.widgetToggled';\nexport const SMARTGIFT_PREPARED = 'smartGift.prepared';\nexport const SMARTGIFT_REMOVED = 'smartGift.removed';\nexport const SMARTGIFT_CANCELLED = 'smartGift.cancelled';\nexport const SMARTGIFT_HELP_OPENED = 'smartGift.helpOpened';\nexport const SMARTGIFT_HELP_CLOSED = 'smartGift.helpClosed';\n\ninterface ISmartGiftPayload {\n productId: string;\n}\n\nexport type ServiceSmartGiftEvents = {\n [SMARTGIFT_ADDED]: ISmartGiftPayload;\n [SMARTGIFT_VIEWED]: ISmartGiftPayload;\n [SMARTGIFT_WIDGET_TOGGLED]: ISmartGiftPayload;\n [SMARTGIFT_PREPARED]: ISmartGiftPayload;\n [SMARTGIFT_REMOVED]: ISmartGiftPayload;\n [SMARTGIFT_CANCELLED]: ISmartGiftPayload;\n [SMARTGIFT_HELP_OPENED]: ISmartGiftPayload;\n [SMARTGIFT_HELP_CLOSED]: ISmartGiftPayload;\n};\n","export const READ_REVIEWS_LINK_CLICKED = 'read.reviews.link.clicked';\nexport const WRITE_REVIEWS_LINK_CLICKED = 'write.reviews.link.clicked';\nexport const REVIEWS_HELPFUL_YES_CLICKED = 'reviews.helpful.yes.clicked';\nexport const REVIEWS_HELPFUL_NO_CLICKED = 'reviews.helpful.no.clicked';\nexport const REVIEWS_FLAG_REVIEW_CLICKED = 'reviews.flag.review.clicked';\nexport const REVIEWS_SORT_BY_CHANGED = 'reviews.sort.by.changed';\nexport const REVIEWS_SEARCH_CLICKED = 'reviews.search.clicked';\nexport const REVIEWS_FILTER_CLICKED = 'reviews.filter.clicked';\nexport const ASK_AND_ANSWER_CLICKED = 'ask.and.answer.clicked';\nexport const ASK_AND_ANSWER_SUBMITTED = 'ask.and.answer.submitted';\nexport const ASK_AND_ANSWER_SEARCH_CLICKED = 'ask.and.answer.search.clicked';\nexport const ASK_AND_ANSWER_HELPFUL_YES_CLICKED = 'ask.and.answer.helpful.yes.clicked';\nexport const ASK_AND_ANSWER_HELPFUL_NO_CLICKED = 'ask.and.answer.helpful.no.clicked';\nexport const ASK_AND_ANSWER_SHOW_MORE_CLICKED = 'ask.and.answer.show.more.clicked';\nexport const ASK_AND_ANSWERS_SORT_BY_CHANGED = 'ask.and.answer.sort.by.changed';\nexport const WRITE_REVIEW_STARTED = 'write.review.started';\nexport const REVIEW_OVERLAY_OPENED = 'review.overlay.opened';\nexport const REVIEW_OVERLAY_CLOSED = 'review.overlay.closed';\nexport const REVIEWS_RATING_CLICKED = 'reviews.rating.clicked';\nexport const REVIEWS_PAGINATION_CLICKED = 'reviews.pagination.clicked';\n\nexport interface IReviewsPayload {\n id: string;\n name: string;\n reviewCategory: string;\n selectedValue?: string;\n reviewLink?: string;\n}\n\nexport type ServiceRatingsReviewsEvents = {\n [READ_REVIEWS_LINK_CLICKED]: IReviewsPayload;\n [WRITE_REVIEWS_LINK_CLICKED]: IReviewsPayload;\n [REVIEWS_HELPFUL_YES_CLICKED]: IReviewsPayload;\n [REVIEWS_HELPFUL_NO_CLICKED]: IReviewsPayload;\n [REVIEWS_FLAG_REVIEW_CLICKED]: IReviewsPayload;\n [REVIEWS_SORT_BY_CHANGED]: IReviewsPayload;\n [REVIEWS_SEARCH_CLICKED]: IReviewsPayload;\n [REVIEWS_FILTER_CLICKED]: IReviewsPayload;\n [ASK_AND_ANSWER_CLICKED]: IReviewsPayload;\n [ASK_AND_ANSWER_SUBMITTED]: IReviewsPayload;\n [ASK_AND_ANSWER_SEARCH_CLICKED]: IReviewsPayload;\n [ASK_AND_ANSWER_HELPFUL_YES_CLICKED]: IReviewsPayload;\n [ASK_AND_ANSWER_HELPFUL_NO_CLICKED]: IReviewsPayload;\n [ASK_AND_ANSWER_SHOW_MORE_CLICKED]: IReviewsPayload;\n [ASK_AND_ANSWERS_SORT_BY_CHANGED]: IReviewsPayload;\n [WRITE_REVIEW_STARTED]: IReviewsPayload;\n [REVIEW_OVERLAY_OPENED]: IReviewsPayload;\n [REVIEW_OVERLAY_CLOSED]: IReviewsPayload;\n [REVIEWS_RATING_CLICKED]: IReviewsPayload;\n [REVIEWS_PAGINATION_CLICKED]: IReviewsPayload;\n};\n","export const CARE_NAVIGATE_SIGN_IN = 'care.navigate.signIn';\nexport const CARE_NAVIGATE_SIGN_UP = 'care.navigate.signUp';\nexport const CARE_NAVIGATE_PASSWORD_FORGOT = 'care.navigate.passwordForgot';\nexport const CARE_NAVIGATE_PASSWORD_RESET_LINK_SENT = 'care.navigate.passwordResetLinkSent';\n\nexport type CareEvents = {\n [CARE_NAVIGATE_SIGN_IN]: undefined;\n [CARE_NAVIGATE_SIGN_UP]: undefined;\n [CARE_NAVIGATE_PASSWORD_FORGOT]: undefined;\n [CARE_NAVIGATE_PASSWORD_RESET_LINK_SENT]: undefined;\n};\n","export const RAMP_SIGN_UP_SUBMITTED = 'ramp.signup.submitted';\nexport const RAMP_SIGN_UP_SUCCESSFUL = 'ramp.signup.successful';\nexport const RAMP_SIGN_UP_FAILED = 'ramp.signup.failed';\nexport const RAMP_LOG_IN_SUBMITTED = 'ramp.login.submitted';\nexport const RAMP_LOG_IN_SUCCESSFUL = 'ramp.login.successful';\nexport const RAMP_LOG_IN_FAILED = 'ramp.login.failed';\n\nexport type RampEvents = {\n [RAMP_SIGN_UP_SUBMITTED]: {};\n [RAMP_SIGN_UP_SUCCESSFUL]: {};\n [RAMP_SIGN_UP_FAILED]: {};\n [RAMP_LOG_IN_SUBMITTED]: {};\n [RAMP_LOG_IN_SUCCESSFUL]: {};\n [RAMP_LOG_IN_FAILED]: {};\n};\n","export const VIDEO_READY = 'video.ready';\nexport const VIDEO_PLAY = 'video.play';\nexport const VIDEO_PAUSE = 'video.pause';\nexport const VIDEO_END = 'video.end';\n\nexport type VideoEvents = {\n [VIDEO_READY]: undefined;\n [VIDEO_PLAY]: undefined;\n [VIDEO_PAUSE]: undefined;\n [VIDEO_END]: undefined;\n};\n","export const FINDATION_BUTTON_CLICKED = 'findation.button.clicked';\nexport const BASIC_TOUT_LOADED = 'basic.tout.loaded';\n\nexport interface IFindationButtonClicked {\n findationKey: string;\n}\n\nexport type ServiceContentEvents = {\n [FINDATION_BUTTON_CLICKED]: IFindationButtonClicked;\n [BASIC_TOUT_LOADED]: {};\n};\n","export const ORDER_TRACKING_SUBMITTED = 'order_tracking.submitted';\nexport const ORDER_TRACKING_INVALID_NUMBER = 'order_tracking.invalidnumber';\nexport const ORDER_TRACKING_SUCCESSFUL = 'order_tracking.successful';\n\nexport interface IOrderTrackingEventData {\n orderNumber: string;\n}\n\nexport type ServiceOrderTrackingEvents = {\n [ORDER_TRACKING_SUBMITTED]: IOrderTrackingEventData;\n [ORDER_TRACKING_INVALID_NUMBER]: IOrderTrackingEventData;\n [ORDER_TRACKING_SUCCESSFUL]: undefined;\n};\n","export const RCO_PAYMENT_SELECTED = 'rco.payment.selected';\nexport const RCO_SHIPPING_ADDRESS_ADD = 'rco.shipping.address.add';\nexport const RCO_SHIPPING_OPTION_SELECTED = 'rco.shipping.option.selected';\nexport const RCO_EMAIL_SIGNUP = 'rco.account.email.signup';\nexport const RCO_LINK_CLICKED = 'rco.link.clicked';\nexport const RCO_SAME_DAY_DELIVERY_TIME_SELECTED = 'rco.same.day.delivery.selected';\nexport const RCO_PAYMENT_DELIVERY_EDITED = 'rco.payment.delivery.edited';\nexport const RCO_DELIVERY_OPTION_SELECTED = 'rco.delivery.option.selected';\n\nexport const RCO_BOPIS_STORE_SEARCHED = 'rco.bopis.store.searched';\nexport const RCO_BOPIS_STORE_SELECTED = 'rco.bopis.store.selected';\nexport const RCO_BOPIS_STORE_HOURS_OPENED = 'rco.bopis.store.hours.opened';\nexport const RCO_BOPIS_STORE_CHANGED = 'rco.bopis.store.changed';\nexport const RCO_BOPIS_CART_EDITED = 'rco.bopis.cart.edited';\nexport const RCO_BOPIS_DELIVERY_TIME_EDITED = 'rco.bopis.delivery.time.edited';\nexport const RCO_BOPIS_UNAVAILABLE_ITEMS_REMOVED = 'rco.bopis.unavailable.items.removed';\n\ninterface IPaymentSelected {\n paymentType: string;\n}\n\ninterface IShippingOptionSelected {\n option: string;\n}\n\ninterface ILinkClicked {\n option: string;\n pageName: string;\n}\n\ninterface IStoreName {\n storeName: string;\n}\ninterface IProductIds {\n productIds: string[];\n}\n\nexport type ReactCheckoutAppEvents = {\n [RCO_PAYMENT_SELECTED]: IPaymentSelected;\n [RCO_SHIPPING_ADDRESS_ADD]: undefined;\n [RCO_SHIPPING_OPTION_SELECTED]: IShippingOptionSelected;\n [RCO_EMAIL_SIGNUP]: undefined;\n [RCO_LINK_CLICKED]: ILinkClicked;\n [RCO_SAME_DAY_DELIVERY_TIME_SELECTED]: undefined;\n [RCO_PAYMENT_DELIVERY_EDITED]: IShippingOptionSelected;\n [RCO_DELIVERY_OPTION_SELECTED]: IShippingOptionSelected;\n [RCO_BOPIS_STORE_SEARCHED]: ILinkClicked;\n [RCO_BOPIS_STORE_SELECTED]: IStoreName;\n [RCO_BOPIS_STORE_HOURS_OPENED]: IStoreName;\n [RCO_BOPIS_STORE_CHANGED]: IStoreName;\n [RCO_BOPIS_CART_EDITED]: IProductIds;\n [RCO_BOPIS_DELIVERY_TIME_EDITED]: undefined;\n [RCO_BOPIS_UNAVAILABLE_ITEMS_REMOVED]: IProductIds;\n};\n","export const CART_OVERLAY_OPENED = 'cart.overlay.opened';\nexport const CART_OVERLAY_CLOSED = 'cart.overlay.closed';\nexport const CART_OVERLAY_ICON_CLICKED = 'cart.overlay.icon_click';\nexport const CART_OVERLAY_TAB_CLICKED = 'cart.overlay.tab.clicked';\nexport const CART_OVERLAY_OFFER_VIEWED = 'cart.overlay.offer.viewed';\nexport const CART_OVERLAY_OFFER_CLICKED = 'cart.overlay.offer.clicked';\n\nexport interface CartOverlayEvents {\n [CART_OVERLAY_OPENED]: { nonInteraction: boolean };\n [CART_OVERLAY_CLOSED]: { nonInteraction: boolean };\n [CART_OVERLAY_ICON_CLICKED]: void | undefined;\n [CART_OVERLAY_TAB_CLICKED]: { tabId: string };\n [CART_OVERLAY_OFFER_VIEWED]: { placement: string; promotionId: string; promotionName: string };\n [CART_OVERLAY_OFFER_CLICKED]: { placement: string; promotionId: string; promotionName: string };\n}\n","export const IAM_SIGN_UP_SUCCESSFUL = 'iam.sign.up.successful';\nexport const IAM_SIGN_UP_FAILED = 'iam.sign.up.failed';\nexport const IAM_SIGN_IN_SUCCESSFUL = 'iam.sign.in.successful';\nexport const IAM_SIGN_IN_FAILED = 'iam.sign.in.failed';\n\ninterface IIamEventData {\n source: string;\n provider: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IIamSignInEventData extends IIamEventData {}\n\nexport interface IIamSignUpEventData extends IIamEventData {\n type: string;\n}\n\nexport type ServiceIamEvents = {\n [IAM_SIGN_UP_SUCCESSFUL]: IIamSignUpEventData;\n [IAM_SIGN_UP_FAILED]: IIamSignUpEventData;\n [IAM_SIGN_IN_SUCCESSFUL]: IIamSignInEventData;\n [IAM_SIGN_IN_FAILED]: IIamSignInEventData;\n};\n","export const LOYALTY_LOADMORE_LINK_CLICKED = 'loyalty.loadMoreClicked';\nexport const LOYALTY_ONLINE_ORDER_NUMBER_CLICKED = 'loyalty.orderNumberClicked';\nexport const LOYALTY_SHOP_NOW_CLICKED = 'loyalty.shopNowClicked';\nexport const LOYALTY_ALL_BENEFITS_CLICKED = 'loyalty.allBenefitsClicked';\nexport const LOYALTY_BENEFITS_REDEEM_CLICKED = 'loyalty.benefitsRedeemClicked';\nexport const LOYALTY_BENEFITS_REMOVE_CLICKED = 'loyalty.benefitsRemoveClicked';\nexport const LOYALTY_REWARDS_REDEEM_CLICKED = 'loyalty.rewardsRedeemClicked';\nexport const LOYALTY_REWARDS_REMOVE_CLICKED = 'loyalty.rewardsRemoveClicked';\nexport const LOYALTY_REWARDS_TAB_CLICKED = 'loyalty.rewardsTabClicked';\nexport const LOYALTY_LINK_CLICKED = 'loyalty.linkClicked';\n\nexport declare type ServiceLoyaltyEvents = {\n [LOYALTY_LOADMORE_LINK_CLICKED]: void | undefined;\n [LOYALTY_ONLINE_ORDER_NUMBER_CLICKED]: string;\n [LOYALTY_SHOP_NOW_CLICKED]: string;\n [LOYALTY_ALL_BENEFITS_CLICKED]: string;\n [LOYALTY_BENEFITS_REDEEM_CLICKED]: string | null;\n [LOYALTY_BENEFITS_REMOVE_CLICKED]: string | null;\n [LOYALTY_REWARDS_REDEEM_CLICKED]: void | string;\n [LOYALTY_REWARDS_REMOVE_CLICKED]: void | string;\n [LOYALTY_REWARDS_TAB_CLICKED]: string;\n [LOYALTY_LINK_CLICKED]: string;\n};\n","import * as ElcEcommEvents from './elc-ecomm';\nimport * as ElcServiceAccountEvents from './fe-elc-service-account';\nimport * as ELCServiceAppointmentBookingEvents from './fe-elc-service-appt-booking';\nimport * as ElcServiceCartEvents from './fe-elc-service-cart';\nimport * as ElcServiceCheckoutEvents from './fe-elc-service-checkout';\nimport * as ElcServiceCommunicationsEvents from './fe-elc-service-communications';\nimport * as ElcServiceComponentRendererEvents from './fe-elc-component-renderer';\nimport * as ElcServiceForgotPasswordEvents from './fe-elc-service-forgot-password';\nimport * as ElcServiceOffersEvents from './fe-elc-service-offers';\nimport * as ElcServiceOrderHistoryEvents from './fe-elc-service-order-history';\nimport * as ElcServiceOrderEvents from './fe-elc-service-order';\nimport * as ElcServicePasswordStrengthEvents from './fe-elc-service-password-strength';\nimport * as ElcServicePaymentEvents from './fe-elc-service-payment';\nimport * as ElcServiceProdcatEvents from './fe-elc-service-prodcat';\nimport * as ElcServiceSaveForLaterEvents from './fe-elc-service-save-for-later';\nimport * as ElcServiceSearchEvents from './fe-elc-service-search';\nimport * as ElcServiceSignInEvents from './fe-elc-service-sign-in';\nimport * as ElcServiceSignUpEvents from './fe-elc-service-sign-up';\nimport * as ElcServiceStoresEvents from './fe-elc-service-stores';\nimport * as ElcServiceUserProfileEvents from './fe-elc-service-user-profile';\nimport * as ElcServiceAnalyticsEvents from './fe-elc-service-analytics';\nimport * as ElcServiceVtoEvents from './fe-elc-service-vto';\nimport * as ElcServiceSmartGiftEvents from './fe-elc-service-smartgift';\nimport * as ElcServiceRatingsReviewsEvents from './fe-elc-service-ratings-reviews';\nimport * as ElcCareEvents from './elc-care';\nimport * as ElcRampEvents from './elc-ramp';\nimport * as ElcVideoEvents from './elc-video';\nimport * as ElcServiceContentEvents from './fe-elc-service-content';\nimport * as PgServiceOrderTrackingEvents from './fe-pg-service-order-tracking';\nimport * as ElcReactCheckoutAppEvents from './fe-elc-react-checkout-app';\nimport * as CartOverlayEvents from './cart';\nimport * as PgServiceRampEvents from './fe-pg-service-ramp';\nimport * as ElcServiceLoyaltyEvents from './fe-pg-service-loyalty';\n\nconst events = {\n ...ElcEcommEvents,\n ...ElcServiceAccountEvents,\n ...ELCServiceAppointmentBookingEvents,\n ...ElcServiceCartEvents,\n ...ElcServiceCheckoutEvents,\n ...ElcServiceCommunicationsEvents,\n ...ElcServiceComponentRendererEvents,\n ...ElcServiceForgotPasswordEvents,\n ...ElcServiceOffersEvents,\n ...ElcServiceOrderHistoryEvents,\n ...ElcServiceOrderEvents,\n ...ElcServicePasswordStrengthEvents,\n ...ElcServicePaymentEvents,\n ...ElcServiceProdcatEvents,\n ...ElcServiceSaveForLaterEvents,\n ...ElcServiceSearchEvents,\n ...ElcServiceSignInEvents,\n ...ElcServiceSignUpEvents,\n ...ElcServiceStoresEvents,\n ...ElcServiceUserProfileEvents,\n ...ElcServiceAnalyticsEvents,\n ...ElcServiceVtoEvents,\n ...ElcServiceSmartGiftEvents,\n ...ElcServiceRatingsReviewsEvents,\n ...ElcCareEvents,\n ...ElcRampEvents,\n ...ElcVideoEvents,\n ...ElcServiceContentEvents,\n ...PgServiceOrderTrackingEvents,\n ...ElcReactCheckoutAppEvents,\n ...CartOverlayEvents,\n ...PgServiceRampEvents,\n ...ElcServiceLoyaltyEvents\n};\n\ntype ServiceEvents = ElcServiceCartEvents.ServiceCartEvents &\n ElcEcommEvents.ServiceElcEcommEvents &\n ElcServiceAccountEvents.ServiceAccountEvents &\n ELCServiceAppointmentBookingEvents.ServiceAppointmentBookingEvents &\n ElcServiceCheckoutEvents.ServiceCheckoutEvents &\n ElcServiceCommunicationsEvents.ServiceCommunicationsEvents &\n ElcServiceComponentRendererEvents.ServiceComponentRendererEvents &\n ElcServiceForgotPasswordEvents.ServiceForgotPasswordEvents &\n ElcServiceOffersEvents.ServiceOffersEvents &\n ElcServiceOrderHistoryEvents.ServiceOrderHistoryEvents &\n ElcServiceOrderEvents.ServiceOrderEvents &\n ElcServicePasswordStrengthEvents.ServicePasswordStrengthEvents &\n ElcServicePaymentEvents.ServicePaymentEvents &\n ElcServiceProdcatEvents.ServiceProdcatEvents &\n ElcServiceSaveForLaterEvents.ServiceSaveForLaterEvents &\n ElcServiceSearchEvents.ServiceSearchEvents &\n ElcServiceSignInEvents.ServiceSignInEvents &\n ElcServiceSignUpEvents.ServiceSignUpEvents &\n ElcServiceStoresEvents.ServiceStoresEvents &\n ElcServiceUserProfileEvents.ServiceUserProfileEvents &\n ElcServiceAnalyticsEvents.ServiceAnalyticsEvents &\n ElcServiceVtoEvents.ServiceVtoEvents &\n ElcServiceSmartGiftEvents.ServiceSmartGiftEvents &\n ElcServiceRatingsReviewsEvents.ServiceRatingsReviewsEvents &\n ElcCareEvents.CareEvents &\n ElcRampEvents.RampEvents &\n ElcVideoEvents.VideoEvents &\n ElcServiceContentEvents.ServiceContentEvents &\n PgServiceOrderTrackingEvents.ServiceOrderTrackingEvents &\n ElcReactCheckoutAppEvents.ReactCheckoutAppEvents &\n CartOverlayEvents.CartOverlayEvents &\n PgServiceRampEvents.ServiceIamEvents &\n ElcServiceLoyaltyEvents.ServiceLoyaltyEvents;\n\n// eslint-disable-next-line no-restricted-syntax\nexport { events, ServiceEvents };\n","import { ServiceBus, OptionsType } from './ServiceBus';\n/*\n * Decorator attached on object properties that watches for the result\n * of a certain query to change.\n */\ntype PrimitiveTypes = boolean | string | number | null | undefined;\nexport const getDecorators = (globalServiceBus: ServiceBus) => {\n const watchQuery = (name?: K) => (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n target: any,\n key: string\n ) => {\n const queryName = name || key;\n target.__serviceBusDecorators__ = target.__serviceBusDecorators__ || {};\n const hasWatchingKey = target.__serviceBusDecorators__[queryName];\n if (!hasWatchingKey) {\n target.__serviceBusDecorators__[queryName] = key;\n }\n\n target.registerWatchers = function () {\n Object.keys(this.__serviceBusDecorators__).map((sname) => {\n globalServiceBus.registerQueryWatcher(sname, (newQueryResult: PrimitiveTypes) => {\n const propertyName = this.__serviceBusDecorators__[sname];\n this[propertyName] = newQueryResult;\n });\n });\n };\n };\n\n /**\n * Method decorator used to mark a method as a query provider\n */\n const queryProvider = (queryName: K) => (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n target: any,\n key: string,\n descriptor?: TypedPropertyDescriptor<() => PrimitiveTypes>\n ) => {\n const queryToProvide = queryName;\n if (!descriptor) {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n get() {\n return undefined;\n },\n set(value) {\n globalServiceBus.registerQueryProvider(\n queryToProvide,\n (payload: Q[K]): QR[K] => {\n return value.call(target, payload);\n }\n );\n }\n });\n }\n };\n\n /**\n * Method decorator used to mark a method as a command provider\n */\n const commandProvider = (queryName: K) => (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n target: any,\n key: string,\n descriptor?: TypedPropertyDescriptor<() => CR[K]>\n ) => {\n const queryToProvide = queryName;\n if (!descriptor) {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n get() {\n return undefined;\n },\n set(value) {\n globalServiceBus.registerCommandProvider(\n queryToProvide,\n (payload: [C[K]]): CR[K] => {\n return value.call(target, payload);\n }\n );\n }\n });\n }\n };\n\n /*\n * Decorator attached on object properties that listens for a specified event\n * to happen\n */\n function on(evName: K, options?: OptionsType) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (target: any, key: string, descriptor?: PropertyDescriptor) => {\n if (!descriptor) {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n get() {\n return undefined;\n },\n set(value) {\n globalServiceBus.on(\n evName,\n (payload: E[K]) => {\n value.call(target, payload);\n },\n options\n );\n }\n });\n } else {\n globalServiceBus.on(\n evName,\n (payload: E[K]) => {\n descriptor.value.call(target, payload);\n },\n options\n );\n }\n };\n }\n\n /**\n * Method use to emit events on the global service bus\n */\n function emit(\n evt: K,\n ...payload: E[K] extends undefined ? [undefined?] : [E[K]]\n ) {\n globalServiceBus.emit(evt, payload[0]);\n }\n\n /**\n * Method use to query for data in an imperative manner\n */\n function query(\n name: K,\n ...payload: Q[K] extends undefined ? [undefined?] : [Q[K]]\n ): QR[K] {\n return globalServiceBus.query(name, payload[0]);\n }\n /**\n * Method use to command for data in an imperative manner\n */\n function command(\n name: K,\n ...payload: C[K] extends undefined ? [undefined?] : [C[K]]\n ): CR[K] {\n return globalServiceBus.command(name, payload[0]);\n }\n\n return {\n command,\n commandProvider,\n query,\n watchQuery,\n queryProvider,\n emit,\n on\n };\n};\n","export const CONFIRM_REGISTRATION_TOKEN = 'confirm.registration.token';\nexport const CONFIRM_REGISTRATION_URL = 'confirm.registration.url';\nexport const RESET_PASSWORD_URL = 'reset.password.url';\nexport const GET_CURRENT_ROUTE = 'get.current.route';\nexport const CARE_HANDLER_URL = 'care.handler.url';\n\ntype ICurrentRoute = {\n currentRoute: string;\n params: { [key: string]: string };\n queryParams: { [key: string]: string };\n};\n\nexport type ServiceElcEcommQueries = {\n [CONFIRM_REGISTRATION_TOKEN]: undefined;\n [CONFIRM_REGISTRATION_URL]: undefined;\n [CARE_HANDLER_URL]: undefined;\n [RESET_PASSWORD_URL]: undefined;\n [GET_CURRENT_ROUTE]: undefined;\n};\nexport type ServiceElcEcommQueriesResponseType = {\n [CONFIRM_REGISTRATION_TOKEN]: string;\n [CONFIRM_REGISTRATION_URL]: string;\n [CARE_HANDLER_URL]: string;\n [RESET_PASSWORD_URL]: string;\n [GET_CURRENT_ROUTE]: ICurrentRoute;\n};\n","export const PAGE_VIEW_TRACK_PRODUCT_GRID = 'page.view.track.product-grid';\nexport const PAGE_VIEW_TRACK_PRODUCT_FULL = 'page.view.track.product-full';\n\nexport type ServiceAnalyticsQueries = {\n [PAGE_VIEW_TRACK_PRODUCT_GRID]: {};\n [PAGE_VIEW_TRACK_PRODUCT_FULL]: {};\n};\n\nexport type ServiceAnalyticsQueriesResponseType = {\n [PAGE_VIEW_TRACK_PRODUCT_GRID]: {};\n [PAGE_VIEW_TRACK_PRODUCT_FULL]: {};\n};\n","import { ICart } from '../events/CartInterfaces';\n\nexport const IS_CART_VALID = 'isCartValid';\nexport const CHOICE_OF_SKUS_ITEMS_COUNT = 'choiceOfSkusItemsCounts';\nexport const CART_ITEMS_SUBTOTAL = 'cart.items.subtotal';\nexport const CART_ITEMS_COUNT = 'cart.items.counter';\nexport const CART_DIGITAL_SIGNATURE = 'cart.digitalSignature';\nexport const SUCCESSFUL_OFFER_CODES = 'successful.offer.codes';\nexport const CART_SKUS_IDS = 'cart.skus.ids';\nexport const GET_CART = 'get.cart';\nexport const RECOMMENDED_PRODUCTS_SKUID_LIST = 'recommended.products.skuids.list';\n\nexport type ServiceCartQueries = {\n [IS_CART_VALID]: undefined;\n [CHOICE_OF_SKUS_ITEMS_COUNT]: undefined;\n [CART_ITEMS_SUBTOTAL]: undefined;\n [CART_ITEMS_COUNT]: undefined;\n [CART_DIGITAL_SIGNATURE]: undefined;\n [SUCCESSFUL_OFFER_CODES]: undefined;\n [CART_SKUS_IDS]: undefined;\n [GET_CART]: { asPlainText?: boolean };\n [RECOMMENDED_PRODUCTS_SKUID_LIST]: undefined;\n};\n\nexport type ServiceCartQueriesResponseType = {\n [IS_CART_VALID]: boolean;\n [CHOICE_OF_SKUS_ITEMS_COUNT]: number;\n [CART_ITEMS_SUBTOTAL]: number;\n [CART_ITEMS_COUNT]: number;\n [CART_DIGITAL_SIGNATURE]: string;\n [SUCCESSFUL_OFFER_CODES]: string[];\n [CART_SKUS_IDS]: string[];\n [GET_CART]: ICart | string;\n [RECOMMENDED_PRODUCTS_SKUID_LIST]: string[];\n};\n","export const IS_SHIPPING_SCREEN_VALID = 'isShippingScreenValid';\n\nexport type ServiceCheckoutQueries = {\n [IS_SHIPPING_SCREEN_VALID]: undefined;\n};\n\nexport type ServiceCheckoutQueriesResponseType = {\n [IS_SHIPPING_SCREEN_VALID]: boolean;\n};\n","export const EMAIL_OPT_IN = 'email.opt.in';\n\nexport interface IEmailOptIn {\n communicationType: string;\n emailAddress: string;\n emailSubscribed: boolean;\n id: string;\n source: string;\n}\n\nexport type ServiceCommunicationsQueriesResponseType = {\n [EMAIL_OPT_IN]: undefined;\n};\n\nexport type ServiceCommunicationsQueries = {\n [EMAIL_OPT_IN]: IEmailOptIn;\n};\n","export const GET_MANUAL_OFFER = 'get.manual.offer';\nexport const GET_MANUAL_OFFER_BY_CODE = 'get.manual.offer.code';\n\nexport interface IMessage {\n readonly threshold: string | null;\n readonly deferred: string | null;\n readonly success: string | null;\n readonly error: string | null;\n}\nexport interface IManualOffer {\n manualOfferCodeError: string;\n manualOfferMessages: IMessage;\n manualOfferCode: string;\n shouldDisplayMessage: boolean;\n hasOfferCodeError: boolean;\n offerCode: string;\n message: IMessage;\n offerType: string;\n}\nexport type ServiceOffersQueries = {\n [GET_MANUAL_OFFER]: undefined;\n [GET_MANUAL_OFFER_BY_CODE]: string[];\n};\n\nexport type ServiceOffersQueriesResponseType = {\n [GET_MANUAL_OFFER]: IManualOffer;\n [GET_MANUAL_OFFER_BY_CODE]: IManualOffer;\n};\n","export const FIRST_ORDER_DATE = 'first.order.date';\nexport const FIRST_ORDER_VALUE = 'first.order.value';\nexport const LAST_ORDER_DATE = 'last.order.date';\nexport const LAST_ORDER_VALUE = 'last.order.value';\nexport const ORDERS_AVG = 'orders.avg';\nexport const TOTAL_COUNT_OF_ORDERS = 'total.count.of.orders';\nexport const TOTAL_SUM_OF_REVENUE = 'total.sum.of.revenue';\nexport interface IStatus {\n external: string;\n internal: string;\n}\nexport interface ITotals {\n subTotalWithTax: number;\n subTotalWithoutTax: number;\n totalWithTax: number;\n totalWithoutTax: number;\n totalDiscounts: number;\n cartDiscounts: number;\n tax: number;\n taxPercent: number;\n totalQuantity: number;\n}\nexport interface IDeliveryStatus {\n backOrderNumber: string;\n carrier: string;\n deliveryQuantity: number;\n deliveryDate: string;\n itemId: string;\n remainingQuantity: number;\n trackingNumber: string;\n trackingUrl?: string;\n}\nexport interface IAddresses {\n addressType: string;\n id: string;\n attributes: IAttributes;\n}\nexport interface IAttributes {\n firstName: string;\n lastName: string;\n address: string;\n zipcode: string;\n city: string;\n mobileNumber: string;\n}\nexport interface IOrder {\n orderId: string;\n orderNumber: number;\n businessUnitId: string;\n created: string;\n ownerId: string;\n type: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n items: any;\n status: IStatus;\n totals: ITotals;\n email: string;\n deliveryStatuses: IDeliveryStatus[];\n addresses: IAddresses[];\n}\n\nexport interface IOrderHistoryCollection {\n orderHistoryData: IOrder[];\n temporaryOrders: IOrder[];\n temporaryOrdersLength: number;\n firstOrderDate: string | null;\n firstOrderValue: number;\n lastOrderDate: string | null;\n lastOrderValue: number;\n ordersAvg: number;\n totalSumOfRevenue: number;\n}\n\nexport type ServiceOrderHistoryQueries = {\n [FIRST_ORDER_DATE]: undefined;\n [FIRST_ORDER_VALUE]: undefined;\n [LAST_ORDER_DATE]: undefined;\n [LAST_ORDER_VALUE]: undefined;\n [ORDERS_AVG]: undefined;\n [TOTAL_COUNT_OF_ORDERS]: undefined;\n [TOTAL_SUM_OF_REVENUE]: undefined;\n};\n\nexport type ServiceOrderHistoryQueriesResponseType = {\n [FIRST_ORDER_DATE]: string | null;\n [FIRST_ORDER_VALUE]: number;\n [LAST_ORDER_DATE]: number;\n [LAST_ORDER_VALUE]: number;\n [ORDERS_AVG]: number;\n [TOTAL_COUNT_OF_ORDERS]: number;\n [TOTAL_SUM_OF_REVENUE]: number;\n};\n","export const ORDER_SHIPPING_ADDRESS = 'order.shipping.address';\nexport const GET_ORDER_DATA = 'get.order.data';\nexport interface IAddressesAttributes {\n firstLineAddress: string;\n address: string;\n address2?: string;\n city: string;\n country: string;\n firstName: string;\n lastName: string;\n mobileNumber: string;\n zipcode: string;\n}\n\nexport interface IAddresses {\n addressType: string;\n id: string;\n attributes: IAddressesAttributes;\n}\n\nexport interface ISelectedShippingDates {\n [key: string]: string[];\n}\n\nexport interface IOrderDetail {\n order: {\n id: string;\n orderNumber: number;\n businessUnitId: string;\n created: Date;\n updated: Date;\n tcVersion: string;\n email: string;\n source: string;\n redirectUrl: string;\n status: {\n internal: string;\n external: string;\n };\n orderType: string;\n browserIP: string;\n testOrder: boolean;\n language: {\n id: string;\n name: string;\n isoCode: string;\n };\n currency: {\n id: string;\n name: string;\n isoCode: string;\n };\n addresses: IAddresses[];\n shippings: [\n {\n shippingAddress: {\n id?: string;\n attributes: {\n [field: string]: string;\n };\n addressMetadataId: string;\n };\n shippingInfo: {\n discountPercent: number;\n discountedPriceWithTax: number;\n discountedPriceWithoutTax: number;\n offerCode: string | null;\n priceWithTax: number;\n priceWithoutTax: number;\n tax: number;\n selectedShippingDates: ISelectedShippingDates;\n };\n shippingMethod: {\n id: string;\n name: string;\n skuId: string;\n price: number;\n };\n }\n ];\n shippingInfo: [\n {\n priceWithTax: number; //price of shipping; taxes included\n priceWithoutTax: number; //price of shipping; no taxes included\n discountedPriceWithTax: number; //price of shipping after applying shipping discounts; taxes included\n discountedPriceWithoutTax: number; //price of shipping after applying shipping discounts; taxes included\n discountPercent: number; //the discount percent applied to the shipping price\n tax: number; //the taxes calculated for shipping\n offerCode: string; //shipping promotion offer code; if one exists\n addressId: string;\n shippingId: string;\n }\n ];\n items: [\n {\n id: string;\n skuId: string;\n quantity: number;\n unitPriceWithoutTax: number; //price of the single item; no taxes included\n unitPriceWithTax: number; //price of the single item; taxes included\n discountedUnitPriceWithoutTax: number; //price of the single item; all discounts subtracted; no taxes included\n discountedUnitPriceWithTax: number; //price of the single item; all discounts subtracted; taxes included\n discountsPercent: number; //discount percent applied to price\n appliedPriceWithoutTax: number; //total price for this item (discountedPrice * quantity); no taxes included\n appliedPriceWithTax: number; //total price for this item (discountedPrice * quantity); taxes included\n taxAmount: number;\n productName: string;\n productImage: string;\n shades: string[];\n isHazmat: boolean;\n isShippable: boolean;\n tagId: string;\n tagName: string;\n }\n ];\n engraving: string[];\n giftwrap: string[];\n donation: {\n id: string;\n skuId: string;\n };\n totals: {\n subTotalWithTax: number; //cost of all items summed up (appliedPrice); taxes included\n subTotalWithoutTax: number; //cost of all items summed up (appliedPrice); no taxes included\n totalWithTax: number; //total price of the order(shipping; items; discounts; engraving etc); taxes included\n totalWithoutTax: number; //total price of the order(shipping; items; discounts; engraving etc); no taxes included\n totalDiscounts: number; //total discounts that have been applied\n cartDiscounts: number; //cart level discounts\n tax: number; //total taxes\n taxPercent: number; //tax percent that will be applied (VAT 16% for example)\n totalQuantity: number; //sum of quantity of all items\n };\n additionalInfo: Map;\n };\n billingAddresses: {\n [id: string]: {\n metadataId: string;\n attributes: {\n [field: string]: string;\n };\n };\n };\n orderEvents: [\n {\n orderId: string;\n ownerId: string;\n produced: Date;\n recorded: Date;\n source: string;\n orderDetails: string; // see https://confluence.esteeonline.com/display/ELP/Order+Events+Service for specific event models\n }\n ];\n paymentAmounts: {\n pending: number[]; // the amounts of the pending transactions\n declined: number[]; // the amounts of the declined transactions\n authorized: number[]; // the amounts of the authorized transactions (not captured)\n captured: number[]; // the amounts of the captured transactions\n cancelled: number[]; // the amounts of the (PP side) cancelled transactions\n };\n balance: {\n pending: number; // Order total value MINUS the value of ALL payment transactions authorized; captured or pending\n authorized: number; // Order total value MINUS the value of ALL authorized and captured transactions\n captured: number; // Order total value MINUS the value of ALL captured transactions\n };\n deliveryStatus: [\n {\n itemId: string;\n trackingNumber: string;\n deliveredQuantity: number;\n remainingQuantity: number;\n backOrderNumber: string;\n deliveryDate: string; // string representing a date in ISO8601 format\n carrier: string;\n }\n ];\n paymentMethods: string[];\n}\n\nexport interface IOrderQueryData {\n orderId: string;\n guestToken: string;\n paymentType: string;\n}\nexport type ServiceOrderQueries = {\n [ORDER_SHIPPING_ADDRESS]: undefined;\n [GET_ORDER_DATA]: IOrderQueryData;\n};\n\nexport interface ISharedAddressAttributes {\n [field: string]: string;\n}\nexport interface ISharedAddress {\n addressMetadataId: string;\n attributes: ISharedAddressAttributes;\n}\n\nexport type ServiceOrderQueriesResponseType = {\n [ORDER_SHIPPING_ADDRESS]: ISharedAddress;\n [GET_ORDER_DATA]: Promise;\n};\n","export const IS_PASSWORD_VALID = 'isPasswordValid';\n\nexport type ServicePasswordStrengthQueries = {\n [IS_PASSWORD_VALID]: undefined;\n};\n\nexport type ServicePasswordStrengthQueriesResponseType = {\n [IS_PASSWORD_VALID]: boolean;\n};\n","export const IS_PAYMENT_SCREEN_VALID = 'isPaymentScreenValid';\n\nexport type ServicePaymentQueries = {\n [IS_PAYMENT_SCREEN_VALID]: undefined;\n};\n\nexport type ServicePaymentQueriesResponseType = {\n [IS_PAYMENT_SCREEN_VALID]: boolean;\n};\n","export const GET_PRODUCT_DATA = 'getProductData';\nexport const GET_PRODUCTS = 'getProducts';\nexport const GET_PRODUCTS_V2 = 'getProductsV2';\nexport const GET_PRODUCTS_V3 = 'getProductsV3';\nexport const GET_REVIEW_PRODUCT = 'getReviewProduct';\nexport const GET_SELECTED_FILTERS = 'get.selected.filters';\nexport const GET_SORTBY_VALUE = 'get.sortby.value';\nexport const GET_SKUS = 'getSkus';\nexport const GET_PRODCAT_INVENTORY = 'getProdcatInventory';\nexport const GET_INVENTORY = 'getInventory';\n\nenum SortDirection {\n ASCENDING = 'ASCENDING',\n DESCENDING = 'DESCENDING'\n}\n\ntype SortDirectionType = keyof typeof SortDirection;\ninterface IGetProductDataOptions {\n filterBy: {\n tags?: {\n ids?: string[];\n keys?: string[];\n values?: string[];\n includeInnerHits?: boolean;\n };\n skus?: {\n inventoryStatus?: string[];\n skuIds?: string[];\n isDefaultSku?: boolean;\n shades?: {\n name: string[];\n };\n includeInnerHits?: boolean;\n };\n productIds?: string[];\n };\n sortBy?: {\n tags?: {\n productDisplayOrder: SortDirectionType;\n };\n skus?: {\n skuIds?: SortDirectionType;\n shades?: {\n name: SortDirectionType;\n };\n };\n productIds?: SortDirectionType;\n };\n query?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n productGridConfig?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n productFullConfig?: any;\n}\n\nexport type ServiceProdcatQueries = {\n [GET_PRODUCT_DATA]: IGetProductDataOptions;\n [GET_PRODUCTS]: {};\n [GET_PRODUCTS_V2]: {};\n [GET_PRODUCTS_V3]: {};\n [GET_REVIEW_PRODUCT]: {};\n [GET_SELECTED_FILTERS]: {};\n [GET_SORTBY_VALUE]: {};\n [GET_SKUS]: {};\n [GET_PRODCAT_INVENTORY]: string[];\n [GET_INVENTORY]: string[];\n};\n\nexport type ServiceProdcatQueriesResponseType = {\n [GET_PRODUCT_DATA]: {};\n [GET_PRODUCTS]: {};\n [GET_PRODUCTS_V2]: {};\n [GET_PRODUCTS_V3]: {};\n [GET_REVIEW_PRODUCT]: {};\n [GET_SELECTED_FILTERS]: {};\n [GET_SORTBY_VALUE]: {};\n [GET_SKUS]: {};\n [GET_PRODCAT_INVENTORY]: [];\n [GET_INVENTORY]: [];\n};\n","export const SAVE_FOR_LATER_ITEMS_COUNT = 'saveForLaterItemsCount';\n\nexport type ServiceSaveForLaterQueries = {\n [SAVE_FOR_LATER_ITEMS_COUNT]: undefined;\n};\n\nexport type ServiceSaveForLaterQueriesResponseType = {\n [SAVE_FOR_LATER_ITEMS_COUNT]: number;\n};\n","export const IS_EMAIL_JUST_VERIFIED = 'isEmailJustVerified';\n\nexport type ServiceSignUpQueries = {\n [IS_EMAIL_JUST_VERIFIED]: undefined;\n};\n\nexport type ServiceSignUpQueriesResponseType = {\n [IS_EMAIL_JUST_VERIFIED]: boolean;\n};\n","export const FULL_NAME = 'fullName';\nexport const BASIC_USER_DETAILS = 'basicUserDetails';\nexport const IS_SIGN_IN_FORM_OPEN = 'isSignInFormOpen';\nexport const EMAIL_VERIFIED = 'isEmailVerified';\nexport const GUEST_EMAIL = 'guestEmail';\nexport const EMAIL = 'email';\nexport const BIRTH_DATE = 'birth.date';\nexport const GET_USER_CREATION_DATE = 'get.user.creation.date';\nexport const GET_FORMATTED_ADDRESS = 'get.user.formatted.address';\nexport const GET_USER_ACCOUNT_ID = 'get.user.account.id';\nexport const GET_USER_AUTH_STATE = 'getUserAuthState';\n\nexport interface IGetFormattedAddress {\n metadataId: string;\n attributes: {\n [field: string]: string;\n };\n}\n\nexport interface IBasicUserDetails {\n emailAddress: string;\n firstName: string;\n lastName: string;\n hasLoyalty: boolean;\n}\n\nenum AuthStates {\n SIGNEDIN,\n ANONYMOUS,\n RECOGNIZED\n}\n\nexport type UserAuthState = keyof typeof AuthStates;\n\nexport type ServiceUserProfileQueries = {\n [FULL_NAME]: undefined;\n [BASIC_USER_DETAILS]: undefined;\n [IS_SIGN_IN_FORM_OPEN]: undefined;\n [EMAIL_VERIFIED]: undefined;\n [GUEST_EMAIL]: undefined;\n [EMAIL]: undefined;\n [BIRTH_DATE]: undefined;\n [GET_USER_CREATION_DATE]: undefined;\n [GET_FORMATTED_ADDRESS]: IGetFormattedAddress;\n [GET_USER_ACCOUNT_ID]: undefined;\n [GET_USER_AUTH_STATE]: undefined;\n};\n\nexport type ServiceUserProfileQueriesResponseType = {\n [FULL_NAME]: string;\n [BASIC_USER_DETAILS]: IBasicUserDetails;\n [IS_SIGN_IN_FORM_OPEN]: boolean;\n [EMAIL_VERIFIED]: boolean;\n [GUEST_EMAIL]: string;\n [EMAIL]: string;\n [BIRTH_DATE]: string;\n [GET_USER_CREATION_DATE]: string;\n [GET_FORMATTED_ADDRESS]: Promise;\n [GET_USER_ACCOUNT_ID]: string;\n [GET_USER_AUTH_STATE]: UserAuthState;\n};\n","export const GET_CONFIG = 'get.config';\n\nexport type ServiceConfigManagerQueries = {\n [GET_CONFIG]: string[];\n};\nexport type ServiceConfigManagerQueriesResponseType = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [GET_CONFIG]: Promise<{ [key: string]: any }>;\n};\n","export const GET_TRANSLATIONS = 'get.translations';\n\nexport type ServiceTranslationsQueries = {\n [GET_TRANSLATIONS]: string[];\n};\nexport type ServiceTranslationsQueriesResponseType = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [GET_TRANSLATIONS]: Promise<{ [key: string]: any }>;\n};\n","export const GET_STORE_INVENTORY = 'GET_STORE_INVENTORY';\n\nexport interface IPayloadStoreInventoryRequest {\n skuId: string;\n radius: number;\n geolocation: {\n lat: number;\n lng: number;\n };\n}\n\nexport interface Door {\n DOOR_ID: number;\n DOORNAME: string;\n STORE_HOURS: string;\n STORE_TYPE: string;\n ADDRESS: string;\n ADDRESS2: string;\n STATE_OR_PROVINCE: string;\n CITY: string;\n COUNTRY: string;\n PHONE1: string;\n LONGITUDE: string;\n LATITUDE: string;\n DISTANCE: string;\n}\n\nexport interface StoreInventory {\n is_call: number;\n is_available: number;\n is_unavailable: number;\n available_qty: number;\n}\n\nexport interface DoorInventory {\n store_code: number;\n skus_onhand: {\n [skuiId: string]: StoreInventory;\n };\n}\n\nexport interface IPayloadStoreInventoryResponse {\n requestOptions: IPayloadStoreInventoryRequest;\n doors: number[];\n results: {\n [doorId: number]: Door;\n };\n door_inventory: {\n [doorId: number]: DoorInventory;\n };\n}\n\nexport type ServiceStoreInventoryQueries = {\n [GET_STORE_INVENTORY]: IPayloadStoreInventoryRequest;\n};\n\nexport type ServiceStoreInventoryQueriesResponseType = {\n [GET_STORE_INVENTORY]: Promise;\n};\n","export const GET_APPT_BOOKING_ACCESS_TOKEN = 'apptBooking.tokenAccess.get';\nexport const GET_APPT_BOOKING_COUNTERS = 'apptBooking.counters.get';\nexport const GET_APPT_BOOKING_CONTENTS_TEMPLATE = 'apptBooking.contentTemplates.get';\n\nexport interface ICounter {\n id: number;\n name: string;\n serviceIds: number[];\n counterLat: number;\n counterLng: number;\n town: string;\n address1: string;\n address2: string;\n phone: string;\n timeslotInterval: number;\n calendars: IApiCalendar[];\n maxAppointmentServices: number;\n}\n\nexport interface IApptBookingServiceContentWrapper {\n template_fields: IApptBookingServiceContentTemplate;\n}\n\nexport interface IApptBookingServiceContentTemplate {\n data: IApptBookingServiceContent;\n}\n\nexport interface IApptBookingServiceContent {\n image: IImage;\n description: string;\n contentId: string;\n title: string;\n}\n\nexport interface IImage {\n src: string;\n alt: string;\n}\n\nexport interface IApiTimeSlots {\n start_date: string;\n end_date: string;\n}\n\nexport interface IApiCalendar {\n timeslots: IApiTimeSlots[];\n}\n\nexport type ServiceApptBookingQueries = {\n [GET_APPT_BOOKING_ACCESS_TOKEN]: {};\n [GET_APPT_BOOKING_COUNTERS]: {};\n [GET_APPT_BOOKING_CONTENTS_TEMPLATE]: {};\n};\n\nexport type ServiceApptBookingQueriesResponseType = {\n [GET_APPT_BOOKING_ACCESS_TOKEN]: string;\n [GET_APPT_BOOKING_COUNTERS]: ICounter[];\n [GET_APPT_BOOKING_CONTENTS_TEMPLATE]: IApptBookingServiceContentWrapper[];\n};\n","export const LEGAL_ACCEPTANCE_TOKEN = 'legal.acceptance.token';\n\n/**\n * Specification for getting a legal acceptance token\n */\nexport interface IGetLegalAcceptanceSpec {\n /**\n * The action name\n */\n action: string;\n\n /**\n * If true this is a request for a guest\n */\n guest?: boolean;\n\n /**\n * The owner for which the token is updated/created for\n */\n owner?: string;\n /**\n * The text the user sees in order to acknowledge the legal implications.\n * Ex: By pressing 'Submit' you agree with the Terms and Conditions.\n */\n acceptanceTag: string;\n}\n\nexport type ServiceLegalQueriesResponseType = {\n [LEGAL_ACCEPTANCE_TOKEN]: Promise;\n};\n\nexport type ServiceLegalQueries = {\n /**\n * Gets the legal acceptance query for a given action\n */\n [LEGAL_ACCEPTANCE_TOKEN]: IGetLegalAcceptanceSpec;\n};\n","export const TEMPLATES_CONTENT_GET = 'content.templates.get';\n\ninterface INodeTemplate {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n [key: string]: any;\n}\n\nexport type ServiceContentTemplatesQueries = {\n [TEMPLATES_CONTENT_GET]: { nodeId: number };\n};\n\nexport type ServiceContentTemplatesQueriesResponseType = {\n [TEMPLATES_CONTENT_GET]: Promise;\n};\n","export const GET_REVIEW_SNIPPET = 'getReviewSnippet';\n\nexport type ServiceRatingsReviewsQueries = {\n [GET_REVIEW_SNIPPET]: {};\n};\n\nexport type ServiceRatingsReviewsQueriesResponseType = {\n [GET_REVIEW_SNIPPET]: {};\n};\n","export const GET_BEST_MATCH_SKU_ID = 'get.bestMatchSkuId';\nexport const GET_USER_DETAILS = 'get.userDetails';\n\nexport type ServiceVtoQueries = {\n [GET_BEST_MATCH_SKU_ID]: { productId: string };\n [GET_USER_DETAILS]: undefined;\n};\n\nexport type ServiceVtoQueriesResponseType = {\n [GET_BEST_MATCH_SKU_ID]: string;\n [GET_USER_DETAILS]: Record;\n};\n","export const GET_LEGACY_GUEST_AUTH_TOKEN = 'get.legacy.guestAuthtoken';\nexport const GET_GUEST_AUTH_TOKEN = 'get.guestAuthtoken';\nexport const IS_AUTHENTICATED = 'isAuthenticated';\nexport const GET_ACCESS_TOKEN = 'get.accessToken';\nexport const USER_ID = 'userId';\n\nexport type ServiceSessionMgmtQueries = {\n [GET_LEGACY_GUEST_AUTH_TOKEN]: undefined;\n [GET_GUEST_AUTH_TOKEN]: undefined;\n [GET_ACCESS_TOKEN]: undefined;\n [IS_AUTHENTICATED]: undefined;\n [USER_ID]: undefined;\n};\n\nexport type ServiceSessionMgmtQueriesResponseType = {\n [GET_LEGACY_GUEST_AUTH_TOKEN]: Promise;\n [GET_GUEST_AUTH_TOKEN]: Promise;\n [GET_ACCESS_TOKEN]: Promise;\n [IS_AUTHENTICATED]: boolean | '' | null;\n [USER_ID]: string;\n};\n","export const IS_LOYALTY_MEMBER = 'isLoyaltyMember';\nexport const LOYALTY_POINTS = 'points';\n\nexport type ServiceLoyaltyQueries = {\n [IS_LOYALTY_MEMBER]: undefined;\n [LOYALTY_POINTS]: undefined;\n};\n\nexport type ServiceLoyaltyQueriesResponseType = {\n [IS_LOYALTY_MEMBER]: boolean;\n [LOYALTY_POINTS]: number;\n};\n","import * as ElcEcommQueries from './fe-elc-ecomm';\nimport * as ElcServiceAnalyticsQueries from './fe-elc-service-analytics';\nimport * as ElcServiceCartQueries from './fe-elc-service-cart';\nimport * as ElcServiceCheckoutQueries from './fe-elc-service-checkout';\nimport * as ElcServiceCommunicationsQueries from './fe-elc-service-communications';\nimport * as ElcServiceOffersQueries from './fe-elc-service-offers';\nimport * as ElcServiceOrderHistoryQueries from './fe-elc-service-order-history';\nimport * as ElcServiceOrderQueries from './fe-elc-service-order';\nimport * as ElcServicePasswordStrengthQueries from './fe-elc-service-password-strength';\nimport * as ElcServicePaymentQueries from './fe-elc-service-payment';\nimport * as ElcServiceProdcatQueries from './fe-elc-service-prodcat';\nimport * as ElcServiceSaveForLaterQueries from './fe-elc-service-save-for-later';\nimport * as ElcServiceSignUpQueries from './fe-elc-service-sign-up';\nimport * as ElcServiceUserProfileQueries from './fe-elc-service-user-profile';\nimport * as ElcServiceConfigManagerQueries from './fe-elc-service-config-manager';\nimport * as ElcServiceTranslationsQueries from './fe-elc-service-translations';\nimport * as ElcServiceStoreQueries from './fe-elc-service-stores';\nimport * as ElcServiceApptBookingQueries from './fe-elc-service-appt-booking';\nimport * as ElcServiceLegalQueries from './fe-elc-service-legal';\nimport * as ElcServiceContentQueries from './fe-elc-service-content';\nimport * as ElcServiceRatingsReviewsQueries from './fe-elc-service-ratings-reviews';\nimport * as ElcServiceVtoQueries from './fe-elc-service-vto';\nimport * as ElcServiceSessionMgmtQueries from './fe-elc-service-session-mgmt';\nimport * as ElcServiceLoyaltyQueries from './fe-pg-service-loyalty';\n\nconst serviceQueries = {\n ...ElcEcommQueries,\n ...ElcServiceAnalyticsQueries,\n ...ElcServiceCartQueries,\n ...ElcServiceCheckoutQueries,\n ...ElcServiceCommunicationsQueries,\n ...ElcServiceOffersQueries,\n ...ElcServiceOrderHistoryQueries,\n ...ElcServiceOrderQueries,\n ...ElcServicePasswordStrengthQueries,\n ...ElcServicePaymentQueries,\n ...ElcServiceProdcatQueries,\n ...ElcServiceSaveForLaterQueries,\n ...ElcServiceSignUpQueries,\n ...ElcServiceUserProfileQueries,\n ...ElcServiceConfigManagerQueries,\n ...ElcServiceTranslationsQueries,\n ...ElcServiceStoreQueries,\n ...ElcServiceApptBookingQueries,\n ...ElcServiceLegalQueries,\n ...ElcServiceContentQueries,\n ...ElcServiceRatingsReviewsQueries,\n ...ElcServiceVtoQueries,\n ...ElcServiceSessionMgmtQueries,\n ...ElcServiceLoyaltyQueries\n};\n\ntype ServiceQueries = ElcServiceCartQueries.ServiceCartQueries &\n ElcEcommQueries.ServiceElcEcommQueries &\n ElcServiceAnalyticsQueries.ServiceAnalyticsQueries &\n ElcServiceCheckoutQueries.ServiceCheckoutQueries &\n ElcServiceCommunicationsQueries.ServiceCommunicationsQueries &\n ElcServiceOffersQueries.ServiceOffersQueries &\n ElcServiceOrderHistoryQueries.ServiceOrderHistoryQueries &\n ElcServiceOrderQueries.ServiceOrderQueries &\n ElcServicePasswordStrengthQueries.ServicePasswordStrengthQueries &\n ElcServicePaymentQueries.ServicePaymentQueries &\n ElcServiceProdcatQueries.ServiceProdcatQueries &\n ElcServiceSaveForLaterQueries.ServiceSaveForLaterQueries &\n ElcServiceSessionMgmtQueries.ServiceSessionMgmtQueries &\n ElcServiceSignUpQueries.ServiceSignUpQueries &\n ElcServiceTranslationsQueries.ServiceTranslationsQueries &\n ElcServiceConfigManagerQueries.ServiceConfigManagerQueries &\n ElcServiceUserProfileQueries.ServiceUserProfileQueries &\n ElcServiceLoyaltyQueries.ServiceLoyaltyQueries &\n ElcServiceStoreQueries.ServiceStoreInventoryQueries &\n ElcServiceApptBookingQueries.ServiceApptBookingQueries &\n ElcServiceLegalQueries.ServiceLegalQueries &\n ElcServiceContentQueries.ServiceContentTemplatesQueries &\n ElcServiceRatingsReviewsQueries.ServiceRatingsReviewsQueries &\n ElcServiceVtoQueries.ServiceVtoQueries;\ntype ServiceQueriesResponseType = ElcServiceCartQueries.ServiceCartQueriesResponseType &\n ElcEcommQueries.ServiceElcEcommQueriesResponseType &\n ElcServiceAnalyticsQueries.ServiceAnalyticsQueriesResponseType &\n ElcServiceCheckoutQueries.ServiceCheckoutQueriesResponseType &\n ElcServiceCommunicationsQueries.ServiceCommunicationsQueriesResponseType &\n ElcServiceOffersQueries.ServiceOffersQueriesResponseType &\n ElcServiceOrderHistoryQueries.ServiceOrderHistoryQueriesResponseType &\n ElcServiceOrderQueries.ServiceOrderQueriesResponseType &\n ElcServicePasswordStrengthQueries.ServicePasswordStrengthQueriesResponseType &\n ElcServicePaymentQueries.ServicePaymentQueriesResponseType &\n ElcServiceProdcatQueries.ServiceProdcatQueriesResponseType &\n ElcServiceSaveForLaterQueries.ServiceSaveForLaterQueriesResponseType &\n ElcServiceSessionMgmtQueries.ServiceSessionMgmtQueriesResponseType &\n ElcServiceSignUpQueries.ServiceSignUpQueriesResponseType &\n ElcServiceTranslationsQueries.ServiceTranslationsQueriesResponseType &\n ElcServiceConfigManagerQueries.ServiceConfigManagerQueriesResponseType &\n ElcServiceUserProfileQueries.ServiceUserProfileQueriesResponseType &\n ElcServiceLoyaltyQueries.ServiceLoyaltyQueriesResponseType &\n ElcServiceStoreQueries.ServiceStoreInventoryQueriesResponseType &\n ElcServiceApptBookingQueries.ServiceApptBookingQueriesResponseType &\n ElcServiceLegalQueries.ServiceLegalQueriesResponseType &\n ElcServiceContentQueries.ServiceContentTemplatesQueriesResponseType &\n ElcServiceRatingsReviewsQueries.ServiceRatingsReviewsQueriesResponseType &\n ElcServiceVtoQueries.ServiceVtoQueriesResponseType;\n// eslint-disable-next-line no-restricted-syntax\nexport { serviceQueries, ServiceQueries, ServiceQueriesResponseType };\n","export const CHANGE_ROUTE_PROFILE = 'change.route.profile';\nexport const CHANGE_ROUTE_SETTINGS = 'change.route.settings';\nexport const CHANGE_ROUTE_ORDER_HISTORY = 'change.route.orderHistory';\n\nexport type ServiceElcEcommCommands = {\n [CHANGE_ROUTE_PROFILE]: undefined;\n [CHANGE_ROUTE_SETTINGS]: undefined;\n [CHANGE_ROUTE_ORDER_HISTORY]: undefined;\n};\n\nexport type ServiceElcEcommCommandsReturnType = {\n [CHANGE_ROUTE_PROFILE]: undefined;\n [CHANGE_ROUTE_SETTINGS]: undefined;\n [CHANGE_ROUTE_ORDER_HISTORY]: undefined;\n};\n","export const CART_ADD_ITEM = 'cart.addItem';\nexport const CART_CLEAR_ERRORS = 'cart.clearErrors';\nexport const CART_CLEAR = 'cart.clear';\nexport const CART_SET_SHIPPING_METHOD = 'cart.setShippingMethod';\nexport const CART_ADD_ADDRESSES = 'cart.add.addresses';\nexport const SAVE_FOR_LATER_ADD = 'cart.save.for.later';\nexport const CART_OVERLAY_SHOW = 'cart.overlay.show';\nexport const CART_OVERLAY_HIDE = 'cart.overlay.hide';\nexport interface IAddressAttributes {\n [key: string]: string;\n}\nexport interface ICartAddress {\n addressMetadataId: string;\n attributes: IAddressAttributes;\n}\nexport interface ICartAddAddress {\n shippingAddresses: ICartAddress[];\n billingAddress: ICartAddress;\n}\nexport interface ISaveForLaterAdd {\n skuId: string;\n quantity: number;\n}\nexport interface ISelectedShippingDates {\n [key: string]: string[];\n}\nexport interface ICartMethod {\n shippingMethodId: string;\n selectedShippingDates: ISelectedShippingDates;\n}\n\nexport type ServiceCartCommands = {\n [CART_ADD_ITEM]: { skuId: string; quantity?: number; replenishment?: number };\n [CART_CLEAR_ERRORS]: undefined;\n [CART_CLEAR]: undefined;\n [CART_SET_SHIPPING_METHOD]: ICartMethod;\n [CART_ADD_ADDRESSES]: ICartAddAddress;\n [SAVE_FOR_LATER_ADD]: ISaveForLaterAdd;\n [CART_OVERLAY_SHOW]: undefined;\n [CART_OVERLAY_HIDE]: undefined;\n};\n\nexport type ServiceCartCommandsReturnType = {\n [CART_ADD_ITEM]: Promise;\n [CART_CLEAR_ERRORS]: undefined;\n [CART_CLEAR]: undefined;\n [CART_SET_SHIPPING_METHOD]: undefined;\n [CART_ADD_ADDRESSES]: Promise;\n [SAVE_FOR_LATER_ADD]: Promise;\n [CART_OVERLAY_SHOW]: Promise;\n [CART_OVERLAY_HIDE]: Promise;\n};\n","export const UPDATE_INVENTORY = 'update.inventory';\n\ninterface IInventoryStatus {\n inventory_status: number | string;\n}\n\nexport interface IInventoryStatuses {\n [key: string]: IInventoryStatus;\n}\n\nexport type ServiceProdcatCommands = {\n [UPDATE_INVENTORY]: IInventoryStatuses;\n};\n\nexport type ServiceProdcatCommandsReturnType = {\n [UPDATE_INVENTORY]: undefined;\n};\n","export const UPDATE_POWER_REVIEWS_CONFIGS = 'updateReviewConfig';\n\nexport interface IReviewUpdateConfig {\n apiKey: string;\n merchantGroupId: string;\n merchantId: string;\n locale: string;\n}\n\nexport type ServiceRatingsReviewsCommands = {\n [UPDATE_POWER_REVIEWS_CONFIGS]: IReviewUpdateConfig;\n};\n\nexport type ServiceRatingsReviewsCommandsReturnType = {\n [UPDATE_POWER_REVIEWS_CONFIGS]: Promise;\n};\n","export const AUTH_UPDATE_DATA = 'auth.update.data';\nexport const SET_SIGN_IN_EMAIL = 'set.sign.in.email';\n\nexport interface IAuthUpdateData {\n token: string;\n source?: string;\n email?: string;\n expiration: number;\n}\n\nexport type ServiceSignInCommands = {\n [AUTH_UPDATE_DATA]: IAuthUpdateData;\n [SET_SIGN_IN_EMAIL]: { email: string };\n};\n\nexport type ServiceSignInCommandsReturnType = {\n [AUTH_UPDATE_DATA]: undefined;\n [SET_SIGN_IN_EMAIL]: undefined;\n};\n","export const UPDATE_USER_DATA = 'update.user.data';\nexport const CLEAR_USER_DATA = 'clear.user.data';\nexport const ACCOUNT_OVERLAY_SHOW = 'account.overlay.show';\nexport const ACCOUNT_OVERLAY_HIDE = 'account.overlay.hide';\nexport const ADD_USER_ADDRESS = 'account.add.user.address';\n\nexport interface IUpdateUserData {\n userId: string;\n userEmail: string;\n userRole: string;\n userCreationDate: string;\n}\n\nexport interface IUserAddressAttributes {\n [field: string]: string;\n}\n\nexport interface IUserAddress {\n addressIsDefault?: boolean;\n addressMetadataId: string;\n addressAttributes: IUserAddressAttributes;\n}\n\nexport type IAddUserAddressPayload = IUserAddress;\n\nexport type ServiceUserProfileCommands = {\n [UPDATE_USER_DATA]: IUpdateUserData;\n [CLEAR_USER_DATA]: undefined;\n [ACCOUNT_OVERLAY_SHOW]: undefined;\n [ACCOUNT_OVERLAY_HIDE]: undefined;\n [ADD_USER_ADDRESS]: IAddUserAddressPayload;\n};\n\nexport type ServiceUserProfileCommandsReturnType = {\n [UPDATE_USER_DATA]: undefined;\n [CLEAR_USER_DATA]: undefined;\n [ACCOUNT_OVERLAY_SHOW]: undefined;\n [ACCOUNT_OVERLAY_HIDE]: undefined;\n [ADD_USER_ADDRESS]: Promise;\n};\n","export const ORDER_CREATE = 'order.create';\nexport const ORDER_CHECK = 'order.check';\nexport const ORDER_UPDATE = 'order.update';\n\nexport type ServiceOrderCommands = {\n [ORDER_CREATE]: undefined;\n [ORDER_UPDATE]: undefined;\n};\n\nexport type ServiceOrderCommandsReturnType = {\n [ORDER_CREATE]: Promise;\n [ORDER_UPDATE]: undefined;\n};\n","import * as ElcEcommCommands from './fe-elc-ecomm';\nimport * as ElcServiceCartCommands from './fe-elc-service-cart';\nimport * as ElcServiceProdcatCommands from './fe-elc-service-prodcat';\nimport * as ElcServiceRatingsReviewsCommands from './fe-elc-service-ratings-reviews';\nimport * as ElcServiceSignInCommands from './fe-elc-service-sign-in';\nimport * as ElcServiceUserProfileCommands from './fe-elc-service-user-profile';\nimport * as ElcServiceOrderCommands from './fe-elc-service-order';\n\nconst serviceCommands = {\n ...ElcEcommCommands,\n ...ElcServiceCartCommands,\n ...ElcServiceOrderCommands,\n ...ElcServiceProdcatCommands,\n ...ElcServiceRatingsReviewsCommands,\n ...ElcServiceSignInCommands,\n ...ElcServiceUserProfileCommands\n};\n\ntype ServiceCommands = ElcServiceCartCommands.ServiceCartCommands &\n ElcEcommCommands.ServiceElcEcommCommands &\n ElcServiceOrderCommands.ServiceOrderCommands &\n ElcServiceProdcatCommands.ServiceProdcatCommands &\n ElcServiceRatingsReviewsCommands.ServiceRatingsReviewsCommands &\n ElcServiceSignInCommands.ServiceSignInCommands &\n ElcServiceUserProfileCommands.ServiceUserProfileCommands;\n\ntype ServiceCommandsReturnType = ElcServiceCartCommands.ServiceCartCommandsReturnType &\n ElcEcommCommands.ServiceElcEcommCommandsReturnType &\n ElcServiceOrderCommands.ServiceOrderCommandsReturnType &\n ElcServiceProdcatCommands.ServiceProdcatCommandsReturnType &\n ElcServiceRatingsReviewsCommands.ServiceRatingsReviewsCommandsReturnType &\n ElcServiceSignInCommands.ServiceSignInCommandsReturnType &\n ElcServiceUserProfileCommands.ServiceUserProfileCommandsReturnType;\n\n// eslint-disable-next-line no-restricted-syntax\nexport { serviceCommands, ServiceCommands, ServiceCommandsReturnType };\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 { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n const gbl = GLOBAL_OBJ ;\n const crypto = gbl.crypto || gbl.msCrypto;\n\n let getRandomByte = () => Math.random() * 16;\n try {\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (crypto && crypto.getRandomValues) {\n getRandomByte = () => crypto.getRandomValues(new Uint8Array(1))[0];\n }\n } catch (_) {\n // some runtimes can crash invoking crypto\n // https://github.com/getsentry/sentry-javascript/issues/8935\n }\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event) {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '';\n }\n return eventId || '';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = parseInt(match[1], 10);\n const minor = parseInt(match[2], 10);\n const patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n if (frame.lineno === undefined) {\n return;\n }\n\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (exception && (exception ).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception , '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nfunction arrayify(maybeArray) {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n /** Pending */\n const PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n /** Resolved / OK */\n const RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n /** Rejected / Error */\n const REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n\n constructor(\n executor,\n ) {SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);\n this._state = States.PENDING;\n this._handlers = [];\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n then(\n onfulfilled,\n onrejected,\n ) {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result );\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n catch(\n onrejected,\n ) {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n finally(onfinally) {\n return new SyncPromise((resolve, reject) => {\n let val;\n let isRejected;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val );\n });\n });\n }\n\n /** JSDoc */\n __init() {this._resolve = (value) => {\n this._setResult(States.RESOLVED, value);\n };}\n\n /** JSDoc */\n __init2() {this._reject = (reason) => {\n this._setResult(States.REJECTED, reason);\n };}\n\n /** JSDoc */\n __init3() {this._setResult = (state, value) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value ).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };}\n\n /** JSDoc */\n __init4() {this._executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n handler[1](this._value );\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { getGlobalSingleton, SyncPromise, logger, isThenable } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\n\n/**\n * Returns the global event processors.\n */\nfunction getGlobalEventProcessors() {\n return getGlobalSingleton('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nfunction addGlobalEventProcessor(callback) {\n getGlobalEventProcessors().push(callback);\n}\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n processors,\n event,\n hint,\n index = 0,\n) {\n return new SyncPromise((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) ;\n\n DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n}\n\nexport { addGlobalEventProcessor, getGlobalEventProcessors, notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { timestampInSeconds, uuid4, dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nfunction updateSession(session, context = {}) {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { isPlainObject, dateTimestampInSeconds, arrayify, uuid4 } from '@sentry/utils';\nimport { notifyEventProcessors, getGlobalEventProcessors } from './eventProcessors.js';\nimport { updateSession } from './session.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nclass Scope {\n /** Flag if notifying is happening. */\n\n /** Callback for client to receive scope changes. */\n\n /** Callback list that will be called after {@link applyToEvent}. */\n\n /** Array of breadcrumbs. */\n\n /** User */\n\n /** Tags */\n\n /** Extra */\n\n /** Contexts */\n\n /** Attachments */\n\n /** Propagation Context for distributed tracing */\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n\n /** Fingerprint */\n\n /** Severity */\n // eslint-disable-next-line deprecation/deprecation\n\n /** Transaction Name */\n\n /** Span */\n\n /** Session */\n\n /** Request Mode Session Status */\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = generatePropagationContext();\n }\n\n /**\n * Inherit values from the parent scope.\n * @param scope to clone.\n */\n static clone(scope) {\n const newScope = new Scope();\n if (scope) {\n newScope._breadcrumbs = [...scope._breadcrumbs];\n newScope._tags = { ...scope._tags };\n newScope._extra = { ...scope._extra };\n newScope._contexts = { ...scope._contexts };\n newScope._user = scope._user;\n newScope._level = scope._level;\n newScope._span = scope._span;\n newScope._session = scope._session;\n newScope._transactionName = scope._transactionName;\n newScope._fingerprint = scope._fingerprint;\n newScope._eventProcessors = [...scope._eventProcessors];\n newScope._requestSession = scope._requestSession;\n newScope._attachments = [...scope._attachments];\n newScope._sdkProcessingMetadata = { ...scope._sdkProcessingMetadata };\n newScope._propagationContext = { ...scope._propagationContext };\n }\n return newScope;\n }\n\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n addScopeListener(callback) {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n addEventProcessor(callback) {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n this._user = user || {};\n if (this._session) {\n updateSession(this._session, { user });\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getUser() {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n getRequestSession() {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n setRequestSession(requestSession) {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setFingerprint(fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setLevel(\n // eslint-disable-next-line deprecation/deprecation\n level,\n ) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTransactionName(name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setContext(key, context) {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setSpan(span) {\n this._span = span;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSpan() {\n return this._span;\n }\n\n /**\n * @inheritDoc\n */\n getTransaction() {\n // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n // have a pointer to the currently-active transaction.\n const span = this.getSpan();\n return span && span.transaction;\n }\n\n /**\n * @inheritDoc\n */\n setSession(session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSession() {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n update(captureContext) {\n if (!captureContext) {\n return this;\n }\n\n if (typeof captureContext === 'function') {\n const updatedScope = (captureContext )(this);\n return updatedScope instanceof Scope ? updatedScope : this;\n }\n\n if (captureContext instanceof Scope) {\n this._tags = { ...this._tags, ...captureContext._tags };\n this._extra = { ...this._extra, ...captureContext._extra };\n this._contexts = { ...this._contexts, ...captureContext._contexts };\n if (captureContext._user && Object.keys(captureContext._user).length) {\n this._user = captureContext._user;\n }\n if (captureContext._level) {\n this._level = captureContext._level;\n }\n if (captureContext._fingerprint) {\n this._fingerprint = captureContext._fingerprint;\n }\n if (captureContext._requestSession) {\n this._requestSession = captureContext._requestSession;\n }\n if (captureContext._propagationContext) {\n this._propagationContext = captureContext._propagationContext;\n }\n } else if (isPlainObject(captureContext)) {\n // eslint-disable-next-line no-param-reassign\n captureContext = captureContext ;\n this._tags = { ...this._tags, ...captureContext.tags };\n this._extra = { ...this._extra, ...captureContext.extra };\n this._contexts = { ...this._contexts, ...captureContext.contexts };\n if (captureContext.user) {\n this._user = captureContext.user;\n }\n if (captureContext.level) {\n this._level = captureContext.level;\n }\n if (captureContext.fingerprint) {\n this._fingerprint = captureContext.fingerprint;\n }\n if (captureContext.requestSession) {\n this._requestSession = captureContext.requestSession;\n }\n if (captureContext.propagationContext) {\n this._propagationContext = captureContext.propagationContext;\n }\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clear() {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._span = undefined;\n this._session = undefined;\n this._notifyScopeListeners();\n this._attachments = [];\n this._propagationContext = generatePropagationContext();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n const breadcrumbs = this._breadcrumbs;\n breadcrumbs.push(mergedBreadcrumb);\n this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getLastBreadcrumb() {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n clearBreadcrumbs() {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addAttachment(attachment) {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getAttachments() {\n return this._attachments;\n }\n\n /**\n * @inheritDoc\n */\n clearAttachments() {\n this._attachments = [];\n return this;\n }\n\n /**\n * Applies data from the scope to the event and runs all event processors on it.\n *\n * @param event Event\n * @param hint Object containing additional information about the original exception, for use by the event processors.\n * @hidden\n */\n applyToEvent(\n event,\n hint = {},\n additionalEventProcessors,\n ) {\n if (this._extra && Object.keys(this._extra).length) {\n event.extra = { ...this._extra, ...event.extra };\n }\n if (this._tags && Object.keys(this._tags).length) {\n event.tags = { ...this._tags, ...event.tags };\n }\n if (this._user && Object.keys(this._user).length) {\n event.user = { ...this._user, ...event.user };\n }\n if (this._contexts && Object.keys(this._contexts).length) {\n event.contexts = { ...this._contexts, ...event.contexts };\n }\n if (this._level) {\n event.level = this._level;\n }\n if (this._transactionName) {\n event.transaction = this._transactionName;\n }\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (this._span) {\n event.contexts = { trace: this._span.getTraceContext(), ...event.contexts };\n const transaction = this._span.transaction;\n if (transaction) {\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: transaction.getDynamicSamplingContext(),\n ...event.sdkProcessingMetadata,\n };\n const transactionName = transaction.name;\n if (transactionName) {\n event.tags = { transaction: transactionName, ...event.tags };\n }\n }\n }\n\n this._applyFingerprint(event);\n\n const scopeBreadcrumbs = this._getBreadcrumbs();\n const breadcrumbs = [...(event.breadcrumbs || []), ...scopeBreadcrumbs];\n event.breadcrumbs = breadcrumbs.length > 0 ? breadcrumbs : undefined;\n\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...this._sdkProcessingMetadata,\n propagationContext: this._propagationContext,\n };\n\n // TODO (v8): Update this order to be: Global > Client > Scope\n return notifyEventProcessors(\n [...(additionalEventProcessors || []), ...getGlobalEventProcessors(), ...this._eventProcessors],\n event,\n hint,\n );\n }\n\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry\n */\n setSDKProcessingMetadata(newData) {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setPropagationContext(context) {\n this._propagationContext = context;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getPropagationContext() {\n return this._propagationContext;\n }\n\n /**\n * Get the breadcrumbs for this scope.\n */\n _getBreadcrumbs() {\n return this._breadcrumbs;\n }\n\n /**\n * This will be called on every set call.\n */\n _notifyScopeListeners() {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n\n /**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\n _applyFingerprint(event) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n // If we have something on the scope, then merge it with event\n if (this._fingerprint) {\n event.fingerprint = event.fingerprint.concat(this._fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n }\n}\n\nfunction generatePropagationContext() {\n return {\n traceId: uuid4(),\n spanId: uuid4().substring(16),\n };\n}\n\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { uuid4, dateTimestampInSeconds, consoleSandbox, logger, GLOBAL_OBJ, getGlobalSingleton } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { Scope } from './scope.js';\nimport { closeSession, makeSession, updateSession } from './session.js';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nconst API_VERSION = 4;\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * @inheritDoc\n */\nclass Hub {\n /** Is a {@link Layer}[] containing the client and scope */\n\n /** Contains the last event id of a captured event. */\n\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n */\n constructor(client, scope = new Scope(), _version = API_VERSION) {this._version = _version;\n this._stack = [{ scope }];\n if (client) {\n this.bindClient(client);\n }\n }\n\n /**\n * @inheritDoc\n */\n isOlderThan(version) {\n return this._version < version;\n }\n\n /**\n * @inheritDoc\n */\n bindClient(client) {\n const top = this.getStackTop();\n top.client = client;\n if (client && client.setupIntegrations) {\n client.setupIntegrations();\n }\n }\n\n /**\n * @inheritDoc\n */\n pushScope() {\n // We want to clone the content of prev scope\n const scope = Scope.clone(this.getScope());\n this.getStack().push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * @inheritDoc\n */\n popScope() {\n if (this.getStack().length <= 1) return false;\n return !!this.getStack().pop();\n }\n\n /**\n * @inheritDoc\n */\n withScope(callback) {\n const scope = this.pushScope();\n try {\n callback(scope);\n } finally {\n this.popScope();\n }\n }\n\n /**\n * @inheritDoc\n */\n getClient() {\n return this.getStackTop().client ;\n }\n\n /** Returns the scope of the top stack. */\n getScope() {\n return this.getStackTop().scope;\n }\n\n /** Returns the scope stack for domains or the process. */\n getStack() {\n return this._stack;\n }\n\n /** Returns the topmost scope layer in the order domain > local > process. */\n getStackTop() {\n return this._stack[this._stack.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint) {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n const syntheticException = new Error('Sentry syntheticException');\n this._withClient((client, scope) => {\n client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n scope,\n );\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(\n message,\n // eslint-disable-next-line deprecation/deprecation\n level,\n hint,\n ) {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n const syntheticException = new Error(message);\n this._withClient((client, scope) => {\n client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n scope,\n );\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n if (!event.type) {\n this._lastEventId = eventId;\n }\n\n this._withClient((client, scope) => {\n client.captureEvent(event, { ...hint, event_id: eventId }, scope);\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n lastEventId() {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, hint) {\n const { scope, client } = this.getStackTop();\n\n if (!client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n (client.getOptions && client.getOptions()) || {};\n\n if (maxBreadcrumbs <= 0) return;\n\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n if (client.emit) {\n client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n }\n\n scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n this.getScope().setUser(user);\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n this.getScope().setTags(tags);\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n this.getScope().setExtras(extras);\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n this.getScope().setTag(key, value);\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n this.getScope().setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setContext(name, context) {\n this.getScope().setContext(name, context);\n }\n\n /**\n * @inheritDoc\n */\n configureScope(callback) {\n const { scope, client } = this.getStackTop();\n if (client) {\n callback(scope);\n }\n }\n\n /**\n * @inheritDoc\n */\n run(callback) {\n const oldHub = makeMain(this);\n try {\n callback(this);\n } finally {\n makeMain(oldHub);\n }\n }\n\n /**\n * @inheritDoc\n */\n getIntegration(integration) {\n const client = this.getClient();\n if (!client) return null;\n try {\n return client.getIntegration(integration);\n } catch (_oO) {\n DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n return null;\n }\n }\n\n /**\n * @inheritDoc\n */\n startTransaction(context, customSamplingContext) {\n const result = this._callExtensionMethod('startTransaction', context, customSamplingContext);\n\n if (DEBUG_BUILD && !result) {\n const client = this.getClient();\n if (!client) {\n logger.warn(\n \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n );\n } else {\n logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n`);\n }\n }\n\n return result;\n }\n\n /**\n * @inheritDoc\n */\n traceHeaders() {\n return this._callExtensionMethod('traceHeaders');\n }\n\n /**\n * @inheritDoc\n */\n captureSession(endSession = false) {\n // both send the update and pull the session from the scope\n if (endSession) {\n return this.endSession();\n }\n\n // only send the update\n this._sendSessionUpdate();\n }\n\n /**\n * @inheritDoc\n */\n endSession() {\n const layer = this.getStackTop();\n const scope = layer.scope;\n const session = scope.getSession();\n if (session) {\n closeSession(session);\n }\n this._sendSessionUpdate();\n\n // the session is over; take it off of the scope\n scope.setSession();\n }\n\n /**\n * @inheritDoc\n */\n startSession(context) {\n const { scope, client } = this.getStackTop();\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: scope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = scope.getSession && scope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n this.endSession();\n\n // Afterwards we set the new session on the scope\n scope.setSession(session);\n\n return session;\n }\n\n /**\n * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n * when Tracing is used.\n */\n shouldSendDefaultPii() {\n const client = this.getClient();\n const options = client && client.getOptions();\n return Boolean(options && options.sendDefaultPii);\n }\n\n /**\n * Sends the current Session on the scope\n */\n _sendSessionUpdate() {\n const { scope, client } = this.getStackTop();\n\n const session = scope.getSession();\n if (session && client && client.captureSession) {\n client.captureSession(session);\n }\n }\n\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client.\n * @param args Arguments to pass to the client function.\n */\n _withClient(callback) {\n const { scope, client } = this.getStackTop();\n if (client) {\n callback(client, scope);\n }\n }\n\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-expect-error Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _callExtensionMethod(method, ...args) {\n const carrier = getMainCarrier();\n const sentry = carrier.__SENTRY__;\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n DEBUG_BUILD && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n extensions: {},\n hub: undefined,\n };\n return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nfunction makeMain(hub) {\n const registry = getMainCarrier();\n const oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nfunction getCurrentHub() {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n\n if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n const hub = registry.__SENTRY__.acs.getCurrentHub();\n\n if (hub) {\n return hub;\n }\n }\n\n // Return hub that lives on a global object\n return getGlobalHub(registry);\n}\n\nfunction getGlobalHub(registry = getMainCarrier()) {\n // If there's no hub, or its an old API, assign a new one\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n }\n\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * If the carrier does not contain a hub, a new hub is created with the global hub client and scope.\n */\nfunction ensureHubOnCarrier(carrier, parent = getGlobalHub()) {\n // If there's no hub on current domain, or it's an old API, assign a new one\n if (!hasHubOnCarrier(carrier) || getHubFromCarrier(carrier).isOlderThan(API_VERSION)) {\n const globalHubTopStack = parent.getStackTop();\n setHubOnCarrier(carrier, new Hub(globalHubTopStack.client, Scope.clone(globalHubTopStack.scope)));\n }\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n registry.__SENTRY__ = registry.__SENTRY__ || {};\n registry.__SENTRY__.acs = strategy;\n}\n\n/**\n * Runs the supplied callback in its own async context. Async Context strategies are defined per SDK.\n *\n * @param callback The callback to run in its own async context\n * @param options Options to pass to the async context strategy\n * @returns The result of the callback\n */\nfunction runWithAsyncContext(callback, options = {}) {\n const registry = getMainCarrier();\n\n if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n return registry.__SENTRY__.acs.runWithAsyncContext(callback, options);\n }\n\n // if there was no strategy, fallback to just calling the callback\n return callback();\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nfunction getHubFromCarrier(carrier) {\n return getGlobalSingleton('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nfunction setHubOnCarrier(carrier, hub) {\n if (!carrier) return false;\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n __SENTRY__.hub = hub;\n return true;\n}\n\nexport { API_VERSION, Hub, ensureHubOnCarrier, getCurrentHub, getHubFromCarrier, getMainCarrier, makeMain, runWithAsyncContext, setAsyncContextStrategy, setHubOnCarrier };\n//# sourceMappingURL=hub.js.map\n","import { uuid4, dateTimestampInSeconds, addExceptionMechanism, resolvedSyncPromise, truncate, GLOBAL_OBJ, normalize } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { notifyEventProcessors, getGlobalEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * Note: This also triggers callbacks for `addGlobalEventProcessor`, but not `beforeSend`.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n options,\n event,\n hint,\n scope,\n client,\n) {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n const prepared = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n\n // Only put debug IDs onto frames for error events.\n if (event.type === undefined) {\n applyDebugIds(prepared, options.stackParser);\n }\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n let finalScope = scope;\n if (hint.captureContext) {\n finalScope = Scope.clone(finalScope).update(hint.captureContext);\n }\n\n if (hint.mechanism) {\n addExceptionMechanism(prepared, hint.mechanism);\n }\n\n // We prepare the result here with a resolved Event.\n let result = resolvedSyncPromise(prepared);\n\n const clientEventProcessors = client && client.getEventProcessors ? client.getEventProcessors() : [];\n\n // This should be the last thing called, since we want that\n // {@link Hub.addEventProcessor} gets the finished prepared event.\n //\n // We need to check for the existence of `finalScope.getAttachments`\n // because `getAttachments` can be undefined if users are using an older version\n // of `@sentry/core` that does not have the `getAttachments` method.\n // See: https://github.com/getsentry/sentry-javascript/issues/5229\n if (finalScope) {\n // Collect attachments from the hint and scope\n if (finalScope.getAttachments) {\n const attachments = [...(hint.attachments || []), ...finalScope.getAttachments()];\n\n if (attachments.length) {\n hint.attachments = attachments;\n }\n }\n\n // In case we have a hub we reassign it.\n result = finalScope.applyToEvent(prepared, hint, clientEventProcessors);\n } else {\n // Apply client & global event processors even if there is no scope\n // TODO (v8): Update the order to be Global > Client\n result = notifyEventProcessors([...clientEventProcessors, ...getGlobalEventProcessors()], prepared, hint);\n }\n\n return result.then(evt => {\n if (evt) {\n // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n // any new data\n applyDebugMeta(evt);\n }\n\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\nconst debugIdStackParserCache = new WeakMap();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n if (!debugIdMap) {\n return;\n }\n\n let debugIdStackFramesCache;\n const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n if (cachedDebugIdStackFrameCache) {\n debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n } else {\n debugIdStackFramesCache = new Map();\n debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n }\n\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = Object.keys(debugIdMap).reduce((acc, debugIdStackTrace) => {\n let parsedStack;\n const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n if (cachedParsedStack) {\n parsedStack = cachedParsedStack;\n } else {\n parsedStack = stackParser(debugIdStackTrace);\n debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n }\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n if (stackFrame.filename) {\n acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n break;\n }\n }\n return acc;\n }, {});\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap = {};\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n\n if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n\n // Fill debug_meta information\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.keys(filenameDebugIdMap).forEach(filename => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id: filenameDebugIdMap[filename],\n });\n });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n if (!event) {\n return null;\n }\n\n const normalized = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n // We cannot use the spread operator here because `toJSON` on `span` is non-enumerable\n if (span.data) {\n span.data = normalize(span.data, depth, maxBreadth);\n }\n return span;\n });\n }\n\n return normalized;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n hint,\n) {\n if (!hint) {\n return undefined;\n }\n\n // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint,\n };\n }\n\n return hint;\n}\n\nfunction hintIsScopeOrFunction(\n hint,\n) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'requestSession',\n 'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { logger, uuid4, timestampInSeconds, isThenable } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { getCurrentHub } from './hub.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\n\n// Note: All functions in this file are typed with a return value of `ReturnType`,\n// where HUB_FUNCTION is some method on the Hub class.\n//\n// This is done to make sure the top level SDK methods stay in sync with the hub methods.\n// Although every method here has an explicit return type, some of them (that map to void returns) do not\n// contain `return` keywords. This is done to save on bundle size, as `return` is not minifiable.\n\n/**\n * Captures an exception event and sends it to Sentry.\n * This accepts an event hint as optional second parameter.\n * Alternatively, you can also pass a CaptureContext directly as second parameter.\n */\nfunction captureException(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exception,\n hint,\n) {\n return getCurrentHub().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param Severity Define the level of the message.\n * @returns The generated eventId.\n */\nfunction captureMessage(\n message,\n // eslint-disable-next-line deprecation/deprecation\n captureContext,\n) {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @returns The generated eventId.\n */\nfunction captureEvent(event, hint) {\n return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nfunction configureScope(callback) {\n getCurrentHub().configureScope(callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\nfunction addBreadcrumb(breadcrumb) {\n getCurrentHub().addBreadcrumb(breadcrumb);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setContext(name, context) {\n getCurrentHub().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n getCurrentHub().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n getCurrentHub().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n getCurrentHub().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n getCurrentHub().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n getCurrentHub().setUser(user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nfunction withScope(callback) {\n getCurrentHub().withScope(callback);\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.finish()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n */\nfunction startTransaction(\n context,\n customSamplingContext,\n) {\n return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n const hub = getCurrentHub();\n const scope = hub.getScope();\n const client = hub.getClient();\n if (!client) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n monitorSlug,\n callback,\n upsertMonitorConfig,\n) {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status) {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n\n let maybePromiseResult;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n Promise.resolve(maybePromiseResult).then(\n () => {\n finishCheckIn('ok');\n },\n () => {\n finishCheckIn('error');\n },\n );\n } else {\n finishCheckIn('ok');\n }\n\n return maybePromiseResult;\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nfunction lastEventId() {\n return getCurrentHub().lastEventId();\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n return getCurrentHub().getClient();\n}\n\nexport { addBreadcrumb, captureCheckIn, captureEvent, captureException, captureMessage, close, configureScope, flush, getClient, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startTransaction, withMonitor, withScope };\n//# sourceMappingURL=exports.js.map\n","import { debug, Debugger } from 'debug';\nimport { getSandboxEnvironment, root, ISandboxEnvironment } from '@estee/elc-universal-utils';\nimport * as Sentry from '@sentry/browser';\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\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.__SENTRY__\n ? Sentry.captureMessage(JSON.stringify(logdata))\n : console.info('Logging failed because Sentry is not available');\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 { ELCLogger, TriggerType } from '@estee/elc-logging';\nimport { root } from '@estee/elc-universal-utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst { name, version } = __serviceInfo__;\nexport interface IQueryProvider {\n queryName: string;\n provider: Function;\n context: any;\n}\ninterface IQueryWatcher {\n queryName: string;\n queryWatcher: Function;\n}\n\ntype QueryCacheType = { [k: string]: boolean | number | string };\nexport interface IUnsolvedQuery {\n promise: Promise;\n resolve: Function;\n payload: any;\n queryName: keyof Q;\n}\n\nexport type OptionsType = {\n replay?: boolean;\n};\n\ntype EventListener = Function;\ntype NextFnType = Function;\ntype PayloadType = any;\ninterface IHook {\n beforeEventListenerRegister?(event: string, listener?: EventListener, next?: NextFnType): void;\n beforeEmit?(action: string, payload?: PayloadType, next?: NextFnType): void;\n afterEmit?(event: string, payload?: PayloadType): void;\n beforeQueryRegister?(queryName: string, qp: IQueryProvider, next: NextFnType): void;\n beforeQuery?(queryName: string, payload?: PayloadType, next?: NextFnType): void;\n afterQuery?(queryName: string, payload?: PayloadType): void;\n}\ntype HooksFunction = (bus: ServiceBus) => IHook;\ntype HooksCollection = { [k: string]: Function[] };\n\ntype LogType = 'info' | 'error';\nexport const LogTypes = {\n info: 'info' as LogType,\n error: 'error' as LogType\n};\n\nexport class ServiceBus {\n private eventWatchers: Map;\n private eventsEmitted: Map;\n private queryProviders: IQueryProvider[];\n private queryWatchers: IQueryWatcher[];\n private queryCache: QueryCacheType;\n private unsolvedQueries: IUnsolvedQuery[] = [];\n private hooks: HooksCollection = {};\n\n protected readonly logger = new ELCLogger({\n serviceName: name,\n serviceVersion: version,\n environment: root.env,\n buid: root.buid\n });\n\n private dummyHook = (event: string, listener?: EventListener, next?: NextFnType): void =>\n next && next(event, listener);\n\n constructor() {\n this.eventWatchers = new Map();\n this.eventsEmitted = new Map();\n this.queryProviders = [];\n this.queryWatchers = [];\n this.queryCache = {};\n // Hooks form a queue, in which the original function is the last in the queue\n this.hooks = {\n beforeEmit: [this.runEmit],\n beforeQuery: [this.runQuery],\n beforeEventListenerRegister: [this.dummyHook],\n beforeQueryRegister: [this.runRegisterQueryProvider]\n };\n setInterval(this.dirtyCheckQueries, 200);\n }\n\n public log = ({\n message,\n payload,\n type = LogTypes.info as LogType\n }: {\n message: string;\n payload?: { error?: Error; context?: Record };\n type?: LogType;\n }) => {\n const logMethod = type === LogTypes.error ? this.logger.error : this.logger.info;\n\n logMethod({\n message,\n payload,\n triggerType: TriggerType.serviceBus\n });\n };\n\n public on = (\n eventName: K,\n callback: (payload: E[K]) => any,\n options?: OptionsType\n ) => {\n this.runHooks('beforeEventListenerRegister', eventName, callback);\n this.runOn(eventName, callback, options);\n };\n\n private runOn = (\n eventName: K,\n callback: (payload: E[K]) => any,\n options: OptionsType = {}\n ) => {\n const { replay = false } = options;\n\n if (!eventName) {\n const error = new Error(\n 'Event name cannot be undefined while subscribing to ServiceBus'\n );\n this.logger.error({\n message: error.message,\n triggerType: TriggerType.serviceBus,\n payload: {\n error\n }\n });\n throw error;\n }\n if (!callback) {\n const error = new Error('A callback is necessary while subscribing to ServiceBus');\n this.logger.error({\n message: error.message,\n triggerType: TriggerType.serviceBus,\n payload: {\n error,\n context: {\n eventName\n }\n }\n });\n throw error;\n }\n\n let callbacks = this.eventWatchers.get(eventName);\n\n if (!callbacks) {\n callbacks = [];\n this.eventWatchers.set(eventName, callbacks);\n }\n if (replay && this.eventsEmitted.has(eventName)) {\n callback(this.eventsEmitted.get(eventName));\n }\n if (callbacks) {\n const idx = callbacks.indexOf(callback);\n if (idx < 0) {\n callbacks.push(callback);\n }\n }\n };\n public off = (eventName: any, callback?: Function) => {\n if (callback) {\n const callbacks = this.eventWatchers.get(eventName);\n\n if (callbacks) {\n const idx = callbacks.indexOf(callback);\n if (idx >= 0) {\n callbacks.splice(idx, 1);\n\n if (callbacks.length === 0) {\n this.eventWatchers.delete(eventName);\n }\n }\n }\n } else {\n this.eventWatchers.delete(eventName);\n }\n };\n\n public applyHook = (hook: HooksFunction) => {\n const hookObj = hook(this as ServiceBus);\n Object.keys(hookObj).forEach((hookName: keyof IHook) => {\n const hookFn = hookObj[hookName] as any;\n this.hooks[hookName] = this.hooks[hookName] || [];\n const hkCol = this.hooks[hookName];\n if (hookFn && Array.isArray(hkCol)) {\n hkCol.unshift(hookFn);\n }\n this.solveQueries(hookName);\n });\n };\n\n private solveQueries = (hookEvent: string) => {\n if (hookEvent === 'beforeQuery') {\n if (this.hasUnsolvedQueries()) {\n this.unsolvedQueries.forEach((unsolvedQuery: IUnsolvedQuery) => {\n const { resolve, queryName, payload } = unsolvedQuery;\n const hooksPromise = this.runHooks(hookEvent, queryName, payload);\n const isPromise = (potentialPromise: any) =>\n potentialPromise && potentialPromise.then;\n\n return isPromise(hooksPromise)\n ? hooksPromise.then((results: any) => {\n resolve(results);\n this.unsolvedQueries = this.unsolvedQueries.filter(\n (query) => query !== unsolvedQuery\n );\n })\n : undefined;\n });\n }\n }\n };\n\n public hasUnsolvedQueries = () => {\n return this.unsolvedQueries.length !== 0;\n };\n\n public emit = (eventName: K, payload?: E[K]) => {\n this.runHooks('beforeEmit', eventName, payload);\n };\n\n private runEmit = (eventName: string, payload: any) => {\n const eventWatchers = this.eventWatchers.get(eventName);\n this.eventsEmitted.set(eventName, payload);\n if (eventWatchers) {\n eventWatchers.forEach((c) => {\n c(payload);\n });\n }\n this.runHooks('afterEmit', eventName, payload);\n };\n\n public query = (queryName: K, payload?: Q[K]): QR[K] =>\n this.runHooks('beforeQuery', queryName, payload);\n\n public command = (commandName: K, payload?: C[K]): CR[K] =>\n this.runHooks('beforeQuery', commandName, payload);\n\n private runQuery = (queryName: K, payload?: Q[K]) => {\n const qp = this.queryProviders.find((p) => p.queryName === queryName);\n if (!qp) {\n let resolveFn = function runQueryResolveFn(value: unknown) {};\n const queryPromise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n\n this.unsolvedQueries.push({\n promise: queryPromise,\n resolve: resolveFn,\n payload,\n queryName\n });\n\n return queryPromise;\n }\n\n return Promise.resolve(qp.provider.call(qp.context, payload)).then((r) =>\n this.afterQuery(qp, r, queryName as string)\n );\n };\n\n private afterQuery = (qp: IQueryProvider, result: any, queryName: string) => {\n this.runHooks('afterQuery', qp, result);\n\n return result;\n };\n\n public registerQueryProvider = (\n queryName: K,\n provider: (payload: Q[K]) => QR[K],\n context?: Record\n ) => {\n return this.runHooks('beforeQueryRegister', queryName, provider, context);\n };\n public registerCommandProvider = (\n commandName: K,\n provider: Function,\n context?: Record\n ) => {\n return this.runHooks('beforeQueryRegister', commandName, provider, context);\n };\n private runRegisterQueryProvider = (\n queryName: string,\n provider: Function,\n context?: Record\n ) => {\n const existingQueryProviders = this.queryProviders.filter(\n (qp) => qp.queryName === queryName\n );\n if (existingQueryProviders.length) {\n const error = new Error(\n `Trying to register a query providerm but there is already a provider for query ${queryName}`\n );\n this.logger.warning({\n message: error.message,\n triggerType: TriggerType.serviceBus,\n payload: {\n error,\n context\n }\n });\n\n return;\n }\n this.queryProviders.push({ queryName, provider, context });\n\n const unsolvedProviderQueries = this.unsolvedQueries.filter(\n (uq) => uq.queryName === queryName\n );\n if (unsolvedProviderQueries.length) {\n unsolvedProviderQueries.forEach(this.executeUnsolvedQuery);\n this.unsolvedQueries = this.unsolvedQueries.filter((uq) => uq.queryName !== queryName);\n }\n };\n\n public registerQueryWatcher = (queryName: any, queryWatcher: Function) => {\n this.queryWatchers.push({ queryName, queryWatcher });\n if (queryName in this.queryCache) {\n queryWatcher.call(null, this.queryCache[queryName]);\n }\n };\n\n private runHooks = (hookEvent: keyof IHook, ...args: any[]) => {\n const hookChain = this.hooks[hookEvent] || [];\n\n return this.executeHook(hookChain.slice(0), args);\n };\n private executeHook(hookChain: (Function | undefined)[], args: any) {\n const hookFn = hookChain.shift();\n if (typeof hookFn === 'function') {\n const isLastHook = hookChain.length === 0;\n const next = () => this.executeHook(hookChain.slice(0), args);\n const hookArgs = !isLastHook ? args.concat([next]) : args;\n\n return hookFn(...hookArgs);\n }\n }\n private executeUnsolvedQuery = ({ queryName, payload, resolve }: IUnsolvedQuery) => {\n const qp = this.queryProviders.find((p) => p.queryName === queryName);\n if (qp) {\n return Promise.resolve(qp.provider.call(qp.context, payload)).then((r: any) => {\n resolve(this.afterQuery(qp, r, queryName as string));\n\n return r;\n });\n }\n };\n private dirtyCheckQueries = () => {\n const localQueryCache: QueryCacheType = {};\n this.queryWatchers.forEach((qw) => {\n const { queryName, queryWatcher } = qw;\n const qp = this.queryProviders.find((p) => p.queryName === queryName);\n const queryCache = this.queryCache;\n if (qp) {\n const resultPromise = Promise.resolve(\n localQueryCache[queryName] || qp.provider.call(qp.context)\n );\n void resultPromise.then((result) => {\n if (result !== queryCache[queryName]) {\n queryWatcher.call(null, result);\n }\n localQueryCache[queryName] = result;\n });\n }\n });\n this.queryCache = localQueryCache;\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ELCLogger, TriggerType } from '@estee/elc-logging';\nimport { IQueryProvider, ServiceBus } from './ServiceBus';\n\nconst Logger = new ELCLogger({ serviceName: 'elc-service-bus' });\n\nexport const ServiceBusLogHook = (serviceBus: ServiceBus) => ({\n beforeEventListenerRegister: (event: string, listener: Function, next: Function) => {\n Logger.event({\n triggerType: TriggerType.serviceBus,\n message: `beforeEventListenerRegister ${event}`\n });\n next(event, listener);\n },\n\n beforeEmit: (action: string, payload: any, next: Function) => {\n Logger.event({\n triggerType: TriggerType.serviceBus,\n payload,\n message: `beforeEmit ${action}`\n });\n next(action, payload);\n },\n\n afterEmit: (event: string, payload?: any) => {\n Logger.event({\n triggerType: TriggerType.serviceBus,\n payload,\n message: `afterEmit ${event}`\n });\n },\n\n beforeQueryRegister: (\n queryName: string,\n provider: IQueryProvider,\n context?: Record,\n next?: Function\n ) => {\n Logger.query({\n triggerType: TriggerType.serviceBus,\n message: `beforeQueryRegister ${queryName}`\n });\n\n if (next) {\n next(queryName, provider, context);\n }\n },\n\n beforeQuery: (queryName: string, payload: any, next: Function) => {\n Logger.query({\n triggerType: TriggerType.serviceBus,\n payload,\n message: `beforeQuery ${queryName}`\n });\n\n return next(queryName, payload);\n },\n\n afterQuery: (queryName: string, result: any) => {\n Logger.query({\n triggerType: TriggerType.serviceBus,\n payload: result,\n message: `afterQuery ${queryName}`\n });\n }\n});\n","/* eslint-disable no-restricted-syntax */\nimport { events, ServiceEvents } from './service-bus-topics/events';\nimport { getDecorators as getPubSubDecorators } from './ServiceBusDecorators';\n\nimport {\n serviceQueries,\n ServiceQueries,\n ServiceQueriesResponseType\n} from './service-bus-topics/queries';\nimport {\n serviceCommands,\n ServiceCommands,\n ServiceCommandsReturnType\n} from './service-bus-topics/commands';\nimport { root, setupServiceInfo } from '@estee/elc-universal-utils';\nimport { ServiceBus } from './ServiceBus';\nimport { ServiceBusLogHook } from './ServiceBusLogHook';\n\nsetupServiceInfo(__serviceInfo__);\n\nif (root) {\n // @ts-ignore\n root.GlobalServiceBus = new ServiceBus<\n ServiceEvents,\n ServiceQueries,\n ServiceQueriesResponseType,\n ServiceCommands,\n ServiceCommandsReturnType\n >();\n\n root.ServiceBusTopics = {\n commands: serviceCommands,\n events,\n queries: serviceQueries\n };\n}\n\n// @ts-ignore\nconst GlobalServiceBus: ServiceBus<\n ServiceEvents,\n ServiceQueries,\n ServiceQueriesResponseType,\n ServiceCommands,\n ServiceCommandsReturnType\n> = root.GlobalServiceBus;\n\nconst {\n command,\n commandProvider,\n query,\n watchQuery,\n queryProvider,\n emit,\n on\n} = getPubSubDecorators<\n ServiceEvents,\n ServiceQueries,\n ServiceQueriesResponseType,\n ServiceCommands,\n ServiceCommandsReturnType\n>(GlobalServiceBus);\n\nexport {\n GlobalServiceBus,\n command,\n commandProvider,\n query,\n watchQuery,\n queryProvider,\n emit,\n on,\n serviceQueries,\n ServiceEvents,\n ServiceQueries,\n ServiceQueriesResponseType,\n ServiceCommands,\n ServiceCommandsReturnType,\n serviceCommands,\n events,\n ServiceBusLogHook\n};\n\nconst ElcServiceBus = {\n GlobalServiceBus,\n command,\n commandProvider,\n query,\n watchQuery,\n queryProvider,\n emit,\n on,\n serviceQueries,\n serviceCommands,\n events,\n ServiceBusLogHook\n};\n\nexport { ElcServiceBus };\n\nexport { ServiceBus, IQueryProvider, LogTypes } from './ServiceBus';\nexport { getDecorators } from './ServiceBusDecorators';\n"],"sourceRoot":""}