{"version":3,"file":"864.chunk.js","mappings":"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","sources":["webpack://oribasketprovider/../../src/index.ts","webpack://oribasketprovider/../../../src/types/RequestUrl.ts","webpack://oribasketprovider/../../../src/utils/convertToCamelCase.ts","webpack://oribasketprovider/../../../src/types/HttpHeader.ts","webpack://oribasketprovider/../../../src/types/ContentType.ts","webpack://oribasketprovider/../../../src/utils/getHttpRequestSettings.ts","webpack://oribasketprovider/../../../src/utils/addBasketOffer.ts","webpack://oribasketprovider/../../src/logger.ts","webpack://oribasketprovider/../../../src/utils/addToBasket.ts","webpack://oribasketprovider/../../../src/api/deleteOfferItem.ts","webpack://oribasketprovider/../../../src/handlers/deleteOfferItemHandler.ts","webpack://oribasketprovider/../../../src/constants/requestOptions.ts","webpack://oribasketprovider/../../../src/handlers/updateOfferItemHandler.ts","webpack://oribasketprovider/../../../src/constants/shoppingContextActions.ts","webpack://oribasketprovider/../../../src/handlers/acceptNotificationHandler.ts","webpack://oribasketprovider/../../../src/handlers/addBackorderDemandHandler.ts","webpack://oribasketprovider/../../../src/handlers/addBasketOfferHandler.ts","webpack://oribasketprovider/../../../src/handlers/addCatalogueOfferHandler.ts","webpack://oribasketprovider/../../../src/handlers/addCustomerOrderHandler.ts","webpack://oribasketprovider/../../../src/handlers/addFreeShippingOfferHandler.ts","webpack://oribasketprovider/../../../src/handlers/addPersonalNutritionItemsHandler.ts","webpack://oribasketprovider/../../../src/api/addPersonalNutritionItems.ts","webpack://oribasketprovider/../../../src/handlers/addToBasketHandler.ts","webpack://oribasketprovider/../../../src/utils/getBuyingUrlAndMethod.ts","webpack://oribasketprovider/../../../src/handlers/addVoucherHandler.ts","webpack://oribasketprovider/../../../src/handlers/cancelBackorderDemandHandler.ts","webpack://oribasketprovider/../../../src/handlers/cancelSubscriptionHandler.ts","webpack://oribasketprovider/../../../src/handlers/clearBasketHandler.ts","webpack://oribasketprovider/../../../src/handlers/delaySubscriptionHandler.ts","webpack://oribasketprovider/../../../src/handlers/checkLoyaltyDialogResultAndAddToBasketHandler.ts","webpack://oribasketprovider/../../../src/handlers/removeBasketItemHandler.ts","webpack://oribasketprovider/../../../src/handlers/removeCustomerOrderHandler.ts","webpack://oribasketprovider/../../../src/handlers/removeVoucherHandler.ts","webpack://oribasketprovider/../../../src/handlers/replaceShoppingBagItemHandler.ts","webpack://oribasketprovider/../../../src/handlers/replaceSubscriptionHandler.ts","webpack://oribasketprovider/../../../src/api/replaceSubscription.ts","webpack://oribasketprovider/../../../src/handlers/requestShoppingContextHandler.ts","webpack://oribasketprovider/../../../src/handlers/resetShippingSelectionHandler.ts","webpack://oribasketprovider/../../../src/handlers/updateBasketItemHandler.ts","webpack://oribasketprovider/../../../src/handlers/updateCustomerOrderItemHandler.ts","webpack://oribasketprovider/../../../src/handlers/updateDeliveryHandler.ts","webpack://oribasketprovider/../../../src/handlers/updateDeliveryChannelHandler.ts","webpack://oribasketprovider/../../../src/handlers/updateDonationHandler.ts","webpack://oribasketprovider/../../../src/api/updateOfferItem.ts","webpack://oribasketprovider/../../../src/handlers/updateOfferItemsHandler.ts","webpack://oribasketprovider/../../../src/handlers/updatePaymentProviderHandler.ts","webpack://oribasketprovider/../../../src/types/ClientAppConfig.ts","webpack://oribasketprovider/../../../src/contexts/ConfigurationContext.ts","webpack://oribasketprovider/../../../src/utils/storage.ts","webpack://oribasketprovider/../../../src/utils/hashes.ts","webpack://oribasketprovider/../../../src/utils/cookies.ts","webpack://oribasketprovider/../../../src/utils/dispatchBasketUpdatedEvent.ts","webpack://oribasketprovider/../../../src/utils/logReceivedEvent.ts","webpack://oribasketprovider/../../../src/utils/clearCachePages.ts","webpack://oribasketprovider/../../../src/hooks/useBasketProviderData.ts","webpack://oribasketprovider/../../../src/components/BasketProvider.ts","webpack://oribasketprovider/../../../src/containers/ApiProvider.tsx","webpack://oribasketprovider/../../../src/containers/BasketProviderController.tsx","webpack://oribasketprovider/./src/App.tsx","webpack://oribasketprovider/./src/logger.ts","webpack://oribasketprovider/./src/appRender.tsx"],"sourcesContent":["import type { Data } from './Data';\n\nexport { Results as LastAddedItemMethod } from '@ori-events/loyalty-dialog-result';\n\nexport type {\n BasketOffer,\n BasketOfferBenefit,\n BasketOfferConcept,\n BasketOfferConceptBenefit,\n BasketOfferItem,\n BasketOfferProduct,\n BasketOfferPurchase,\n} from './BasketOffer';\nexport { BasketOfferTypes } from './BasketOffer';\n\nexport type { GodModeOutput, GodModeOutputItem } from './GodModeOutput';\n\nexport type { LastAddedItem } from './LastAddedItem';\n\nexport type { Referral } from './Referral';\n\nexport type {\n ShoppingBag,\n ShoppingBagBalance,\n ShoppingBagDiscount,\n ShoppingBagSubscriptions,\n ShoppingBagSubscriptionsPackages,\n ShoppingBagVipLoyalty,\n} from './ShoppingBag';\n\nexport type {\n DiscountMessage,\n OriginalProduct,\n Replacement,\n ReplacementItem,\n ShoppingBagItem,\n ShoppingBagItemProductFlag,\n} from './ShoppingBagItem';\n\nexport type { ShoppingBagOffer } from './ShoppingBagOffer';\n\nexport type { ShoppingMessage, ProgressBarItems } from './ShoppingMessage';\n\nexport type { ShoppingNotification } from './ShoppingNotification';\nexport { ShoppingNotificationType } from './ShoppingNotification';\n\nexport type {\n EndConsumerOrderItem,\n PendingEndConsumerOrder,\n ShippingOffer,\n SliderModel,\n UnitDataCollection,\n UnitDataCollectionBeautyConsultant,\n UnitDataCollectionCommon,\n UnitDataCollectionDelivery,\n UnitDataCollectionDonationUnit,\n UnitDataCollectionEndConsumerPendingOrder,\n UnitDataCollectionOffer,\n UnitDataCollectionPreOrderTargetUnit,\n UnitDataCollectionSectionUnit,\n UnitDataCollectionSpecialOffer,\n UnitDataCollectionVouchers,\n UnitDataCollectionWellnessSelling,\n UnitDataOffer,\n UnitDataOfferItem,\n} from './UnitDataCollection';\n\nexport const Test = 'TEST';\nexport const Name = 'basket-updated';\ntype EventName = typeof Name;\n\nexport const BasketUpdatedEvent: EventName = Name;\nexport type { Data };\n\nexport interface Event extends CustomEvent {\n type: EventName;\n}\n\nexport default Event;\n\ndeclare global {\n interface WindowEventMap {\n [Name]: Event;\n }\n}\n","export enum RequestUrl {\n AcceptNotification = '/system/ajax/Message/AcceptFailMessage',\n AddBackorderDemand = '/system/ajax/ShoppingBag/AddBackorderDemand',\n AddBasketOffer = '/system/ajax/Offer/ApplyBasketOffer',\n AddCatalogueOffer = '/system/ajax/Offer/ApplyCatalogueOffer',\n AddCustomerOrder = '/system/ajax/EndConsumerOrder/ApproveOrders',\n AddFreeShippingOffer = '/system/ajax/Delivery/AddFreeShippingItem',\n AddToBasketCheckLoyalty = '/system/ajax/ShoppingBag/AddToShoppingBagItemAndCheckLoyalty',\n AddToBasketForMoney = '/system/ajax/ShoppingBag/AddOrUpdateShoppingBagItem',\n AddToBasketForPoints = '/system/ajax/Offer/AddOfferItem',\n AddToBasketForPointsRewardShop = '/system/ajax/Offer/RedeemLoyaltyPoints',\n AddVoucher = '/system/ajax/ShoppingBag/AddVoucher',\n CancelBackorderDemand = '/system/ajax/ShoppingBag/CancelBackorderDemand',\n CancelSubscription = '/system/ajax/ShoppingBag/CancelSubscription',\n ClearBasket = '/system/ajax/ShoppingBag/RemoveAllShoppingBagItems',\n DelaySubscription = '/system/ajax/ShoppingBag/DelaySubscription',\n GetShoppingContext = '/system/ajax/ShoppingBag/GetShoppingContext',\n PurchaseBasketOffer = '/system/ajax/Offer/PurchaseBasketOffer',\n RemoveBasketItem = '/system/ajax/ShoppingBag/RemoveShoppingBagItem',\n RemoveCustomerOrder = '/system/ajax/EndConsumerOrder/UnapproveOrder',\n RemoveVoucher = '/system/ajax/ShoppingBag/RemoveVoucher',\n ReplaceShoppingBagItem = '/system/ajax/ShoppingBag/ReplaceShoppingBagItem',\n ResetFreeShippingSelection = '/system/ajax/Delivery/ResetFreeShippingSelection',\n UpdateBasketItem = '/system/ajax/ShoppingBag/UpdateShoppingBagItem',\n UpdateCustomerOrderItem = '/system/ajax/EndConsumerOrder/UpdateEndConsumerOrderItem',\n UpdateDeliveryAddress = '/system/ajax/DeliverySelection/UpdateDeliveryAddress',\n UpdateDeliveryChannel = '/system/ajax/DeliverySelection/UpdateDeliveryChannel',\n UpdateDonation = '/system/ajax/Donation/UpdateDonation',\n UpdateOfferItem = '/system/ajax/Offer/UpdateOfferItem',\n UpdateOfferItems = '/system/ajax/Offer/UpdateOfferItems',\n UpdatePaymentProvider = '/system/ajax/Payment/UpdatePaymentProvider',\n}\n","import camelCase from 'lodash.camelcase';\n\ntype CamelCaseObjectDeepType = (object?: unknown) => T;\n\nexport const convertToCamelCase: CamelCaseObjectDeepType = (object?: unknown) => {\n if (Array.isArray(object)) {\n return object.map(convertToCamelCase) as unknown as T;\n }\n\n if (typeof object === 'object' && object !== null && object.constructor === Object) {\n return Object.fromEntries(\n Object.entries(object).map(([key, value]) => [camelCase(key), convertToCamelCase(value)]),\n ) as unknown as T;\n }\n\n return object as T;\n};\n","// TODO: Move to checkout-utils\nexport enum HttpHeader {\n ContentType = 'Content-Type',\n Placement = 'x-placement',\n}\n","// TODO: Move to checkout-utils\nexport enum ContentType {\n Json = 'application/json',\n}\n","import type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { ContentType, HttpHeader } from '../types';\n\nexport const getHttpRequestSettings: (data?: T, method?: HttpMethod) => RequestInit = (\n data,\n method = HttpMethod.Get,\n) => {\n const headers: HeadersInit = {\n [HttpHeader.ContentType]: ContentType.Json,\n };\n let body: BodyInit | undefined;\n if (data) {\n const { placement, ...finalData } = data;\n if (placement) {\n headers[HttpHeader.Placement] = placement;\n }\n const bodyValue = JSON.stringify(finalData);\n body = bodyValue === '{}' ? undefined : bodyValue;\n }\n\n return {\n credentials: 'same-origin',\n headers,\n method,\n ...(method === HttpMethod.Post && Boolean(body) && { body }),\n };\n};\n","import type { BasketOfferItem } from '@ori-events/add-basket-offer';\nimport * as AddBasketOfferFailed from '@ori-events/add-basket-offer-failed';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport type { RequestUrl } from '../types';\nimport { convertToCamelCase } from './convertToCamelCase';\nimport { getHttpRequestSettings } from './getHttpRequestSettings';\n\ntype AddBasketOfferApplyParams = PositionData & {\n offerId: number;\n};\n\ntype AddBasketOfferPurchaseParams = PositionData & {\n choiceId: number;\n items: BasketOfferItem[];\n};\n\nexport async function addBasketOffer(\n url: RequestUrl.AddBasketOffer | RequestUrl.PurchaseBasketOffer,\n params: AddBasketOfferApplyParams | AddBasketOfferPurchaseParams,\n) {\n const response = await fetch(url, getHttpRequestSettings(params, HttpMethod.Post));\n const data = convertToCamelCase((await response.json()) as object);\n\n if (AddBasketOfferFailed.isAddBasketOfferErrorResponse(data)) {\n const event = new CustomEvent(AddBasketOfferFailed.Name, {\n detail: data,\n });\n window.dispatchEvent(event);\n\n return false;\n }\n\n return data;\n}\n","import { Logger } from '@ori/logger';\n\nimport { PACKAGE_NAME } from './constants';\n\nexport const mainLogger = new Logger(PACKAGE_NAME);\n","import type * as AddToBasket from '@ori-events/add-to-basket';\nimport * as AddToBasketFailed from '@ori-events/add-to-basket-failed';\nimport * as ShowLoyaltyDialog from '@ori-events/show-loyalty-dialog';\nimport type { PositionData } from '@ori/analytics-data';\nimport { getWarningLogger, HttpMethod } from '@ori/checkout-utils';\n\nimport { APP_NAME } from '../constants';\nimport { convertToCamelCase } from './convertToCamelCase';\nimport { getHttpRequestSettings } from './getHttpRequestSettings';\n\nexport type AddToBasketParams = AddToBasket.Data &\n PositionData & {\n choiceId?: number | null;\n catalogueItemId?: string;\n };\n\nconst logWarning = getWarningLogger(APP_NAME);\nexport const MISSING_PLACEMENT_MESSAGE = `Missing 'placement' property in add-to-basket action data will impact reporting, please contact your SE.`;\n\nexport async function addToBasket(url: string, params: AddToBasketParams, buyingMethod: AddToBasket.Method) {\n const { itemCode, placement, quantity } = params;\n if (!placement) {\n logWarning(MISSING_PLACEMENT_MESSAGE);\n }\n const response = await fetch(url, getHttpRequestSettings(params, HttpMethod.Post));\n const data = convertToCamelCase((await response.json()) as object);\n\n if (AddToBasketFailed.isAddToBasketErrorResponse(data)) {\n const event = new CustomEvent(AddToBasketFailed.Name, {\n detail: data,\n });\n window.dispatchEvent(event);\n\n return false;\n }\n\n if (AddToBasketFailed.isAddToBasketLoyaltyResponse(data)) {\n const event = new CustomEvent(ShowLoyaltyDialog.Name, {\n detail: {\n ...data,\n itemCode,\n placement,\n quantity,\n },\n });\n window.dispatchEvent(event);\n\n return false;\n }\n\n return {\n ...data,\n lastAddedItem: {\n itemCode,\n method: buyingMethod,\n quantity,\n },\n };\n}\n","import {\n deleteShoppingSessionOfferChoice,\n type DeleteShoppingSessionOfferChoiceHeaders,\n} from '@ori/global-api-client-react';\n\nimport type { HandlerSettings } from '../types';\n\ntype DeleteOfferItemHandlerSettings = Pick;\n\nexport type DeleteOfferItemParams = DeleteOfferItemHandlerSettings & {\n itemCode: string;\n offerId: number;\n tenant: string;\n};\n\nexport async function deleteOfferItem({ client, itemCode, offerId, sessionId, tenant }: DeleteOfferItemParams) {\n // TODO: Is this needed when there is the tenant prop of ApiProvider applied on some upper level?\n const headers: DeleteShoppingSessionOfferChoiceHeaders = {\n 'x-tenant-context': tenant,\n };\n\n return deleteShoppingSessionOfferChoice(client, sessionId, offerId, itemCode, headers);\n}\n","import type * as BasketUpdated from '@ori-events/basket-updated';\nimport type * as DeleteOfferItem from '@ori-events/delete-offer-item';\nimport { isDeleteOfferItemErrorResponse, Name as ErrorEventName } from '@ori-events/delete-offer-item-failed';\nimport type { Data as ErrorData } from '@ori-events/delete-offer-item-failed';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { deleteOfferItem } from '../api';\nimport { mainLogger } from '../logger';\nimport { RequestUrl, type HandlerSettings } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & DeleteOfferItem.Data;\n\nconst dispatchErrorEvent = (detail: ErrorData) => {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail,\n });\n window.dispatchEvent(errorEvent);\n};\n\nexport async function deleteOfferItemHandler(\n { detail: { choiceId, itemCode } }: CustomEvent,\n { client, sessionId, tenant }: HandlerSettings,\n) {\n // STEP 1 - Update through API\n try {\n await deleteOfferItem({\n client,\n itemCode,\n offerId: choiceId,\n sessionId,\n tenant,\n });\n } catch (error: unknown) {\n mainLogger.error(error as Error, { message: 'Error while deleting offer item in delete-offer-item event.' });\n dispatchErrorEvent({\n isSuccess: false,\n localizedMessage: '',\n message: 'Deletion of offer item failed via API call',\n });\n\n return false;\n }\n\n // STEP 2 - Update shopping context via Online endpoint\n const response = await fetch(RequestUrl.GetShoppingContext, getHttpRequestSettings(undefined, HttpMethod.Post));\n\n const data = convertToCamelCase((await response.json()) as object);\n\n if (isDeleteOfferItemErrorResponse(data)) {\n dispatchErrorEvent(data);\n\n return false;\n }\n\n return data;\n}\n","// TODO: common header names & values to checkout-utils\nexport const putRequestOptions = {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- predefined HTTP header name\n headers: { 'Content-Type': 'application/json' },\n method: 'PUT',\n};\n","import type * as BasketUpdated from '@ori-events/basket-updated';\nimport type * as UpdateOfferItem from '@ori-events/update-offer-item';\nimport { isUpdateOfferItemFailedResponse, Name as ErrorEventName } from '@ori-events/update-offer-item-failed';\nimport type { Data as ErrorData } from '@ori-events/update-offer-item-failed';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { updateOfferItem } from '../api';\nimport { mainLogger } from '../logger';\nimport { RequestUrl, type HandlerSettings } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & UpdateOfferItem.Data;\n\nconst dispatchErrorEvent = (detail: ErrorData) => {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail,\n });\n window.dispatchEvent(errorEvent);\n};\n\nexport async function updateOfferItemHandler(\n { detail: { choiceId, itemCode, quantity } }: CustomEvent,\n { client, sessionId, tenant }: HandlerSettings,\n) {\n // STEP 1 - Update through API\n try {\n await updateOfferItem({\n client,\n itemCode,\n offerId: choiceId,\n quantity,\n sessionId,\n tenant,\n });\n } catch (error: unknown) {\n mainLogger.error(error as Error, { message: 'Error while updating offer item in update-offer-item event.' });\n dispatchErrorEvent({\n isSuccess: false,\n localizedMessage: '',\n message: 'Updating of offer item failed via API call',\n });\n\n return false;\n }\n\n // STEP 2 - Update shopping context via Online endpoint\n const response = await fetch(RequestUrl.GetShoppingContext, getHttpRequestSettings(undefined, HttpMethod.Post));\n\n const data = convertToCamelCase((await response.json()) as object);\n\n if (isUpdateOfferItemFailedResponse(data)) {\n dispatchErrorEvent(data);\n\n return false;\n }\n\n return data;\n}\n","import * as AcceptNotification from '@ori-events/accept-notification';\nimport * as AcceptNotificationFailed from '@ori-events/accept-notification-failed';\nimport * as AddBackorderDemand from '@ori-events/add-backorder-demand';\nimport * as AddBackorderDemandFailed from '@ori-events/add-backorder-demand-failed';\nimport * as AddBasketOffer from '@ori-events/add-basket-offer';\nimport * as AddBasketOfferFailed from '@ori-events/add-basket-offer-failed';\nimport * as AddCatalogueOffer from '@ori-events/add-catalogue-offer';\nimport * as AddCatalogueOfferFailed from '@ori-events/add-catalogue-offer-failed';\nimport * as AddCustomerOrder from '@ori-events/add-customer-order';\nimport * as AddCustomerOrderFailed from '@ori-events/add-customer-order-failed';\nimport * as AddFreeShippingOffer from '@ori-events/add-free-shipping-offer';\nimport * as AddFreeShippingOfferFailed from '@ori-events/add-free-shipping-offer-failed';\nimport * as AddPersonalNutritionItems from '@ori-events/add-personal-nutrition-items';\nimport * as AddPersonalNutritionItemsFailed from '@ori-events/add-personal-nutrition-items-failed';\nimport * as AddToBasket from '@ori-events/add-to-basket';\nimport * as AddToBasketFailed from '@ori-events/add-to-basket-failed';\nimport * as AddVoucher from '@ori-events/add-voucher';\nimport * as AddVoucherFailed from '@ori-events/add-voucher-failed';\nimport * as CancelBackorderDemand from '@ori-events/cancel-backorder-demand';\nimport * as CancelSubscription from '@ori-events/cancel-subscription';\nimport * as CancelSubscriptionFailed from '@ori-events/cancel-subscription-failed';\nimport * as ClearBasket from '@ori-events/clear-basket';\nimport * as DelaySubscription from '@ori-events/delay-subscription';\nimport * as DelaySubscriptionFailed from '@ori-events/delay-subscription-failed';\nimport * as DeleteOfferItem from '@ori-events/delete-offer-item';\nimport * as DeleteOfferItemFailed from '@ori-events/delete-offer-item-failed';\nimport * as LoyaltyDialogResult from '@ori-events/loyalty-dialog-result';\nimport * as RemoveBasketItem from '@ori-events/remove-basket-item';\nimport * as RemoveBasketItemFailed from '@ori-events/remove-basket-item-failed';\nimport * as RemoveCustomerOrder from '@ori-events/remove-customer-order';\nimport * as RemoveCustomerOrderFailed from '@ori-events/remove-customer-order-failed';\nimport * as RemoveVoucher from '@ori-events/remove-voucher';\nimport * as RemoveVoucherFailed from '@ori-events/remove-voucher-failed';\nimport * as ReplaceShoppingBagItem from '@ori-events/replace-shopping-bag-item';\nimport * as ReplaceShoppingBagItemFailed from '@ori-events/replace-shopping-bag-item-failed';\nimport * as ReplaceSubscription from '@ori-events/replace-subscription';\nimport * as ReplaceSubscriptionFailed from '@ori-events/replace-subscription-failed';\nimport * as RequestShoppingContext from '@ori-events/request-shopping-context';\nimport * as ResetShippingSelection from '@ori-events/reset-shipping-selection';\nimport * as ShoppingContextLoaded from '@ori-events/shopping-context-loaded';\nimport * as UpdateBasketItem from '@ori-events/update-basket-item';\nimport * as UpdateBasketItemFailed from '@ori-events/update-basket-item-failed';\nimport * as UpdateCustomerOrderItem from '@ori-events/update-customer-order-item';\nimport * as UpdateCustomerOrderItemFailed from '@ori-events/update-customer-order-item-failed';\nimport * as UpdateDelivery from '@ori-events/update-delivery';\nimport * as UpdateDeliveryChannel from '@ori-events/update-delivery-channel';\nimport * as UpdateDeliveryChannelFailed from '@ori-events/update-delivery-channel-failed';\nimport * as UpdateDeliveryFailed from '@ori-events/update-delivery-failed';\nimport * as UpdateDonation from '@ori-events/update-donation';\nimport * as UpdateDonationFailed from '@ori-events/update-donation-failed';\nimport * as UpdateOfferItem from '@ori-events/update-offer-item';\nimport * as UpdateOfferItemFailed from '@ori-events/update-offer-item-failed';\nimport * as UpdateOfferItems from '@ori-events/update-offer-items';\nimport * as UpdatePaymentProvider from '@ori-events/update-payment-provider';\nimport * as UpdatePaymentProviderFailed from '@ori-events/update-payment-provider-failed';\n\nimport {\n acceptNotificationHandler,\n addBackorderDemandHandler,\n addBasketOfferHandler,\n addCatalogueOfferHandler,\n addCustomerOrderHandler,\n addFreeShippingOfferHandler,\n addPersonalNutritionItemsHandler,\n addToBasketHandler,\n addVoucherHandler,\n cancelBackorderDemandHandler,\n cancelSubscriptionHandler,\n checkLoyaltyDialogResultAndAddToBasketHandler,\n clearBasketHandler,\n delaySubscriptionHandler,\n deleteOfferItemHandler,\n removeBasketItemHandler,\n removeCustomerOrderHandler,\n removeVoucherHandler,\n replaceShoppingBagItemHandler,\n replaceSubscriptionHandler,\n requestShoppingContextHandler,\n resetShippingSelectionHandler,\n updateBasketItemHandler,\n updateCustomerOrderItemHandler,\n updateDeliveryHandler,\n updateDeliveryChannelHandler,\n updateDonationHandler,\n updateOfferItemHandler,\n updateOfferItemsHandler,\n updatePaymentProviderHandler,\n} from '../handlers';\nimport type { ShoppingContextActionInfo, TriggerActionEventName } from '../types';\n\n/**\n * Configuration of shopping context actions. Mapping of triggering events to response\n * success & failed events and event handlers for the responses.\n */\nexport const shoppingContextActions = new Map([\n [AcceptNotification.Name, { failedEvent: AcceptNotificationFailed.Name, handler: acceptNotificationHandler }],\n [AddBackorderDemand.Name, { failedEvent: AddBackorderDemandFailed.Name, handler: addBackorderDemandHandler }],\n [AddBasketOffer.Name, { failedEvent: AddBasketOfferFailed.Name, handler: addBasketOfferHandler }],\n [AddCatalogueOffer.Name, { failedEvent: AddCatalogueOfferFailed.Name, handler: addCatalogueOfferHandler }],\n [AddCustomerOrder.Name, { failedEvent: AddCustomerOrderFailed.Name, handler: addCustomerOrderHandler }],\n [AddFreeShippingOffer.Name, { failedEvent: AddFreeShippingOfferFailed.Name, handler: addFreeShippingOfferHandler }],\n [\n AddPersonalNutritionItems.Name,\n { failedEvent: AddPersonalNutritionItemsFailed.Name, handler: addPersonalNutritionItemsHandler },\n ],\n [AddToBasket.Name, { failedEvent: AddToBasketFailed.Name, handler: addToBasketHandler }],\n [AddVoucher.Name, { failedEvent: AddVoucherFailed.Name, handler: addVoucherHandler }],\n // TODO: no failed event available so far for CancelBackorderDemand\n [CancelBackorderDemand.Name, { handler: cancelBackorderDemandHandler }],\n [CancelSubscription.Name, { failedEvent: CancelSubscriptionFailed.Name, handler: cancelSubscriptionHandler }],\n // TODO: no failed event available so far for ClearBasket\n [ClearBasket.Name, { handler: clearBasketHandler }],\n [DelaySubscription.Name, { failedEvent: DelaySubscriptionFailed.Name, handler: delaySubscriptionHandler }],\n [DeleteOfferItem.Name, { failedEvent: DeleteOfferItemFailed.Name, handler: deleteOfferItemHandler }],\n // TODO: solve better the possible cases for LoyaltyDialogResult - maybe add-to-basket-failed,\n // and don't set up the loading state when just closed dialog (so exception to check for this case)\n [LoyaltyDialogResult.Name, { handler: checkLoyaltyDialogResultAndAddToBasketHandler }],\n [RemoveBasketItem.Name, { failedEvent: RemoveBasketItemFailed.Name, handler: removeBasketItemHandler }],\n [RemoveCustomerOrder.Name, { failedEvent: RemoveCustomerOrderFailed.Name, handler: removeCustomerOrderHandler }],\n [RemoveVoucher.Name, { failedEvent: RemoveVoucherFailed.Name, handler: removeVoucherHandler }],\n [\n ReplaceShoppingBagItem.Name,\n { failedEvent: ReplaceShoppingBagItemFailed.Name, handler: replaceShoppingBagItemHandler },\n ],\n [ReplaceSubscription.Name, { failedEvent: ReplaceSubscriptionFailed.Name, handler: replaceSubscriptionHandler }],\n [RequestShoppingContext.Name, { successEvent: ShoppingContextLoaded.Name, handler: requestShoppingContextHandler }],\n // TODO: no failed event available so far for ResetShippingSelection\n [ResetShippingSelection.Name, { handler: resetShippingSelectionHandler }],\n [UpdateBasketItem.Name, { failedEvent: UpdateBasketItemFailed.Name, handler: updateBasketItemHandler }],\n [\n UpdateCustomerOrderItem.Name,\n { failedEvent: UpdateCustomerOrderItemFailed.Name, handler: updateCustomerOrderItemHandler },\n ],\n [UpdateDelivery.Name, { failedEvent: UpdateDeliveryFailed.Name, handler: updateDeliveryHandler }],\n [\n UpdateDeliveryChannel.Name,\n { failedEvent: UpdateDeliveryChannelFailed.Name, handler: updateDeliveryChannelHandler },\n ],\n [UpdateDonation.Name, { failedEvent: UpdateDonationFailed.Name, handler: updateDonationHandler }],\n [UpdateOfferItem.Name, { failedEvent: UpdateOfferItemFailed.Name, handler: updateOfferItemHandler }],\n // TODO: no failed event available so far for UpdateOfferItems\n [UpdateOfferItems.Name, { handler: updateOfferItemsHandler }],\n [\n UpdatePaymentProvider.Name,\n { failedEvent: UpdatePaymentProviderFailed.Name, handler: updatePaymentProviderHandler },\n ],\n]);\n","import type * as AcceptNotification from '@ori-events/accept-notification';\nimport type { Data as ErrorData, AcceptNotificationResponse } from '@ori-events/accept-notification-failed';\nimport { isAcceptNotificationErrorResponse, Name as ErrorEventName } from '@ori-events/accept-notification-failed';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase } from '../utils';\n\nexport async function acceptNotificationHandler({ detail: { reasonId } }: CustomEvent) {\n const response = await fetch(`${RequestUrl.AcceptNotification}?reasonId=${reasonId}`);\n const data = convertToCamelCase((await response.json()) as object);\n\n if (isAcceptNotificationErrorResponse(data)) {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import type * as AddBackorderDemand from '@ori-events/add-backorder-demand';\nimport type { AddBackorderDemandResponse, Data as ErrorData } from '@ori-events/add-backorder-demand-failed';\nimport { isAddBackorderDemandErrorResponse, Name as ErrorEventName } from '@ori-events/add-backorder-demand-failed';\nimport type * as BasketUpdated from '@ori-events/basket-updated';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = AddBackorderDemand.Data & PositionData;\n\nexport async function addBackorderDemandHandler({ detail: { lineNumber, placement, quantity } }: CustomEvent) {\n if (typeof quantity === 'number' && quantity > 0) {\n const responseWithQuantity = await fetch(\n `${RequestUrl.UpdateBasketItem}?lineNumber=${lineNumber}&quantity=${quantity}`,\n getHttpRequestSettings({ placement }),\n );\n const dataWithQuantity = convertToCamelCase(\n (await responseWithQuantity.json()) as object,\n );\n\n if (isAddBackorderDemandErrorResponse(dataWithQuantity)) {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail: dataWithQuantity,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n }\n\n const response = await fetch(`${RequestUrl.AddBackorderDemand}?lineNumber=${lineNumber}`, getHttpRequestSettings());\n const data = convertToCamelCase((await response.json()) as object);\n\n if (isAddBackorderDemandErrorResponse(data)) {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import type * as AddBasketOffer from '@ori-events/add-basket-offer';\nimport { isAddBasketOfferPurchaseEvent } from '@ori-events/add-basket-offer';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { addBasketOffer } from '../utils';\n\ntype Data = AddBasketOffer.Data & PositionData;\ntype PurchaseData = AddBasketOffer.AddBasketOfferPurchaseData & PositionData;\n\nexport async function addBasketOfferHandler(event: CustomEvent) {\n if (isAddBasketOfferPurchaseEvent(event)) {\n const {\n detail: { items, offerId: choiceId, placement },\n } = event as CustomEvent;\n\n return addBasketOffer(RequestUrl.PurchaseBasketOffer, {\n choiceId,\n items,\n placement,\n });\n }\n\n const {\n detail: { offerId, placement },\n } = event as CustomEvent;\n\n return addBasketOffer(RequestUrl.AddBasketOffer, {\n offerId,\n placement,\n });\n}\n","import type * as AddCatalogueOffer from '@ori-events/add-catalogue-offer';\nimport * as AddCatalogueOfferFailed from '@ori-events/add-catalogue-offer-failed';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = AddCatalogueOffer.Data & PositionData;\n\nexport const dispatchAddCatalogueOfferFailedEvent = (detail: AddCatalogueOfferFailed.Data) => {\n const event = new CustomEvent(AddCatalogueOfferFailed.Name, {\n detail,\n });\n window.dispatchEvent(event);\n};\n\nexport async function addCatalogueOfferHandler({ detail: { offerId, placement } }: CustomEvent) {\n const request = await fetch(\n RequestUrl.AddCatalogueOffer,\n getHttpRequestSettings({ offerId, placement }, HttpMethod.Post),\n );\n\n const response = convertToCamelCase(\n (await request.json()) as object,\n );\n if (AddCatalogueOfferFailed.isAddCatalogueOfferErrorResponse(response)) {\n dispatchAddCatalogueOfferFailedEvent(response);\n\n return false;\n }\n\n return response;\n}\n","import type * as AddCustomerOrder from '@ori-events/add-customer-order';\nimport * as AddCustomerOrderFailed from '@ori-events/add-customer-order-failed';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = AddCustomerOrder.Data & PositionData;\n\nexport async function addCustomerOrderHandler({ detail: { orderIds, placement } }: CustomEvent) {\n const url = new URL(RequestUrl.AddCustomerOrder, window.location.href);\n orderIds.forEach((id) => url.searchParams.append('orderIds', String(id)));\n\n const response = await fetch(url.toString(), getHttpRequestSettings({ placement }));\n const data = convertToCamelCase((await response.json()) as object);\n\n if (AddCustomerOrderFailed.isAddCustomerOrderErrorResponse(data)) {\n const errorEvent = new CustomEvent(AddCustomerOrderFailed.Name, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return {\n ...data,\n lastAddedCustomerOrderIds: orderIds,\n };\n}\n","import type * as AddFreeShippingOffer from '@ori-events/add-free-shipping-offer';\nimport * as AddFreeShippingOfferFailed from '@ori-events/add-free-shipping-offer-failed';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = AddFreeShippingOffer.Data & PositionData;\n\nexport const dispatchAddFreeShippingOfferFailedEvent = (detail: AddFreeShippingOfferFailed.Data) => {\n const event = new CustomEvent(AddFreeShippingOfferFailed.Name, {\n detail,\n });\n window.dispatchEvent(event);\n};\n\nexport async function addFreeShippingOfferHandler({ detail: { itemCode, placement } }: CustomEvent) {\n const request = await fetch(\n RequestUrl.AddFreeShippingOffer,\n getHttpRequestSettings({ itemCode, placement }, HttpMethod.Post),\n );\n\n const response = convertToCamelCase(\n (await request.json()) as object,\n );\n if (AddFreeShippingOfferFailed.isAddFreeShippingOfferErrorResponse(response)) {\n dispatchAddFreeShippingOfferFailedEvent(response);\n\n return false;\n }\n\n return response;\n}\n","import type * as AddPersonalNutritionItems from '@ori-events/add-personal-nutrition-items';\nimport * as AddPersonalNutritionItemsFailed from '@ori-events/add-personal-nutrition-items-failed';\nimport type * as BasketUpdated from '@ori-events/basket-updated';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\nimport { type GlobalShoppingPersonalNutritionComponentsDto } from '@ori/global-api-client-react';\n\nimport { addPersonalNutritionItems } from '../api';\nimport { mainLogger } from '../logger';\nimport { RequestUrl } from '../types';\nimport type { HandlerSettings } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & AddPersonalNutritionItems.Data;\n\nexport async function addPersonalNutritionItemsHandler(\n { detail: { items } }: CustomEvent,\n { client, sessionId, tenant }: HandlerSettings,\n) {\n const globalShoppingPersonalNutritionComponentsDto: GlobalShoppingPersonalNutritionComponentsDto = {\n collection: items,\n };\n\n try {\n await addPersonalNutritionItems({\n client,\n globalShoppingPersonalNutritionComponentsDto,\n sessionId,\n tenant,\n });\n } catch (error: unknown) {\n mainLogger.error(error as Error, {\n message: 'Error while adding personal nutrition items in addPersonalNutritionItems event',\n });\n\n const errorEvent = new CustomEvent(AddPersonalNutritionItemsFailed.Name, {\n detail: {\n isSuccess: false,\n localizedMessage: String(error),\n message: String(error),\n },\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n // STEP 2 - Update shopping context via Online endpoint\n const response = await fetch(RequestUrl.GetShoppingContext, getHttpRequestSettings(undefined, HttpMethod.Post));\n const rawData = convertToCamelCase((await response.json()) as object);\n\n if (AddPersonalNutritionItemsFailed.isAddPersonalNutritionItemsErrorResponse(rawData)) {\n const errorEvent = new CustomEvent(AddPersonalNutritionItemsFailed.Name, {\n detail: rawData,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n const data = {\n ...rawData,\n isPersonalNutritionAddedAsLast: true,\n };\n\n return data;\n}\n","import {\n type GlobalShoppingPersonalNutritionComponentsDto,\n type UpdateShoppingSessionPersonalNutritionHeaders,\n updateShoppingSessionPersonalNutrition,\n} from '@ori/global-api-client-react';\n\nimport type { HandlerSettings } from '../types';\n\ntype AddPersonalNutritionItemsHandlerSettings = Pick;\n\nexport type AddPersonalNutritionItemsParams = AddPersonalNutritionItemsHandlerSettings & {\n globalShoppingPersonalNutritionComponentsDto: GlobalShoppingPersonalNutritionComponentsDto;\n sessionId: string;\n tenant: string;\n};\n\nexport async function addPersonalNutritionItems({\n client,\n globalShoppingPersonalNutritionComponentsDto,\n sessionId,\n tenant,\n}: AddPersonalNutritionItemsParams) {\n // TODO: Is this needed when there is the tenant prop of ApiProvider applied on some upper level?\n const headers: UpdateShoppingSessionPersonalNutritionHeaders = {\n 'x-tenant-context': tenant,\n };\n\n return updateShoppingSessionPersonalNutrition(\n client,\n sessionId,\n globalShoppingPersonalNutritionComponentsDto,\n headers,\n );\n}\n","import type * as AddToBasket from '@ori-events/add-to-basket';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { addToBasket, getBuyingUrlAndMethod } from '../utils';\n\ntype Data = AddToBasket.Data & PositionData;\n\nexport async function addToBasketHandler({\n detail: { itemCode, quantity, originalItemCode, replacementType, method: addToBasketMethod, placement },\n}: CustomEvent) {\n const { url, method } = getBuyingUrlAndMethod(addToBasketMethod);\n\n return addToBasket(\n url,\n {\n itemCode,\n quantity,\n originalItemCode,\n replacementType,\n placement,\n },\n method,\n );\n}\n","import * as AddToBasket from '@ori-events/add-to-basket';\n\nimport { RequestUrl } from '../types';\n\ninterface BuyingUrlAndMethod {\n url: string;\n method: AddToBasket.Method;\n}\n\nexport function getBuyingUrlAndMethod(method?: AddToBasket.Method): BuyingUrlAndMethod {\n switch (method) {\n case AddToBasket.Method.BUY_FOR_MONEY:\n return {\n url: RequestUrl.AddToBasketForMoney,\n method: AddToBasket.Method.BUY_FOR_MONEY,\n };\n case AddToBasket.Method.BUY_FOR_POINTS:\n return {\n url: RequestUrl.AddToBasketForPointsRewardShop,\n method: AddToBasket.Method.BUY_FOR_POINTS,\n };\n default:\n return {\n url: RequestUrl.AddToBasketCheckLoyalty,\n method: AddToBasket.Method.BUY_FOR_MONEY,\n };\n }\n}\n","import type * as AddVoucher from '@ori-events/add-voucher';\nimport * as AddVoucherFailed from '@ori-events/add-voucher-failed';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = AddVoucher.Data & PositionData;\n\nconst dispatchAddVoucherFailed = (detail: AddVoucherFailed.Data) => {\n const event = new CustomEvent(AddVoucherFailed.Name, {\n detail,\n });\n window.dispatchEvent(event);\n};\n\nexport async function addVoucherHandler({ detail: { placement, voucherCode } }: CustomEvent) {\n const fetchUrl = `${RequestUrl.AddVoucher}?voucherCode=${voucherCode}`;\n const response = await fetch(fetchUrl, getHttpRequestSettings({ placement }));\n const data = convertToCamelCase((await response.json()) as object);\n\n if (AddVoucherFailed.isAddVoucherErrorResponse(data)) {\n dispatchAddVoucherFailed(data);\n\n return false;\n }\n\n return data;\n}\n","import type * as BasketUpdated from '@ori-events/basket-updated';\nimport type * as CancelBackorderDemand from '@ori-events/cancel-backorder-demand';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = CancelBackorderDemand.Data & PositionData;\n\nexport async function cancelBackorderDemandHandler({ detail: { lineNumber, placement } }: CustomEvent) {\n const response = await fetch(\n `${RequestUrl.CancelBackorderDemand}?lineNumber=${lineNumber}`,\n getHttpRequestSettings({ placement }),\n );\n\n return convertToCamelCase((await response.json()) as object);\n}\n","import type * as CancelSubscription from '@ori-events/cancel-subscription';\nimport * as CancelSubscriptionFailed from '@ori-events/cancel-subscription-failed';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = CancelSubscription.Data & PositionData;\n\nexport const dispatchCancelSubscriptionFailedEvent = (detail: CancelSubscriptionFailed.Data) => {\n const event = new CustomEvent(CancelSubscriptionFailed.Name, {\n detail,\n });\n window.dispatchEvent(event);\n};\n\nexport async function cancelSubscriptionHandler({\n detail: { consumerId, packageId, placement, subscriptionId },\n}: CustomEvent) {\n const response = await fetch(\n `${RequestUrl.CancelSubscription}?consumerId=${consumerId}&subscriptionId=${subscriptionId}&packageId=${packageId}`,\n getHttpRequestSettings({ placement }),\n );\n\n const data = convertToCamelCase(\n (await response.json()) as object,\n );\n\n if (CancelSubscriptionFailed.isCancelSubscriptionErrorResponse(data)) {\n dispatchCancelSubscriptionFailedEvent(data);\n\n return false;\n }\n\n return data;\n}\n","import type * as BasketUpdated from '@ori-events/basket-updated';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\nexport async function clearBasketHandler() {\n const response = await fetch(RequestUrl.ClearBasket, getHttpRequestSettings());\n\n return convertToCamelCase((await response.json()) as object);\n}\n","import type * as DelaySubscription from '@ori-events/delay-subscription';\nimport * as DelaySubscriptionFailed from '@ori-events/delay-subscription-failed';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = DelaySubscription.Data & PositionData;\n\nexport const dispatchDelaySubscriptionFailedEvent = (detail: DelaySubscriptionFailed.Data) => {\n const event = new CustomEvent(DelaySubscriptionFailed.Name, {\n detail,\n });\n window.dispatchEvent(event);\n};\n\nexport async function delaySubscriptionHandler({\n detail: { cycle, placement, step, subscriptionId },\n}: CustomEvent) {\n const response = await fetch(\n RequestUrl.DelaySubscription,\n getHttpRequestSettings({ cycle, placement, step, subscriptionId }, HttpMethod.Post),\n );\n const data = convertToCamelCase((await response.json()) as object);\n\n if (DelaySubscriptionFailed.isDelaySubscriptionErrorResponse(data)) {\n dispatchDelaySubscriptionFailedEvent(data);\n\n return false;\n }\n\n return data;\n}\n","import * as AddToBasket from '@ori-events/add-to-basket';\nimport * as LoyaltyDialogResult from '@ori-events/loyalty-dialog-result';\n\nimport { RequestUrl } from '../types';\nimport { addToBasket } from '../utils';\n\nexport async function checkLoyaltyDialogResultAndAddToBasketHandler({ detail }: CustomEvent) {\n const { result } = detail;\n\n if (LoyaltyDialogResult.isLoyaltyCloseResult(result)) {\n return false;\n }\n\n if (LoyaltyDialogResult.isLoyaltyBuyForPointsResult(result)) {\n const { catalogueItemId, choiceId, itemCode, quantity, placement } = detail;\n\n return addToBasket(\n RequestUrl.AddToBasketForPoints,\n {\n itemCode,\n quantity,\n choiceId,\n catalogueItemId,\n placement,\n },\n AddToBasket.Method.BUY_FOR_POINTS,\n );\n }\n\n if (LoyaltyDialogResult.isLoyaltyBuyForMoneyResult(result)) {\n const { itemCode, quantity, originalItemCode, replacementType, placement } = detail;\n\n return addToBasket(\n RequestUrl.AddToBasketForMoney,\n {\n itemCode,\n quantity,\n originalItemCode,\n replacementType,\n placement,\n },\n AddToBasket.Method.BUY_FOR_MONEY,\n );\n }\n\n return false;\n}\n","import type * as BasketUpdated from '@ori-events/basket-updated';\nimport type * as RemoveBasketItem from '@ori-events/remove-basket-item';\nimport * as RemoveBasketItemFailed from '@ori-events/remove-basket-item-failed';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & RemoveBasketItem.Data;\n\nexport async function removeBasketItemHandler({ detail: { lineNumber, placement } }: CustomEvent) {\n const response = await fetch(\n RequestUrl.RemoveBasketItem,\n getHttpRequestSettings({ lineNumber, placement }, HttpMethod.Post),\n );\n\n const data = convertToCamelCase((await response.json()) as object);\n\n if (RemoveBasketItemFailed.isRemoveBasketItemErrorResponse(data)) {\n const errorEvent = new CustomEvent(RemoveBasketItemFailed.Name, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import type * as RemoveCustomerOrder from '@ori-events/remove-customer-order';\nimport * as RemoveCustomerOrderFailed from '@ori-events/remove-customer-order-failed';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & RemoveCustomerOrder.Data;\n\nexport async function removeCustomerOrderHandler({ detail: { endConsumerOrderId, placement } }: CustomEvent) {\n const fetchUrl = `${RequestUrl.RemoveCustomerOrder}?endConsumerOrderId=${endConsumerOrderId}`;\n\n const response = await fetch(fetchUrl, getHttpRequestSettings({ placement }));\n const data = convertToCamelCase(\n (await response.json()) as object,\n );\n\n if (RemoveCustomerOrderFailed.isRemoveCustomerOrderErrorResponse(data)) {\n const errorEvent = new CustomEvent(RemoveCustomerOrderFailed.Name, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import type * as RemoveVoucher from '@ori-events/remove-voucher';\nimport * as RemoveVoucherFailed from '@ori-events/remove-voucher-failed';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & RemoveVoucher.Data;\n\nconst dispatchRemoveVoucherFailed = (detail: RemoveVoucherFailed.Data) => {\n const event = new CustomEvent(RemoveVoucherFailed.Name, {\n detail,\n });\n window.dispatchEvent(event);\n};\n\nexport async function removeVoucherHandler({ detail: { placement, voucherCode } }: CustomEvent) {\n const fetchUrl = `${RequestUrl.RemoveVoucher}?voucherCode=${voucherCode}`;\n const response = await fetch(fetchUrl, getHttpRequestSettings({ placement }));\n const data = convertToCamelCase((await response.json()) as object);\n\n if (RemoveVoucherFailed.isRemoveVoucherErrorResponse(data)) {\n dispatchRemoveVoucherFailed(data);\n\n return false;\n }\n\n return data;\n}\n","import type * as ReplaceShoppingBagItem from '@ori-events/replace-shopping-bag-item';\nimport * as ReplaceShoppingBagItemFailed from '@ori-events/replace-shopping-bag-item-failed';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & ReplaceShoppingBagItem.Data;\n\nexport async function replaceShoppingBagItemHandler({\n detail: { itemCode, lineNumber, placement },\n}: CustomEvent) {\n const response = await fetch(\n `${RequestUrl.ReplaceShoppingBagItem}?lineNumber=${lineNumber}&itemCode=${itemCode}`,\n getHttpRequestSettings({ placement }),\n );\n const data = convertToCamelCase(\n (await response.json()) as object,\n );\n\n if (ReplaceShoppingBagItemFailed.isReplaceShoppingBagItemErrorResponse(data)) {\n const errorEvent = new CustomEvent(ReplaceShoppingBagItemFailed.Name, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import type * as ReplaceSubscription from '@ori-events/replace-subscription';\nimport * as ReplaceSubscriptionFailed from '@ori-events/replace-subscription-failed';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\nimport { type GlobalCustomersSubscriptionItemDto } from '@ori/global-api-client-react';\n\nimport { replaceSubscription } from '../api';\nimport { mainLogger } from '../logger';\nimport { RequestUrl } from '../types';\nimport type { HandlerSettings } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & ReplaceSubscription.Data;\ntype Response = ReplaceSubscriptionFailed.ReplaceSubscriptionResponse;\n\nexport async function replaceSubscriptionHandler(\n { detail: { droppingId, itemCode, subscriptionId } }: CustomEvent,\n { client, customerId, tenant }: HandlerSettings,\n) {\n // STEP 1 - Update through API\n const subscriptionItemId = 0;\n const item = {\n droppingId,\n isReplacementAllowed: true,\n itemCode,\n quantity: 1,\n subscriptionItemId,\n // TODO: This was optional / not used before, that's why the cast for now.\n // The ReplaceSubscription event data contains currently only the props destructured above.\n // To change it (if requested), we need cross-team collaboration with Presentation.\n // discountedPrice: 0,\n // discountPercent: 0,\n // totalBp: 0,\n // price: 0,\n // isDropped: false,\n };\n const globalCustomersSubscriptionItemDto = item as GlobalCustomersSubscriptionItemDto;\n\n try {\n await replaceSubscription({\n client,\n customerId,\n globalCustomersSubscriptionItemDto,\n subscriptionId,\n subscriptionItemId,\n tenant,\n });\n } catch (error: unknown) {\n mainLogger.error(error as Error, { message: 'Error while replacing subscription in replaceSubscription event.' });\n\n return false;\n }\n\n // STEP 2 - Update shopping context via Online endpoint\n const response = await fetch(RequestUrl.GetShoppingContext, getHttpRequestSettings(undefined, HttpMethod.Post));\n const data = convertToCamelCase((await response.json()) as object);\n\n if (ReplaceSubscriptionFailed.isReplaceSubscriptionErrorResponse(data)) {\n const errorEvent = new CustomEvent(ReplaceSubscriptionFailed.Name, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import {\n type GlobalCustomersSubscriptionItemDto,\n updateCustomerSubscriptionSubscriptionItem,\n type UpdateCustomerSubscriptionSubscriptionItemHeaders,\n} from '@ori/global-api-client-react';\n\nimport type { HandlerSettings } from '../types';\n\ntype ReplaceSubscriptionHandlerSettings = Pick;\n\nexport type ReplaceSubscriptionParams = ReplaceSubscriptionHandlerSettings & {\n globalCustomersSubscriptionItemDto: GlobalCustomersSubscriptionItemDto;\n subscriptionId: number;\n subscriptionItemId: number;\n tenant: string;\n};\n\nexport async function replaceSubscription({\n client,\n customerId,\n globalCustomersSubscriptionItemDto,\n subscriptionId,\n subscriptionItemId,\n tenant,\n}: ReplaceSubscriptionParams) {\n // TODO: Is this needed when there is the tenant prop of ApiProvider applied on some upper level?\n const headers: UpdateCustomerSubscriptionSubscriptionItemHeaders = {\n 'x-tenant-context': tenant,\n };\n\n return updateCustomerSubscriptionSubscriptionItem(\n client,\n customerId,\n subscriptionId,\n subscriptionItemId,\n globalCustomersSubscriptionItemDto,\n headers,\n );\n}\n","import type * as BasketUpdated from '@ori-events/basket-updated';\nimport * as ShoppingContextLoaded from '@ori-events/shopping-context-loaded';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\nexport async function requestShoppingContextHandler() {\n const response = await fetch(RequestUrl.GetShoppingContext, getHttpRequestSettings(undefined, HttpMethod.Post));\n const data = convertToCamelCase((await response.json()) as object);\n const event = new CustomEvent(ShoppingContextLoaded.Name, {\n detail: data,\n });\n window.dispatchEvent(event);\n\n return data;\n}\n","import type * as BasketUpdated from '@ori-events/basket-updated';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\nexport async function resetShippingSelectionHandler() {\n const response = await fetch(RequestUrl.ResetFreeShippingSelection, getHttpRequestSettings());\n\n return convertToCamelCase((await response.json()) as object);\n}\n","import type * as UpdateBasketItem from '@ori-events/update-basket-item';\nimport type { Data as ErrorData, UpdateBasketItemResponse } from '@ori-events/update-basket-item-failed';\nimport { isUpdateBasketItemErrorResponse, Name as ErrorEventName } from '@ori-events/update-basket-item-failed';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & UpdateBasketItem.Data;\n\nexport async function updateBasketItemHandler({ detail: { lineNumber, placement, quantity } }: CustomEvent) {\n const response = await fetch(\n `${RequestUrl.UpdateBasketItem}?lineNumber=${lineNumber}&quantity=${quantity}`,\n getHttpRequestSettings({ placement }),\n );\n const data = convertToCamelCase((await response.json()) as object);\n\n if (isUpdateBasketItemErrorResponse(data)) {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import type * as UpdateCustomerOrderItem from '@ori-events/update-customer-order-item';\nimport * as UpdateCustomerOrderItemFailed from '@ori-events/update-customer-order-item-failed';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & UpdateCustomerOrderItem.Data;\n\nexport async function updateCustomerOrderItemHandler({\n detail: { endConsumerOrderId, itemCode, placement, requestedQuantity },\n}: CustomEvent) {\n const fetchUrl =\n `${RequestUrl.UpdateCustomerOrderItem}` +\n `?endConsumerOrderId=${endConsumerOrderId}` +\n `&itemCode=${itemCode}` +\n `&requestedQuantity=${requestedQuantity}`;\n\n const response = await fetch(fetchUrl, getHttpRequestSettings({ placement }));\n const data = convertToCamelCase(\n (await response.json()) as object,\n );\n\n if (UpdateCustomerOrderItemFailed.isUpdateCustomerOrderItemErrorResponse(data)) {\n const errorEvent = new CustomEvent(UpdateCustomerOrderItemFailed.Name, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import type * as UpdateDelivery from '@ori-events/update-delivery';\nimport type { Data as ErrorData, UpdateDeliveryResponse } from '@ori-events/update-delivery-failed';\nimport { isUpdateDeliveryErrorResponse, Name as ErrorEventName } from '@ori-events/update-delivery-failed';\n\nimport { putRequestOptions } from '../constants/requestOptions';\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase } from '../utils';\n\ntype Data = UpdateDelivery.Data;\n\nexport async function updateDeliveryHandler({\n detail: { deliveryAddressId, deliveryChannelId, registrationId },\n}: CustomEvent) {\n // if needed, start with delivery channel ID update\n if (typeof deliveryChannelId !== 'undefined') {\n const channelRequestOptions = {\n ...putRequestOptions,\n body: JSON.stringify({ deliveryChannelId }),\n };\n const channelResponse = await fetch(RequestUrl.UpdateDeliveryChannel, channelRequestOptions);\n const channelResponseData = convertToCamelCase((await channelResponse.json()) as object);\n\n if (isUpdateDeliveryErrorResponse(channelResponseData)) {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail: channelResponseData,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n }\n\n // delivery address ID update\n const addressParams: {\n addressId: number;\n registrationId?: string;\n } = {\n addressId: deliveryAddressId,\n };\n if (registrationId) {\n addressParams.registrationId = registrationId;\n }\n const addressRequestOptions = {\n ...putRequestOptions,\n body: JSON.stringify(addressParams),\n };\n const addressResponse = await fetch(RequestUrl.UpdateDeliveryAddress, addressRequestOptions);\n const addressResponseData = convertToCamelCase((await addressResponse.json()) as object);\n\n if (isUpdateDeliveryErrorResponse(addressResponseData)) {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail: addressResponseData,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return addressResponseData;\n}\n","import type * as UpdateDeliveryChannel from '@ori-events/update-delivery-channel';\nimport type { Data as ErrorData, UpdateDeliveryChannelResponse } from '@ori-events/update-delivery-channel-failed';\nimport {\n isUpdateDeliveryChannelErrorResponse,\n Name as ErrorEventName,\n} from '@ori-events/update-delivery-channel-failed';\n\nimport { putRequestOptions } from '../constants/requestOptions';\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase } from '../utils';\n\ntype Data = UpdateDeliveryChannel.Data;\n\nexport async function updateDeliveryChannelHandler({ detail: { deliveryChannelId } }: CustomEvent) {\n const requestOptions = {\n ...putRequestOptions,\n body: JSON.stringify({ deliveryChannelId }),\n };\n const response = await fetch(RequestUrl.UpdateDeliveryChannel, requestOptions);\n const data = convertToCamelCase((await response.json()) as object);\n\n if (isUpdateDeliveryChannelErrorResponse(data)) {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import type * as UpdateDonation from '@ori-events/update-donation';\nimport type { Data as ErrorData, UpdateDonationResponse } from '@ori-events/update-donation-failed';\nimport { isUpdateDonationFailedResponse, Name as ErrorEventName } from '@ori-events/update-donation-failed';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & UpdateDonation.Data;\n\nexport async function updateDonationHandler({ detail: { choiceId, checked } }: CustomEvent) {\n const response = await fetch(\n RequestUrl.UpdateDonation,\n getHttpRequestSettings({ choiceId, checked }, HttpMethod.Post),\n );\n\n const data = convertToCamelCase((await response.json()) as object);\n\n if (isUpdateDonationFailedResponse(data)) {\n const event = new CustomEvent(ErrorEventName, {\n detail: data,\n });\n window.dispatchEvent(event);\n\n return false;\n }\n\n return data;\n}\n","import {\n type GlobalShoppingOfferChoiceDtoBody,\n updateShoppingSessionOfferChoice,\n type UpdateShoppingSessionOfferChoiceHeaders,\n} from '@ori/global-api-client-react';\n\nimport type { HandlerSettings } from '../types';\nimport { deleteOfferItem } from './deleteOfferItem';\n\ntype UpdateOfferItemHandlerSettings = Pick;\n\nexport type UpdateOfferItemParams = UpdateOfferItemHandlerSettings & {\n itemCode: string;\n offerId: number;\n quantity: number;\n tenant: string;\n};\n\nexport async function updateOfferItem(params: UpdateOfferItemParams) {\n const { client, itemCode, offerId, quantity, sessionId, tenant } = params;\n\n if (quantity === 0) {\n return deleteOfferItem(params);\n }\n\n const globalShoppingOfferChoiceDtoBody = {\n itemCode,\n quantity,\n } as GlobalShoppingOfferChoiceDtoBody;\n\n // TODO: Is this needed when there is the tenant prop of ApiProvider applied on some upper level?\n const headers: UpdateShoppingSessionOfferChoiceHeaders = {\n 'x-tenant-context': tenant,\n };\n\n return updateShoppingSessionOfferChoice(\n client,\n sessionId,\n offerId,\n itemCode,\n globalShoppingOfferChoiceDtoBody,\n headers,\n );\n}\n","import type * as BasketUpdated from '@ori-events/basket-updated';\nimport type * as UpdateOfferItems from '@ori-events/update-offer-items';\nimport type { PositionData } from '@ori/analytics-data';\nimport { HttpMethod } from '@ori/checkout-utils';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & UpdateOfferItems.Data;\n\nexport async function updateOfferItemsHandler({ detail: { choiceId, items, placement } }: CustomEvent) {\n const response = await fetch(\n RequestUrl.UpdateOfferItems,\n getHttpRequestSettings({ choiceId, items, placement }, HttpMethod.Post),\n );\n\n return convertToCamelCase((await response.json()) as object);\n}\n","import type * as UpdatePaymentProvider from '@ori-events/update-payment-provider';\nimport type { Data as ErrorData, UpdatePaymentProviderResponse } from '@ori-events/update-payment-provider-failed';\nimport {\n isUpdatePaymentProviderFailedResponse,\n Name as ErrorEventName,\n} from '@ori-events/update-payment-provider-failed';\nimport type { PositionData } from '@ori/analytics-data';\n\nimport { RequestUrl } from '../types';\nimport { convertToCamelCase, getHttpRequestSettings } from '../utils';\n\ntype Data = PositionData & UpdatePaymentProvider.Data;\n\nexport async function updatePaymentProviderHandler({ detail: { paymentProviderId, placement } }: CustomEvent) {\n const response = await fetch(\n `${RequestUrl.UpdatePaymentProvider}?paymentProviderId=${paymentProviderId}`,\n getHttpRequestSettings({ placement }),\n );\n const data = convertToCamelCase((await response.json()) as object);\n\n if (isUpdatePaymentProviderFailedResponse(data)) {\n const errorEvent = new CustomEvent(ErrorEventName, {\n detail: data,\n });\n window.dispatchEvent(errorEvent);\n\n return false;\n }\n\n return data;\n}\n","import { NOT_LOGGED_IN_USER_ID } from '@ori/auth';\nimport type { PickClientAppDataConfigProps } from '@ori/client-app-config';\n\n// This can be extended by specific types for your Online properties\nexport type ClientAppConfig = PickClientAppDataConfigProps<\n 'currentLanguage' | 'customerId' | 'globalApiUrl' | 'identityUrl' | 'tenant'\n>;\n\nexport const DEFAULT_CONFIG = {\n currentLanguage: document.documentElement.lang,\n customerId: NOT_LOGGED_IN_USER_ID,\n globalApiUrl: 'https://we-test-api.oriflame.com/uat',\n identityUrl: 'https://identity-uat.oriflame.com',\n tenant: 'uk',\n};\n","import { useContext, createContext } from 'react';\n\nimport type { ClientAppConfig } from '../types';\nimport { DEFAULT_CONFIG } from '../types';\n\nexport const configurationContext = createContext(DEFAULT_CONFIG);\n\nexport const ConfigurationProvider = configurationContext.Provider;\n\nexport const useConfiguration = () => useContext(configurationContext);\n","import { getLoggers } from '@ori/checkout-utils';\n\nimport { APP_NAME, DATA_CACHE_TIMEOUT, SCHEDULED_CLEANUP_KEY, USER_COOKIE_NAME } from '../constants';\nimport { mainLogger } from '../logger';\nimport type { StoredValue } from '../types';\nimport { getCookie } from './cookies';\nimport { adler32 } from './hashes';\n\nconst { logDebug, logWarning } = getLoggers(APP_NAME);\n\nconst childLogger = mainLogger.createChild('storage');\n\nexport const isValidTimestamp = (timestamp: number) => Date.now() - timestamp <= DATA_CACHE_TIMEOUT;\n\n// Both sessionStorage or localStorage could be used here.\n// The sessionStorage doesn't support triggering syncing events on other browser tabs.\n// The sessionStorage should clean up stored data after the browser tab gets closed.\n// But the browser's restore-session-on-reopen functionality may clash with this.\n// Both storage types have no connection with server-side session,\n// so, if working with server session data, manual cleanups / refreshing\n// has to be solved anyway.\nexport const getStorage = () => typeof window === 'object' && window.localStorage;\nexport const isStorageAvailable = () => Boolean(getStorage());\nif (!isStorageAvailable()) {\n logWarning('Storage is not available.');\n}\n\n// In Online session, there should always be some value set.\n// The 'unknown' value is just a fallback for testing.\nexport const getUserCheck = () => adler32((getCookie(USER_COOKIE_NAME) ?? '').trim() || 'unknown');\n\n// TODO: don't we have some util for this already in some NPM?\nconst parseValue = (serializedData: string) => {\n let parsedValue: StoredValue | undefined;\n try {\n parsedValue = JSON.parse(serializedData) as StoredValue;\n } catch (error) {\n childLogger.error(error as Error, { action: 'Error parsing serialized data.' });\n }\n\n return parsedValue;\n};\n\nexport const getStorageItem = (key: string): T | undefined => {\n const storage = getStorage();\n if (typeof storage !== 'object') {\n return undefined;\n }\n\n const data = storage.getItem(key);\n if (!data) {\n logDebug(`Item with key '${key}' wasn't found in storage.`);\n\n return undefined;\n }\n\n const parsedValue = parseValue(data);\n if (!parsedValue) {\n const error = new Error(`Error getting stored item with key '${key}'.`);\n childLogger.error(error, { action: 'getStorageItem' });\n\n return undefined;\n }\n\n const { savedTimestamp, value, userCheck } = parsedValue;\n if (!isValidTimestamp(savedTimestamp)) {\n storage.removeItem(key);\n logDebug(`Stored item with key '${key}' has expired and was deleted.`);\n\n return undefined;\n }\n\n if (userCheck !== getUserCheck()) {\n storage.removeItem(key);\n logDebug(`Item with key '${key}' was stored for different user and was deleted.`);\n\n return undefined;\n }\n\n logDebug(`Item with key ${key} was found in storage.\\n\\t`, parsedValue);\n\n return value;\n};\n\nexport const setStorageItem = (key: string, value: T) => {\n const storage = getStorage();\n if (typeof storage !== 'object') {\n return false;\n }\n\n const data: StoredValue = {\n savedTimestamp: Date.now(),\n value,\n userCheck: getUserCheck(),\n };\n\n try {\n storage.setItem(key, JSON.stringify(data));\n logDebug(`Stored item with key '${key}', value:\\n\\t`, data);\n } catch (error) {\n childLogger.error(error as Error, { action: `setStorageItem - storing item with ${key}:` });\n\n return false;\n }\n\n return true;\n};\n\nexport const removeStorageItem = (key: string) => {\n const storage = getStorage();\n if (typeof storage !== 'object') {\n return false;\n }\n\n try {\n storage.removeItem(key);\n logDebug(`Stored item with key '${key}' was removed.`);\n } catch (error) {\n childLogger.error(error as Error, { action: `removeStorageItem - removing item with ${key}:` });\n\n return false;\n }\n\n return true;\n};\n\nexport const isScheduledCacheCleanup = (): boolean => {\n const storage = getStorage();\n if (typeof storage !== 'object') {\n return false;\n }\n\n const isScheduled = Boolean(storage.getItem(SCHEDULED_CLEANUP_KEY));\n if (isScheduled) {\n logDebug('Cache cleanup was scheduled with last page reload.');\n }\n\n return isScheduled;\n};\n\nexport const removeScheduledCacheCleanup = () => removeStorageItem(SCHEDULED_CLEANUP_KEY);\n\nexport const listenToStoredItemChanges = (key: string, callback?: (value: T | undefined) => unknown) => {\n const storage = getStorage();\n if (typeof storage !== 'object') {\n return undefined;\n }\n\n const eventName = 'storage';\n const eventListener = ((event: StorageEvent) => {\n if (event.storageArea !== storage || event.key !== key) {\n return undefined;\n }\n\n logDebug(`Storage change event from another browser tab was received for item with key '${key}'.`);\n if (event.newValue === null) {\n logDebug(`Stored item with '${key}' was removed in another browser window.`);\n removeStorageItem(key);\n\n return callback?.(undefined);\n }\n\n const parsedValue = parseValue(event.newValue);\n if (!parsedValue) {\n return undefined;\n }\n\n try {\n storage.setItem(key, event.newValue);\n logDebug(`Stored item with key '${key}', value:\\n\\t`, parsedValue);\n } catch (error) {\n childLogger.error(error as Error, { action: `listenToStoredItemChanges - storing item with ${key}:` });\n }\n\n return callback?.(parsedValue.value);\n }) as EventListener;\n\n return { eventName, eventListener };\n};\n","export const adler32 = (data: string) => {\n const MOD_ADLER = 65521;\n const BITS_MOVED = 16;\n const { length } = data;\n\n let a = 1;\n let b = 0;\n\n for (let i = 0; i < length; i++) {\n // eslint-disable-next-line unicorn/prefer-code-point -- x\n a += data.charCodeAt(i);\n b += a;\n }\n\n a %= MOD_ADLER;\n b %= MOD_ADLER;\n\n // eslint-disable-next-line no-bitwise -- x\n return (b << BITS_MOVED) | a;\n};\n","export const getCookie = (cookieName: string) => {\n const match = document.cookie.match(new RegExp(`${cookieName}=([^;]+)`));\n\n return match ? match[1] : undefined;\n};\n","import * as BasketUpdated from '@ori-events/basket-updated';\n\nimport type { UpdateEventType } from '../types';\n\nexport const dispatchBasketUpdatedEvent = (\n detail: BasketUpdated.Data,\n eventType: UpdateEventType = BasketUpdated.Name,\n) => {\n const event = new CustomEvent(eventType, {\n detail,\n });\n window.dispatchEvent(event);\n};\n\nexport default dispatchBasketUpdatedEvent;\n","import { getDebugLogger } from '@ori/checkout-utils';\n\nimport { APP_NAME } from '../constants';\n\nconst logDebug = getDebugLogger(APP_NAME);\n\nexport const logReceivedEvent = (event: T) => logDebug(`Received ${event.type} event:\\n\\t`, event);\n","import { getDebugLogger } from '@ori/checkout-utils';\n\nimport { APP_NAME } from '../constants';\n\nconst logDebug = getDebugLogger(APP_NAME);\n\nconst pagePathPatterns = ['/shopping/basket'];\n\nexport const isPageMarkedForCacheCleanup = () => {\n const isCleanupPage = pagePathPatterns.some((item) => window.location.pathname.includes(item));\n if (isCleanupPage) {\n logDebug('Cache cleanup is always requested for current page.');\n }\n\n return isCleanupPage;\n};\n","import * as BasketUpdated from '@ori-events/basket-updated';\nimport * as PlaceOrderRequested from '@ori-events/place-order-requested';\nimport * as RequestClearShoppingCache from '@ori-events/request-clear-shopping-cache';\nimport * as RequestShoppingContext from '@ori-events/request-shopping-context';\nimport * as ShoppingContextLoaded from '@ori-events/shopping-context-loaded';\nimport { useToken } from '@ori/auth';\nimport { getDebugLogger } from '@ori/checkout-utils';\nimport { useApiClient } from '@ori/global-api-client-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { APP_NAME, CONTEXT_KEY } from '../constants';\nimport { shoppingContextActions } from '../constants/shoppingContextActions';\nimport { useConfiguration } from '../contexts';\nimport type { HandlerSettings, ContextUpdateEventHandler, SuccessEventName } from '../types';\nimport {\n dispatchBasketUpdatedEvent,\n getStorageItem,\n isPageMarkedForCacheCleanup,\n isScheduledCacheCleanup,\n isStorageAvailable,\n listenToStoredItemChanges,\n logReceivedEvent,\n removeStorageItem,\n removeScheduledCacheCleanup,\n setStorageItem,\n} from '../utils';\n\nconst logDebug = getDebugLogger(APP_NAME);\n\nlet isReadyPromiseResolve: (value: PromiseLike | boolean) => void;\n\n/**\n * Promise indicating that shopping bag provider handlers are connected\n * and other components can start communicating with the provider via events.\n */\nexport const isReady = new Promise((resolve) => {\n isReadyPromiseResolve = resolve;\n});\n\ntype EventListenerInfo = {\n eventName: string;\n eventListener: EventListener;\n};\n\nconst getCachedContext = () => getStorageItem(CONTEXT_KEY);\nconst setCachedContext = (value: BasketUpdated.Data) => setStorageItem(CONTEXT_KEY, value);\nconst clearCachedContext = () => removeStorageItem(CONTEXT_KEY);\n\nexport const useBasketProviderData = () => {\n const client = useApiClient();\n const { tenant } = useConfiguration();\n const { customerId } = useToken();\n\n // Indication that startup shopping context data initialization was done.\n const isInitialShoppingContextApplied = useRef(false);\n\n // Requesting shopping context data usually on application startup has now\n // specific logic involving also this state flag. When true, subsequent coming\n // request-shopping-context events will not trigger additional server requests\n // & it waits for the 1st request to return.\n const isRequestingShoppingContext = useRef(false);\n\n // Current shopping context / shopping session data. This is also being synchronized\n // with the cache on startup & after each update action.\n const [shoppingContext, setShoppingContext] = useState();\n\n const shoppingSessionId = useRef('');\n\n /**\n * Sets current shopping context data state while optionally setting also the cache\n * and/or triggering a requested success response event.\n */\n const updateContext = useCallback(\n (data: BasketUpdated.Data, eventTypeToBeTriggered?: SuccessEventName, shouldStoreData = true) => {\n shoppingSessionId.current = data.sessionId ?? '';\n setShoppingContext(data);\n if (shouldStoreData && isStorageAvailable()) {\n setCachedContext(data);\n logDebug('Stored context was updated with new data:\\n\\t', data);\n } else {\n logDebug('Context was updated with new data:\\n\\t', data);\n }\n if (eventTypeToBeTriggered) {\n logDebug(`Triggering ${eventTypeToBeTriggered} event ...`);\n dispatchBasketUpdatedEvent(data, eventTypeToBeTriggered);\n }\n },\n [],\n );\n\n /** Tries to read last cache and, if found, sets it back into current shopping context state. */\n const getStoredContext = useCallback(() => {\n const data = getCachedContext();\n if (!data) {\n return;\n }\n updateContext(data, undefined, false);\n logDebug('Restored context data from storage.');\n }, [updateContext]);\n\n /** Clears current shopping context data and stored cache. */\n const clearContext = useCallback(() => {\n logDebug('Clearing stored shopping context data ...');\n clearCachedContext();\n setShoppingContext(undefined);\n }, []);\n\n /** Clears shopping context data based on received event. */\n const clearContextOnEvent = useCallback(\n (event: Event) => {\n logReceivedEvent(event);\n clearContext();\n },\n [clearContext],\n );\n\n /** Generic event listener for most update actions. */\n const createEventListener = useCallback(\n (handler: ContextUpdateEventHandler, currentSettings: HandlerSettings) => {\n const result = (async (event: T) => {\n logReceivedEvent(event);\n const data = await handler(event, currentSettings);\n if (data === false) {\n logDebug('Shopping context update failed.');\n } else {\n updateContext(data, BasketUpdated.Name);\n }\n }) as EventListener;\n\n return result;\n },\n [updateContext],\n );\n\n /**\n * Specific event listener for request-shopping-context action.\n * Getting the shopping context data from storage and/or the isRequestingShoppingContext\n * state is involved in this case. If in cache, the data is returned w/o creating\n * another request to server. If the loading already started before, it waits for\n * the original request to return the data.\n */\n const createRequestShoppingContextEventListener = useCallback(\n (handler: ContextUpdateEventHandler, currentSettings: HandlerSettings) => {\n const result = (async (event: T) => {\n logReceivedEvent(event);\n\n if (shoppingContext) {\n const triggerResponse = () => {\n logDebug(`Context data was loaded before. Triggering ${ShoppingContextLoaded.Name} event ...`);\n dispatchBasketUpdatedEvent(shoppingContext, ShoppingContextLoaded.Name);\n };\n\n // postpone a bit to have same events order as when really fetching the data\n setTimeout(() => triggerResponse());\n\n return;\n }\n\n if (isRequestingShoppingContext.current) {\n logDebug('Shopping context was already requested. Waiting for response ...');\n\n return;\n }\n\n logDebug('Loading shopping context ...');\n isRequestingShoppingContext.current = true;\n const data = await handler(event, currentSettings);\n isRequestingShoppingContext.current = false;\n if (data === false) {\n logDebug('Shopping context load failed.');\n } else {\n logDebug('Shopping context was loaded.');\n updateContext(data, ShoppingContextLoaded.Name);\n }\n }) as EventListener;\n\n return result;\n },\n [isRequestingShoppingContext, shoppingContext, updateContext],\n );\n\n /** Creates event listeners for the actions defined in shoppingContextActions list. */\n const getEventListeners = useCallback(\n (currentSettings: HandlerSettings) => {\n const result: EventListenerInfo[] = [];\n for (const [triggerActionEventName, { handler }] of shoppingContextActions.entries()) {\n const eventListenerFactory =\n triggerActionEventName === RequestShoppingContext.Name\n ? createRequestShoppingContextEventListener\n : createEventListener;\n result.push({\n eventName: triggerActionEventName,\n eventListener: eventListenerFactory(handler, currentSettings),\n });\n }\n\n return result;\n },\n [createEventListener, createRequestShoppingContextEventListener],\n );\n\n // setup initial state of shopping context data\n useEffect(() => {\n if (isStorageAvailable() && !isInitialShoppingContextApplied.current) {\n isInitialShoppingContextApplied.current = true;\n if (isPageMarkedForCacheCleanup() || isScheduledCacheCleanup()) {\n removeScheduledCacheCleanup();\n clearContext();\n } else {\n getStoredContext();\n }\n }\n }, [clearContext, getStoredContext]);\n\n // init event listeners\n useEffect(() => {\n const eventListeners = getEventListeners({ client, customerId, sessionId: shoppingSessionId.current, tenant });\n eventListeners.push(\n // This is now called when the user requests creating a new order.\n // That means that the cache should be cleared. But we don't know yet\n // if the create order action succeeds. Getting exact order creation\n // result / success might be problematic, as there are page redirects\n // involved, and after page reload, it is too late for clearing caches.\n // So current solution calls the PlaceOrderRequested event before\n // calling the request on server, so that there is enough time to\n // do this cache cleanup here before the redirects happen.\n // ATM, the redirect is being done in legacy module & this logic might\n // change after rewriting to React.\n {\n eventName: PlaceOrderRequested.Name,\n eventListener: clearContextOnEvent,\n },\n\n // This is now called for other cases when clearing context data is needed.\n {\n eventName: RequestClearShoppingCache.Name,\n eventListener: clearContextOnEvent,\n },\n );\n\n // If there was a change in stored data from another browser tab,\n // if the context value was set, update the context with triggering\n // basket-updated event. Other components need to be informed about\n // the new state & this will not happen on page load, but later.\n // So the basket-updated event should be fine for this.\n if (isStorageAvailable()) {\n const monitoredStorageChanges = listenToStoredItemChanges(CONTEXT_KEY, (value) => {\n if (value) {\n updateContext(value, BasketUpdated.Name, false);\n }\n });\n if (monitoredStorageChanges) {\n const { eventName, eventListener } = monitoredStorageChanges;\n eventListeners.push({ eventName, eventListener });\n }\n }\n\n eventListeners.forEach(({ eventName, eventListener }) => {\n window.addEventListener(eventName, eventListener);\n });\n logDebug('Event listeners are connected.');\n\n // TODO: We publish the promise to window scope & resolve it immediately.\n // Is it worth using promise at all when polling is still needed in consuming components?\n // Maybe the exported isReady promise on module level is still worth it?\n window.isBasketProviderReady = isReady;\n isReadyPromiseResolve(true);\n\n return () => {\n eventListeners.forEach(({ eventName, eventListener }) => {\n window.removeEventListener(eventName, eventListener);\n });\n eventListeners.length = 0;\n logDebug('Old event listeners were disconnected.');\n };\n }, [clearContextOnEvent, client, customerId, getEventListeners, tenant, updateContext]);\n\n const contextValue = useMemo(\n () => ({\n isRequestingShoppingContext,\n isReady,\n shoppingContext,\n }),\n [isRequestingShoppingContext, shoppingContext],\n );\n\n return contextValue;\n};\n","import type { FC } from 'react';\n\nimport { useBasketProviderData } from '../hooks';\n\nexport const BasketProvider: FC = () => {\n useBasketProviderData();\n\n return null;\n};\n","import { useToken } from '@ori/auth';\nimport { useServiceUrls } from '@ori/configuration-manager';\nimport { ApiClientProvider } from '@ori/global-api-client-react';\nimport type { ReactElement } from 'react';\n\nimport { useConfiguration } from '../contexts';\n\ninterface ApiProviderProps {\n children: ReactElement;\n}\n\nexport const ApiProvider = ({ children }: ApiProviderProps) => {\n const { tenant } = useConfiguration();\n const { globalApiUrl } = useServiceUrls(['globalApi']);\n const { token } = useToken();\n\n return (\n \n {children}\n \n );\n};\n","import { ErrorBoundary } from '@ori/checkout-utils';\nimport { LoggerProvider } from '@ori/logger';\nimport type { FC } from 'react';\n\nimport { BasketProvider } from '../components';\nimport { APP_NAME } from '../constants';\nimport { ConfigurationProvider } from '../contexts';\nimport { mainLogger } from '../logger';\nimport type { ClientAppConfig } from '../types';\nimport { ApiProvider } from './ApiProvider';\n\nexport const BasketProviderController: FC = (configuration) => (\n \n \n \n \n \n \n \n \n \n);\n","import { BasketProviderController } from '@ori/basket-provider-lib';\nimport { ServiceUrlsProvider } from '@ori/configuration-manager';\n\nimport type { ClientAppConfig } from './types';\n\nexport const App = (configuration: ClientAppConfig) => {\n const { globalApiUrl, identityUrl } = configuration;\n\n return (\n \n \n \n );\n};\n","import { PACKAGE_NAME } from '@ori/basket-provider-lib';\nimport { Logger } from '@ori/logger';\n\nexport const mainLogger = new Logger(PACKAGE_NAME);\n","/* istanbul ignore file */\nimport { UniversalTokenProvider, doDevelopmentLogin } from '@ori/auth';\nimport { APP_NAME } from '@ori/basket-provider-lib';\nimport { ErrorBoundary, getDebugLogger, getWarningLogger } from '@ori/checkout-utils';\nimport { parseClientAppConfig } from '@ori/client-app-config';\nimport { ApplicationInsights, getClientApplicationInsightsConfig } from '@ori/logger';\nimport { createRoot } from 'react-dom/client';\n\nimport { App } from './App';\nimport { mainLogger } from './logger';\nimport type { ClientAppConfig } from './types';\n\nconst logDebug = getDebugLogger(APP_NAME);\nconst logWarning = getWarningLogger(APP_NAME);\n\n/**\n * React app renderer that is used when app is used as a standalone app\n */\nexport const render = async (configElement: HTMLElement, rootElement: HTMLElement) => {\n const { innerText: config = '' } = configElement;\n const clientAppConfig = parseClientAppConfig(config, [\n 'currentLanguage',\n 'customerId',\n 'globalApiUrl',\n 'identityUrl',\n 'tenant',\n ]);\n logDebug('parsed configuration', clientAppConfig);\n const { customerId, identityUrl, tenant } = clientAppConfig;\n\n if (!identityUrl) {\n throw new Error('Missing Identity URL!');\n }\n\n // Get token for local development\n if (process.env.NODE_ENV !== 'production') {\n // when using Requestly we do not want to load token\n if (process.env.REACT_APP_USE_REQUESTLY === '1') {\n // eslint-disable-next-line no-console -- wanted behavior\n console.log('USING REQUESTLY');\n } else {\n await doDevelopmentLogin({ identityUrl, tenant });\n }\n }\n\n // Initialize Application Insights in production\n if (process.env.NODE_ENV === 'production') {\n try {\n ApplicationInsights.initialize(getClientApplicationInsightsConfig());\n } catch (error: unknown) {\n logWarning('Error while setting up AI logger:', String(error));\n }\n }\n\n createRoot(rootElement).render(\n \n \n \n \n ,\n );\n};\n"],"names":["Name","isErrorResponse","response","isSuccess","isAddBackorderDemandErrorResponse","isAddBasketOfferErrorResponse","Method","isAddToBasketErrorResponse","isAddToBasketLoyaltyResponse","Boolean","loyaltyPoints","LoyaltyDialogResults","Results","BUY_FOR_MONEY","BUY_FOR_POINTS","isUpdateDeliveryErrorResponse","RequestUrl","convertToCamelCase","object","Array","isArray","map","constructor","Object","fromEntries","entries","key","value","camelCase","HttpHeader","ContentType","getHttpRequestSettings","data","method","HttpMethod","Get","headers","Json","body","placement","finalData","Placement","bodyValue","JSON","stringify","undefined","credentials","Post","async","addBasketOffer","url","params","fetch","json","AddBasketOfferFailed","event","CustomEvent","detail","window","dispatchEvent","mainLogger","Logger","PACKAGE_NAME","logWarning","getWarningLogger","APP_NAME","MISSING_PLACEMENT_MESSAGE","addToBasket","buyingMethod","itemCode","quantity","AddToBasketFailed","ShowLoyaltyDialog","lastAddedItem","deleteOfferItem","client","offerId","sessionId","tenant","deleteShoppingSessionOfferChoice","dispatchErrorEvent","errorEvent","ErrorEventName","putRequestOptions","shoppingContextActions","Map","AcceptNotification","failedEvent","AcceptNotificationFailed","handler","reasonId","isAcceptNotificationErrorResponse","AddBackorderDemand","AddBackorderDemandFailed","lineNumber","responseWithQuantity","UpdateBasketItem","dataWithQuantity","AddBasketOffer","items","isAddBasketOfferPurchaseEvent","choiceId","PurchaseBasketOffer","AddCatalogueOffer","AddCatalogueOfferFailed","request","dispatchAddCatalogueOfferFailedEvent","AddCustomerOrder","AddCustomerOrderFailed","orderIds","URL","location","href","forEach","id","searchParams","append","String","toString","lastAddedCustomerOrderIds","AddFreeShippingOffer","AddFreeShippingOfferFailed","dispatchAddFreeShippingOfferFailedEvent","AddPersonalNutritionItems","AddPersonalNutritionItemsFailed","globalShoppingPersonalNutritionComponentsDto","collection","updateShoppingSessionPersonalNutrition","addPersonalNutritionItems","error","message","localizedMessage","GetShoppingContext","rawData","isPersonalNutritionAddedAsLast","AddToBasket","originalItemCode","replacementType","addToBasketMethod","AddToBasketForMoney","AddToBasketForPointsRewardShop","AddToBasketCheckLoyalty","getBuyingUrlAndMethod","AddVoucher","AddVoucherFailed","voucherCode","fetchUrl","dispatchAddVoucherFailed","CancelBackorderDemand","CancelSubscription","CancelSubscriptionFailed","consumerId","packageId","subscriptionId","dispatchCancelSubscriptionFailedEvent","ClearBasket","DelaySubscription","DelaySubscriptionFailed","cycle","step","dispatchDelaySubscriptionFailedEvent","DeleteOfferItem","DeleteOfferItemFailed","isDeleteOfferItemErrorResponse","LoyaltyDialogResult","result","CLOSE","catalogueItemId","AddToBasketForPoints","RemoveBasketItem","RemoveBasketItemFailed","RemoveCustomerOrder","RemoveCustomerOrderFailed","endConsumerOrderId","RemoveVoucher","RemoveVoucherFailed","dispatchRemoveVoucherFailed","ReplaceShoppingBagItem","ReplaceShoppingBagItemFailed","ReplaceSubscription","ReplaceSubscriptionFailed","droppingId","customerId","globalCustomersSubscriptionItemDto","isReplacementAllowed","subscriptionItemId","updateCustomerSubscriptionSubscriptionItem","replaceSubscription","RequestShoppingContext","successEvent","ShoppingContextLoaded","ResetShippingSelection","ResetFreeShippingSelection","UpdateBasketItemFailed","isUpdateBasketItemErrorResponse","UpdateCustomerOrderItem","UpdateCustomerOrderItemFailed","requestedQuantity","UpdateDelivery","UpdateDeliveryFailed","deliveryAddressId","deliveryChannelId","registrationId","channelRequestOptions","channelResponse","UpdateDeliveryChannel","channelResponseData","addressParams","addressId","addressRequestOptions","addressResponse","UpdateDeliveryAddress","addressResponseData","UpdateDeliveryChannelFailed","requestOptions","isUpdateDeliveryChannelErrorResponse","UpdateDonation","UpdateDonationFailed","checked","isUpdateDonationFailedResponse","UpdateOfferItem","UpdateOfferItemFailed","globalShoppingOfferChoiceDtoBody","updateShoppingSessionOfferChoice","updateOfferItem","isUpdateOfferItemFailedResponse","UpdateOfferItems","UpdatePaymentProvider","UpdatePaymentProviderFailed","paymentProviderId","isUpdatePaymentProviderFailedResponse","DEFAULT_CONFIG","currentLanguage","document","documentElement","lang","NOT_LOGGED_IN_USER_ID","globalApiUrl","identityUrl","configurationContext","createContext","ConfigurationProvider","Provider","useConfiguration","useContext","logDebug","getLoggers","childLogger","createChild","getStorage","localStorage","isStorageAvailable","getUserCheck","length","a","b","i","charCodeAt","adler32","cookieName","match","cookie","RegExp","getCookie","USER_COOKIE_NAME","trim","parseValue","serializedData","parsedValue","parse","action","getStorageItem","storage","getItem","Error","savedTimestamp","userCheck","timestamp","Date","now","DATA_CACHE_TIMEOUT","removeItem","removeStorageItem","dispatchBasketUpdatedEvent","eventType","BasketUpdated","getDebugLogger","logReceivedEvent","type","pagePathPatterns","isReadyPromiseResolve","isReady","Promise","resolve","setCachedContext","setStorageItem","setItem","CONTEXT_KEY","useBasketProviderData","useApiClient","useToken","isInitialShoppingContextApplied","useRef","isRequestingShoppingContext","shoppingContext","setShoppingContext","useState","shoppingSessionId","updateContext","useCallback","eventTypeToBeTriggered","shouldStoreData","current","getStoredContext","clearContext","clearContextOnEvent","createEventListener","currentSettings","createRequestShoppingContextEventListener","triggerResponse","setTimeout","getEventListeners","triggerActionEventName","eventListenerFactory","push","eventName","eventListener","useEffect","isPageMarkedForCacheCleanup","isCleanupPage","some","item","pathname","includes","isScheduledCacheCleanup","isScheduled","SCHEDULED_CLEANUP_KEY","eventListeners","PlaceOrderRequested","RequestClearShoppingCache","monitoredStorageChanges","listenToStoredItemChanges","callback","storageArea","newValue","addEventListener","isBasketProviderReady","removeEventListener","useMemo","BasketProvider","ApiProvider","children","useServiceUrls","token","_jsx","ApiClientProvider","baseUrl","BasketProviderController","configuration","ErrorBoundary","appName","logger","LoggerProvider","App","ServiceUrlsProvider","serviceUrls","render","configElement","rootElement","innerText","config","clientAppConfig","parseClientAppConfig","ApplicationInsights","initialize","getClientApplicationInsightsConfig","createRoot","UniversalTokenProvider","initialToken"],"sourceRoot":""}