{"version":3,"file":"static/js/23.a124ebf26b9f666eb132.chunk.js","mappings":"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","sources":["webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/helpers/constants.ts?f7d4","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/proactive-chat-trigger.ts?abbc","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/cart-amount-trigger.ts?2618","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/cart-number-of-items-trigger.ts?f906","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/cart-specific-product-trigger.ts?3777","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/date-range-trigger.ts?9e10","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/from-specific-page-trigger.ts?519b","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/page-visit-trigger.ts?0f25","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/specific-country-region-trigger.ts?9736","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/specific-page-trigger.ts?1b0d","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/wait-on-time-trigger.ts?6968","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/proactive/index.ts?8d6b","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/helpers/chat.ts?5bd6","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/msdyn365-cs-chat-connector.tsx?5279","webpack://venchi-ecommerce-msdyn365/./src/modules/msdyn365-cs-chat-connector/msdyn365-cs-chat-connector.view.tsx?5c92"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum ProactiveChatNames {\n CartAmount = 'Cart Total Amount',\n DateRange = 'Date Range',\n FromSpecificPage = 'From Specific Page',\n NumberOfItems = 'Cart Number of Items',\n PageVisits = 'Page Visits',\n SpecificMarket = 'Specific Market',\n SpecificPage = 'Specific Page',\n SpecificProduct = 'Specific Product',\n WaitOnTime = 'Wait on Time'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IProactiveChatTrigger, IWindow } from '../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\n\n/**\n * ProactiveChatTrigger class.\n * Checks if proactive chat should be triggered, starts the chat and sets context.\n */\nexport default abstract class ProactiveChatTrigger implements IProactiveChatTrigger {\n public props: IMsdyn365CsChatConnectorViewProps;\n public context: IChatContext;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n this.props = props;\n this.context = context;\n }\n\n /**\n * Triggers the proactive chat if proactive chat validation passes.\n * @returns {Promise} True if proactive chat is triggered.\n */\n public async startChat(): Promise {\n if (await this.validate()) {\n ((window)).contextProvider = this.getContextProvider();\n\n this.props.context.telemetry.debug('Chat widget \"lcw:ready\" event listener has been triggered for proactive chat.');\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.setContextProvider(this.getContextProvider());\n\n const message = this.getMessage();\n this.props.context.telemetry.debug(`Starting proactive chat with message: '${message}'.`);\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.startProactiveChat({ message: message }, false);\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} Chat context.\n */\n public abstract getContextProvider(): TContextProvider;\n\n /**\n * Generates chat welcome message to be used if proactive chat is triggered.\n * @returns {string} Chat welcome message.\n */\n public abstract getMessage(): string;\n\n /**\n * Validate specific trigger conditions if proactive chat should be initiated.\n * @returns {Promise} True if proactive chat should be triggered.\n */\n public abstract validate(): Promise;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { ICartAmountContext, IChatContext, TContextProvider } from '../../../interfaces';\nimport { ProactiveChatNames } from '../../helpers';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartAmountTrigger class.\n * Proactive chat is triggered if cart amount is in preset boundaries (config.proactiveOnCartAmountMin, config.proactiveOnCartAmountMax).\n */\nexport default class CartAmountTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private totalInCart: number = 0;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartAmountMin;\n this.max = this.props.config.proactiveOnCartAmountMax;\n\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Cart amount proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: the total amount in the cart should be within the min and max values.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartAmountTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.totalInCart = cart.cart.TotalAmount || 0;\n\n let retVal: boolean = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.totalInCart && this.totalInCart <= this.max;\n } else {\n retVal = this.min <= this.totalInCart;\n }\n } else if (this.max) {\n retVal = this.totalInCart <= this.max;\n }\n\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Validation result: '${retVal}'; Cart total: '${this.totalInCart}'.`\n );\n return retVal;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): ICartAmountContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.CartAmount,\n isDisplayable: true\n },\n CartAmount: {\n value: this.totalInCart,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnCartAmountMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Gets the cart.\n * @returns {Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { ICartNumberOfItemsContext, IChatContext, TContextProvider } from '../../../interfaces';\nimport { ProactiveChatNames } from '../../helpers';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartNumberOfItemsTrigger class.\n * Proactive chat is triggered if Cart Number of Items is in preset boundaries (config.proactiveOnCartNoOfItemsMin, config.proactiveOnCartNoOfItemsMax).\n */\nexport default class CartNumberOfItemsTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private numberOfItems: number = 0;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartNoOfItemsMin;\n this.max = this.props.config.proactiveOnCartNoOfItemsMax;\n\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Cart number of items proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n /**\n * Validates whether the conditions are met to trigger proactive chat: the number of items in the cart should be within the min and max values.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartNumberOfItemsTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.numberOfItems = cart.cart.TotalItems || 0;\n\n let retVal: boolean = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.numberOfItems && this.numberOfItems <= this.max;\n } else {\n retVal = this.min <= this.numberOfItems;\n }\n } else if (this.max) {\n retVal = this.numberOfItems <= this.max;\n }\n\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Validation result: '${retVal}'; Number of items in cart: '${this.numberOfItems}'.`\n );\n return retVal;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): ICartNumberOfItemsContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.NumberOfItems,\n isDisplayable: true\n },\n CartNumberOfItems: {\n value: this.numberOfItems,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnCartNoOfItemsMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Gets the cart.\n * @returns {Promise} The cart.\n */\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { ICartSpecificProductContext, TContextProvider } from '../../../interfaces';\nimport { ProactiveChatNames } from '../../helpers';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartSpecificProductTrigger class.\n * Proactive chat is triggered if a Product in the Cart is in preset list of products (config.proactiveOnCartSpecificProductList).\n */\nexport default class CartSpecificProductTrigger extends ProactiveChatTrigger {\n private product: string = '';\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: the cart contains the specified product to trigger proactice chat.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n let isValid = false;\n const cart = await this._getCart();\n if (!cart.isEmpty) {\n if (cart.cart.CartLines) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart line items was '${cart.cart.CartLines?.length}'`\n );\n\n for (let i = 0; i < cart.cart.CartLines?.length; i++) {\n if (cart.cart.CartLines[i]) {\n if (this.props.config.proactiveOnCartSpecificProductList) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart specific products was configured for proactive chat was '${this.props.config.proactiveOnCartSpecificProductList?.length}'`\n );\n\n // Find first item, from user-defined list of products, that matches the cart lines' itemId in the cart.\n for (let j = 0; j < (this.props.config.proactiveOnCartSpecificProductList?.length || 0); j++) {\n if (\n this.props.config.proactiveOnCartSpecificProductList &&\n cart.cart.CartLines[i].ItemId &&\n this.props.config.proactiveOnCartSpecificProductList[j] === cart.cart.CartLines[i].ItemId\n ) {\n this.product = cart.cart.CartLines[i].ItemId || '';\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Matched cart line item ID '${cart.cart.CartLines[i].ItemId}' against user-defined list of specific products for proactive chat.`\n );\n isValid = true;\n break;\n }\n }\n }\n } else {\n // Rest of the CartLines are undefined\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart did not contain any cart lines.`);\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart was empty.`);\n }\n\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): ICartSpecificProductContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.SpecificProduct,\n isDisplayable: true\n },\n CartSpecificProduct: {\n value: this.product,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnCartSpecificProductMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Gets the cart.\n * @returns {Promise} The cart.\n */\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { IChatContext, IDateRangeContext, TContextProvider } from '../../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * DateRangeTrigger class.\n * Proactive chat is triggered if current date is in preset date boundaries (config.proactiveOnDateRangeStart, config.proactiveOnDateRangeEnd).\n */\nexport default class DateRangeTrigger extends ProactiveChatTrigger {\n private start?: Date;\n private end?: Date;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.start = this._toDate(this.props.config.proactiveOnDateRangeStart);\n this.end = this._toDate(this.props.config.proactiveOnDateRangeEnd);\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Proactive chat initialized with startDate: '${this.start}'; max: '${this.end}'.`\n );\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: current time is within the start and end time.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n\n let retVal: boolean = false;\n if (this.start) {\n if (this.end) {\n retVal = this.start.getTime() <= now.getTime() && now.getTime() <= this.end.getTime();\n } else {\n retVal = this.start.getTime() <= now.getTime();\n }\n } else if (this.end) {\n retVal = now.getTime() <= this.end.getTime();\n }\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Validation result: '${retVal}'; Current date used to compare: '${now}'.`\n );\n return retVal;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): IDateRangeContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.DateRange,\n isDisplayable: true\n },\n ProactiveFromDate: {\n value: this.start ? this.start.toUTCString() : '',\n isDisplayable: true\n },\n ProactiveToDate: {\n value: this.end ? this.end.toUTCString() : '',\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnDateRangeMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Converts string(us-en) to date.\n * @param {string} [date] The date to convert (mm/dd/yyyy).\n * @returns {Date | undefined} The date or undefined.\n */\n private _toDate(date?: string): Date | undefined {\n if (date) {\n const dateParts = date.split('/');\n return new Date(+dateParts[2], +dateParts[1] - 1, +dateParts[0]);\n } else {\n return undefined;\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 { ProactiveChatNames } from '../../helpers/constants';\nimport { IFromSpecificPageTriggerContext, TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * FromSpecificPageTrigger class.\n * Proactive chat is triggered if user has come from specific page (the one listed in config.proactiveOnFromSpecificPageList).\n */\nexport default class FromSpecificPageTrigger extends ProactiveChatTrigger {\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: the user has come from a specific page.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnFromSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Number of items in user-defined list of 'From Specific Page' was '${this.props.config.proactiveOnFromSpecificPageList?.length}'.`\n );\n\n for (let i = 0; i < (this.props.config.proactiveOnFromSpecificPageList?.length || 0); i++) {\n const fromSpecificPageTrimmed: string = this.props.config.proactiveOnFromSpecificPageList[i].trim();\n\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] Current page URL: '${window.document.referrer}'.`\n );\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Current item from user-defined list of 'From Specific Page': '${fromSpecificPageTrimmed}'.`\n );\n\n if (window.document.referrer.indexOf(fromSpecificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] User-defined 'From Specific Page' list was undefined.`\n );\n }\n\n this.props.context.telemetry.debug(`[Chat][${FromSpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): IFromSpecificPageTriggerContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.FromSpecificPage,\n isDisplayable: true\n },\n CameFromPage: {\n value: window.document.referrer,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnFromSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICookieContext } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/ICookieContext';\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { IChatContext, IPageVisitContext, TContextProvider } from '../../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * PageVisitTrigger class.\n * Proactive chat is triggered if user has visited current page for (config.proactiveOnPageVisitNumber) or more times.\n */\nexport default class PageVisitTrigger extends ProactiveChatTrigger {\n private visitCounter: number = 0;\n private cookieName: string = 'TimesPageVisited';\n private expdate: Date;\n private cookies: ICookieContext;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.cookies = this.props.context.request.cookies;\n this.expdate = new Date();\n\n // Set expiry date to 365 days.\n this.expdate.setTime(this.expdate.getTime() + 24 * 60 * 60 * 1000 * 365);\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie expiry date set to: '${this.expdate}'.`);\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie context is given: '${this.cookies.isConsentGiven()}'.`);\n if (this.cookies.isConsentGiven()) {\n this.cookies.setConsentCookie();\n }\n\n this._updateVisitCounter();\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: current page count is great than or equal to threshold.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n let retVal: boolean = false;\n\n if (this.props.config.proactiveOnPageVisitNumber) {\n retVal = this.visitCounter >= this.props.config.proactiveOnPageVisitNumber;\n }\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Validation result: '${retVal}'.`);\n return retVal;\n }\n\n /**\n * Resets the page visit counter cookie to zero.\n */\n public clear(): void {\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Clearing cookie for page visit counter.`);\n this.cookies.set(this.cookieName, 0, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): IPageVisitContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.PageVisits,\n isDisplayable: true\n },\n NumberOfVisits: {\n value: this.visitCounter,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnPageVisitMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Increments the page visit counter by one.\n */\n private _updateVisitCounter(): void {\n this.visitCounter = this.cookies.get(this.cookieName).value || 0;\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter BEFORE update: '${this.visitCounter}.`);\n ++this.visitCounter;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter AFTER update: '${this.visitCounter}.`);\n\n this.cookies.set(this.cookieName, this.visitCounter, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\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 { ProactiveChatNames } from '../../helpers/constants';\nimport { IExtendedRequest } from '../../interfaces';\nimport { IChatContext, ISpecificLocationTriggerContext, TContextProvider } from '../../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class.\n * Proactive chat is triggered if user geographically belongs to the list of country codes: (config.proactiveOnSpecificCountryRegionCountry).\n */\nexport default class SpecificCountryRegionTrigger extends ProactiveChatTrigger {\n private customerCountryCode: string;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.customerCountryCode = (this.props.context.request).suggestedMarket || 'n/a';\n this.props.context.telemetry.debug(\n `[${SpecificCountryRegionTrigger.name}] Customer country code set to: '${this.customerCountryCode}.'`\n );\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: user geographically belongs to the list of country codes.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const retVal: boolean = this.props.config.proactiveOnSpecificCountryRegionCountry\n ? this.props.config.proactiveOnSpecificCountryRegionCountry.toLowerCase().indexOf(this.customerCountryCode.toLowerCase()) > -1\n : false;\n\n this.props.context.telemetry.debug(`[Chat][${SpecificCountryRegionTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} Chat context.\n */\n public getContextProvider(): TContextProvider {\n return (): ISpecificLocationTriggerContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n CustCountryCode: {\n value: this.props.config.proactiveOnSpecificCountryRegionCountry || '',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.SpecificMarket,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Generates chat welcome message to be used if proactive chat is triggered.\n * @returns {string} Chat welcome message.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnSpecificCountryRegionMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { ISpecificPageTriggerContext, TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class.\n * Proactive chat is triggered if current page is listed in config.proactiveOnSpecificPageList.\n */\nexport default class SpecificPageTrigger extends ProactiveChatTrigger {\n private specificPageName: string = '';\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: current page is listed in the proactive chat list of pages.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${SpecificPageTrigger.name}] Number of items in user-defined list of 'Specific Pages' was '${this.props.config.proactiveOnSpecificPageList?.length}'.`\n );\n\n for (let i = 0; i < (this.props.config.proactiveOnSpecificPageList?.length || 0); i++) {\n const specificPageTrimmed: string = this.props.config.proactiveOnSpecificPageList[i].trim();\n\n this.props.context.telemetry.debug(`[] Current location URL: ${window.location.href}.`);\n this.props.context.telemetry.debug(`[] Current item from user-defined list of 'Specific Page': ${specificPageTrimmed}.`);\n\n if (window.location.href.indexOf(specificPageTrimmed) > -1) {\n this.specificPageName = specificPageTrimmed;\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] User-defined 'Specific Page' list was undefined.`);\n }\n\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): ISpecificPageTriggerContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.SpecificPage,\n isDisplayable: true\n },\n ProactivePage: {\n value: this.specificPageName,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { IWindow } from '../../interfaces';\nimport { IChatContext, IWaitOnTimeContext, TContextProvider } from '../../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * WaitOnTimeTrigger class.\n * Proactive chat is triggered if user stays on current page for more than (config.proactiveOnWaitTimeSeconds) seconds.\n */\nexport default class WaitOnTimeTrigger extends ProactiveChatTrigger {\n private waitTimeInMilliseconds: number | undefined;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n if (this.props.config.proactiveOnWaitTimeSeconds && !isNaN(this.props.config.proactiveOnWaitTimeSeconds)) {\n this.waitTimeInMilliseconds = Number(this.props.config.proactiveOnWaitTimeSeconds) * 1000;\n this.props.context.telemetry.debug(\n `[Chat][${WaitOnTimeTrigger.name}] Wait time (ms) set to: '${this.waitTimeInMilliseconds}'.`\n );\n }\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: user stays on page longer than the specific time.\n * @returns {IContextProvider} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const retVal: boolean = this.waitTimeInMilliseconds !== undefined;\n this.props.context.telemetry.debug(`[Chat][${WaitOnTimeTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n\n /**\n * Starts the chat by configuring the LiveChatWidget SDK code.\n * @returns {Promise} True when the chat has started. Otherwise, false.\n */\n public async startChat(): Promise {\n if (await this.validate()) {\n ((window)).contextProvider = this.getContextProvider();\n\n this.props.context.telemetry.debug(\n `[${WaitOnTimeTrigger.name}] Chat widget \"lcw:ready\" event listener has been triggered within proactive chat.`\n );\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.setContextProvider(this.getContextProvider());\n const message = this.getMessage();\n\n this.props.context.telemetry.debug(\n `[${WaitOnTimeTrigger.name}] Starting wait on-time proactive chat with '${this.waitTimeInMilliseconds}' (ms) delay and message: '${message}'.`\n );\n setTimeout(() => {\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.startProactiveChat({ message: message }, false);\n }, this.waitTimeInMilliseconds);\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): IWaitOnTimeContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.WaitOnTime,\n isDisplayable: true\n },\n TimeOnPage: {\n value: this.waitTimeInMilliseconds ? this.waitTimeInMilliseconds : 0,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnWaitTimeMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport CartAmountTrigger from './triggers/cart-amount-trigger';\nimport CartNumberOfItemsTrigger from './triggers/cart-number-of-items-trigger';\nimport CartSpecificProductTrigger from './triggers/cart-specific-product-trigger';\nimport DateRangeTrigger from './triggers/date-range-trigger';\nimport FromSpecificPageTrigger from './triggers/from-specific-page-trigger';\nimport PageVisitTrigger from './triggers/page-visit-trigger';\nimport SpecificCountryRegionTrigger from './triggers/specific-country-region-trigger';\nimport SpecificPageTrigger from './triggers/specific-page-trigger';\nimport WaitOnTimeTrigger from './triggers/wait-on-time-trigger';\n\ntype ProactiveChat =\n | typeof DateRangeTrigger\n | typeof SpecificPageTrigger\n | typeof FromSpecificPageTrigger\n | typeof PageVisitTrigger\n | typeof SpecificCountryRegionTrigger\n | typeof CartAmountTrigger\n | typeof CartNumberOfItemsTrigger\n | typeof CartSpecificProductTrigger\n | typeof WaitOnTimeTrigger;\n\n/**\n * List of proactive chat validators in order of validation (first proactive chat that pass validation is triggered, the rest are ommited).\n */\nexport const ProactiveTriggers: ProactiveChat[] = [\n DateRangeTrigger,\n SpecificPageTrigger,\n FromSpecificPageTrigger,\n PageVisitTrigger,\n SpecificCountryRegionTrigger,\n CartAmountTrigger,\n CartNumberOfItemsTrigger,\n CartSpecificProductTrigger,\n WaitOnTimeTrigger\n];\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContextUser } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/IRequestContext';\nimport { IWindow } from '../interfaces';\nimport { IChatContext } from '../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../msdyn365-cs-chat-connector';\nimport { ProactiveTriggers } from '../proactive';\n\n/**\n * Chat class - generates chat context, and checks for proactive triggers, starts the chat.\n */\nexport default class Chat {\n public props: IMsdyn365CsChatConnectorViewProps;\n private user: IRequestContextUser;\n constructor(props: IMsdyn365CsChatConnectorViewProps) {\n this.props = props;\n this.user = props.context.request.user;\n }\n\n /**\n * Generates chat context, and checks for proactive triggers, starts the chat.\n */\n public async run(): Promise {\n try {\n const chatContext = this._getContext();\n const chatHasStarted: boolean = await this._proactiveCheck(chatContext);\n ((window)).contextProvider = () => {\n return chatContext;\n };\n\n this.props.context.telemetry.debug(`[Chat] Proactive chat was started: '${chatHasStarted}'.`);\n if (!chatHasStarted) {\n this.props.context.telemetry.debug('[Chat] Chat widget \"lcw:ready\" event listener has been triggered.');\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.setContextProvider(() => chatContext);\n }\n } catch (e) {\n // Use ?debug=true to see telemetry\n // If previous block fails, chat will still be available (no need to display any errors to user)\n this.props.telemetry.exception(e as Error);\n }\n }\n\n /**\n * Generates default chat context.\n * @returns {IChatContext} The chat context.\n */\n private _getContext(): IChatContext {\n return {\n Name: {\n value: this.user.name ? this.user.name : '',\n isDisplayable: true\n },\n AccountNumber: {\n value: this.user.customerAccountNumber ? this.user.customerAccountNumber : '',\n isDisplayable: true\n },\n Email: {\n value: this.user.emailAddress ? this.user.emailAddress : '',\n isDisplayable: true\n },\n IsB2b: {\n value: this.user.isB2b ? this.user.isB2b : 'false',\n isDisplayable: true\n },\n CurrentPageURL: {\n value: window.location.href,\n isDisplayable: true\n },\n eCommerceOperatingUnitNumber: {\n value: this.props.context.request.apiSettings.oun,\n isDisplayable: false\n },\n eCommerceBaseUrl: {\n value: this.props.context.request.apiSettings.baseUrl,\n isDisplayable: false\n },\n eCommerceDataAreaId:\n this.props.context.request.channel?.InventLocationDataAreaId === undefined\n ? undefined\n : {\n value: this.props.context.request.channel.InventLocationDataAreaId,\n isDisplayable: false\n }\n };\n }\n\n /**\n * Validates proactive triggers to check if proactive chat should be initialized.\n * @param {IChatContext} chatContext The chat context.\n * @returns {Promise} The result of whether the chat has started.\n */\n private async _proactiveCheck(chatContext: IChatContext): Promise {\n let isChatStarted = false;\n const proactiveChatEnabled: boolean = this.props.config.proactiveChatEnabled;\n\n this.props.context.telemetry.debug(`[Chat] Proactive chat was enabled: '${proactiveChatEnabled}'.`);\n if (proactiveChatEnabled) {\n for (let i = 0; i < ProactiveTriggers.length; i++) {\n const proactive = new ProactiveTriggers[i](this.props, chatContext);\n // Only first detected proactive trigger gets executed\n if (await proactive.startChat()) {\n this.props.context.telemetry.debug(`[Chat] Proactive chat detected: '${proactive.constructor.name}'.`);\n isChatStarted = true;\n break;\n }\n }\n }\n return isChatStarted;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { msdyn365Commerce, isOboRequest } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport Chat from './helpers/chat';\nimport { IMsdyn365CsChatConnectorData } from './interfaces';\nimport { IMsdyn365CsChatConnectorProps } from './msdyn365-cs-chat-connector.props.autogenerated';\n\n/**\n * Provides options for chat connector view.\n */\nexport interface IMsdyn365CsChatConnectorViewProps extends IMsdyn365CsChatConnectorProps {\n // Do nothing. Keeps lint happy.\n}\n\n/**\n * Msdyn365CsChatConnector component.\n * @augments {React.PureComponent>}\n */\nexport default class Msdyn365CsChatConnector extends React.PureComponent> {\n constructor(props: IMsdyn365CsChatConnectorProps) {\n super(props);\n\n if (isOboRequest(this.props.context.request)) {\n return;\n }\n\n if (msdyn365Commerce.isBrowser && typeof window !== 'undefined') {\n window.addEventListener('lcw:error', (errorEvent: object) => {\n // Handle LiveChat SDK error event\n this.props.telemetry.error('lcw:error', errorEvent);\n });\n\n window.addEventListener('lcw:ready', () => {\n const chat: Chat = new Chat(this.props);\n chat.run().catch(e => {\n this.props.telemetry.error(e);\n });\n });\n }\n }\n\n public componentDidMount(): void {}\n\n public render(): JSX.Element | null {\n if (isOboRequest(this.props.context.request)) {\n return null;\n }\n\n return this.props.renderView(this.props);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport { IMsdyn365CsChatConnectorViewProps, IChatData } from '../index';\n\n/**\n * Returns data parameters for Omnichannel chat script.\n * @param {IMsdyn365CsChatConnectorViewProps} props The properties.\n * @returns {IChatData} Chat data.\n */\nconst getChatData = (props: IMsdyn365CsChatConnectorViewProps): IChatData => {\n const data: IChatData = {\n 'data-app-id': props.config.dataAppId || props.context.app.config.msDyn365CsChatConnectorDataAppId,\n 'data-org-id': props.config.dataOrgId || props.context.app.config.msDyn365CsChatConnectorDataOrgId,\n 'data-org-url': props.config.dataOrgUrl || props.context.app.config.msDyn365CsChatConnectorDataOrgUrl\n };\n if (props.config.dataHideChatButton !== undefined) {\n data['data-hide-chat-button'] = props.config.dataHideChatButton;\n } else if (props.context.app.config.msDyn365CsChatConnectorDataHideChatButton) {\n data['data-hide-chat-button'] = props.context.app.config.msDyn365CsChatConnectorDataHideChatButton;\n }\n if (props.config.dataColorOverride) {\n data['data-color-override'] = props.config.dataColorOverride;\n } else if (props.context.app.config.msDyn365CsChatConnectorDataColorOverride) {\n data['data-color-override'] = props.context.app.config.msDyn365CsChatConnectorDataColorOverride;\n }\n if (props.config.dataFontFamilyOverride) {\n data['data-font-family-override'] = props.config.dataFontFamilyOverride;\n } else if (props.context.app.config.msDyn365CsChatConnectorDataFontFamilyOverride) {\n data['data-font-family-override'] = props.context.app.config.msDyn365CsChatConnectorDataFontFamilyOverride;\n }\n if (props.config.dataEnableTelemetry) {\n data['data-disable-telemetry'] = !props.config.dataEnableTelemetry;\n }\n if (props.config.dataOpenInWindow) {\n data['data-open-in-window'] = props.config.dataOpenInWindow;\n }\n if (props.config.dataEnableLcwAutofill) {\n data['data-enable-lcw-autofill'] = props.config.dataEnableLcwAutofill;\n }\n if (props.config.dataSuggestedActionLayout !== undefined) {\n data['data-suggested-action-layout'] = props.config.dataSuggestedActionLayout;\n }\n return data;\n};\n\nexport default (props: IMsdyn365CsChatConnectorViewProps) => {\n const data: IChatData = getChatData(props);\n\n // we cannot use server rendering here, because OCCS fires 'lcw:ready' event ASAP when initialized\n // and by the time when execution comes to Msdyn365CsChatConnector, that event is already fired\n // thus, we can only add OCCS script to DOM on client side to control execution flow.\n React.useEffect(() => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.src = props.config.src || props.context.app.config.msDyn365CsChatConnectorSrc;\n script.id = 'Microsoft_Omnichannel_LCWidget';\n Object.keys(data).forEach(k => {\n script.setAttribute(k, data[k]);\n });\n document?.body?.appendChild(script);\n }, []);\n\n return null;\n};\n"],"names":["ProactiveChatNames","ProactiveChatTrigger","constructor","props","context","this","async","validate","window","contextProvider","getContextProvider","telemetry","debug","Microsoft","Omnichannel","LiveChatWidget","SDK","setContextProvider","message","getMessage","startProactiveChat","CartAmountTrigger","super","totalInCart","min","config","proactiveOnCartAmountMin","max","proactiveOnCartAmountMax","name","cart","_getCart","isEmpty","TotalAmount","retVal","_objectSpread","IsProactiveChat","value","isDisplayable","ProactiveType","CartAmount","proactiveOnCartAmountMessage","proactiveDefaultMessage","getCartState","actionContext","CartNumberOfItemsTrigger","numberOfItems","proactiveOnCartNoOfItemsMin","proactiveOnCartNoOfItemsMax","TotalItems","NumberOfItems","CartNumberOfItems","proactiveOnCartNoOfItemsMessage","CartSpecificProductTrigger","product","isValid","CartLines","_cart$cart$CartLines","length","i","_cart$cart$CartLines2","proactiveOnCartSpecificProductList","_this$props$config$pr","j","_this$props$config$pr2","ItemId","SpecificProduct","CartSpecificProduct","proactiveOnCartSpecificProductMessage","DateRangeTrigger","start","_toDate","proactiveOnDateRangeStart","end","proactiveOnDateRangeEnd","now","Date","setHours","getTime","DateRange","ProactiveFromDate","toUTCString","ProactiveToDate","proactiveOnDateRangeMessage","date","dateParts","split","FromSpecificPageTrigger","proactiveOnFromSpecificPageList","fromSpecificPageTrimmed","trim","document","referrer","indexOf","FromSpecificPage","CameFromPage","proactiveOnFromSpecificPageMessage","PageVisitTrigger","visitCounter","cookieName","cookies","request","expdate","setTime","isConsentGiven","setConsentCookie","_updateVisitCounter","proactiveOnPageVisitNumber","clear","set","domain","location","hostname","path","pathname","expires","PageVisits","NumberOfVisits","proactiveOnPageVisitMessage","get","SpecificCountryRegionTrigger","customerCountryCode","suggestedMarket","proactiveOnSpecificCountryRegionCountry","toLowerCase","CustCountryCode","SpecificMarket","proactiveOnSpecificCountryRegionMessage","SpecificPageTrigger","specificPageName","proactiveOnSpecificPageList","specificPageTrimmed","href","SpecificPage","ProactivePage","proactiveOnSpecificPageMessage","WaitOnTimeTrigger","proactiveOnWaitTimeSeconds","isNaN","waitTimeInMilliseconds","Number","undefined","setTimeout","WaitOnTime","TimeOnPage","proactiveOnWaitTimeMessage","ProactiveTriggers","Chat","user","chatContext","_getContext","chatHasStarted","_proactiveCheck","e","exception","_this$props$context$r","Name","AccountNumber","customerAccountNumber","Email","emailAddress","IsB2b","isB2b","CurrentPageURL","eCommerceOperatingUnitNumber","apiSettings","oun","eCommerceBaseUrl","baseUrl","eCommerceDataAreaId","channel","InventLocationDataAreaId","isChatStarted","proactiveChatEnabled","proactive","startChat","Msdyn365CsChatConnector","React","isOboRequest","msdyn365Commerce","isBrowser","addEventListener","errorEvent","error","run","catch","componentDidMount","render","renderView","data","dataAppId","app","msDyn365CsChatConnectorDataAppId","dataOrgId","msDyn365CsChatConnectorDataOrgId","dataOrgUrl","msDyn365CsChatConnectorDataOrgUrl","dataHideChatButton","msDyn365CsChatConnectorDataHideChatButton","dataColorOverride","msDyn365CsChatConnectorDataColorOverride","dataFontFamilyOverride","msDyn365CsChatConnectorDataFontFamilyOverride","dataEnableTelemetry","dataOpenInWindow","dataEnableLcwAutofill","dataSuggestedActionLayout","getChatData","_document","_document2","script","createElement","type","src","msDyn365CsChatConnectorSrc","id","Object","keys","forEach","k","setAttribute","body","appendChild"],"sourceRoot":""}