@microsoft/omnichannel-chat-widget 1.8.7 → 2.0.0-main.5ebd4eb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -5
- package/lib/cjs/common/Constants.js +5 -0
- package/lib/cjs/common/facades/FacadeChatSDK.js +234 -9
- package/lib/cjs/common/telemetry/TelemetryConstants.js +19 -0
- package/lib/cjs/common/telemetry/TelemetryManager.js +6 -1
- package/lib/cjs/common/telemetry/loggers/appInsightsLogger.js +2 -3
- package/lib/cjs/common/telemetry/sanitizeSasInPayload.js +91 -0
- package/lib/cjs/common/utils.js +93 -17
- package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +16 -6
- package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -10
- package/lib/cjs/components/citationpanestateful/CitationDim.js +2 -3
- package/lib/cjs/components/citationpanestateful/CitationPaneStateful.js +27 -5
- package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +23 -3
- package/lib/cjs/components/dimlayer/DimLayer.js +1 -3
- package/lib/cjs/components/draggable/DraggableChatWidget.js +35 -15
- package/lib/cjs/components/draggable/DraggableEventEmitter.js +10 -1
- package/lib/cjs/components/draggable/DraggableEventReceiver.js +1 -3
- package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
- package/lib/cjs/components/errorboundary/ErrorBoundary.js +4 -12
- package/lib/cjs/components/footerstateful/FooterStateful.js +18 -9
- package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
- package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
- package/lib/cjs/components/headerstateful/HeaderStateful.js +24 -12
- package/lib/cjs/components/livechatwidget/LiveChatWidget.js +27 -4
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
- package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
- package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
- package/lib/cjs/components/livechatwidget/common/authHelper.js +44 -4
- package/lib/cjs/components/livechatwidget/common/createMarkdown.js +98 -5
- package/lib/cjs/components/livechatwidget/common/endChat.js +12 -9
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +182 -1
- package/lib/cjs/components/livechatwidget/common/recoveryEligibilityTelemetry.js +60 -0
- package/lib/cjs/components/livechatwidget/common/startChat.js +31 -14
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +160 -21
- package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +16 -11
- package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +19 -12
- package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +13 -6
- package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
- package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +12 -5
- package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
- package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
- package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -7
- package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +16 -7
- package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +10 -2
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
- package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
- package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
- package/lib/cjs/components/webchatcontainerstateful/common/utils/citationA11y.js +195 -0
- package/lib/cjs/components/webchatcontainerstateful/interfaces/IWebChatAction.js +17 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +22 -6
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -35
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +199 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +29 -15
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +14 -12
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +16 -14
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +18 -30
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +10 -2
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -12
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +83 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -30
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
- package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +5 -0
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
- package/lib/cjs/contexts/createReducer.js +15 -0
- package/lib/cjs/controller/componentController.js +13 -1
- package/lib/cjs/hooks/useWindowDimensions.js +13 -5
- package/lib/cjs/package.json +1 -0
- package/lib/cjs/plugins/createChatTranscript.js +3 -4
- package/lib/cjs/plugins/newMessageEventHandler.js +20 -3
- package/lib/esm/common/Constants.js +5 -0
- package/lib/esm/common/facades/FacadeChatSDK.js +235 -10
- package/lib/esm/common/telemetry/TelemetryConstants.js +19 -0
- package/lib/esm/common/telemetry/TelemetryManager.js +6 -1
- package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +2 -3
- package/lib/esm/common/telemetry/sanitizeSasInPayload.js +84 -0
- package/lib/esm/common/utils.js +88 -14
- package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +15 -5
- package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +19 -9
- package/lib/esm/components/citationpanestateful/CitationDim.js +2 -3
- package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +26 -4
- package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +22 -2
- package/lib/esm/components/dimlayer/DimLayer.js +1 -3
- package/lib/esm/components/draggable/DraggableChatWidget.js +34 -14
- package/lib/esm/components/draggable/DraggableEventEmitter.js +10 -1
- package/lib/esm/components/draggable/DraggableEventReceiver.js +1 -3
- package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
- package/lib/esm/components/errorboundary/ErrorBoundary.js +4 -12
- package/lib/esm/components/footerstateful/FooterStateful.js +17 -8
- package/lib/esm/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
- package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
- package/lib/esm/components/headerstateful/HeaderStateful.js +22 -10
- package/lib/esm/components/livechatwidget/LiveChatWidget.js +27 -4
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
- package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
- package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
- package/lib/esm/components/livechatwidget/common/authHelper.js +44 -4
- package/lib/esm/components/livechatwidget/common/createMarkdown.js +98 -5
- package/lib/esm/components/livechatwidget/common/endChat.js +12 -9
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +182 -1
- package/lib/esm/components/livechatwidget/common/recoveryEligibilityTelemetry.js +52 -0
- package/lib/esm/components/livechatwidget/common/startChat.js +31 -14
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +159 -20
- package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +14 -9
- package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +17 -10
- package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -5
- package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
- package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +11 -4
- package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
- package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
- package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -6
- package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +15 -6
- package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +9 -1
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
- package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
- package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
- package/lib/esm/components/webchatcontainerstateful/common/utils/citationA11y.js +188 -0
- package/lib/esm/components/webchatcontainerstateful/interfaces/IWebChatAction.js +10 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +19 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -32
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +193 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +28 -14
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +13 -11
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +15 -13
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +17 -27
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +9 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -10
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +77 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -2
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -31
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
- package/lib/esm/contexts/common/LiveChatWidgetActionType.js +5 -0
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
- package/lib/esm/contexts/createReducer.js +15 -0
- package/lib/esm/controller/componentController.js +13 -1
- package/lib/esm/hooks/useWindowDimensions.js +13 -5
- package/lib/esm/plugins/createChatTranscript.js +3 -4
- package/lib/esm/plugins/newMessageEventHandler.js +20 -3
- package/lib/types/common/Constants.d.ts +4 -0
- package/lib/types/common/facades/FacadeChatSDK.d.ts +29 -0
- package/lib/types/common/facades/types/IFacadeChatSDKInput.d.ts +3 -1
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +15 -2
- package/lib/types/common/telemetry/sanitizeSasInPayload.d.ts +24 -0
- package/lib/types/common/utils.d.ts +3 -1
- package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +2 -1
- package/lib/types/components/livechatwidget/common/authHelper.d.ts +9 -2
- package/lib/types/components/livechatwidget/common/recoveryEligibilityTelemetry.d.ts +17 -0
- package/lib/types/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.d.ts +6 -0
- package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/common/utils/citationA11y.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatAction.d.ts +16 -1
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +7 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +14 -38
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.d.ts +18 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.d.ts +3 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.d.ts +10 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.d.ts +7 -0
- package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
- package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +17 -0
- package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
- package/package.json +71 -57
|
@@ -11,6 +11,7 @@ import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidge
|
|
|
11
11
|
import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
|
|
12
12
|
import { WebChatStoreLoader } from "../../webchatcontainerstateful/webchatcontroller/WebChatStoreLoader";
|
|
13
13
|
import attachmentProcessingMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware";
|
|
14
|
+
import attachmentSentAnnouncementMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware";
|
|
14
15
|
import channelDataMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware";
|
|
15
16
|
import { createActivityMiddleware } from "../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware";
|
|
16
17
|
import { createActivityStatusMiddleware } from "../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware";
|
|
@@ -120,7 +121,7 @@ export const initWebChatComposer = (props, state, dispatch, facadeChatSDK, endCh
|
|
|
120
121
|
};
|
|
121
122
|
webChatStore = createStore({},
|
|
122
123
|
//initial state
|
|
123
|
-
preProcessingMiddleware, attachmentProcessingMiddleware, createAttachmentUploadValidatorMiddleware((_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : _state$domainStates$l.allowedFileExtensions, (_state$domainStates$l2 = state.domainStates.liveChatConfig) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.maxUploadFileSize, localizedTexts), createCustomEventMiddleware(BroadcastService), createQueueOverflowMiddleware(state, dispatch), channelDataMiddleware(addConversationalSurveyTagsCallback), createConversationEndMiddleware(conversationEndCallback, startConversationalSurveyCallback, endConversationalSurveyCallback), createDataMaskingMiddleware((_state$domainStates$l3 = state.domainStates.liveChatConfig) === null || _state$domainStates$l3 === void 0 ? void 0 : _state$domainStates$l3.DataMaskingInfo), createMessageTimeStampMiddleware, createMessageSequenceIdOverrideMiddleware, createCitationsMiddleware(state, dispatch), gifUploadMiddleware, htmlPlayerMiddleware, htmlTextMiddleware(honorsTargetInHTMLLinks), createMaxMessageSizeValidator(localizedTexts), sanitizationMiddleware, createCallActionMiddleware(),
|
|
124
|
+
preProcessingMiddleware, attachmentProcessingMiddleware, createAttachmentUploadValidatorMiddleware((_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : _state$domainStates$l.allowedFileExtensions, (_state$domainStates$l2 = state.domainStates.liveChatConfig) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.maxUploadFileSize, localizedTexts), attachmentSentAnnouncementMiddleware, createCustomEventMiddleware(BroadcastService), createQueueOverflowMiddleware(state, dispatch), channelDataMiddleware(addConversationalSurveyTagsCallback), createConversationEndMiddleware(conversationEndCallback, startConversationalSurveyCallback, endConversationalSurveyCallback), createDataMaskingMiddleware((_state$domainStates$l3 = state.domainStates.liveChatConfig) === null || _state$domainStates$l3 === void 0 ? void 0 : _state$domainStates$l3.DataMaskingInfo), createMessageTimeStampMiddleware, createMessageSequenceIdOverrideMiddleware, createCitationsMiddleware(state, dispatch), gifUploadMiddleware, htmlPlayerMiddleware, htmlTextMiddleware(honorsTargetInHTMLLinks), createMaxMessageSizeValidator(localizedTexts), sanitizationMiddleware, createCallActionMiddleware(),
|
|
124
125
|
// Pass a callback so middleware can push initials into React context for reactivity
|
|
125
126
|
localizedStringsBotInitialsMiddleware(initials => {
|
|
126
127
|
dispatch({
|
|
@@ -146,14 +147,194 @@ export const initWebChatComposer = (props, state, dispatch, facadeChatSDK, endCh
|
|
|
146
147
|
markdownRenderers.forEach(renderer => {
|
|
147
148
|
text = renderer.render(text);
|
|
148
149
|
});
|
|
150
|
+
|
|
151
|
+
// EXISTING sanitization (continues to work as before)
|
|
149
152
|
const config = {
|
|
150
153
|
FORBID_TAGS: ["form", "button", "script", "div", "input"],
|
|
151
154
|
FORBID_ATTR: ["action"],
|
|
152
155
|
ADD_ATTR: ["target"]
|
|
153
156
|
};
|
|
154
157
|
text = DOMPurify.sanitize(text, config);
|
|
158
|
+
|
|
159
|
+
// MONITOR-ONLY: Test what the stricter allowlist would remove (Phase 1)
|
|
160
|
+
// This does NOT modify the text, only logs telemetry
|
|
161
|
+
// Run during browser idle time to avoid blocking message flow and adding latency
|
|
162
|
+
const textToMonitor = text; // Capture current text value
|
|
163
|
+
|
|
164
|
+
// Schedule monitoring to run during browser idle time
|
|
165
|
+
const scheduleMonitoring = () => {
|
|
166
|
+
try {
|
|
167
|
+
monitorStrictSanitization(textToMonitor, state);
|
|
168
|
+
} catch (error) {
|
|
169
|
+
// Silently catch errors to prevent blocking message flow
|
|
170
|
+
if (process.env.NODE_ENV === "development") {
|
|
171
|
+
console.error("[Monitor] HTML sanitization monitoring failed:", error);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
// Use requestIdleCallback for truly idle execution, fallback to setTimeout for older browsers
|
|
177
|
+
if (typeof window !== "undefined" && "requestIdleCallback" in window) {
|
|
178
|
+
window.requestIdleCallback(scheduleMonitoring);
|
|
179
|
+
} else {
|
|
180
|
+
setTimeout(scheduleMonitoring, 0);
|
|
181
|
+
}
|
|
155
182
|
return text;
|
|
156
183
|
};
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Monitor-only sanitization (Phase 1: Gather telemetry)
|
|
187
|
+
* Tests what a stricter allowlist-based sanitization would remove
|
|
188
|
+
* WITHOUT actually removing it. Logs telemetry for analysis.
|
|
189
|
+
*
|
|
190
|
+
* IMPORTANT: This function is wrapped in try-catch and runs asynchronously
|
|
191
|
+
* to ensure failures don't block message flow or add latency.
|
|
192
|
+
*
|
|
193
|
+
* ISOLATION: Uses a separate DOMPurify instance to completely isolate
|
|
194
|
+
* monitoring hooks from other sanitization paths (e.g., postDomPurifyActivities).
|
|
195
|
+
* The instance is garbage collected after use, no cleanup needed.
|
|
196
|
+
*
|
|
197
|
+
* @param html - The HTML text that was already sanitized with existing config
|
|
198
|
+
* @param state - Widget state containing orgId and chatId
|
|
199
|
+
*/
|
|
200
|
+
const monitorStrictSanitization = (html, state) => {
|
|
201
|
+
// Early exit for empty content
|
|
202
|
+
if (!html) return;
|
|
203
|
+
|
|
204
|
+
// Track execution time for performance monitoring
|
|
205
|
+
const startTime = performance.now();
|
|
206
|
+
try {
|
|
207
|
+
// Create a separate DOMPurify instance for monitoring
|
|
208
|
+
// This completely isolates monitoring from other sanitization paths
|
|
209
|
+
const monitorDOMPurify = DOMPurify(window);
|
|
210
|
+
|
|
211
|
+
// Strict allowlist configuration (proposed new rules)
|
|
212
|
+
// Note: DOMPurify blocks event handlers (onclick, onerror, etc.) by default
|
|
213
|
+
const strictConfig = {
|
|
214
|
+
ALLOWED_TAGS: ["b", "strong",
|
|
215
|
+
// Bold text
|
|
216
|
+
"i", "em", "u",
|
|
217
|
+
// Italic, emphasis, underline
|
|
218
|
+
"br", "p",
|
|
219
|
+
// Line breaks and paragraphs
|
|
220
|
+
"ul", "ol", "li",
|
|
221
|
+
// Lists
|
|
222
|
+
"a" // Links (with restricted attributes)
|
|
223
|
+
],
|
|
224
|
+
ALLOWED_ATTR: ["href",
|
|
225
|
+
// For links (will be restricted to http/https)
|
|
226
|
+
"target",
|
|
227
|
+
// For link behavior
|
|
228
|
+
"rel" // For security (noopener, noreferrer)
|
|
229
|
+
],
|
|
230
|
+
FORBID_TAGS: ["img", "video", "audio",
|
|
231
|
+
// Media (tracking beacons)
|
|
232
|
+
"iframe", "object", "embed",
|
|
233
|
+
// Embedded content
|
|
234
|
+
"script", "style",
|
|
235
|
+
// Script and styling
|
|
236
|
+
"form", "input", "textarea", "button",
|
|
237
|
+
// Form elements
|
|
238
|
+
"link", "meta", "base",
|
|
239
|
+
// Document metadata
|
|
240
|
+
"div", "span" // Layout elements
|
|
241
|
+
],
|
|
242
|
+
FORBID_ATTR: ["style",
|
|
243
|
+
// Inline CSS
|
|
244
|
+
"action" // Form action attribute (event handlers blocked by default)
|
|
245
|
+
],
|
|
246
|
+
ALLOWED_URI_REGEXP: /^https?:/i,
|
|
247
|
+
ALLOW_DATA_ATTR: false,
|
|
248
|
+
ALLOW_UNKNOWN_PROTOCOLS: false
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
// Track what would be removed
|
|
252
|
+
const removedTags = [];
|
|
253
|
+
const removedAttributes = [];
|
|
254
|
+
|
|
255
|
+
// Add hooks to the isolated monitoring instance
|
|
256
|
+
monitorDOMPurify.addHook("uponSanitizeElement", (node, data) => {
|
|
257
|
+
try {
|
|
258
|
+
const tagName = data.tagName.toLowerCase();
|
|
259
|
+
// Filter out "body" tag which is DOMPurify's internal wrapper
|
|
260
|
+
if (node.nodeType === 1 && !strictConfig.ALLOWED_TAGS.includes(tagName) && tagName !== "body") {
|
|
261
|
+
removedTags.push(tagName);
|
|
262
|
+
}
|
|
263
|
+
} catch (hookError) {
|
|
264
|
+
// Silently ignore hook errors
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
monitorDOMPurify.addHook("uponSanitizeAttribute", (node, data) => {
|
|
268
|
+
try {
|
|
269
|
+
const attrName = data.attrName.toLowerCase();
|
|
270
|
+
if (!strictConfig.ALLOWED_ATTR.includes(attrName) && attrName !== "class" && attrName !== "id") {
|
|
271
|
+
removedAttributes.push(attrName);
|
|
272
|
+
}
|
|
273
|
+
} catch (hookError) {
|
|
274
|
+
// Silently ignore hook errors
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
// Run sanitization on the isolated instance (we discard the result)
|
|
279
|
+
// No cleanup needed - the instance will be garbage collected with its hooks
|
|
280
|
+
monitorDOMPurify.sanitize(html, strictConfig);
|
|
281
|
+
|
|
282
|
+
// Log telemetry if content would be affected by strict rules
|
|
283
|
+
if (removedTags.length > 0 || removedAttributes.length > 0) {
|
|
284
|
+
try {
|
|
285
|
+
var _state$domainStates, _state$domainStates2;
|
|
286
|
+
const uniqueTags = [...new Set(removedTags)];
|
|
287
|
+
const uniqueAttrs = [...new Set(removedAttributes)];
|
|
288
|
+
|
|
289
|
+
// Calculate execution time
|
|
290
|
+
const endTime = performance.now();
|
|
291
|
+
const executionTimeMs = Math.round((endTime - startTime) * 100) / 100; // Round to 2 decimal places
|
|
292
|
+
|
|
293
|
+
// Get context for telemetry (with safe fallbacks)
|
|
294
|
+
const orgId = (state === null || state === void 0 || (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 || (_state$domainStates = _state$domainStates.telemetryInternalData) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.orgId) || "unknown";
|
|
295
|
+
const conversationId = (state === null || state === void 0 || (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 || (_state$domainStates2 = _state$domainStates2.chatToken) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.chatId) || "unknown";
|
|
296
|
+
TelemetryHelper.logActionEvent(LogLevel.INFO, {
|
|
297
|
+
Event: TelemetryEvent.HTMLSanitized,
|
|
298
|
+
Description: JSON.stringify({
|
|
299
|
+
message: "HTML content would be sanitized by stricter allowlist (monitor-only)",
|
|
300
|
+
removedTags: uniqueTags,
|
|
301
|
+
removedAttributes: uniqueAttrs,
|
|
302
|
+
phase: "Monitor",
|
|
303
|
+
organizationId: orgId,
|
|
304
|
+
conversationId: conversationId
|
|
305
|
+
}),
|
|
306
|
+
ElapsedTimeInMilliseconds: executionTimeMs
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
// Log to console in development for debugging
|
|
310
|
+
if (process.env.NODE_ENV === "development") {
|
|
311
|
+
console.warn("[Monitor] Stricter HTML sanitization telemetry:", {
|
|
312
|
+
description: JSON.parse(JSON.stringify({
|
|
313
|
+
message: "HTML content would be sanitized by stricter allowlist (monitor-only)",
|
|
314
|
+
removedTags: uniqueTags,
|
|
315
|
+
removedAttributes: uniqueAttrs,
|
|
316
|
+
phase: "Monitor"
|
|
317
|
+
})),
|
|
318
|
+
orgId,
|
|
319
|
+
conversationId,
|
|
320
|
+
executionTimeMs
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
} catch (telemetryError) {
|
|
324
|
+
// Silently ignore telemetry errors to prevent blocking
|
|
325
|
+
if (process.env.NODE_ENV === "development") {
|
|
326
|
+
console.error("[Monitor] Telemetry logging failed:", telemetryError);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
} catch (error) {
|
|
331
|
+
// Catch-all for any unexpected errors
|
|
332
|
+
// Silently fail to ensure monitoring never blocks message flow
|
|
333
|
+
if (process.env.NODE_ENV === "development") {
|
|
334
|
+
console.error("[Monitor] Monitoring failed:", error);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
};
|
|
157
338
|
function postDomPurifyActivities() {
|
|
158
339
|
DOMPurify.addHook("afterSanitizeAttributes", function (node) {
|
|
159
340
|
const target = node.getAttribute(Constants.Target);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ConversationState } from "../../../contexts/common/ConversationState";
|
|
2
|
+
import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
|
|
3
|
+
import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
|
|
4
|
+
import { isUndefinedOrEmpty } from "../../../common/utils";
|
|
5
|
+
export let RecoveryEligibilityReason = /*#__PURE__*/function (RecoveryEligibilityReason) {
|
|
6
|
+
RecoveryEligibilityReason["ReconnectIdPresent"] = "ReconnectIdPresent";
|
|
7
|
+
RecoveryEligibilityReason["ActiveContextPresent"] = "ActiveContextPresent";
|
|
8
|
+
RecoveryEligibilityReason["MissingContext"] = "MissingContext";
|
|
9
|
+
RecoveryEligibilityReason["CachedContextNonActive"] = "CachedContextNonActive";
|
|
10
|
+
return RecoveryEligibilityReason;
|
|
11
|
+
}({});
|
|
12
|
+
const getConversationStateName = conversationState => {
|
|
13
|
+
if (typeof conversationState !== "number") {
|
|
14
|
+
return "Unknown";
|
|
15
|
+
}
|
|
16
|
+
const stateName = ConversationState[conversationState];
|
|
17
|
+
return typeof stateName === "string" ? stateName : "Unknown";
|
|
18
|
+
};
|
|
19
|
+
export const getRecoveryEligibilityTelemetryProperties = (state, eligible) => {
|
|
20
|
+
var _state$appStates, _state$domainStates, _state$appStates2, _state$appStates3;
|
|
21
|
+
const reconnectId = (_state$appStates = state.appStates) === null || _state$appStates === void 0 ? void 0 : _state$appStates.reconnectId;
|
|
22
|
+
const liveChatContext = (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.liveChatContext;
|
|
23
|
+
const hasReconnectId = !isUndefinedOrEmpty(reconnectId);
|
|
24
|
+
const hasLiveChatContext = !isUndefinedOrEmpty(liveChatContext);
|
|
25
|
+
const hasRequestId = !isUndefinedOrEmpty(liveChatContext === null || liveChatContext === void 0 ? void 0 : liveChatContext.requestId);
|
|
26
|
+
let reason = RecoveryEligibilityReason.ActiveContextPresent;
|
|
27
|
+
if (hasReconnectId) {
|
|
28
|
+
reason = RecoveryEligibilityReason.ReconnectIdPresent;
|
|
29
|
+
} else if (!hasLiveChatContext) {
|
|
30
|
+
reason = RecoveryEligibilityReason.MissingContext;
|
|
31
|
+
} else if (((_state$appStates2 = state.appStates) === null || _state$appStates2 === void 0 ? void 0 : _state$appStates2.conversationState) !== ConversationState.Active) {
|
|
32
|
+
reason = RecoveryEligibilityReason.CachedContextNonActive;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
conversationState: getConversationStateName((_state$appStates3 = state.appStates) === null || _state$appStates3 === void 0 ? void 0 : _state$appStates3.conversationState),
|
|
36
|
+
hasReconnectId,
|
|
37
|
+
hasLiveChatContext,
|
|
38
|
+
hasRequestId,
|
|
39
|
+
eligible,
|
|
40
|
+
reason
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
export const logRecoveryEligibilityTelemetry = (state, eligible) => {
|
|
44
|
+
try {
|
|
45
|
+
TelemetryHelper.logActionEvent(LogLevel.INFO, {
|
|
46
|
+
Event: TelemetryEvent.RecoveryEligibilityEvaluated,
|
|
47
|
+
CustomProperties: getRecoveryEligibilityTelemetryProperties(state, eligible)
|
|
48
|
+
});
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.warn(error);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
@@ -14,6 +14,7 @@ import { createAdapter } from "./createAdapter";
|
|
|
14
14
|
import { createOnNewAdapterActivityHandler } from "../../../plugins/newMessageEventHandler";
|
|
15
15
|
import { createTrackingForFirstMessage } from "../../../firstresponselatency/FirstMessageTrackerFromBot";
|
|
16
16
|
import { isPersistentChatEnabled } from "./liveChatConfigUtils";
|
|
17
|
+
import { isMidAuthEnabled } from "./authHelper";
|
|
17
18
|
import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
|
|
18
19
|
import { shouldSetPreChatIfPersistentChat } from "./persistentChatHelper";
|
|
19
20
|
import { updateTelemetryData } from "./updateSessionDataForTelemetry";
|
|
@@ -59,7 +60,7 @@ const prepareStartChat = async (props, facadeChatSDK, state, dispatch, setAdapte
|
|
|
59
60
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
61
|
const setPreChatAndInitiateChat = async (facadeChatSDK, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState, state, props) => {
|
|
61
62
|
var _props$preChatSurveyP, _props$controlProps, _state$domainStates, _state$appStates2;
|
|
62
|
-
//
|
|
63
|
+
// Reset before loading prechat to avoid starting chat with previous requestId
|
|
63
64
|
if ((state === null || state === void 0 ? void 0 : state.appStates.conversationState) === ConversationState.Closed) {
|
|
64
65
|
// Preventive reset to avoid starting chat with previous requestId which could potentially cause problems
|
|
65
66
|
chatSDKStateCleanUp(facadeChatSDK.getChatSDK());
|
|
@@ -192,7 +193,7 @@ const initStartChat = async (facadeChatSDK, dispatch, setAdapter, state, props,
|
|
|
192
193
|
});
|
|
193
194
|
}
|
|
194
195
|
try {
|
|
195
|
-
var _window$Microsoft;
|
|
196
|
+
var _window$Microsoft, _state$domainStates8;
|
|
196
197
|
// Set custom context params
|
|
197
198
|
await setCustomContextParams(state, props);
|
|
198
199
|
const defaultOptionalParams = {
|
|
@@ -201,9 +202,25 @@ const initStartChat = async (facadeChatSDK, dispatch, setAdapter, state, props,
|
|
|
201
202
|
portalContactId: (_window$Microsoft = window.Microsoft) === null || _window$Microsoft === void 0 || (_window$Microsoft = _window$Microsoft.Dynamic365) === null || _window$Microsoft === void 0 || (_window$Microsoft = _window$Microsoft.Portal) === null || _window$Microsoft === void 0 || (_window$Microsoft = _window$Microsoft.User) === null || _window$Microsoft === void 0 ? void 0 : _window$Microsoft.contactId
|
|
202
203
|
};
|
|
203
204
|
const startChatOptionalParams = Object.assign({}, params, optionalParams, defaultOptionalParams);
|
|
205
|
+
|
|
206
|
+
// MID-AUTH: Add wasAuthenticated flag for reconnect scenarios
|
|
207
|
+
// Tells FacadeChatSDK whether the previous session was authenticated
|
|
208
|
+
// Used to detect auth transitions (Auth->Unauth) and decide whether to call authenticateChat
|
|
209
|
+
const midAuthEnabled = isMidAuthEnabled(state === null || state === void 0 || (_state$domainStates8 = state.domainStates) === null || _state$domainStates8 === void 0 ? void 0 : _state$domainStates8.liveChatConfig);
|
|
210
|
+
if (midAuthEnabled) {
|
|
211
|
+
var _state$appStates4, _persistedState$appSt;
|
|
212
|
+
const isUserAuthenticated = (state === null || state === void 0 || (_state$appStates4 = state.appStates) === null || _state$appStates4 === void 0 ? void 0 : _state$appStates4.isUserAuthenticated) === true || (persistedState === null || persistedState === void 0 || (_persistedState$appSt = persistedState.appStates) === null || _persistedState$appSt === void 0 ? void 0 : _persistedState$appSt.isUserAuthenticated) === true;
|
|
213
|
+
startChatOptionalParams.wasAuthenticated = isUserAuthenticated;
|
|
214
|
+
}
|
|
215
|
+
|
|
204
216
|
// startTime is used to determine if a message is history or new, better to be set before creating the adapter to get bandwidth
|
|
205
217
|
const startTime = new Date().getTime();
|
|
206
218
|
createTrackingForFirstMessage();
|
|
219
|
+
|
|
220
|
+
// FacadeChatSDK.startChat() handles:
|
|
221
|
+
// 1. tokenRing() - checks authentication, calls handleAuthentication() if needed
|
|
222
|
+
// 2. Mid-auth: If no token, sets deferInitialAuth=true for unauthenticated flow
|
|
223
|
+
// 3. Mid-auth: On reconnect with valid token, calls authenticateChat to upgrade conversation
|
|
207
224
|
await facadeChatSDK.startChat(startChatOptionalParams);
|
|
208
225
|
logStartChatComplete();
|
|
209
226
|
isStartChatSuccessful = true;
|
|
@@ -290,15 +307,15 @@ const createAdapterAndSubscribe = async (facadeChatSDK, dispatch, setAdapter, st
|
|
|
290
307
|
};
|
|
291
308
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
292
309
|
const canConnectToExistingChat = async (props, facadeChatSDK, state, dispatch, setAdapter) => {
|
|
293
|
-
var _state$
|
|
310
|
+
var _state$appStates5, _persistedState$domai3, _persistedState$appSt2;
|
|
294
311
|
// By pass this function in case of popout chat
|
|
295
|
-
if ((state === null || state === void 0 || (_state$
|
|
312
|
+
if ((state === null || state === void 0 || (_state$appStates5 = state.appStates) === null || _state$appStates5 === void 0 ? void 0 : _state$appStates5.hideStartChatButton) === true) {
|
|
296
313
|
return false;
|
|
297
314
|
}
|
|
298
315
|
const persistedState = getStateFromCache(getWidgetCacheIdfromProps(props));
|
|
299
316
|
|
|
300
317
|
//Connect to only active chat session
|
|
301
|
-
if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 || (_persistedState$domai3 = persistedState.domainStates) === null || _persistedState$domai3 === void 0 ? void 0 : _persistedState$domai3.liveChatContext) && (persistedState === null || persistedState === void 0 || (_persistedState$
|
|
318
|
+
if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 || (_persistedState$domai3 = persistedState.domainStates) === null || _persistedState$domai3 === void 0 ? void 0 : _persistedState$domai3.liveChatContext) && (persistedState === null || persistedState === void 0 || (_persistedState$appSt2 = persistedState.appStates) === null || _persistedState$appSt2 === void 0 ? void 0 : _persistedState$appSt2.conversationState) === ConversationState.Active) {
|
|
302
319
|
var _persistedState$domai4;
|
|
303
320
|
dispatch({
|
|
304
321
|
type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
@@ -315,11 +332,11 @@ const canConnectToExistingChat = async (props, facadeChatSDK, state, dispatch, s
|
|
|
315
332
|
|
|
316
333
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
317
334
|
const setCustomContextParams = async (state, props) => {
|
|
318
|
-
var _state$
|
|
319
|
-
if (state !== null && state !== void 0 && (_state$
|
|
320
|
-
var _state$
|
|
335
|
+
var _state$domainStates9, _persistedState$domai5;
|
|
336
|
+
if (state !== null && state !== void 0 && (_state$domainStates9 = state.domainStates) !== null && _state$domainStates9 !== void 0 && _state$domainStates9.customContext) {
|
|
337
|
+
var _state$domainStates0;
|
|
321
338
|
optionalParams = Object.assign({}, optionalParams, {
|
|
322
|
-
customContext: JSON.parse(JSON.stringify(state === null || state === void 0 || (_state$
|
|
339
|
+
customContext: JSON.parse(JSON.stringify(state === null || state === void 0 || (_state$domainStates0 = state.domainStates) === null || _state$domainStates0 === void 0 ? void 0 : _state$domainStates0.customContext))
|
|
323
340
|
});
|
|
324
341
|
return;
|
|
325
342
|
}
|
|
@@ -352,9 +369,9 @@ const canStartPopoutChat = async props => {
|
|
|
352
369
|
}
|
|
353
370
|
popoutWidgetInstanceId = getWidgetCacheIdfromProps(props, true);
|
|
354
371
|
if (!isNullOrEmptyString(popoutWidgetInstanceId)) {
|
|
355
|
-
var _persistedState$domai6, _persistedState$
|
|
372
|
+
var _persistedState$domai6, _persistedState$appSt3;
|
|
356
373
|
const persistedState = getStateFromCache(popoutWidgetInstanceId);
|
|
357
|
-
if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 || (_persistedState$domai6 = persistedState.domainStates) === null || _persistedState$domai6 === void 0 ? void 0 : _persistedState$domai6.liveChatContext) && (persistedState === null || persistedState === void 0 || (_persistedState$
|
|
374
|
+
if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 || (_persistedState$domai6 = persistedState.domainStates) === null || _persistedState$domai6 === void 0 ? void 0 : _persistedState$domai6.liveChatContext) && (persistedState === null || persistedState === void 0 || (_persistedState$appSt3 = persistedState.appStates) === null || _persistedState$appSt3 === void 0 ? void 0 : _persistedState$appSt3.conversationState) === ConversationState.Active) {
|
|
358
375
|
// Initiate popout chat
|
|
359
376
|
BroadcastService.postMessage({
|
|
360
377
|
eventName: BroadcastEvent.InitiateStartChatInPopoutMode
|
|
@@ -367,9 +384,9 @@ const canStartPopoutChat = async props => {
|
|
|
367
384
|
|
|
368
385
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
369
386
|
const checkIfConversationStillValid = async (facadeChatSDK, dispatch, state) => {
|
|
370
|
-
var _state$
|
|
371
|
-
const requestIdFromCache = (_state$
|
|
372
|
-
const liveChatContext = state === null || state === void 0 || (_state$
|
|
387
|
+
var _state$domainStates1, _state$domainStates10;
|
|
388
|
+
const requestIdFromCache = (_state$domainStates1 = state.domainStates) === null || _state$domainStates1 === void 0 || (_state$domainStates1 = _state$domainStates1.liveChatContext) === null || _state$domainStates1 === void 0 ? void 0 : _state$domainStates1.requestId;
|
|
389
|
+
const liveChatContext = state === null || state === void 0 || (_state$domainStates10 = state.domainStates) === null || _state$domainStates10 === void 0 ? void 0 : _state$domainStates10.liveChatContext;
|
|
373
390
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
374
391
|
let conversationDetails = undefined;
|
|
375
392
|
// Preserve current requestId
|