{"version":3,"file":"9176.js","mappings":"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AAiC,iBAlWQ4c,GAAe3c,MAqBZ8hB,MAAM9hB,MAAAC,KAAAD,MAAA8b,MAAA,EAAAhc,SAAAhC,KAAA,WAAAikB,EAAA9F,IAAA,OArBTU,EAAeT,QAAfS,EAAeR,mBAAfQ,CAAe,2DC1DrB,MAAMqF,EAAuE,CAChFC,QAAS,CACL,UACA,aACA,cACA,aACA,WACA,kBACA,cACA,WACA,aACA,UACA,UACA,YAEJC,UAAW,CACP,UACA,SACA,aACA,cACA,aACA,kBACA,cACA,gBACA,OACA,eACA,WACA,aACA,cACA,UACA,OACA,UACA,YAEJC,MAAO,CACH,SACA,UACA,UACA,aACA,cACA,aACA,kBACA,cACA,gBACA,OACA,eACA,WACA,aACA,kBACA,WACA,cACA,UACA,MACA,UACA,eAEA,WACA,aACA,aAEJC,eAAgB,CACZ,UACA,UACA,aACA,cACA,aACA,kBACA,cACA,OACA,eACA,WACA,aACA,kBACA,UACA,UACA,eACA,WACA,aACA,aAEJC,kBAAmB,CACf,SACA,WACA,kBACA,cACA,QACA,WAEJC,gBAAiB,CACb,WACA,UACA,UACA,UACA,kBACA,gCACA,0BACA,qBACA,4BACA,0BACA,sBACA,sBACA,qBACA,uBACA,wBACA,oBACA,aAIKC,EAA2B,CACpC,+ECxGG,MAAMC,EAAYA,CAACC,EAAiBC,KACvC,MAAMloB,EAAO,GAAGkoB,KAEVC,EADgBC,mBAAmBH,GAChBI,MAAM,KAE/B,UAAWC,KAAKH,EAAI,CAChB,IAAII,EAAKD,EACT,KAAOC,EAAGC,WAAW,MACjBD,EAAKA,EAAGE,UAAU,GAEtB,GAAIF,EAAGC,WAAWxoB,GACd,OAAOuoB,EAAGE,UAAUzoB,EAAKJ,OAAQ2oB,EAAG3oB,OAE5C,CACA,OAAO,MAUE8oB,EAAgBT,GAClBD,EAAUC,EAAS,gBAkBjBU,EAAaA,CAACC,EAAcX,MAEjCW,UACAC,UAAWH,EAAaT,GACxBa,UAbGC,KAAKC,uDC0BT,IAAKC,EAAZ,SAAYA,GACRA,SAAA,uCACAA,EAAA,uCACAA,EAAA,qBACAA,EAAA,qCACAA,EAAA,6BACAA,E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","names":["selector","createFeatureSelector","selectId","createSelector","state","id","selectConfirmation","confirmation","selectEmail","email","selectAddress","address","selectOrder","order","selectTotalOrder","totalOrder","selectPresale","presale","selectDeliveryDate","deliveryDate","selectDeliveryDates","deliveryDates","selectIsSuborder","suborders","length","selectSuborders","selectShippingMethod","shippingMethod","name","selectShippingMethodKind","kind","selectPaymentMethodData","payment","firstPaymentData","selectPaymentMethodKind","firstMethod","selectWalletInfo","wallet","selectHideWallet","hideWallet","selectOrderItems","items","selectOrderId","selectSastreState","SastreGetLayout","layout","SastreGetSelectedProfileId","profileId","SastreGetSelectedProfile","profile","SastreGetProfiles","profiles","SastreGetProduct","product","SastreGetData","data","SastreGetRecommendedSize","recommendation","sizeResult","SastreGetRecommendedSizeAvailable","status","selectedColor","sizes","some","size","Number","backSoon","visibilityValue","SastreGetTotalSteps","steps","SastreGetStepIndex","step","SastreGetCurrentStep","SastreAskNext","askNext","InViewportExtraOptionsInitialState","minVisibleTime","INVIEWPORT_ID_ATTRIBUTE_NAME","InViewportDirective","constructor","elementRef","platformService","this","inViewportExtraOptions","inViewportThreshold","inViewport","EventEmitter","outViewPort","timerId","ngAfterViewInit","_this","_asyncToGenerator","isBrowser","element","nativeElement","options","root","rootMargin","threshold","assignElementId","intersectionObserver","IntersectionObserver","entries","forEach","entry","isIntersecting","setTimeout","emit","clearTimeout","observe","setAttribute","uuid","ngOnDestroy","unobserve","static","t","i0","i1","_angular_core__WEBPACK_IMPORTED_MODULE_0__","FsC","selectors","inputs","outputs","standalone","getGridState","getGridDefault","gridDefault","getGridPageAllIds","idsFiltered","getGridStudio","gridStudio","getPageProductIds","pageProductIds","gridDefaultFullyLoaded","getPageProductIdsLength","productsFullyLoaded","getPageGridElements","pageGridElements","getNewCollectionDefault","getGridNewCollection","gridNewCollection","default","getNewCollectionDefaultPageIdsFiltered","getNewCollectionStudio","studio","getNewCollectionStudioPageGridElements","getNewCollectionStudioGridElementsFiltered","gridElementsFiltered","getNewCollectionTitle","title","getTotalQuantityProducts","totalQuantityProducts","getGridCategory","categoryId","getGridType","getCategoryState","gridType","PickupInitialized","createAction","PickupDestroyed","LoadPickupPointsByLocation","LoadPickupPointsByLocationError","SetPickupPointsBySearchValue","SET_PICKUP_POINTS_BY_SEARCH_VALUE","props","GetCoordinatesFromSearchValueSucess","GET_COORDINATES_FROM_SEARCH_VALUE_SUCESS","GetCoordinatesFromSearchValueError","SetPickupPointsBySearchValueSuccess","SET_PICKUP_POINTS_BY_SEARCH_VALUE_SUCCESS","SetPickupPointsBySearchValueError","LoadSearchedPickupPointsSuccess","LOAD_SEARCHED_PICKUP_POINTS_SUCCESS","LoadSearchedPickupPointsError","LOAD_SEARCHED_PICKUP_POINTS_ERROR","SetSelectedPickupPoint","SET_SELECTED_PICKUP_POINT","FindSelectedPickupPointById","FIND_SELECTED_PICKUP_POINT_BY_ID","SetPickupPointsViewMode","SET_PICKUP_POINTS_VIEW_MODE","SetPickupFilter","SET_PICKUP_FILTER","SetPickupCapacityFeatureStatus","SET_PICKUP_CAPACITY_FEATURE_STATUS","SetPickupCapacityFilterValue","SET_PICKUP_CAPACITY_FILTER_VALUE","SetPickupFreeDroppintFilterCommand","SET_PICKUP_FREE_DP_FILTER_COMMAND","ResetPickupFreeDroppintFilterCommand","FindAlternativeFreeDroppointCommand","FIND_ALTERNATIVE_FREE_DROPPOINTS","selectPickupState","getPickupPointMethodState","getPickupPointsStatus","getPickupPointsViewMode","selectedView","getSearchedPickupPointsWithoutFilter","values","getStoreSearchRequestParameters","getSearchedPickupPointsAmount","searchRequestParameters","getSearchedPickupPoint","isReadyToPayment","getSelectedShippingMethod","getSelectedAddress","selectedAddress","getSelectedPickupPoint","selectedPickupPoint","getSelectedDropPoint","getPickupFilter","isReadyToPaymentPickup","filter","getPickupCapacityFeatureStatus","showPickUpCapacityFeature","getPickupCapacityFilterStatus","isPickUpCapacityFilterApplied","getPickupFreeDroppointFilter","freeDroppointFilter","LoadShippingMethods","LoadShippingMethodRequirementsSuccess","LoadShippingMethodsSuccess","LOAD_SHIPPING_METHODS_SUCCESS","LoadShippingMethodsError","LOAD_SHIPPING_METHODS_ERROR","SetSelectedShippingMethod","SET_SELECTED_SHIPPING_METHOD","SendCheckoutShipping","SendCheckoutShippingSuccess","SendCheckoutShippingError","SEND_CHECKOUT_SHIPPING_ERROR","SetFreeShippingOverPromo","SET_FREE_SHIPPING_OVER_PROMO","LoadPromotionsSuccess","LoadPromotions","LOAD_SHIPPING_PROMOTIONS_SUCCESS","LoadPromotionsError","selectShippingState","getShippingMethods","shippingState","selectedShippingMethod","getShippingStateLoaded","isShippingStateLoading","getFreeShippingOverPromoData","promotions","freeShippingOverPromoData","isCODShippingEnabled","shippingMethods","dbcode","getFreeShippingOverAmountOver","getFreePromotion","shippingOverPromoData","delivery_promotions","promo","amount_over","getFreeShippingOverPromotion","promos","map","getFreeShippingOverFSOFullPrice","exclude_sales_items","getFreeShippingOverAmountPending","amount_pending","getFreeShippingOverPromotionActive","calculation_status","global_status","getPromotionsStatus","promosStatus","GiftCardActions","GetPhysicalGiftCard","GetVirtualGiftCard","GetBothGiftCards","GetBothGiftCardsSuccess","GetGiftCardSuccess","GetGiftCardFailure","GetVirtualGiftCardData","GetVirtualGiftCardDataSuccess","GetPhysicalGiftCardData","GetGiftCardDataSuccess","AddToShopCartPhysicalGiftCard","AddToShopCartVirtualGiftCard","AddToShopCartSuccess","AddToShopCartFailure","ActivateGiftCard","ActivateGiftCardSuccess","ActivateGiftCardFailure","ShowGiftCardSearch","ShowGiftCardBalance","GetGiftCardBalanceSuccess","GetGiftCardBalanceFailure","UpdatePhysicalGiftCard","UpdateVirtualGiftCard","UpdateVirtualGiftCardSuccess","ErrorGiftCardAction","SetSkuGiftCard","SetGiftCardSaved","SetGiftCardForm","SetGiftCardType","SetGiftCardCustomize","ResetGiftCardForm","RemoveGiftCard","GiftCardSelectors","selectGiftCardState","getCard","giftCard","getForm","giftCardForm","getCustomize","customizeSelected","getType","giftCardType","getBothGiftCards","giftCards","showBalance","getGiftCardSaved","giftCardSaved","getCardPrices","giftCardPrices","getSelectedGiftCardPrice","find","price","sku","toString","getCardTotal","giftCardTotal","getCardTransactions","giftCardTransactions","addedShopCart","addedToCart","getLoadingStatus","isLoading","getSuccess","isSuccess","getError","error","LookbookPageInitialized","LOOKBOOK_PAGE_INITIALIZED","LookbookPageCreated","LookbookPageDestroyed","LookbookPageClean","LookbookSlugLoaded","LOOKBOOK_SLUG_LOADED","LoadLookbookPageSuccess","LOAD_LOOKBOOK_PAGE_SUCCESS","AddressActions","LOAD_ADDRESSES","LOAD_ADDRESSES_SUCCESS","LOAD_ADDRESSES_ERROR","SET_SELECTED_ADDRESS","SET_SELECTED_ADDRESS_BY_ID","SET_SELECTED_ADDRESS_BY_ID_ERROR","SAVE_SHIPPING_ADDRESS","SAVE_SHIPPING_ADDRESS_SUCCESS","DELETE_SHIPPING_ADDRESS","DELETE_SHIPPING_ADDRESS_SUCCESS","DELETE_SHIPPING_ADDRESS_ERROR","SAVE_BILLING_ADDRESS","SAVE_ADDRESS_SUCCESS","SAVE_PICKUP_STORE_ADDRESS","SAVE_PICKUP_STORE_ADDRESS_SUCCESS","SAVE_BILLING_ADDRESS_AND_CHECKOUT","SAVE_PICKUP_DROPPOINT_ADDRESS","SAVE_PICKUP_DROPPOINT_ADDRESS_SUCCESS","SAVE_BILLING_ADDRESS_SUCCESS","SAVE_ADDRESS_ERROR","SAVE_BOOK_ADDRESS","SAVE_BOOK_ADDRESS_SUCCESS","SAVE_BOOK_ADDRESS_ERROR","SUGGEST_ADDRESS","SUGGEST_ADDRESS_SUCCESS","SUGGEST_ADDRESS_ERROR","FORMAT_ADDRESS","FORMAT_ADDRESS_ERROR","FORMAT_ADDRESS_SUCCESS","SET_LOADING_ADDRESS","LOAD_CONFIG_ADDRESS","LOAD_CONFIG_ADDRESS_SUCCESS","LOAD_CONFIG_ADDRESS_ERROR","CHECK_CURRENT_ROUTE","LoadAddresses","LoadAddressesSuccess","LoadAddressesError","LoadConfigAddress","LoadConfigAddressSuccess","LoadConfigAddressError","SetSelectedAddress","SetSelectedAddressError","SetSelectedAddressById","SaveShippingAddress","SaveShippingAddressSuccess","SaveAddressSuccess","DeleteAddressSuccess","DeleteAddress","DeleteAddressError","SaveBillingAddress","CheckCurrentRoute","SaveBillingAddressSuccess","SavePickupDroppointAddress","SavePickupDroppointAddressSuccess","SavePickupStoreAddress","SavePickupStoreAddressSuccess","SaveAddressError","SetLoadingAddress","SaveBookAddress","SaveBookAddressError","SaveBookAddressSuccess","SuggestAddress","SuggestAddressSuccess","SuggestAddressError","FormatAddress","FormatAddressError","FormatAddressSuccess","selectAddressState","getLoadingAddressStatus","loading","getAddressStateLoaded","loaded","getAddressEntities","getAllAddresses","Object","keys","getShippingAddresses","addressType","getBillingAddress","getIsBillingAddressVatinStored","billingAddress","vatin","undefined","getShippingAddressesDelivery","countryCode","isWWCountry","getAddressById","addressId","getAddressConfig","config","getAddressTaxCode","taxCode","getIsBillingAddressMandatory","getAddressTaxRegimes","taxRegimes","isBillingAddressMandatory","getIsDocumentMandatory","isDocumentMandatory","getAddressDocumentTypes","documentTypes","getAddressConfigDocumentTypeByTypeParticular","getAddressConfigDocumentTypeByType","documentTypeByType","particular","getAddressConfigDocumentTypeByTypeCompany","company","categorySelectorConditions","getCategory","valuesNeeded","category","lookbookCategorySelectorConditions","getLookbookPageCategory","pendingGetCartSelectorConditions","getPendingGetCart","pendingItems","productPageProductConditions","getProductPageDetail","getGoogleServicesState","getGoogleServicesGtmEnabled","enabled","ConfigurationService","actions$","store","userConsentService","consilatedValuesNeededForPage","ItxProductPage","Itx404ErrorPage","Itx410ErrorPage","ItxAngularAuthenticationPage","ItxAngularAuthenticationRegisterPage","ItxAngularAuthenticationConfirmationPage","ItxAngularAuthenticationRecoveryPage","ItxAngularCmsRenderPage","ItxAngularContactPage","ItxAngularGiftCardPage","ItxAngularGiftCardActivationPage","ItxAngularGiftCardBalancePage","ItxAngularLookbookPage","ItxAngularOrderStatus","ItxAngularShopcartPage","ItxAngularStoreDetailLocatorPage","ItxAngularStoreLocatorPage","ItxAngularTransactionCancelation","ItxAngularWishlistPage","ItxCategoryPage","ItxCheckoutAuthPage","ItxCheckoutPage","ItxCheckoutPaymentPage","ItxCheckoutRepaymentPage","ItxCheckoutShippingDeliveryAddressPage","ItxCheckoutShippingDeliveryPage","ItxCheckoutShippingDeliverySummaryPage","ItxCheckoutShippingDropPointSummaryPage","ItxCheckoutShippingDropPointPage","ItxCheckoutShippingPage","ItxCheckoutShippingStorePage","ItxCheckoutShippingStoreSummaryPage","ItxCheckoutSummaryPage","ItxErrorPage","ItxHelpPage","ItxHomeBgPage","ItxHomeMenPage","ItxHomePage","ItxHomeWomenPage","ItxMassimoDuttiFeelPage","ItxMyAccountFeelPage","ItxMyAccountFeelBirthdayGiftPage","ItxMyAccountFeelStyleAdvisorPage","ItxMyAccountFeelPersonalTailorPage","ItxMyAccountFeelGiftingPage","ItxMyAccountFeelPaperlessPage","ItxMyAccountFeelPromotionsPage","ItxMyAccountFeelCollectionsPage","ItxMyAccountFeelWhatsappPage","ItxMyAccountFeelExperiencesPage","ItxMyAccountNewsletterPage","ItxMyAccountPage","ItxMyAccountReturnsPage","ItxMyAccountSponsorshipPage","ItxNewsletterPage","ItxOrderConfirmationPage","ItxWorldWidePage","ItxMyAccountAccessDataPage","ItxMyAccountDetailsPage","ItxMyAccountAddressListPage","ItxMyAccountCardsPage","ItxMyAccountMenuPage","ItxMyAccountOrdersPage","ItxAngularMyAccountPage","ItxAngularUserPage","ItxMyAccountFeelActivationPage","ItxMyAccountFeelBenefitsPage","ItxMyAccountFeelHistoryPage","ItxMyAccountFeelHowItWorksPage","awaitInfoForPage","LoadProductPageSuccess","LoadShopCartSuccess","LoadCategorySuccess","pageDeferConditions","page","condition","awaitTo","select","pipe","concatMap","info","ofType","first","of","getIsGTMLoadedWithActualInfo$","action","consentEvent$","policy","userConsentPolicies","ANALYTICS","allowed","switchMap","isEnabled","i2","i3","core","jDH","factory","ɵfac","viewItemServiceConfig","itemsBatch","delayMilisecondsUntilEvent","firstTimeViewTreshold","standardViewTreshold","nonExactThreshold","isOnce","ViewItemService","isFirstBatch","window","isFirstTime","productViewedGA4","productViewedZenit","timer","elementsViewed","Set","productsBuffer","getIsFirstBatch","resetIsFirstBatch","clear","actionWhenVisibleAsync","viewItemOrigin","idMedia","intersectionEntry","overrideConfig","viewItemProduct","addDataToProduct","realIntersectionRatio","calculateIntersectionRatioByTarget","isIntersectingByConfig","getThreshold","value","actionWhenVisibleAsyncCallback","viewProduct","inviewportElementid","isPassthrough","isReset","returnProducts","getReturnProducts","isProductViewed","has","push","add","actionWhenVisibleCustomObserver","observer","targetRect","boundingClientRect","actualRootRect","bottom","innerHeight","height","left","right","innerWidth","top","width","intersectionWidth","Math","max","min","intersectionHeight","targetArea","asyncCallbackTimeout","timeoutTime","handleZenitLogic","timeoutEnd","clearTimerOnProductNotVisible","zenitProductVisible","inviewportElementId","target","getAttribute","dispatch","ZenitListItemVisible","eventFrom","place","relatedsSectionId","handleGA4Logic","intersectionData","includes","ga4ProductVisible","ga4PassThroughCallback","Ga4ItemListVisible","getCountProductsActualInBuffer","reduce","acc","gridElemType","bundleProducts","getCountWithNewProduct","countWithNewProduct","_product","WINDOW","_angular_core__WEBPACK_IMPORTED_MODULE_3__","ZenitEventsContextConfigs","PageHit","AddToCart","Click","ImpressionsHit","PurchaseConfirmed","SearchAssistant","modalsIncluded","getCookie","cookies","cname","ca","decodeURIComponent","split","c","_c","startsWith","substring","getSessionId","getPayload","context","sessionId","timestamp","Date","now","ZenitClickAction","close","home","share","ZenitEventName","ZenitPageType","BUY_AGAIN","CATEGORY_VIEW","CHAT","CHECKOUT_ADD_PERSONAL_DETAILS","CHECKOUT_DROP_POINT_DETAIL","CHECKOUT_DROP_POINT_LIST","CHECKOUT_DROP_POINT_MAP","CHECKOUT_EXPRESS_STORE_DETAIL","CHECKOUT_EXPRESS_STORE_LIST","CHECKOUT_HOME_ADDRESS_LIST","CHECKOUT_MODIFY_PERSONAL_DETAILS","CHECKOUT_ORDER_REVIEW","CHECKOUT_PAYMENT_METHOD","CHECKOUT_REPAYMENT","CHECKOUT_SHIPPING_METHOD","CHECKOUT_STORE_COLLECTION_POINT_MAP","CHECKOUT_STORE_DETAIL","CHECKOUT_STORE_LIST","CHECKOUT_TYPE_DELIVERY_METHOD","COMING_SOON_CONFIRMATION","CONTACT","E_GIFTCARD","E_GIFTCARD_ACTIVATION","E_GIFTCARD_BALANCE","GIFT_OPTIONS","GIFTCARD","HELP_CENTER","HOME","HOME_LOYALTY","LOOKBOOK","MIX_MATCH_DETAIL","MIX_MATCH_LIST","MULTI_WISHLIST","MY_ACCOUNT_ACCESS_DETAILS","MY_ACCOUNT_ADDRESSES","MY_ACCOUNT_APPOINTMENTS","MY_ACCOUNT_LOYALTY_BENEFITS","MY_ACCOUNT_LOYALTY_HISTORY","MY_ACCOUNT_LOYALTY_HOW_IT_WORKS","MY_ACCOUNT_MENU","MY_ACCOUNT_NEWSLETTER","MY_ACCOUNT_ORDER_RETURNS_EXCHANGES_ITEMS","MY_ACCOUNT_ORDERS_LIST_IN_STORE","MY_ACCOUNT_ORDERS_LIST_ONLINE","MY_ACCOUNT_PERSONAL_DETAILS","MY_ACCOUNT_RETURNS_LIST","MY_ACCOUNT_WALLET","NEWSLETTER_SUBSCRIBE_VIEW","NEWSLETTER_UNSUBSCRIBE_VIEW","ORDER_TRACK","PAGE_NOT_FOUND","PASSWORD_RECOVERY","PASSWORD_RECOVERY_RESET","PRODUCT_BUNDLE_DETAILS","PRODUCT_DETAILS","PRODUCT_LIST","PRODUCT_SEARCH_RESULTS","PRODUCT_SEARCH_START","PRODUCT_SET_DETAILS","PURCHASE_ORDER_END","RETURNABLE_PRODUCTS_SELECTOR","SAVE_FOR_LATER","SEARCH_REQUEST","SHOP_LOCATOR","SHOPPING_CART","SHOPPING_CART_EMPTY","STORE_DETAIL","SURPRISE_ME","UNKNOWN","USER_LOGON","USER_LOYALTY_CHECK","USER_LOYALTY_TICKET","USER_REGISTRATION","USER_REGISTRATION_CONFIRMATION","VIRTUAL_TRY_ON","WORLDWIDE","ZenitList","alternativeColours","alternativeResults","bundle","buyAgain","buyLater","crossCustomPdp","crossCustomToast","crossRecommendation","crossRecommendationPdp","crossSellingCart","crossSellingPdp","crossSellingToast","crossSimilarBackSoon","crossSimilarComingSoon","crossSimilarCustomPdp","crossSimilarGrid","crossSimilarPdp","crossSimilarSearchResults","crossViewedRecently","edited","grid","matchWith","mayAlsoLike","noList","noListUndefined","noResultsFallback","saveForLater","searchAlternativeColours","searchAlternativeResults","searchCrossCustom","searchNoResultsFallback","searchResults","searchSimilarQuery","searchSuggestedProduct","shoppingCart","sizeList","sizeRecommender","stradishoppers","suggestedProduct","suggestedSearchResults","wishlist","Section","MEN","WOMEN","KID","ZenitZoomLevel","ZOOM1","ZOOM2","ZOOM3","Os","android","ios","ipados","linux","mac","windows","Type","mobile","desktop","tablet","restrictedParamsConfig","clientId","requiredCookie","marketsNotAllowed","gclid","token","userId","UAITXID","BasicEventParserService","oneTrustService","document","basicEventConfig","device","language","os","osVersion","type","geo","country","region","identity","consentedDate","consentCategories","projectKey","tenant","utm","source","medium","campaign","term","content","technical","navigation","url","appName","appVersion","platform","uaString","referrer","getBasicEvent","resolution$$","selectSignal","getResolution","user$$","getUserSelector","countryCode$$","getCountryCode","referredSent$$","getReferredSent","getBasicEventObject","getCookieGroupMap","getGeoLocationData","cookie","getBasicEventFilteredParams","cookieGroupMap","currentStore","_basicEventConfig","params","getParamsList","filterRestrictedParams","param","paramConfig","DataConsentHelpers","geoLocationData","cookiesString","user","storeCountryCode","resolution","referredSent","filteredParams","basicEvent","JSON","parse","stringify","inditex","iFrontVersion","BasicEventHelpers","getUtmParam","inputUrl","URL","_param","exec","searchParams","get","location","href","PayloadHelpers","key","indexOf","getConsentedDate","cookieValue","cookiePropertyValue","URLSearchParams","match","dayOfWeek","month","day","year","time","timezone","userType","replace","navigator","userAgent","version","SHA","update","digest","Resolutions","MOBILE","TABLET","getReferrer","_document","host","DOCUMENT","RelatedPlaces","EventFrom","cartYoda","comingSoon","completeLook","completeLookYoda","frecuentlyBoughtTogether","othersYouMayLike","recentlyViewed","recommended_for_you","relateds","relatedsBuyed","similar","similaresYoda","topSales","HELP_PAGES_REGEX","getItemListIndex","item","itemList","itemId","foundItem","_item","productId","getPageType","eventData","searchPageType","getPageTypeForSearch","searchRequestQuery","search","totalHits","getPageTypeByPage","ProductViewPlaceValue","CS_BS","currentUrl","test","getCmsPagePageType","cartItems","isSelectedAddress","selectedViewPickup","productPageProduct","getSection","section","commonWindow","lastSection","localStorage","getItem","getPartNumber","selectedSize","partnumber","reference","getSkus","getOptimizelyExperiments","optimizely","initialized","campaigns","getCampaignStates","isActive","stateExperiments","getExperimentStates","experimentId","val","formOptimizelyExperimentObject","experiment","optimizelyExperimentCampaignId","getOptimizelyExperimentCampaignId","campaing","experimentDetails","experimentAccountId","parseInt","accountId","experimentCampaignId","experimentProjectId","projectId","experimentKey","experimentName","provider","variationKey","variation","getItemMediaExtraInfoProperty","property","medias","xmedia","xmediaItem","xmediaItems","foundPropertyValue","media","extraInfo","getGridPageProductsFiltered","getProductsId","productsId","getIndexCalculationValues","getShopCartCoreItems","getProductsList","getRelatedProductsPlaces","SearchSelectors","getQueryResults","WishlistPublicSelectors","getWishlistItems","filteredProductsIds","productsArray","relatedProductsPlaces","queryResults","wishListItems","ZenitEventParserService","basicEventParserService","getItemSelector","eventName","generateZenitSelectors","getCartIdSelector","categoryUrl","getCategoryLocationPath","getCategoryId","getLanguageLocale","getSearchTerm","searchType","getSearchType","sidebarComponent","getSidebarLoadedComponent","sidebarData","getSidebarLoadedComponentData","routerPublicQueries","getUrlFromRouter","computed","getPage","recommenderSize","getLastSectionSelector","getStoreId","getCurrencyInfo","getLanguageCode","getSearchOffset","getSelectedFilters","zoomLevel","getValueForContextProperty","propertyName","targetItem","_eventData","ZenitContextHelpers","cartId","categoryUrlSplit","catentryId","getList","originData","eventFromParsed","sidebarPlace","eventFromParser","SEARCH","getListForSearch","getListForRelateds","ADD_CART","CART","OUT_OF_STOCK","listParser","productdetail","PRODUCT_GRID","crossSelling","getListForPage","getProductItemIndex","index","getQueryResultsIndex","position","parrilla","AnalyticsUtils","shopcart","wishList","miniWishList","fichaBundle","getRelatedProductIndex","carousels","filteredItemsIds","findIndex","prodUid","product_id","moca","uid","slice","itemStatus","referenceSplit","mocacoStyle","getPersonalization","relatedsData","getRelatedProduct","objective","modelName","strategy","relatedType","modelVersion","getQuantity","eventQuantity","quantity","getRecommender","eventAction","recommendedSize","currency","currencyCode","amount","unitPrice","articleBrandCode","brandId","sectionNameEN","units","viewOrigin","storeId","getIsRecommended","getSearchRequestParams","responseTime","resultsNum","isNaN","SearchRequestMethodName","query","LIMIT_QUERY_SEARCH","responseCode","getSearchRequestOffset","searchRequestOffset","searchPass","_filters","filters","curr","_key","trim","toUpperCase","numElements","getSearchRequestFilters","searchRequestFilters","getTemplateType","gridElements","GridTypes","RELATEDS","ZARA_STUDIO","gridElement","ccIds","template","GRID_4","GRID_16","generateContextObject","currentItem","contextObject","getContextObject","getEventContext","selectorsObj","console","getEventObject","basicData","eventContext","payload","PayloadHelper","getShopCartCoreId","ZenitPageHitEventAction","PAGE_HIT_EVENT","ZenitAddToCartEvent","ADD_TO_CART_EVENT","ZenitClickEvent","CLICK_EVENT","LIST_ITEM_VISIBLE","ImpressionsHitEventAction","IMPRESSIONS_HIT_EVENT","ZenitClearViewedProducts","ZenitEventSuccess","ZENIT_EVENT_SUCCESS","ZenitEventError","ZENIT_EVENT_ERROR","MarkReferrerSent","AnalyticsCartEffects","storageService","translateService","EventViewCartGA4$","createEffect","Ga4SendDatalayer","dataLayer","event","GA4EventType","page_view","page_title","concatLatestFrom","handleViewCartEvent","getShopCartCoreIsLoaded","isLoaded","take","_","shopcartItems","Ga4Event","view_cart","EventAddItemWishlistGA4$","WishlistPublicActions","AddItemsWishlistAction","GA4AnalyticsPublicActions","add_to_wishlist","EventAddItemsShopcartGA4$","AddProductsShopcartCoreSuccess","productos_relacionados","parentType","products","mapProductsWithRelatedType","add_to_cart","imBundleReference","bundleReference","EventDeleteItemsShopcartGA4$","DeleteItemsShopcart","remove_from_cart","imActionType","GA4AnalyticsPublicConstants","GA4ImActionType","eliminar","EventEditRemoveItemsShopcartGA4$","AdjustItemSizeShopcart","modificar_producto_cesta_ok","EventEditAddItemsShopcartGA4$","addedProduct","colors","color","colorId","_size","EventQuantityAddRemoveItemsShopcartGA4$","AdjustItemQuantityShopcart","abs","EventAddToCartGiftcardGA4$","giftCardData","giftCardPrice","giftcard","anadir_gift_card_cesta","EventBeginCheckoutGA4$","GoToInternalPage","PublicNavigationConstants","checkout","checkoutAuth","getValue","isBuyNow","buyNow","buttonText","begin_checkout","directo","imLinkText","EventBeginCheckoutFastSintGA4$","fastSintStores","getCmsConfigValue","hour","$0","fastSint","EventBeginCheckoutLoginGA4$","GoToCheckout","CloseGiftTicketModal$","OpenModalFromComponent","componentName","EventErrorCustomErrorCesta$","LoadShopCartCoreSuccess","currentPage","errors","errorKey","error_custom","errorData","errorType","imEventName","imLocation","Ga4EventLocation","pagina","imType","getPendingGetCartCore","SetItemsInCartSuccess","i4","AnalyticsShopcartModule","$C","G2t","provideEffects","analyticsReducerDefinition","createReducer","analyticsInitialState","on","RelatedProductClickAnalytics","searchOrigin","origin","ClickProductoBuscadorAnalytics","ProductClickAnalytics","SetPage","ga4","pageviewSent","Ga4SetPageviewSent","isSent","analitycsReducer","ZenitEventApiService","http","configService","postEvent$","endpoint","getZenitEndpoint","post","records","configRequired","getConfigUrl","AddToCartEventEffects","zenitEventParserService","zenitEventApiService","EventAddItemsShopcartZenit$","addToCartEvent","EventEditAddItemsShopcartZenit$","EventQuantityAddItemsShopcartZenit$","EventAddToCartGiftcardZenit$","addToCartEvent$","enabledZenit","catchError","clickAddQuantityShopcart$","inject","Actions","clickEvent","functional","getEventFromOrigin","MediasPublicConstants","PublicMediaLocationType","category_page","related_product","ZOOM_2","ZOOM_3","ADD_TO_CART_CLICK_IDS","AnalyticsClickSourceID","PDPAddToCartMainCTA","productViewShowQuickly","wishlistItemAddToCart","clickAddToCart$","ObservedElementClick","observeType","observedData","clickId","productViewConfig","clickAddToCartFichaBundle$","productAddToCartSelectorSelect","clickSelectItemActions$","SELECT_ITEM_CLICK_IDS","shopcartItemImage","shopcartItemName","clickSelectItemElementObserver$","clickSourceID","clickSelectSize$","SeleccionarTallaAnalytics","clickSelectColor$","Store","SetColorOnSelectedProduct","clickAddToWishlist$","wishlistItems","clickRemoveFromCart$","clickRemoveFromWishlist$","DeleteItemWishlistAction","wlItem","ClickEventEffects","clickEvent$","ImpressionsHitEventEffects","viewItemService","router","EVENT_ITEM_BATCH","EventListItemVisible$","EventListItemVisibleTimerZenit$","EventListItemVisibleExitZenit$","race","events","NavigationStart","HeaderEventAnalytics","getIsCategory","_isCategory","ClearViewedProducts$","tap","EventImpressionsHitZenit$","impressionsHitEvent","i5","i6","PageHitEventEffects","configurationService","setPage$","setColorOnSelectedProduct$","pageHitEventSetPickupDisplayModeAnalytics$","SetPickupDisplayModeAnalytics","pageHitEventOpenModalFromComponent$","modalData","pageHitEventSearchAdapterResults$","SearchActions","SaveQuerySearchAction","_searchType","searchTerm","pageHitEventSetShopCartSuccess$","SetShopCartSuccess","itemsInCart","markReferrerSent$","pageHitEvent$","pageHit","PurchaseConfirmedEventEffects","PurchaseConfirmedEvent$","coreStorageService","CoreStorageService","CorePlatformService","isPurchaseEventPending","orderId","ZENIT_PURCHASE_EVENT_PENDING","purchaseConfirmed","ClearPurchaseEventPending$","removeValue","clearPurchaseEventPending","SearchAssistantEventEffects","SearchAssistantSuccessEvent$","GetProductsArraySearchAction","totalResults","searchpass","searchAssistant","SearchAssistantErrorEvent$","GetProductsArraySearchErrorAction","ZenitModule","AnalyticsModule","provideState","reducer","imports","CommonModule","EventShippingInfoGa4$","GoToSection","getActivePath","activePath","add_shipping_info","EventPaymentInfoGa4$","AppEventsAnalyticsActions","add_payment_info","AnalyticsCheckoutEffects","EventErrorServerFormPromoCode$","LoadPromoCodeError","formName","MarkPurchaseEventPendig$","Checkout","markPurchaseEventPendig","setValue","GA4_PURCHASE_EVENT_PENDING_STORAGE_KEY","AnalyticsCheckoutEffectsUtils","ProcessOrderClickEvent$","SetNextStatus","process_order","pulsar_autorizar_pago","SelectContentSeleccionarEnvio$","select_content","contentType","Ga4ContentType","shipping","seleccionar_envio","SetLoadedStatus","SetLoadingStatus","SetPendingStatus","SetVisibleButton","SetInvisibleButton","SetActiveButton","SetInactiveButton","InitButton","SetSaveButton","SetContinueButton","SetActivePath","SET_ACTIVE_STEP","selectNavigationState","getNavigationState","getNavigationKind","getVisitedPaths","visitedPaths","isNavigationNextStep","isNavigationLoading","isNavigationLoaded","isNavigationPending","isNavigationActive","active","isNavigationVisble","visible","ActionBadge","NAVIGATION","ADDCART","SHOWQUICKLY","Position","none","ImageType","main","secondary","colorcut","silhouette","alternative","video","quadruple","unknown","double","InitialConfigDefault","imageType","clickable","ratio","alt","widthVW","showWaterMark","discardDoubleVideo","discardFallback","showDetails","showDescription","showTags","showName","showPrice","showColors","textPosition","showMadeInExclusive","showPromotions","showContentProjected","showQuickly","showQuicklyMobile","showDiscount","baseProduct","hidePriceText","multipleMedias","HiddenFieldType","ALL","DESCRIPTION","PRICE","BUNDLE_DETAIL","ERROR","PRODUCT_CUSTOM_CATEGORY","PRODUCT_DETAIL","PRODUCT_LAST_SIZES","PRODUCT_NEW_COLLECTION","VIEWER_3D","WISHLIST","SMART_ASSISTANT","AttributeType","specialCondition","noCompatibleWithGiftBox","safetyWarning","SetEguiData","SET_EGUI_DATA","LoadPurchaseAttempt","LOAD_PURCHASE_ATTEMPT","LoadPurchaseAttemptSuccess","LOAD_PURCHASE_ATTEMPT_SUCCESS","LoadPurchaseAttemptError","LOAD_PURCHASE_ATTEMPT_ERROR","LoadOrderPreview","LoadOrderPreviewSuccess","LOAD_ORDER_PREVIEW_SUCCESS","LoadOrderPreviewError","LOAD_ORDER_PREVIEW_ERROR","LoadAsyncCheckout","LoadAsyncCheckoutSuccess","LOAD_ASYNC_CHECKOUT_SUCCESS","LoadAsyncCheckoutError","LOAD_ASYNC_CHECKOUT_ERROR","CHECKOUT","CheckoutSuccess","LoadPromoCode","CheckoutError","CHECKOUT_ERROR","LOAD_PROMO_CODE","LoadPromoCodeSuccess","LOAD_PROMO_CODE_SUCCESS","LOAD_PROMO_CODE_ERROR","DeletePromoCode","DELETE_PROMO_CODE","DeletePromoCodeSuccess","DELETE_PROMO_CODE_SUCCESS","DeletePromoCodeError","DELETE_PROMO_CODE_ERROR","SetValidationCheckValue","SET_VALIDATION_CHECK_VALUE","SetCardinalDdc","SET_CARDINAL_DDC","SetBillingIsNeeded","SET_BILLING_IS_NEEDED","ResetCheckoutErrors","SetSyncCheckoutLaunched","SetPurchaseAttemptShippingCosts","SET_PURCHASE_ATTEMPT_SHIPPING_COSTS","exports","byteLength","b64","lens","getLens","placeHoldersLen","toByteArray","tmp","i","validLen","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","join","Uint8Array","Array","code","Error","tripletToBase64","num","start","end","output","base64","require","ieee754","customInspectSymbol","Symbol","for","Buffer","SlowBuffer","alloc","K_MAX_LENGTH","createBuffer","RangeError","buf","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","fromString","string","encoding","isEncoding","actual","write","ArrayBuffer","isView","fromArrayView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","SharedArrayBuffer","valueOf","b","fromObject","obj","isBuffer","checked","numberIsNaN","isArray","toPrimitive","assertSize","array","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","remaining","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","str","byteArray","base64Write","ucs2Write","utf16leToBytes","hi","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","TYPED_ARRAY_SUPPORT","typedArraySupport","proto","foo","defineProperty","enumerable","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","INSPECT_MAX_BYTES","thisStart","thisEnd","thisCopy","targetCopy","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","src","dst","alphabet","table","i16","isLE","mLen","nBytes","e","eLen","eMax","eBias","nBits","d","s","NaN","rt","floor","log","LN2","module","create","ctor","superCtor","super_","writable","configurable","TempCtor","sources","argsOrArgArray","args","innerFrom","Observable","raceInit","subscriber","subscriptions","closed","subscribe","createOperatorSubscriber","unsubscribe","next","copyProps","SafeBuffer","Hash","blockSize","finalSize","_block","_finalSize","_blockSize","_len","enc","block","accum","assigned","remainder","_update","rem","bits","lowBits","hash","_hash","algorithm","Algorithm","sha","sha1","sha224","sha256","sha384","sha512","inherits","K","W","Sha","init","_w","rotl5","rotl30","ft","_a","_b","_d","_e","M","H","Sha1","rotl1","Sha256","Sha224","_f","_g","_h","ch","z","maj","sigma0","sigma1","gamma0","gamma1","f","g","h","T1","T2","SHA512","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","l","Sha512","Ch","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","ah","bh","dh","eh","fh","gh","hh","al","bl","cl","dl","el","fl","gl","hl","xh","gamma0l","gamma1l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./code/apps/frontend/src/app/features/orders/order-confirmation/infrastructure/state/order-confirmation.selectors.ts","./code/apps/frontend/src/app/features/products/sastre/recommender/domain/store/sastre-recommender.selectors.ts","./code/apps/frontend/src/app/layout/ui/directives/inviewport.directive.ts","./code/apps/frontend/src/app/pages/category/modules/category-grid/store/category-grid.selectors.ts","./code/apps/frontend/src/app/pages/category/store/grid-type/grid-type.selectors.ts","./code/apps/frontend/src/app/pages/checkout/shipping/store/pickup/pickup.actions.ts","./code/apps/frontend/src/app/pages/checkout/shipping/store/pickup/pickup.selectors.ts","./code/apps/frontend/src/app/pages/checkout/shipping/store/shipping/shipping.actions.ts","./code/apps/frontend/src/app/pages/checkout/shipping/store/shipping/shipping.selectors.ts","./code/apps/frontend/src/app/pages/gift-card/store/gift-card.actions.ts","./code/apps/frontend/src/app/pages/gift-card/store/gift-card.selector.ts","./code/apps/frontend/src/app/pages/lookbook/store/lookbook.actions.ts","./code/apps/frontend/src/app/shared/address/store/address/address.actions.ts","./code/apps/frontend/src/app/shared/address/store/address/address.selectors.ts","./code/apps/frontend/src/app/shared/analytics/COMMON/constants/configuration.constant.ts","./code/apps/frontend/src/app/shared/analytics/GA4/configs/ga4-configuration-events.constant.ts","./code/apps/frontend/src/app/shared/google-services/store/google-services.selectors.ts","./code/apps/frontend/src/app/shared/analytics/COMMON/services/configuration.service.ts","./code/apps/frontend/src/app/shared/analytics/COMMON/services/product-view/view-item.service.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/configs/event.configs.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/helpers/payload.helper.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/models/events/click.model.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/models/zenit-general.model.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/models/events/basic-event.model.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/helpers/basic-event.helper.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/helpers/data-consent.helper.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/services/parser/basic-event/basic-event-parser.service.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/helpers/context.helper.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/store/selectors/custom.selectors.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/services/parser/zenit-event-parser.service.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/store/actions/zenit.actions.ts","./code/apps/frontend/src/app/shared/analytics/store/cart/analytics-cart.effects.ts","./code/apps/frontend/src/app/shared/analytics/analytics-shopcart.module.ts","./code/apps/frontend/src/app/shared/analytics/store/analytics.reducer.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/services/api/zenit-event-api.service.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/store/effects/add-to-cart-event/add-to-cart-event.effects.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/store/effects/click-event/click-event.effects.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/store/effects/impressions-hit-event/impressions-hit-event.effects.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/store/effects/page-hit-event/page-hit-event.effects.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/store/effects/purchase-confirmed/purchase-confirmed-event.effects.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/store/effects/search-assistant-event/search-assistant-event.effects.ts","./code/apps/frontend/src/app/shared/analytics/ZENIT/zenit.module.ts","./code/apps/frontend/src/app/shared/analytics/analytics.module.ts","./code/apps/frontend/src/app/shared/analytics/store/analytics.state.ts","./code/apps/frontend/src/app/shared/analytics/store/checkout/analytics-checkout.effects.ts","./code/apps/frontend/src/app/shared/navigation-button/store/navigation-button.actions.ts","./code/apps/frontend/src/app/shared/navigation-button/store/navigation-button.selectors.ts","./code/apps/frontend/src/app/shared/product/components/product-view/models/product-view-config.model.ts","./code/apps/frontend/src/app/shared/product/components/product-view/models/product-view-template.model.ts","./code/apps/frontend/src/app/shared/product/models/product-attributes.model.ts","./code/apps/frontend/src/app/shared/purchase/store/purchase.actions.ts","./node_modules/base64-js/index.js","./node_modules/buffer/index.js","./node_modules/ieee754/index.js","./node_modules/inherits/inherits_browser.js","./node_modules/rxjs/dist/esm/internal/util/argsOrArgArray.js","./node_modules/rxjs/dist/esm/internal/observable/race.js","./node_modules/safe-buffer/index.js","./node_modules/sha.js/hash.js","./node_modules/sha.js/index.js","./node_modules/sha.js/sha.js","./node_modules/sha.js/sha1.js","./node_modules/sha.js/sha224.js","./node_modules/sha.js/sha256.js","./node_modules/sha.js/sha384.js","./node_modules/sha.js/sha512.js"],"sourcesContent":["import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { OrderConfirmationState } from './order-confirmation.state';\n\nexport const selector = createFeatureSelector('orderConfirmation');\nexport const selectId = createSelector(selector, (state) => state?.id);\nexport const selectConfirmation = createSelector(selector, (state) => state?.confirmation);\nexport const selectEmail = createSelector(selector, (state) => state?.email);\nexport const selectAddress = createSelector(selector, (state) => state?.address);\nexport const selectOrder = createSelector(selector, (state) => state?.order);\nexport const selectTotalOrder = createSelector(selector, (state) => state?.order?.totalOrder);\nexport const selectPresale = createSelector(selector, (state) => state?.presale);\nexport const selectDeliveryDate = createSelector(selector, (state) => state?.deliveryDate);\nexport const selectDeliveryDates = createSelector(selector, (state) => state?.deliveryDates);\nexport const selectIsSuborder = createSelector(selector, (state) => state?.confirmation?.suborders?.length > 1);\nexport const selectSuborders = createSelector(selector, (state) => state?.confirmation?.suborders);\nexport const selectShippingMethod = createSelector(selector, (state) => state?.confirmation?.shippingMethod?.name);\nexport const selectShippingMethodKind = createSelector(selector, (state) => state?.confirmation?.shippingMethod?.kind);\nexport const selectPaymentMethodData = createSelector(selector, (state) => state?.confirmation?.payment?.firstPaymentData);\nexport const selectPaymentMethodKind = createSelector(selector, (state) => state?.confirmation?.payment?.firstMethod?.kind);\nexport const selectWalletInfo = createSelector(selector, (state) => state?.wallet);\nexport const selectHideWallet = createSelector(selector, (state) => state?.hideWallet);\nexport const selectOrderItems = createSelector(selector, (state) => state?.confirmation?.items);\nexport const selectOrderId = createSelector(selector, (state) => state?.confirmation?.id);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { SastreRecommenderState } from './sastre-recommender.state';\n\nexport const selectSastreState = createFeatureSelector('sastre');\n\nexport const SastreGetLayout = () => createSelector(selectSastreState, ({ layout }) => layout);\nexport const SastreGetSelectedProfileId = () => createSelector(selectSastreState, ({ profileId }) => profileId);\nexport const SastreGetSelectedProfile = () => createSelector(selectSastreState, ({ profile }) => profile);\nexport const SastreGetProfiles = () => createSelector(selectSastreState, ({ profiles }) => profiles);\nexport const SastreGetProduct = () => createSelector(selectSastreState, ({ product }) => product);\nexport const SastreGetData = () => createSelector(selectSastreState, ({ data }) => data);\nexport const SastreGetRecommendedSize = () => createSelector(\n selectSastreState,\n // No cambiar a ({ recommendation }), puede no estar definido al consultar el valor y provocar errores\n (state) => state?.recommendation?.sizeResult || null\n);\nexport const SastreGetRecommendedSizeAvailable = () => createSelector(\n selectSastreState,\n ({ product, recommendation }) => product.status.selectedColor.sizes\n .some(size => !Number(size.backSoon) && size.visibilityValue === 'SHOW' && size.name === recommendation?.sizeResult)\n);\nexport const SastreGetTotalSteps = () => createSelector(selectSastreState, ({ data }) => data?.steps?.length || 0);\nexport const SastreGetStepIndex = () => createSelector(selectSastreState, ({ step }) => step || 0);\nexport const SastreGetCurrentStep = () => createSelector(selectSastreState, ({ step, data }) => data?.steps?.[step]);\nexport const SastreAskNext = () => createSelector(selectSastreState, ({ askNext }) => askNext);\n","import { AfterViewInit, Directive, ElementRef, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\n\nimport { CorePlatformService } from '@core/infrastructure/platform/platform.service';\n\ninterface InViewportExtraOptions {\n minVisibleTime?: number;\n}\n\nconst InViewportExtraOptionsInitialState = {\n minVisibleTime: 0,\n};\n\nexport const INVIEWPORT_ID_ATTRIBUTE_NAME = 'inviewport-element-id';\n\n@Directive({\n selector: '[inViewport]',\n standalone: true,\n})\nexport class InViewportDirective implements AfterViewInit, OnDestroy {\n @Input() public inViewportExtraOptions: InViewportExtraOptions = InViewportExtraOptionsInitialState;\n\n @Input() public readonly inViewportThreshold: number[] = [0];\n\n @Output() public readonly inViewport = new EventEmitter();\n\n @Output() public readonly outViewPort = new EventEmitter();\n\n private intersectionObserver: IntersectionObserver;\n\n private timerId = null;\n\n constructor(\n private readonly elementRef: ElementRef,\n private readonly platformService: CorePlatformService,\n ) { }\n\n public async ngAfterViewInit() {\n if (!this.platformService.isBrowser()) {\n return;\n }\n\n const element = await this.elementRef.nativeElement;\n const options = {\n root: null,\n rootMargin: '100px',\n threshold: this.inViewportThreshold,\n };\n this.assignElementId(element);\n\n this.intersectionObserver = new IntersectionObserver((entries) => {\n // biome-ignore lint/complexity/noForEach: \n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this.timerId = setTimeout(() => {\n this.inViewport.emit(entry);\n }, this.inViewportExtraOptions.minVisibleTime);\n } else {\n clearTimeout(this.timerId);\n this.outViewPort.emit(entry);\n }\n });\n }, options);\n\n this.intersectionObserver.observe(element);\n }\n\n public assignElementId(element: Element) {\n element.setAttribute(INVIEWPORT_ID_ATTRIBUTE_NAME, uuid());\n }\n\n public ngOnDestroy() {\n if (this.intersectionObserver) {\n this.intersectionObserver.unobserve(this.elementRef.nativeElement);\n clearTimeout(this.timerId);\n }\n }\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { CategoryGrid } from '../models/grid.models';\n\nconst getGridState = createFeatureSelector('category-grid');\n\nexport const getGridDefault = createSelector(getGridState, (state: CategoryGrid) => state?.gridDefault);\nexport const getGridPageAllIds = createSelector(getGridState, (state: CategoryGrid) => state?.gridDefault?.idsFiltered);\nexport const getGridStudio = createSelector(getGridState, (state: CategoryGrid) => state?.gridStudio);\nexport const getPageProductIds = createSelector(getGridState, (state: CategoryGrid) => state?.gridDefault?.pageProductIds);\nexport const getPageProductIdsLength = createSelector(getGridState, (state: CategoryGrid) =>\n state?.gridDefault?.pageProductIds?.length);\n\nexport const gridDefaultFullyLoaded = createSelector(getGridState, (state: CategoryGrid) =>\n state?.gridDefault?.productsFullyLoaded);\n\nexport const getPageGridElements = createSelector(getGridState, (state: CategoryGrid) =>\n state?.gridStudio?.pageGridElements);\n\n// #region GRID NEW COLLECTION\nexport const getGridNewCollection = createSelector(getGridState, (state: CategoryGrid) => state?.gridNewCollection);\n\nexport const getNewCollectionDefault = createSelector(getGridState, (state: CategoryGrid) =>\n state?.gridNewCollection?.default);\n\nexport const getNewCollectionDefaultPageIdsFiltered = createSelector(getGridState, (state: CategoryGrid) =>\n state?.gridNewCollection?.default.idsFiltered);\n\nexport const getNewCollectionStudio = createSelector(getGridState, (state: CategoryGrid) =>\n state?.gridNewCollection?.studio);\n\nexport const getNewCollectionStudioPageGridElements = createSelector(getGridState, (state: CategoryGrid) =>\n state?.gridNewCollection?.studio.pageGridElements);\n\nexport const getNewCollectionStudioGridElementsFiltered = createSelector(getGridState, (state: CategoryGrid) =>\n state?.gridNewCollection?.studio.gridElementsFiltered);\n\nexport const getNewCollectionTitle = createSelector(getGridState, (state: CategoryGrid) =>\n state?.gridNewCollection?.title);\n// #endregion\n\n// PUBLIC API\nexport const getTotalQuantityProducts = createSelector(getGridState, (state: CategoryGrid) => state?.totalQuantityProducts);\n\nexport const getGridCategory = createSelector(getGridState, (state: CategoryGrid) => state?.categoryId);\n","import { createSelector } from '@ngrx/store';\n\nimport { getCategoryState } from '../category-page.selectors';\nimport { CategoryState } from '../category-page.state';\n\nexport const getGridType = createSelector(getCategoryState, (state: CategoryState) => state?.gridType);\n","import { createAction, props } from '@ngrx/store';\n\nimport { Geolocation } from '@api/geolocation/models/geolocation.model';\nimport { DroppointListsDetail, DroppointListsRequestConfiguration, PickupFilter, PickupPointInfo } from '@api/store-locator/droppoint-lists/models/droppoint-lists.models';\nimport { PhysicalStoreDetail, PhysicalStoreRequestConfiguration } from '@api/store-locator/physical-store/models/physical-store.models';\n\nexport const PickupActions = {\n PICKUP_INITIALIZED: '[pickup] PICKUP_INITIALIZED',\n PICKUP_DESTROYED: '[pickup] PICKUP DESTROYED',\n\n LOAD_PICKUP_POINTS_BY_LOCATION: '[pickup] LOAD_PICKUP_POINTS_BY_LOCATION',\n\n LOAD_PICKUP_POINTS_BY_LOCATION_ERROR: '[pickup] LOAD_PICKUP_POINTS_BY_LOCATION_ERROR',\n\n SET_PICKUP_POINTS_BY_SEARCH_VALUE: '[pickup] SET_PICKUP_POINTS_BY_SEARCH_VALUE',\n GET_COORDINATES_FROM_SEARCH_VALUE_SUCESS: '[pickup] GET_COORDINATES_FROM_SEARCH_VALUE_SUCESS',\n GET_COORDINATES_FROM_SEARCH_VALUE_ERROR: '[pickup] GET_COORDINATES_FROM_SEARCH_VALUE_ERROR',\n\n SET_PICKUP_POINTS_BY_SEARCH_VALUE_SUCCESS: '[pickup] SET_PICKUP_POINTS_BY_SEARCH_VALUE_SUCCESS',\n SET_PICKUP_POINTS_BY_SEARCH_VALUE_ERROR: '[pickup] SET_PICKUP_POINTS_BY_SEARCH_VALUE_ERROR',\n // Estas acciones son necesarias porque actuan en conjunto con las tres de SET\n LOAD_SEARCHED_PICKUP_POINTS_SUCCESS: '[pickup] SEARCH_PICKUP_POINTS_SUCCESS',\n LOAD_SEARCHED_PICKUP_POINTS_ERROR: '[pickup] SEARCH_PICKUP_POINTS_ERROR',\n\n SET_PICKUP_POINTS_VIEW_MODE: '[pickup] SET_PICKUP_POINTS_VIEW_MODE',\n SET_SELECTED_PICKUP_POINT: '[pickup] SET_SELECTED_PICKUP_POINT',\n FIND_SELECTED_PICKUP_POINT_BY_ID: '[pickup] FIND_SELECTED_PICKUP_POINT_BY_ID',\n SET_PICKUP_FILTER: '[pickup] SET_PICKUP_FILTER',\n\n SET_PICKUP_CAPACITY_FEATURE_STATUS: '[pickup] SET_PICKUP_CAPACITY_FEATURE_STATUS',\n SET_PICKUP_CAPACITY_FILTER_VALUE: '[pickup] SET_PICKUP_CAPACITY_FILTER_VALUE',\n\n SET_PICKUP_FREE_DP_FILTER_COMMAND: '[pickup] SET_PICKUP_FREE_DP_FILTER_COMMAND',\n RESET_PICKUP_FREE_DP_FILTER_COMMAND: '[pickup] RESET_PICKUP_FREE_DP_FILTER_COMMAND',\n\n FIND_ALTERNATIVE_FREE_DROPPOINTS: '[pickup] FIND_ALTERNATIVE_FREE_DROPPOINT',\n};\n\nexport const PickupInitialized = createAction(PickupActions.PICKUP_INITIALIZED);\nexport const PickupDestroyed = createAction(PickupActions.PICKUP_DESTROYED);\n\nexport const LoadPickupPointsByLocation = createAction(PickupActions.LOAD_PICKUP_POINTS_BY_LOCATION);\nexport const LoadPickupPointsByLocationError = createAction(PickupActions.LOAD_PICKUP_POINTS_BY_LOCATION_ERROR);\n\nexport const SetPickupPointsBySearchValue = createAction(\n PickupActions.SET_PICKUP_POINTS_BY_SEARCH_VALUE,\n props<{ payload: string }>()\n);\n\nexport const GetCoordinatesFromSearchValueSucess = createAction(\n PickupActions.GET_COORDINATES_FROM_SEARCH_VALUE_SUCESS,\n props<{ coordinates: Geolocation }>()\n);\n\nexport const GetCoordinatesFromSearchValueError = createAction(\n PickupActions.GET_COORDINATES_FROM_SEARCH_VALUE_ERROR\n);\n\nexport const SetPickupPointsBySearchValueSuccess = createAction(\n PickupActions.SET_PICKUP_POINTS_BY_SEARCH_VALUE_SUCCESS,\n props<{ payload: DroppointListsRequestConfiguration | PhysicalStoreRequestConfiguration }>()\n);\nexport const SetPickupPointsBySearchValueError = createAction(PickupActions.SET_PICKUP_POINTS_BY_SEARCH_VALUE_ERROR);\n\nexport const LoadSearchedPickupPointsSuccess = createAction(\n PickupActions.LOAD_SEARCHED_PICKUP_POINTS_SUCCESS,\n props<{ payload: DroppointListsDetail[] | PhysicalStoreDetail[] | PickupPointInfo[] }>()\n);\nexport const LoadSearchedPickupPointsError = createAction(\n PickupActions.LOAD_SEARCHED_PICKUP_POINTS_ERROR,\n props<{ error: any }>()\n);\n\nexport const SetSelectedPickupPoint = createAction(\n PickupActions.SET_SELECTED_PICKUP_POINT,\n props<{ payload: DroppointListsDetail | PhysicalStoreDetail }>()\n);\n\nexport const FindSelectedPickupPointById = createAction(\n PickupActions.FIND_SELECTED_PICKUP_POINT_BY_ID,\n props<{ id: string; kind: string }>()\n);\n\nexport const SetPickupPointsViewMode = createAction(PickupActions.SET_PICKUP_POINTS_VIEW_MODE, props<{ payload: 'list' | 'map' }>());\n\nexport const SetPickupFilter = createAction(PickupActions.SET_PICKUP_FILTER, props<{ payload: PickupFilter }>());\n\nexport const SetPickupCapacityFeatureStatus = createAction(\n PickupActions.SET_PICKUP_CAPACITY_FEATURE_STATUS,\n props<{ payload: boolean }>()\n);\n\nexport const SetPickupCapacityFilterValue = createAction(\n PickupActions.SET_PICKUP_CAPACITY_FILTER_VALUE,\n props<{ payload: boolean }>()\n);\n\nexport const SetPickupFreeDroppintFilterCommand = createAction(\n PickupActions.SET_PICKUP_FREE_DP_FILTER_COMMAND,\n props<{ latitude: number; longitude: number }>()\n);\n\nexport const ResetPickupFreeDroppintFilterCommand = createAction(\n PickupActions.RESET_PICKUP_FREE_DP_FILTER_COMMAND,\n);\n\nexport const FindAlternativeFreeDroppointCommand = createAction(\n PickupActions.FIND_ALTERNATIVE_FREE_DROPPOINTS,\n props<{ payload: DroppointListsRequestConfiguration }>()\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { getSelectedShippingMethod } from '../shipping/shipping.selectors';\n\nimport { PickupState } from './pickup.state';\n\nimport { DroppointListsDetail } from '@api/store-locator/droppoint-lists/models/droppoint-lists.models';\nimport { Address } from '@features/address';\nimport { ShippingMethod } from '@features/shipping';\nimport { getSelectedAddress } from '@shared/address/store/address/address.selectors';\n\nconst selectPickupState = createFeatureSelector('pickup');\n\nexport const getPickupPointMethodState = createSelector(selectPickupState, (state: PickupState) => state);\nexport const getPickupPointsStatus = createSelector(selectPickupState, (state: PickupState) => state.status);\nexport const getPickupPointsViewMode = createSelector(selectPickupState, (state: PickupState) => state?.selectedView);\nexport const getSearchedPickupPointsWithoutFilter = createSelector(selectPickupState, (state: PickupState) => state?.values);\nexport const getSearchedPickupPointsAmount = createSelector(\n selectPickupState,\n (state: PickupState) => state?.values?.length || 0\n);\nexport const getStoreSearchRequestParameters = createSelector(\n getPickupPointMethodState,\n (state: PickupState) => state.searchRequestParameters\n);\nexport const getSearchedPickupPoint = createSelector(\n getPickupPointMethodState,\n (state: PickupState) => state.searchRequestParameters\n);\nexport const isReadyToPayment = createSelector(\n getSelectedShippingMethod,\n getSelectedAddress,\n (shippingMethod: ShippingMethod, selectedAddress: Address) => {\n if (shippingMethod?.id && selectedAddress?.id) return true;\n return false;\n }\n);\nexport const getSelectedPickupPoint = createSelector(selectPickupState, (state: PickupState) => state?.selectedPickupPoint);\nexport const getSelectedDropPoint = createSelector(\n selectPickupState,\n (state: PickupState) => state?.selectedPickupPoint as DroppointListsDetail\n);\nexport const isReadyToPaymentPickup = createSelector(getSelectedShippingMethod, getSearchedPickupPoint);\nexport const getPickupFilter = createSelector(selectPickupState, (state: PickupState) => state?.filter);\n\nexport const getPickupCapacityFeatureStatus = createSelector(\n selectPickupState,\n (state: PickupState) => state?.showPickUpCapacityFeature\n);\n\nexport const getPickupCapacityFilterStatus = createSelector(\n selectPickupState,\n (state: PickupState) => state?.isPickUpCapacityFilterApplied\n);\n\nexport const getPickupFreeDroppointFilter = createSelector(\n selectPickupState,\n (state: PickupState) => state?.freeDroppointFilter\n);\n","import { createAction, props } from '@ngrx/store';\n\nimport { PromotionData, PromotionOverData } from '@features/promotion';\nimport { ShippingMethod } from '@features/shipping';\n\nexport const ShippingActions = {\n LOAD_SHIPPING_METHODS_REQUIREMENTS_SUCESS: '[shipping] LOAD_SHIPPING_METHODS_REQUIREMENTS_SUCESS',\n LOAD_SHIPPING_METHODS: '[shipping] LOAD_SHIPPING_METHODS',\n LOAD_SHIPPING_METHODS_SUCCESS: '[shipping] LOAD_SHIPPING_METHODS_SUCCESS',\n LOAD_SHIPPING_METHODS_ERROR: '[shipping] LOAD_SHIPPING_METHODS_ERROR',\n SET_SELECTED_SHIPPING_METHOD: '[shipping] SET_SELECTED_SHIPPING_METHOD',\n SEND_CHECKOUT_SHIPPING: '[shipping] SEND_CHECKOUT_SHIPPING',\n SEND_CHECKOUT_SHIPPING_SUCCESS: '[shipping] SEND_CHECKOUT_SHIPPING_SUCCESS',\n SEND_CHECKOUT_SHIPPING_ERROR: '[shipping] SEND_CHECKOUT_SHIPPING_ERROR',\n LOAD_SHIPPING_PROMOTIONS: '[shipping] LOAD_SHIPPING_PROMOTIONS',\n LOAD_SHIPPING_PROMOTIONS_SUCCESS: '[shipping] LOAD_SHIPPING_PROMOTIONS_SUCCESS',\n LOAD_SHIPPING_PROMOTIONS_ERROR: '[shipping] LOAD_SHIPPING_PROMOTIONS_ERROR',\n SET_FREE_SHIPPING_OVER_PROMO: '[shipping] SET_FREE_SHIPPING_OVER_PROMO',\n ENABLE_FAST_SINT: '[shipping] ENABLE_FAST_SINT',\n DISABLE_FAST_SINT: '[shipping] DISABLE_FAST_SINT',\n SET_FAST_SINT: '[shipping] SET_FAST_SINT',\n};\n\nexport const LoadShippingMethodRequirementsSuccess = createAction(\n ShippingActions.LOAD_SHIPPING_METHODS_REQUIREMENTS_SUCESS,\n);\n\nexport const LoadShippingMethods = createAction(\n ShippingActions.LOAD_SHIPPING_METHODS,\n);\n\nexport const LoadShippingMethodsSuccess = createAction(\n ShippingActions.LOAD_SHIPPING_METHODS_SUCCESS,\n props<{ values: ShippingMethod[] }>()\n);\n\nexport const LoadShippingMethodsError = createAction(\n ShippingActions.LOAD_SHIPPING_METHODS_ERROR,\n props<{ error: any }>()\n);\n\nexport const SetSelectedShippingMethod = createAction(\n ShippingActions.SET_SELECTED_SHIPPING_METHOD,\n props<{ selectedShippingMethod: ShippingMethod }>()\n);\n\nexport const SendCheckoutShipping = createAction(ShippingActions.SEND_CHECKOUT_SHIPPING);\nexport const SendCheckoutShippingSuccess = createAction(ShippingActions.SEND_CHECKOUT_SHIPPING_SUCCESS);\nexport const SendCheckoutShippingError = createAction(\n ShippingActions.SEND_CHECKOUT_SHIPPING_ERROR,\n props<{ error: any; selectedMethod?: ShippingMethod }>()\n);\n\nexport const SetFreeShippingOverPromo = createAction(\n ShippingActions.SET_FREE_SHIPPING_OVER_PROMO,\n props<{ payload: PromotionOverData }>()\n);\n\nexport const LoadPromotions = createAction(ShippingActions.LOAD_SHIPPING_PROMOTIONS);\nexport const LoadPromotionsSuccess = createAction(\n ShippingActions.LOAD_SHIPPING_PROMOTIONS_SUCCESS,\n props<{ payload: PromotionData }>()\n);\nexport const LoadPromotionsError = createAction(ShippingActions.LOAD_SHIPPING_PROMOTIONS_ERROR);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { ShippingState } from './shipping.state';\n\nimport { CurrencyInfo } from '@core/domain/models/store.models';\nimport { getCurrencyInfo, getCurrencyInfoAlternates } from '@core/infrastructure/state/core.selectors';\nimport { PromotionOverData } from '@features/promotion';\nimport { ShippingMethod } from '@features/shipping';\nimport { getPrimaryPriceWithAlternateFormatted } from '@frontend/common/currency';\n\nconst selectShippingState = createFeatureSelector('shipping');\n\nexport const getShippingMethods = createSelector(selectShippingState, (\n shippingState: ShippingState\n) => shippingState?.values);\n\nexport const getSelectedShippingMethod = createSelector(\n selectShippingState,\n (shippingState: ShippingState) => shippingState?.selectedShippingMethod\n);\n\nexport const getShippingStateLoaded = createSelector(\n selectShippingState,\n (shippingState: ShippingState) => shippingState?.status === 'loaded'\n);\n\nexport const isShippingStateLoading = createSelector(\n selectShippingState,\n (shippingState: ShippingState) => shippingState?.status === 'loading'\n);\n\nexport const getFreeShippingOverPromoData = createSelector(\n selectShippingState,\n (shippingState: ShippingState) => shippingState?.promotions?.freeShippingOverPromoData\n);\n\nexport const isCODShippingEnabled = createSelector(getShippingMethods, (shippingMethods: ShippingMethod[]) => {\n return shippingMethods.some((shippingMethod) => shippingMethod.dbcode === 'StandardCOD');\n});\n\nexport const getFreePromotion = createSelector(\n getFreeShippingOverPromoData,\n (shippingOverPromoData: PromotionOverData) => {\n return shippingOverPromoData?.delivery_promotions?.filter((promo) => promo.amount_over === 0);\n }\n);\n\nexport const getFreeShippingOverPromotion = createSelector(\n getFreeShippingOverPromoData,\n (shippingOverPromoData: PromotionOverData) => {\n return shippingOverPromoData?.delivery_promotions?.filter((promo) => promo.amount_over > 0);\n }\n);\n\nexport const getFreeShippingOverAmountOver = createSelector(\n getFreeShippingOverPromoData,\n (shippingOverPromoData: PromotionOverData) => {\n return shippingOverPromoData?.delivery_promotions?.filter(\n (promos) => promos.amount_over > 0\n ).map((promo) => promo.amount_over)[0];\n }\n);\n\nexport const getFreeShippingOverFSOFullPrice = createSelector(\n getFreeShippingOverPromoData,\n (shippingOverPromoData: PromotionOverData) => {\n return shippingOverPromoData?.delivery_promotions?.filter(\n (promos) => promos.amount_over > 0\n ).map((promo) => promo?.exclude_sales_items)[0];\n }\n);\n\nexport const getFreeShippingOverAmountPending = createSelector(\n getFreeShippingOverPromoData,\n (shippingOverPromoData: PromotionOverData) => {\n return shippingOverPromoData?.delivery_promotions?.filter(\n (promos) => promos.amount_pending > 0\n ).map((promo) => promo.amount_pending)[0];\n }\n);\n\nexport const getFreeShippingOverPromotionActive = createSelector(\n getFreeShippingOverPromoData,\n (shippingOverPromoData: PromotionOverData) => shippingOverPromoData?.calculation_status?.global_status\n);\n\nexport const getPromotionsStatus = createSelector(\n selectShippingState,\n (shippingState: ShippingState) => shippingState?.promotions?.promosStatus?.status\n);\n\nexport const getShippingMethodsWithPriceAlternates = (shippingMethods: ShippingMethod[]) => createSelector(\n getCurrencyInfo,\n getCurrencyInfoAlternates,\n (currencyInfo: CurrencyInfo, currencyInfoAlternates: CurrencyInfo[]) => {\n return shippingMethods.map((shippingMethod: ShippingMethod) => {\n return {\n ...shippingMethod,\n priceFormatted: getPrimaryPriceWithAlternateFormatted(\n shippingMethod.price,\n currencyInfo,\n currencyInfoAlternates\n ),\n };\n });\n }\n);\n","import { createAction, props } from '@ngrx/store';\n\nimport { GiftCardTransaction } from '../models/gift-card.model';\nimport {\n GiftCardActivationReq,\n GiftCardBalanceReq,\n PhysicalGiftCardReq,\n PhysicalGiftCardUpdReq,\n VirtualGiftCardUpdReq,\n} from '../models/gift-cards-request.model';\n\nimport { ApiGiftCard } from '@api/_api/api-gift-card/models/api-gift-card.models';\nimport { GiftCard, VirtualGiftCardReq } from '@api/gift-card/models/gift-card.models';\nimport { GiftCardForm } from '@pages/gift-card/store/gift-card.states';\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace GiftCardActions {\n /* ------------- Acciones getCard ------------- */\n\n export const GetPhysicalGiftCard = createAction('[Gift Card] Get physical Gift Card data');\n export const GetVirtualGiftCard = createAction('[Gift Card] Get virtual Gift Card data');\n export const GetBothGiftCards = createAction('[Gift Card] Get physical and virtual data');\n export const GetBothGiftCardsSuccess = createAction('[Gift Card] Get physical and virtual data success', props<{ data }>());\n export const GetGiftCardSuccess = createAction('[Gift Card] Get physical or virtual data success', props<{ payload: GiftCard }>());\n export const GetGiftCardFailure = createAction('[Gift Card] Get physical or virtual data fail', props());\n\n /* ------------- Acciones getCardData ------------ */\n\n export const GetVirtualGiftCardData = createAction('[Gift Card] Create virtual Gift Card ', props<{ orderItemId: string }>());\n export const GetVirtualGiftCardDataSuccess = createAction('[Gift Card] Create virtual Gift Card success', props<{ virtualGiftCardData: VirtualGiftCardReq }>());\n export const GetPhysicalGiftCardData = createAction('[Gift Card] Create physical Gift Card', props<{ orderItemId: string }>());\n export const GetGiftCardDataSuccess = createAction('[Gift Card] Create Gift Card success', props<{ giftCard: GiftCard }>());\n\n /* ------------- Acciones addToShopCart ------------ */\n\n export const AddToShopCartPhysicalGiftCard = createAction(\n '[Gift Card] Add Physical Gift Card to shopcart',\n props<{ payload: PhysicalGiftCardReq }>()\n );\n export const AddToShopCartVirtualGiftCard = createAction(\n '[Gift Card] Add Virtual Gift Card to shopcart',\n props<{ payload: VirtualGiftCardReq }>()\n );\n export const AddToShopCartSuccess = createAction(\n '[Gift Card] Add Virtual Gift Card to shopcart success',\n props<{ giftCardData: Partial }>()\n );\n\n /* export const updateShopCart = createAction(\n '[Gift Card Cart] Update cart',\n ); */\n\n export const AddToShopCartFailure = createAction('[Gift Card] Add Virtual Gift Card to shopcart Failure', props<{ error: any }>());\n\n /* ------------- Acciones activate giftcard ------------ */\n\n export const ActivateGiftCard = createAction('[Gift Card] Activate Gift Card', props<{ payload: GiftCardActivationReq }>());\n\n export const ActivateGiftCardSuccess = createAction('[Gift Card] Activate Gift Card Success', props<{ payload: GiftCard }>());\n\n export const ActivateGiftCardFailure = createAction('[Gift Card] Activate giftcard fail', props<{ error: any }>());\n\n /* ------------- Acciones getBalance ------------ */\n\n export const ShowGiftCardSearch = createAction('[Gift Card] Get Gift Card search');\n\n export const ShowGiftCardBalance = createAction('[Gift Card] Get Gift Card balance', props<{ payload: GiftCardBalanceReq }>());\n\n export const GetGiftCardBalanceSuccess = createAction('[Gift Card] Get Gift Card balance Success', props<{ total: string; transactions: GiftCardTransaction[] }>());\n\n export const GetGiftCardBalanceFailure = createAction('[Gift Card] Get Gift Card balance fail', props<{ error: any }>());\n\n /* ------------- Acciones update giftcard ------------ */\n\n export const UpdatePhysicalGiftCard = createAction(\n '[Gift Card] Updates Physical Gift Card',\n props<{ orderItemId: string; physicalGiftCardUpdateData: PhysicalGiftCardUpdReq }>()\n );\n export const UpdateVirtualGiftCard = createAction(\n '[Gift Card] Updates Virtual Gift Card',\n props<{ orderItemId: string; virtualGiftCardUpdateData: VirtualGiftCardUpdReq }>()\n );\n export const UpdateVirtualGiftCardSuccess = createAction('[Gift Card] Updates Gift Card Success', props<{ payload: GiftCard }>());\n\n /* ----------- Acciones de Error ------------- */\n\n export const ErrorGiftCardAction = createAction('[Gift Card] Error', props());\n\n export const SetSkuGiftCard = createAction('[Gift Card] SET SKU GIFT CARD', props<{ sku: number }>());\n\n export const SetGiftCardSaved = createAction('[Gift Card] SET GIFT CARD SAVED', props<{ saved: boolean }>());\n\n export const SetGiftCardForm = createAction('[Gift Card] SET FORM GIFT CARD', props<{ form: GiftCardForm }>());\n\n export const SetGiftCardType = createAction('[Gift Card] SET GIFT CARD TYPE', props<{ giftCardType: string }>());\n\n export const SetGiftCardCustomize = createAction('[Gift Card] SET GIFT CARD CUSTOMIZE', props<{ customizeSelected: any }>());\n\n export const ResetGiftCardForm = createAction('[Gift Card] RESET FORM GIFT CARD');\n export const RemoveGiftCard = createAction('[Gift Card] REMOVE GIFT CARD');\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { GiftCardState } from './gift-card.states';\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace GiftCardSelectors {\n export const selectGiftCardState = createFeatureSelector('gift-card');\n\n export const getCard = createSelector(selectGiftCardState, (state) => state.giftCard);\n export const getForm = createSelector(selectGiftCardState, (state) => state.giftCardForm);\n export const getCustomize = createSelector(selectGiftCardState, (state) => state.customizeSelected);\n export const getType = createSelector(selectGiftCardState, (state) => state.giftCardType);\n export const getBothGiftCards = createSelector(selectGiftCardState, (state) => state.giftCards);\n export const showBalance = createSelector(selectGiftCardState, (state) => state.showBalance);\n\n export const getGiftCardSaved = createSelector(selectGiftCardState, (state) => state.giftCardForm.giftCardSaved);\n\n export const getCardPrices = createSelector(selectGiftCardState, (state) => state.giftCardPrices);\n\n export const getSelectedGiftCardPrice = createSelector(selectGiftCardState, (state) => {\n return state.giftCardPrices.find((price) => price?.sku?.toString() === state.giftCardForm?.sku);\n });\n\n export const getCardTotal = createSelector(selectGiftCardState, (state) => state.giftCardTotal);\n export const getCardTransactions = createSelector(selectGiftCardState, (state) => state.giftCardTransactions);\n export const addedShopCart = createSelector(selectGiftCardState, (state) => state.addedToCart);\n\n export const getLoadingStatus = createSelector(selectGiftCardState, (state) => state.isLoading);\n export const getSuccess = createSelector(selectGiftCardState, (state) => state.isSuccess);\n export const getError = createSelector(selectGiftCardState, (state) => state.error);\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { MenuCategory } from '@shared/header/models/category.model';\n\nexport const LookbookActionTypes = {\n LOOKBOOK_PAGE_CREATED: '[Lookbook] LOOKBOOK_PAGE_CREATED',\n LOOKBOOK_PAGE_INITIALIZED: '[Lookbook] LOOKBOOK_PAGE_INITIALIZED',\n LOAD_LOOKBOOK_PAGE_SUCCESS: '[Lookbook] LOAD_LOOKBOOK_PAGE_SUCCESS',\n LOOKBOOK_SLUG_LOADED: '[Lookbook] LOOKBOOK_SLUG_LOADED',\n REPLACE_LOCATION_SUCESS: '[Lookbook] REPLACE_LOCATION_SUCESS',\n LOOKBOOK_PAGE_DESTROYED: '[Lookbook] LOOKBOOK_PAGE_DESTROYED',\n LOOKBOOK_PAGE_CLEAN: '[Lookbook] LOOKBOOK_PAGE_CLEAN',\n};\n\nexport const LookbookPageInitialized = createAction(\n LookbookActionTypes.LOOKBOOK_PAGE_INITIALIZED,\n props<{ slug: string }>()\n);\n\nexport const LookbookPageCreated = createAction(LookbookActionTypes.LOOKBOOK_PAGE_CREATED);\n\nexport const LookbookPageDestroyed = createAction(LookbookActionTypes.LOOKBOOK_PAGE_DESTROYED);\n\nexport const LookbookPageClean = createAction(LookbookActionTypes.LOOKBOOK_PAGE_CLEAN);\n\nexport const LookbookSlugLoaded = createAction(\n LookbookActionTypes.LOOKBOOK_SLUG_LOADED,\n props<{ snapshotFragment: string }>()\n);\n\nexport const LoadLookbookPageSuccess = createAction(\n LookbookActionTypes.LOAD_LOOKBOOK_PAGE_SUCCESS,\n props<{ category: MenuCategory; slug: string; isLimited: boolean }>()\n);\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { createAction, props } from '@ngrx/store';\n\nimport { AddressConfigState } from './address.state';\n\nimport { StoreDetail } from '@core/domain/models/store.models';\nimport { Address } from '@features/address';\n\nexport const AddressActions = {\n LOAD_ADDRESSES: '[address] LOAD_ADDRESS',\n LOAD_ADDRESSES_SUCCESS: '[address] LOAD_ADDRESSES_SUCCESS',\n LOAD_ADDRESSES_ERROR: '[address] Load LOAD_ADDRESSES_ERROR',\n SET_SELECTED_ADDRESS: '[address] SET_SELECTED_ADDRESS',\n SET_SELECTED_ADDRESS_BY_ID: '[address] SET_SELECTED_ADDRESS_BY_ID',\n SET_SELECTED_ADDRESS_BY_ID_ERROR: '[address] SET_SELECTED_ADDRESS_BY_ID_ERROR',\n SAVE_SHIPPING_ADDRESS: '[address] SAVE_SHIPPING_ADDRESS',\n SAVE_SHIPPING_ADDRESS_SUCCESS: '[address] SAVE_SHIPPING_ADDRESS_SUCCESS',\n DELETE_SHIPPING_ADDRESS: '[address] DELETE_SHIPPING_ADDRESS',\n DELETE_SHIPPING_ADDRESS_SUCCESS: '[address] DELETE_SHIPPING_ADDRESS_SUCCESS',\n DELETE_SHIPPING_ADDRESS_ERROR: '[address] DELETE_SHIPPING_ADDRESS_ERROR',\n SAVE_BILLING_ADDRESS: '[address] SAVE_BILLING_ADDRESS',\n\n SAVE_ADDRESS_SUCCESS: '[address] SAVE_ADDRESS_SUCCESS',\n SAVE_PICKUP_STORE_ADDRESS: '[address] SAVE_PICKUP_STORE_ADDRESS',\n SAVE_PICKUP_STORE_ADDRESS_SUCCESS: '[address] SAVE_PICKUP_STORE_ADDRESS_SUCCESS',\n SAVE_BILLING_ADDRESS_AND_CHECKOUT: '[address] SAVE_BILLING_ADDRESS_AND_CHECKOUT',\n SAVE_PICKUP_DROPPOINT_ADDRESS: '[address] SAVE_PICKUP_DROPPOINT_ADDRESS',\n SAVE_PICKUP_DROPPOINT_ADDRESS_SUCCESS: '[address] SAVE_PICKUP_DROPPOINT_ADDRESS_SUCCESS',\n SAVE_BILLING_ADDRESS_SUCCESS: '[address] SAVE_BILLING_ADDRESS_SUCCESS',\n SAVE_ADDRESS_ERROR: '[address] SAVE_ADDRESS_ERROR',\n SAVE_BOOK_ADDRESS: '[address] SAVE_BOOK_ADDRESS',\n SAVE_BOOK_ADDRESS_SUCCESS: '[address] SAVE_BOOK_ADDRESS_SUCCESS',\n SAVE_BOOK_ADDRESS_ERROR: '[address] SAVE_BOOK_ADDRESS_ERROR',\n SUGGEST_ADDRESS: '[address] SUGGEST_ADDRESS',\n SUGGEST_ADDRESS_SUCCESS: '[address] SUGGEST_ADDRESS_SUCCESS',\n SUGGEST_ADDRESS_ERROR: '[address] SUGGEST_ADDRESS_ERROR',\n FORMAT_ADDRESS: '[address] FORMAT_ADDRESS',\n FORMAT_ADDRESS_ERROR: '[address] FORMAT_ADDRESS_ERROR',\n FORMAT_ADDRESS_SUCCESS: '[address] FORMAT_ADDRESS_SUCCESS',\n SET_LOADING_ADDRESS: '[address] SET_LOADING_ADDRESS',\n LOAD_CONFIG_ADDRESS: '[address] LOAD_CONFIG_ADDRESS',\n LOAD_CONFIG_ADDRESS_SUCCESS: '[address] LOAD_CONFIG_ADDRESS_SUCCESS',\n LOAD_CONFIG_ADDRESS_ERROR: '[address] LOAD_CONFIG_ADDRESS_ERROR',\n CHECK_CURRENT_ROUTE: '[address] CHECK_CURRENT_ROUTE',\n};\n\nexport const LoadAddresses = createAction(\n AddressActions.LOAD_ADDRESSES\n);\nexport const LoadAddressesSuccess = createAction(\n AddressActions.LOAD_ADDRESSES_SUCCESS,\n props<{ values: Address[] }>()\n);\nexport const LoadAddressesError = createAction(\n AddressActions.LOAD_ADDRESSES_ERROR,\n props<{ error: any }>()\n);\nexport const LoadConfigAddress = createAction(\n AddressActions.LOAD_CONFIG_ADDRESS\n);\nexport const LoadConfigAddressSuccess = createAction(\n AddressActions.LOAD_CONFIG_ADDRESS_SUCCESS,\n props<{ values: AddressConfigState }>()\n);\nexport const LoadConfigAddressError = createAction(\n AddressActions.LOAD_CONFIG_ADDRESS_ERROR,\n props<{ error: any }>()\n);\nexport const SetSelectedAddress = createAction(\n AddressActions.SET_SELECTED_ADDRESS,\n props<{ selectedAddress: Address }>()\n);\nexport const SetSelectedAddressError = createAction(\n AddressActions.SET_SELECTED_ADDRESS_BY_ID_ERROR\n);\nexport const SetSelectedAddressById = createAction(\n AddressActions.SET_SELECTED_ADDRESS_BY_ID,\n props<{ id: string }>()\n);\nexport const SaveShippingAddress = createAction(\n AddressActions.SAVE_SHIPPING_ADDRESS,\n props<{ address: Address }>()\n);\nexport const SaveShippingAddressSuccess = createAction(\n AddressActions.SAVE_SHIPPING_ADDRESS_SUCCESS,\n props<{ shippingAddress: Address }>()\n);\nexport const SaveAddressSuccess = createAction(\n AddressActions.SAVE_ADDRESS_SUCCESS,\n props<{ values: Address[]; selectedAddress: Address }>()\n);\n\nexport const DeleteAddressSuccess = createAction(\n AddressActions.DELETE_SHIPPING_ADDRESS_SUCCESS,\n);\nexport const DeleteAddress = createAction(\n AddressActions.DELETE_SHIPPING_ADDRESS,\n props<{ selectedAddress: Address }>()\n);\n\nexport const DeleteAddressError = createAction(\n AddressActions.DELETE_SHIPPING_ADDRESS_ERROR,\n props<{ error: any }>()\n);\n\nexport const CheckCurrentRoute = createAction(\n AddressActions.CHECK_CURRENT_ROUTE\n);\nexport const SaveBillingAddress = createAction(\n AddressActions.SAVE_BILLING_ADDRESS,\n props<{\n address: Address;\n form: any;\n }>()\n);\nexport const SaveBillingAddressSuccess = createAction(\n AddressActions.SAVE_BILLING_ADDRESS_SUCCESS\n);\n// TODO ECOMDUTI-21013 -PICKUP-DROPPOINT: Adaptar y modificar estos actions\nexport const SavePickupDroppointAddress = createAction(\n AddressActions.SAVE_PICKUP_DROPPOINT_ADDRESS,\n props<{ address: Address }>()\n);\nexport const SavePickupDroppointAddressSuccess = createAction(\n AddressActions.SAVE_PICKUP_DROPPOINT_ADDRESS_SUCCESS\n);\nexport const SavePickupStoreAddress = createAction(\n AddressActions.SAVE_PICKUP_STORE_ADDRESS,\n props<{ address: Address }>()\n);\nexport const SavePickupStoreAddressSuccess = createAction(\n AddressActions.SAVE_PICKUP_STORE_ADDRESS_SUCCESS\n);\nexport const SaveAddressError = createAction(\n AddressActions.SAVE_ADDRESS_ERROR,\n props<{ error: HttpErrorResponse }>()\n);\nexport const SetLoadingAddress = createAction(\n AddressActions.SET_LOADING_ADDRESS\n);\n\nexport const SaveBookAddress = createAction(\n AddressActions.SAVE_BOOK_ADDRESS,\n props<{ currentAddress: Address }>()\n);\n\nexport const SaveBookAddressError = createAction(\n AddressActions.SAVE_BOOK_ADDRESS_ERROR,\n props<{ error: HttpErrorResponse }>()\n);\n\nexport const SaveBookAddressSuccess = createAction(\n AddressActions.SAVE_BOOK_ADDRESS_SUCCESS,\n props<{ storeDetail: StoreDetail; currentAddress: Address; billingAddress: Address; enableAddressValidator: boolean }>()\n);\n\nexport const SuggestAddress = createAction(\n AddressActions.SUGGEST_ADDRESS,\n props<{\n storeDetail: StoreDetail;\n currentAddress: Address;\n billingAddress: Address;\n enableAddressValidator: boolean;\n isBillingAddress?: boolean;\n }>()\n\n);\n\nexport const SuggestAddressSuccess = createAction(\n AddressActions.SUGGEST_ADDRESS_SUCCESS,\n props<{ address: Address; isBillingAddress: boolean }>()\n\n);\n\nexport const SuggestAddressError = createAction(\n AddressActions.SUGGEST_ADDRESS_ERROR,\n props<{ error: HttpErrorResponse }>()\n\n);\nexport const FormatAddress = createAction(\n AddressActions.FORMAT_ADDRESS,\n props<{ address: Address }>()\n);\nexport const FormatAddressError = createAction(\n AddressActions.FORMAT_ADDRESS_ERROR,\n props<{ error: HttpErrorResponse }>()\n);\nexport const FormatAddressSuccess = createAction(\n AddressActions.FORMAT_ADDRESS_SUCCESS,\n props<{ address: Address }>()\n\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { AddressConfigState, AddressState } from './address.state';\n\nimport { Address } from '@features/address';\n\nconst selectAddressState = createFeatureSelector('address');\n\nexport const getLoadingAddressStatus = createSelector(selectAddressState, (state: AddressState) => state?.loading);\nexport const getAddressStateLoaded = createSelector(selectAddressState, (state: AddressState) => state.loaded);\nexport const getAddressEntities = createSelector(selectAddressState, (state: AddressState) => state?.values || {});\nexport const getAllAddresses = createSelector(getAddressEntities, (values: Record) => {\n const addresses: Address[] = Object.keys(values).map((id: string) => values[id]);\n return addresses;\n});\n\nexport const getShippingAddresses = createSelector(getAllAddresses, (values: Address[]) =>\n values.filter((address: Address) => address.addressType === 'S'));\n\nexport const getBillingAddress = createSelector(\n getAllAddresses,\n (values): Address => values.find((address: Address) => address.addressType === 'SB')\n);\n\nexport const getIsBillingAddressVatinStored = createSelector(getAllAddresses, (values) => {\n const billingAddress = values.find((address: Address) => address.addressType === 'SB');\n return billingAddress?.vatin !== null && billingAddress?.vatin !== undefined;\n});\n\nexport const getShippingAddressesDelivery = (countryCode: string, isWWCountry: boolean) =>\n createSelector(getShippingAddresses, (values) => {\n return values.filter((address) => isWWCountry || address.countryCode === countryCode);\n });\n\nexport const getSelectedAddress = createSelector(selectAddressState, (state: AddressState) => state?.selectedAddress);\n\nexport const getAddressById = (addressId: string) => createSelector(\n selectAddressState,\n (state: AddressState) => state?.values?.[addressId]\n);\n\nexport const getAddressConfig = createSelector(selectAddressState, (state: AddressState) => state.config?.values);\n\nexport const getAddressTaxCode = createSelector(selectAddressState, (state: AddressState) => state.config?.values.taxCode);\n\nexport const getAddressTaxRegimes = createSelector(\n selectAddressState,\n (state: AddressState) => state.config?.values.taxRegimes\n);\n\nexport const getIsBillingAddressMandatory = createSelector(\n getAddressConfig,\n (config: AddressConfigState) => config?.isBillingAddressMandatory\n);\n\nexport const getIsDocumentMandatory = createSelector(\n getAddressConfig,\n (config: AddressConfigState) => config?.isDocumentMandatory\n);\n\nexport const getAddressDocumentTypes = createSelector(\n selectAddressState,\n (state: AddressState) => state.config?.values.documentTypes\n);\n\nexport const getAddressConfigDocumentTypeByType = createSelector(\n selectAddressState,\n (state: AddressState) => state.config?.values.documentTypeByType\n);\n\nexport const getAddressConfigDocumentTypeByTypeParticular = createSelector(\n selectAddressState,\n (state: AddressState) => state.config?.values.documentTypeByType.particular\n);\n\nexport const getAddressConfigDocumentTypeByTypeCompany = createSelector(\n selectAddressState,\n (state: AddressState) => state.config?.values.documentTypeByType.company\n);\n","import { getPendingGetCart } from '../../../shopcart/store/shopcart.selectors';\n\nimport { PendingCartItem } from '@api/cart/cart.models';\nimport { Category } from '@core/domain/models/category.models';\nimport { getCategory } from '@pages/category/public_api';\nimport { getLookbookPageCategory } from '@pages/lookbook/store/lookbook.selector';\nimport { MenuCategory } from '@shared/header/models/category.model';\n\nexport const categorySelectorConditions = {\n selector: getCategory,\n valuesNeeded: (category: Category) => {\n if (!category?.id) {\n return true;\n }\n return false;\n },\n};\n\nexport const lookbookCategorySelectorConditions = {\n selector: getLookbookPageCategory,\n valuesNeeded: (category: MenuCategory) => {\n if (!category?.id) {\n return true;\n }\n return false;\n },\n};\n\nexport const pendingGetCartSelectorConditions = {\n selector: getPendingGetCart,\n valuesNeeded: (pendingItems: PendingCartItem[]) => {\n if (pendingItems.length) {\n return true;\n }\n return false;\n },\n};\n","import { PendingCartItem } from '@api/cart/cart.models';\nimport { Category } from '@core/domain/models/category.models';\nimport { ProductPublicModels } from '@features/products/product';\nimport { getCategory } from '@pages/category';\nimport { getLookbookPageCategory } from '@pages/lookbook/store/lookbook.selector';\nimport { getProductPageDetail } from '@pages/product';\nimport { MenuCategory } from '@shared/header/models/category.model';\nimport { getPendingGetCartCore } from '@shared/shopcart-core/infrastructure/state/shopcart-core.selectors';\n\nexport const categorySelectorConditions = {\n selector: getCategory,\n valuesNeeded: (category: Category) => {\n if (!category?.id) {\n return true;\n }\n return false;\n },\n};\n\nexport const lookbookCategorySelectorConditions = {\n selector: getLookbookPageCategory,\n valuesNeeded: (category: MenuCategory) => {\n if (!category?.id) {\n return true;\n }\n return false;\n },\n};\n\nexport const pendingGetCartSelectorConditions = {\n selector: getPendingGetCartCore,\n valuesNeeded: (pendingItems: PendingCartItem[]) => {\n if (pendingItems.length) {\n return true;\n }\n return false;\n },\n};\n\nexport const productPageProductConditions = {\n selector: getProductPageDetail,\n valuesNeeded: (product: ProductPublicModels.PublicProduct) => {\n if (!product?.id) {\n return true;\n }\n return false;\n },\n};\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { GoogleServicesState } from './google-services.state';\n\nexport const getGoogleServicesState = createFeatureSelector('google-services');\n\nexport const getGoogleServicesGtmEnabled = createSelector(\n getGoogleServicesState,\n (state: GoogleServicesState) => state?.enabled\n);\n","import { Injectable } from '@angular/core';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { MemoizedSelector, Store } from '@ngrx/store';\n// eslint-disable-next-line import/no-unresolved\nimport { TypedAction } from '@ngrx/store/src/models';\nimport { concatMap, filter, first, map, Observable, of, switchMap } from 'rxjs';\n\nimport { LoadShopCartSuccess } from '../../../shopcart/store/shopcart.actions';\nimport { categorySelectorConditions, lookbookCategorySelectorConditions, pendingGetCartSelectorConditions } from '../constants/configuration.constant';\n\nimport { userConsentPolicies } from '@core/domain/constants/user-consent.const';\nimport { PageSection } from '@core/domain/types/page-sections.types';\nimport { UserConsentService } from '@core/ui/services/user-consent.service';\nimport { LoadCategorySuccess } from '@pages/category';\nimport { LoadLookbookPageSuccess } from '@pages/lookbook/store/lookbook.actions';\nimport { LoadProductPageSuccess } from '@pages/product';\nimport { productPageProductConditions } from '@shared/analytics/GA4/configs/ga4-configuration-events.constant';\nimport { getGoogleServicesGtmEnabled } from '@shared/google-services/store/google-services.selectors';\n\n@Injectable()\nexport class ConfigurationService {\n constructor(\n private readonly actions$: Actions,\n private readonly store: Store,\n private readonly userConsentService: UserConsentService,\n ) { }\n\n private readonly consilatedValuesNeededForPage:\n Record; valuesNeeded: (any) => boolean }> = {\n ItxProductPage: productPageProductConditions,\n Itx404ErrorPage: undefined,\n Itx410ErrorPage: undefined,\n ItxAngularAuthenticationPage: undefined,\n ItxAngularAuthenticationRegisterPage: undefined,\n ItxAngularAuthenticationConfirmationPage: undefined,\n ItxAngularAuthenticationRecoveryPage: undefined,\n ItxAngularCmsRenderPage: undefined,\n ItxAngularContactPage: undefined,\n ItxAngularGiftCardPage: undefined,\n ItxAngularGiftCardActivationPage: undefined,\n ItxAngularGiftCardBalancePage: undefined,\n ItxAngularLookbookPage: lookbookCategorySelectorConditions,\n ItxAngularOrderStatus: undefined,\n ItxAngularShopcartPage: pendingGetCartSelectorConditions,\n ItxAngularStoreDetailLocatorPage: undefined,\n ItxAngularStoreLocatorPage: undefined,\n ItxAngularTransactionCancelation: undefined,\n ItxAngularWishlistPage: undefined,\n ItxCategoryPage: categorySelectorConditions,\n ItxCheckoutAuthPage: undefined,\n ItxCheckoutPage: undefined,\n ItxCheckoutPaymentPage: undefined,\n ItxCheckoutRepaymentPage: undefined,\n ItxCheckoutShippingDeliveryAddressPage: undefined,\n ItxCheckoutShippingDeliveryPage: undefined,\n ItxCheckoutShippingDeliverySummaryPage: undefined,\n ItxCheckoutShippingDropPointSummaryPage: undefined,\n ItxCheckoutShippingDropPointPage: undefined,\n ItxCheckoutShippingPage: undefined,\n ItxCheckoutShippingStorePage: undefined,\n ItxCheckoutShippingStoreSummaryPage: undefined,\n ItxCheckoutSummaryPage: undefined,\n ItxErrorPage: undefined,\n ItxHelpPage: undefined,\n ItxHomeBgPage: undefined,\n ItxHomeMenPage: undefined,\n ItxHomePage: undefined,\n ItxHomeWomenPage: undefined,\n ItxMassimoDuttiFeelPage: undefined,\n ItxMyAccountFeelPage: undefined,\n ItxMyAccountFeelBirthdayGiftPage: undefined,\n ItxMyAccountFeelStyleAdvisorPage: undefined,\n ItxMyAccountFeelPersonalTailorPage: undefined,\n ItxMyAccountFeelGiftingPage: undefined,\n ItxMyAccountFeelPaperlessPage: undefined,\n ItxMyAccountFeelPromotionsPage: undefined,\n ItxMyAccountFeelCollectionsPage: undefined,\n ItxMyAccountFeelWhatsappPage: undefined,\n ItxMyAccountFeelExperiencesPage: undefined,\n ItxMyAccountNewsletterPage: undefined,\n ItxMyAccountPage: undefined,\n ItxMyAccountReturnsPage: undefined,\n ItxMyAccountSponsorshipPage: undefined,\n ItxNewsletterPage: undefined,\n ItxOrderConfirmationPage: undefined,\n ItxWorldWidePage: undefined,\n ItxMyAccountAccessDataPage: undefined,\n ItxMyAccountDetailsPage: undefined,\n ItxMyAccountAddressListPage: undefined,\n ItxMyAccountCardsPage: undefined,\n ItxMyAccountMenuPage: undefined,\n ItxMyAccountOrdersPage: undefined,\n ItxAngularMyAccountPage: undefined,\n ItxAngularUserPage: undefined,\n ItxMyAccountFeelActivationPage: undefined,\n ItxMyAccountFeelBenefitsPage: undefined,\n ItxMyAccountFeelHistoryPage: undefined,\n ItxMyAccountFeelHowItWorksPage: undefined,\n };\n\n private readonly awaitInfoForPage: Record> = {\n ItxProductPage: LoadProductPageSuccess,\n Itx404ErrorPage: undefined,\n Itx410ErrorPage: undefined,\n ItxAngularAuthenticationPage: undefined,\n ItxAngularAuthenticationRegisterPage: undefined,\n ItxAngularAuthenticationConfirmationPage: undefined,\n ItxAngularAuthenticationRecoveryPage: undefined,\n ItxAngularCmsRenderPage: undefined,\n ItxAngularContactPage: undefined,\n ItxAngularGiftCardPage: undefined,\n ItxAngularGiftCardActivationPage: undefined,\n ItxAngularGiftCardBalancePage: undefined,\n ItxAngularLookbookPage: LoadLookbookPageSuccess,\n ItxAngularOrderStatus: undefined,\n ItxAngularShopcartPage: LoadShopCartSuccess,\n ItxAngularStoreDetailLocatorPage: undefined,\n ItxAngularStoreLocatorPage: undefined,\n ItxAngularTransactionCancelation: undefined,\n ItxAngularWishlistPage: undefined,\n ItxCategoryPage: LoadCategorySuccess,\n ItxCheckoutAuthPage: undefined,\n ItxCheckoutPage: undefined,\n ItxCheckoutPaymentPage: undefined,\n ItxCheckoutRepaymentPage: undefined,\n ItxCheckoutShippingDeliveryAddressPage: undefined,\n ItxCheckoutShippingDeliveryPage: undefined,\n ItxCheckoutShippingDeliverySummaryPage: undefined,\n ItxCheckoutShippingDropPointSummaryPage: undefined,\n ItxCheckoutShippingDropPointPage: undefined,\n ItxCheckoutShippingPage: undefined,\n ItxCheckoutShippingStorePage: undefined,\n ItxCheckoutShippingStoreSummaryPage: undefined,\n ItxCheckoutSummaryPage: undefined,\n ItxErrorPage: undefined,\n ItxHelpPage: undefined,\n ItxHomeBgPage: undefined,\n ItxHomeMenPage: undefined,\n ItxHomePage: undefined,\n ItxHomeWomenPage: undefined,\n ItxMassimoDuttiFeelPage: undefined,\n ItxMyAccountFeelPage: undefined,\n ItxMyAccountFeelBirthdayGiftPage: undefined,\n ItxMyAccountFeelStyleAdvisorPage: undefined,\n ItxMyAccountFeelPersonalTailorPage: undefined,\n ItxMyAccountFeelGiftingPage: undefined,\n ItxMyAccountFeelPaperlessPage: undefined,\n ItxMyAccountFeelPromotionsPage: undefined,\n ItxMyAccountFeelCollectionsPage: undefined,\n ItxMyAccountFeelWhatsappPage: undefined,\n ItxMyAccountFeelExperiencesPage: undefined,\n ItxMyAccountNewsletterPage: undefined,\n ItxMyAccountPage: undefined,\n ItxMyAccountReturnsPage: undefined,\n ItxMyAccountSponsorshipPage: undefined,\n ItxNewsletterPage: undefined,\n ItxOrderConfirmationPage: undefined,\n ItxWorldWidePage: undefined,\n ItxMyAccountAccessDataPage: undefined,\n ItxMyAccountDetailsPage: undefined,\n ItxMyAccountAddressListPage: undefined,\n ItxMyAccountCardsPage: undefined,\n ItxMyAccountMenuPage: undefined,\n ItxMyAccountOrdersPage: undefined,\n ItxAngularMyAccountPage: undefined,\n ItxAngularUserPage: undefined,\n ItxMyAccountFeelActivationPage: undefined,\n ItxMyAccountFeelBenefitsPage: undefined,\n ItxMyAccountFeelHistoryPage: undefined,\n ItxMyAccountFeelHowItWorksPage: undefined,\n };\n\n /**\n * Función común para GA4 y ZENIT\n *\n * @param page\n * @returns Observable\n */\n public pageDeferConditions(page: PageSection): Observable {\n const condition: any = this.consilatedValuesNeededForPage[page];\n const awaitTo: any = this.awaitInfoForPage[page];\n if (condition) {\n return this.store.select(condition.selector).pipe(\n concatMap((info) => {\n if (!condition.valuesNeeded(info)) {\n return of(page);\n }\n return this.actions$.pipe(ofType(awaitTo)).pipe(\n first()\n );\n }),\n first()\n );\n }\n if (awaitTo) {\n return this.actions$.pipe(ofType(awaitTo)).pipe(first());\n }\n return of(page);\n }\n\n public getIsGTMLoadedWithActualInfo$(action: any): Observable {\n return this.userConsentService.consentEvent$.pipe(\n filter((policy) => !!policy?.data?.[userConsentPolicies.ANALYTICS]?.allowed),\n switchMap(() => this.store.select(getGoogleServicesGtmEnabled)),\n filter((isEnabled) => !!isEnabled),\n first(),\n map(() => action)\n );\n }\n}\n","/* eslint-disable no-param-reassign */\nimport { Inject, Injectable } from '@angular/core';\nimport { WINDOW } from '@ng-web-apis/common';\nimport { Store } from '@ngrx/store';\n\nimport { CommonWindow } from '@core/domain/models/common-window.model';\nimport { CorePlatformService } from '@core/infrastructure/platform/platform.service';\nimport { ProductPublicModels } from '@features/products/product';\nimport { INVIEWPORT_ID_ATTRIBUTE_NAME } from '@layout/ui/directives/inviewport.directive';\nimport { EventFrom } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { Ga4ItemListVisible } from '@shared/analytics/GA4/store/ga4-analytics.actions';\nimport { ZenitListItemVisible } from '@shared/analytics/ZENIT/store/actions/zenit.actions';\nimport { ProductViewPlace } from '@shared/product/models';\n\n// #region Models\ninterface ViewItemCallbackState {\n isFirstTime: boolean;\n productViewedGA4: ProductPublicModels.PublicProduct;\n productViewedZenit: ProductPublicModels.PublicProduct;\n timer: number;\n}\n\ninterface ViewItemCallbackIntersectionData {\n element: Element;\n entry: IntersectionObserverEntry;\n isIntersectingByConfig: boolean;\n}\n\nexport interface ViewItemServiceConfig {\n delayMilisecondsUntilEvent: number; // Delay en milisegundos del tiempo que esperará antes de enviar el evento automaticamente (Para su uso fuera de la clase)\n firstTimeViewTreshold: number[]; // Umbral a partir del cual se considera que un item es visible la primera vez que se ven items (isFirstTime == true)\n isOnce: boolean; // Si es true envía lo que hay en el buffer (aunque no cumpla otras condiciones), lo vacía y luego deja de observar el elemento\n itemsBatch: number; // Tamaño máximo del buffer antes de que envie el evento\n nonExactThreshold: number[]; // Si el obsevador tiene alguna opción que afecte al cálculo del ratio de intersección se lanzarán triggers cada 10% para realizar el cálculo manual\n rootMargin?: string; // Márgenes respecto al elemento padre\n standardViewTreshold: number[]; // Umbral a partir del cual se considera que un item es visible después de la primera vez que se ven items (isFirstTime == false)\n}\n\nexport interface ViewItemProduct extends ProductPublicModels.PublicProduct {\n idMedia?: string; /** Id del media que se muestra para el producto */\n}\n\nexport interface ViewItemOrigin {\n eventFrom: EventFrom;\n place: ProductViewPlace;\n relatedsSectionId: string;\n}\n\n/** Propiedades de acceso desde los effects de control */\nexport const viewItemServiceConfig: ViewItemServiceConfig = {\n itemsBatch: 15,\n delayMilisecondsUntilEvent: 60000, // 60 segundos\n firstTimeViewTreshold: [0.3, 1], // El elemento se ve por lo menos un 30%\n standardViewTreshold: [0.50, 1], // El elemento se ve por lo menos un 50%\n nonExactThreshold: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1], // Si el obsevador tiene alguna opción que afecte al cálculo del ratio de intersección se lanzarán triggers cada 10% para realizar el cálculo manual\n isOnce: false,\n};\n// #endregion\n\n@Injectable()\nexport class ViewItemService {\n /** Propiedades de acceso desde los effects de control */\n public readonly config: ViewItemServiceConfig = viewItemServiceConfig;\n\n /** Estado para cada instancia */\n private readonly state = {\n isFirstTime: true,\n productViewedGA4: undefined,\n productViewedZenit: undefined,\n timer: undefined,\n };\n\n private static isFirstBatch = true;\n\n private readonly elementsViewed: Set = new Set();\n\n private productsBuffer: ProductPublicModels.PublicProduct[] = [];\n\n private observer: IntersectionObserver;\n\n constructor(\n @Inject(WINDOW) private readonly window: CommonWindow,\n private readonly platformService: CorePlatformService,\n private readonly store: Store,\n ) { }\n\n public getIsFirstBatch(): boolean {\n return ViewItemService.isFirstBatch;\n }\n\n public resetIsFirstBatch(): void {\n ViewItemService.isFirstBatch = true;\n this.elementsViewed.clear();\n }\n\n /*\n * Listas cuyos items se van cargando de manera asíncrona (Ej. parrillas)\n */\n public actionWhenVisibleAsync(\n product: ProductPublicModels.PublicProduct,\n element: Element,\n viewItemOrigin: ViewItemOrigin,\n idMedia: string,\n intersectionEntry: IntersectionObserverEntry,\n overrideConfig?: Partial\n ): void {\n if (!this.platformService.isBrowser()) return;\n\n const viewItemProduct = this.addDataToProduct(product, { idMedia });\n // Las options del observer pueden tener un rootMargin para funcionalidad. Aquí nos interesa el ratio de intersección del elemento.\n const realIntersectionRatio = this.calculateIntersectionRatioByTarget(this.window, intersectionEntry);\n\n // Instancias de IntersectionObserverEntry podrían tener isIntersecting a true debido al threshold\n // de funcionalidad, se tiene que revisar que cumple el threshold definido en la configuración.\n const isIntersectingByConfig = !!this.getThreshold(overrideConfig)\n .find((value) => value <= realIntersectionRatio);\n\n this.actionWhenVisibleAsyncCallback(\n this.state,\n { entry: intersectionEntry, element, isIntersectingByConfig },\n viewItemProduct,\n viewItemOrigin,\n false,\n overrideConfig\n );\n }\n\n public viewProduct(\n product: ViewItemProduct,\n inviewportElementid: string,\n isPassthrough: boolean,\n isReset?: boolean,\n overrideConfig?: Partial\n ): ViewItemProduct[] {\n const returnProducts = this.getReturnProducts(product, isPassthrough, isReset, overrideConfig);\n\n const isProductViewed = this.elementsViewed.has(inviewportElementid);\n if (product && !isProductViewed) {\n this.productsBuffer.push(product);\n this.elementsViewed.add(inviewportElementid);\n }\n\n return returnProducts;\n }\n\n /**\n * Crea un observer personalizado para reaccionar a la visibilidad de elementos que no\n * tienen lógica para notificar sus cambios.\n */\n public actionWhenVisibleCustomObserver(\n element: Element,\n overrideConfig?: Partial\n ) {\n this.observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n this.actionWhenVisibleAsyncCallback(\n null,\n { entry, element: null, isIntersectingByConfig: true },\n null,\n null,\n false,\n overrideConfig\n );\n }\n }, { threshold: [...this.getThreshold(overrideConfig)], rootMargin: overrideConfig?.rootMargin });\n this.observer.observe(element);\n }\n\n public unobserve(element: Element): void {\n this.observer.unobserve(element);\n }\n\n /** Calculo \"manual\" del ratio de intersección de un elemento para los casos en los que\n * alguna opición del observer provoque que el que sea proporcionado en el callback no\n * se corresponda exactamente al ratio del elemento objetivo.\n */\n private calculateIntersectionRatioByTarget(window: CommonWindow, entry: IntersectionObserverEntry) {\n const targetRect = entry.boundingClientRect;\n\n const actualRootRect = {\n bottom: window.innerHeight, // coordinate\n height: window.innerHeight, // size\n left: 0, // coordinate\n right: window.innerWidth, // coordinate\n top: 0, // coordinate\n width: window.innerWidth, // size\n };\n\n const intersectionWidth = Math.max(\n 0,\n Math.min(targetRect.right, actualRootRect.right) - Math.max(targetRect.left, actualRootRect.left)\n );\n const intersectionHeight = Math.max(\n 0,\n Math.min(targetRect.bottom, actualRootRect.bottom) - Math.max(targetRect.top, actualRootRect.top)\n );\n const intersectionArea = intersectionWidth * intersectionHeight;\n\n const targetArea = targetRect.width * targetRect.height;\n\n // Calcular intersectionRatio real\n const realIntersectionRatio = targetArea > 0 ? intersectionArea / targetArea : 0;\n\n return realIntersectionRatio;\n }\n\n /** Callback con temporizador para los casos donde unas condiciones se deben cumplir\n * durante un tiempo para considerar el elemento visible.\n */\n private asyncCallbackTimeout(\n state: ViewItemCallbackState,\n entry: IntersectionObserverEntry,\n product: ViewItemProduct,\n viewItemOrigin: ViewItemOrigin,\n timeoutTime: number,\n overrideConfig?: Partial\n ): number {\n return setTimeout(() => {\n this.actionWhenVisibleAsyncCallback(\n state,\n { entry, element: null, isIntersectingByConfig: true },\n product,\n viewItemOrigin,\n true,\n overrideConfig\n );\n }, timeoutTime) as unknown as number;\n }\n\n private getThreshold(overrideConfig?: Partial): number[] {\n if (ViewItemService.isFirstBatch) return overrideConfig?.firstTimeViewTreshold || this.config.firstTimeViewTreshold;\n return overrideConfig?.standardViewTreshold || this.config.standardViewTreshold;\n }\n\n private handleZenitLogic(\n state: ViewItemCallbackState,\n isIntersectingByConfig: boolean,\n entry: IntersectionObserverEntry,\n product: ViewItemProduct,\n viewItemOrigin: ViewItemOrigin,\n timeoutEnd: boolean,\n ): void {\n if (!product) {\n return;\n }\n // Si el producto es visible y no se ha visto previamente registra el producto para evitar duplicación e inicia el temporizador de 1s\n if (isIntersectingByConfig && !timeoutEnd\n && state.productViewedZenit?.id !== product?.id\n ) {\n state.productViewedZenit = product;\n state.timer = this.asyncCallbackTimeout(state, entry, product, viewItemOrigin, 1000);\n }\n // Si el producto deja de ser visible y es un producto registrado limpia el temporizador y elimina los registros de este y el producto\n // biome-ignore lint/complexity/useSimplifiedLogicExpression: \n if (!isIntersectingByConfig && !timeoutEnd\n && state.productViewedZenit?.id === product?.id\n ) {\n this.clearTimerOnProductNotVisible(state);\n }\n // Si ha finalizado el temporizador mientras el producto está visible lanza el evento de producto visto para Zenit\n if (timeoutEnd && isIntersectingByConfig) {\n this.zenitProductVisible(entry, viewItemOrigin, product);\n }\n }\n\n private clearTimerOnProductNotVisible(state: ViewItemCallbackState) {\n clearTimeout(state.timer);\n state.timer = undefined;\n state.productViewedZenit = undefined;\n }\n\n private zenitProductVisible(\n entry: IntersectionObserverEntry,\n viewItemOrigin: ViewItemOrigin,\n product: ViewItemProduct,\n ): void {\n const inviewportElementId = entry.target.getAttribute(INVIEWPORT_ID_ATTRIBUTE_NAME);\n\n this.store.dispatch(ZenitListItemVisible({\n eventFrom: viewItemOrigin.eventFrom,\n inviewportElementId,\n place: viewItemOrigin.place,\n product,\n relatedsSectionId: viewItemOrigin.relatedsSectionId,\n }));\n }\n\n private handleGA4Logic(\n state: ViewItemCallbackState,\n product: ViewItemProduct,\n place: ProductViewPlace,\n intersectionData: ViewItemCallbackIntersectionData,\n eventFrom: EventFrom,\n overrideConfig?: Partial\n ): void {\n const gridLocations = ['PRODUCT_GRID', 'PRODUCT_CUSTOM_CATEGORY'];\n if (state?.isFirstTime) state.productViewedGA4 = undefined;\n /** Reutilizar primera condicion si se quiere utilizar con listas de productos, si se requirieren condiciones diferentes para otros casos crear nuevo IF */\n // Si se ha proporcionado un producto que está en un grid, es visible y no se ha visto previamente registra el producto y envia el evento de producto visto para GA4\n if (product?.id && gridLocations.includes(place)\n && intersectionData.isIntersectingByConfig\n && state?.productViewedGA4?.id !== product?.id) {\n this.ga4ProductVisible(state, product, intersectionData, eventFrom);\n\n // Enviar lo que hay en el buffer cuando se especifica en la overrideConfig o cuando se llega al final de un elemento espeficicado\n // (Ej. Enviar el resto de productos pendientes de enviar al llegar al final de una parrilla)\n } else if (overrideConfig?.isOnce && intersectionData.entry.boundingClientRect.bottom < window.innerHeight) {\n this.ga4PassThroughCallback(eventFrom, intersectionData);\n }\n }\n\n private ga4ProductVisible(\n state: ViewItemCallbackState,\n product: ViewItemProduct,\n intersectionData: ViewItemCallbackIntersectionData,\n eventFrom: EventFrom\n ): void {\n state.productViewedGA4 = product;\n state.isFirstTime = false;\n const inviewportElementId = intersectionData.entry.target.getAttribute(INVIEWPORT_ID_ATTRIBUTE_NAME);\n\n this.store.dispatch(Ga4ItemListVisible({\n eventFrom,\n inviewportElementId,\n product,\n }));\n }\n\n private ga4PassThroughCallback(eventFrom: EventFrom, intersectionData: ViewItemCallbackIntersectionData): void {\n this.store.dispatch(Ga4ItemListVisible({\n eventFrom,\n product: undefined,\n isPassthrough: true,\n }));\n if (this.observer) this.observer.unobserve(intersectionData.entry.target);\n }\n\n private actionWhenVisibleAsyncCallback(\n state: ViewItemCallbackState,\n intersectionData: ViewItemCallbackIntersectionData,\n product: ViewItemProduct,\n viewItemOrigin: ViewItemOrigin | null,\n timeoutEnd: boolean,\n overrideConfig?: Partial\n ): void {\n this.handleZenitLogic(\n state,\n intersectionData.isIntersectingByConfig,\n intersectionData.entry,\n product,\n viewItemOrigin,\n timeoutEnd\n );\n this.handleGA4Logic(\n state,\n product,\n viewItemOrigin?.place,\n intersectionData,\n viewItemOrigin?.eventFrom,\n overrideConfig\n );\n }\n\n private getCountProductsActualInBuffer() {\n return this.productsBuffer.reduce((acc, value) => {\n if (value.gridElemType === 'BUNDLE') {\n return value.bundleProducts.length + acc;\n }\n return acc + 1;\n }, 0);\n }\n\n private getCountWithNewProduct(product: ProductPublicModels.PublicProduct) {\n let countWithNewProduct = this.getCountProductsActualInBuffer() ?? 0;\n\n if (product?.gridElemType === 'BUNDLE') {\n countWithNewProduct += product.bundleProducts.length;\n } else {\n countWithNewProduct += 1;\n }\n\n return countWithNewProduct;\n }\n\n private getReturnProducts(\n product: ProductPublicModels.PublicProduct,\n isPassthrough: boolean,\n isReset?: boolean,\n overrideConfig?: Partial\n ): ProductPublicModels.PublicProduct[] {\n let returnProducts: ProductPublicModels.PublicProduct[] = [];\n\n const countWithNewProduct = this.getCountWithNewProduct(product);\n if (countWithNewProduct > (overrideConfig?.itemsBatch || this.config.itemsBatch) || isPassthrough) {\n ViewItemService.isFirstBatch = false;\n returnProducts = this.productsBuffer;\n this.productsBuffer = [];\n if (isReset) {\n this.resetIsFirstBatch();\n }\n }\n\n return returnProducts;\n }\n\n private addDataToProduct(product: ProductPublicModels.PublicProduct, data: { idMedia: string }): ViewItemProduct {\n const _product: ViewItemProduct = product;\n if (data?.idMedia) {\n return {\n ..._product,\n idMedia: data?.idMedia,\n };\n }\n return _product;\n }\n}\n","import { ZenitEventName, ZenitEventParam } from '../models/zenit-general.model';\n\nexport const ZenitEventsContextConfigs: Record = {\n PageHit: [\n 'brandId',\n 'categoryId',\n 'categoryURL',\n 'catentryId',\n 'currency',\n 'displayLanguage',\n 'experiments',\n 'pageType',\n 'partnumber',\n 'section',\n 'storeId',\n 'universe',\n ],\n AddToCart: [\n 'brandId',\n 'cartId',\n 'categoryId',\n 'categoryURL',\n 'catentryId',\n 'displayLanguage',\n 'experiments',\n 'isRecommended',\n 'list',\n 'listPosition',\n 'pageType',\n 'partnumber',\n 'recommender',\n 'section',\n 'skus',\n 'storeId',\n 'universe',\n ],\n Click: [\n 'action',\n 'assetId',\n 'brandId',\n 'categoryId',\n 'categoryURL',\n 'catentryId',\n 'displayLanguage',\n 'experiments',\n 'isRecommended',\n 'list',\n 'listPosition',\n 'pageType',\n 'partnumber',\n 'personalization',\n 'quantity',\n 'recommender',\n 'section',\n 'sku',\n 'storeId',\n 'templateType',\n // 'suggestions', // Funcionalidad actualmente no implementada en el buscador de MD\n 'universe',\n 'viewOrigin',\n 'zoomLevel',\n ],\n ImpressionsHit: [\n 'assetId',\n 'brandId',\n 'categoryId',\n 'categoryURL',\n 'catentryId',\n 'displayLanguage',\n 'experiments',\n 'list',\n 'listPosition',\n 'pageType',\n 'partnumber',\n 'personalization',\n 'section',\n 'storeId',\n 'templateType',\n 'universe',\n 'viewOrigin',\n 'zoomLevel',\n ],\n PurchaseConfirmed: [\n 'cartId',\n 'currency',\n 'displayLanguage',\n 'experiments',\n 'items',\n 'storeId',\n ],\n SearchAssistant: [\n 'pageType',\n 'storeId',\n 'brandId',\n 'section',\n 'displayLanguage',\n 'searchRequestHTTPResponseCode',\n 'searchRequestMethodName',\n 'searchRequestQuery',\n 'searchRequestResponseTime',\n 'searchRequestResultsNum',\n 'searchRequestLocale',\n 'searchRequestOffset',\n 'searchRequestLimit',\n 'searchRequestFilters',\n 'searchRequestProvider',\n 'searchRequestPass',\n 'universe',\n ],\n};\n\nexport const modalsIncluded: string[] = [\n 'shop-cart-packagin',\n];\n","import { Payload } from '../models/payload.model';\n\n/**\n * Obtiene el valor de una cookie según su nombre\n * @param cookies cookies en el navegador\n * @param cname nombre de la cookie a obtener el valor\n * @returns\n */\nexport const getCookie = (cookies: string, cname: string): string => {\n const name = `${cname}=`;\n const decodedCookie = decodeURIComponent(cookies);\n const ca = decodedCookie.split(';');\n\n for (const c of ca) {\n let _c = c;\n while (_c.startsWith(' ')) {\n _c = _c.substring(1);\n }\n if (_c.startsWith(name)) {\n return _c.substring(name.length, _c.length);\n }\n }\n return null;\n};\n\n/**\n * Unique identifier of a user session\n * Must be the same during a complete interaction of an user and keep the same value in all kindof events\n * This is the ITXSESSIONID injected by Akamai\n *\n * @returns string\n */\nexport const getSessionId = (cookies: string): string => {\n return getCookie(cookies, 'ITXSESSIONID');\n};\n\n/**\n * UNIX Epoch in milliseconds when the event occurred in local time\n *\n * @returns number\n */\nexport const getTimestamp = (): number => {\n return Date.now();\n};\n\n/**\n * Content of the event, information associated with the event\n *\n * @param context\n * @returns Payload\n */\nexport const getPayload = (context: any, cookies: string): Payload => {\n return {\n context,\n sessionId: getSessionId(cookies),\n timestamp: getTimestamp(),\n };\n};\n","/* eslint-disable pii/no-phone-number */\n\nimport { Payload } from '../payload.model';\nimport { ZenitList, Section, ZenitEventName, ZenitPageType, ZenitPersonalizationParam, ZenitZoomLevel, ZenitUniverse } from '../zenit-general.model';\n\nimport { BasicEvent } from './basic-event.model';\nimport { ZenitExperiments } from './page-hit-event.model';\n\n/**\n * Version of the Click event\n */\ntype Version = '2';\n\nexport interface ClickEvent extends BasicEvent {\n /** Type of the event. Must be Click */\n eventName: ZenitEventName.Click;\n payload: Payload;\n version: Version;\n}\n\nexport interface ClickContext {\n /** Indicates the type of click the user is performing */\n action: ZenitClickAction;\n /** Code that identifies the view/image that is presented to the user when visualizing certain product(s). The value corresponds an id associated to a different type of image/view of the product, It can be found in the extraInfo of the xmedia at the color level. */\n assetId: string;\n /** Brandcode associated with the selected item [Bershka: 4, Lefties: 8, MassimoDutti: 11, Oysho: 7, Pull&Bear: 2, Stradivarius: 6, Uterqüe: 18, Zara: 1, 16, ZaraHome: 14] */\n brandId: 11;\n /** Numeric identifier of a category */\n categoryId: number | null;\n /** Alternative identifier of a category-id for those brands which cannot use/retrieve the category-id */\n categoryURL: string | null;\n /** Unique identifier of the product entry in a category */\n catentryId: number;\n /** Locale style ISO-639 Language Code followed by ISO-3166 Country Code, examples: es_ES, es_MX */\n displayLanguage: string;\n /** Metadata of the different active experimentation providers present along users navigation */\n experiments: ZenitExperiments;\n isRecommended: boolean;\n /** Which element of the user interface was used to add the item to the cart. Must be one of the enum list */\n list: ZenitList;\n /** The position on the list of the element added to cart (only when adding from list) */\n listPosition: number | null;\n /** Type of page that user from which the product is added. Must be one of the list */\n pageType: ZenitPageType;\n /** The Partnumber uniquely identifies any element in the catalog. Must have the format as in the next example: \"C01165402712000-V2023\". NOTE: If value cannot be sent use a code value of -1' */\n partnumber: string;\n /** Personalization-related information */\n personalization: ZenitPersonalizationParam;\n quantity: number;\n recommender: string;\n /** Section that user is accessing. Must be one of the enum list */\n section: Section | null;\n /** SKU identifier including associated campaign. This is MOCACOTA (MOdelo, CAlidad, COlor, TAlla) */\n sku: string;\n /** Ecommerce Online Store Id - References OnlineStore entity */\n storeId: number;\n /** Properties related with the suggestions offered in the search assistant */\n suggestions: any; // NOTE: Funcionalidad actualmente no implementada en el buscador de MD\n /** Type of template used to display items on grid (In ZA corresponds with the GA dimension -> pr1cd198) */\n templateType: string;\n /** Associated section to the menu that the user interacts with IMPORTANT Must be one of the enumerated list */\n universe: ZenitUniverse;\n /** Code that identifies the view/image that is presented to the user when visualizing certain product(s) The value corresponds to different identifiers (p, e0, a1, ult, ...) associated to a different type of image/view of the product */\n viewOrigin: string;\n /** Zoom level applied to the displayed items grid */\n zoomLevel: ZenitZoomLevel;\n}\n\nexport enum ZenitClickAction {\n 'add-color-filter' = 'add-color-filter',\n 'add-price-filter' = 'add-price-filter',\n 'add-qty' = 'add-qty',\n 'add-size-filter' = 'add-size-filter',\n 'add-to-cart' = 'add-to-cart',\n 'add-to-wishlist' = 'add-to-wishlist',\n 'click-banner-home' = 'click-banner-home',\n 'close' = 'close',\n 'home' = 'home',\n 'init-search' = 'init-search',\n 'menu-close-subsection' = 'menu-close-subsection',\n 'menu-open-category' = 'menu-open-category',\n 'menu-open-subsection1' = 'menu-open-subsection1',\n 'menu-open-universe' = 'menu-open-universe',\n 'menu-open' = 'menu-open',\n 'open-qr' = 'open-qr',\n 'remove-all-filter' = 'remove-all-filter',\n 'remove-filter' = 'remove-filter',\n 'remove-from-cart' = 'remove-from-cart',\n 'remove-from-wishlist' = 'remove-from-wishlist',\n 'remove-qty' = 'remove-qty',\n 'select-color' = 'select-color',\n 'select-item' = 'select-item',\n 'select-size-recommended' = 'select-size-recommended',\n 'select-size' = 'select-size',\n 'share' = 'share',\n 'swipe-home' = 'swipe-home',\n 'swipe-image' = 'swipe-image',\n 'swipe-pdp' = 'swipe-pdp',\n 'top-sibling-category' = 'top-sibling-category',\n}\n","/* eslint-disable no-secrets/no-secrets */\n/* eslint-disable pii/no-phone-number */\nimport { AddToCartContext, AddToCartEvent } from './events/add-to-cart.model';\nimport { ClickContext, ClickEvent, ZenitClickAction } from './events/click.model';\nimport { ImpressionsHitContext, ImpressionsHitEvent } from './events/impressions-hit.model';\nimport { PageHitContext, PageHitEvent } from './events/page-hit-event.model';\nimport { PurchaseConfirmedContext, PurchaseConfirmedEvent } from './events/purchase-confirmed.model';\n\nimport { CartItem } from '@api/cart/cart.models';\nimport { CurrencyInfo } from '@core/domain/models/store.models';\nimport { EmpathySearcherOrigin } from '@core/domain/types/empathy-searcher-origin.type';\nimport { PageSection } from '@core/domain/types/page-sections.types';\nimport { ProductPublicModels } from '@features/products/product';\nimport { ProductsArray } from '@features/products/productsArray/domain/models/productsArray.models';\nimport { SidebarCustomComponents } from '@features/sidebar';\nimport { GridElement } from '@pages/category/modules/category-grid/public_api';\n// import { QueryResult, SearchType } from '@features/search';\nimport { QueryResult, SearchType } from '@pages/search';\nimport { AnalyticsClickSourceID, ItemTypes } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { ViewItemProduct } from '@shared/analytics/COMMON/services/product-view/view-item.service';\nimport {\n SearchAssistantContext,\n SearchAssistantEvent,\n} from '@shared/analytics/ZENIT/models/events/search-assistant.model';\nimport { ProductViewPlace } from '@shared/product/models';\nimport { RelatedsPlace } from '@shared/product/related-products/infrastructure/state/related-products.state';\nimport { GridType } from '@shared/ui/models/grid-type.model';\n\nexport enum ZenitEventName {\n AddToCart = 'AddToCart',\n Click = 'Click',\n ImpressionsHit = 'ImpressionsHit',\n PageHit = 'PageHit',\n PurchaseConfirmed = 'PurchaseConfirmed',\n SearchAssistant = 'SearchAssistant',\n}\n\nexport type ZenitEvent =\n AddToCartEvent |\n ClickEvent |\n ImpressionsHitEvent |\n PageHitEvent |\n PurchaseConfirmedEvent |\n SearchAssistantEvent;\n\nexport interface ZenitEventValues {\n brandId?: 16;\n cartId?: number;\n cartItems?: CartItem[];\n categoryId?: string;\n categoryUrl?: string;\n currency?: CurrencyInfo;\n currentUrl?: string;\n displayLanguage?: string;\n filteredProductsIds?: number[];\n isSelectedAddress?: boolean;\n item?: CartItem | ProductPublicModels.PublicProduct;\n items?: ItemTypes[];\n page?: PageSection;\n pageGridElements?: GridElement[];\n productPageProduct?: ProductPublicModels.PublicProduct;\n productsArray?: ProductsArray;\n queryResults?: QueryResult[];\n recommenderSize?: string;\n relatedProductsPlaces?: Record;\n searchRequestFilters?: string;\n searchRequestOffset?: number;\n searchRequestQuery?: string;\n searchType?: SearchType;\n section?: string;\n selectedViewPickup?: 'list' | 'map';\n sidebarComponent?: SidebarCustomComponents;\n sidebarData?: Record;\n storeId?: string;\n wishListItems?: ProductPublicModels.PublicProduct[];\n zoomLevel?: GridType;\n}\n\nexport interface ZenitEventData {\n action?: ZenitClickAction;\n items?: ItemTypes[] | ViewItemProduct[];\n origin?: EmpathySearcherOrigin | SearchType;\n place?: ProductViewPlace;\n provider?: string;\n quantity?: number;\n relatedsSectionId?: string;\n responseCode?: number;\n clickSourceID?: AnalyticsClickSourceID;\n responseTime?: number;\n searchPass?: string;\n searchTerm?: string;\n totalHits?: string | number;\n totalResults?: number;\n}\n\n// Parámetros existentes de los eventos de Zenit\nexport type ZenitEventParam =\n keyof AddToCartContext\n | keyof ClickContext\n | keyof ImpressionsHitContext\n | keyof PageHitContext\n | keyof PurchaseConfirmedContext\n | keyof SearchAssistantContext;\n\nexport enum ZenitPageType {\n BUY_AGAIN = 'BUY_AGAIN',\n CATEGORY_VIEW = 'CATEGORY_VIEW',\n CHAT = 'CHAT',\n CHECKOUT_ADD_PERSONAL_DETAILS = 'CHECKOUT_ADD_PERSONAL_DETAILS',\n CHECKOUT_DROP_POINT_DETAIL = 'CHECKOUT_DROP_POINT_DETAIL',\n CHECKOUT_DROP_POINT_LIST = 'CHECKOUT_DROP_POINT_LIST',\n CHECKOUT_DROP_POINT_MAP = 'CHECKOUT_DROP_POINT_MAP',\n CHECKOUT_EXPRESS_STORE_DETAIL = 'CHECKOUT_EXPRESS_STORE_DETAIL',\n CHECKOUT_EXPRESS_STORE_LIST = 'CHECKOUT_EXPRESS_STORE_LIST',\n CHECKOUT_HOME_ADDRESS_LIST = 'CHECKOUT_HOME_ADDRESS_LIST',\n CHECKOUT_MODIFY_PERSONAL_DETAILS = 'CHECKOUT_MODIFY_PERSONAL_DETAILS',\n CHECKOUT_ORDER_REVIEW = 'CHECKOUT_ORDER_REVIEW',\n CHECKOUT_PAYMENT_METHOD = 'CHECKOUT_PAYMENT_METHOD',\n CHECKOUT_REPAYMENT = 'CHECKOUT_REPAYMENT',\n CHECKOUT_SHIPPING_METHOD = 'CHECKOUT_SHIPPING_METHOD',\n CHECKOUT_STORE_COLLECTION_POINT_MAP = 'CHECKOUT_STORE_COLLECTION_POINT_MAP',\n CHECKOUT_STORE_DETAIL = 'CHECKOUT_STORE_DETAIL',\n CHECKOUT_STORE_LIST = 'CHECKOUT_STORE_LIST',\n CHECKOUT_TYPE_DELIVERY_METHOD = 'CHECKOUT_TYPE_DELIVERY_METHOD',\n COMING_SOON_CONFIRMATION = 'COMING_SOON_CONFIRMATION',\n CONTACT = 'CONTACT',\n E_GIFTCARD = 'E-GIFTCARD',\n E_GIFTCARD_ACTIVATION = 'E_GIFTCARD_ACTIVATION',\n E_GIFTCARD_BALANCE = 'E_GIFTCARD_BALANCE',\n GIFT_OPTIONS = 'GIFT_OPTIONS',\n GIFTCARD = 'GIFTCARD',\n HELP_CENTER = 'HELP_CENTER',\n HOME = 'HOME',\n HOME_LOYALTY = 'HOME_LOYALTY',\n LOOKBOOK = 'LOOKBOOK',\n MIX_MATCH_DETAIL = 'MIX_MATCH_DETAIL',\n MIX_MATCH_LIST = 'MIX_MATCH_LIST',\n MULTI_WISHLIST = 'MULTI_WISHLIST',\n MY_ACCOUNT_ACCESS_DETAILS = 'MY_ACCOUNT_ACCESS_DETAILS',\n MY_ACCOUNT_ADDRESSES = 'MY_ACCOUNT_ADDRESSES',\n MY_ACCOUNT_APPOINTMENTS = 'MY_ACCOUNT_APPOINTMENTS',\n MY_ACCOUNT_LOYALTY_BENEFITS = 'MY_ACCOUNT_LOYALTY_BENEFITS',\n MY_ACCOUNT_LOYALTY_HISTORY = 'MY_ACCOUNT_LOYALTY_HISTORY',\n MY_ACCOUNT_LOYALTY_HOW_IT_WORKS = 'MY_ACCOUNT_LOYALTY_HOW_IT_WORKS',\n MY_ACCOUNT_MENU = 'MY_ACCOUNT_MENU',\n MY_ACCOUNT_NEWSLETTER = 'MY_ACCOUNT_NEWSLETTER',\n MY_ACCOUNT_ORDER_RETURNS_EXCHANGES_ITEMS = 'MY_ACCOUNT_ORDER_RETURNS_EXCHANGES_ITEMS',\n MY_ACCOUNT_ORDERS_LIST_IN_STORE = 'MY_ACCOUNT_ORDERS_LIST_IN_STORE',\n MY_ACCOUNT_ORDERS_LIST_ONLINE = 'MY_ACCOUNT_ORDERS_LIST_ONLINE',\n MY_ACCOUNT_PERSONAL_DETAILS = 'MY_ACCOUNT_PERSONAL_DETAILS',\n MY_ACCOUNT_RETURNS_LIST = 'MY_ACCOUNT_RETURNS_LIST',\n MY_ACCOUNT_WALLET = 'MY_ACCOUNT_WALLET',\n NEWSLETTER_SUBSCRIBE_VIEW = 'NEWSLETTER_SUBSCRIBE_VIEW',\n NEWSLETTER_UNSUBSCRIBE_VIEW = 'NEWSLETTER_UNSUBSCRIBE_VIEW',\n ORDER_TRACK = 'ORDER_TRACK',\n PAGE_NOT_FOUND = 'PAGE_NOT_FOUND',\n PASSWORD_RECOVERY = 'PASSWORD_RECOVERY',\n PASSWORD_RECOVERY_RESET = 'PASSWORD_RECOVERY_RESET',\n PRODUCT_BUNDLE_DETAILS = 'PRODUCT_BUNDLE_DETAILS',\n PRODUCT_DETAILS = 'PRODUCT_DETAILS',\n PRODUCT_LIST = 'PRODUCT_LIST',\n PRODUCT_SEARCH_RESULTS = 'PRODUCT_SEARCH_RESULTS',\n PRODUCT_SEARCH_START = 'PRODUCT_SEARCH_START',\n PRODUCT_SET_DETAILS = 'PRODUCT_SET_DETAILS',\n PURCHASE_ORDER_END = 'PURCHASE_ORDER_END',\n RETURNABLE_PRODUCTS_SELECTOR = 'RETURNABLE_PRODUCTS_SELECTOR',\n SAVE_FOR_LATER = 'SAVE_FOR_LATER',\n SEARCH_REQUEST = 'SEARCH_REQUEST',\n SHOP_LOCATOR = 'SHOP_LOCATOR',\n SHOPPING_CART = 'SHOPPING_CART',\n SHOPPING_CART_EMPTY = 'SHOPPING_CART_EMPTY',\n STORE_DETAIL = 'STORE_DETAIL',\n SURPRISE_ME = 'SURPRISE_ME',\n UNKNOWN = 'UNKNOWN',\n USER_LOGON = 'USER_LOGON',\n USER_LOYALTY_CHECK = 'USER_LOYALTY_CHECK',\n USER_LOYALTY_TICKET = 'USER_LOYALTY_TICKET',\n USER_REGISTRATION = 'USER_REGISTRATION',\n USER_REGISTRATION_CONFIRMATION = 'USER_REGISTRATION_CONFIRMATION',\n VIRTUAL_TRY_ON = 'VIRTUAL_TRY_ON',\n WORLDWIDE = 'WORLDWIDE',\n}\n\n/** Actualmente equivalente a la propiedad \"section\" debido a que solo existen los \"universe\" WOMAN y MAN */\nexport enum ZenitUniverse {\n 'MAN' = 'MAN',\n 'WOMAN' = 'WOMAN',\n 'KID' = 'KID',\n 'Z3D' = 'Z3D',\n 'BEAUTY' = 'BEAUTY',\n 'HOME' = 'HOME',\n 'MASSIMO DUTTI' = 'MASSIMO DUTTI',\n 'ZARA PRE-OWNED' = 'ZARA PRE-OWNED',\n 'SAPATOS' = 'SAPATOS',\n 'BOLSAS' = 'BOLSAS',\n}\n\nexport enum ZenitList {\n alternativeColours = 'alternative-colours',\n alternativeResults = 'alternative-results',\n bundle = 'bundle',\n buyAgain = 'buy-again',\n buyLater = 'buy-later',\n crossCustomPdp = 'cross-custom-pdp',\n crossCustomToast = 'cross-custom-toast',\n crossRecommendation = 'cross-recommendation', // Zara Home\n crossRecommendationPdp = 'cross-recommendation-pdp',\n crossSellingCart = 'cross-selling-cart',\n crossSellingPdp = 'cross-selling-pdp',\n crossSellingToast = 'cross-selling-toast',\n crossSimilarBackSoon = 'cross-similar-back-soon',\n crossSimilarComingSoon = 'cross-similar-coming-soon',\n crossSimilarCustomPdp = 'cross-similar-custom-pdp',\n crossSimilarGrid = 'cross-similar-grid',\n crossSimilarPdp = 'cross-similar-pdp',\n crossSimilarSearchResults = 'cross-similar-search-results',\n crossViewedRecently = 'cross-viewed-recently',\n edited = 'edited',\n grid = 'grid',\n matchWith = 'match-with',\n mayAlsoLike = 'may-also-like',\n noList = 'no-list',\n noListUndefined = 'no-list-undefined',\n noResultsFallback = 'no-results-fallback',\n saveForLater = 'save-for-later',\n searchAlternativeColours = 'search-alternative-colours',\n searchAlternativeResults = 'search-alternative-results',\n searchCrossCustom = 'search-cross-custom',\n searchNoResultsFallback = 'search-no-results-fallback',\n searchResults = 'search-results',\n searchSimilarQuery = 'search-similar-query',\n searchSuggestedProduct = 'search-suggested-product',\n shoppingCart = 'shopping-cart',\n sizeList = 'size-list',\n sizeRecommender = 'size-recommender',\n stradishoppers = 'stradishoppers',\n suggestedProduct = 'suggested-product',\n suggestedSearchResults = 'suggested-search-results',\n wishlist = 'wishlist',\n}\n\nexport enum Section {\n MEN = 'MAN',\n WOMEN = 'WOMAN',\n KID = 'KID',\n UNKNOWN = 'UNKNOWN',\n}\n\nexport enum ZenitZoomLevel {\n ZOOM1 = 'ZOOM1',\n ZOOM2 = 'ZOOM2',\n ZOOM3 = 'ZOOM3',\n}\n\nexport interface ZenitItem {\n /* Total amount charged for this product in local currency, store currency */\n amount: number;\n /* Code of the brand that is selling this product [Bershka: 4, Lefties: 8, MassimoDutti: 11, Oysho: 7, Pull&Bear: 2, Stradivarius: 6, Uterqüe: 18, Zara: 1, 16, ZaraHome: 14] */\n articleBrandCode?: number;\n /* Unitary price of the product */\n price: number;\n /* SKU including campaign. This is MOCACOTA. Example: 0807324080005-I2021 */\n sku: string;\n /* Number of units purchased */\n units: number;\n section?: Section;\n brandId?: number;\n /** Code that identifies the view/image that is presented to the user when visualizing certain product(s) The value corresponds to different identifiers (p, e0, a1, ult, ...) associated to a different type of image/view of the product */\n viewOrigin: string;\n}\n\nexport interface ZenitPersonalizationParam {\n /** Objective of the personalization strategy. Examples: othersyoumaylike-cvr-divnone */\n objective?: string;\n /** Name of the recomendation provider. Examples: Google, YODA */\n provider: string;\n /** Name of the method or strategy followed in the recommendation. Examples: FBT, OYML, Similars */\n strategy?: string;\n /** Version of the strategy. Examples: 1.0, 2.0 */\n version?: string;\n /** This value is optional. Contains extra information about the personalization that could be gathered. */\n extra?: Record;\n}\n","// https://github.com/inditex/app-zenit/blob/develop/apis/rest/zenit/zenit-api.yml\n\n/**\n * Brand of the event\n * Must be one of: za, zh, md, oy, bk, pb, lf, st\n */\ntype Tenant = 'md';\n\n/**\n * Name of the application that is sending the request\n * Examples: com.inditex.zara.iphone\n */\ntype AppName = 'com.inditex.massimodutti';\n\n/**\n * Platform that is sending the request\n */\ntype Platform = 'web';\n\n/**\n * Consent given by the user\n * IMPORTANT No user information can be sent for the following markets [China-CN]\n *\n * @property {string} consentCategories\n * @property {string} [consentedDate]\n * @property {string} [tcString]\n * @property {string} [addtlString]\n * @property {string} [USPrivacyString]\n */\nexport interface PrivacyConsent {\n consentCategories: string;\n consentedDate?: string;\n tcString?: string;\n addtlString?: string;\n USPrivacyString?: string;\n}\n\n/**\n * User agent detailed information\n *\n * @property {AppName} appName\n * @property {string} appVersion\n * @property {Platform} platform\n * @property {string} uaString\n */\nexport interface UserAgent {\n appName: AppName;\n appVersion: string;\n platform: Platform;\n uaString?: string;\n UAITXID?: string;\n}\n\n/**\n * Google campaigns parámeters\n *\n * @property {string} source\n * @property {string} [medium]\n * @property {string} [campaign]\n * @property {string} [term]\n * @property {string} [content]\n * @property {string} [gclid]\n */\nexport interface Utm {\n source: string;\n medium?: string;\n campaign?: string;\n term?: string;\n content?: string;\n gclid?: string;\n}\n\n/**\n * @property {string} country\n * @property {string} [region]\n * @property {number} [regionGroupId]\n */\nexport interface Geo {\n country: string;\n region?: string;\n regionGroupId?: number;\n}\n\n/**\n * Device Operating System name if available, possible values: android, ios, ipados, linux, mac, windows\n */\nexport enum Os {\n android = 'android',\n ios = 'ios',\n ipados = 'ipados',\n linux = 'linux',\n mac = 'mac',\n windows = 'windows',\n}\n\n/**\n * Device types\n */\nexport enum Type {\n mobile = 'mobile',\n desktop = 'desktop',\n tablet = 'tablet',\n}\n\n/**\n * User device information sent with the event\n *\n * @property {Type} type\n * @property {Os} os\n * @property {string} [name]\n * @property {string} [language]\n * @property {string} [osVersion]\n * @property {string} [firebaseId]\n */\nexport interface Device {\n clientId: string;\n firebaseId?: string;\n language?: string;\n name?: string;\n os: Os;\n osVersion?: string;\n type: Type;\n}\n\n/**\n * Client identification generated by Inditex\n *\n * @property {string} userId\n * @property {string} token\n * @property {string} kind\n */\nexport interface Identity {\n userId?: string;\n token?: string;\n kind?: string;\n}\n\nexport interface TechnicalData {\n navigation: {\n url: string;\n };\n}\n\nexport interface Referrer {\n url: string;\n}\n\n/**\n * Common fields in different events\n *\n * @property {PrivacyConsent} privacy-consent\n * @property {Device} device\n * @property {Tenant} tenant\n * @property {UserAgent} user-agent\n * @property {Record} [extra]\n * @property {Geo} [geo]\n * @property {Utm} [utm]\n */\nexport interface BasicEvent {\n 'privacy-consent': PrivacyConsent;\n 'user-agent': UserAgent;\n device: Device;\n extra?: Record;\n geo?: Geo;\n identity: Identity;\n projectKey: string;\n technical: TechnicalData;\n tenant: Tenant;\n utm?: Utm;\n referrer?: Referrer;\n}\n","import SHA from 'sha.js';\n\nimport { Os, Type } from '../models/events/basic-event.model';\n\nimport { getCookie } from '@core/application/use-cases/cookies/get-cookie.use-case';\nimport { CommonWindow, Inditex } from '@core/domain/models/common-window.model';\nimport { CookieGroup, UserConsentPoliciesValues } from '@core/domain/models/user-consent.models';\nimport { Resolutions } from '@layout/domain/models/layout.models';\n\n/**\n * Saved values for each consent category\n * IMPORTANT: ID's (C000x) might be different according to your implementation\n * Standard ID's for OneTrust are the following:\n StrictlyNecessary = 'C0001'\n Analytics = 'C0002'\n FeaturesOrCustomization = 'C0003'\n Advertising = 'C0004'\n SocialMedia = 'C0005'\n *\n * @param cookieGroupMap\n * @returns string\n */\nexport const getConsentCategories = (cookieGroupMap: Record): string => {\n let consentCategories = '';\n for (const [key, value] of Object.entries(cookieGroupMap ?? {})) {\n consentCategories += `${key}:${value.allowed ? '1' : '0'}`;\n if (Object.keys(cookieGroupMap).indexOf(key) !== Object.keys(cookieGroupMap).length - 1) {\n consentCategories += ',';\n }\n }\n\n return consentCategories || null;\n};\n\nexport const getConsentedDate = (): string => {\n const cookieValue = getCookie(document.cookie, 'OptanonConsent');\n const propertyName = 'datestamp';\n\n if (cookieValue) {\n const properties = new URLSearchParams(cookieValue);\n const cookiePropertyValue = properties.get(propertyName);\n\n if (cookiePropertyValue) {\n // biome-ignore lint/nursery/useTopLevelRegex: \n const regex: RegExp = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{2}) (\\d{4}) (\\d{2}:\\d{2}:\\d{2}) (\\w{3}) (\\d{4}) \\(.+\\)/;\n const match: RegExpExecArray = regex.exec(cookiePropertyValue);\n\n if (match) {\n const [, dayOfWeek, month, day, year, time, , timezone] = match;\n\n return `${dayOfWeek}, ${day} ${month} ${year} ${time}+${timezone}`;\n }\n }\n }\n\n return null;\n};\n\n/**\n * Gets specific utm param from queryParams\n *\n * @param queryParams\n * @param param\n * @returns string\n */\nexport const getUtmParam = (inputUrl: string, param: string): string => {\n const url = new URL(inputUrl);\n // biome-ignore lint/nursery/useTopLevelRegex: \n const _param = /(gclid)/.exec(param) ? param : `utm_${param}`;\n return url.searchParams.get(_param) || null;\n};\n\n/**\n *\n * @param language\n * @returns string\n */\nexport const getLanguage = (language: string): string => {\n return language.replace('-', '_');\n};\n\n/**\n * Gets the client device type from the resolution (mobile|tablet|desktop)\n *\n * @param resolution\n * @returns Type\n */\nexport const getType = (resolution: Resolutions): Type => {\n let device: Type;\n\n if (resolution === Resolutions.MOBILE) {\n device = Type.mobile;\n } else if (resolution === Resolutions.TABLET) {\n device = Type.tablet;\n } else {\n device = Type.desktop;\n }\n\n return device;\n};\n\n/**\n * Gets the OS type from the userAgent string\n *\n * @param userAgent\n * @returns Os\n */\nexport const getOs = (userAgent: string): Os => {\n // biome-ignore lint/nursery/useTopLevelRegex: \n if (/(Android)\\s(\\S*)/.exec(userAgent)) return Os.android;\n // biome-ignore lint/nursery/useTopLevelRegex: \n if (/(iPhone|iPod|iPod touch);/.exec(userAgent)) return Os.ios;\n // biome-ignore lint/nursery/useTopLevelRegex: \n if (/(iPad;)/.exec(userAgent)) return Os.ipados;\n // biome-ignore lint/nursery/useTopLevelRegex: \n if (/(Macintosh;)/.exec(userAgent)) return Os.mac;\n // biome-ignore lint/nursery/useTopLevelRegex: \n if (/(Win64|Win32|Windows|Windows Phone\\s(\\S*));/.exec(userAgent)) return Os.windows;\n // biome-ignore lint/nursery/useTopLevelRegex: \n if (/(WebOS;)/.exec(userAgent)) return Os.android;\n // biome-ignore lint/nursery/useTopLevelRegex: \n if (/(Linux)\\s(\\S*)/.exec(userAgent)) return Os.linux;\n return null;\n};\n\n/**\n * Gets the client device OS version, examples: 15.4.1, 9\n *\n * @param userAgent\n * @returns string\n */\nexport const getOsVersion = (userAgent: string): string => {\n // biome-ignore lint/nursery/useTopLevelRegex: \n const match: string[] = /(Android|iPhone|iPad|iPod|webOS|BlackBerry|Windows Phone|Windows|Mac OS X|CPU OS|Linux)\\s\\w*\\s*\\d(\\w|\\.)+/.exec(userAgent);\n if (match) {\n const version = match[0].split(' ');\n return version[version.length - 1];\n }\n return null;\n};\n\nexport const getUserType = (userType: string): string => {\n return userType === 'R' ? 'registered' : 'guest';\n};\n\nexport const getUserIdToken = (userId: number) => {\n if (userId && userId !== -1002) {\n return SHA('sha256').update(userId.toString()).digest('hex');\n }\n return null;\n};\n\nexport const getReferrer = (_document: Document, window: CommonWindow, referredSent: boolean) => {\n if (!!_document.referrer && new URL(_document.referrer).host !== window.location.host && !referredSent) {\n return {\n url: _document.referrer,\n };\n }\n\n return null;\n};\n\nexport const getAppVersion = (inditex: Inditex): string => {\n return inditex?.iFrontVersion || null;\n};\n","import { CookieGroup, UserConsentPoliciesValues } from '@core/domain/models/user-consent.models';\n\ninterface RestrictedParamsConfig {\n requiredCookie: string;\n marketsNotAllowed: string[];\n}\n\n/**\n StrictlyNecessary = \"C0001\"\n Analytics = \"C0002\"\n FeaturesOrCustomization = \"C0003\"\n Advertising = \"C0004\"\n SocialMedia = \"C0005\"\n*/\nexport const restrictedParamsConfig: Record = {\n clientId: { // device\n requiredCookie: 'C0002',\n marketsNotAllowed: ['CN'],\n },\n gclid: { // utm\n requiredCookie: 'C0002',\n marketsNotAllowed: [],\n },\n kind: { // identity\n requiredCookie: 'C0002',\n marketsNotAllowed: ['CN'],\n },\n token: { // identity\n requiredCookie: 'C0002',\n marketsNotAllowed: ['CN'],\n },\n userId: { // identity\n requiredCookie: 'C0002',\n marketsNotAllowed: ['CN'],\n },\n UAITXID: { // user-agent\n requiredCookie: 'C0002',\n marketsNotAllowed: ['CN'],\n },\n};\n\nexport const filterRestrictedParams = (\n params: string[],\n cookieGroupMap: Record,\n currentStore: string\n) => {\n return params.filter((param) => {\n const paramConfig = restrictedParamsConfig[param];\n if (!paramConfig) return true;\n return cookieGroupMap && !paramConfig.marketsNotAllowed.includes(currentStore)\n && (!cookieGroupMap[paramConfig.requiredCookie] || cookieGroupMap[paramConfig.requiredCookie].allowed);\n });\n};\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { WINDOW } from '@ng-web-apis/common';\nimport { Store } from '@ngrx/store';\n\nimport * as BasicEventHelpers from '../../../helpers/basic-event.helper';\nimport * as DataConsentHelpers from '../../../helpers/data-consent.helper';\nimport { BasicEvent } from '../../../models/events/basic-event.model';\n\nimport { CommonWindow, OneTrustGeoLocationData } from '@core/domain/models/common-window.model';\nimport { CookieGroup, UserConsentPoliciesValues } from '@core/domain/models/user-consent.models';\nimport { CoreOneTrustService } from '@core/infrastructure/one-trust/one-trust.service';\nimport { getCountryCode } from '@core/infrastructure/state/core.selectors';\nimport { User } from '@features/user';\nimport { Resolutions } from '@layout/domain/models/layout.models';\nimport { getResolution } from '@layout/infrastructure/state/layout.selectors';\nimport { getReferredSent } from '@shared/analytics/store/analytics.selectors';\nimport * as PayloadHelpers from '@shared/analytics/ZENIT/helpers/payload.helper';\nimport { getUserSelector } from '@shared/user/store';\n\n@Injectable()\nexport class BasicEventParserService {\n // Cambiar a array de parámetros de configuración como los eventos??\n private readonly basicEventConfig: BasicEvent = {\n device: {\n language: null,\n // name: null, // No se puede obtener el nombre (marca-modelo) del cliente\n os: null,\n osVersion: null,\n type: null,\n clientId: null,\n },\n geo: {\n country: null,\n region: null,\n // regionGroupId: null, // No obtenermos este dato del servicio de geolocalización de OneTrust\n },\n identity: {\n userId: null,\n token: null,\n kind: null,\n },\n 'privacy-consent': {\n consentedDate: null,\n consentCategories: null,\n // tcString: null, // Parámetro relacionado con IAB, que no tenemos actualmente\n // addtlString: null, // Parámetro relacionado con IAB, que no tenemos actualmente\n // USPrivacyString: null, // Parámetro relacionado con IAB, que no tenemos actualmente\n },\n projectKey: null,\n tenant: null,\n utm: {\n gclid: null,\n source: null,\n medium: null,\n campaign: null,\n term: null,\n content: null,\n },\n technical: {\n navigation: {\n url: null,\n },\n },\n 'user-agent': {\n appName: null,\n appVersion: null,\n platform: null,\n uaString: null,\n UAITXID: null,\n },\n referrer: null,\n };\n\n constructor(\n private readonly store: Store,\n private readonly oneTrustService: CoreOneTrustService,\n @Inject(WINDOW) private readonly window: CommonWindow,\n @Inject(DOCUMENT) private readonly document: Document,\n ) { }\n\n public getBasicEvent(): BasicEvent {\n try {\n const resolution$$ = this.store.selectSignal(getResolution);\n const user$$ = this.store.selectSignal(getUserSelector);\n const countryCode$$ = this.store.selectSignal(getCountryCode);\n const referredSent$$ = this.store.selectSignal(getReferredSent);\n\n return this.getBasicEventObject(\n this.oneTrustService.getCookieGroupMap,\n this.oneTrustService.getGeoLocationData(),\n this.document.cookie,\n user$$(),\n countryCode$$(),\n this.window,\n resolution$$(),\n referredSent$$()\n );\n } catch {\n return null;\n }\n }\n\n private getBasicEventFilteredParams(\n cookieGroupMap: Record,\n currentStore: string\n ) {\n const _basicEventConfig = { ...this.basicEventConfig };\n const params = [];\n const getParamsList = (config) => {\n // biome-ignore lint/complexity/noForEach: \n Object.entries(config).forEach((entry) => {\n if (typeof entry[1] === 'object' && entry[1] !== null) {\n getParamsList(entry[1]);\n } else {\n params.push(entry[0]);\n }\n });\n };\n getParamsList(_basicEventConfig);\n\n return DataConsentHelpers.filterRestrictedParams(params, cookieGroupMap, currentStore);\n }\n\n private getBasicEventObject(\n cookieGroupMap: Record,\n geoLocationData: OneTrustGeoLocationData,\n cookiesString: string,\n user: User,\n storeCountryCode: string,\n window: CommonWindow,\n resolution: Resolutions,\n referredSent: boolean\n ): BasicEvent {\n const filteredParams = this.getBasicEventFilteredParams(cookieGroupMap, storeCountryCode);\n const basicEvent: BasicEvent = JSON.parse(JSON.stringify(this.basicEventConfig));\n\n // biome-ignore lint/complexity/noForEach: \n filteredParams.forEach((param) => {\n // ORDEN ALFABÉTICO\n switch (param) {\n case 'appName':\n basicEvent['user-agent'][param] = 'com.inditex.massimodutti';\n break;\n case 'appVersion':\n basicEvent['user-agent'][param] = BasicEventHelpers.getAppVersion(window?.inditex);\n break;\n case 'campaign':\n case 'content':\n case 'gclid':\n case 'medium':\n case 'source':\n case 'term':\n basicEvent.utm[param] = BasicEventHelpers.getUtmParam(window.location.href, param);\n break;\n case 'clientId':\n basicEvent.device[param] = PayloadHelpers.getCookie(cookiesString, '_ga');\n break;\n case 'consentCategories':\n basicEvent['privacy-consent'][param] = BasicEventHelpers.getConsentCategories(cookieGroupMap);\n break;\n case 'consentedDate':\n basicEvent['privacy-consent'][param] = BasicEventHelpers.getConsentedDate();\n break;\n case 'country':\n basicEvent.geo[param] = geoLocationData?.country;\n break;\n case 'kind':\n basicEvent.identity[param] = BasicEventHelpers.getUserType(user?.userType);\n break;\n case 'language':\n basicEvent.device[param] = BasicEventHelpers.getLanguage(window.navigator.language);\n break;\n case 'os':\n basicEvent.device[param] = BasicEventHelpers.getOs(window.navigator.userAgent);\n break;\n case 'osVersion':\n basicEvent.device[param] = BasicEventHelpers.getOsVersion(window.navigator.userAgent);\n break;\n case 'platform':\n basicEvent['user-agent'][param] = 'web';\n break;\n case 'projectKey':\n basicEvent[param] = 'webMD';\n break;\n case 'region':\n basicEvent.geo[param] = geoLocationData?.state;\n break;\n case 'tenant':\n basicEvent[param] = 'md';\n break;\n case 'token':\n basicEvent.identity[param] = BasicEventHelpers.getUserIdToken(user?.identity.userId);\n break;\n case 'type':\n basicEvent.device[param] = BasicEventHelpers.getType(resolution);\n break;\n case 'uaString':\n basicEvent['user-agent'][param] = window.navigator.userAgent;\n break;\n case 'userId':\n basicEvent.identity[param] = user?.identity.userId.toString();\n break;\n case 'url':\n basicEvent.technical.navigation[param] = window.location.href;\n break;\n case 'UAITXID':\n basicEvent['user-agent'][param] = PayloadHelpers.getCookie(cookiesString, 'UAITXID');\n break;\n case 'referrer':\n basicEvent.referrer = BasicEventHelpers.getReferrer(this.document, window, referredSent);\n break;\n }\n });\n\n return basicEvent;\n }\n}\n","/* eslint-disable no-secrets/no-secrets */\nimport { ZenitClickAction } from '../models/events/click.model';\nimport { ZenitExperiment, ZenitExperiments } from '../models/events/page-hit-event.model';\nimport {\n ZenitList,\n Section,\n ZenitEventData,\n ZenitEventName,\n ZenitEventValues,\n ZenitItem,\n ZenitPageType,\n ZenitPersonalizationParam,\n ZenitZoomLevel,\n} from '../models/zenit-general.model';\n\nimport { CartItem } from '@api/cart/cart.models';\nimport { GiftCard } from '@api/gift-card/models/gift-card.models';\nimport { CommonWindow } from '@core/domain/models/common-window.model';\nimport { CurrencyInfo } from '@core/domain/models/store.models';\nimport { PageSection } from '@core/domain/types/page-sections.types';\nimport { ProductPublicModels } from '@features/products/product';\nimport { SidebarCustomComponents } from '@features/sidebar';\nimport { GridElement } from '@pages/category/modules/category-grid/public_api';\nimport { LIMIT_QUERY_SEARCH, QueryResult, SearchType } from '@pages/search';\nimport { OptimizelyData, OptimizelyState, OptimizelyCampaignsState, OptimizelyExperiment } from '@shared/ab-testing/models/optimizely.models';\nimport { EventFrom, ItemTypes } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { eventFromParser } from '@shared/analytics/COMMON/services/analytics.utils';\nimport * as AnalyticsUtils from '@shared/analytics/COMMON/services/analytics.utils';\nimport { ViewItemProduct } from '@shared/analytics/COMMON/services/product-view/view-item.service';\nimport { SearchRequestMethodName } from '@shared/analytics/store/analytics.state';\nimport { SearchRequestFilter } from '@shared/analytics/ZENIT/models/events/search-assistant.model';\nimport { ProductViewPlace, ProductViewPlaceValue } from '@shared/product/models';\nimport { ProductUid } from '@shared/product/related-products/domain/models/related-products.models';\nimport { RelatedsPlace } from '@shared/product/related-products/infrastructure/state/related-products.state';\nimport { GridType, GridTypes } from '@shared/ui/models/grid-type.model';\n\n// #region Modelos\n\ninterface OriginDataParams {\n place?: ProductViewPlace;\n searchRequestQuery?: string;\n searchType?: SearchType;\n}\n\n// #endregion\n\n// #region Constantes\n\nconst RelatedPlaces = [\n EventFrom.backSoon,\n EventFrom.cartYoda,\n EventFrom.comingSoon,\n EventFrom.completeLook,\n EventFrom.completeLookYoda,\n EventFrom.frecuentlyBoughtTogether,\n EventFrom.othersYouMayLike,\n EventFrom.recentlyViewed,\n EventFrom.recommended_for_you,\n EventFrom.relateds,\n EventFrom.relatedsBuyed,\n EventFrom.similar,\n EventFrom.similaresYoda,\n EventFrom.topSales,\n];\n\nconst HELP_PAGES_REGEX = /\\/(help)(\\/\\w*)*/;\n\n// #endregion\n\n// #region Índice de item\n/* ## Funciones para calcular el índice de un item en listas ## */\n\nexport const getQueryResultsIndex = (\n item: ItemType & { id?: number | string; productId?: string },\n queryResults: QueryResult[],\n): number => {\n return queryResults?.find(product => product.id === item?.id)?.position;\n};\n\nexport const getItemListIndex = (\n item: ItemType & { id?: number | string; productId?: string },\n itemList: Array = []\n): number => {\n const itemId = typeof item?.id === 'number' ? item.id?.toString() : item?.id;\n const foundItem = itemList.find((_item) =>\n (_item?.id?.toString() || _item.productId) === (itemId || item?.productId));\n return itemList.indexOf(foundItem);\n};\n\nexport const getRelatedProduct = (\n item: { id?: number | string; productId?: string; moca?: string },\n place: ProductViewPlace,\n relatedsSectionId: string,\n relatedProductsPlaces: Record\n): ProductUid => {\n const carousel = relatedProductsPlaces?.[place]\n ?.carousels?.[relatedsSectionId];\n return carousel?.filteredItemsIds.find((prodUid) => {\n return item.id === prodUid?.product_id || item.moca === prodUid?.uid?.slice(1);\n });\n};\n\nexport const getRelatedProductIndex = (\n item: { id?: number | string; productId?: string; moca?: string },\n place: ProductViewPlace,\n relatedsSectionId: string,\n relatedProductsPlaces: Record\n): number => {\n const carousel = relatedProductsPlaces?.[place]\n ?.carousels?.[relatedsSectionId];\n return carousel?.filteredItemsIds.findIndex((prodUid) => {\n return item.id === prodUid?.product_id || item.moca === prodUid?.uid?.slice(1);\n });\n};\n\nexport const getProductItemIndex = (\n item: ItemType & { id?: number | string; productId?: string },\n eventFrom: EventFrom,\n values: ZenitEventValues,\n eventData: ZenitEventData\n): number | null => {\n let index: number;\n switch (eventFrom) {\n case EventFrom.search:\n case EventFrom.searchResults:\n return getQueryResultsIndex(item, values.queryResults);\n\n case EventFrom.parrilla:\n index = AnalyticsUtils.getProductCategoryIndex(\n undefined,\n item as unknown as ProductPublicModels.PublicProduct,\n values.filteredProductsIds,\n values.productsArray,\n );\n break;\n\n case EventFrom.productdetail:\n return null;\n\n case EventFrom.shopcart:\n index = getItemListIndex(item, values.cartItems as unknown as ItemType[]);\n break;\n\n case EventFrom.wishList:\n case EventFrom.miniWishList:\n index = getItemListIndex(item, values.wishListItems as unknown as ItemType[]);\n break;\n\n case EventFrom.fichaBundle:\n index = getItemListIndex(item, values?.productPageProduct.bundleProducts as unknown as ItemType[]);\n break;\n\n case EventFrom.cartYoda:\n case EventFrom.completeLook:\n case EventFrom.completeLookYoda:\n case EventFrom.frecuentlyBoughtTogether:\n case EventFrom.othersYouMayLike:\n case EventFrom.recentlyViewed:\n case EventFrom.recommended_for_you:\n case EventFrom.relateds:\n case EventFrom.relatedsBuyed:\n case EventFrom.similar:\n case EventFrom.similaresYoda:\n case EventFrom.topSales:\n index = getRelatedProductIndex(\n item,\n eventData?.place,\n eventData?.relatedsSectionId,\n values?.relatedProductsPlaces\n );\n break;\n\n default:\n index = item && values.items ? getItemListIndex(item, values.items as unknown as ItemType[]) : -1;\n break;\n }\n return index === -1 ? null : index + 1;\n};\n\n// #endregion\n\n// #region pageType\n\nexport const getCmsPagePageType = (currentUrl: string): ZenitPageType => {\n if (HELP_PAGES_REGEX.test(currentUrl)) {\n return ZenitPageType.HELP_CENTER;\n }\n return ZenitPageType.CATEGORY_VIEW;\n};\n\nexport const getPageTypeForSearch = (\n eventData: ZenitEventData,\n values: ZenitEventValues,\n eventFrom: EventFrom\n): ZenitPageType => {\n if (values?.page !== 'ItxSearchPage') return undefined;\n\n if (values?.searchRequestQuery === '') {\n return ZenitPageType.PRODUCT_SEARCH_START;\n }\n if ([EventFrom.search, EventFrom.searchResults].includes(eventFrom)\n // eslint-disable-next-line @typescript-eslint/no-extra-parens\n || (values?.searchRequestQuery !== '' && !eventData?.totalHits)) {\n return ZenitPageType.PRODUCT_SEARCH_RESULTS;\n }\n return undefined;\n};\n\nexport const getPageTypeByPage = (values: ZenitEventValues, place: ProductViewPlace): ZenitPageType => {\n // Special cases\n if (place === ProductViewPlaceValue.CS_BS) return ZenitPageType.COMING_SOON_CONFIRMATION;\n\n // Standard cases\n switch (values?.page) {\n case 'ItxAngularAuthenticationActivateFeelUserPage':\n return ZenitPageType.USER_LOYALTY_CHECK;\n case 'ItxAngularAuthenticationActivateUserPage':\n return ZenitPageType.USER_LOYALTY_TICKET;\n case 'ItxAngularAuthenticationConfirmationPage':\n return ZenitPageType.USER_REGISTRATION_CONFIRMATION;\n case 'ItxAngularAuthenticationPage':\n return ZenitPageType.USER_LOGON;\n case 'ItxAngularAuthenticationRecoveryPage':\n return values?.currentUrl?.includes('#resetPassword') ? ZenitPageType.PASSWORD_RECOVERY_RESET : ZenitPageType.PASSWORD_RECOVERY;\n case 'ItxAngularAuthenticationRegisterPage':\n return ZenitPageType.USER_REGISTRATION;\n case 'ItxAngularCmsRenderPage':\n return getCmsPagePageType(values?.currentUrl);\n case 'ItxAngularGiftCardActivationPage':\n return ZenitPageType.E_GIFTCARD_ACTIVATION;\n case 'ItxAngularGiftCardBalancePage':\n return ZenitPageType.E_GIFTCARD_BALANCE;\n case 'ItxAngularGiftCardPage':\n return ZenitPageType.GIFTCARD;\n case 'ItxAngularOrderConfirmationPage':\n case 'ItxAngularOrderConfirmationNodePage':\n case 'ItxOrderConfirmationPage':\n return ZenitPageType.PURCHASE_ORDER_END;\n case 'ItxAngularOrderStatus':\n return ZenitPageType.ORDER_TRACK;\n case 'ItxAngularShopcartPage':\n return values.cartItems?.length ? ZenitPageType.SHOPPING_CART : ZenitPageType.SHOPPING_CART_EMPTY;\n case 'ItxAngularStoreDetailLocatorPage':\n return ZenitPageType.STORE_DETAIL;\n case 'ItxAngularStoreLocatorPage':\n return ZenitPageType.SHOP_LOCATOR;\n case 'ItxAngularWishlistPage':\n return ZenitPageType.MULTI_WISHLIST;\n case 'ItxAngularLookbookPage':\n return ZenitPageType.CATEGORY_VIEW;\n case 'ItxCategoryPage':\n return ZenitPageType.PRODUCT_LIST;\n case 'ItxChatPage':\n return ZenitPageType.CHAT;\n case 'ItxCheckoutShippingPage':\n return ZenitPageType.CHECKOUT_SHIPPING_METHOD;\n case 'ItxCheckoutShippingDeliveryPage':\n return ZenitPageType.CHECKOUT_HOME_ADDRESS_LIST;\n case 'ItxCheckoutShippingDeliveryAddressPage':\n return values.isSelectedAddress\n ? ZenitPageType.CHECKOUT_MODIFY_PERSONAL_DETAILS : ZenitPageType.CHECKOUT_ADD_PERSONAL_DETAILS;\n case 'ItxCheckoutShippingDeliverySummaryPage':\n return ZenitPageType.CHECKOUT_TYPE_DELIVERY_METHOD;\n case 'ItxCheckoutShippingStoreSummaryPage':\n return ZenitPageType.CHECKOUT_STORE_DETAIL;\n case 'ItxCheckoutShippingDropPointSummaryPage':\n return ZenitPageType.CHECKOUT_DROP_POINT_DETAIL;\n case 'ItxCheckoutShippingStorePage':\n return values.selectedViewPickup === 'map' ? ZenitPageType.CHECKOUT_STORE_COLLECTION_POINT_MAP : ZenitPageType.CHECKOUT_STORE_LIST;\n case 'ItxCheckoutShippingDropPointPage':\n return values.selectedViewPickup === 'map' ? ZenitPageType.CHECKOUT_DROP_POINT_MAP : ZenitPageType.CHECKOUT_DROP_POINT_LIST;\n case 'ItxCheckoutPaymentPage':\n return ZenitPageType.CHECKOUT_PAYMENT_METHOD;\n case 'ItxCheckoutSummaryPage':\n return ZenitPageType.CHECKOUT_ORDER_REVIEW;\n case 'ItxCheckoutRepaymentPage':\n return ZenitPageType.CHECKOUT_REPAYMENT;\n case 'ItxAngularContactPage':\n return ZenitPageType.CONTACT;\n case 'ItxFastSintStoreListPage':\n return ZenitPageType.CHECKOUT_EXPRESS_STORE_LIST;\n case 'ItxFastSintStoreDetailPage':\n return ZenitPageType.CHECKOUT_EXPRESS_STORE_DETAIL;\n case 'ItxHomePage':\n case 'ItxHomeMenPage':\n return ZenitPageType.HOME;\n case 'ItxMassimoDuttiFeelPage':\n return ZenitPageType.HOME_LOYALTY;\n case 'ItxErrorPage':\n case 'Itx404ErrorPage':\n case 'Itx410ErrorPage':\n return ZenitPageType.PAGE_NOT_FOUND;\n case 'ItxMyAccountAccessDataPage':\n return ZenitPageType.MY_ACCOUNT_ACCESS_DETAILS;\n case 'ItxMyAccountAddressListPage':\n return ZenitPageType.MY_ACCOUNT_ADDRESSES;\n case 'ItxMyAccountAppointmentsPage':\n return ZenitPageType.MY_ACCOUNT_APPOINTMENTS;\n case 'ItxMyAccountCardsPage':\n return ZenitPageType.MY_ACCOUNT_WALLET;\n case 'ItxMyAccountDetailsPage':\n return ZenitPageType.MY_ACCOUNT_PERSONAL_DETAILS;\n case 'ItxMyAccountFeelBenefitsPage':\n return ZenitPageType.MY_ACCOUNT_LOYALTY_BENEFITS;\n case 'ItxMyAccountFeelHistoryPage':\n return ZenitPageType.MY_ACCOUNT_LOYALTY_HISTORY;\n case 'ItxMyAccountFeelHowItWorksPage':\n return ZenitPageType.MY_ACCOUNT_LOYALTY_HOW_IT_WORKS;\n case 'ItxMyAccountMenuPage':\n return ZenitPageType.MY_ACCOUNT_MENU;\n case 'ItxMyAccountNewsletterPage':\n return ZenitPageType.MY_ACCOUNT_NEWSLETTER;\n case 'ItxMyAccountOrderExchanges':\n return ZenitPageType.MY_ACCOUNT_ORDER_RETURNS_EXCHANGES_ITEMS;\n case 'ItxMyAccountOrderReturnableProducts':\n return ZenitPageType.RETURNABLE_PRODUCTS_SELECTOR;\n case 'ItxMyAccountOrdersOnline':\n return ZenitPageType.MY_ACCOUNT_ORDERS_LIST_ONLINE;\n case 'ItxMyAccountOrdersStore':\n return ZenitPageType.MY_ACCOUNT_ORDERS_LIST_IN_STORE;\n case 'ItxMyAccountReturnItemsPage':\n return ZenitPageType.RETURNABLE_PRODUCTS_SELECTOR;\n case 'ItxMyAccountReturnsPage':\n return ZenitPageType.MY_ACCOUNT_RETURNS_LIST;\n case 'ItxNewsletterPage':\n return ZenitPageType.NEWSLETTER_SUBSCRIBE_VIEW;\n case 'ItxNewsletterUnsuscribePage':\n return ZenitPageType.NEWSLETTER_UNSUBSCRIBE_VIEW;\n case 'ItxProductPage':\n return values.productPageProduct?.type === 'BundleBean'\n ? ZenitPageType.PRODUCT_BUNDLE_DETAILS\n : ZenitPageType.PRODUCT_DETAILS;\n case 'ItxStoriesPage':\n return ZenitPageType.CATEGORY_VIEW;\n case 'ItxWorldWidePage':\n return ZenitPageType.WORLDWIDE;\n default:\n return ZenitPageType.UNKNOWN;\n }\n};\n\nexport const getPageType = (values: ZenitEventValues, eventFrom: EventFrom, eventData: ZenitEventData): ZenitPageType => {\n // Search pages\n const searchPageType = getPageTypeForSearch(eventData, values, eventFrom);\n if (searchPageType) return searchPageType;\n\n // Special cases\n if (eventFrom === EventFrom['shop-cart-packagin']) {\n return ZenitPageType.GIFT_OPTIONS;\n }\n\n // Page type by page and values\n return getPageTypeByPage(values, eventData?.place);\n};\n\n// #endregion\n\nexport const getSection = (section: string, commonWindow?: CommonWindow): Section => {\n if (section) return Section[section] || Section.UNKNOWN;\n\n const lastSection = commonWindow.localStorage.getItem('LAST_SECTION');\n return Section[lastSection] || Section.UNKNOWN;\n};\n\n/**\n * Identifier of the category\n * NOTE: If value cannot be sent use a code value of -1\n *\n * @param page\n * @param categoryId\n * @param categoryProductId\n * @returns number\n */\nexport const getCategoryId = (categoryId: string): number => {\n return categoryId ? +categoryId : -1; // Added + for number format\n};\n\nexport const getCategoryURL = (categoryUrl: string): string => {\n const categoryUrlSplit = categoryUrl ? categoryUrl.split('-') : undefined;\n return categoryUrlSplit ? categoryUrlSplit[categoryUrlSplit.length - 1] : null;\n};\n\nexport const getCatentryId = (item: ItemTypes): number => {\n if (!item) {\n return null;\n }\n\n if ('catentryId' in item) return item.catentryId;\n\n // Caso ficha bundle\n if ((item as ProductPublicModels.PublicProduct)?.type === 'BundleBean') {\n return Number.parseInt((item as ProductPublicModels.PublicProduct).id);\n }\n\n if ('status' in item && item.status?.selectedColor?.catentryId) {\n return item.status.selectedColor.catentryId;\n }\n\n return null;\n};\n\nexport const getPartNumber = (\n item: ItemTypes | GiftCard\n): string | null => {\n return (\n (item as ProductPublicModels.PublicProduct)?.status || (item as CartItem)\n )?.selectedSize?.partnumber || (item as GiftCard)?.partnumber\n || (item as CartItem)?.reference || null;\n};\n\nexport const getReferenceStyle = (item: ItemTypes | GiftCard): string | -1 => {\n const itemStatus = (item as ProductPublicModels.PublicProduct)?.status;\n\n if (itemStatus) return itemStatus?.selectedColor?.reference;\n if ((item as CartItem)?.reference) {\n const referenceSplit = (item as CartItem).reference.split('-');\n const mocacoStyle = referenceSplit[0]?.substring(0, 11);\n\n if (mocacoStyle) {\n return `C${mocacoStyle}-${referenceSplit[1]}`;\n }\n }\n\n return (item as GiftCard)?.partnumber || -1;\n};\n\nexport const getSkus = (\n items: ItemTypes[] | GiftCard[]\n): string[] => {\n return items.map((item) => getPartNumber(item));\n};\n\nexport const getCartId = (cartId: number | '-1'): number => {\n return cartId === '-1' ? null : cartId;\n};\n\nexport const getStoreId = (storeId: string): number => {\n return storeId ? Number.parseInt(storeId) : null;\n};\n\nexport const getCurrency = (currency: CurrencyInfo): string => {\n return currency?.currencyCode;\n};\n\nexport const getItems = (items: CartItem[]): ZenitItem[] => {\n return items?.map((item: CartItem): ZenitItem => {\n return {\n amount: item?.unitPrice * item?.quantity,\n articleBrandCode: 11,\n brandId: 11,\n price: item?.unitPrice,\n section: getSection(item?.sectionNameEN),\n sku: getSkus([item])?.[0],\n units: item?.quantity,\n viewOrigin: null, // No tenemos este dato por ahora\n };\n });\n};\n\nexport const getZoomLevel = (gridType: GridType): ZenitZoomLevel => {\n return {\n 1: ZenitZoomLevel.ZOOM1,\n 2: ZenitZoomLevel.ZOOM2,\n 3: ZenitZoomLevel.ZOOM3,\n }[gridType];\n};\n\nexport const getPersonalization = (\n item: ItemTypes,\n relatedProductsPlaces: Record,\n place: ProductViewPlace,\n relatedsSectionId: string\n): ZenitPersonalizationParam => {\n const relatedsData = getRelatedProduct(item, place, relatedsSectionId, relatedProductsPlaces);\n return {\n objective: relatedsData?.modelName,\n provider: relatedsData?.provider,\n strategy: relatedsData?.relatedType,\n version: relatedsData?.modelVersion,\n };\n};\n\nexport const getQuantity = (eventQuantity: number, item: ItemTypes): number => {\n if (eventQuantity) return eventQuantity;\n if ('quantity' in item) return item.quantity;\n return undefined;\n};\n\n// #region Listas\n\nexport const getListForSearch = (originData: OriginDataParams, eventFrom: EventFrom): ZenitList => {\n if (RelatedPlaces.includes(eventFrom)\n && originData?.searchRequestQuery) return ZenitList.searchAlternativeResults;\n if (RelatedPlaces.includes(eventFrom)) return ZenitList.searchCrossCustom;\n\n switch (originData?.searchType) {\n case 'busqueda_relacionada':\n case 'busqueda_sugerida':\n case 'trending':\n case 'ultimas_busquedas':\n return ZenitList.suggestedProduct;\n default:\n return ZenitList.searchResults;\n }\n};\n\nexport const getListForRelateds = (\n page: PageSection,\n eventFromParsed: EventFrom,\n sidebarPlace: EventFrom,\n place: Partial,\n): ZenitList => {\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (place) {\n case ProductViewPlaceValue.ADD_CART:\n return ZenitList.crossCustomToast;\n\n case ProductViewPlaceValue.CART:\n return ZenitList.crossSellingCart;\n\n case ProductViewPlaceValue.CS_BS:\n return {\n [EventFrom.backSoon]: ZenitList.crossSimilarBackSoon,\n [EventFrom.comingSoon]: ZenitList.crossSimilarComingSoon,\n }[sidebarPlace];\n\n case ProductViewPlaceValue.OUT_OF_STOCK: {\n const listParser = {\n [EventFrom.productdetail]: ZenitList.crossSimilarPdp,\n ItxCategoryPage: ZenitList.crossSimilarGrid,\n ItxProductPage: ZenitList.crossSimilarCustomPdp,\n };\n return listParser[sidebarPlace] || listParser[page] || ZenitList.noListUndefined;\n }\n\n case ProductViewPlaceValue.PRODUCT_GRID:\n return ZenitList.crossSimilarGrid;\n }\n\n const crossSelling: Record = {\n ItxProductPage: ZenitList.crossCustomPdp,\n };\n\n return {\n [EventFrom.backSoon]: ZenitList.crossSimilarBackSoon,\n [EventFrom.comingSoon]: ZenitList.crossSimilarComingSoon,\n [EventFrom.completeLook]: crossSelling[page],\n [EventFrom.completeLookYoda]: crossSelling[page],\n [EventFrom.frecuentlyBoughtTogether]: crossSelling[page],\n [EventFrom.othersYouMayLike]: ZenitList.mayAlsoLike,\n [EventFrom.recentlyViewed]: ZenitList.crossViewedRecently,\n [EventFrom.recommended_for_you]: crossSelling[page],\n [EventFrom.relateds]: crossSelling[page],\n [EventFrom.relatedsBuyed]: crossSelling[page],\n [EventFrom.similar]: crossSelling[page],\n [EventFrom.topSales]: crossSelling[page],\n }[eventFromParsed] || ZenitList.noListUndefined;\n};\n\nexport const getListForPage = (\n eventFrom: EventFrom,\n): ZenitList => {\n switch (eventFrom) {\n case 'parrilla':\n case 'giftcard':\n return ZenitList.grid;\n\n case 'ficha_bundle':\n case 'vista_rapida_bundle':\n return ZenitList.bundle;\n\n case 'miniWishList':\n case 'wishList':\n return ZenitList.wishlist;\n\n case 'shopcart':\n case 'miniCart':\n return ZenitList.shoppingCart;\n\n case 'directo':\n return ZenitList.noListUndefined;\n\n case 'search':\n case 'searchResults':\n return ZenitList.searchResults;\n\n case 'productdetail':\n return null;\n\n default:\n return ZenitList.noListUndefined;\n }\n};\n\nexport const getList = (\n eventFrom: EventFrom,\n page: PageSection,\n item: ItemTypes,\n originData: OriginDataParams,\n sidebarData: { name: SidebarCustomComponents; data: any }\n): ZenitList => {\n const { eventFromParsed, sidebarPlace } = eventFromParser(\n eventFrom,\n item,\n sidebarData,\n );\n\n if (originData?.place === ProductViewPlaceValue.SEARCH) return getListForSearch(originData, eventFromParsed);\n if (RelatedPlaces.includes(eventFromParsed)) {\n return getListForRelateds(page, eventFromParsed, sidebarPlace, originData?.place);\n }\n\n return getListForPage(eventFrom);\n};\n\n// #endregion\n\n// #region Experiments\n// ############### EXPERIMENTS PROPERTY LOGIC ###############\n\nexport const getOptimizelyExperimentCampaignId = (campaigns: OptimizelyCampaignsState, experimentId: string): string => {\n return Object.values(campaigns).find((campaing) => {\n return campaing.experiment.id === experimentId;\n })?.id;\n};\n\nexport const formOptimizelyExperimentObject = (\n experiment: OptimizelyExperiment,\n data: OptimizelyData,\n campaigns: OptimizelyCampaignsState,\n experimentId: string,\n): ZenitExperiment => {\n const optimizelyExperimentCampaignId = getOptimizelyExperimentCampaignId(campaigns, experimentId);\n\n return {\n experimentDetails: {\n experimentAccountId: Number.parseInt(data.accountId),\n experimentCampaignId: Number.parseInt(optimizelyExperimentCampaignId),\n experimentId: Number.parseInt(experiment.id),\n experimentProjectId: Number.parseInt(data.projectId),\n },\n experimentKey: experiment.experimentName,\n experimentName: experiment.experimentName,\n provider: 'optimizely',\n variationKey: experiment.variation.name,\n };\n};\n\nexport const getOptimizelyExperiments = (commonWindow: CommonWindow): ZenitExperiment[] => {\n if (!commonWindow?.optimizely?.initialized) {\n return [];\n }\n\n const data = commonWindow.optimizely.get('data') as OptimizelyData;\n const state = commonWindow.optimizely.get('state') as OptimizelyState;\n const campaigns = state.getCampaignStates({ isActive: true });\n const stateExperiments = state.getExperimentStates({ isActive: true });\n\n return Object.entries(stateExperiments).reduce((acc: ZenitExperiment[], [experimentId, val]) => {\n acc.push(formOptimizelyExperimentObject(val, data, campaigns, experimentId));\n return acc;\n }, []);\n};\n\n/** Si en el futuro se incluyen más proveedores se añadirán aquí */\nexport const getExperiments = (commonWindow: CommonWindow): ZenitExperiments => {\n const optimizely = getOptimizelyExperiments(commonWindow);\n\n return { optimizely };\n};\n\n// #endregion\n\n/**\n * Si no hay definida una recomendación de talla se devuelve null.\n * Si el producto no contiene un objeto de status se devuelve null.\n * Si el evento no es AddToCart o Click con action de tipo \"select-size\" se devuelve null.\n * Si las condiciones previas se cumplen se devuelve el resultado de la comparación entre la talla del producto y la talla recomendada.\n */\nexport const getIsRecommended = (\n eventName: ZenitEventName,\n eventAction: ZenitClickAction,\n product: ItemTypes,\n recommendedSize: string,\n): string | null => {\n if (!recommendedSize) return null;\n if (!('status' in product)) return null;\n if (\n eventName !== ZenitEventName.AddToCart\n && !(eventName === ZenitEventName.Click && eventAction === ZenitClickAction['select-size'])\n ) return null;\n\n return (product?.status?.selectedSize?.name === recommendedSize).toString();\n};\n\nexport const getRecommender = (eventName: ZenitEventName, eventAction: ZenitClickAction, recommendedSize: string) => {\n if (\n eventName !== ZenitEventName.AddToCart\n && !(eventName === ZenitEventName.Click && eventAction === ZenitClickAction['select-size'])\n ) return null;\n\n return recommendedSize ? 'sastre' : null;\n};\n\n// #region Search request\n\nexport const getSearchRequestFilters = (_filters: string): SearchRequestFilter[] => {\n if (!_filters) {\n return [];\n }\n\n const filters: Record = _filters.split(',').reduce((acc, curr) => {\n const [_key, value] = curr.split(':');\n const key = _key.trim();\n\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(value);\n return acc;\n }, {});\n\n return Object.entries(filters).map(([name, values]) => ({\n name: name.split('_')?.[0].toUpperCase(),\n values,\n numElements: values.length,\n }));\n};\n\nexport const getSearchRequestOffset = (searchRequestOffset = 0): number => {\n if (searchRequestOffset === 0) {\n return 0;\n }\n\n return searchRequestOffset - LIMIT_QUERY_SEARCH;\n};\n\nexport const getSearchRequestParams = (\n param: string,\n values: ZenitEventValues,\n eventData: ZenitEventData,\n): number | string | SearchRequestFilter[] | null => {\n switch (param) {\n case 'searchRequestResponseTime':\n return eventData.responseTime ?? null;\n case 'searchRequestResultsNum': {\n const resultsNum = Number.parseInt(eventData?.totalHits?.toString());\n return Number.isNaN(resultsNum) ? null : resultsNum;\n }\n case 'searchRequestMethodName':\n return SearchRequestMethodName.query;\n case 'searchRequestLimit':\n return LIMIT_QUERY_SEARCH;\n case 'searchRequestHTTPResponseCode':\n return eventData.responseCode ?? -1;\n case 'searchRequestOffset':\n return getSearchRequestOffset(values.searchRequestOffset);\n case 'searchRequestProvider':\n return eventData.provider;\n case 'searchRequestPass':\n return eventData.searchPass;\n case 'searchRequestFilters':\n return getSearchRequestFilters(values.searchRequestFilters);\n }\n};\n\n// #endregion\n\nexport const getItemMediaExtraInfoProperty = (item: ViewItemProduct | ItemTypes, property: string): string => {\n const idMedia = (item as ViewItemProduct)?.idMedia;\n if (!idMedia) return null;\n\n try {\n for (const medias of item?.xmedia as any[]) {\n for (const xmediaItem of medias?.xmediaItems as any[]) {\n const foundPropertyValue = xmediaItem?.medias?.find((media) => {\n return media?.idMedia === idMedia;\n })?.extraInfo?.[property];\n\n if (foundPropertyValue) {\n return foundPropertyValue;\n }\n }\n }\n return null;\n } catch {\n return null;\n }\n};\n\nexport const getTemplateType = (\n targetItem: ItemTypes,\n gridType: GridType,\n gridElements: GridElement[]\n): string => {\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (gridType) {\n case GridTypes.RELATEDS:\n case GridTypes.SEARCH:\n return null;\n\n case GridTypes.ZARA_STUDIO: {\n const productId = typeof targetItem?.id === 'string' ? Number.parseInt(targetItem.id) : targetItem?.id;\n return gridElements?.find((gridElement) => gridElement?.ccIds?.includes(productId))?.template || null;\n }\n\n case GridTypes.GRID_4:\n return 'GRID_TYPE_2';\n\n case GridTypes.GRID_16:\n return 'GRID_TYPE_3';\n }\n};\n","import { createSelector } from '@ngrx/store';\n\nimport { getProductsList } from '@features/products/productsArray/infrastructure/state/productsArray.selectors';\nimport { WishlistPublicSelectors } from '@features/wishlist';\nimport { getProductsId } from '@pages/category/store/category-page.selectors';\nimport { getProductPageDetail } from '@pages/product';\nimport { SearchSelectors } from '@pages/search';\nimport { getRelatedProductsPlaces } from '@shared/product/related-products/infrastructure/state/related-products.selectors';\nimport { getShopCartCoreItems } from '@shared/shopcart-core/infrastructure/state/shopcart-core.selectors';\n\nexport const getGridPageProductsFiltered = createSelector(getProductsId, (productsId) => productsId);\n\n/** Deberá contener los mismos selectores que los definidos en la generación de selectores para la propiedad listPosition */\nexport const getIndexCalculationValues = createSelector(\n getShopCartCoreItems,\n getGridPageProductsFiltered,\n getProductPageDetail,\n getProductsList,\n getRelatedProductsPlaces,\n SearchSelectors.getQueryResults,\n WishlistPublicSelectors.getWishlistItems,\n (\n cartItems,\n filteredProductsIds,\n productPageProduct,\n productsArray,\n relatedProductsPlaces,\n queryResults,\n wishListItems,\n ) => {\n return {\n cartItems,\n filteredProductsIds,\n productPageProduct,\n productsArray,\n queryResults,\n relatedProductsPlaces,\n wishListItems,\n };\n }\n);\n","import { DOCUMENT } from '@angular/common';\nimport { computed, Inject, Injectable } from '@angular/core';\nimport { WINDOW } from '@ng-web-apis/common';\nimport { Store } from '@ngrx/store';\n\nimport { getLastSectionSelector } from '../../../../menu-categories/store/menu-categories.selectors';\nimport { ZenitEventsContextConfigs } from '../../configs/event.configs';\nimport * as ZenitContextHelpers from '../../helpers/context.helper';\nimport * as PayloadHelper from '../../helpers/payload.helper';\nimport {\n ZenitEventData,\n ZenitEventName,\n ZenitEventParam,\n ZenitEventValues,\n} from '../../models/zenit-general.model';\nimport { getGridPageProductsFiltered } from '../../store/selectors/custom.selectors';\n\nimport { BasicEventParserService } from './basic-event/basic-event-parser.service';\n\nimport { CartItem } from '@api/cart/cart.models';\nimport { CommonWindow } from '@core/domain/models/common-window.model';\nimport { getCurrencyInfo, getLanguageCode, getLanguageLocale, getPage, getStoreId } from '@core/infrastructure/state/core.selectors';\nimport { selectOrderId, selectOrderItems } from '@features/orders/order-confirmation/infrastructure/state/order-confirmation.selectors';\nimport { ProductPublicModels } from '@features/products/product';\nimport { getProductsList } from '@features/products/productsArray/infrastructure/state/productsArray.selectors';\nimport { SastreGetRecommendedSize } from '@features/products/sastre/recommender/domain/store/sastre-recommender.selectors';\nimport { getSidebarLoadedComponent, getSidebarLoadedComponentData } from '@features/sidebar/infrastructure/state/sidebar.selectors';\nimport { WishlistPublicSelectors } from '@features/wishlist';\nimport { routerPublicQueries } from '@frontend/libs/duttirouter';\nimport { getPageGridElements } from '@pages/category/modules/category-grid/store/category-grid.selectors';\nimport { getCategoryId, getCategoryLocationPath } from '@pages/category/store/category-page.selectors';\nimport { getGridType } from '@pages/category/store/grid-type/grid-type.selectors';\nimport { getPickupPointsViewMode } from '@pages/checkout/shipping/store/pickup/pickup.selectors';\nimport { getProductPageDetail } from '@pages/product';\nimport { SearchSelectors } from '@pages/search';\nimport { getSelectedAddress } from '@shared/address/store/address/address.selectors';\nimport { EventFrom, ItemTypes } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { getRelatedProductsPlaces } from '@shared/product/related-products/infrastructure/state/related-products.selectors';\nimport { getShopCartCoreId, getShopCartCoreItems } from '@shared/shopcart-core/infrastructure/state/shopcart-core.selectors';\n\n@Injectable()\nexport class ZenitEventParserService {\n constructor(\n private readonly store: Store,\n private readonly basicEventParserService: BasicEventParserService,\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(WINDOW) private readonly commonWindow: CommonWindow,\n ) { }\n\n private getItemSelector(eventName: ZenitEventName): ProductPublicModels.PublicProduct | null {\n switch (eventName) {\n case ZenitEventName.PageHit:\n return this.store.selectSignal(getProductPageDetail)();\n default:\n return null;\n }\n }\n\n private generateZenitSelectors(\n config: string[],\n eventName: ZenitEventName\n ): ZenitEventValues {\n const values: ZenitEventValues = {};\n\n // biome-ignore lint/complexity/noForEach: \n config.forEach((param: ZenitEventParam) => {\n switch (param) {\n case 'cartId':\n values[param] = this.getCartIdSelector(eventName, this.store);\n break;\n case 'items':\n values[param] = this.store.selectSignal(selectOrderItems)();\n break;\n case 'categoryURL':\n values.categoryUrl = this.store.selectSignal(getCategoryLocationPath)();\n break;\n case 'categoryId':\n values.categoryId = this.store.selectSignal(getCategoryId)();\n break;\n case 'catentryId':\n values.item = this.getItemSelector(eventName);\n break;\n case 'displayLanguage':\n values[param] = this.store.selectSignal(getLanguageLocale)();\n break;\n case 'list':\n values.searchRequestQuery = this.store.selectSignal(SearchSelectors.getSearchTerm)();\n values.searchType = this.store.selectSignal(SearchSelectors.getSearchType)();\n values.sidebarComponent = this.store.selectSignal(getSidebarLoadedComponent)();\n values.sidebarData = this.store.selectSignal(getSidebarLoadedComponentData)();\n break;\n case 'listPosition':\n values.cartItems = this.store.selectSignal(getShopCartCoreItems)();\n values.filteredProductsIds = this.store.selectSignal(getGridPageProductsFiltered)();\n values.productPageProduct = this.store.selectSignal(getProductPageDetail)();\n values.productsArray = this.store.selectSignal(getProductsList)();\n values.queryResults = this.store.selectSignal(SearchSelectors.getQueryResults)();\n values.relatedProductsPlaces = this.store.selectSignal(getRelatedProductsPlaces)();\n values.wishListItems = this.store.selectSignal(WishlistPublicSelectors.getWishlistItems)();\n break;\n case 'pageType':\n values.currentUrl = this.store.selectSignal(routerPublicQueries.getUrlFromRouter)();\n values.isSelectedAddress = computed(() => {\n return !!this.store.selectSignal(getSelectedAddress)();\n })();\n values.page = this.store.selectSignal(getPage)();\n values.productPageProduct = this.store.selectSignal(getProductPageDetail)();\n values.selectedViewPickup = this.store.selectSignal(getPickupPointsViewMode)();\n break;\n case 'personalization':\n values.relatedProductsPlaces = this.store.selectSignal(getRelatedProductsPlaces)();\n break;\n case 'recommender':\n values.recommenderSize = this.store.selectSignal(SastreGetRecommendedSize())();\n break;\n case 'section':\n case 'universe':\n values[param] = this.store.selectSignal(getLastSectionSelector)();\n break;\n case 'skus':\n // Lógica en el helper\n break;\n case 'storeId':\n values[param] = this.store.selectSignal(getStoreId)();\n break;\n case 'isRecommended':\n values.recommenderSize = this.store.selectSignal(SastreGetRecommendedSize())();\n break;\n case 'currency':\n values[param] = this.store.selectSignal(getCurrencyInfo)();\n break;\n case 'zoomLevel':\n values[param] = this.store.selectSignal(getGridType)();\n break;\n case 'searchRequestQuery':\n values[param] = this.store.selectSignal(SearchSelectors.getSearchTerm)();\n break;\n case 'searchRequestLocale':\n values[param] = this.store.selectSignal(getLanguageCode)();\n break;\n case 'searchRequestOffset':\n values[param] = this.store.selectSignal(SearchSelectors.getSearchOffset)();\n break;\n case 'searchRequestFilters':\n values[param] = this.store.selectSignal(SearchSelectors.getSelectedFilters)();\n break;\n case 'templateType':\n values.pageGridElements = this.store.selectSignal(getPageGridElements)();\n values.zoomLevel = this.store.selectSignal(getGridType)();\n break;\n default:\n break;\n }\n });\n\n return values;\n }\n\n private getValueForContextProperty(\n propertyName: ZenitEventParam,\n targetItem: ItemTypes,\n eventName: ZenitEventName,\n eventFrom: EventFrom,\n values: ZenitEventValues,\n _eventData: ZenitEventData,\n commonWindow: CommonWindow\n ): any {\n switch (propertyName) {\n case 'action':\n return _eventData.action;\n case 'assetId':\n return ZenitContextHelpers.getItemMediaExtraInfoProperty(targetItem, 'assetId');\n case 'brandId':\n // Valor fijo para MD\n return 11;\n case 'cartId':\n return ZenitContextHelpers.getCartId(values.cartId);\n case 'categoryId':\n return ZenitContextHelpers.getCategoryId(values.categoryId);\n case 'categoryURL':\n return ZenitContextHelpers.getCategoryURL(values?.categoryUrl);\n case 'catentryId':\n return ZenitContextHelpers.getCatentryId(targetItem);\n case 'skus':\n return ZenitContextHelpers.getSkus(_eventData?.items || values?.items);\n case 'list':\n return ZenitContextHelpers.getList(\n eventFrom,\n values.page,\n targetItem,\n {\n place: _eventData?.place,\n searchRequestQuery: values?.searchRequestQuery,\n searchType: values?.searchType,\n },\n { name: values.sidebarComponent, data: values.sidebarData },\n );\n case 'listPosition':\n return ZenitContextHelpers.getProductItemIndex(\n targetItem,\n eventFrom,\n values,\n _eventData\n );\n case 'pageType':\n return ZenitContextHelpers.getPageType(values, eventFrom, _eventData);\n case 'partnumber':\n return ZenitContextHelpers.getReferenceStyle(targetItem);\n case 'personalization':\n return ZenitContextHelpers.getPersonalization(\n targetItem,\n values?.relatedProductsPlaces,\n _eventData?.place,\n _eventData?.relatedsSectionId\n );\n case 'quantity':\n return ZenitContextHelpers.getQuantity(_eventData?.quantity, targetItem);\n case 'recommender':\n return ZenitContextHelpers.getRecommender(eventName, _eventData?.action, values?.recommenderSize);\n case 'section':\n case 'universe':\n return ZenitContextHelpers.getSection(values.section, commonWindow);\n case 'sku':\n return ZenitContextHelpers.getPartNumber(targetItem);\n case 'currency':\n return ZenitContextHelpers.getCurrency(values.currency);\n case 'items':\n return ZenitContextHelpers.getItems(\n (_eventData?.items || values?.items) as unknown as CartItem[]\n );\n case 'storeId':\n return ZenitContextHelpers.getStoreId(values.storeId);\n case 'viewOrigin':\n return ZenitContextHelpers.getItemMediaExtraInfoProperty(targetItem, 'originalName');\n case 'experiments':\n return ZenitContextHelpers.getExperiments(commonWindow);\n case 'isRecommended':\n return ZenitContextHelpers.getIsRecommended(\n eventName,\n _eventData?.action,\n targetItem,\n values?.recommenderSize\n );\n case 'zoomLevel':\n return ZenitContextHelpers.getZoomLevel(values.zoomLevel);\n case 'searchRequestFilters':\n case 'searchRequestHTTPResponseCode':\n case 'searchRequestLimit':\n case 'searchRequestMethodName':\n case 'searchRequestOffset':\n case 'searchRequestPass':\n case 'searchRequestProvider':\n case 'searchRequestResponseTime':\n case 'searchRequestResultsNum':\n return ZenitContextHelpers.getSearchRequestParams(propertyName, values, _eventData);\n case 'templateType':\n return ZenitContextHelpers.getTemplateType(targetItem, values.zoomLevel, values.pageGridElements);\n default:\n return values[propertyName];\n }\n }\n\n private generateContextObject(\n currentItem: ItemTypes,\n eventName: ZenitEventName,\n eventFrom: EventFrom,\n config: ZenitEventParam[],\n values: ZenitEventValues,\n _eventData: ZenitEventData,\n commonWindow: CommonWindow\n ): Record | Array> {\n const contextObject = {};\n const targetItem = currentItem || values?.items?.[0] || values?.item;\n // biome-ignore lint/complexity/noForEach: \n config.forEach((property) => {\n try {\n contextObject[property] = this.getValueForContextProperty(\n property,\n targetItem,\n eventName,\n eventFrom,\n values,\n _eventData,\n commonWindow\n );\n } catch {\n contextObject[property] = undefined;\n }\n });\n return contextObject;\n }\n\n /** Lógica para montar los objetos context según configuración */\n private getContextObject(\n eventName: ZenitEventName,\n eventFrom: EventFrom,\n config: ZenitEventParam[],\n values: ZenitEventValues,\n _eventData: ZenitEventData,\n commonWindow: CommonWindow,\n ): Record | Array> {\n if (_eventData?.items?.length) {\n return _eventData.items.map((item) => {\n return this.generateContextObject(item, eventName, eventFrom, config, values, _eventData, commonWindow);\n });\n }\n return this.generateContextObject(\n _eventData?.items?.[0],\n eventName,\n eventFrom,\n config,\n values,\n _eventData,\n commonWindow\n );\n }\n\n private getEventContext(\n eventName: ZenitEventName,\n eventFrom: EventFrom,\n eventData: ZenitEventData,\n commonWindow: CommonWindow,\n ): Record | Array> {\n try {\n const config = ZenitEventsContextConfigs[eventName];\n\n const selectorsObj = this.generateZenitSelectors(config, eventName);\n return this.getContextObject(eventName, eventFrom, config, selectorsObj, eventData, commonWindow);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n public getEventObject(\n eventName: ZenitEventName,\n eventFrom?: EventFrom,\n eventData?: ZenitEventData\n ): EventObject {\n const basicData = this.basicEventParserService.getBasicEvent();\n const eventContext = this.getEventContext(eventName, eventFrom, eventData, this.commonWindow);\n\n return {\n ...basicData,\n eventName,\n payload: PayloadHelper.getPayload(eventContext, this.document?.cookie),\n } as EventObject;\n }\n\n private getCartIdSelector(eventName: ZenitEventName, store: Store): number {\n if (eventName === ZenitEventName.AddToCart) {\n return store.selectSignal(getShopCartCoreId)();\n } if (eventName === ZenitEventName.PurchaseConfirmed) {\n return store.selectSignal(selectOrderId)();\n }\n }\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { AddToCartEvent } from '../../models/events/add-to-cart.model';\nimport { ClickEvent } from '../../models/events/click.model';\nimport { ZenitEventData } from '../../models/zenit-general.model';\n\nimport { EventFrom } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { ViewItemProduct } from '@shared/analytics/COMMON/services/product-view/view-item.service';\nimport { ProductViewPlace } from '@shared/product/models';\n\nconst ZenitActionTypes = {\n ADD_TO_CART_EVENT: '[zenit] ADD_TO_CART_EVENT',\n CLEAR_VIEWED_PRODUCTS: '[zenit] CLEAR_VIEWED_PRODUCTS',\n CLICK_EVENT: '[zenit] CLICK_EVENT',\n IMPRESSIONS_HIT_EVENT: '[zenit] IMPRESSIONS_HIT_EVENT',\n LIST_ITEM_VISIBLE: '[zenit] LIST_ITEM_VISIBLE',\n MARK_REFERRER_SENT: '[zenit] MARK_REFERRER_SENT',\n PAGE_HIT_EVENT: '[zenit] PAGE_HIT_EVENT',\n ZENIT_EVENT_ERROR: '[zenit] ZENIT_EVENT_ERROR',\n ZENIT_EVENT_SUCCESS: '[zenit] ZENIT_EVENT_SUCCESS',\n};\n\nexport const ZenitPageHitEventAction = createAction(\n ZenitActionTypes.PAGE_HIT_EVENT,\n props<{ eventFrom?: EventFrom; eventData?: ZenitEventData }>()\n);\n\nexport const ZenitAddToCartEvent = createAction(\n ZenitActionTypes.ADD_TO_CART_EVENT,\n props<{ addToCartEvent: AddToCartEvent }>()\n);\n\nexport const ZenitClickEvent = createAction(\n ZenitActionTypes.CLICK_EVENT,\n props<{ clickEvent: ClickEvent }>()\n);\n\nexport const ZenitListItemVisible = createAction(\n ZenitActionTypes.LIST_ITEM_VISIBLE,\n props<{\n eventFrom: EventFrom;\n inviewportElementId: string;\n place: ProductViewPlace;\n product: ViewItemProduct;\n relatedsSectionId: string;\n }>()\n);\n\nexport const ImpressionsHitEventAction = createAction(\n ZenitActionTypes.IMPRESSIONS_HIT_EVENT,\n props<{\n products: ViewItemProduct[];\n eventFrom: EventFrom;\n relatedsSectionId: string;\n place: ProductViewPlace;\n }>()\n);\n\nexport const ZenitClearViewedProducts = createAction(\n ZenitActionTypes.CLEAR_VIEWED_PRODUCTS,\n);\n\nexport const ZenitEventSuccess = () => createAction(\n ZenitActionTypes.ZENIT_EVENT_SUCCESS,\n props<{ eventData: T }>()\n);\n\nexport const ZenitEventError = createAction(\n ZenitActionTypes.ZENIT_EVENT_ERROR,\n props<{ error: unknown }>()\n);\n\nexport const MarkReferrerSent = createAction(\n ZenitActionTypes.MARK_REFERRER_SENT\n);\n","import { Injectable } from '@angular/core';\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { of } from 'rxjs';\nimport { switchMap, map, first, filter, take } from 'rxjs/operators';\n\nimport { GA4AnalyticsPublicActions, GA4AnalyticsPublicConstants } from '../../GA4/public.api';\n\nimport { ApiSizeInfo, CartItem } from '@api/cart/cart.models';\nimport { getPage, getCmsConfigValue } from '@core/infrastructure/state/core.selectors';\nimport { CoreStorageService } from '@core/infrastructure/storage/storage.service';\nimport { ProductPublicModels } from '@features/products/product';\nimport { isBuyNow } from '@features/sidebar/infrastructure/state/sidebar.selectors';\nimport { WishlistPublicActions } from '@features/wishlist';\nimport { GiftCardActions } from '@pages/gift-card/store/gift-card.actions';\nimport { GiftCardSelectors } from '@pages/gift-card/store/gift-card.selector';\nimport { EventFrom } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport * as AnalyticsUtils from '@shared/analytics/COMMON/services/analytics.utils';\nimport { Ga4EventLocation } from '@shared/analytics/GA4/models/event-data.model';\nimport { GA4EventType } from '@shared/analytics/GA4/models/general.model';\nimport { Ga4SendDatalayer, Ga4Event } from '@shared/analytics/GA4/store/ga4-analytics.actions';\nimport { GoToInternalPage, GoToCheckout, PublicNavigationConstants } from '@shared/navigation';\nimport { RelatedProductType } from '@shared/product/related-products/domain/models/related-products.models';\nimport {\n AdjustItemQuantityShopcart,\n AdjustItemSizeShopcart,\n DeleteItemsShopcart,\n LoadShopCartSuccess,\n} from '@shared/shopcart/store/shopcart.actions';\nimport {\n AddProductsShopcartCoreSuccess,\n LoadShopCartCoreSuccess,\n SetItemsInCartSuccess,\n} from '@shared/shopcart-core/infrastructure/state/shopcart-core.actions';\nimport { getPendingGetCartCore, getShopCartCoreIsLoaded, getShopCartCoreItems } from '@shared/shopcart-core/infrastructure/state/shopcart-core.selectors';\nimport { OpenModalFromComponent } from '@ui/dialog/store/modal.actions';\n\n@Injectable()\nexport class AnalyticsCartEffects {\n constructor(\n private readonly actions$: Actions,\n private readonly store: Store,\n private readonly storageService: CoreStorageService,\n private readonly translateService: TranslateService,\n ) {\n }\n /* ################################################### Eventos GA4 ################################################### */\n\n public EventViewCartGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(Ga4SendDatalayer),\n filter(({ dataLayer }) =>\n // biome-ignore lint/nursery/useTopLevelRegex: \n dataLayer.event === GA4EventType.page_view && /.*(cesta|minicesta).*/.test(dataLayer.context.page_title)),\n concatLatestFrom(() => this.handleViewCartEvent()),\n switchMap(() =>\n this.store.select(getShopCartCoreIsLoaded).pipe(\n filter(isLoaded => !!isLoaded),\n take(1)\n )),\n concatLatestFrom(() => this.store.select(getShopCartCoreItems)),\n filter(([_, shopcartItems]) => !!shopcartItems?.length),\n map(() => Ga4Event({\n name: GA4EventType.view_cart,\n eventFrom: EventFrom.shopcart,\n }))\n );\n });\n\n private handleViewCartEvent() {\n return this.store.select(getPendingGetCartCore).pipe(\n switchMap(pendingItems => {\n if (!pendingItems.length) return of(true);\n return this.actions$.pipe(ofType(SetItemsInCartSuccess)).pipe(first());\n }),\n );\n }\n\n public EventAddItemWishlistGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(WishlistPublicActions.AddItemsWishlistAction),\n concatLatestFrom(() => this.store.select(getPage)),\n map(([action, page]) => {\n const eventFromParser = {\n ItxCategoryPage: EventFrom.parrilla,\n ItxProductPage: EventFrom.productdetail,\n ItxAngularShopcartPage: EventFrom.shopcart,\n };\n\n return GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.add_to_wishlist,\n eventFrom: eventFromParser[page],\n data: {\n items: action.items.map(item => item.item) as unknown as ProductPublicModels.PublicProduct[],\n },\n });\n })\n );\n });\n\n private mapProductsWithRelatedType(\n products: ProductPublicModels.PublicProduct[],\n location: string,\n parentType?: RelatedProductType\n ): ProductPublicModels.PublicProduct[] {\n if (products?.length && location === 'related_product' && !!parentType) {\n return products.map(product => ({\n ...product,\n relatedType: parentType,\n }));\n }\n return products;\n }\n\n public EventAddItemsShopcartGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(AddProductsShopcartCoreSuccess),\n concatLatestFrom(() => this.store.select(getPage)),\n map(([action, page]) => {\n const eventFrom = action.eventFrom || AnalyticsUtils.locationToEventFrom[action.location];\n const eventFromParser = {\n ItxCategoryPage: EventFrom.parrilla,\n ItxProductPage: EventFrom.parrilla,\n productos_relacionados: action?.parentType,\n };\n const products: ProductPublicModels.PublicProduct[] = this.mapProductsWithRelatedType(\n action.products,\n action.location,\n action?.parentType\n );\n\n return GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.add_to_cart,\n eventFrom: eventFromParser[eventFrom]\n || eventFrom\n || eventFromParser[page]\n || EventFrom.shopcart,\n data: {\n imBundleReference: products[0]?.bundleReference || undefined,\n items: products,\n place: action?.place,\n relatedsSectionId: action?.relatedsSectionId,\n },\n });\n })\n );\n });\n\n public EventDeleteItemsShopcartGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(DeleteItemsShopcart),\n map((action) => GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.remove_from_cart,\n eventFrom: EventFrom.shopcart,\n data: {\n items: action.items,\n imActionType: GA4AnalyticsPublicConstants.GA4ImActionType.eliminar,\n },\n }))\n );\n });\n\n public EventEditRemoveItemsShopcartGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(AdjustItemSizeShopcart),\n map(({ item }) => {\n return GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.remove_from_cart,\n eventFrom: EventFrom.shopcart,\n data: {\n items: [{ ...item }],\n imActionType: GA4AnalyticsPublicConstants.GA4ImActionType.modificar_producto_cesta_ok,\n },\n });\n })\n );\n });\n\n public EventEditAddItemsShopcartGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(AdjustItemSizeShopcart),\n map(({ item, size }) => {\n const addedProduct: ApiSizeInfo = {\n ...item.colors.find((color) => color.id === item.colorId)?.sizes\n .find((_size) => _size.sku === size.sku),\n };\n // biome-ignore lint/performance/noDelete: \n delete addedProduct.name;\n return GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.add_to_cart,\n eventFrom: EventFrom.shopcart,\n data: {\n items: [{ ...item, ...addedProduct } as unknown as CartItem],\n imActionType: GA4AnalyticsPublicConstants.GA4ImActionType.modificar_producto_cesta_ok,\n },\n });\n })\n );\n });\n\n public EventQuantityAddRemoveItemsShopcartGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(AdjustItemQuantityShopcart),\n filter(({ quantity, item }) => quantity !== item.quantity),\n map((action) => GA4AnalyticsPublicActions.Ga4Event({\n name: action.quantity > action.item.quantity\n ? GA4EventType.add_to_cart : GA4EventType.remove_from_cart,\n eventFrom: EventFrom.shopcart,\n data: {\n items: [{\n ...action.item,\n quantity: Math.abs(action.quantity - action.item.quantity),\n }],\n },\n }))\n );\n });\n\n public EventAddToCartGiftcardGA4$ = createEffect(\n () => {\n return this.actions$.pipe(\n ofType(GiftCardActions.AddToShopCartSuccess),\n concatLatestFrom(() => [\n this.store.select(GiftCardSelectors.getCard),\n this.store.select(GiftCardSelectors.getSelectedGiftCardPrice),\n ]),\n map(([, giftCardData, giftCardPrice]) => {\n return GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.add_to_cart,\n eventFrom: EventFrom.giftcard,\n data: {\n items: [{ ...giftCardData, ...giftCardPrice }],\n imActionType: GA4AnalyticsPublicConstants.GA4ImActionType.anadir_gift_card_cesta,\n },\n });\n })\n );\n },\n );\n\n public EventBeginCheckoutGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(GoToInternalPage),\n // eslint-disable-next-line max-len\n filter(({ url }) => url === PublicNavigationConstants.checkout || url === PublicNavigationConstants.checkoutAuth),\n filter(() => this.storageService.getValue('cartType') !== 'buy-now'),\n concatLatestFrom(() => [this.store.select(getPage), this.store.select(isBuyNow)]),\n filter(([_, page, buyNow]) => page !== 'ItxFastSintStoreListPage' && !buyNow),\n // REF-AN-1\n concatLatestFrom(() => this.translateService.get('dev.cart.checkout')),\n map(([_, buttonText]) => GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.begin_checkout,\n eventFrom: EventFrom.directo, // NOTE: Recarga de página al acceder al túnel de checkout\n data: {\n imLinkText: buttonText,\n },\n })),\n );\n });\n\n public EventBeginCheckoutFastSintGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(GoToInternalPage),\n filter(({ url }) => url === PublicNavigationConstants.fastSintStores),\n concatLatestFrom(() => {\n return this.store.select(getCmsConfigValue('clickandcollect_horamax')).pipe(\n take(1),\n map(hour => Number(hour)),\n switchMap((hour) => {\n // REF-AN-6\n if (hour === 1) {\n return this.translateService.get('dev.shopCart.fastSint.pickupOrderHour', { $0: hour });\n }\n return this.translateService.get('dev.shopCart.fastSint.pickupOrderHours', { $0: hour });\n })\n );\n }),\n map(([_, buttonText]) =>\n GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.begin_checkout,\n eventFrom: EventFrom.fastSint,\n data: {\n imLinkText: buttonText,\n },\n })),\n );\n });\n\n public EventBeginCheckoutLoginGA4$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(GoToCheckout),\n filter(({ checkoutAuth }) => checkoutAuth),\n // REF-AN-1\n concatLatestFrom(() => this.translateService.get('dev.cart.checkout')),\n map(([_, buttonText]) => GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.begin_checkout,\n eventFrom: EventFrom.directo, // NOTE: Recarga de página al acceder al túnel de checkout\n data: {\n imLinkText: buttonText,\n },\n })),\n );\n });\n\n public CloseGiftTicketModal$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(OpenModalFromComponent),\n filter((action) => action.componentName === 'shop-cart-packagin'),\n switchMap(() => this.actions$.pipe(\n ofType(LoadShopCartSuccess)\n ).pipe(first())),\n concatLatestFrom(() => this.store.select(getShopCartCoreItems)),\n filter(([_, shopcartItems]) => !!shopcartItems?.length),\n map(() => GA4AnalyticsPublicActions.Ga4Event({ name: GA4EventType.view_cart, eventFrom: EventFrom['shop-cart-packagin'] }))\n\n );\n });\n\n public EventErrorCustomErrorCesta$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(LoadShopCartCoreSuccess),\n concatLatestFrom(() => this.store.select(getPage)),\n filter(([{ shopcart }, currentPage]) => currentPage === 'ItxAngularShopcartPage' && !!shopcart?.errors?.length),\n map(([action]) => {\n const errorKey = action.shopcart?.errors?.[0];\n return Ga4Event({\n name: GA4EventType.error_custom,\n eventFrom: EventFrom.shopcart,\n data: {\n errorData: { error: { key: errorKey } },\n errorType: 'error_cesta',\n imEventName: 'form_submit',\n imLocation: Ga4EventLocation.pagina,\n imType: 'error_cesta',\n },\n });\n })\n );\n });\n}\n","import { NgModule } from '@angular/core';\nimport { provideEffects } from '@ngrx/effects';\n\nimport { AnalyticsCartEffects } from './store/cart/analytics-cart.effects';\n\n@NgModule({\n providers: [\n provideEffects(AnalyticsCartEffects),\n ],\n})\nexport class AnalyticsShopcartModule { }\n","import { createReducer, on, Action } from '@ngrx/store';\n\nimport { EventFrom } from '../COMMON/models/analytics-common.models';\nimport { GA4AnalyticsPublicActions } from '../GA4/public.api';\n\nimport { analyticsInitialState, AnalyticsState } from './analytics.state';\nimport { ClickProductoBuscadorAnalytics, RelatedProductClickAnalytics, ProductClickAnalytics } from './app-events-analytics.actions';\n\nimport { SetPage } from '@core/infrastructure/state/core-commands.actions';\n\n/**\n * Definicion de las acciones que implementa el \"userReducer\"\n */\nconst analyticsReducerDefinition = createReducer(\n analyticsInitialState,\n\n on(RelatedProductClickAnalytics, (state: AnalyticsState, payload): AnalyticsState => {\n const origin = payload?.place === 'SEARCH';\n const parent = payload.parentType || 'default';\n const searchOrigin = origin ? { eventFrom: EventFrom.search, origin: parent } : null;\n return {\n ...state,\n searchOrigin,\n };\n }),\n\n on(ClickProductoBuscadorAnalytics, (state: AnalyticsState, payload): AnalyticsState => {\n return {\n ...state,\n searchOrigin: payload,\n };\n }),\n on(ProductClickAnalytics, (state: AnalyticsState, payload): AnalyticsState => {\n const origin = payload?.eventFrom === EventFrom.search;\n const searchOrigin = origin ? { eventFrom: EventFrom.search, origin: 'default' } : null;\n return {\n ...state,\n searchOrigin,\n };\n }),\n on(SetPage, (state: AnalyticsState): AnalyticsState => {\n return {\n ...state,\n ga4: {\n ...state.ga4,\n pageviewSent: false,\n },\n };\n }),\n\n on(GA4AnalyticsPublicActions.Ga4SetPageviewSent, (state: AnalyticsState, { isSent }): AnalyticsState => {\n return {\n ...state,\n ga4: {\n ...state.ga4,\n pageviewSent: isSent,\n },\n };\n }),\n\n);\n\n/**\n * Reducer para el usuario actual\n */\nexport function analitycsReducer(state: AnalyticsState, action: Action): AnalyticsState {\n return analyticsReducerDefinition(state, action);\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RequestBody, RequestResponse, ZenitEndpoint } from '../../models/request.model';\nimport { ZenitEvent } from '../../models/zenit-general.model';\n\nimport { ConfigService } from '@core/infrastructure/config/config.service';\nimport { configRequired } from '@core/infrastructure/http-requests/http-requests.service';\nimport { CorePlatformService } from '@core/infrastructure/platform/platform.service';\n\n@Injectable()\nexport class ZenitEventApiService {\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService,\n private readonly platformService: CorePlatformService,\n ) { }\n\n public postEvent$(event: ZenitEvent, endpoint: ZenitEndpoint): Observable {\n if (this.platformService.isBrowser()) {\n const url: string = this.getZenitEndpoint(endpoint);\n\n const body: RequestBody = {\n records: [{\n value: event,\n }],\n };\n\n return this.http.post(url, body);\n }\n }\n\n // eslint-disable-next-line no-secrets/no-secrets\n // @ConfigRequired(new Error('Configuration not found'))\n private getZenitEndpoint(endpoint: ZenitEndpoint): string {\n if (configRequired(this.configService.config)) {\n return `${this.configService.getConfigUrl('baseUrl')}/integration/zenit/topics/meccano.md.pro.store.${endpoint}`;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { Store } from '@ngrx/store';\nimport { of } from 'rxjs';\nimport { catchError, concatMap, filter, map } from 'rxjs/operators';\n\nimport { AddToCartEvent } from '../../../models/events/add-to-cart.model';\nimport { ZenitEventName } from '../../../models/zenit-general.model';\nimport { ZenitEventApiService } from '../../../services/api/zenit-event-api.service';\nimport { ZenitEventParserService } from '../../../services/parser/zenit-event-parser.service';\nimport { ZenitEventSuccess, ZenitEventError, ZenitAddToCartEvent } from '../../actions/zenit.actions';\n\nimport { ApiSizeInfo, CartItem } from '@api/cart/cart.models';\nimport { getCmsConfigValue } from '@core/infrastructure/state/core.selectors';\nimport { GiftCardActions } from '@pages/gift-card/store/gift-card.actions';\nimport { GiftCardSelectors } from '@pages/gift-card/store/gift-card.selector';\nimport { EventFrom } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport * as AnalyticsUtils from '@shared/analytics/COMMON/services/analytics.utils';\nimport { AdjustItemQuantityShopcart, AdjustItemSizeShopcart } from '@shared/shopcart/store/shopcart.actions';\nimport { AddProductsShopcartCoreSuccess } from '@shared/shopcart-core/infrastructure/state/shopcart-core.actions';\n\n@Injectable()\nexport class AddToCartEventEffects {\n constructor(\n private readonly actions$: Actions,\n private readonly store: Store,\n private readonly zenitEventParserService: ZenitEventParserService,\n private readonly zenitEventApiService: ZenitEventApiService\n ) { }\n\n /** Efectos de control del evento addToCart */\n\n public EventAddItemsShopcartZenit$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(AddProductsShopcartCoreSuccess),\n map((action) => {\n const eventFromParsed = action.location === 'related_product' ? action.parentType as EventFrom\n : action.eventFrom || AnalyticsUtils.locationToEventFrom[action.location];\n\n return this.zenitEventParserService.getEventObject(\n ZenitEventName.AddToCart,\n eventFromParsed,\n { items: action.products, relatedsSectionId: action.relatedsSectionId, place: action.place }\n );\n }),\n map((addToCartEvent) => ZenitAddToCartEvent({ addToCartEvent })),\n );\n });\n\n public EventEditAddItemsShopcartZenit$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(AdjustItemSizeShopcart),\n map(({ item, size }) => {\n const addedProduct: ApiSizeInfo = {\n ...item.colors.find((color) => color.id === item.colorId)?.sizes\n .find((_size) => _size.sku === size.sku),\n };\n // biome-ignore lint/performance/noDelete: \n delete addedProduct.name;\n\n return this.zenitEventParserService.getEventObject(\n ZenitEventName.AddToCart,\n EventFrom.shopcart,\n { items: [{ ...item, ...addedProduct } as unknown as CartItem] }\n );\n }),\n map((addToCartEvent) => ZenitAddToCartEvent({ addToCartEvent })),\n );\n });\n\n public EventQuantityAddItemsShopcartZenit$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(AdjustItemQuantityShopcart),\n filter((action) => action.quantity > action.item?.quantity),\n map((action) =>\n this.zenitEventParserService.getEventObject(\n ZenitEventName.AddToCart,\n EventFrom.shopcart,\n {\n items: [{\n ...action.item,\n quantity: Math.abs(action.quantity - action.item?.quantity),\n } as CartItem],\n }\n )),\n map((addToCartEvent) => ZenitAddToCartEvent({ addToCartEvent })),\n );\n });\n\n public EventAddToCartGiftcardZenit$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(GiftCardActions.AddToShopCartSuccess),\n concatLatestFrom(() => [\n this.store.select(GiftCardSelectors.getCard),\n this.store.select(GiftCardSelectors.getSelectedGiftCardPrice),\n ]),\n map(([, giftCardData, giftCardPrice]) =>\n this.zenitEventParserService.getEventObject(\n ZenitEventName.AddToCart,\n EventFrom.giftcard,\n { items: [{ ...giftCardData, ...giftCardPrice }] }\n )),\n map((addToCartEvent) => ZenitAddToCartEvent({ addToCartEvent })),\n );\n });\n\n public addToCartEvent$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(ZenitAddToCartEvent),\n concatLatestFrom(() => this.store.select(getCmsConfigValue('enabled_zenit'))),\n filter(([_, enabledZenit]) => enabledZenit),\n concatMap(([{ addToCartEvent }]) => this.zenitEventApiService.postEvent$(addToCartEvent, 'add-to-cart.input.v1').pipe(\n map(() => ZenitEventSuccess()({ eventData: addToCartEvent })),\n catchError((error) => of(ZenitEventError({ error })))\n )),\n );\n });\n}\n","import { inject } from '@angular/core';\nimport { createEffect, Actions, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { Store } from '@ngrx/store';\nimport { filter, concatMap, map, catchError, of } from 'rxjs';\n\nimport { ZenitEventSuccess, ZenitEventError, ZenitClickEvent } from '../../actions/zenit.actions';\n\nimport { getCmsConfigValue } from '@core/infrastructure/state/core.selectors';\nimport { MediasPublicModels, MediasPublicConstants } from '@features/products/medias';\nimport { WishlistPublicActions, WishlistPublicSelectors } from '@features/wishlist';\nimport { AddItemsWishlistAction } from '@features/wishlist/infrastructure/state/wishlist-commands.actions';\nimport { getProductPageDetail } from '@pages/product';\nimport { SetColorOnSelectedProduct } from '@pages/product/store/product-page.actions';\nimport { AnalyticsClickSourceID, EventFrom } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { ClickProductoBuscadorAnalytics, ObservedElementClick, ProductClickAnalytics, RelatedProductClickAnalytics, SeleccionarTallaAnalytics } from '@shared/analytics/store/app-events-analytics.actions';\nimport { ClickEvent, ZenitClickAction } from '@shared/analytics/ZENIT/models/events/click.model';\nimport { ZenitEventName } from '@shared/analytics/ZENIT/models/zenit-general.model';\nimport { ZenitEventApiService } from '@shared/analytics/ZENIT/services/api/zenit-event-api.service';\nimport { ZenitEventParserService } from '@shared/analytics/ZENIT/services/parser/zenit-event-parser.service';\nimport { ProductViewConfig } from '@shared/product/models';\nimport { AdjustItemQuantityShopcart, DeleteItemsShopcart } from '@shared/shopcart/store/shopcart.actions';\n\n/** add-qty */\n/** remove-qty */\nconst clickAddQuantityShopcart$ = createEffect((\n actions$ = inject(Actions),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(AdjustItemQuantityShopcart),\n filter(({ item, quantity }) => quantity > item?.quantity || quantity < item?.quantity),\n map(({ item, quantity }) => {\n const action = quantity > item?.quantity ? ZenitClickAction['add-qty'] : ZenitClickAction['remove-qty'];\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n EventFrom.shopcart,\n {\n items: [item],\n action,\n quantity: Math.abs(quantity - item?.quantity),\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\nconst getEventFromOrigin: Partial> = {\n [MediasPublicConstants.PublicMediaLocationType.category_page]: EventFrom.parrilla,\n [MediasPublicConstants.PublicMediaLocationType.related_product]: EventFrom.relateds,\n [MediasPublicConstants.PublicMediaLocationType.search]: EventFrom.searchResults,\n [MediasPublicConstants.PublicMediaLocationType.ZOOM_2]: EventFrom.parrilla,\n [MediasPublicConstants.PublicMediaLocationType.ZOOM_3]: EventFrom.parrilla,\n};\n\nconst ADD_TO_CART_CLICK_IDS = [\n AnalyticsClickSourceID.PDPAddToCartMainCTA,\n AnalyticsClickSourceID.productViewShowQuickly,\n AnalyticsClickSourceID.wishlistItemAddToCart,\n];\n\n/** add-to-cart (QUICK BUY, PDP) */\nconst clickAddToCart$ = createEffect((\n actions$ = inject(Actions),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(ObservedElementClick),\n filter(({ observeType, observedData }) => observeType === 'analyticsClick' && ADD_TO_CART_CLICK_IDS.includes(observedData?.clickId)),\n map(({ observedData }) => {\n const productViewConfig: ProductViewConfig = observedData?.productViewConfig;\n const eventFrom = observedData?.eventFrom || productViewConfig?.eventFrom\n || getEventFromOrigin[productViewConfig?.location];\n const item = { ...observedData.product, idMedia: productViewConfig?.media?.idMedia }; // Se incluye idMedia para identificar el objeto de media que corresponde\n\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n eventFrom,\n {\n action: ZenitClickAction['add-to-cart'],\n items: [item],\n place: productViewConfig?.place,\n quantity: 1,\n relatedsSectionId: productViewConfig?.relatedsSectionId,\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\n/** add-to-cart (BUNDLE) */\nconst clickAddToCartFichaBundle$ = createEffect((\n actions$ = inject(Actions),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(ObservedElementClick),\n filter(({ observeType, observedData }) => observeType === 'analyticsClick' && observedData?.clickId === AnalyticsClickSourceID.productAddToCartSelectorSelect),\n map(({ observedData }) => {\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n EventFrom.fichaBundle,\n {\n action: ZenitClickAction['add-to-cart'],\n items: [observedData?.product],\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\n/** select-item (PRODUCT VIEW) */\nconst clickSelectItemActions$ = createEffect((\n actions$ = inject(Actions),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(\n ClickProductoBuscadorAnalytics,\n ProductClickAnalytics,\n RelatedProductClickAnalytics,\n ),\n map((action) => {\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n (action as any)?.eventFrom || (action as any)?.parentType,\n {\n action: ZenitClickAction['select-item'],\n items: [action?.product],\n place: (action as any)?.place,\n relatedsSectionId: (action as any)?.relatedsSectionId,\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\nconst SELECT_ITEM_CLICK_IDS = [\n AnalyticsClickSourceID.shopcartItemImage,\n AnalyticsClickSourceID.shopcartItemName,\n];\n\n/** select-item (UBICACIONES QUE NO SON PRODUCT-VIEW) */\nconst clickSelectItemElementObserver$ = createEffect((\n actions$ = inject(Actions),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(ObservedElementClick),\n filter(({ observeType, observedData }) => observeType === 'analyticsClick' && SELECT_ITEM_CLICK_IDS.includes(observedData?.clickId)),\n map(({ observedData }) => {\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n observedData?.eventFrom,\n {\n action: ZenitClickAction['select-item'],\n clickSourceID: observedData?.clickId,\n items: [observedData?.product],\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\n/** select-size */\nconst clickSelectSize$ = createEffect((\n actions$ = inject(Actions),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(SeleccionarTallaAnalytics),\n map(({ product, config }) => {\n const eventFromParsed = config?.eventFrom || getEventFromOrigin[config?.location];\n\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n eventFromParsed,\n {\n action: ZenitClickAction['select-size'],\n items: [product],\n place: config?.place,\n relatedsSectionId: config?.relatedsSectionId,\n quantity: 1,\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\n/** select-color */\nconst clickSelectColor$ = createEffect((\n actions$ = inject(Actions),\n store = inject(Store),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(SetColorOnSelectedProduct),\n map(() => {\n const product = store.selectSignal(getProductPageDetail)();\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n EventFrom.productdetail,\n {\n action: ZenitClickAction['select-color'],\n items: [product],\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\n/** add-to-wishlist */\nconst clickAddToWishlist$ = createEffect((\n actions$ = inject(Actions),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(AddItemsWishlistAction),\n map(({ items, config }) => {\n const wishlistItems = items.map((item) => item.item);\n const eventFromParsed = config?.eventFrom || getEventFromOrigin[config?.location];\n\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n eventFromParsed,\n {\n action: ZenitClickAction['add-to-wishlist'],\n items: wishlistItems,\n place: config?.place,\n relatedsSectionId: config?.relatedsSectionId,\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\n/** remove-from-cart */\nconst clickRemoveFromCart$ = createEffect((\n actions$ = inject(Actions),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(DeleteItemsShopcart),\n map(({ items }) => {\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n EventFrom.shopcart,\n {\n action: ZenitClickAction['remove-from-cart'],\n items,\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\n/** remove-from-wishlist */\nconst clickRemoveFromWishlist$ = createEffect((\n actions$ = inject(Actions),\n store = inject(Store),\n zenitEventParserService = inject(ZenitEventParserService),\n) => actions$.pipe(\n ofType(WishlistPublicActions.DeleteItemWishlistAction),\n map(({ item }) => {\n const wishlistItems = store.selectSignal(WishlistPublicSelectors.getWishlistItems)();\n const wlItem = wishlistItems.find(content => content.id === item?.productId);\n\n return zenitEventParserService.getEventObject(\n ZenitEventName.Click,\n EventFrom.wishList,\n {\n action: ZenitClickAction['remove-from-wishlist'],\n items: [wlItem],\n }\n );\n }),\n map((clickEvent) => ZenitClickEvent({ clickEvent })),\n), { functional: true });\n\n/** Output effect */\nexport const clickEvent$ = createEffect((\n actions$ = inject(Actions),\n store = inject(Store),\n zenitEventApiService = inject(ZenitEventApiService),\n) => actions$.pipe(\n ofType(ZenitClickEvent),\n concatLatestFrom(() => store.select(getCmsConfigValue('enabled_zenit'))),\n filter(([_, enabledZenit]) => enabledZenit),\n concatMap(([{ clickEvent }]) => zenitEventApiService.postEvent$(clickEvent, 'click.input.v1').pipe(\n map(() => ZenitEventSuccess()({ eventData: clickEvent })),\n catchError((error) => of(ZenitEventError({ error })))\n )),\n), { functional: true });\n\nexport const ClickEventEffects = {\n clickAddQuantityShopcart$,\n clickAddToCart$,\n clickAddToCartFichaBundle$,\n clickAddToWishlist$,\n clickEvent$,\n clickRemoveFromCart$,\n clickRemoveFromWishlist$,\n clickSelectColor$,\n clickSelectItemActions$,\n clickSelectItemElementObserver$,\n clickSelectSize$,\n};\n","import { Injectable } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { Store } from '@ngrx/store';\nimport {\n map, filter, concatMap, catchError, of, timer, switchMap, tap, race,\n} from 'rxjs';\n\nimport { ZenitEventApiService } from '../../../services/api/zenit-event-api.service';\nimport { ZenitEventParserService } from '../../../services/parser/zenit-event-parser.service';\nimport { ZenitEventSuccess, ZenitEventError, ZenitListItemVisible, ImpressionsHitEventAction, ZenitClearViewedProducts } from '../../actions/zenit.actions';\n\nimport { getCmsConfigValue } from '@core/infrastructure/state/core.selectors';\nimport { LoadCategorySuccess } from '@pages/category';\nimport { getIsCategory } from '@pages/category/store/category-page.selectors';\nimport { ViewItemService } from '@shared/analytics/COMMON/services/product-view/view-item.service';\nimport { HeaderEventAnalytics } from '@shared/analytics/store/app-events-analytics.actions';\nimport { ImpressionsHitEvent } from '@shared/analytics/ZENIT/models/events/impressions-hit.model';\nimport { ZenitEventName } from '@shared/analytics/ZENIT/models/zenit-general.model';\n\n@Injectable()\nexport class ImpressionsHitEventEffects {\n private readonly EVENT_ITEM_BATCH = 10;\n\n constructor(\n private readonly actions$: Actions,\n private readonly zenitEventParserService: ZenitEventParserService,\n private readonly zenitEventApiService: ZenitEventApiService,\n private readonly viewItemService: ViewItemService,\n private readonly router: Router,\n private readonly store: Store\n ) { }\n\n public EventListItemVisible$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(ZenitListItemVisible),\n concatLatestFrom((event) =>\n of(this.viewItemService.viewProduct(\n event.product,\n event.inviewportElementId,\n false,\n false,\n { itemsBatch: this.EVENT_ITEM_BATCH }\n ))),\n filter(([_, products]) => !!products?.length),\n map(([event, products]) => ImpressionsHitEventAction({\n eventFrom: event.eventFrom,\n place: event.place,\n products,\n relatedsSectionId: event.relatedsSectionId,\n }))\n );\n });\n\n public EventListItemVisibleTimerZenit$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(ZenitListItemVisible),\n switchMap((event) => timer(1100).pipe(\n map(() => this.viewItemService.viewProduct(\n null,\n event.inviewportElementId,\n true,\n false,\n { itemsBatch: this.EVENT_ITEM_BATCH }\n )),\n filter((products) => !!products?.length),\n map((products) => ImpressionsHitEventAction({\n eventFrom: event.eventFrom,\n place: event.place,\n products,\n relatedsSectionId: event.relatedsSectionId,\n })),\n )),\n );\n });\n\n /**\n * Efecto que se encarga de limpiar el registro de productos vistos cuando se navega fuera de una categoría\n */\n public EventListItemVisibleExitZenit$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(LoadCategorySuccess),\n switchMap(() => race([\n this.router.events.pipe(filter((event) => event instanceof NavigationStart)),\n /* Como el apartado de \"Mi cuenta\" es aún una página legacy no se utiliza el router para navegar y se recarga la página,\n por lo que para detectar que se navega fuera de la categoría en este caso por ahora necesitamos esta línea */\n this.actions$.pipe(ofType(HeaderEventAnalytics), filter((action) => action.section === 'account')),\n ])),\n concatLatestFrom(() => this.store.select(getIsCategory)),\n filter(([, _isCategory]) => _isCategory),\n map(() => ZenitClearViewedProducts())\n );\n });\n\n public ClearViewedProducts$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(ZenitClearViewedProducts),\n tap(() => {\n // Limpia el registro de productos vistos\n this.viewItemService.viewProduct(null, null, true, true);\n }),\n );\n }, { dispatch: false });\n\n public EventImpressionsHitZenit$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(ImpressionsHitEventAction),\n concatLatestFrom(() => this.store.select(getCmsConfigValue('enabled_zenit'))),\n filter(([_, enabledZenit]) => enabledZenit),\n map(([action]) => this.zenitEventParserService.getEventObject(\n ZenitEventName.ImpressionsHit,\n action.eventFrom,\n { items: action?.products, relatedsSectionId: action.relatedsSectionId, place: action.place }\n )),\n concatMap((impressionsHitEvent) => this.zenitEventApiService.postEvent$(impressionsHitEvent, 'impressions.input.v1')\n .pipe(\n map(() => ZenitEventSuccess()({ eventData: impressionsHitEvent })),\n catchError((error) => of(ZenitEventError({ error })))\n )),\n );\n });\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { Store } from '@ngrx/store';\nimport { of } from 'rxjs';\nimport { catchError, concatMap, filter, first, map } from 'rxjs/operators';\n\nimport { ConfigurationService } from '../../../../COMMON/services/configuration.service';\nimport { PageHitEvent } from '../../../models/events/page-hit-event.model';\nimport { ZenitEventName } from '../../../models/zenit-general.model';\nimport { ZenitEventApiService } from '../../../services/api/zenit-event-api.service';\nimport { ZenitEventParserService } from '../../../services/parser/zenit-event-parser.service';\nimport { ZenitPageHitEventAction, ZenitEventSuccess, ZenitEventError, MarkReferrerSent } from '../../actions/zenit.actions';\n\nimport { CorePlatformService } from '@core/infrastructure/platform/platform.service';\nimport { SetPage } from '@core/infrastructure/state/core-commands.actions';\nimport { getCmsConfigValue, getPage } from '@core/infrastructure/state/core.selectors';\nimport { SetPickupPointsViewMode } from '@pages/checkout/shipping/store/pickup/pickup.actions';\nimport { SetColorOnSelectedProduct } from '@pages/product/store/product-page.actions';\nimport { SearchActions, SearchSelectors } from '@pages/search';\nimport { EventFrom } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { SetPickupDisplayModeAnalytics } from '@shared/analytics/store/app-events-analytics.actions';\nimport { modalsIncluded } from '@shared/analytics/ZENIT/configs/event.configs';\nimport { SetShopCartSuccess } from '@shared/shopcart/store/shopcart.actions';\nimport { OpenModalFromComponent } from '@ui/dialog/store/modal.actions';\n\n@Injectable()\nexport class PageHitEventEffects {\n constructor(\n private readonly actions$: Actions,\n private readonly zenitEventParserService: ZenitEventParserService,\n private readonly zenitEventApiService: ZenitEventApiService,\n private readonly configurationService: ConfigurationService,\n private readonly platform: CorePlatformService,\n private readonly store: Store,\n ) { }\n\n public setPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(SetPage),\n filter(() => this.platform.isBrowser()),\n filter(action => !!action.page),\n concatMap((action) => this.configurationService.pageDeferConditions(action.page)),\n map(() => ZenitPageHitEventAction({})),\n );\n });\n\n /**\n * Casuística page hit al cambiar de color en ficha de producto\n */\n public setColorOnSelectedProduct$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(SetColorOnSelectedProduct),\n map(() => ZenitPageHitEventAction({})),\n );\n });\n\n public pageHitEventSetPickupDisplayModeAnalytics$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(SetPickupDisplayModeAnalytics),\n concatMap(() => this.actions$.pipe(ofType(SetPickupPointsViewMode)).pipe(first())),\n map(() => ZenitPageHitEventAction({})),\n );\n });\n\n public pageHitEventOpenModalFromComponent$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(OpenModalFromComponent),\n filter((modalData) => modalsIncluded.includes(modalData.componentName)),\n map((modalData) => ZenitPageHitEventAction({ eventFrom: EventFrom[modalData.componentName] })),\n );\n });\n\n public pageHitEventSearchAdapterResults$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(SearchActions.SaveQuerySearchAction),\n concatLatestFrom(() => [\n this.store.select(SearchSelectors.getSearchType),\n this.store.select(SearchSelectors.getSearchTerm),\n ]),\n filter(([_, _searchType, searchTerm]) => !!searchTerm),\n map(([{ queryResults }, searchType]) => ZenitPageHitEventAction({\n eventFrom: EventFrom.searchResults,\n eventData: {\n origin: searchType,\n totalHits: queryResults.length.toString(),\n },\n })),\n );\n });\n\n public pageHitEventSetShopCartSuccess$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(SetShopCartSuccess),\n concatLatestFrom(() => this.store.select(getPage)),\n filter(([action, page]) => page === 'ItxAngularShopcartPage' && action.itemsInCart === 0),\n map(() => ZenitPageHitEventAction({}))\n );\n });\n\n public markReferrerSent$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(ZenitEventSuccess()),\n filter(({ eventData }) => !!eventData?.referrer?.url),\n map(() => MarkReferrerSent()),\n );\n });\n\n public pageHitEvent$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(ZenitPageHitEventAction),\n concatLatestFrom(() => this.store.select(getCmsConfigValue('enabled_zenit'))),\n filter(([_, enabledZenit]) => enabledZenit),\n map(([action]) => this.zenitEventParserService.getEventObject(\n ZenitEventName.PageHit,\n action.eventFrom,\n action.eventData,\n )),\n concatMap((pageHit) => this.zenitEventApiService.postEvent$(pageHit, 'hit.input.v1')\n .pipe(\n map(() => ZenitEventSuccess()({ eventData: pageHit })),\n catchError((error) => of(ZenitEventError({ error })))\n )),\n );\n });\n}\n","import { inject } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { filter, of } from 'rxjs';\nimport { catchError, concatMap, first, map, switchMap, tap } from 'rxjs/operators';\n\nimport { PurchaseConfirmedEvent } from '../../../models/events/purchase-confirmed.model';\nimport { ZenitEventName } from '../../../models/zenit-general.model';\nimport { ZenitEventApiService } from '../../../services/api/zenit-event-api.service';\nimport { ZenitEventParserService } from '../../../services/parser/zenit-event-parser.service';\nimport { ZenitEventError, ZenitEventSuccess } from '../../actions/zenit.actions';\n\nimport { CorePlatformService } from '@core/infrastructure/platform/platform.service';\nimport { SetPage } from '@core/infrastructure/state/core-commands.actions';\nimport { getCmsConfigValue } from '@core/infrastructure/state/core.selectors';\nimport { CoreStorageService } from '@core/infrastructure/storage/storage.service';\nimport { selectConfirmation } from '@features/orders/order-confirmation/infrastructure/state/order-confirmation.selectors';\nimport { ZENIT_PURCHASE_EVENT_PENDING } from '@shared/analytics/store/checkout/analytics-checkout.effects';\n\n// #region Functionality\nexport const clearPurchaseEventPending = (coreStorageService: CoreStorageService): void => {\n coreStorageService.removeValue(ZENIT_PURCHASE_EVENT_PENDING, 'SESSION');\n};\n\nexport const isPurchaseEventPending = (coreStorageService: CoreStorageService, orderId: number): boolean => {\n return coreStorageService.getValue(ZENIT_PURCHASE_EVENT_PENDING, 'SESSION') === orderId;\n};\n// #endregion\n\n// #region Effects\nexport const PurchaseConfirmedEvent$ = createEffect((\n actions$ = inject(Actions),\n store = inject(Store),\n coreStorageService = inject(CoreStorageService),\n zenitEventApiService = inject(ZenitEventApiService),\n zenitEventParserService = inject(ZenitEventParserService),\n platformService = inject(CorePlatformService),\n) => {\n return actions$.pipe(\n ofType(SetPage),\n filter(() => platformService.isBrowser()),\n // eslint-disable-next-line no-secrets/no-secrets\n filter((action) => action.page === 'ItxAngularOrderConfirmationPage' || action.page === 'ItxAngularOrderConfirmationNodePage'),\n map(() => store.selectSignal(getCmsConfigValue('enabled_zenit'))()),\n filter(enabledZenit => enabledZenit),\n // eslint-disable-next-line rxjs/no-unsafe-switchmap\n switchMap(() => store.select(selectConfirmation).pipe(\n first((value) => !!value),\n )),\n filter(({ id }) => isPurchaseEventPending(coreStorageService, id)),\n map(() => zenitEventParserService.getEventObject(ZenitEventName.PurchaseConfirmed)),\n concatMap(purchaseConfirmed => zenitEventApiService.postEvent$(purchaseConfirmed, 'purchase-confirmed.input.v1').pipe(\n map(() => ZenitEventSuccess()({ eventData: purchaseConfirmed })),\n catchError((error) => of(ZenitEventError({ error }))),\n )),\n );\n}, { functional: true });\n\nexport const ClearPurchaseEventPending$ = createEffect((\n actions$ = inject(Actions),\n coreStorageService = inject(CoreStorageService),\n) => {\n return actions$.pipe(\n ofType(ZenitEventSuccess()),\n filter(({ eventData }) => eventData.eventName === ZenitEventName.PurchaseConfirmed),\n tap(() => { clearPurchaseEventPending(coreStorageService); }),\n );\n}, { dispatch: false, functional: true });\n// #endregion\n\nexport const PurchaseConfirmedEventEffects = {\n PurchaseConfirmedEvent$,\n ClearPurchaseEventPending$,\n};\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { Store } from '@ngrx/store';\nimport { concatMap, of } from 'rxjs';\nimport { catchError, filter, map } from 'rxjs/operators';\n\nimport { ZenitEventApiService } from '../../../services/api/zenit-event-api.service';\nimport { ZenitEventParserService } from '../../../services/parser/zenit-event-parser.service';\n\nimport { getCmsConfigValue } from '@core/infrastructure/state/core.selectors';\nimport { SearchActions } from '@pages/search';\nimport { EventFrom } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { SearchAssistantEvent } from '@shared/analytics/ZENIT/models/events/search-assistant.model';\nimport { ZenitEventName } from '@shared/analytics/ZENIT/models/zenit-general.model';\nimport { ZenitEventError, ZenitEventSuccess } from '@shared/analytics/ZENIT/store/actions/zenit.actions';\n\n@Injectable()\nexport class SearchAssistantEventEffects {\n constructor(\n private readonly actions$: Actions,\n private readonly zenitEventParserService: ZenitEventParserService,\n private readonly zenitEventApiService: ZenitEventApiService,\n private readonly store: Store,\n ) {\n }\n\n public SearchAssistantSuccessEvent$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(SearchActions.GetProductsArraySearchAction),\n concatLatestFrom(() => this.store.select(getCmsConfigValue('enabled_zenit'))),\n filter(([_, enabledZenit]) => enabledZenit),\n map(([action]) => this.zenitEventParserService.getEventObject(\n ZenitEventName.SearchAssistant,\n EventFrom.search,\n {\n responseTime: action.queryResults.responseTime,\n totalHits: action.queryResults.totalResults,\n responseCode: 200,\n searchPass: action.queryResults.searchpass,\n provider: action.queryResults.provider,\n }\n )),\n concatMap((searchAssistant) => this.zenitEventApiService.postEvent$(searchAssistant, 'search-assistant.input.v1')\n .pipe(\n map(() => ZenitEventSuccess()({ eventData: searchAssistant })),\n catchError((error) => of(ZenitEventError({ error }))),\n ))\n );\n });\n\n public SearchAssistantErrorEvent$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(SearchActions.GetProductsArraySearchErrorAction),\n concatLatestFrom(() => this.store.select(getCmsConfigValue('enabled_zenit'))),\n filter(([_, enabledZenit]) => enabledZenit),\n map(() => this.zenitEventParserService.getEventObject(\n ZenitEventName.SearchAssistant,\n EventFrom.search,\n {\n responseCode: -1,\n }\n )),\n concatMap((searchAssistant) => this.zenitEventApiService.postEvent$(searchAssistant, 'search-assistant.input.v1')\n .pipe(\n map(() => ZenitEventSuccess()({ eventData: searchAssistant })),\n catchError((error) => of(ZenitEventError({ error }))),\n ))\n );\n });\n}\n","import { NgModule } from '@angular/core';\nimport { provideEffects } from '@ngrx/effects';\n\nimport { ViewItemService } from '../COMMON/services/product-view/view-item.service';\n\nimport { ZenitEventApiService } from './services/api/zenit-event-api.service';\nimport { BasicEventParserService } from './services/parser/basic-event/basic-event-parser.service';\nimport { ZenitEventParserService } from './services/parser/zenit-event-parser.service';\nimport { AddToCartEventEffects } from './store/effects/add-to-cart-event/add-to-cart-event.effects';\nimport { ClickEventEffects } from './store/effects/click-event/click-event.effects';\nimport { ImpressionsHitEventEffects } from './store/effects/impressions-hit-event/impressions-hit-event.effects';\nimport { PageHitEventEffects } from './store/effects/page-hit-event/page-hit-event.effects';\nimport { PurchaseConfirmedEventEffects } from './store/effects/purchase-confirmed/purchase-confirmed-event.effects';\n\nimport {\n SearchAssistantEventEffects,\n} from '@shared/analytics/ZENIT/store/effects/search-assistant-event/search-assistant-event.effects';\n\n@NgModule({\n providers: [\n provideEffects(\n AddToCartEventEffects,\n ClickEventEffects,\n ImpressionsHitEventEffects,\n PageHitEventEffects,\n PurchaseConfirmedEventEffects,\n SearchAssistantEventEffects,\n ),\n BasicEventParserService,\n ViewItemService,\n ZenitEventApiService,\n ZenitEventParserService,\n ],\n})\nexport class ZenitModule { }\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { provideState } from '@ngrx/store';\n\nimport { AnalyticsShopcartModule } from './analytics-shopcart.module';\nimport { ConfigurationService } from './COMMON/services/configuration.service';\nimport { analitycsReducer } from './store/analytics.reducer';\nimport { ZenitModule } from './ZENIT/zenit.module';\n\n@NgModule({\n imports: [\n AnalyticsShopcartModule,\n CommonModule,\n ZenitModule,\n ],\n providers: [\n provideState({ name: 'analytics', reducer: analitycsReducer }),\n ConfigurationService,\n ],\n})\nexport class AnalyticsModule { }\n","export interface Ga4GeneralAnalyticsState {\n pageviewSent: boolean;\n}\n\nexport interface AnalyticsState {\n events: any[];\n ga4: Ga4GeneralAnalyticsState;\n referredSent: boolean;\n searchOrigin: any;\n}\n\nexport interface AnalyticsRelatedState {\n type: string;\n}\n\nexport const analyticsInitialState: AnalyticsState = {\n events: [],\n ga4: {\n pageviewSent: false,\n },\n searchOrigin: null,\n referredSent: false,\n};\n\nexport enum SearchRequestMethodName {\n search = 'search',\n query = 'query',\n}\n","import { inject } from '@angular/core';\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { Store } from '@ngrx/store';\nimport { switchMap, map, filter, tap } from 'rxjs/operators';\n\nimport { GoToSection } from '../../../navigation/store/navigation.actions';\nimport * as AppEventsAnalyticsActions from '../app-events-analytics.actions';\n\nimport { CorePlatformService } from '@core/infrastructure/platform/platform.service';\nimport { getPage } from '@core/infrastructure/state/core.selectors';\nimport { CoreStorageService } from '@core/infrastructure/storage/storage.service';\nimport { SendCheckoutShippingSuccess, SetSelectedShippingMethod } from '@pages/checkout/shipping/store/shipping/shipping.actions';\nimport { SaveAddressError } from '@shared/address/store/address/address.actions';\nimport { EventFrom } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { GA4_PURCHASE_EVENT_PENDING_STORAGE_KEY } from '@shared/analytics/GA4/constants/ga4-analytics.constants';\nimport { Ga4ContentType, Ga4EventLocation, GA4ImActionType } from '@shared/analytics/GA4/models/event-data.model';\nimport { GA4EventType } from '@shared/analytics/GA4/models/general.model';\nimport { GA4AnalyticsPublicActions } from '@shared/analytics/GA4/public.api';\nimport { Ga4Event } from '@shared/analytics/GA4/store/ga4-analytics.actions';\nimport { SetNextStatus } from '@shared/navigation-button/store/navigation-button.actions';\nimport { getActivePath } from '@shared/navigation-button/store/navigation-button.selectors';\nimport { Checkout, LoadPromoCodeError } from '@shared/purchase/store/purchase.actions';\n\nconst ZENIT_PURCHASE_EVENT_PENDING = 'ZenitPurchaseEventPending';\n\n// #region Utils\n\nconst AnalyticsCheckoutEffectsUtils = {\n markPurchaseEventPendig: (\n platformService: CorePlatformService,\n coreStorageService: CoreStorageService,\n orderId: string\n ): void => {\n if (platformService.isBrowser()) {\n coreStorageService.setValue(GA4_PURCHASE_EVENT_PENDING_STORAGE_KEY, orderId, 'SESSION', 'ANALYTICS');\n coreStorageService.setValue(ZENIT_PURCHASE_EVENT_PENDING, orderId, 'SESSION', 'ANALYTICS');\n }\n },\n};\n\n// #endregion\n\n// #region Functional Effects\n\nconst EventShippingInfoGa4$ = createEffect((\n actions$ = inject(Actions),\n store = inject(Store),\n) => actions$.pipe(\n ofType(SendCheckoutShippingSuccess),\n switchMap(() => actions$.pipe(ofType(GoToSection))),\n filter((action) => ['payment', 'summary'].includes(action.url)),\n concatLatestFrom(() => store.select(getActivePath)),\n filter(([, activePath]) => activePath === 'shipping'),\n map(() =>\n GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.add_shipping_info,\n eventFrom: EventFrom.checkout,\n })),\n), { functional: true });\n\nconst EventPaymentInfoGa4$ = createEffect((\n actions$ = inject(Actions),\n) => actions$.pipe(\n ofType(AppEventsAnalyticsActions.EventPaymentOkAnalytics),\n map(() =>\n GA4AnalyticsPublicActions.Ga4Event({\n name: GA4EventType.add_payment_info,\n eventFrom: EventFrom.checkout,\n })),\n), { functional: true });\n\nconst EventErrorServerFormPromoCode$ = createEffect((\n actions$ = inject(Actions),\n) => actions$.pipe(\n ofType(\n LoadPromoCodeError,\n SaveAddressError,\n ),\n map((action) => {\n const formName = {\n [LoadPromoCodeError.type]: 'codigo_promocional',\n [SaveAddressError.type]: 'anadir_direccion_envio',\n }[action.type];\n return Ga4Event({\n name: GA4EventType.error_custom,\n eventFrom: EventFrom.checkout,\n data: {\n errorData: action.error,\n errorType: 'error_server_form',\n formName,\n imEventName: 'form_submit',\n imLocation: Ga4EventLocation.pagina,\n imType: 'error_server_form',\n },\n });\n })\n), { functional: true });\n\nconst MarkPurchaseEventPendig$ = createEffect((\n actions$ = inject(Actions),\n platformService = inject(CorePlatformService),\n storageService = inject(CoreStorageService),\n) => actions$.pipe(\n ofType(Checkout),\n tap(({ orderId }) => {\n AnalyticsCheckoutEffectsUtils.markPurchaseEventPendig(platformService, storageService, orderId);\n })\n), { dispatch: false, functional: true });\n\nconst ProcessOrderClickEvent$ = createEffect((\n actions$ = inject(Actions),\n store = inject(Store),\n) => actions$.pipe(\n ofType(SetNextStatus),\n map(() => store.selectSignal(getActivePath)()),\n filter((activePath) => activePath === 'summary'),\n map(() => Ga4Event({\n name: GA4EventType.process_order,\n eventFrom: EventFrom.checkout,\n data: {\n imActionType: GA4ImActionType.pulsar_autorizar_pago,\n },\n }))\n), { functional: true });\n\nconst SelectContentSeleccionarEnvio$ = createEffect((\n actions$ = inject(Actions),\n store = inject(Store),\n) => actions$.pipe(\n ofType(SetSelectedShippingMethod),\n concatLatestFrom(() => store.select(getPage)),\n // eslint-disable-next-line no-secrets/no-secrets\n filter(([_, page]) => page === 'ItxCheckoutShippingPage'),\n map(([{ selectedShippingMethod }]) => Ga4Event({\n name: GA4EventType.select_content,\n eventFrom: EventFrom.checkout,\n data: {\n contentType: Ga4ContentType.shipping,\n imActionType: GA4ImActionType.seleccionar_envio,\n imLinkText: selectedShippingMethod?.name,\n shippingMethod: selectedShippingMethod,\n },\n }))\n), { functional: true });\n\n// #endregion\n\n// #region Exports\n\nexport const AnalyticsCheckoutEffects = {\n EventErrorServerFormPromoCode$,\n EventPaymentInfoGa4$,\n EventShippingInfoGa4$,\n MarkPurchaseEventPendig$,\n ProcessOrderClickEvent$,\n SelectContentSeleccionarEnvio$,\n};\n\nexport { ZENIT_PURCHASE_EVENT_PENDING };\n\n// #endregion\n","import { createAction, props } from '@ngrx/store';\n\nexport const ActionTypes = {\n SET_LOADED_STATUS: '[checkout-navigation] SET_LOADED_STATUS', // navigation is ready\n SET_LOADING_STATUS: '[checkout-navigation] SET_LOADING_STATUS', // set loading in button\n SET_PENDING_STATUS: '[checkout-navigation] SET_PENDING_STATUS', // user needs to interact to continue\n SET_NEXT_STATUS: '[checkout-navigation] SET_NEXT_STATUS', // user can continue in the checkout\n SET_VISIBLE_BUTTON: '[checkout-navigation] SET_VISIBLE_BUTTON', // show button to continue\n SET_INVISIBLE_BUTTON: '[checkout-navigation] SET_INVISIBLE_BUTTON', // hide button to continue\n SET_SAVE_BUTTON: '[checkout-navigation] SET_SAVE_BUTTON', // set button to save\n SET_CONTINUE_BUTTON: '[checkout-navigation] SET_CONTINUE_BUTTON', // set button to continue\n SET_ACTIVE_BUTTON: '[checkout-navigation] SET_ACTIVE_BUTTON', // set button active\n SET_INACTIVE_BUTTON: '[checkout-navigation] SET_INACTIVE_BUTTON', // set button inactive\n INIT_BUTTON: '[checkout-navigation] INIT NAVIGATION BUTTON',\n SET_USER_ACTUAL_STEP: '[router] SET_USER_ACTUAL_STEP',\n INITIAL_LOAD: '[navigation] INITIAL_LOAD',\n SET_ACTIVE_STEP: '[navigation] SET_ACTIVE_STEP',\n};\n\nexport const SetLoadedStatus = createAction(ActionTypes.SET_LOADED_STATUS);\nexport const SetLoadingStatus = createAction(ActionTypes.SET_LOADING_STATUS);\nexport const SetPendingStatus = createAction(ActionTypes.SET_PENDING_STATUS);\nexport const SetNextStatus = createAction(ActionTypes.SET_NEXT_STATUS);\n\nexport const SetVisibleButton = createAction(ActionTypes.SET_VISIBLE_BUTTON);\nexport const SetInvisibleButton = createAction(ActionTypes.SET_INVISIBLE_BUTTON);\nexport const SetActiveButton = createAction(ActionTypes.SET_ACTIVE_BUTTON);\nexport const SetInactiveButton = createAction(ActionTypes.SET_INACTIVE_BUTTON);\n\nexport const InitButton = createAction(ActionTypes.INIT_BUTTON);\n\nexport const SetSaveButton = createAction(ActionTypes.SET_SAVE_BUTTON);\nexport const SetContinueButton = createAction(ActionTypes.SET_CONTINUE_BUTTON);\n\nexport const SetActivePath = createAction(ActionTypes.SET_ACTIVE_STEP, props<{ path: string }>());\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { NavigationButtonState } from './navigation-button.state';\n\nconst selectNavigationState = createFeatureSelector('navigation-button');\n\nexport const getNavigationState = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.status,\n);\n\nexport const getNavigationKind = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.kind,\n);\n\nexport const getActivePath = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.activePath,\n);\n\nexport const getVisitedPaths = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.visitedPaths,\n);\n\nexport const isNavigationLoading = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.status === 'loading',\n);\n\nexport const isNavigationLoaded = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.status === 'loaded',\n);\n\nexport const isNavigationPending = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.status === 'pending',\n);\n\nexport const isNavigationNextStep = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.status === 'next',\n);\n\nexport const isNavigationActive = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.active,\n);\n\nexport const isNavigationVisble = createSelector(\n selectNavigationState,\n (navigation: NavigationButtonState) => navigation?.visible,\n);\n","import { ProductViewPlaceValue, ProductViewTemplateModel } from './product-view-template.model';\n\nimport { MediasPublicConstants } from '@features/products/medias';\nimport { MediaLocation } from '@features/products/medias/domain/models/medias.models';\nimport { ProductPublicModels } from '@features/products/product';\nimport { EventFrom } from '@shared/analytics/COMMON/models/analytics-common.models';\nimport { MediaModel } from '@shared/media';\nimport { ProductViewPlace } from '@shared/product/models';\nimport { RelatedProductType } from '@shared/product/related-products/domain/models/related-products.models';\n\nexport enum ActionBadge {\n NAVIGATION = 'NAVIGATION',\n ADDCART = 'ADDCART',\n SHOWQUICKLY = 'SHOWQUICKLY',\n}\n\nexport enum Position {\n left = 'left',\n right = 'right',\n top = 'top',\n bottom = 'bottom',\n none = 'none',\n}\n\nexport enum ImageType {\n main = 'main',\n secondary = 'secondary',\n colorcut = 'colorcut',\n silhouette = 'silhouette',\n alternative = 'alternative',\n video = 'video',\n quadruple = 'quadruple',\n unknown = 'unknown',\n double = 'double',\n}\n\nexport interface ProductViewConfig {\n location: MediaLocation;\n place: ProductViewPlace;\n media: MediaModel;\n defaultImageType?: string;\n // Optional\n baseColor?: string;\n discardVideos?: boolean;\n discardDoubleVideo?: boolean;\n discardDoubleImage?: boolean;\n discardFallback?: boolean;\n showDetails?: boolean;\n clickable?: boolean;\n showName?: boolean;\n showTags?: boolean;\n showDescription?: boolean;\n showLongDescription?: boolean;\n showPrice?: boolean;\n textPosition?: Position;\n imageType?: ImageType;\n imageTypeAlternative?: ImageType;\n showQuickly?: boolean;\n showQuicklyMobile?: boolean;\n showSelectSize?: boolean;\n showColors?: boolean;\n showDiscount?: boolean;\n showPromotions?: boolean;\n showMadeInExclusive?: boolean;\n styles?: {\n backgroundColor: string;\n fontColor: string;\n offerPrice: string;\n colorSelector: string;\n cardColor?: string;\n };\n showLimitedSeparatorData?: boolean;\n showLimitedAndDescription?: boolean;\n showVerticalImage?: boolean;\n showViewBundleProducts?: boolean;\n showBundleName?: boolean;\n showLinesInDetails?: boolean;\n showContentProjected?: boolean;\n // AÑADIDOS DESPUES DE REFACT\n overImageChange?: boolean;\n colorSelector?: ColorSelector;\n showSecondImageIfPossible?: boolean;\n // AÑADIDOS DESDE RELACIONADOS\n relatedsSectionId?: string;\n baseProduct?: ProductPublicModels.PublicProduct;\n parentType?: RelatedProductType;\n hidePriceText?: boolean;\n eventFrom?: EventFrom;\n set?: number;\n showMediaCarousel?: boolean;\n showMediaCarouselMobile?: boolean;\n multipleMedias?: number;\n}\n\nexport const InitialConfigDefault: ProductViewConfig = {\n imageType: ImageType.main,\n clickable: true,\n location: MediasPublicConstants.PublicMediaLocationType.category_page,\n place: ProductViewPlaceValue.PRODUCT_GRID,\n media: {\n ratio: '3-4',\n alt: undefined,\n widthVW: undefined,\n showWaterMark: true,\n },\n discardDoubleVideo: false,\n discardFallback: false,\n // details\n showDetails: true,\n showDescription: false,\n showTags: true,\n showName: true,\n showPrice: true,\n showColors: true,\n textPosition: Position.bottom,\n showMadeInExclusive: true,\n showPromotions: true,\n showContentProjected: true,\n // image\n showQuickly: true,\n showQuicklyMobile: false,\n showDiscount: true,\n // relateds\n relatedsSectionId: undefined,\n baseProduct: undefined,\n parentType: undefined,\n hidePriceText: undefined,\n eventFrom: undefined,\n multipleMedias: 1,\n};\n\nexport interface ColorSelector {\n type: string;\n colorsCount: number;\n}\n\nexport interface ImageDataMedia {\n type: string;\n gridElementType: string;\n ref: string;\n}\n\nexport enum Cd139Type {\n CART_YODA = 'CART_YODA',\n COMPLETE_LOOK = 'COMPLETE_LOOK',\n COMPLETE_LOOK_YODA = 'COMPLETE_LOOK_YODA',\n FRECUENTLY_BOUGHT_TOGETHER = 'FRECUENTLY_BOUGHT_TOGETHER',\n OTHER_YOU_MAY_LIKE = 'OTHER_YOU_MAY_LIKE',\n RECENTLY_VIEWED = 'RECENTLY_VIEWED',\n RECOMMENDED_FOR_YOU = 'RECOMMENDED_FOR_YOU',\n RELATED = 'RELATED',\n RELATED_BUYED = 'RELATED_BUYED',\n TOP_SALES = 'TOP_SALES',\n}\n\nexport const InitialCategoryConfigDefault = {\n soldOut: false,\n productConf: new Map(),\n category: undefined,\n isCategoryNew: false,\n};\n\nexport interface ViewModelProductView {\n product: ProductPublicModels.PublicProduct;\n templateConfig: ProductViewTemplateModel;\n medias: any;\n prices: any;\n linkHref: string;\n}\n","import { ProductViewConfig } from './product-view-config.model';\n\nimport { Category } from '@core/domain/models/category.models';\nimport { MenuCategory } from '@shared/header/models/category.model';\n\nexport interface ProductViewTemplateModel extends ProductViewConfig {\n showSoldOut: boolean;\n hasVideo: boolean;\n bannerProductFinded: boolean;\n}\n\nexport interface CategoryConfiguration {\n productConf: Map;\n soldOut: boolean;\n category: Category | MenuCategory;\n isCategoryNew?: boolean;\n}\n\nexport interface GridProductStyle {\n tintColor: string;\n backgroundColor: string;\n}\n\nexport enum HiddenFieldType {\n ALL = 'all',\n DESCRIPTION = 'description',\n PRICE = 'price',\n}\n\nexport enum ProductViewPlaceValue {\n ADD_CART = 'ADD_CART',\n BUNDLE_DETAIL = 'BUNDLE_DETAIL',\n CART = 'CART',\n CS_BS = 'CS_BS',\n ERROR = 'ERROR',\n OUT_OF_STOCK = 'OUT_OF_STOCK',\n PRODUCT_CUSTOM_CATEGORY = 'PRODUCT_CUSTOM_CATEGORY',\n PRODUCT_DETAIL = 'PRODUCT_DETAIL',\n PRODUCT_GRID = 'PRODUCT_GRID',\n PRODUCT_LAST_SIZES = 'PRODUCT_LAST_SIZES',\n PRODUCT_NEW_COLLECTION = 'PRODUCT_NEW_COLLECTION',\n SEARCH = 'SEARCH',\n VIEWER_3D = 'VIEWER_3D',\n WISHLIST = 'WISHLIST',\n SMART_ASSISTANT = 'SMART_ASSISTANT',\n}\n\n// TO REFACTOR: move to the domain layer. There are some dependant pieces in higher layers\nexport type ProductViewPlace = keyof typeof ProductViewPlaceValue;\n","export enum AttributeType {\n specialCondition = 'CONDICIONES_DEVOLUCION',\n noCompatibleWithGiftBox = 'NO_COMPATIBLE_CAJA_REGALO',\n safetyWarning = 'SAFETY_WARNING',\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { createAction, props } from '@ngrx/store';\n\nimport { EguiData } from './purchase.state';\n\nimport { Adjustment, CartTax } from '@api/cart/cart.models';\nimport { PaymentMethod } from '@features/payment';\nimport { OrderPreview, PurchaseAttempt } from '@features/purchase-attempt';\n\n/**\n * Definición de las acciones\n */\nexport const PurchaseActions = {\n LOAD_PURCHASE_ATTEMPT: '[purchase-attempt] LOAD_PURCHASE_ATTEMPT',\n LOAD_PURCHASE_ATTEMPT_SUCCESS: '[purchase-attempt] LOAD_PURCHASE_ATTEMPT_SUCCESS',\n LOAD_PURCHASE_ATTEMPT_ERROR: '[purchase-attempt] LOAD_PURCHASE_ATTEMPT_ERROR',\n LOAD_ORDER_PREVIEW: '[purchase-attempt] LOAD_ORDER_PREVIEW',\n LOAD_ORDER_PREVIEW_SUCCESS: '[purchase-attempt] LOAD_ORDER_PREVIEW_SUCCESS',\n LOAD_ORDER_PREVIEW_ERROR: '[purchase-attempt] LOAD_ORDER_PREVIEW_ERROR',\n\n LOAD_ASYNC_CHECKOUT: '[purchase] LOAD_ASYNC_CHECKOUT',\n LOAD_ASYNC_CHECKOUT_SUCCESS: '[purchase] LOAD_ASYNC_CHECKOUT_SUCCESS',\n LOAD_ASYNC_CHECKOUT_ERROR: '[purchase] LOAD_ASYNC_CHECKOUT_ERROR',\n CHECKOUT: '[purchase] CHECKOUT',\n CHECKOUT_SUCCESS: '[purchase] CHECKOUT_SUCCESS',\n CHECKOUT_ERROR: '[purchase] CHECKOUT_ERROR',\n\n LOAD_PROMO_CODE: '[purchase] LOAD_PROMO_CODE',\n LOAD_PROMO_CODE_SUCCESS: '[purchase] LOAD_PROMO_CODE_SUCCESS',\n LOAD_PROMO_CODE_ERROR: '[purchase] LOAD_PROMO_CODE_ERROR',\n DELETE_PROMO_CODE: '[purchase] DELETE_PROMO_CODE',\n DELETE_PROMO_CODE_SUCCESS: '[purchase] DELETE_PROMO_CODE_SUCCESS',\n DELETE_PROMO_CODE_ERROR: '[purchase] DELETE_PROMO_CODE_ERROR',\n SET_VALIDATION_CHECK_VALUE: '[purchase] SET_VALIDATION_CHECK_VALUE',\n SET_BILLING_IS_NEEDED: '[purchase] SET_BILLING_IS_NEEDED',\n RESET_CHECKOUT_ERRORS: '[purchase] RESET_CHECKOUT_ERRORS',\n SET_SYNC_CHECKOUT_LAUNCHED: '[purchase] SET_SYNC_CHECKOUT_LAUNCHED',\n SET_CARDINAL_DDC: '[purchase] SET_CARDINAL_DDC',\n SET_EGUI_DATA: '[summary] SET_EGUI_DATA',\n SET_PURCHASE_ATTEMPT_SHIPPING_COSTS: '[purchase] SET_PURCHASE_ATTEMPT_SHIPPING_COSTS',\n};\n\nexport const SetEguiData = createAction(\n PurchaseActions.SET_EGUI_DATA,\n props<{ eguiData: EguiData }>()\n);\nexport const LoadPurchaseAttempt = createAction(PurchaseActions.LOAD_PURCHASE_ATTEMPT, props<{ cartId: number }>());\nexport const LoadPurchaseAttemptSuccess = createAction(\n PurchaseActions.LOAD_PURCHASE_ATTEMPT_SUCCESS,\n props<{ values: PurchaseAttempt }>()\n);\nexport const LoadPurchaseAttemptError = createAction(PurchaseActions.LOAD_PURCHASE_ATTEMPT_ERROR, props<{ error: any }>());\nexport const LoadOrderPreview = createAction(PurchaseActions.LOAD_ORDER_PREVIEW);\nexport const LoadOrderPreviewSuccess = createAction(\n PurchaseActions.LOAD_ORDER_PREVIEW_SUCCESS,\n props<{ orderPreview: OrderPreview }>()\n);\nexport const LoadOrderPreviewError = createAction(PurchaseActions.LOAD_ORDER_PREVIEW_ERROR, props<{ error: any }>());\nexport const LoadAsyncCheckout = createAction(PurchaseActions.LOAD_ASYNC_CHECKOUT);\nexport const LoadAsyncCheckoutSuccess = createAction(\n PurchaseActions.LOAD_ASYNC_CHECKOUT_SUCCESS,\n props<{ orderId: string }>()\n);\nexport const LoadAsyncCheckoutError = createAction(\n PurchaseActions.LOAD_ASYNC_CHECKOUT_ERROR,\n props<{ error: any; selectedPayment?: PaymentMethod }>()\n);\nexport const Checkout = createAction(\n PurchaseActions.CHECKOUT,\n props<{ orderId: string }>()\n);\nexport const CheckoutSuccess = createAction(PurchaseActions.CHECKOUT_SUCCESS);\nexport const CheckoutError = createAction(PurchaseActions.CHECKOUT_ERROR, props<{ error: any }>());\nexport const LoadPromoCode = createAction(PurchaseActions.LOAD_PROMO_CODE, props<{ promocode: string }>());\nexport const LoadPromoCodeSuccess = createAction(PurchaseActions.LOAD_PROMO_CODE_SUCCESS, props<{ promoCode: string }>());\nexport const LoadPromoCodeError = createAction(\n PurchaseActions.LOAD_PROMO_CODE_ERROR,\n props<{ error: HttpErrorResponse; promoCode: string }>()\n);\nexport const DeletePromoCode = createAction(PurchaseActions.DELETE_PROMO_CODE, props<{ promocode: string }>());\nexport const DeletePromoCodeSuccess = createAction(\n PurchaseActions.DELETE_PROMO_CODE_SUCCESS,\n props<{ promoCode: string }>()\n);\nexport const DeletePromoCodeError = createAction(\n PurchaseActions.DELETE_PROMO_CODE_ERROR,\n props<{ error: any; promoCode: string }>()\n);\nexport const SetValidationCheckValue = createAction(\n PurchaseActions.SET_VALIDATION_CHECK_VALUE,\n props<{ values: Record }>()\n);\nexport const SetCardinalDdc = createAction(PurchaseActions.SET_CARDINAL_DDC, props<{ ddc: string }>());\nexport const SetBillingIsNeeded = createAction(\n PurchaseActions.SET_BILLING_IS_NEEDED,\n props<{ isNeeded: boolean; vatin?: string }>()\n);\nexport const ResetCheckoutErrors = createAction(PurchaseActions.RESET_CHECKOUT_ERRORS);\nexport const SetSyncCheckoutLaunched = createAction(PurchaseActions.SET_SYNC_CHECKOUT_LAUNCHED);\n\nexport const SetPurchaseAttemptShippingCosts = createAction(\n PurchaseActions.SET_PURCHASE_ATTEMPT_SHIPPING_COSTS,\n props<{\n adjustment: Adjustment[];\n shippingPrice: number;\n shippingTax: number;\n totalOrder: number;\n taxArray: CartTax[];\n tax: number;\n }>()\n);\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n var proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(buf).copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (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 };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (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}\n","const { isArray } = Array;\nexport function argsOrArgArray(args) {\n return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nexport function race(...sources) {\n sources = argsOrArgArray(sources);\n return sources.length === 1 ? innerFrom(sources[0]) : new Observable(raceInit(sources));\n}\nexport function raceInit(sources) {\n return (subscriber) => {\n let subscriptions = [];\n for (let i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {\n subscriptions.push(innerFrom(sources[i]).subscribe(createOperatorSubscriber(subscriber, (value) => {\n if (subscriptions) {\n for (let s = 0; s < subscriptions.length; s++) {\n s !== i && subscriptions[s].unsubscribe();\n }\n subscriptions = null;\n }\n subscriber.next(value);\n })));\n }\n };\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n"],"x_google_ignoreList":[51,52,53,54,55,56,57,58,59,60,61,62,63,64,65]}