@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.
Files changed (251) hide show
  1. package/README.md +52 -5
  2. package/lib/cjs/common/Constants.js +5 -0
  3. package/lib/cjs/common/facades/FacadeChatSDK.js +234 -9
  4. package/lib/cjs/common/telemetry/TelemetryConstants.js +19 -0
  5. package/lib/cjs/common/telemetry/TelemetryManager.js +6 -1
  6. package/lib/cjs/common/telemetry/loggers/appInsightsLogger.js +2 -3
  7. package/lib/cjs/common/telemetry/sanitizeSasInPayload.js +91 -0
  8. package/lib/cjs/common/utils.js +93 -17
  9. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +16 -6
  10. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -10
  11. package/lib/cjs/components/citationpanestateful/CitationDim.js +2 -3
  12. package/lib/cjs/components/citationpanestateful/CitationPaneStateful.js +27 -5
  13. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +23 -3
  14. package/lib/cjs/components/dimlayer/DimLayer.js +1 -3
  15. package/lib/cjs/components/draggable/DraggableChatWidget.js +35 -15
  16. package/lib/cjs/components/draggable/DraggableEventEmitter.js +10 -1
  17. package/lib/cjs/components/draggable/DraggableEventReceiver.js +1 -3
  18. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
  19. package/lib/cjs/components/errorboundary/ErrorBoundary.js +4 -12
  20. package/lib/cjs/components/footerstateful/FooterStateful.js +18 -9
  21. package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
  22. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
  23. package/lib/cjs/components/headerstateful/HeaderStateful.js +24 -12
  24. package/lib/cjs/components/livechatwidget/LiveChatWidget.js +27 -4
  25. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
  26. package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
  27. package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
  28. package/lib/cjs/components/livechatwidget/common/authHelper.js +44 -4
  29. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +98 -5
  30. package/lib/cjs/components/livechatwidget/common/endChat.js +12 -9
  31. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +182 -1
  32. package/lib/cjs/components/livechatwidget/common/recoveryEligibilityTelemetry.js +60 -0
  33. package/lib/cjs/components/livechatwidget/common/startChat.js +31 -14
  34. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +160 -21
  35. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +16 -11
  36. package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +19 -12
  37. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +13 -6
  38. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  39. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +12 -5
  40. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  41. package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  42. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -7
  43. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +16 -7
  44. package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +10 -2
  45. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  46. package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  47. package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  48. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  49. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  50. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  51. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  52. package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  53. package/lib/cjs/components/webchatcontainerstateful/common/utils/citationA11y.js +195 -0
  54. package/lib/cjs/components/webchatcontainerstateful/interfaces/IWebChatAction.js +17 -1
  55. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  56. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  57. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  58. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  59. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  60. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +22 -6
  61. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  62. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -35
  63. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +199 -0
  64. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +29 -15
  65. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  66. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  67. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  68. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  69. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  70. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  71. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  72. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  73. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +14 -12
  74. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +16 -14
  75. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +18 -30
  76. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +10 -2
  77. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  78. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -12
  79. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  80. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +83 -0
  81. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  82. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -1
  83. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  84. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -30
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  97. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  98. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +5 -0
  99. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  100. package/lib/cjs/contexts/createReducer.js +15 -0
  101. package/lib/cjs/controller/componentController.js +13 -1
  102. package/lib/cjs/hooks/useWindowDimensions.js +13 -5
  103. package/lib/cjs/package.json +1 -0
  104. package/lib/cjs/plugins/createChatTranscript.js +3 -4
  105. package/lib/cjs/plugins/newMessageEventHandler.js +20 -3
  106. package/lib/esm/common/Constants.js +5 -0
  107. package/lib/esm/common/facades/FacadeChatSDK.js +235 -10
  108. package/lib/esm/common/telemetry/TelemetryConstants.js +19 -0
  109. package/lib/esm/common/telemetry/TelemetryManager.js +6 -1
  110. package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +2 -3
  111. package/lib/esm/common/telemetry/sanitizeSasInPayload.js +84 -0
  112. package/lib/esm/common/utils.js +88 -14
  113. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +15 -5
  114. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +19 -9
  115. package/lib/esm/components/citationpanestateful/CitationDim.js +2 -3
  116. package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +26 -4
  117. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +22 -2
  118. package/lib/esm/components/dimlayer/DimLayer.js +1 -3
  119. package/lib/esm/components/draggable/DraggableChatWidget.js +34 -14
  120. package/lib/esm/components/draggable/DraggableEventEmitter.js +10 -1
  121. package/lib/esm/components/draggable/DraggableEventReceiver.js +1 -3
  122. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
  123. package/lib/esm/components/errorboundary/ErrorBoundary.js +4 -12
  124. package/lib/esm/components/footerstateful/FooterStateful.js +17 -8
  125. package/lib/esm/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
  126. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
  127. package/lib/esm/components/headerstateful/HeaderStateful.js +22 -10
  128. package/lib/esm/components/livechatwidget/LiveChatWidget.js +27 -4
  129. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
  130. package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
  131. package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
  132. package/lib/esm/components/livechatwidget/common/authHelper.js +44 -4
  133. package/lib/esm/components/livechatwidget/common/createMarkdown.js +98 -5
  134. package/lib/esm/components/livechatwidget/common/endChat.js +12 -9
  135. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +182 -1
  136. package/lib/esm/components/livechatwidget/common/recoveryEligibilityTelemetry.js +52 -0
  137. package/lib/esm/components/livechatwidget/common/startChat.js +31 -14
  138. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +159 -20
  139. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +14 -9
  140. package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +17 -10
  141. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -5
  142. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  143. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +11 -4
  144. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  145. package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  146. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -6
  147. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +15 -6
  148. package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +9 -1
  149. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  150. package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  151. package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  152. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  153. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  154. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  155. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  156. package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  157. package/lib/esm/components/webchatcontainerstateful/common/utils/citationA11y.js +188 -0
  158. package/lib/esm/components/webchatcontainerstateful/interfaces/IWebChatAction.js +10 -1
  159. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  160. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  161. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  162. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  163. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  164. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +19 -4
  165. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  166. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -32
  167. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +193 -0
  168. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +28 -14
  169. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  170. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  171. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  172. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  173. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  174. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  175. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  176. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  177. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +13 -11
  178. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +15 -13
  179. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +17 -27
  180. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +9 -1
  181. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  182. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -10
  183. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  184. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +77 -0
  185. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  186. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -2
  187. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  188. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  189. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  190. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  191. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  192. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  193. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  194. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  195. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  196. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  197. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -31
  198. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  199. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  200. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  201. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  202. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +5 -0
  203. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  204. package/lib/esm/contexts/createReducer.js +15 -0
  205. package/lib/esm/controller/componentController.js +13 -1
  206. package/lib/esm/hooks/useWindowDimensions.js +13 -5
  207. package/lib/esm/plugins/createChatTranscript.js +3 -4
  208. package/lib/esm/plugins/newMessageEventHandler.js +20 -3
  209. package/lib/types/common/Constants.d.ts +4 -0
  210. package/lib/types/common/facades/FacadeChatSDK.d.ts +29 -0
  211. package/lib/types/common/facades/types/IFacadeChatSDKInput.d.ts +3 -1
  212. package/lib/types/common/telemetry/TelemetryConstants.d.ts +15 -2
  213. package/lib/types/common/telemetry/sanitizeSasInPayload.d.ts +24 -0
  214. package/lib/types/common/utils.d.ts +3 -1
  215. package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +2 -1
  216. package/lib/types/components/livechatwidget/common/authHelper.d.ts +9 -2
  217. package/lib/types/components/livechatwidget/common/recoveryEligibilityTelemetry.d.ts +17 -0
  218. package/lib/types/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.d.ts +6 -0
  219. package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +1 -1
  220. package/lib/types/components/webchatcontainerstateful/common/utils/citationA11y.d.ts +1 -0
  221. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
  222. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatAction.d.ts +16 -1
  223. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +7 -0
  224. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +14 -38
  225. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -0
  226. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.d.ts +18 -0
  227. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.d.ts +3 -0
  228. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.d.ts +2 -4
  229. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +2 -4
  230. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.d.ts +2 -4
  231. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.d.ts +10 -0
  232. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +2 -4
  233. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.d.ts +2 -2
  234. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.d.ts +2 -4
  235. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +2 -2
  236. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.d.ts +2 -4
  237. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.d.ts +2 -2
  238. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.d.ts +2 -4
  239. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.d.ts +2 -4
  240. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.d.ts +2 -4
  241. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.d.ts +2 -4
  242. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +2 -4
  243. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.d.ts +2 -4
  244. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.d.ts +2 -4
  245. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
  246. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.d.ts +2 -4
  247. package/lib/types/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.d.ts +7 -0
  248. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  249. package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +17 -0
  250. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  251. 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
