{"version":3,"file":"static/js/8e5073409a91d5b87868.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/cart-state/add-product-to-cart.ts?85ba","webpack://Msdyn365.Commerce.Online/./src/cart-state/add-promo-code.ts?2e69","webpack://Msdyn365.Commerce.Online/./src/cart-state/base-cart-state.ts?592c","webpack://Msdyn365.Commerce.Online/./src/cart-state/add-invoices-to-cart.ts?cb4a","webpack://Msdyn365.Commerce.Online/./src/cart-state/add-order-invoice-to-cart.ts?d6f8","webpack://Msdyn365.Commerce.Online/./src/cart-state/update-receipt-email.ts?a0ea","webpack://Msdyn365.Commerce.Online/./src/cart-state/clear-cart-line-delivery-mode.ts?86b9","webpack://Msdyn365.Commerce.Online/./src/cart-state/clear-cart-lines-delivery-information.ts?527a","webpack://Msdyn365.Commerce.Online/./src/cart-state/get-or-create-active-cart.ts?26ce","webpack://Msdyn365.Commerce.Online/./src/cart-state/refresh-cart.ts?3943","webpack://Msdyn365.Commerce.Online/./src/cart-state/remove-all-promo-codes.ts?1bb2","webpack://Msdyn365.Commerce.Online/./src/cart-state/remove-cart-lines.ts?2e16","webpack://Msdyn365.Commerce.Online/./src/cart-state/remove-promo-codes.ts?ffc1","webpack://Msdyn365.Commerce.Online/./src/cart-state/set-invoice-line-price.ts?9cb9","webpack://Msdyn365.Commerce.Online/./src/cart-state/update-cart-line-delivery-specifications.ts?6d68","webpack://Msdyn365.Commerce.Online/./src/cart-state/update-cart-line-quantity.ts?a037","webpack://Msdyn365.Commerce.Online/./src/cart-state/update-cart-lines.ts?cd2f","webpack://Msdyn365.Commerce.Online/./src/cart-state/update-cart.ts?8850","webpack://Msdyn365.Commerce.Online/./src/cart-state/update-loyalty-card-id.ts?c304","webpack://Msdyn365.Commerce.Online/./src/cart-state/update-shipping-address.ts?4d06","webpack://Msdyn365.Commerce.Online/./src/checkout-state/base-checkout-cart-state.ts?509c","webpack://Msdyn365.Commerce.Online/./src/checkout-state/checkout-state-storage.ts?b049","webpack://Msdyn365.Commerce.Online/./src/checkout-state/base-checkout-state.ts?a438","webpack://Msdyn365.Commerce.Online/./src/data-actions/cart-state-data-action.ts?5695","webpack://Msdyn365.Commerce.Online/./src/data-actions/checkout-state-data-action.ts?ad58","webpack://Msdyn365.Commerce.Online/./src/data-actions/get-cart-state-data-action.ts?9f8e","webpack://Msdyn365.Commerce.Online/./src/data-actions/get-cart-state.ts?4428","webpack://Msdyn365.Commerce.Online/./src/data-actions/get-checkout-cart.ts?2235","webpack://Msdyn365.Commerce.Online/./src/data-actions/global-state-data-action.ts?901a","webpack://Msdyn365.Commerce.Online/./src/global-state/i-global-state.ts?6850","webpack://Msdyn365.Commerce.Online/./src/data-actions/get-checkout-state.ts?61f7","webpack://Msdyn365.Commerce.Online/./src/global-state/global-state.ts?008e","webpack://Msdyn365.Commerce.Online/./src/state-interfaces/checkout-state-enums.ts?13e8","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/string-repeat.js?60f2","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/this-number-value.js?830a","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.number.to-fixed.js?98ce"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { addCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nconst quantityErrors: string[] = [\n 'Microsoft_Dynamics_Commerce_Runtime_AddingItem_ExceedsMaximumQuantity',\n 'Microsoft_Dynamics_Commerce_Runtime_UpdatingItem_ExceedsMaximumQuantity',\n 'Microsoft_Dynamics_Commerce_Runtime_AddingItem_QuantityExceedsMaximumAndViolatesMultiplicityOfConfiguredNumber',\n 'Microsoft_Dynamics_Commerce_Runtime_UpdatingItem_QuantityExceedsMaximumAndViolatesMultiplicityOfConfiguredNumber',\n 'Microsoft_Dynamics_Commerce_Runtime_ItemQuantityLessThanMinimumAndViolatesMultiplicityOfConfiguredNumber',\n 'Microsoft_Dynamics_Commerce_Runtime_ItemQuantityLessThanMinimum',\n 'Microsoft_Dynamics_Commerce_Runtime_ItemQuantityExceedsMaximum',\n 'Microsoft_Dynamics_Commerce_Runtime_ItemQuantityViolatesMultiplicityOfConfiguredNumber'\n];\n\n/**\n * Get the quantity limit.\n * @param maxQuantityForCartLineItem - Max quantity for cart line.\n * @param inputItem - The input item.\n * @param inputItem.cartLineToAdd - Cart line to add.\n * @param inputItem.availableQuantity - Available quantity.\n * @param inputItem.shouldEnableStockCheck - Is stock check enabled.\n * @param inputItem.isAddServiceItemToCart - Is add service item to cart.\n * @returns The quantity limit.\n */\nfunction getQuantityLimit(\n maxQuantityForCartLineItem: number | undefined,\n inputItem: {\n cartLineToAdd: CartLine;\n availableQuantity?: number;\n shouldEnableStockCheck?: boolean;\n isAddServiceItemToCart?: boolean;\n }\n): number {\n let quantityLimit: number;\n const defaultSiteMaxQuantity = 10;\n\n if (inputItem.shouldEnableStockCheck === false) {\n quantityLimit = maxQuantityForCartLineItem ?? defaultSiteMaxQuantity;\n } else if (maxQuantityForCartLineItem === undefined && inputItem.availableQuantity === undefined) {\n quantityLimit = defaultSiteMaxQuantity;\n } else if (inputItem.availableQuantity === undefined) {\n quantityLimit = maxQuantityForCartLineItem ?? defaultSiteMaxQuantity;\n } else if (maxQuantityForCartLineItem === undefined) {\n quantityLimit = inputItem.availableQuantity;\n } else {\n quantityLimit = Math.min(maxQuantityForCartLineItem, inputItem.availableQuantity);\n }\n\n return quantityLimit;\n}\n\n/**\n * Get the index of the item to add.\n * @param lines - The cart lines.\n * @param cartLineToAdd - The cart line to add.\n * @returns The index of the item to add.\n */\nfunction getElementIndex(lines: CartLine[], cartLineToAdd: CartLine): number {\n let elementFoundAt: number = -1;\n const productIdToFind = cartLineToAdd.ProductId;\n\n for (const [index, line] of lines.entries()) {\n if (\n line.ProductId === productIdToFind &&\n (line.DeliveryMode || '') === (cartLineToAdd.DeliveryMode || '') &&\n (line.FulfillmentStoreId || '') === (cartLineToAdd.FulfillmentStoreId || '')\n ) {\n elementFoundAt = index;\n\n break;\n }\n }\n\n return elementFoundAt;\n}\n\nasync function addProductsToCartValidateAgainstDefaultOrderSettings(\n cart: Readonly,\n actionContext: IActionContext,\n input: {\n cartLineToAdd: CartLine;\n availableQuantity?: number;\n enableStockCheck?: boolean;\n isAddServiceItemToCart?: boolean;\n }[]\n): Promise {\n if (!cart.CartLines) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n for (const inputItem of input) {\n if (inputItem.enableStockCheck && inputItem.availableQuantity) {\n let elementFoundAt: number = -1;\n const productIdToFind = inputItem.cartLineToAdd.ProductId;\n\n for (let i = 0; i < cart.CartLines.length; i++) {\n if (\n cart.CartLines[i].ProductId === productIdToFind &&\n (cart.CartLines[i].DeliveryMode || '') === (inputItem.cartLineToAdd.DeliveryMode || '') &&\n (cart.CartLines[i].FulfillmentStoreId || '') === (inputItem.cartLineToAdd.FulfillmentStoreId || '')\n ) {\n elementFoundAt = i;\n\n break;\n }\n }\n\n if (!inputItem.isAddServiceItemToCart && elementFoundAt !== -1) {\n const cartLineToUpdate = { ...cart.CartLines[elementFoundAt] };\n const curQuantity = cartLineToUpdate.Quantity || 0;\n\n if (curQuantity + (inputItem.cartLineToAdd.Quantity || 1) > inputItem.availableQuantity) {\n return {\n cart: {\n Id: cart.Id,\n CartLines: cart.CartLines\n },\n status: 'FAILED',\n substatus: 'MAXQUANTITY'\n };\n }\n }\n }\n }\n\n const newCartLines = input.map(inputItem => {\n const cartLine = { ...inputItem.cartLineToAdd };\n return cartLine;\n });\n let addCartLinesResult: ICartActionResultWithCart;\n\n if (cart.Version) {\n return addCartLinesAsync({ callerContext: actionContext }, cart.Id, newCartLines, cart.Version)\n .then(newCart => {\n addCartLinesResult = { cart: newCart, status: 'SUCCESS', substatus: 'PRODUCTADDED' };\n return addCartLinesResult;\n })\n .catch(error => {\n actionContext.telemetry.trace(error);\n actionContext.telemetry.trace('Unable to add Cart Line');\n\n const isQuantityError = quantityErrors.includes(error.name);\n\n if (isQuantityError) {\n addCartLinesResult = {\n cart: undefined,\n status: 'FAILED',\n substatus: 'QUANTITYLIMITS',\n errorDetails: { LocalizedMessage: error.message }\n };\n return addCartLinesResult;\n }\n\n const hasInvoiceInCart = cart.CartLines?.find(cartline => cartline.IsInvoiceLine === true);\n if (hasInvoiceInCart) {\n addCartLinesResult = {\n cart: undefined,\n status: 'FAILED',\n substatus: 'INVOICEINCART',\n errorDetails: { LocalizedMessage: error.message }\n };\n return addCartLinesResult;\n }\n\n addCartLinesResult = {\n cart: undefined,\n status: 'FAILED',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n errorDetails: { LocalizedMessage: error.message },\n validationResults: error.data?.ValidationResults\n };\n\n return addCartLinesResult;\n });\n }\n actionContext.telemetry.warning('Unable to update Cart Line, Cart Version could not be found');\n\n addCartLinesResult = { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n return addCartLinesResult;\n}\n\nasync function addProductsToCartValidateAgainstSiteSettings(\n cart: Readonly,\n actionContext: IActionContext,\n input: {\n cartLineToAdd: CartLine;\n availableQuantity?: number;\n enableStockCheck?: boolean;\n isAddServiceItemToCart?: boolean;\n }[]\n): Promise {\n if (!cart.CartLines) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n const maxQuantityForCartLineItem: number | undefined = actionContext.requestContext.app.config.maxQuantityForCartLineItem;\n\n for (const inputItem of input) {\n const quantityLimit: number = getQuantityLimit(maxQuantityForCartLineItem, {\n cartLineToAdd: inputItem.cartLineToAdd,\n availableQuantity: inputItem.availableQuantity,\n shouldEnableStockCheck: inputItem.enableStockCheck,\n isAddServiceItemToCart: inputItem.isAddServiceItemToCart\n });\n const elementFoundAt: number = getElementIndex(cart.CartLines, inputItem.cartLineToAdd);\n\n if (!inputItem.isAddServiceItemToCart && elementFoundAt !== -1) {\n const cartLineToUpdate = { ...cart.CartLines[elementFoundAt] };\n const currentQuantity = cartLineToUpdate.Quantity || 0;\n\n if (currentQuantity + (inputItem.cartLineToAdd.Quantity || 1) > quantityLimit) {\n return {\n cart: {\n Id: cart.Id,\n CartLines: cart.CartLines\n },\n status: 'FAILED',\n substatus: 'MAXQUANTITY'\n };\n }\n }\n\n if (\n !inputItem.isAddServiceItemToCart &&\n inputItem.cartLineToAdd &&\n inputItem.cartLineToAdd.Quantity &&\n inputItem.cartLineToAdd.Quantity > quantityLimit\n ) {\n return {\n cart: {\n Id: cart.Id,\n CartLines: cart.CartLines\n },\n status: 'FAILED',\n substatus: 'MAXQUANTITY'\n };\n }\n }\n\n const newCartLines = input.map(inputItem => {\n const cartLine = { ...inputItem.cartLineToAdd };\n cartLine.Quantity = cartLine.Quantity || 1;\n return cartLine;\n });\n let cartActionResult: ICartActionResultWithCart;\n\n if (cart.Version) {\n return addCartLinesAsync({ callerContext: actionContext }, cart.Id, newCartLines, cart.Version)\n .then(newCart => {\n cartActionResult = { cart: newCart, status: 'SUCCESS', substatus: 'PRODUCTADDED' };\n return cartActionResult;\n })\n .catch(error => {\n actionContext.telemetry.trace(error);\n actionContext.telemetry.trace('Unable to add Cart Line');\n\n const hasInvoiceInCart = cart.CartLines?.find(cartline => cartline.IsInvoiceLine === true);\n if (hasInvoiceInCart) {\n cartActionResult = {\n cart: undefined,\n status: 'FAILED',\n substatus: 'INVOICEINCART',\n errorDetails: { LocalizedMessage: error.message }\n };\n return cartActionResult;\n }\n\n cartActionResult = {\n cart: undefined,\n status: 'FAILED',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n errorDetails: { LocalizedMessage: error.message },\n validationResults: error.data?.ValidationResults\n };\n return cartActionResult;\n });\n }\n actionContext.telemetry.warning('Unable to update Cart Line, Cart Version could not be found');\n\n cartActionResult = { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n return cartActionResult;\n}\n\n/**\n * Add products to cart without site settings validation.\n * @param cart - The cart.\n * @param actionContext - The action context.\n * @param input - The cart lines to add.\n * @returns The results.\n */\nasync function addProductsToCartWithoutSiteSettings(\n cart: Readonly,\n actionContext: IActionContext,\n input: {\n cartLineToAdd: CartLine;\n }[]\n): Promise {\n if (!cart.CartLines) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n const defaultQuantity = 1;\n const newCartLines = input.map(inputItem => {\n const cartLine = { ...inputItem.cartLineToAdd };\n cartLine.Quantity = cartLine.Quantity ?? defaultQuantity;\n return cartLine;\n });\n let addCartLinesResult: ICartActionResultWithCart;\n\n if (cart.Version) {\n return addCartLinesAsync({ callerContext: actionContext }, cart.Id, newCartLines, cart.Version)\n .then(newCart => {\n addCartLinesResult = { cart: newCart, status: 'SUCCESS', substatus: 'PRODUCTADDED' };\n return addCartLinesResult;\n })\n .catch(error => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- existing error type.\n actionContext.telemetry.trace(error);\n actionContext.telemetry.trace('Unable to add cart lines');\n\n addCartLinesResult = {\n cart: undefined,\n status: 'FAILED',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n errorDetails: { LocalizedMessage: error.message },\n validationResults: error.data?.ValidationResults\n };\n return addCartLinesResult;\n });\n }\n\n actionContext.telemetry.warning('Unable to update cart lines, cart version could not be found');\n\n addCartLinesResult = { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n return addCartLinesResult;\n}\n\nexport async function addProductsToCartInternal(\n cart: Readonly,\n actionContext: IActionContext,\n input: {\n cartLineToAdd: CartLine;\n availableQuantity?: number;\n isStockCheckEnabled?: boolean;\n isAddServiceItemToCart?: boolean;\n }[]\n): Promise {\n return addProductsToCartWithoutSiteSettings(cart, actionContext, input);\n}\n\nexport async function addProductToCartInternal(\n cart: Readonly,\n cartLineToAdd: CartLine,\n actionContext: IActionContext,\n validateOrderQuantityLimits: boolean,\n availableQuantity?: number,\n enableStockCheck?: boolean,\n isAddServiceItemToCart?: boolean,\n shouldSkipSiteSettings?: boolean\n): Promise {\n if (shouldSkipSiteSettings) {\n return addProductsToCartWithoutSiteSettings(cart, actionContext, [{ cartLineToAdd }]);\n }\n\n if (validateOrderQuantityLimits) {\n return addProductsToCartValidateAgainstDefaultOrderSettings(cart, actionContext, [\n { cartLineToAdd, availableQuantity, enableStockCheck, isAddServiceItemToCart }\n ]);\n }\n return addProductsToCartValidateAgainstSiteSettings(cart, actionContext, [\n { cartLineToAdd, availableQuantity, enableStockCheck, isAddServiceItemToCart }\n ]);\n}\n\nexport default addProductToCartInternal;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { addDiscountCodeAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function addPromoCode(\n cart: Readonly,\n promoCode: string,\n actionContext: IActionContext\n): Promise {\n if (!cart) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n if (hasPromoCode(cart, promoCode)) {\n return { cart: undefined, status: 'FAILED', substatus: 'ALREADYADDED' };\n }\n\n return addDiscountCodeAsync({ callerContext: actionContext }, cart.Id, promoCode)\n .then(newCart => {\n // Retail server will still return success if a promo code is not valid,\n // but it won't actually add that promo code. So need to check if promo\n // code is actually in the new cart\n if (hasPromoCode(newCart, promoCode)) {\n return { cart: newCart, status: 'SUCCESS' };\n }\n return { cart: undefined, status: 'FAILED', substatus: 'INVALIDPROMOCODE' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n const resultWithCart: ICartActionResultWithCart = {\n cart: undefined,\n status: 'FAILED',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n errorDetails: { LocalizedMessage: error.message }\n };\n\n return resultWithCart;\n });\n}\n\nfunction hasPromoCode(cart: Cart, code: string): boolean {\n const codes = cart.Coupons\n ? cart.Coupons.map((coupon: Coupon) => {\n return coupon.Code!.toLowerCase();\n })\n : [];\n return codes.includes(code.toLowerCase());\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getCatalogId, IActionContext } from '@msdyn365-commerce/core';\nimport {\n Address,\n Cart,\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n AttributeValueBase,\n CommerceProperty,\n LineDeliverySpecification,\n Note,\n ReleasedProductType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { action, computed, observable } from 'mobx';\n\nimport { GlobalState } from '../global-state/global-state';\nimport { ICartActionResult, ICartState } from '../state-interfaces/i-cart-state';\nimport addInvoicesToCartInternal from './add-invoices-to-cart';\nimport addOrderInvoiceToCartInternal from './add-order-invoice-to-cart';\nimport addProductToCartInternal, { addProductsToCartInternal } from './add-product-to-cart';\nimport addPromoCodeInternal from './add-promo-code';\nimport { ICartActionResultWithCart } from './cart-action-result';\nimport clearCartLineDeliveryModeInternal from './clear-cart-line-delivery-mode';\nimport clearCartLinesDeliveryInformation from './clear-cart-lines-delivery-information';\nimport getOrCreateActiveCart from './get-or-create-active-cart';\nimport refreshCartInternal from './refresh-cart';\nimport removeAllPromoCodesInternal from './remove-all-promo-codes';\nimport removeCartLineInternal from './remove-cart-lines';\nimport removePromoCodesInternal from './remove-promo-codes';\nimport setInvoiceLinePriceInternal from './set-invoice-line-price';\nimport updateCart from './update-cart';\nimport updateCartLineDeliverySpecificationsInternal from './update-cart-line-delivery-specifications';\nimport updateCartLineQuantityInternal from './update-cart-line-quantity';\nimport updateLoyaltyCardIdInternal from './update-loyalty-card-id';\nimport updateReceiptEmail from './update-receipt-email';\nimport updateShippingAddress from './update-shipping-address';\nimport updateCartLinesInternal from './update-cart-lines';\nimport { IActionStatus } from '../global-state';\n\n/**\n * Cart state information.\n */\nexport class BaseCartState extends GlobalState implements ICartState {\n @observable protected _cart: Cart;\n\n @computed public get cart(): Readonly {\n return this._cart;\n }\n\n @observable protected _attributeValues: AttributeValueBase[];\n\n @computed public get attributeValues(): AttributeValueBase[] {\n return this._attributeValues;\n }\n\n @observable protected _extensionProperties: CommerceProperty[];\n\n @computed public get extensionProperties(): CommerceProperty[] {\n return this._extensionProperties;\n }\n\n @computed public get totalItemsInCart(): number {\n if (this._cart.CartLines) {\n return this._cart.CartLines.map(cartLine => cartLine.Quantity || 1).reduce((total, num) => total + num, 0);\n }\n\n return 0;\n }\n\n @observable protected _isProductAddedToCart: boolean;\n\n @computed public get isProductAddedToCart(): boolean {\n return this._isProductAddedToCart;\n }\n\n @computed public get isEmpty(): boolean {\n return !(this._cart.CartLines && this._cart.CartLines.length > 0);\n }\n\n @computed public get hasInvoiceLine(): boolean {\n return !!(this._cart.CartLines && this._cart.CartLines.some(cartline => cartline.IsInvoiceLine === true));\n }\n\n private _operationQueue: Promise = Promise.resolve();\n\n constructor(actionContext: IActionContext) {\n super(actionContext);\n this._cart = {};\n this._attributeValues = [];\n this._extensionProperties = [];\n this._isProductAddedToCart = false;\n }\n\n /**\n * Refreshes the cart by getting it from the server.\n *\n * Other actions should keep cart up to date so shouldn't need to call this\n * outside of initialization but still might be scenarios where a manual\n * refresh is needed.\n * @param input - Input.\n * @param input.additionalProperties - Additional properties.\n * @returns - The cart action result.\n */\n @action\n public async refreshCart(input: { additionalProperties?: object }): Promise {\n return this._doAsyncAction(async () => {\n const newCart = await refreshCartInternal(this.cart.Id, this.actionContext);\n\n if (newCart) {\n this._cart = newCart;\n\n return { status: 'SUCCESS' };\n }\n\n return { status: 'FAILED' };\n });\n }\n\n /**\n * Adds the specified product to the current cart. If product is already in cart\n * will update its cart line, otherwise will add a new cart line to the cart.\n * @param input - The input.\n * @param input.product - The product to add to the cart.\n * @param input.count - How many copies of the product to add.\n * @param input.location - The org unit location, used for BuyOnlinePickupInStore scenarios\n * (If you want item to simply be shipped, leave this parameter undefined).\n * @param input.additionalProperties - Additional properties.\n * @param input.availableQuantity - Available quantity.\n * @param input.enableStockCheck - Is stock check enabled.\n * @param input.isAddEmailDeliveryItemToCart - Is add email delivery item to cart.\n * @param input.isPriceKeyedIn - Is price keyed in.\n * @param input.customPrice - Custom price.\n * @param input.deliveryMode - Delivery mode.\n * @param input.shouldSkipSiteSettings - Should skip site settings.\n * @param input.catalogId - Should skip site settings.\n * @returns Cart action result.\n */\n @action\n public async addProductToCart(input: {\n product: SimpleProduct;\n count?: number;\n location?: OrgUnitLocation;\n additionalProperties?: object;\n availableQuantity?: number;\n enableStockCheck?: boolean;\n isAddEmailDeliveryItemToCart?: boolean;\n isPriceKeyedIn?: boolean;\n customPrice?: number;\n deliveryMode?: string;\n shouldSkipSiteSettings?: boolean;\n catalogId?: number;\n retailMultiplePickupModeEnabled?: boolean;\n }): Promise {\n return this._doAsyncAction(async () => {\n const cartLine: CartLine = {\n CatalogId: input.catalogId ?? getCatalogId(this.actionContext.requestContext),\n Description: input.product.Description,\n\n // TODO: Investigate this value and what it represents\n EntryMethodTypeValue: 3,\n ItemId: input.product.ItemId,\n ProductId: input.product.RecordId,\n Quantity: input.count || 1,\n TrackingId: '',\n UnitOfMeasureSymbol: input.product.DefaultUnitOfMeasure,\n IsPriceKeyedIn: input.isPriceKeyedIn,\n IsGiftCardLine: input.product.IsGiftCard,\n Price: input.customPrice ? input.customPrice : input.product.Price\n };\n\n if (input.location) {\n if (!this.actionContext.requestContext.channel) {\n return { status: 'FAILED' };\n }\n\n // If curbside pick is not available use the default one\n if (input.deliveryMode !== undefined) {\n cartLine.DeliveryMode = input.deliveryMode;\n } else {\n cartLine.DeliveryMode = input.retailMultiplePickupModeEnabled\n ? undefined\n : this.actionContext.requestContext.channel.PickupDeliveryModeCode;\n }\n\n cartLine.FulfillmentStoreId = input.location.OrgUnitNumber;\n cartLine.WarehouseId = input.location.InventoryLocationId;\n cartLine.ShippingAddress = this._buildAddressFromOrgUnitLocation(input.location);\n }\n\n if (input.isAddEmailDeliveryItemToCart) {\n if (!this.actionContext.requestContext.channel) {\n return { status: 'FAILED' };\n }\n\n cartLine.DeliveryMode = this.actionContext.requestContext.channel.EmailDeliveryModeCode;\n }\n\n // Check if the product is service or not by product type\n const isAddServiceItemToCart = input.product.ItemTypeValue === ReleasedProductType.Service;\n\n // @ts-expect-error\n const validateQuantity: boolean = !!input.additionalProperties?.validateQuantity;\n return this._doCartOperationWithRetry(() =>\n addProductToCartInternal(\n this.cart,\n cartLine,\n this.actionContext,\n validateQuantity,\n input.availableQuantity,\n input.enableStockCheck,\n isAddServiceItemToCart,\n input.shouldSkipSiteSettings\n )\n );\n });\n }\n\n /**\n * Adds the specified product to the current cart. If product is already in cart\n * will update its cart line, otherwise will add a new cart line to the cart.\n * @param input - Input.\n * @param input.product - Product.\n * @param input.count - Count.\n * @param input.location - Location.\n * @param input.additionalProperties - Additional properties.\n * @param input.availableQuantity - Available quantity.\n * @param input.enableStockCheck - Enable stock check.\n * @param input.isAddEmailDeliveryItemToCart - Is add email delivery item to cart.\n * @param input.isPriceKeyedIn - Is price keyed in.\n * @param input.customPrice - Custom price.\n * @param input.deliveryMode - Delivery mode.\n * @returns Cart action result.\n */\n @action\n public async addProductsToCart(\n input: {\n product: SimpleProduct;\n count?: number;\n location?: OrgUnitLocation;\n additionalProperties?: object;\n availableQuantity?: number;\n enableStockCheck?: boolean;\n isAddEmailDeliveryItemToCart?: boolean;\n isPriceKeyedIn?: boolean;\n customPrice?: number;\n deliveryMode?: string;\n catalogId?: number;\n retailMultiplePickupModeEnabled?: boolean;\n }[]\n ): Promise {\n return this._doAsyncAction(async () => {\n const internalInput: {\n cartLineToAdd: CartLine;\n availableQuantity?: number;\n isStockCheckEnabled?: boolean;\n isAddServiceItemToCart?: boolean;\n }[] = [];\n\n for (const inputItem of input) {\n const cartLine: CartLine = {\n CatalogId: inputItem.catalogId ?? getCatalogId(this.actionContext.requestContext),\n Description: inputItem.product.Description,\n\n // TODO: Investigate this value and what it represents\n EntryMethodTypeValue: 3,\n ItemId: inputItem.product.ItemId,\n ProductId: inputItem.product.RecordId,\n Quantity: inputItem.count || 1,\n TrackingId: '',\n UnitOfMeasureSymbol: inputItem.product.DefaultUnitOfMeasure,\n IsPriceKeyedIn: inputItem.isPriceKeyedIn,\n IsGiftCardLine: inputItem.product.IsGiftCard,\n Price: inputItem.customPrice ? inputItem.customPrice : inputItem.product.Price\n };\n\n if (inputItem.location) {\n if (!this.actionContext.requestContext.channel) {\n return { status: 'FAILED' };\n }\n\n // If curbside pick is not available use the default one\n if (inputItem.deliveryMode !== undefined) {\n cartLine.DeliveryMode = inputItem.deliveryMode;\n } else {\n cartLine.DeliveryMode = inputItem.retailMultiplePickupModeEnabled\n ? undefined\n : this.actionContext.requestContext.channel.PickupDeliveryModeCode;\n }\n\n cartLine.FulfillmentStoreId = inputItem.location.OrgUnitNumber;\n cartLine.WarehouseId = inputItem.location.InventoryLocationId;\n cartLine.ShippingAddress = this._buildAddressFromOrgUnitLocation(inputItem.location);\n }\n\n if (inputItem.isAddEmailDeliveryItemToCart) {\n cartLine.DeliveryMode = this.actionContext.requestContext.channel?.EmailDeliveryModeCode;\n }\n\n // Check if the product is service or not by product type\n const PRODUCTASSERVICE = 2 as ReleasedProductType.Service;\n const isAddServiceItemToCart = inputItem.product.ItemTypeValue === PRODUCTASSERVICE;\n\n internalInput.push({\n cartLineToAdd: cartLine,\n availableQuantity: inputItem.availableQuantity,\n isStockCheckEnabled: inputItem.enableStockCheck,\n isAddServiceItemToCart\n });\n }\n\n return this._doCartOperationWithRetry(() => addProductsToCartInternal(this.cart, this.actionContext, internalInput));\n });\n }\n\n /**\n * Adds the specified invoices to the current cart.\n * @param input - The input.\n * @param input.invoiceIds - Invoice Ids.\n * @param input.additionalProperties - Additional properties.\n * @returns Cart action result.\n */\n @action\n public async addInvoicesToCart(input: { invoiceIds: string[]; additionalProperties?: object }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() => addInvoicesToCartInternal(this.cart, input.invoiceIds, this.actionContext));\n });\n }\n\n /**\n * Adds the specified order invoice to the current cart.\n * @param input - Input.\n * @param input.invoiceId - Invoice id.\n * @param input.lineDescription - Line description.\n * @param input.additionalProperties - Additional properties.\n * @returns Cart action result.\n */\n @action\n public async addOrderInvoiceToCart(input: {\n invoiceId: string;\n lineDescription: string;\n additionalProperties?: object;\n }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() =>\n addOrderInvoiceToCartInternal(this.cart, input.invoiceId, input.lineDescription, this.actionContext)\n );\n });\n }\n\n /**\n * Sets price for the given cart line with an invoice. Used to complete partial invoice payments.\n * @param input - Input for the operation.\n * @param input.cartLineId - The cart line with the invoice for which to update the price.\n * @param input.price - The new value of price of the invoice.\n * @returns The cart action result.\n */\n @action public async setInvoiceLinePrice(input: { cartLineId: string | null; price: number }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(async () =>\n setInvoiceLinePriceInternal(this.cart, input.cartLineId, input.price, this.actionContext)\n );\n });\n }\n\n /**\n * Removes the cart lines with the provided ids from the cart.\n * @param input - Input.\n * @param input.cartLineIds - Cart line ids.\n * @param input.additionalProperties - Additional properties.\n * @returns The cart action result.\n */\n @action\n public async removeCartLines(input: { cartLineIds: string[]; additionalProperties?: object }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() => removeCartLineInternal(this.cart, input.cartLineIds, this.actionContext));\n });\n }\n\n /**\n * Clears the pickup location information from the provided cart line,\n * resulting in it getting shipped to the customer.\n * @param input - Input.\n * @param input.cartLineId - Cart line id.\n * @param input.additionalProperties - Additional properties.\n * @returns The cart action result.\n */\n @action\n public async clearCartLinePickupLocation(input: { cartLineId: string; additionalProperties?: object }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() => clearCartLineDeliveryModeInternal(this.cart, input.cartLineId, this.actionContext));\n });\n }\n\n /**\n * Clears the delivery mode, and other information for the shipping cart lines.\n * @param input - Input.\n * @param input.additionalProperties - Additional properties.\n * @param input.channelDeliveryOptionConfiguration -- Channel delivery option configuration.\n * @returns The cart action result.\n */\n @action\n public async clearCartLinesDeliveryInformation(input: {\n additionalProperties?: object;\n channelDeliveryOptionConfiguration?: ChannelDeliveryOptionConfiguration;\n }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() =>\n clearCartLinesDeliveryInformation(this.cart, this.actionContext, input.channelDeliveryOptionConfiguration)\n );\n });\n }\n\n /**\n * Marks the provided cart line for pickup in store, with the provided location as\n * the pickup location.\n * @param input - Input.\n * @param input.cartLineId - Cart line id.\n * @param input.location - Location.\n * @param input.additionalProperties - Additional properties.\n * @param input.deliveryMode - Delivery mode.\n * @returns The cart action result.\n */\n @action\n public async updateCartLinePickupLocation(input: {\n cartLineId: string;\n location: OrgUnitLocation;\n additionalProperties?: object;\n deliveryMode?: string;\n }): Promise {\n return this._doAsyncAction(async () => {\n if (!this.actionContext.requestContext.channel) {\n return { status: 'FAILED' };\n }\n\n const cartLineDeliverySpecification = {\n LineId: input.cartLineId,\n DeliverySpecification: {\n DeliveryModeId:\n input.deliveryMode !== undefined\n ? input.deliveryMode\n : this.actionContext.requestContext.channel.PickupDeliveryModeCode,\n DeliveryPreferenceTypeValue: 2, // Pick up in store\n PickUpStoreId: input.location.OrgUnitNumber,\n DeliveryAddress: this._buildAddressFromOrgUnitLocation(input.location)\n }\n };\n\n return this._doCartOperationWithRetry(() =>\n updateCartLineDeliverySpecificationsInternal(this.cart, [cartLineDeliverySpecification], this.actionContext)\n );\n });\n }\n\n /**\n * Marks the provided cart line for pickup in store, with the provided location as\n * the pickup location.\n * @param input - Input.\n * @param input.cartLineId - Cart line id.\n * @param input.location - Location.\n * @param input.additionalProperties - Additional properties.\n * @param input.deliveryMode - Delivery mode.\n * @returns The cart action result.\n */\n @action\n public async updateCartLineDeliverySpecification(input: {\n cartLineId: string;\n additionalProperties?: object;\n deliveryMode?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n }): Promise {\n return this._doAsyncAction(async () => {\n if (!this.actionContext.requestContext.channel) {\n return { status: 'FAILED' };\n }\n\n const cartLineDeliverySpecification = {\n LineId: input.cartLineId,\n DeliverySpecification: {\n DeliveryModeId:\n input.deliveryMode !== undefined\n ? input.deliveryMode\n : this.actionContext.requestContext.channel.PickupDeliveryModeCode,\n DeliveryPreferenceTypeValue: 2 // Pick up in store\n }\n };\n\n return this._doCartOperationWithRetry(() =>\n updateCartLineDeliverySpecificationsInternal(this.cart, [cartLineDeliverySpecification], this.actionContext)\n );\n });\n }\n\n /**\n * Updates cart line pick up date.\n * @param input - The cart line.\n * @param input.lineDeliverySpecifications - Line delivery specifications.\n * @returns The cart action result.\n */\n @action\n public async updateCartLinePickupDateTimeslot(input: {\n lineDeliverySpecifications: LineDeliverySpecification[];\n }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() =>\n updateCartLineDeliverySpecificationsInternal(this.cart, input.lineDeliverySpecifications, this.actionContext)\n );\n });\n }\n\n /**\n * Updates the delivery mode for items in the cart with the desired delivery mode, preserving BOPIS status for stuff already marked as BOPIS.\n * @param input - The input.\n * @param input.deliveryModeId - Delivery mode id.\n * @param input.shippingAddress - Shipping address.\n * @param input.additionalProperties - Additional properties.\n * @param input.channelDeliveryOptionConfig - Channel delivery option configuration.\n * @returns The cart action result.\n */\n @action\n public async updateCartDeliverySpecification(input: {\n deliveryModeId: string;\n shippingAddress: Address | undefined;\n additionalProperties?: object;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n }): Promise {\n return this._doAsyncAction(async () => {\n if (input.deliveryModeId.trim() === '') {\n return { status: 'FAILED', substatus: 'EMPTYINPUT' };\n }\n\n const pickupDeliveryModeCode =\n this.actionContext.requestContext.channel && this.actionContext.requestContext.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode =\n this.actionContext.requestContext.channel && this.actionContext.requestContext.channel.EmailDeliveryModeCode;\n let cartLinesForShipping: CartLine[] = [];\n\n cartLinesForShipping =\n input.channelDeliveryOptionConfig !== undefined\n ? (this.cart.CartLines || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n input.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : (this.cart.CartLines || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n\n if (cartLinesForShipping.length > 0) {\n const deliverySpecifications = cartLinesForShipping.map(cartLine => {\n return {\n LineId: cartLine.LineId,\n DeliverySpecification: {\n DeliveryModeId: input.deliveryModeId,\n DeliveryPreferenceTypeValue: 1, // Ship\n DeliveryAddress: input.shippingAddress\n }\n };\n });\n\n return this._doCartOperationWithRetry(() =>\n updateCartLineDeliverySpecificationsInternal(this.cart, deliverySpecifications, this.actionContext)\n );\n }\n\n return { status: 'FAILED', substatus: 'NOCONTENT' };\n });\n }\n\n /**\n * Updates the quantity of the cart line.\n * @param input - The input.\n * @param input.cartLineId - Cart line id.\n * @param input.newQuantity - New quantity.\n * @param input.additionalProperties - Additional properties.\n * @returns The cart action result.\n */\n @action\n public async updateCartLineQuantity(input: {\n cartLineId: string;\n newQuantity: number;\n additionalProperties?: object;\n }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() =>\n updateCartLineQuantityInternal(\n this.cart,\n input.cartLineId,\n input.newQuantity,\n this.actionContext,\n\n // @ts-expect-error\n input.additionalProperties?.isUsingDefaultOrderSettingsMax\n )\n );\n });\n }\n\n /**\n * Updates cart line pick up date.\n * @param input - The cart line.\n * @param input.lineDeliverySpecifications - Line delivery specifications.\n * @returns The cart action result.\n */\n @action\n public async updateCartLinesDeliverySpecification(input: {\n lineDeliverySpecifications: LineDeliverySpecification[];\n }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() =>\n updateCartLineDeliverySpecificationsInternal(this.cart, input.lineDeliverySpecifications, this.actionContext)\n );\n });\n }\n\n /**\n * Updates the loyalty card ID on the card.\n * @param input - The input.\n * @param input.loyaltyCardNumber - The loyalty card id to use.\n * @param input.additionalProperties - Additional properties.\n * @returns The cart action result.\n */\n @action\n public async updateLoyaltyCardId(input: {\n loyaltyCardNumber: string | undefined;\n additionalProperties?: object;\n }): Promise {\n if (!input.loyaltyCardNumber) {\n return { status: 'FAILED', substatus: 'EMPTYINPUT' };\n }\n\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() =>\n updateLoyaltyCardIdInternal(this.cart, input.loyaltyCardNumber!, this.actionContext)\n );\n });\n }\n\n /**\n * Adds promo code to the cart.\n * @param input - The input.\n * @param input.promoCode - The promo code to add.\n * @param input.additionalProperties - Additional properties.\n * @returns The cart action result.\n */\n @action\n public addPromoCode(input: { promoCode: string; additionalProperties?: object }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() => addPromoCodeInternal(this.cart, input.promoCode, this.actionContext));\n });\n }\n\n /**\n * Removes promo codes from the cart.\n * @param input - The input.\n * @param input.promoCodes - The promo codes to remove.\n * @param input.additionalProperties - Additional properties.\n * @returns The cart action result.\n */\n @action\n public removePromoCodes(input: { promoCodes: string[]; additionalProperties?: object }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() => removePromoCodesInternal(this.cart, input.promoCodes, this.actionContext));\n });\n }\n\n /**\n * Removes all promo code from the cart.\n * @param input - The input.\n * @param input.additionalProperties - Additional properties.\n * @returns The cart action result.\n */\n @action\n public removeAllPromoCodes(input: { additionalProperties?: object }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() => removeAllPromoCodesInternal(this.cart, this.actionContext));\n });\n }\n\n /**\n * Updates receipt email.\n * @param input - The input.\n * @param input.newEmail - The receipt email.\n * @param input.customerReference - The customer reference.\n * @param input.customerRequisition - The customer requisition.\n * @param input.note - The note.\n * @param input.additionalProperties - Additional properties.\n * @returns The cart action result.\n */\n @action\n public async updateReceiptEmail(input: {\n newEmail: string;\n customerReference?: string;\n customerRequisition?: string;\n note?: Note;\n additionalProperties?: object;\n }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() =>\n updateReceiptEmail(\n this.cart,\n input.newEmail,\n this.actionContext,\n input.customerReference,\n input.customerRequisition,\n input.note\n )\n );\n });\n }\n\n /**\n * Updates shipping address.\n * @param input - The input.\n * @param input.newShippingAddress - The shipping address.\n * @param input.additionalProperties - The additional properties.\n * @returns ICartActionResult.\n */\n @action\n public async updateShippingAddress(input: {\n newShippingAddress: Address;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(async () =>\n updateShippingAddress(this.cart, input.newShippingAddress, this.actionContext)\n );\n });\n }\n\n /**\n * Updates the attribute values.\n * @param input - The input.\n * @param input.newAttributeValues - The new attribute values to update.\n * @param input.additionalProperties - The additional properties.\n * @returns ICartActionResult.\n */\n @action\n public async updateAttributeValues(input: {\n newAttributeValues: AttributeValueBase[];\n additionalProperties?: object;\n }): Promise {\n this._attributeValues = input.newAttributeValues;\n const newCartObject: Cart = {\n Id: this.cart.Id,\n AttributeValues: input.newAttributeValues\n };\n return this.updateCart({ newCartObject });\n }\n\n /**\n * Updates the extension properties.\n * @param input - The input.\n * @param input.newExtensionProperties - The new extension properties.\n * @param input.additionalProperties - The additional properties.\n * @returns ICartActionResult.\n */\n @action\n public async updateExtensionProperties(input: {\n newExtensionProperties: CommerceProperty[];\n additionalProperties?: object;\n }): Promise {\n this._extensionProperties = input.newExtensionProperties;\n const newCartObject: Cart = {\n Id: this.cart.Id,\n ExtensionProperties: input.newExtensionProperties\n };\n return this.updateCart({ newCartObject });\n }\n\n /**\n * Updates cart object.\n * @param input - The input.\n * @param input.newCartObject - The new cart object.\n * @param input.additionalProperties - Additional properties.\n * @returns Promise of cart action result.\n */\n @action\n public async updateCart(input: { newCartObject: Cart; additionalProperties?: object }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() => updateCart(this.cart, input.newCartObject, this.actionContext));\n });\n }\n\n /**\n * Updates cartLines objects in cart.\n * @param input - The input.\n * @param input.updatedCartLinesObject - updated cartline.\n * @returns ICartActionResult.\n */\n @action\n public async updateCartLines(input: { updatedCartLinesObject: CartLine[] }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() =>\n updateCartLinesInternal(this.cart, input.updatedCartLinesObject, this.actionContext)\n );\n // eslint-disable-next-line max-lines\n });\n }\n\n /**\n * Updates cartLines objects in cart.\n * @param input - The input.\n * @param input.updatedCartLinesObject - updated cartline.\n * @returns ICartActionResult.\n */\n @action\n public async updateCartLineShippingAddress(input: { updatedCartLinesObject: CartLine[] }): Promise {\n return this._doAsyncAction(async () => {\n return this._doCartOperationWithRetry(() =>\n updateCartLinesInternal(this.cart, input.updatedCartLinesObject, this.actionContext)\n );\n });\n }\n\n /**\n * Initialize function.\n */\n public async initialize(): Promise {\n if (this.isInitialized) {\n return;\n }\n\n const newCart = await getOrCreateActiveCart(this.actionContext);\n\n if (newCart) {\n this._cart = newCart;\n this._status = 'READY';\n } else {\n this._status = 'ERROR';\n }\n\n this.isInitialized = true;\n }\n\n /**\n * Validates inventory across cart lines.\n * @param callback - Callback function.\n * @returns ICartActionResult.\n */\n private async _doCartOperationWithRetry(callback: () => Promise): Promise {\n const actionContext = this.actionContext;\n const requestContext = actionContext.requestContext;\n if (requestContext.features && requestContext.features.enable_checkout_race_condition_hot_fix) {\n // Enqueue the operation\n const operationPromise = this._operationQueue.then(\n async (): Promise => {\n let callbackResult: ICartActionResultWithCart;\n\n try {\n // First attempt to execute the callback\n callbackResult = await callback();\n\n if (callbackResult.status !== 'SUCCESS') {\n // If it fails, refresh the cart and retry\n const refreshCartResult = await this.refreshCart({});\n if (refreshCartResult.status === 'SUCCESS') {\n callbackResult = await callback();\n }\n }\n\n // Update cart if operation was successful\n if (callbackResult.status === 'SUCCESS' && callbackResult.cart) {\n this._cart = callbackResult.cart;\n }\n\n // Set the product added flag based on substatus\n this._isProductAddedToCart = callbackResult.status === 'SUCCESS' && callbackResult.substatus === 'PRODUCTADDED';\n\n return {\n status: callbackResult.status,\n substatus: callbackResult.substatus,\n errorDetails: callbackResult.errorDetails,\n validationResults: callbackResult.validationResults\n };\n } catch (error) {\n // Handle any unexpected errors\n const exception: IActionStatus = 'FAILED';\n\n return {\n status: exception, // Cast to correct type\n substatus: undefined, // Provide a valid substatus\n errorDetails: {}, // Cast to correct type\n validationResults: [] // Provide a valid empty array\n };\n }\n }\n );\n\n // Update the operation queue\n this._operationQueue = operationPromise.then(() => undefined);\n\n // Wait for the operation to complete and return its result\n return operationPromise;\n } else {\n let callbackResult = await callback();\n\n if (callbackResult.status === 'SUCCESS') {\n if (callbackResult.cart) {\n this._cart = callbackResult.cart;\n }\n } else {\n const refreshCartResult = await this.refreshCart({});\n\n if (refreshCartResult.status === 'SUCCESS') {\n callbackResult = await callback();\n\n if (callbackResult.status === 'SUCCESS') {\n if (callbackResult.cart) {\n this._cart = callbackResult.cart;\n }\n }\n }\n }\n\n if (callbackResult.status === 'SUCCESS' && callbackResult.substatus && callbackResult.substatus === 'PRODUCTADDED') {\n this._isProductAddedToCart = true;\n } else {\n this._isProductAddedToCart = false;\n }\n\n return {\n status: callbackResult.status,\n substatus: callbackResult.substatus,\n errorDetails: callbackResult.errorDetails,\n validationResults: callbackResult.validationResults\n };\n }\n }\n\n /**\n * Build address from org unit location.\n * @param location - The location.\n * @returns Address.\n */\n private _buildAddressFromOrgUnitLocation(location: OrgUnitLocation): Address {\n return {\n RecordId: location.PostalAddressId,\n Name: location.OrgUnitName,\n FullAddress: location.Address,\n Street: location.Street,\n StreetNumber: location.StreetNumber,\n City: location.City,\n DistrictName: location.DistrictName,\n BuildingCompliment: location.BuildingCompliment,\n Postbox: location.Postbox,\n ThreeLetterISORegionName: location.Country,\n ZipCode: location.Zip,\n County: location.County,\n CountyName: location.CountyName,\n State: location.State,\n StateName: location.StateName\n };\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { Cart, CartsDataActions, CommerceException } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function addInvoicesToCartInternal(\n cart: Readonly,\n invoiceIds: string[],\n actionContext: IActionContext\n): Promise {\n if (!invoiceIds || invoiceIds.length === 0) {\n actionContext.telemetry.trace('Invoice ids are empty, unable to add invoices to cart.');\n return { cart, status: 'FAILED', substatus: 'EMPTYINPUT' };\n }\n\n if (cart.Version) {\n return CartsDataActions.addInvoicesAsync({ callerContext: actionContext }, cart.Id, invoiceIds)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.trace(error);\n actionContext.telemetry.trace('Unable to add invoices to cart');\n\n // Error object comes from API and doesn't have type definitions yet.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- No type definition for error.\n const errorDetails: CommerceException = error.data;\n const errorResult: ICartActionResultWithCart = { cart: undefined, status: 'FAILED', errorDetails };\n return errorResult;\n });\n }\n actionContext.telemetry.warning('Unable to add invoices, Cart Version could not be found');\n\n return { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { addOrderInvoiceAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function addOrderInvoiceToCartInternal(\n cart: Readonly,\n invoiceId: string,\n lineDescription: string,\n actionContext: IActionContext\n): Promise {\n if (!invoiceId || invoiceId === '') {\n actionContext.telemetry.trace('Invoice id is empty, unable to add invoice to cart.');\n return { cart, status: 'FAILED', substatus: 'EMPTYINPUT' };\n }\n\n if (cart.Version) {\n return addOrderInvoiceAsync({ callerContext: actionContext }, cart.Id, invoiceId, lineDescription)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.trace(error);\n actionContext.telemetry.trace('Unable to add order invoice to cart');\n\n const resultWithCart: ICartActionResultWithCart = {\n cart: undefined,\n status: 'FAILED',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n errorDetails: { LocalizedMessage: error.message }\n };\n\n return resultWithCart;\n });\n }\n actionContext.telemetry.warning('Unable to add order invoice, Cart Version could not be found');\n\n return { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, Note } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateReceiptEmail(\n cart: Readonly,\n email: string,\n actionContext: IActionContext,\n customerReference?: string,\n customerRequisition?: string,\n note?: Note\n): Promise {\n if (!cart) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n const updatedCart: Cart = {\n Id: cart.Id,\n ReceiptEmail: email,\n Comment: customerReference,\n CustomerRequisition: customerRequisition,\n Notes: note !== undefined ? [note] : undefined\n };\n\n return updateAsync({ callerContext: actionContext }, updatedCart)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to add receipt email to the cart');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function clearCartLineDeliveryMode(\n cart: Readonly,\n cartLineId: string,\n actionContext: IActionContext\n): Promise {\n if (!cart || !cart.CartLines) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n const matchingLines = cart.CartLines.filter(cartLine => cartLine.LineId === cartLineId);\n\n if (matchingLines.length === 0) {\n return { cart: undefined, status: 'FAILED', substatus: 'NOMATCHEDCARTLINE' };\n }\n\n const copyCartLine: CartLine = { ...matchingLines[0] };\n\n copyCartLine.DeliveryMode = '';\n copyCartLine.FulfillmentStoreId = '';\n copyCartLine.ShippingAddress = {};\n copyCartLine.WarehouseId = actionContext.requestContext.channel?.InventLocation || cart.WarehouseId;\n\n return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, [copyCartLine], null)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to Update Cart Line');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cloneDeep } from 'lodash';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function clearCartLinesDeliveryInformation(\n cart: Readonly,\n actionContext: IActionContext,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration\n): Promise {\n if (!cart || !cart.CartLines) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n let matchingLines: CartLine[] = [];\n const pickupDeliveryModeCode =\n actionContext && actionContext.requestContext && actionContext.requestContext.channel?.PickupDeliveryModeCode;\n const emailDeliveryModeCode =\n actionContext && actionContext.requestContext && actionContext.requestContext.channel?.EmailDeliveryModeCode;\n if (channelDeliveryOptionConfig !== undefined) {\n matchingLines = cart.CartLines.filter(\n cartLine =>\n cartLine.DeliveryMode &&\n cartLine.DeliveryMode !== channelDeliveryOptionConfig.PickupDeliveryModeCodes?.find(dM => dM === cartLine.DeliveryMode) &&\n cartLine.DeliveryMode !== emailDeliveryModeCode &&\n cartLine.LineId\n );\n } else {\n matchingLines = cart.CartLines.filter(\n cartLine =>\n cartLine.DeliveryMode &&\n cartLine.DeliveryMode !== pickupDeliveryModeCode &&\n cartLine.DeliveryMode !== emailDeliveryModeCode &&\n cartLine.LineId\n );\n }\n\n // If there are no lines needing updates, just return success\n if (matchingLines.length === 0) {\n return { cart, status: 'SUCCESS' };\n }\n\n const copiedLines: CartLine[] = cloneDeep(matchingLines);\n\n copiedLines.forEach(line => {\n line.DeliveryMode = '';\n line.FulfillmentStoreId = '';\n line.ShippingAddress = {};\n });\n\n return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, copiedLines, null)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch((error: string) => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to Update Cart Lines');\n\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error } };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { FeatureState, LoyaltyCardTenderType } from '@msdyn365-commerce/retail-proxy';\nimport {\n addCartLinesAsync,\n addCouponsAsync,\n createCartAsync,\n readAsync,\n removeCartLinesAsync,\n searchAsync,\n updateAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n getChannelDeliveryOptionConfigurationAsync,\n getCustomerLoyaltyCardsAsync,\n getFeatureStatesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n Cart,\n CartLine,\n CartSearchCriteria,\n Coupon,\n QueryResultSettings\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport isEmpty from 'lodash/isEmpty';\n\nenum CartTokenPrefix {\n Auth = 't',\n Anon = 'p'\n}\n\nexport default async function getOrCreateActiveCart(ctx: IActionContext): Promise {\n let cart: Cart | undefined;\n const cartCookie: string = ctx.requestContext.cookies.getCartCookie();\n const cartCookieParts: string[] = cartCookie.split(':');\n try {\n // Check if there are already is a cart cookie and it is in the format we understand\n cart = await getCartFromCookie(cartCookieParts, ctx);\n const wasReadFromCookie = !!cart && cart.Id;\n\n // If the customer is authenticated, and the auth cookie didn't give us a cart OR doesn't have a cookie, search for the customer's cart\n if (!(cart && cart.Id)) {\n cart = await getCartFromCustomer(ctx);\n }\n\n // If the customer just went from anon to signed in state then get that anon cart\n // if the search of carts didn't result in a cart, claim the current anon cart as a new auth cart for the customer\n // if the search resulted in a cart, and the read also resulted in cart, then go ahead an merge the carts\n const anonCart = await claimAnonCart(cartCookieParts, cart, ctx);\n if (anonCart) {\n cart = anonCart;\n }\n\n // If there is no cookie or everything else fails, create an empty cart and return that for the customer\n if (!(cart && cart.Id)) {\n cart = await createNewCart(ctx);\n }\n if (!wasReadFromCookie && ctx.requestContext.user.isAuthenticated && cart && !cart.LoyaltyCardId) {\n const cards = await getCustomerLoyaltyCardsAsync({ callerContext: ctx, queryResultSettings: {} }, null, {\n ChannelId: cart.ChannelId\n });\n if (cards && cards.length > 0) {\n const noneBlockingCards = cards.filter(card => card.CardTenderTypeValue !== LoyaltyCardTenderType.Blocked);\n if (noneBlockingCards && noneBlockingCards.length > 0) {\n cart = await updateAsync(\n { callerContext: ctx },\n {\n Id: cart.Id,\n LoyaltyCardId: noneBlockingCards[0].CardNumber\n }\n );\n }\n }\n }\n } catch (error) {\n ctx.telemetry.error(`Caught exception in getting cart: ${error}`);\n console.log('Error getting cart', error);\n cart = await createNewCart(ctx);\n }\n return cart;\n}\n\n/**\n * Function to check cart exception due to product no available\n *\n * @param ctx Request context.\n * @param errorObj Error Object.\n */\nfunction handleItemDiscontinuedException(ctx: IActionContext, errorObj: object): boolean {\n const error = errorObj as Error;\n let response = false;\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ItemDiscontinuedFromChannel') {\n ctx.telemetry.information('Caught cart ItemDiscontinuedException error.');\n response = true;\n }\n\n return response;\n}\n\nexport async function createNewCart(ctx: IActionContext): Promise {\n const newCart = await createCartAsync({ callerContext: ctx }, {});\n if (newCart && newCart.Id) {\n ctx.requestContext.cookies.setCartCookie(newCart, ctx.requestContext.user.isAuthenticated);\n\n return newCart;\n }\n\n return undefined;\n}\n\nexport async function getCartFromCookie(cartCookieParts: string[], ctx: IActionContext): Promise {\n let readCart: Cart | undefined;\n let readCartId: string = '';\n\n const isAuthenticated = ctx.requestContext.user.isAuthenticated;\n if (cartCookieParts && cartCookieParts.length === 2) {\n // If the customer is authenticated and they have an auth cookie\n // OR if the customer is not authenticated and then have an anon cookie\n // just get the cart and return that\n\n if (\n (isAuthenticated && cartCookieParts[0] === CartTokenPrefix.Auth) ||\n (!isAuthenticated && cartCookieParts[0] === CartTokenPrefix.Anon)\n ) {\n try {\n readCartId = cartCookieParts[1];\n const readCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, cartCookieParts[1]);\n\n if (readCart && readCart.Id) {\n ctx.requestContext.cookies.setCartCookie(readCart, ctx.requestContext.user.isAuthenticated);\n return readCart;\n }\n } catch (error) {\n if (handleItemDiscontinuedException(ctx, error)) {\n readCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, readCartId);\n }\n ctx.telemetry.error('Error getting cart based on saved card id');\n ctx.telemetry.exception(error);\n console.log('Error getting cart', error);\n }\n }\n }\n\n return readCart;\n}\n\nexport async function getCartFromCustomer(ctx: IActionContext): Promise {\n if (ctx.requestContext.user.isAuthenticated) {\n try {\n const authCarts = await searchCarts(ctx);\n if (authCarts && authCarts.length > 0) {\n ctx.requestContext.cookies.setCartCookie(authCarts[0], ctx.requestContext.user.isAuthenticated);\n return authCarts[0];\n }\n } catch (error) {\n ctx.telemetry.error('Error getting cart based on customer');\n ctx.telemetry.exception(error);\n console.log('Error getting cart', error);\n }\n }\n\n return undefined;\n}\n\nexport async function claimAnonCart(\n cartCookieParts: string[],\n currentCart: Cart | undefined,\n ctx: IActionContext\n): Promise {\n let anonCurrentCart: Cart | undefined;\n\n if (\n ctx.requestContext.user.isAuthenticated &&\n cartCookieParts &&\n cartCookieParts.length === 2 &&\n cartCookieParts[0] === CartTokenPrefix.Anon\n ) {\n try {\n anonCurrentCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, cartCookieParts[1]);\n } catch (error) {\n if (handleItemDiscontinuedException(ctx, error)) {\n anonCurrentCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, cartCookieParts[1]);\n console.log('Error getting anonymous cart', error);\n }\n }\n\n if (anonCurrentCart && !currentCart) {\n const newCart = await claimCart(anonCurrentCart.Id, ctx);\n if (newCart && newCart.Id) {\n ctx.requestContext.cookies.setCartCookie(newCart, ctx.requestContext.user.isAuthenticated);\n return newCart;\n }\n }\n\n if (anonCurrentCart && anonCurrentCart.Id && currentCart) {\n const mergedCart = await addCartLines(anonCurrentCart, currentCart, ctx);\n\n // Once updated, take that merged cart ID and store the cart ID in the cookie\n if (!(mergedCart instanceof Error) && mergedCart.Id) {\n ctx.requestContext.cookies.setCartCookie(mergedCart, ctx.requestContext.user.isAuthenticated);\n return mergedCart;\n }\n }\n }\n\n return undefined;\n}\n\n/**\n * Function that copies a cartline for giftcard.\n * @param cartline Source CartLine you want to copy.\n */\nfunction buildGiftCardLine(cartline: CartLine): CartLine {\n return {\n DeliveryMode: cartline.DeliveryMode,\n CatalogId: cartline.CatalogId,\n Description: cartline.Description,\n EntryMethodTypeValue: cartline.EntryMethodTypeValue || 3,\n ItemId: cartline.ItemId,\n ProductId: cartline.ProductId,\n Quantity: cartline.Quantity,\n Price: cartline.Price,\n NetPrice: cartline.NetPrice,\n GiftCardBalance: cartline.GiftCardBalance,\n TrackingId: '',\n UnitOfMeasureSymbol: cartline.UnitOfMeasureSymbol,\n IsPriceKeyedIn: true,\n IsGiftCardLine: true,\n ExtensionProperties: cartline.ExtensionProperties\n };\n}\n\n/**\n * Function that adds cart lines from source cart to destination cart.\n * @param sourceCart Source cart you want to add cart lines from.\n * @param destinationCart Destination cart that you want to add cart lines to.\n * @param ctx Request context.\n */\nexport async function addCartLines(sourceCart: Cart, destinationCart: Cart, ctx: IActionContext): Promise {\n let updatedCart;\n const cartLines: CartLine[] = [];\n const cartLinesToDelete: string[] = [];\n let hasShippingMethod: boolean;\n const channelConfiguration = ctx.requestContext.channel;\n const featureNames: string[] = ['Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'];\n if (destinationCart.Version) {\n if (sourceCart.CartLines && sourceCart.CartLines.length > 0) {\n for (const cartline of sourceCart.CartLines) {\n let newCartLine: CartLine;\n\n if (cartline.IsGiftCardLine) {\n newCartLine = buildGiftCardLine(cartline);\n } else {\n newCartLine = {};\n const featureStates = await getFeatureStatesAsync({ callerContext: ctx }, featureNames);\n const isfeatureStatesEnabled =\n featureStates?.find(\n (featureState: FeatureState) =>\n featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n )?.IsEnabled || false;\n if (isfeatureStatesEnabled) {\n const channelDeliveryOptionConfig = await getChannelDeliveryOptionConfigurationAsync({ callerContext: ctx });\n hasShippingMethod =\n cartline.DeliveryMode ===\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.find(\n (deliveryMode: string) => deliveryMode === cartline.DeliveryMode\n );\n\n if (cartline.DeliveryMode !== undefined && hasShippingMethod) {\n newCartLine.DeliveryMode = cartline.DeliveryMode;\n newCartLine.FulfillmentStoreId = cartline.FulfillmentStoreId;\n newCartLine.ShippingAddress = cartline.ShippingAddress;\n newCartLine.WarehouseId = cartline.WarehouseId;\n }\n } else if (!isEmpty(cartline.DeliveryMode) && cartline.DeliveryMode === channelConfiguration?.PickupDeliveryModeCode) {\n newCartLine.DeliveryMode = channelConfiguration?.PickupDeliveryModeCode;\n newCartLine.FulfillmentStoreId = cartline.FulfillmentStoreId;\n newCartLine.ShippingAddress = cartline.ShippingAddress;\n newCartLine.WarehouseId = cartline.WarehouseId;\n }\n newCartLine.ProductId = cartline.ProductId;\n newCartLine.Quantity = cartline.Quantity;\n newCartLine.ExtensionProperties = cartline.ExtensionProperties;\n newCartLine.Description = cartline.Description;\n newCartLine.ReasonCodeLines = cartline.ReasonCodeLines;\n newCartLine.AttributeValues = cartline.AttributeValues;\n newCartLine.CatalogId = cartline.CatalogId;\n newCartLine.EntryMethodTypeValue = cartline.EntryMethodTypeValue;\n newCartLine.ItemId = cartline.ItemId;\n if (cartline.DeliveryMode !== undefined && cartline.DeliveryMode !== '') {\n newCartLine.DeliveryMode = cartline.DeliveryMode;\n }\n\n // without unitofmeasure cartline wont be aggregated in customer cart.\n newCartLine.UnitOfMeasureSymbol = cartline.UnitOfMeasureSymbol;\n if (cartline.IsPriceKeyedIn) {\n newCartLine.Price = cartline.Price;\n newCartLine.IsPriceKeyedIn = cartline.IsPriceKeyedIn;\n }\n }\n\n cartLines.push({ ...newCartLine });\n if (cartline.LineId) {\n cartLinesToDelete.push(cartline.LineId);\n }\n }\n }\n\n if (cartLines.length > 0) {\n try {\n updatedCart = await addCartLinesAsync({ callerContext: ctx }, destinationCart.Id, cartLines, destinationCart.Version);\n\n if (cartLinesToDelete.length > 0) {\n sourceCart = await removeCartLinesAsync({ callerContext: ctx }, sourceCart.Id, cartLinesToDelete);\n }\n } catch (error) {\n ctx.telemetry.error('Error adding cart lines to desination cart');\n ctx.telemetry.exception(error);\n return destinationCart;\n }\n }\n\n // Copy over coupon codes from source cart to destination cart so that the customer doesn't lose couponCodes while migration\n if (sourceCart.Coupons && sourceCart.Coupons.length > 0) {\n const coupons = sourceCart.Coupons.map((coupon: Coupon) => {\n return coupon.Code!;\n });\n\n try {\n updatedCart = await addCouponsAsync({ callerContext: ctx }, destinationCart.Id, coupons, false);\n } catch (error) {\n ctx.telemetry.error('Error adding existing coupon codes to the cart');\n ctx.telemetry.exception(error);\n return destinationCart;\n }\n }\n }\n\n return updatedCart || destinationCart;\n}\n\n/**\n * Function to claim a cart as auth cart and set the browser cookie accordingly.\n *\n * @param cartId Cart Id to claim as auth cart.\n * @param ctx Request Context.\n */\nexport async function claimCart(cartId: string, ctx: IActionContext): Promise {\n const claimAuthCart = await updateAsync(\n { callerContext: ctx },\n {\n Id: cartId\n }\n );\n if (!(claimAuthCart instanceof Error) && claimAuthCart && claimAuthCart.Id) {\n return claimAuthCart;\n }\n console.log('Error claiming cart', claimAuthCart);\n return {};\n}\n\n/**\n * Function to search carts that belong to a customer.\n *\n * @param ctx Request context.\n */\nexport async function searchCarts(ctx: IActionContext): Promise {\n const cartSearchCriteria: CartSearchCriteria = {\n IncludeAnonymous: false,\n CartTypeValue: 1\n };\n\n const queryResultSettings: QueryResultSettings = {\n Paging: {\n Top: 1,\n Skip: 0\n },\n Sorting: {\n Columns: [\n {\n ColumnName: 'ModifiedDateTime',\n IsDescending: true\n }\n ]\n }\n };\n\n return searchAsync({ callerContext: ctx, queryResultSettings }, cartSearchCriteria);\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { readAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nexport default async function refreshCart(cartId: string, ctx: IActionContext): Promise {\n return readAsync({ callerContext: ctx, bypassCache: 'get' }, cartId)\n .then(cart => {\n return cart;\n })\n .catch(error => {\n return undefined;\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { removeDiscountCodesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function removeAllPromoCodes(\n cart: Readonly,\n actionContext: IActionContext\n): Promise {\n if (!cart) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n if (cart.Coupons && cart.Coupons.length > 0) {\n const promoCodes = cart.Coupons.map(coupon => {\n return coupon.Code || '';\n });\n\n return removeDiscountCodesAsync({ callerContext: actionContext }, cart.Id, promoCodes)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n });\n }\n\n return { cart, status: 'SUCCESS' };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { removeCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function removeCartLinesInternal(\n cart: Readonly,\n cartLineIds: string[],\n actionContext: IActionContext\n): Promise {\n if (!cart) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n return removeCartLinesAsync({ callerContext: actionContext }, cart.Id, cartLineIds)\n .then(newCart => {\n // This is because of a TSProxy typing error\n const returnedCart = Array.isArray(newCart) ? newCart[0] : newCart;\n\n return { cart: returnedCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to Remove Cart Line');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { removeDiscountCodesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function removePromoCodes(\n cart: Readonly,\n promoCodes: string[],\n actionContext: IActionContext\n): Promise {\n if (!cart) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n return removeDiscountCodesAsync({ callerContext: actionContext }, cart.Id, promoCodes)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { Cart, CartsDataActions } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\n/**\n * Sets price for the given cart line with an invoice. Used to complete partial invoice payments.\n * @param cart - Cart where the invoice is located.\n * @param cartLineId - The cart line with the invoice for which to update the price.\n * @param price - The new value of price of the invoice.\n * @param actionContext - The action context from SDK.\n * @returns Result of the operation with the details.\n */\nexport async function setInvoiceLinePriceInternal(\n cart: Readonly,\n cartLineId: string | null,\n price: number,\n actionContext: IActionContext\n): Promise {\n if (!cart.Version) {\n actionContext.telemetry.warning('Unable to set invoice line price, Cart Version could not be found');\n return { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n }\n\n try {\n const newCart = await CartsDataActions.setInvoiceLinePriceAsync(\n { callerContext: actionContext },\n cart.Id,\n cartLineId,\n price,\n cart.Version\n );\n return { cart: newCart, status: 'SUCCESS' };\n } catch (error) {\n const errorInstance = error as Error;\n actionContext.telemetry.trace(error as string);\n actionContext.telemetry.trace('Unable to set invoice line price');\n\n return {\n cart: undefined,\n status: 'FAILED',\n errorDetails: { LocalizedMessage: errorInstance.message }\n };\n }\n}\n\nexport default setInvoiceLinePriceInternal;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { updateLineDeliverySpecificationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, LineDeliverySpecification } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateCartLineDeliverySpecificationsInternal(\n cart: Readonly,\n cartLineDeliverySpecifications: LineDeliverySpecification[],\n actionContext: IActionContext\n): Promise {\n if (!cart || !cart.CartLines || cartLineDeliverySpecifications.length === 0) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n return updateLineDeliverySpecificationsAsync({ callerContext: actionContext }, cart.Id, cartLineDeliverySpecifications)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to updateLineDeliverySpecificationsAsync');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateCartLineQuantityInternal(\n cart: Readonly,\n cartLineId: string,\n newQuantity: number,\n actionContext: IActionContext,\n isUsingDefaultOrderSettingsMax: boolean\n): Promise {\n if (isUsingDefaultOrderSettingsMax) {\n return updateCartLineQuantityValidateMaxAgainstDefaultOrderSettings(cart, cartLineId, newQuantity, actionContext);\n }\n return updateCartLineQuantityValidateMaxAgainstSiteSettings(cart, cartLineId, newQuantity, actionContext);\n}\nasync function updateCartLineQuantityValidateMaxAgainstDefaultOrderSettings(\n cart: Readonly,\n cartLineId: string,\n newQuantity: number,\n actionContext: IActionContext\n): Promise {\n if (!cart || !cart.CartLines) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n const matchingLines = cart.CartLines.filter(cartLine => cartLine.LineId === cartLineId);\n\n if (matchingLines.length === 0) {\n return { cart: undefined, status: 'FAILED', substatus: 'NOMATCHEDCARTLINE' };\n }\n\n const copyCartLine: CartLine = { ...matchingLines[0] };\n\n copyCartLine.Quantity = newQuantity;\n\n return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, [copyCartLine], null)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n let cartActionResult: ICartActionResultWithCart;\n\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to Update Cart Line');\n if (\n error.name === 'Microsoft_Dynamics_Commerce_Runtime_AddingItem_ExceedsMaximumQuantity' ||\n error.name === 'Microsoft_Dynamics_Commerce_Runtime_UpdatingItem_ExceedsMaximumQuantity'\n ) {\n cartActionResult = {\n cart: undefined,\n status: 'FAILED',\n substatus: 'QUANTITYLIMITS',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n errorDetails: { LocalizedMessage: error.message },\n validationResults: error.data?.ValidationResults\n };\n return cartActionResult;\n }\n\n cartActionResult = {\n cart: undefined,\n status: 'FAILED',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n errorDetails: { LocalizedMessage: error.message },\n validationResults: error.data?.ValidationResults\n };\n return cartActionResult;\n });\n}\n\nasync function updateCartLineQuantityValidateMaxAgainstSiteSettings(\n cart: Readonly,\n cartLineId: string,\n newQuantity: number,\n actionContext: IActionContext\n): Promise {\n if (!cart || !cart.CartLines) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n const matchingLines = cart.CartLines.filter(cartLine => cartLine.LineId === cartLineId);\n\n if (matchingLines.length === 0) {\n return { cart: undefined, status: 'FAILED', substatus: 'NOMATCHEDCARTLINE' };\n }\n\n const copyCartLine: CartLine = { ...matchingLines[0] };\n copyCartLine.Quantity = Math.min(newQuantity, actionContext.requestContext.app.config.maxQuantityForCartLineItem || 10);\n\n return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, [copyCartLine], null)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to Update Cart Line');\n return {\n cart: undefined,\n status: 'FAILED',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n errorDetails: { LocalizedMessage: error.message },\n validationResults: error.data?.ValidationResults\n };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateCartLinesInternal(\n cart: Readonly,\n cartLinesToUpdate: CartLine[],\n actionContext: IActionContext\n): Promise {\n if (!cart || !cart.CartLines) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, cartLinesToUpdate, null)\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch((error: string) => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to Update Cart Lines');\n\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error } };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateCart(\n cart: Readonly,\n updatedCartObject: Cart,\n actionContext: IActionContext\n): Promise {\n if (!cart) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n return updateAsync({ callerContext: actionContext }, { ...updatedCartObject, Id: cart.Id })\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to update the cart');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateLoyaltyCardId(\n cart: Readonly,\n newLoyaltyCardId: string,\n actionContext: IActionContext\n): Promise {\n if (!cart) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n return updateAsync(\n { callerContext: actionContext },\n {\n Id: cart.Id,\n LoyaltyCardId: newLoyaltyCardId\n }\n )\n .then(newCart => {\n return { cart: newCart, status: 'SUCCESS' };\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to update loyalty card id');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { Address, Cart, CartsDataActions } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\n/**\n * Update shipping address in cart.\n * @param cart - The cart object.\n * @param shippingAddress - The new shipping address.\n * @param actionContext - The action context.\n * @returns The updated cart with new shipping address.\n */\nexport async function updateShippingAddress(\n cart: Readonly,\n shippingAddress: Address,\n actionContext: IActionContext\n): Promise {\n if (!cart) {\n return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n }\n\n return CartsDataActions.updateAsync(\n { callerContext: actionContext },\n {\n Id: cart.Id,\n ShippingAddress: shippingAddress\n }\n )\n .then(newCart => {\n const result: ICartActionResultWithCart = { cart: newCart, status: 'SUCCESS' };\n return result;\n })\n .catch(error => {\n actionContext.telemetry.warning(error);\n actionContext.telemetry.debug('Unable to update shipping address to the cart');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n });\n}\n\nexport default updateShippingAddress;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { BaseCartState } from '../cart-state/base-cart-state';\nimport getCheckoutCart, { GetCheckoutCartInput } from '../data-actions/get-checkout-cart';\n\n/**\n * Version of BaseCartState that uses the checkout cart.\n */\nexport class BaseCheckoutCartState extends BaseCartState {\n public async initialize(): Promise {\n if (this.isInitialized) {\n return;\n }\n\n const newCart = await getCheckoutCart(new GetCheckoutCartInput(this.actionContext.requestContext.apiSettings), this.actionContext);\n\n if (newCart) {\n this._cart = newCart;\n this._status = 'READY';\n } else {\n this._status = 'ERROR';\n }\n\n this.isInitialized = true;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum CheckoutStorageKey {\n BillingAddress = 'BillingAddress',\n GiftCard = 'GiftCard',\n LoyaltyCardNumber = 'LoyaltyCardNumber',\n LoyaltyAmount = 'LoyaltyAmount',\n TermsAndCondition = 'TermsAndCondition',\n CheckoutGenericData = 'Checkout-Generic-Data',\n PaymentTenderType = 'PaymentTenderType',\n RedirectPaymentConnectorId = 'RedirectPaymentConnectorId',\n IsExpressCheckoutApplied = 'IsExpressCheckoutApplied'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport {\n Address,\n AttributeValueBase,\n CardPaymentAcceptResult,\n CartLine,\n CommerceProperty,\n GiftCard,\n Note,\n SalesOrder,\n SimpleProduct,\n TenderLine,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport get from 'lodash/get';\nimport { action, computed, observable } from 'mobx';\n\nimport { GlobalState } from '../global-state/global-state';\nimport { CheckoutModule } from '../state-interfaces';\nimport { ICartState } from '../state-interfaces/i-cart-state';\nimport {\n ICheckoutActionResult,\n ICheckoutGenericData,\n ICheckoutState,\n IGiftCardExtend,\n ICheckoutError\n} from '../state-interfaces/i-checkout-state';\nimport { BaseCheckoutCartState } from './base-checkout-cart-state';\nimport { CheckoutStorageKey } from './checkout-state-storage';\n\n/**\n * State information related to what is needed to succesfully perform a checkout.\n */\nexport class BaseCheckoutState extends GlobalState implements ICheckoutState {\n @observable protected _checkoutCart: ICartState;\n\n @computed public get checkoutCart(): ICartState {\n return this._checkoutCart;\n }\n\n @observable protected _salesOrder?: SalesOrder;\n\n @computed public get salesOrder(): Readonly {\n return this._salesOrder;\n }\n\n @observable protected _attributeValues: AttributeValueBase[];\n\n @computed public get attributeValues(): Readonly {\n return this._attributeValues;\n }\n\n @observable protected _extensionProperties: CommerceProperty[];\n\n @computed public get extensionProperties(): Readonly {\n return this._extensionProperties;\n }\n\n @observable protected _orderedProducts?: SimpleProduct[];\n\n @computed public get orderedProducts(): Readonly {\n return this._orderedProducts;\n }\n\n @observable protected _tokenizedPaymentCard?: TokenizedPaymentCard;\n\n @computed public get tokenizedPaymentCard(): Readonly {\n return this._tokenizedPaymentCard;\n }\n\n @observable protected _tenderLine?: TenderLine;\n\n @computed public get tenderLine(): Readonly {\n return this._tenderLine;\n }\n\n @observable protected _billingAddress?: Address;\n\n @computed public get billingAddress(): Readonly
{\n return this._billingAddress;\n }\n\n @observable protected _isBillingAddressSameAsShippingAddress?: boolean;\n\n @computed public get isBillingAddressSameAsShippingAddress(): Readonly {\n return this._isBillingAddressSameAsShippingAddress;\n }\n\n @observable protected _shippingAddress?: Address;\n\n @computed public get shippingAddress(): Readonly
{\n return this._shippingAddress;\n }\n\n @observable protected _cartLinesWithShippingAddress?: CartLine[];\n\n @computed public get cartLinesWithShippingAddress(): Readonly {\n return this._cartLinesWithShippingAddress;\n }\n\n @observable protected _hasShippingAddress?: boolean;\n\n @computed public get hasShippingAddress(): Readonly {\n return this._hasShippingAddress;\n }\n\n @observable protected _hasCartDeliveryMode?: boolean;\n\n @computed public get hasCartDeliveryMode(): Readonly {\n return this._hasCartDeliveryMode;\n }\n\n @observable protected _cardPrefix?: string;\n\n @computed public get cardPrefix(): Readonly {\n return this._cardPrefix;\n }\n\n @observable protected _paymentTenderType?: string;\n\n @computed public get paymentTenderType(): Readonly {\n return this._paymentTenderType;\n }\n\n /**\n * @deprecated Use giftCardExtends method.\n */\n @computed public get giftCards(): Readonly {\n return this.giftCardExtends;\n }\n\n @observable protected _giftCardExtends: IGiftCardExtend[] = [];\n\n @computed public get giftCardExtends(): Readonly {\n return this._giftCardExtends;\n }\n\n @observable protected _loyaltyCardNumber?: string;\n\n @computed public get loyaltyCardNumber(): Readonly {\n return this._loyaltyCardNumber;\n }\n\n @observable protected _loyaltyAmount: number = 0;\n\n @computed public get loyaltyAmount(): Readonly {\n return this._loyaltyAmount;\n }\n\n @observable protected _guestCheckoutEmail: string = '';\n\n @computed public get guestCheckoutEmail(): Readonly {\n return this._guestCheckoutEmail;\n }\n\n @observable protected _hasGuestCheckoutEmail?: boolean;\n\n @computed public get hasGuestCheckoutEmail(): Readonly {\n return this._hasGuestCheckoutEmail;\n }\n\n @observable protected _isTermsAndConditionAccepted?: boolean;\n\n @computed public get isTermsAndConditionAccepted(): Readonly {\n return this._isTermsAndConditionAccepted;\n }\n\n @observable protected _isTermsAndConditionChecked?: boolean;\n\n @computed public get isTermsAndConditionChecked(): Readonly {\n return this._isTermsAndConditionChecked;\n }\n\n @observable protected _shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n\n @computed public get shouldEnableSinglePaymentAuthorizationCheckout(): Readonly {\n return this._shouldEnableSinglePaymentAuthorizationCheckout;\n }\n\n @observable protected _shouldEnableCheckoutErrorDisplayMessaging?: boolean;\n\n @computed public get shouldEnableCheckoutErrorDisplayMessaging(): Readonly {\n return this._shouldEnableCheckoutErrorDisplayMessaging;\n }\n\n @observable protected _shouldCollapsePaymentSection?: boolean;\n\n @computed public get shouldCollapsePaymentSection(): Readonly {\n return this._shouldCollapsePaymentSection;\n }\n\n @observable protected _shouldTriggerPaymentWithPlaceOrder?: boolean;\n\n @computed public get shouldTriggerPaymentWithPlaceOrder(): Readonly {\n return this._shouldTriggerPaymentWithPlaceOrder;\n }\n\n @observable protected _isPaymentSectionContainerReady?: boolean;\n\n @computed public get isPaymentSectionContainerReady(): Readonly {\n return this._isPaymentSectionContainerReady;\n }\n\n @observable protected _cardPaymentAcceptResult?: CardPaymentAcceptResult;\n\n @computed public get cardPaymentAcceptResult(): Readonly {\n return this._cardPaymentAcceptResult;\n }\n\n @observable protected _isPaymentSectionContainerHasError?: boolean;\n\n @computed public get isPaymentSectionContainerHasError(): Readonly {\n return this._isPaymentSectionContainerHasError;\n }\n\n @observable protected _redirectAdditionalContext?: string;\n\n @computed public get redirectAdditionalContext(): Readonly {\n return this._redirectAdditionalContext;\n }\n\n @observable protected _redirectPaymentConnectorId?: string;\n\n @computed public get redirectPaymentConnectorId(): Readonly {\n return this._redirectPaymentConnectorId;\n }\n\n @observable protected _checkoutErrorPaymentConnectorId?: string;\n\n @computed public get checkoutErrorPaymentConnectorId(): Readonly {\n return this._checkoutErrorPaymentConnectorId;\n }\n\n @observable protected _isPlaceOrderEnabledInRedirection?: boolean;\n\n @computed public get isPlaceOrderEnabledInRedirection(): Readonly {\n return this._isPlaceOrderEnabledInRedirection;\n }\n\n @observable protected _isPaymentVerificationRequired?: boolean;\n\n @computed public get isPaymentVerificationRequired(): Readonly {\n return this._isPaymentVerificationRequired;\n }\n\n @observable protected _isCheckoutCallFailed?: boolean;\n\n @computed public get isCheckoutCallFailed(): Readonly {\n return this._isCheckoutCallFailed;\n }\n\n @observable protected _customerAccountAmount: number = 0;\n\n @computed public get customerAccountAmount(): Readonly {\n return this._customerAccountAmount;\n }\n\n @observable protected _shouldEnableExpressCheckoutInCheckout?: boolean;\n\n @computed public get shouldEnableExpressCheckoutInCheckout(): Readonly {\n return this._shouldEnableExpressCheckoutInCheckout;\n }\n\n @observable protected _shouldEnableExpressCheckoutInCart?: boolean;\n\n @computed public get shouldEnableExpressCheckoutInCart(): Readonly {\n return this._shouldEnableExpressCheckoutInCart;\n }\n\n @observable protected _shippingAddressFromExpressCheckout?: Address;\n\n @computed public get shippingAddressFromExpressCheckout(): Readonly
{\n return this._shippingAddressFromExpressCheckout;\n }\n\n @observable protected _emailAddressFromExpressCheckout: string = '';\n\n @computed public get emailAddressFromExpressCheckout(): Readonly {\n return this._emailAddressFromExpressCheckout;\n }\n\n @observable protected _billingAddressFromExpressCheckout?: Address;\n\n @computed public get billingAddressFromExpressCheckout(): Readonly
{\n return this._billingAddressFromExpressCheckout;\n }\n\n @observable protected _isExpressCheckoutApplied?: boolean;\n\n @computed public get isExpressCheckoutApplied(): Readonly {\n return this._isExpressCheckoutApplied;\n }\n\n @observable protected _isExpressAddressApplied?: boolean;\n\n @computed public get isExpressAddressApplied(): Readonly {\n return this._isExpressAddressApplied;\n }\n\n @observable protected _isExpressCheckoutAppliedInCartPage?: boolean;\n\n @computed public get isExpressCheckoutAppliedInCartPage(): Readonly {\n return this._isExpressCheckoutAppliedInCartPage;\n }\n\n @observable protected _isExpressPaymentModulesReady?: CommerceProperty[];\n\n @computed public get isExpressPaymentModulesReady(): Readonly {\n return this._isExpressPaymentModulesReady;\n }\n\n @computed public get isPaymentVerificationRedirection(): Readonly {\n const { requestFormData, query } = this.actionContext.requestContext;\n return !!(query && query.pv === '1' && (requestFormData || query.redirectResult));\n }\n\n @observable protected _checkoutError?: ICheckoutError;\n\n @computed public get checkoutError(): Readonly {\n return this._checkoutError;\n }\n\n @observable protected _isBillingAddressHasError?: boolean;\n\n @computed public get isBillingAddressHasError(): Readonly {\n return this._isBillingAddressHasError;\n }\n\n @observable protected _checkoutErrorFocus?: CheckoutModule;\n\n @computed public get checkoutErrorFocus(): Readonly {\n return this._checkoutErrorFocus;\n }\n\n @observable protected _shouldFocusOnCheckoutError?: boolean;\n\n @computed public get shouldFocusOnCheckoutError(): Readonly {\n return this._shouldFocusOnCheckoutError;\n }\n\n @observable protected _checkoutGenericData: object = {};\n\n constructor(actionContext: IActionContext) {\n super(actionContext);\n this._checkoutCart = new BaseCheckoutCartState(actionContext);\n this._attributeValues = [];\n this._extensionProperties = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for app settings.\n this._shouldEnableSinglePaymentAuthorizationCheckout = actionContext.requestContext.app.config\n .shouldEnableSinglePaymentAuthorizationCheckout as boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for app settings.\n this._shouldEnableCheckoutErrorDisplayMessaging = actionContext.requestContext.app.config\n .shouldEnableCheckoutErrorDisplayMessaging as boolean;\n }\n\n @action\n public updateSalesOrder(input: {\n newSalesOrder: SalesOrder;\n newOrderedProducts: SimpleProduct[];\n additionalProperties?: object;\n }): Promise {\n this._salesOrder = input.newSalesOrder;\n this._orderedProducts = input.newOrderedProducts;\n this._attributeValues = input.newSalesOrder.AttributeValues || [];\n this._extensionProperties = input.newSalesOrder.ExtensionProperties || [];\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public async updateAttributeValues(input: {\n newAttributeValues: AttributeValueBase[];\n additionalProperties?: object;\n }): Promise {\n this._attributeValues = input.newAttributeValues;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public async updateExtensionProperties(input: {\n newExtensionProperties: CommerceProperty[];\n additionalProperties?: object;\n }): Promise {\n this._extensionProperties = input.newExtensionProperties;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public updateTokenizedPaymentCard(input: {\n newTokenizedPaymentCard?: TokenizedPaymentCard;\n additionalProperties?: object;\n }): Promise {\n this._tokenizedPaymentCard = input.newTokenizedPaymentCard;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public updateTenderLine(input: { newTenderLine?: TenderLine; additionalProperties?: object }): Promise {\n this._tenderLine = input.newTenderLine;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public async updateShippingAddress(input: {\n newShippingAddress: Address;\n additionalProperties?: object;\n }): Promise {\n this._shippingAddress = input.newShippingAddress;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public async updateCartLinesShippingAddress(input: {\n newCartLinesWithShippingAddress: CartLine[];\n additionalProperties?: object;\n }): Promise {\n this._cartLinesWithShippingAddress = input.newCartLinesWithShippingAddress;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public async updateHasShippingAddress(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newHasShippingAddress: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._hasShippingAddress = input.newHasShippingAddress;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateHasCartDeliveryMode(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newHasCartDeliveryMode: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._hasCartDeliveryMode = input.newHasCartDeliveryMode;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateTermsAndConditionsAcceptance(input: {\n newIsTermsAndConditionAccepted: boolean;\n additionalProperties?: object;\n }): Promise {\n this._isTermsAndConditionAccepted = input.newIsTermsAndConditionAccepted;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public async updateIsTermsAndConditionsChecked(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsTermsAndConditionChecked: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isTermsAndConditionChecked = input.newIsTermsAndConditionChecked;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateShouldCollapsePaymentSection(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newShouldCollapsePaymentSection: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._shouldCollapsePaymentSection = input.newShouldCollapsePaymentSection;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateShouldTriggerPaymentWithPlaceOrder(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newShouldTriggerPaymentWithPlaceOrder: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._shouldTriggerPaymentWithPlaceOrder = input.newShouldTriggerPaymentWithPlaceOrder;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsPaymentSectionContainerReady(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsPaymentSectionContainerReady: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isPaymentSectionContainerReady = input.newIsPaymentSectionContainerReady;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateCardPaymentAcceptResult(input: {\n newCardPaymentAcceptResult: CardPaymentAcceptResult;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n this._cardPaymentAcceptResult = input.newCardPaymentAcceptResult;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsPaymentSectionContainerHasError(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsPaymentSectionContainerHasError: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isPaymentSectionContainerHasError = input.newIsPaymentSectionContainerHasError;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateRedirectAdditionalContext(input: {\n newRedirectAdditionalContext: string;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n this._redirectAdditionalContext = input.newRedirectAdditionalContext;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateRedirectPaymentConnectorId(input: {\n newRedirectPaymentConnectorId: string;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n this._redirectPaymentConnectorId = input.newRedirectPaymentConnectorId;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateCheckoutErrorPaymentConnectorId(input: {\n newCheckoutErrorPaymentConnectorId: string;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n this._checkoutErrorPaymentConnectorId = input.newCheckoutErrorPaymentConnectorId;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsCheckoutCallFailed(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsCheckoutCallFailed: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isCheckoutCallFailed = input.newIsCheckoutCallFailed;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsPlaceOrderEnabledInRedirection(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsPlaceOrderEnabledInRedirection: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isPlaceOrderEnabledInRedirection = input.newIsPlaceOrderEnabledInRedirection;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsPaymentVerificationRequired(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsPaymentVerificationRequired: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isPaymentVerificationRequired = input.newIsPaymentVerificationRequired;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public updateBillingAddress(input: { newBillingAddress: Address; additionalProperties?: object }): Promise {\n this._billingAddress = input.newBillingAddress;\n\n // @ts-expect-error\n this._isBillingAddressSameAsShippingAddress = input.additionalProperties?.isBillingAddressSameAsShippingAddress || false;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public removeBillingAddress(input: { additionalProperties?: object }): Promise {\n this._billingAddress = undefined;\n this._isBillingAddressSameAsShippingAddress = undefined;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public updatePaymentTenderType(input: {\n newPaymentTenderType?: string;\n additionalProperties?: object;\n }): Promise {\n this._paymentTenderType = input.newPaymentTenderType;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public updateCardPrefix(input: { newCardPrefix: string; additionalProperties?: object }): Promise {\n this._cardPrefix = input.newCardPrefix;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public removeGiftCard(input: { giftCardNumber: string; additionalProperties?: object }): Promise {\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== input.giftCardNumber);\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public removeGiftCardExtend(input: { giftCardNumber: string; additionalProperties?: object }): Promise {\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== input.giftCardNumber);\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public addGiftCard(input: { giftCard: GiftCard; additionalProperties?: object }): Promise {\n // @ts-expect-error\n const { Pin, ExpirationDate, TenderTypeId } = input.additionalProperties || {};\n\n const gitCardExtend = { ...input.giftCard, ...{ Pin, ExpirationDate, TenderTypeId } };\n\n this._giftCardExtends = [gitCardExtend, ...this._giftCardExtends];\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public addGiftCardExtend(input: { giftCard: IGiftCardExtend; additionalProperties?: object }): Promise {\n this._giftCardExtends = [input.giftCard, ...this._giftCardExtends];\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public updateLoyaltyCardNumber(input: { newLoyaltyCardNumber: string; additionalProperties?: object }): Promise {\n this._loyaltyCardNumber = input.newLoyaltyCardNumber;\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public updateLoyaltyAmount(input: { newAmount: number; additionalProperties?: object }): Promise {\n this._loyaltyAmount = Number(input.newAmount.toFixed(2));\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public async updateGuestCheckoutEmail(input: {\n newGuestCheckoutEmail: string;\n customerReference?: string;\n customerRequisition?: string;\n note?: Note;\n additionalProperties?: object;\n }): Promise {\n this._guestCheckoutEmail = input.newGuestCheckoutEmail;\n const emailOnCart = this.checkoutCart.cart.ReceiptEmail;\n const customerReqOnCart = this.checkoutCart.cart.CustomerRequisition;\n const customerRefOnCart = this.checkoutCart.cart.Comment;\n const noteOnCart = this.checkoutCart.cart.Notes;\n const noteInput = input?.note;\n if (\n emailOnCart !== input.newGuestCheckoutEmail ||\n customerRefOnCart !== input.customerReference ||\n customerReqOnCart !== input.customerRequisition ||\n (noteOnCart !== undefined && noteOnCart[0]?.Description) !== (noteInput !== undefined && noteInput[0]?.Description)\n ) {\n await this.checkoutCart.updateReceiptEmail({\n newEmail: input.newGuestCheckoutEmail,\n customerReference: input.customerReference,\n customerRequisition: input.customerRequisition,\n note: input.note\n });\n }\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n /**\n * Updates cartLines objects in cart.\n * @param input - The input.\n * @param input.updatedCartLinesObject - updated cartline.\n * @returns ICartActionResult.\n */\n @action\n public async updateCartLines(input: { updatedCartLinesObject: CartLine[] }): Promise {\n await this.checkoutCart.updateCartLines({ updatedCartLinesObject: input.updatedCartLinesObject });\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public async updateHasGuestCheckoutEmail(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: {\n newHasGuestCheckoutEmail: boolean;\n customerReference?: string;\n customerRequisition?: string;\n note?: Note;\n additionalProperties?: { [key: string]: unknown };\n }\n ): Promise {\n this._hasGuestCheckoutEmail = input.newHasGuestCheckoutEmail;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public removeCheckoutCartId(input: { additionalProperties?: object }): Promise {\n this.actionContext.requestContext.cookies.removeCheckoutCartCookie();\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public saveDataInStorage(input: { additionalProperties?: object }): Promise {\n const { sessionStorage } = this.actionContext.requestContext;\n\n // Add all local data to session storage\n if (this.billingAddress) {\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.BillingAddress, {\n billingAddress: this.billingAddress,\n isBillingAddressSameAsShippingAddress: this.isBillingAddressSameAsShippingAddress\n });\n }\n\n if (this.giftCardExtends && this.giftCardExtends.length > 0) {\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.GiftCard, this.giftCardExtends);\n }\n\n if (this.loyaltyCardNumber) {\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.LoyaltyCardNumber, { loyaltyCardNumber: this.loyaltyCardNumber });\n }\n\n if (this.loyaltyAmount) {\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.LoyaltyAmount, { loyaltyAmount: this.loyaltyAmount });\n }\n\n if (this.isTermsAndConditionAccepted) {\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.TermsAndCondition, {\n isTermsAndConditionAccepted: this.isTermsAndConditionAccepted\n });\n }\n\n if (this.paymentTenderType) {\n window.sessionStorage.setItem(CheckoutStorageKey.PaymentTenderType, this.paymentTenderType);\n }\n\n if (this.redirectPaymentConnectorId) {\n window.sessionStorage.setItem(CheckoutStorageKey.RedirectPaymentConnectorId, this.redirectPaymentConnectorId);\n }\n\n if (this.isExpressCheckoutApplied) {\n window.sessionStorage.setItem(CheckoutStorageKey.IsExpressCheckoutApplied, this.isExpressCheckoutApplied.toString());\n }\n\n // Save generic data with SaveDataBeforeRedirect value true\n const filtered = Object.keys(this._checkoutGenericData).reduce((filteredData: object, key: string) => {\n if (this._checkoutGenericData[key].SaveDataBeforeRedirect) {\n filteredData[key] = this._checkoutGenericData[key];\n }\n return filteredData;\n }, {});\n\n if (Object.keys(filtered).length > 0) {\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.CheckoutGenericData, { checkoutGenericData: filtered });\n }\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public updateCustomerAccountAmount(input: { newAmount: number; additionalProperties?: object }): Promise {\n this._customerAccountAmount = Number(input.newAmount.toFixed(2));\n\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public async updateBillingAddressFromExpressCheckout(input: {\n newBillingAddressFromExpressCheckout: Address;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n this._billingAddressFromExpressCheckout = input.newBillingAddressFromExpressCheckout;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateShippingAddressFromExpressCheckout(input: {\n newShippingAddressFromExpressCheckout: Address;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n this._shippingAddressFromExpressCheckout = input.newShippingAddressFromExpressCheckout;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateEmailAddressFromExpressCheckout(input: {\n newEmailAddressFromExpressCheckout: string;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n this._emailAddressFromExpressCheckout = input.newEmailAddressFromExpressCheckout;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateShouldEnableExpressCheckoutInCheckout(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newShouldEnableExpressCheckoutInCheckout: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._shouldEnableExpressCheckoutInCheckout = input.newShouldEnableExpressCheckoutInCheckout;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateShouldEnableExpressCheckoutInCart(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newShouldEnableExpressCheckoutInCart: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._shouldEnableExpressCheckoutInCart = input.newShouldEnableExpressCheckoutInCart;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsExpressCheckoutApplied(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsExpressCheckoutApplied: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isExpressCheckoutApplied = input.newIsExpressCheckoutApplied;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsExpressAddressApplied(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsExpressAddressApplied: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isExpressAddressApplied = input.newIsExpressAddressApplied;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsExpressCheckoutAppliedInCartPage(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsExpressCheckoutAppliedInCartPage: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isExpressCheckoutAppliedInCartPage = input.newIsExpressCheckoutAppliedInCartPage;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsBillingAddressHasError(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newIsBillingAddressHasError: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._isBillingAddressHasError = input.newIsBillingAddressHasError;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateIsExpressPaymentModulesReady(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: {\n newIsExpressPaymentModulesReady: CommerceProperty[];\n additionalProperties?: { [key: string]: unknown };\n }\n ): Promise {\n this._isExpressPaymentModulesReady = input.newIsExpressPaymentModulesReady;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateExpressCheckoutDetails(input: {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n newIsExpressCheckoutApplied: boolean;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n newIsExpressAddressApplied?: boolean;\n newCardPaymentAcceptResult?: CardPaymentAcceptResult;\n newEmailAddressFromExpressCheckout: string;\n newTenderLine?: TenderLine;\n newPaymentTenderType?: string;\n newTokenizedPaymentCard?: TokenizedPaymentCard;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n this._isExpressCheckoutApplied = input.newIsExpressCheckoutApplied;\n\n if (input.newIsExpressAddressApplied !== undefined) {\n this._isExpressAddressApplied = input.newIsExpressAddressApplied;\n }\n\n if (input.newCardPaymentAcceptResult !== undefined) {\n this._cardPaymentAcceptResult = input.newCardPaymentAcceptResult;\n }\n\n if (input.newPaymentTenderType !== undefined) {\n this._paymentTenderType = input.newPaymentTenderType;\n }\n\n if (input.newTokenizedPaymentCard !== undefined) {\n this._tokenizedPaymentCard = input.newTokenizedPaymentCard;\n }\n\n if (input.newTenderLine !== undefined) {\n this._tenderLine = input.newTenderLine;\n }\n\n if (input.newEmailAddressFromExpressCheckout) {\n this._emailAddressFromExpressCheckout = input.newEmailAddressFromExpressCheckout;\n }\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateCheckoutError(input: {\n newCheckoutError: ICheckoutError;\n additionalProperties?: { [key: string]: unknown };\n }): Promise {\n this._checkoutError = input.newCheckoutError;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public setCheckoutGenericData(input: {\n key: string;\n checkoutGenericData: ICheckoutGenericData;\n additionalProperties?: object;\n }): Promise {\n this._checkoutGenericData[input.key] = input.checkoutGenericData;\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n @action\n public getCheckoutGenericData(input: { key: string }): ICheckoutGenericData | undefined {\n return this._checkoutGenericData[input.key];\n }\n\n @action\n public async updateCheckoutErrorFocus(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newCheckoutErrorFocus: CheckoutModule; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._checkoutErrorFocus = input.newCheckoutErrorFocus;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n @action\n public async updateShouldFocusOnCheckoutError(\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n input: { newShouldFocusOnCheckoutError: boolean; additionalProperties?: { [key: string]: unknown } }\n ): Promise {\n this._shouldFocusOnCheckoutError = input.newShouldFocusOnCheckoutError;\n\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\n return Promise.resolve(result);\n }\n\n public async initialize(): Promise {\n if (this.isInitialized) {\n return;\n }\n\n await this._checkoutCart.initialize();\n\n this.setInitialData();\n this.isInitialized = true;\n this._status = 'READY';\n this._attributeValues = [];\n this._extensionProperties = [];\n }\n\n @action\n private cleanCheckoutData(input: { additionalProperties?: object }): Promise {\n this.actionContext.requestContext.sessionStorage.removeCheckoutCartData();\n return Promise.resolve({ status: 'SUCCESS' });\n }\n\n private setInitialData() {\n const { sessionStorage } = this.actionContext.requestContext;\n\n if (this.isPaymentVerificationRedirection) {\n const billingAddress = sessionStorage.getCheckoutCartData(CheckoutStorageKey.BillingAddress);\n const giftCard = sessionStorage.getCheckoutCartData(CheckoutStorageKey.GiftCard);\n\n this._billingAddress = get(billingAddress, 'billingAddress');\n this._isBillingAddressSameAsShippingAddress = get(billingAddress, 'isBillingAddressSameAsShippingAddress');\n this._giftCardExtends = (giftCard && Array.isArray(giftCard) ? giftCard : []) as IGiftCardExtend[];\n this._loyaltyCardNumber = get(sessionStorage.getCheckoutCartData(CheckoutStorageKey.LoyaltyCardNumber), 'loyaltyCardNumber');\n this._loyaltyAmount = get(sessionStorage.getCheckoutCartData(CheckoutStorageKey.LoyaltyAmount), 'loyaltyAmount');\n this._isTermsAndConditionAccepted = get(\n sessionStorage.getCheckoutCartData(CheckoutStorageKey.TermsAndCondition),\n 'isTermsAndConditionAccepted'\n );\n this._checkoutGenericData =\n get(sessionStorage.getCheckoutCartData(CheckoutStorageKey.CheckoutGenericData), 'checkoutGenericData') || {};\n this._paymentTenderType = window.sessionStorage.getItem(CheckoutStorageKey.PaymentTenderType) ?? undefined;\n this._redirectPaymentConnectorId = window.sessionStorage.getItem(CheckoutStorageKey.RedirectPaymentConnectorId) as string;\n this._isExpressCheckoutApplied = (window.sessionStorage.getItem(CheckoutStorageKey.IsExpressCheckoutApplied) as string)\n ? true\n : false;\n }\n\n this.cleanCheckoutData({});\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { BaseCartState } from '../cart-state/base-cart-state';\nimport { ICartState } from '../state-interfaces/i-cart-state';\nimport createGlobalStateDataAction from './global-state-data-action';\n\nexport default createGlobalStateDataAction('CARTSTATE', BaseCartState);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { BaseCheckoutState } from '../checkout-state/base-checkout-state';\nimport { ICheckoutState } from '../state-interfaces/i-checkout-state';\nimport createGlobalStateDataAction from './global-state-data-action';\n\nexport default createGlobalStateDataAction('CHECKOUTSTATE', BaseCheckoutState);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICommerceApiSettings,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICartState } from '../state-interfaces';\nimport { getCartState } from './get-cart-state';\n\n/**\n * Input class for getCart data action.\n */\nexport class GetCartStateDataInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n private readonly catalogId?: number;\n\n constructor(apiSettings: ICommerceApiSettings, requestContext?: IRequestContext) {\n this.apiSettings = apiSettings;\n if (requestContext) {\n this.catalogId = getCatalogId(requestContext);\n }\n }\n\n public getCacheKey = () => `GetCart-ChannelId:${this.apiSettings.channelId}-CatalogId:${this.catalogId ?? 0}`;\n\n public getCacheObjectType = () => 'Cart';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new GetCartStateDataInput(inputData.requestContext.apiSettings, inputData.requestContext);\n};\n\n/**\n * Data action to copy the cart for actions.\n * @param input\n * @param ctx\n */\nexport async function getCartStateData(input: GetCartStateDataInput, ctx: IActionContext): Promise {\n const cartState = await getCartState(ctx);\n if (cartState && cartState.cart.Id !== undefined) {\n return cartState;\n }\n\n return undefined;\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce/global-state/get-cart-state-data',\n action: >getCartStateData,\n input: createInput\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult, IActionContext } from '@msdyn365-commerce/core';\n\nimport { BaseCartState } from '../cart-state/base-cart-state';\nimport { ICartState } from '../state-interfaces/i-cart-state';\nimport cartStateDataAction from './cart-state-data-action';\nimport { GlobalStateInput } from './global-state-data-action';\n\nexport function getCartState(ctx: IActionContext): AsyncResult {\n return cartStateDataAction(\n new GlobalStateInput('CARTSTATE', BaseCartState, ctx.requestContext.apiSettings, ctx.requestContext),\n ctx\n );\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICommerceApiSettings,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\nimport { copyAsync, readAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\n\nimport { getCartState } from './get-cart-state';\n\n/**\n * Input class for getCheckoutCart data action.\n */\nexport class GetCheckoutCartInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => `CheckoutCart-ChannelId:${this.apiSettings.channelId}-ApiSettingsCatalogId:${this.apiSettings.catalogId}`;\n\n public getCacheObjectType = () => 'CheckoutCart';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nenum CartTokenPrefix {\n Auth = 't',\n Anon = 'p'\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new GetCheckoutCartInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * Data action to copy the cart for checkout actions.\n * @param input\n * @param ctx\n */\nexport async function getCheckoutCart(input: GetCheckoutCartInput, ctx: IActionContext): Promise {\n const savedCheckoutCartId = ctx.requestContext.cookies.getCheckoutCartCookie();\n const cartCookieParts: string[] = savedCheckoutCartId.split(':');\n let checkoutCartId = null;\n const isAuthenticated = ctx.requestContext.user.isAuthenticated;\n\n if (\n (isAuthenticated && cartCookieParts[0] === CartTokenPrefix.Auth) ||\n (!isAuthenticated && cartCookieParts[0] === CartTokenPrefix.Anon)\n ) {\n checkoutCartId = cartCookieParts[1];\n }\n\n let checkoutCart: Cart | undefined;\n\n if (checkoutCartId) {\n try {\n checkoutCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, checkoutCartId);\n } catch (error) {\n ctx.telemetry.error('Error getting checkout cart based on saved checkout card id');\n ctx.telemetry.exception(error);\n }\n }\n\n const cartState = await getCartState(ctx);\n if (cartState && cartState.cart.Id !== undefined) {\n if (checkoutCart && checkoutCart.Version && cartState.cart.Version && checkoutCart.Version > cartState.cart.Version) {\n return Promise.resolve(checkoutCart);\n }\n\n return copyAsync({ callerContext: ctx }, cartState.cart.Id, 2)\n .then(cart => {\n ctx.requestContext.cookies.setCheckoutCartCookie(cart, isAuthenticated);\n return cart;\n })\n .catch(error => {\n ctx.telemetry.error('Error copying cart');\n ctx.telemetry.exception(error);\n return undefined;\n });\n }\n\n return undefined;\n}\n\nexport const getCheckoutCartDataAction = createObservableDataAction({\n id: '@msdyn365-commerce/global-state/get-checkout-cart',\n action: >getCheckoutCart,\n input: createInput\n});\n\nexport default getCheckoutCartDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICommerceApiSettings,\n ICreateActionContext,\n IObservableAction,\n IRequestContext\n} from '@msdyn365-commerce/core';\n\nimport { createGlobalState, GlobalStateConstructor, IGlobalState } from '../global-state/i-global-state';\n\nexport declare type GlobalStateType = 'CARTSTATE' | 'CHECKOUTSTATE';\n\n/**\n * Shared class that handles global state inputs.\n */\nexport class GlobalStateInput implements IActionInput {\n public readonly stateConstructor: GlobalStateConstructor;\n\n public readonly key: GlobalStateType;\n\n public readonly catalogId?: number;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n public constructor(\n key: GlobalStateType,\n stateConstructor: GlobalStateConstructor,\n apiSettings: ICommerceApiSettings,\n requestContext?: IRequestContext\n ) {\n this.apiSettings = apiSettings;\n this.stateConstructor = stateConstructor;\n this.key = key;\n\n if (requestContext) {\n this.catalogId = getCatalogId(requestContext);\n }\n }\n\n public getCacheKey = () => `Key:${this.key}-ChannelId:${this.apiSettings.channelId}-CatalogId:${this.catalogId ?? 0}`;\n\n public getCacheObjectType = () => this.key;\n\n public dataCacheType = (): CacheType => 'instance';\n}\n\nexport async function getState(input: GlobalStateInput, ctx: IActionContext): Promise {\n const globalStateObject = createGlobalState(input.stateConstructor, ctx);\n\n await globalStateObject.initialize();\n\n return globalStateObject;\n}\n\nexport default function createGlobalStateDataAction(\n key: GlobalStateType,\n stateConstructor: GlobalStateConstructor\n): IObservableAction {\n return createObservableDataAction({\n action: >getState,\n input: (args: ICreateActionContext) => {\n return new GlobalStateInput(key, stateConstructor, args.requestContext.apiSettings, args.requestContext);\n }\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\n\nexport declare type GlobalStateStatus = 'READY' | 'UPDATING' | 'ERROR';\n\nexport type GlobalStateConstructor = new (actionContext: IActionContext) => T;\n\nexport function createGlobalState(ctor: GlobalStateConstructor, actionContext: IActionContext): T {\n return new ctor(actionContext);\n}\n\nexport interface IGlobalState {\n readonly status: GlobalStateStatus;\n\n initialize(): Promise;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult, IActionContext } from '@msdyn365-commerce/core';\n\nimport { BaseCheckoutState } from '../checkout-state/base-checkout-state';\nimport { ICheckoutState } from '../state-interfaces/i-checkout-state';\nimport checkoutStateDataAction from './checkout-state-data-action';\nimport { GlobalStateInput } from './global-state-data-action';\n\nexport function getCheckoutState(ctx: IActionContext): AsyncResult {\n return checkoutStateDataAction(\n new GlobalStateInput('CHECKOUTSTATE', BaseCheckoutState, ctx.requestContext.apiSettings, ctx.requestContext),\n ctx\n );\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { computed, observable } from 'mobx';\n\nimport { GlobalStateStatus, IGlobalState } from './i-global-state';\n\n/**\n * Base global state that handles common global state behavior that other state can extend from.\n */\nexport class GlobalState implements IGlobalState {\n protected isInitialized: boolean = false;\n\n protected actionContext: IActionContext;\n\n @observable protected _status: GlobalStateStatus;\n\n @computed public get status(): Readonly {\n return this._status;\n }\n\n constructor(actionContext: IActionContext) {\n this.actionContext = actionContext;\n this._status = 'UPDATING';\n }\n\n public async initialize(): Promise {\n this.isInitialized = true;\n this._status = 'READY';\n\n return;\n }\n\n protected async _doAsyncAction(lambda: () => Promise): Promise {\n this._status = 'UPDATING';\n\n return lambda()\n .then(result => {\n this._status = 'READY';\n return result;\n })\n .catch(error => {\n console.log(error);\n this._status = 'ERROR';\n\n return Promise.reject(error);\n });\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum ErrorCode {\n ActionError = 'ActionError',\n Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard = 'Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard',\n Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue',\n Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit',\n Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit',\n Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems',\n Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount',\n Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices',\n Microsoft_Dynamics_Commerce_Runtime_FraudRisk = 'Microsoft_Dynamics_Commerce_Runtime_FraudRisk',\n Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed = 'Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed',\n Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch = 'Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch',\n Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion = 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion',\n Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber = 'Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber',\n Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest = 'Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest',\n Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines = 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines',\n Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed = ' Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed',\n Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender = 'Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender',\n Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry = 'Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry',\n Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard = 'Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard',\n Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints = 'Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints',\n Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided = 'Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided',\n Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance = 'Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance',\n Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties = 'Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties',\n Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount = 'Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount',\n Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed = 'Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed',\n Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment = 'Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment',\n Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired = 'Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired',\n Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported = 'Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported',\n Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment = 'Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment',\n Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo = 'Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo',\n Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult = 'Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult'\n}\n\nexport enum ErrorMessageResource {\n blockedLoyaltyCardErrorMessage = 'blockedLoyaltyCardErrorMessage',\n checkoutTimeoutErrorMessage = 'checkoutTimeoutErrorMessage',\n customerAccountLimitSignDifferentFromAmountDueErrorMessage = 'customerAccountLimitSignDifferentFromAmountDueErrorMessage',\n customerAccountPaymentExceedsAvailableCreditLimitErrorMessage = 'customerAccountPaymentExceedsAvailableCreditLimitErrorMessage',\n customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage = 'customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage',\n customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage = 'customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage',\n customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage = 'customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage',\n customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage = 'customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage',\n fraudRiskErrorMessage = 'fraudRiskErrorMessage',\n giftCardBalanceInquiryFailedErrorMessage = 'giftCardBalanceInquiryFailedErrorMessage',\n giftCardCurrencyMismatchErrorMessage = 'giftCardCurrencyMismatchErrorMessage',\n invalidCartVersionErrorMessage = 'invalidCartVersionErrorMessage',\n invalidLoyaltyCardNumberErrorMessage = 'invalidLoyaltyCardNumberErrorMessage',\n invalidPaymentRequestConsoleErrorMessage = 'invalidPaymentRequestConsoleErrorMessage',\n invalidPaymentRequestErrorMessage = 'invalidPaymentRequestErrorMessage',\n missingRequiredCartTenderLinesErrorMessage = 'missingRequiredCartTenderLinesErrorMessage',\n multipleCustomerAccountPaymentsNotAllowedErrorMessage = 'multipleCustomerAccountPaymentsNotAllowedErrorMessage',\n noMoreThanOneLoyaltyTenderErrorMessage = 'noMoreThanOneLoyaltyTenderErrorMessage',\n noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage = 'noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage',\n noTenderLoyaltyCardErrorMessage = 'noTenderLoyaltyCardErrorMessage',\n notEnoughRewardPointsErrorMessage = 'notEnoughRewardPointsErrorMessage',\n paymentAlreadyVoidedErrorMessage = 'paymentAlreadyVoidedErrorMessage',\n paymentAmountExceedsGiftBalanceErrorMessage = 'paymentAmountExceedsGiftBalanceErrorMessage',\n paymentRequiresMerchantPropertiesConsoleErrorMessage = 'paymentRequiresMerchantPropertiesConsoleErrorMessage',\n paymentRequiresMerchantPropertiesErrorMessage = 'paymentRequiresMerchantPropertiesErrorMessage',\n paymentUsingUnauthorizedAccountErrorMessage = 'paymentUsingUnauthorizedAccountErrorMessage',\n refundAmountMoreThanAllowedErrorMessage = 'refundAmountMoreThanAllowedErrorMessage',\n unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage = 'unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage',\n unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage = 'unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage',\n unableToAuthorizePaymentErrorMessage = 'unableToAuthorizePaymentErrorMessage',\n unableToCancelPaymentErrorMessage = 'unableToCancelPaymentErrorMessage',\n unableToReadCardTokenInfoErrorMessage = 'unableToReadCardTokenInfoErrorMessage',\n unableToRetrieveCardPaymentAcceptResultErrorMessage = 'unableToRetrieveCardPaymentAcceptResultErrorMessage'\n}\n\nexport enum ErrorLocation {\n Checkout,\n CheckoutBillingAddress,\n CheckoutCustomerAccountPayment,\n CheckoutDeliveryOptions,\n CheckoutExpress,\n CheckoutGiftCard,\n CheckoutGuestProfile,\n CheckoutLoyalty,\n CheckoutPaymentInstrument,\n CheckoutPickup,\n CheckoutShippingAddress,\n CheckoutTermsAndConditions,\n Console,\n GiftCardBalanceCheck\n}\n\nexport enum CheckoutModule {\n CheckoutBillingAddress = 'checkout-billing-address',\n CheckoutCustomerAccountPayment = 'checkout-customer-account-payment',\n CheckoutDeliveryOptions = 'checkout-delivery-options',\n CheckoutExpress = 'checkout-express',\n CheckoutGiftCard = 'checkout-gift-card',\n CheckoutGuestProfile = 'checkout-guest-profile',\n CheckoutLoyalty = 'checkout-loyalty',\n CheckoutPaymentInstrument = 'checkout-payment-instrument',\n CheckoutPickup = 'checkout-pickup',\n CheckoutShippingAddress = 'checkout-shipping-address',\n CheckoutTermsAndConditions = 'checkout-terms-and-conditions',\n None = 'none'\n}\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $RangeError = RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toIntegerOrInfinity(count);\n if (n < 0 || n === Infinity) throw new $RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar $RangeError = RangeError;\nvar $String = String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar nativeToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = $String(data[index]);\n s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = fails(function () {\n return nativeToFixed(0.00008, 3) !== '0.000' ||\n nativeToFixed(0.9, 0) !== '1' ||\n nativeToFixed(1.255, 2) !== '1.25' ||\n nativeToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toIntegerOrInfinity(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation\n if (fractDigits < 0 || fractDigits > 20) throw new $RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number !== number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return $String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat('0', fractDigits - k) + result\n : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n"],"names":["quantityErrors","getQuantityLimit","maxQuantityForCartLineItem","inputItem","quantityLimit","shouldEnableStockCheck","undefined","availableQuantity","Math","min","getElementIndex","lines","cartLineToAdd","elementFoundAt","productIdToFind","ProductId","index","line","entries","DeliveryMode","FulfillmentStoreId","async","addProductsToCartWithoutSiteSettings","cart","actionContext","input","CartLines","status","substatus","newCartLines","map","_cartLine$Quantity","cartLine","_objectSpread","Quantity","addCartLinesResult","Version","addCartLinesAsync","callerContext","Id","then","newCart","catch","error","_error$data3","telemetry","trace","errorDetails","LocalizedMessage","message","validationResults","data","ValidationResults","warning","addProductsToCartInternal","validateOrderQuantityLimits","enableStockCheck","isAddServiceItemToCart","shouldSkipSiteSettings","i","length","_cart$CartLines","_error$data","includes","name","find","cartline","IsInvoiceLine","addProductsToCartValidateAgainstDefaultOrderSettings","requestContext","app","config","cartActionResult","_cart$CartLines2","_error$data2","addProductsToCartValidateAgainstSiteSettings","addPromoCode","promoCode","hasPromoCode","addDiscountCodeAsync","code","Coupons","coupon","Code","toLowerCase","BaseCartState","GlobalState","constructor","super","_operationQueue","Promise","resolve","this","_cart","_attributeValues","_extensionProperties","_isProductAddedToCart","attributeValues","extensionProperties","totalItemsInCart","reduce","total","num","isProductAddedToCart","isEmpty","hasInvoiceLine","some","refreshCart","_doAsyncAction","refreshCartInternal","addProductToCart","_input$catalogId","_input$additionalProp","CatalogId","catalogId","getCatalogId","Description","product","EntryMethodTypeValue","ItemId","RecordId","count","TrackingId","UnitOfMeasureSymbol","DefaultUnitOfMeasure","IsPriceKeyedIn","isPriceKeyedIn","IsGiftCardLine","IsGiftCard","Price","customPrice","location","channel","deliveryMode","retailMultiplePickupModeEnabled","PickupDeliveryModeCode","OrgUnitNumber","WarehouseId","InventoryLocationId","ShippingAddress","_buildAddressFromOrgUnitLocation","isAddEmailDeliveryItemToCart","EmailDeliveryModeCode","ItemTypeValue","ReleasedProductType","Service","validateQuantity","additionalProperties","_doCartOperationWithRetry","addProductToCartInternal","addProductsToCart","internalInput","_inputItem$catalogId","_this$actionContext$r","PRODUCTASSERVICE","push","isStockCheckEnabled","addInvoicesToCart","invoiceIds","CartsDataActions","addInvoicesToCartInternal","addOrderInvoiceToCart","invoiceId","lineDescription","addOrderInvoiceAsync","addOrderInvoiceToCartInternal","setInvoiceLinePrice","setInvoiceLinePriceInternal","cartLineId","price","removeCartLines","removeCartLineInternal","cartLineIds","clearCartLinePickupLocation","clearCartLineDeliveryModeInternal","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","updateCartLinePickupLocation","cartLineDeliverySpecification","LineId","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","PickUpStoreId","DeliveryAddress","updateCartLineDeliverySpecificationsInternal","updateCartLineDeliverySpecification","updateCartLinePickupDateTimeslot","lineDeliverySpecifications","updateCartDeliverySpecification","deliveryModeId","trim","pickupDeliveryModeCode","emailDeliveryModeCode","cartLinesForShipping","channelDeliveryOptionConfig","filter","_input$channelDeliver","PickupDeliveryModeCodes","deliverySpecifications","shippingAddress","updateCartLineQuantity","_input$additionalProp2","updateCartLineQuantityInternal","newQuantity","isUsingDefaultOrderSettingsMax","updateCartLinesDeliverySpecification","updateLoyaltyCardId","loyaltyCardNumber","updateLoyaltyCardIdInternal","addPromoCodeInternal","removePromoCodes","removePromoCodesInternal","promoCodes","removeAllPromoCodes","removeAllPromoCodesInternal","updateReceiptEmail","email","customerReference","customerRequisition","note","updatedCart","ReceiptEmail","Comment","CustomerRequisition","Notes","updateAsync","debug","newEmail","updateShippingAddress","newShippingAddress","updateAttributeValues","newAttributeValues","newCartObject","AttributeValues","updateCart","updateExtensionProperties","newExtensionProperties","ExtensionProperties","updateCartLines","updateCartLinesInternal","updatedCartLinesObject","updateCartLineShippingAddress","initialize","isInitialized","getOrCreateActiveCart","_status","callback","features","enable_checkout_race_condition_hot_fix","operationPromise","callbackResult","PostalAddressId","Name","OrgUnitName","FullAddress","Address","Street","StreetNumber","City","DistrictName","BuildingCompliment","Postbox","ThreeLetterISORegionName","Country","ZipCode","Zip","County","CountyName","State","StateName","__decorate","observable","computed","action","clearCartLineDeliveryMode","_actionContext$reques","matchingLines","copyCartLine","InventLocation","updateCartLinesAsync","_actionContext$reques2","_channelDeliveryOptio","dM","copiedLines","_cloneDeep","forEach","CartTokenPrefix","ctx","cartCookieParts","cookies","getCartCookie","split","readCart","readCartId","isAuthenticated","user","Auth","Anon","readAsync","bypassCache","setCartCookie","handleItemDiscontinuedException","exception","console","log","getCartFromCookie","wasReadFromCookie","authCarts","cartSearchCriteria","IncludeAnonymous","CartTypeValue","queryResultSettings","Paging","Top","Skip","Sorting","Columns","ColumnName","IsDescending","searchAsync","searchCarts","getCartFromCustomer","anonCart","currentCart","anonCurrentCart","cartId","claimAuthCart","Error","claimCart","mergedCart","sourceCart","destinationCart","cartLines","cartLinesToDelete","hasShippingMethod","channelConfiguration","featureNames","newCartLine","buildGiftCardLine","_featureStates$find","featureStates","getFeatureStatesAsync","featureState","IsEnabled","getChannelDeliveryOptionConfigurationAsync","ReasonCodeLines","removeCartLinesAsync","coupons","addCouponsAsync","addCartLines","claimAnonCart","createNewCart","LoyaltyCardId","cards","getCustomerLoyaltyCardsAsync","ChannelId","noneBlockingCards","card","CardTenderTypeValue","LoyaltyCardTenderType","Blocked","CardNumber","errorObj","response","information","createCartAsync","NetPrice","GiftCardBalance","removeDiscountCodesAsync","removeCartLinesInternal","Array","isArray","errorInstance","cartLineDeliverySpecifications","updateLineDeliverySpecificationsAsync","updateCartLineQuantityValidateMaxAgainstDefaultOrderSettings","updateCartLineQuantityValidateMaxAgainstSiteSettings","cartLinesToUpdate","updatedCartObject","newLoyaltyCardId","BaseCheckoutCartState","getCheckoutCart","GetCheckoutCartInput","apiSettings","CheckoutStorageKey","BaseCheckoutState","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_customerAccountAmount","_emailAddressFromExpressCheckout","_checkoutGenericData","_checkoutCart","_shouldEnableSinglePaymentAuthorizationCheckout","shouldEnableSinglePaymentAuthorizationCheckout","_shouldEnableCheckoutErrorDisplayMessaging","shouldEnableCheckoutErrorDisplayMessaging","checkoutCart","salesOrder","_salesOrder","orderedProducts","_orderedProducts","tokenizedPaymentCard","_tokenizedPaymentCard","tenderLine","_tenderLine","billingAddress","_billingAddress","isBillingAddressSameAsShippingAddress","_isBillingAddressSameAsShippingAddress","_shippingAddress","cartLinesWithShippingAddress","_cartLinesWithShippingAddress","hasShippingAddress","_hasShippingAddress","hasCartDeliveryMode","_hasCartDeliveryMode","cardPrefix","_cardPrefix","paymentTenderType","_paymentTenderType","giftCards","giftCardExtends","_loyaltyCardNumber","loyaltyAmount","guestCheckoutEmail","hasGuestCheckoutEmail","_hasGuestCheckoutEmail","isTermsAndConditionAccepted","_isTermsAndConditionAccepted","isTermsAndConditionChecked","_isTermsAndConditionChecked","shouldCollapsePaymentSection","_shouldCollapsePaymentSection","shouldTriggerPaymentWithPlaceOrder","_shouldTriggerPaymentWithPlaceOrder","isPaymentSectionContainerReady","_isPaymentSectionContainerReady","cardPaymentAcceptResult","_cardPaymentAcceptResult","isPaymentSectionContainerHasError","_isPaymentSectionContainerHasError","redirectAdditionalContext","_redirectAdditionalContext","redirectPaymentConnectorId","_redirectPaymentConnectorId","checkoutErrorPaymentConnectorId","_checkoutErrorPaymentConnectorId","isPlaceOrderEnabledInRedirection","_isPlaceOrderEnabledInRedirection","isPaymentVerificationRequired","_isPaymentVerificationRequired","isCheckoutCallFailed","_isCheckoutCallFailed","customerAccountAmount","shouldEnableExpressCheckoutInCheckout","_shouldEnableExpressCheckoutInCheckout","shouldEnableExpressCheckoutInCart","_shouldEnableExpressCheckoutInCart","shippingAddressFromExpressCheckout","_shippingAddressFromExpressCheckout","emailAddressFromExpressCheckout","billingAddressFromExpressCheckout","_billingAddressFromExpressCheckout","isExpressCheckoutApplied","_isExpressCheckoutApplied","isExpressAddressApplied","_isExpressAddressApplied","isExpressCheckoutAppliedInCartPage","_isExpressCheckoutAppliedInCartPage","isExpressPaymentModulesReady","_isExpressPaymentModulesReady","isPaymentVerificationRedirection","requestFormData","query","pv","redirectResult","checkoutError","_checkoutError","isBillingAddressHasError","_isBillingAddressHasError","checkoutErrorFocus","_checkoutErrorFocus","shouldFocusOnCheckoutError","_shouldFocusOnCheckoutError","updateSalesOrder","newSalesOrder","newOrderedProducts","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","updateCartLinesShippingAddress","newCartLinesWithShippingAddress","updateHasShippingAddress","newHasShippingAddress","updateHasCartDeliveryMode","newHasCartDeliveryMode","updateTermsAndConditionsAcceptance","newIsTermsAndConditionAccepted","updateIsTermsAndConditionsChecked","newIsTermsAndConditionChecked","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","updateCardPaymentAcceptResult","newCardPaymentAcceptResult","updateIsPaymentSectionContainerHasError","newIsPaymentSectionContainerHasError","updateRedirectAdditionalContext","newRedirectAdditionalContext","updateRedirectPaymentConnectorId","newRedirectPaymentConnectorId","updateCheckoutErrorPaymentConnectorId","newCheckoutErrorPaymentConnectorId","updateIsCheckoutCallFailed","newIsCheckoutCallFailed","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","updateIsPaymentVerificationRequired","newIsPaymentVerificationRequired","updateBillingAddress","newBillingAddress","removeBillingAddress","updatePaymentTenderType","newPaymentTenderType","updateCardPrefix","newCardPrefix","removeGiftCard","giftCard","giftCardNumber","removeGiftCardExtend","addGiftCard","Pin","ExpirationDate","TenderTypeId","gitCardExtend","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","Number","newAmount","toFixed","updateGuestCheckoutEmail","_noteOnCart$","_noteInput$","newGuestCheckoutEmail","emailOnCart","customerReqOnCart","customerRefOnCart","noteOnCart","noteInput","updateHasGuestCheckoutEmail","newHasGuestCheckoutEmail","removeCheckoutCartId","removeCheckoutCartCookie","saveDataInStorage","sessionStorage","setCheckoutCartData","BillingAddress","GiftCard","LoyaltyCardNumber","LoyaltyAmount","TermsAndCondition","window","setItem","PaymentTenderType","RedirectPaymentConnectorId","IsExpressCheckoutApplied","toString","filtered","Object","keys","filteredData","key","SaveDataBeforeRedirect","CheckoutGenericData","checkoutGenericData","updateCustomerAccountAmount","updateBillingAddressFromExpressCheckout","newBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","updateEmailAddressFromExpressCheckout","newEmailAddressFromExpressCheckout","updateShouldEnableExpressCheckoutInCheckout","newShouldEnableExpressCheckoutInCheckout","updateShouldEnableExpressCheckoutInCart","newShouldEnableExpressCheckoutInCart","updateIsExpressCheckoutApplied","newIsExpressCheckoutApplied","updateIsExpressAddressApplied","newIsExpressAddressApplied","updateIsExpressCheckoutAppliedInCartPage","newIsExpressCheckoutAppliedInCartPage","updateIsBillingAddressHasError","newIsBillingAddressHasError","updateIsExpressPaymentModulesReady","newIsExpressPaymentModulesReady","updateExpressCheckoutDetails","updateCheckoutError","newCheckoutError","setCheckoutGenericData","getCheckoutGenericData","updateCheckoutErrorFocus","newCheckoutErrorFocus","updateShouldFocusOnCheckoutError","newShouldFocusOnCheckoutError","setInitialData","cleanCheckoutData","removeCheckoutCartData","_window$sessionStorag","getCheckoutCartData","get","getItem","createGlobalStateDataAction","GetCartStateDataInput","getCacheKey","_this$catalogId","channelId","getCacheObjectType","dataCacheType","getCartStateData","cartState","getCartState","createObservableDataAction","id","inputData","cartStateDataAction","GlobalStateInput","getCheckoutCartCookie","checkoutCartId","copyAsync","setCheckoutCartCookie","stateConstructor","getState","globalStateObject","createGlobalState","args","getCheckoutState","checkoutStateDataAction","lambda","result","reject","ErrorCode","ErrorMessageResource","ErrorLocation","CheckoutModule","toIntegerOrInfinity","requireObjectCoercible","$RangeError","RangeError","module","exports","str","n","Infinity","uncurryThis","valueOf","$","thisNumberValue","$repeat","fails","$String","String","floor","repeat","stringSlice","slice","nativeToFixed","pow","x","acc","multiply","c","c2","divide","dataToString","s","t","target","proto","forced","fractionDigits","e","z","j","k","number","fractDigits","sign","x2"],"sourceRoot":""}