{"version":3,"file":"static/js/20.a100614a019bd5dd844d.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/helpers/constants.ts?f7d4","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/proactive-chat-trigger.ts?abbc","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/cart-amount-trigger.ts?2618","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/cart-number-of-items-trigger.ts?f906","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/cart-specific-product-trigger.ts?3777","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/date-range-trigger.ts?9e10","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/from-specific-page-trigger.ts?519b","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/page-visit-trigger.ts?0f25","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/specific-country-region-trigger.ts?9736","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/specific-page-trigger.ts?1b0d","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/wait-on-time-trigger.ts?6968","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/index.ts?8d6b","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/helpers/chat.ts?5bd6","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/msdyn365-cs-chat-connector.tsx?5279","webpack://Msdyn365.Commerce.Online/./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.indexOf(this.customerCountryCode) > -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 };\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 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 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 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 { IChatData } from './interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from './msdyn365-cs-chat-connector';\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-enable-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","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","IsProactiveChat","value","isDisplayable","ProactiveType","CartAmount","proactiveOnCartAmountMessage","proactiveDefaultMessage","getCartState","actionContext","CartNumberOfItemsTrigger","numberOfItems","proactiveOnCartNoOfItemsMin","proactiveOnCartNoOfItemsMax","TotalItems","NumberOfItems","CartNumberOfItems","proactiveOnCartNoOfItemsMessage","CartSpecificProductTrigger","product","isValid","CartLines","length","i","proactiveOnCartSpecificProductList","j","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","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","Name","AccountNumber","customerAccountNumber","Email","emailAddress","IsB2b","isB2b","CurrentPageURL","isChatStarted","proactiveChatEnabled","proactive","startChat","Msdyn365CsChatConnector","React","msdyn365Commerce","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","script","createElement","type","src","msDyn365CsChatConnectorSrc","id","Object","keys","forEach","k","setAttribute","body","appendChild"],"sourceRoot":""}