- // This reset needs to be done before to load prechat, because the conversation state changes from close to prechat
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$appStates4, _persistedState$domai3, _persistedState$appSt;
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$appStates4 = state.appStates) === null || _state$appStates4 === void 0 ? void 0 : _state$appStates4.hideStartChatButton) === true) {
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$appSt = persistedState.appStates) === null || _persistedState$appSt === void 0 ? void 0 : _persistedState$appSt.conversationState) === ConversationState.Active) {
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$domainStates8, _persistedState$domai5;
319
- if (state !== null && state !== void 0 && (_state$domainStates8 = state.domainStates) !== null && _state$domainStates8 !== void 0 && _state$domainStates8.customContext) {
320
- var _state$domainStates9;
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$domainStates9 = state.domainStates) === null || _state$domainStates9 === void 0 ? void 0 : _state$domainStates9.customContext))
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$appSt2;
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$appSt2 = persistedState.appStates) === null || _persistedState$appSt2 === void 0 ? void 0 : _persistedState$appSt2.conversationState) === ConversationState.Active) {
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$domainStates0, _state$domainStates1;
371
- const requestIdFromCache = (_state$domainStates0 = state.domainStates) === null || _state$domainStates0 === void 0 || (_state$domainStates0 = _state$domainStates0.liveChatContext) === null || _state$domainStates0 === void 0 ? void 0 : _state$domainStates0.requestId;
372
- const liveChatContext = state === null || state === void 0 || (_state$domainStates1 = state.domainStates) === null || _state$domainStates1 === void 0 ? void 0 : _state$domainStates1.liveChatContext;
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