@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
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
8
  import React, { useEffect } from "react";
3
9
  import AudioNotificationStateful from "./audionotificationstateful/AudioNotificationStateful";
@@ -24,17 +30,20 @@ export const FooterStateful = props => {
24
30
  Event: TelemetryEvent.UXFooterStart
25
31
  });
26
32
  }, []);
27
- const [state, dispatch] = useChatContextStore();
33
+ const _useChatContextStore = useChatContextStore(),
34
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
35
+ state = _useChatContextStore2[0],
36
+ dispatch = _useChatContextStore2[1];
28
37
  // hideFooterDisplay - the purpose of this is to keep the footer always "active",
29
38
  // but hide it visually in certain states (e.g., loading state) and show in some other states (e.g. active state).
30
39
  // The reason for this approach is to make sure that state variables for audio notification work correctly after minimizing
31
- const {
32
- footerProps,
33
- downloadTranscriptProps,
34
- audioNotificationProps,
35
- hideFooterDisplay
36
- } = props;
37
- const [facadeChatSDK] = useFacadeSDKStore();
40
+ const footerProps = props.footerProps,
41
+ downloadTranscriptProps = props.downloadTranscriptProps,
42
+ audioNotificationProps = props.audioNotificationProps,
43
+ hideFooterDisplay = props.hideFooterDisplay;
44
+ const _useFacadeSDKStore = useFacadeSDKStore(),
45
+ _useFacadeSDKStore2 = _slicedToArray(_useFacadeSDKStore, 1),
46
+ facadeChatSDK = _useFacadeSDKStore2[0];
38
47
  const controlProps = {
39
48
  id: "oc-lcw-footer",
40
49
  dir: state.domainStates.globalDir,
@@ -1,10 +1,8 @@
1
1
  import React, { useEffect, useRef } from "react";
2
2
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
3
3
  export const AudioNotificationStateful = props => {
4
- const {
5
- audioSrc,
6
- isAudioMuted
7
- } = props;
4
+ const audioSrc = props.audioSrc,
5
+ isAudioMuted = props.isAudioMuted;
8
6
  const audioRef = useRef(new Audio(audioSrc));
9
7
  useEffect(() => {
10
8
  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
@@ -188,12 +188,10 @@ export const downloadTranscript = async (facadeChatSDK, downloadTranscriptProps,
188
188
  if (typeof data === Constants.String) {
189
189
  data = JSON.parse(data);
190
190
  }
191
- const {
192
- bannerMessageOnError,
193
- renderMarkDown,
194
- attachmentMessage,
195
- webChatTranscript
196
- } = downloadTranscriptProps;
191
+ const bannerMessageOnError = downloadTranscriptProps.bannerMessageOnError,
192
+ renderMarkDown = downloadTranscriptProps.renderMarkDown,
193
+ attachmentMessage = downloadTranscriptProps.attachmentMessage,
194
+ webChatTranscript = downloadTranscriptProps.webChatTranscript;
197
195
  if (data[Constants.ChatMessagesJson] !== null && data[Constants.ChatMessagesJson] !== undefined) {
198
196
  const useWebChatTranscript = isNullOrUndefined(webChatTranscript === null || webChatTranscript === void 0 ? void 0 : webChatTranscript.disabled) || (webChatTranscript === null || webChatTranscript === void 0 ? void 0 : webChatTranscript.disabled) === false;
199
197
  if (useWebChatTranscript) {
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { ConversationStage, LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
8
  import React, { useEffect, useRef, useState } from "react";
3
9
  import { ConfirmationState } from "../../common/Constants";
@@ -19,19 +25,25 @@ export const HeaderStateful = props => {
19
25
  Event: TelemetryEvent.UXHeaderStart
20
26
  });
21
27
  }, []);
22
- const [state, dispatch] = useChatContextStore();
28
+ const _useChatContextStore = useChatContextStore(),
29
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
30
+ state = _useChatContextStore2[0],
31
+ dispatch = _useChatContextStore2[1];
23
32
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
- const [adapter] = useChatAdapterStore();
25
- const {
26
- headerProps,
27
- outOfOfficeHeaderProps,
28
- endChat
29
- } = props;
33
+ const _useChatAdapterStore = useChatAdapterStore(),
34
+ _useChatAdapterStore2 = _slicedToArray(_useChatAdapterStore, 1),
35
+ adapter = _useChatAdapterStore2[0];
36
+ const headerProps = props.headerProps,
37
+ outOfOfficeHeaderProps = props.outOfOfficeHeaderProps,
38
+ endChat = props.endChat;
30
39
  //Setting OutOfOperatingHours Flag
31
40
  // Initialize with the current state value to prevent visual flicker
32
- const [outOfOperatingHours, setOutOfOperatingHours] = useState(() => {
33
- return state.appStates.conversationState === ConversationState.Closed && state.appStates.outsideOperatingHours;
34
- });
41
+ const _useState = useState(() => {
42
+ return state.appStates.conversationState === ConversationState.Closed && state.appStates.outsideOperatingHours;
43
+ }),
44
+ _useState2 = _slicedToArray(_useState, 2),
45
+ outOfOperatingHours = _useState2[0],
46
+ setOutOfOperatingHours = _useState2[1];
35
47
  const outOfOfficeStyleProps = Object.assign({}, defaultOutOfOfficeHeaderStyleProps, outOfOfficeHeaderProps === null || outOfOfficeHeaderProps === void 0 ? void 0 : outOfOfficeHeaderProps.styleProps);
36
48
 
37
49
  // For some reason state object is not getting updated values in this component
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import React, { useEffect, useReducer, useState } from "react";
2
8
  import { ChatAdapterStore } from "../../contexts/ChatAdapterStore";
3
9
  import { ChatContextStore } from "../../contexts/ChatContextStore";
@@ -15,10 +21,19 @@ import { registerTelemetryLoggers } from "./common/registerTelemetryLoggers";
15
21
  export const LiveChatWidget = props => {
16
22
  var _props$featureConfigP, _props$chatConfig, _props$chatConfig2;
17
23
  const reducer = createReducer();
18
- const [state, dispatch] = useReducer(reducer, getLiveChatWidgetContextInitialState(props));
24
+ const _useReducer = useReducer(reducer, getLiveChatWidgetContextInitialState(props)),
25
+ _useReducer2 = _slicedToArray(_useReducer, 2),
26
+ state = _useReducer2[0],
27
+ dispatch = _useReducer2[1];
19
28
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- const [adapter, setAdapter] = useState(undefined);
21
- const [facadeChatSDK, setFacadeChatSDK] = useState(undefined);
29
+ const _useState = useState(undefined),
30
+ _useState2 = _slicedToArray(_useState, 2),
31
+ adapter = _useState2[0],
32
+ setAdapter = _useState2[1];
33
+ const _useState3 = useState(undefined),
34
+ _useState4 = _slicedToArray(_useState3, 2),
35
+ facadeChatSDK = _useState4[0],
36
+ setFacadeChatSDK = _useState4[1];
22
37
  const chatSDK = getMockChatSDKIfApplicable(props.chatSDK, props === null || props === void 0 ? void 0 : props.mock);
23
38
  const disableReauthentication = ((_props$featureConfigP = props.featureConfigProps) === null || _props$featureConfigP === void 0 ? void 0 : _props$featureConfigP.disableReauthentication) === true;
24
39
  overridePropsOnMockIfApplicable(props);
@@ -26,8 +41,16 @@ export const LiveChatWidget = props => {
26
41
  throw new Error("chatConfig is required");
27
42
  }
28
43
 
44
+ // Check configuration flags
29
45
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
- const isAuthenticatedChat = !!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && (_props$chatConfig = _props$chatConfig.LiveChatConfigAuthSettings) !== null && _props$chatConfig !== void 0 && _props$chatConfig.msdyn_javascriptclientfunction) || isPersistentChatEnabled((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 || (_props$chatConfig2 = _props$chatConfig2.LiveWSAndLiveChatEngJoin) === null || _props$chatConfig2 === void 0 ? void 0 : _props$chatConfig2.msdyn_conversationmode);
46
+ const hasAuthClientFn = !!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && (_props$chatConfig = _props$chatConfig.LiveChatConfigAuthSettings) !== null && _props$chatConfig !== void 0 && _props$chatConfig.msdyn_javascriptclientfunction);
47
+ const persistentChatEnabled = isPersistentChatEnabled((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 || (_props$chatConfig2 = _props$chatConfig2.LiveWSAndLiveChatEngJoin) === null || _props$chatConfig2 === void 0 ? void 0 : _props$chatConfig2.msdyn_conversationmode);
48
+
49
+ // isAuthenticatedChat determines if FacadeChatSDK should require authentication:
50
+ // REGULAR AUTH FLOW (config-based):
51
+ // - Persistent chat enabled ? always authenticated
52
+ // - Auth settings exist ? authenticated from start
53
+ const isAuthenticatedChat = persistentChatEnabled || hasAuthClientFn;
31
54
  if (!facadeChatSDK) {
32
55
  var _props$mock;
33
56
  setFacadeChatSDK(new FacadeChatSDK({
@@ -19,10 +19,8 @@ export let HiddenAdaptiveCardActivitySubscriber = /*#__PURE__*/function () {
19
19
  value:
20
20
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
21
  async function apply(activity) {
22
- const {
23
- attachments,
24
- attachment
25
- } = activity;
22
+ const attachments = activity.attachments,
23
+ attachment = activity.attachment;
26
24
  this.observer.next(false);
27
25
  BroadcastService.postMessage({
28
26
  eventName: BroadcastEvent.NewMessageReceived,
@@ -38,10 +36,8 @@ export let HiddenAdaptiveCardActivitySubscriber = /*#__PURE__*/function () {
38
36
  }, {
39
37
  key: "applicable",
40
38
  value: function applicable(activity) {
41
- const {
42
- attachments,
43
- attachment
44
- } = activity;
39
+ const attachments = activity.attachments,
40
+ attachment = activity.attachment;
45
41
 
46
42
  // Use `attachments` or `attachment` (whichever exists)
47
43
  const cards = attachments || [attachment];
@@ -51,9 +47,7 @@ export let HiddenAdaptiveCardActivitySubscriber = /*#__PURE__*/function () {
51
47
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
48
  item => Constants.supportedAdaptiveCardContentTypes.indexOf(item === null || item === void 0 ? void 0 : item.contentType) >= 0);
53
49
  if (adaptiveCard && adaptiveCard.content) {
54
- const {
55
- body
56
- } = adaptiveCard.content;
50
+ const body = adaptiveCard.content.body;
57
51
  if (Array.isArray(body)) {
58
52
  // Check if all elements in `body` have `isVisible: false`
59
53
  const allInvisible = body.every(item => item.isVisible === false);
@@ -3,6 +3,7 @@ var ChatWidgetEvents = /*#__PURE__*/function (ChatWidgetEvents) {
3
3
  ChatWidgetEvents["FETCH_PERSISTENT_CHAT_HISTORY"] = "CHAT_WIDGET/FETCH_PERSISTENT_CHAT_HISTORY";
4
4
  ChatWidgetEvents["NO_MORE_HISTORY_AVAILABLE"] = "CHAT_WIDGET/NO_MORE_HISTORY_AVAILABLE";
5
5
  ChatWidgetEvents["HISTORY_LOAD_ERROR"] = "CHAT_WIDGET/HISTORY_LOAD_ERROR";
6
+ ChatWidgetEvents["HISTORY_BATCH_LOADED"] = "CHAT_WIDGET/HISTORY_BATCH_LOADED";
6
7
  return ChatWidgetEvents;
7
8
  }(ChatWidgetEvents || {});
8
9
  export default ChatWidgetEvents;
@@ -126,6 +126,12 @@ let PersistentConversationHandler = /*#__PURE__*/function () {
126
126
  }
127
127
  const messagesDescOrder = (_ref = [...messages]) === null || _ref === void 0 ? void 0 : _ref.reverse();
128
128
  this.processHistoryMessages(messagesDescOrder);
129
+
130
+ // Signal that a batch of history messages has been added to the store.
131
+ // LazyLoadActivity subscribes to this to apply scroll anchoring after render.
132
+ dispatchCustomEvent(ChatWidgetEvents.HISTORY_BATCH_LOADED, {
133
+ messageCount: messages.length
134
+ });
129
135
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
130
136
  Event: TelemetryEvent.LCWPersistentHistoryPullCompleted,
131
137
  Description: "History pull completed successfully",
@@ -190,10 +196,8 @@ let PersistentConversationHandler = /*#__PURE__*/function () {
190
196
  try {
191
197
  var _this$facadeChatSDK;
192
198
  const response = await ((_this$facadeChatSDK = this.facadeChatSDK) === null || _this$facadeChatSDK === void 0 ? void 0 : _this$facadeChatSDK.fetchPersistentConversationHistory(options));
193
- const {
194
- chatMessages: messages,
195
- nextPageToken: pageToken
196
- } = response;
199
+ const messages = response.chatMessages,
200
+ pageToken = response.nextPageToken;
197
201
  this.pageToken = pageToken || null;
198
202
  if (pageToken === null) {
199
203
  this.isLastPull = true;
@@ -234,6 +238,9 @@ let PersistentConversationHandler = /*#__PURE__*/function () {
234
238
  value: function processMessageToActivity(message) {
235
239
  try {
236
240
  const activity = convertPersistentChatHistoryMessageToActivity(message);
241
+ if (!activity) {
242
+ return null;
243
+ }
237
244
  activity.id = activity.id || `activity-${this.count}`;
238
245
  activity.channelData = {
239
246
  ...activity.channelData,
@@ -2,6 +2,17 @@ import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryCon
2
2
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
3
3
  import { WidgetLoadCustomErrorString } from "../../../common/Constants";
4
4
  import { isNullOrEmptyString } from "../../../common/utils";
5
+
6
+ /**
7
+ * Check if mid-auth is enabled based on chatConfig.
8
+ * Mid-auth flag lives under LiveWSAndLiveChatEngJoin.msdyn_authenticatedsigninoptional.
9
+ */
10
+ const isMidAuthEnabled = chatConfig => {
11
+ var _chatConfig$LiveWSAnd, _value$toString, _value$toString$call$, _value$toString$call;
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ const value = chatConfig === null || chatConfig === void 0 || (_chatConfig$LiveWSAnd = chatConfig.LiveWSAndLiveChatEngJoin) === null || _chatConfig$LiveWSAnd === void 0 ? void 0 : _chatConfig$LiveWSAnd.msdyn_authenticatedsigninoptional;
14
+ return (value === null || value === void 0 || (_value$toString = value.toString) === null || _value$toString === void 0 || (_value$toString$call$ = (_value$toString$call = _value$toString.call(value)).toLowerCase) === null || _value$toString$call$ === void 0 ? void 0 : _value$toString$call$.call(_value$toString$call)) === "true";
15
+ };
5
16
  const getAuthClientFunction = chatConfig => {
6
17
  let authClientFunction = undefined;
7
18
  if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
@@ -12,12 +23,17 @@ const getAuthClientFunction = chatConfig => {
12
23
  };
13
24
  const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
14
25
  var _chatSDK$chatSDKConfi;
26
+ const midAuthEnabled = isMidAuthEnabled(chatConfig);
15
27
  const authClientFunction = getAuthClientFunction(chatConfig);
16
28
  if (getAuthToken && authClientFunction) {
17
29
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
18
30
  Event: TelemetryEvent.GetAuthTokenCalled
19
31
  });
20
- const token = await getAuthToken(authClientFunction);
32
+
33
+ // Only pass isMidAuthEnabled option when mid-auth is enabled.
34
+ const token = midAuthEnabled ? await getAuthToken(authClientFunction, {
35
+ isMidAuthEnabled: midAuthEnabled
36
+ }) : await getAuthToken(authClientFunction);
21
37
  if (!isNullOrEmptyString(token)) {
22
38
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
39
  chatSDK.setAuthTokenProvider(async () => {
@@ -28,8 +44,21 @@ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
28
44
  "token": token
29
45
  };
30
46
  } else {
31
- // instead of returning false, it's more appropiate to thrown an error to force error handling on the caller side
32
- // this will help to avoid the error to be ignored and the chat to be started
47
+ // For mid-auth scenarios, empty token means "user not signed in" - this is expected behavior.
48
+ // Return result: true with empty token so caller can decide to proceed unauthenticated.
49
+ if (midAuthEnabled) {
50
+ // Expected behavior for mid-auth: user not signed in
51
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
52
+ Event: TelemetryEvent.GetAuthTokenCalled,
53
+ Description: "Mid-auth: token provider returned empty; user not signed in"
54
+ });
55
+ return {
56
+ "result": true,
57
+ "token": null
58
+ };
59
+ }
60
+
61
+ // For non-mid-auth scenarios, empty token is an error
33
62
  TelemetryHelper.logActionEvent(LogLevel.ERROR, {
34
63
  Event: TelemetryEvent.ReceivedNullOrEmptyToken
35
64
  });
@@ -39,6 +68,17 @@ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
39
68
  var _chatSDK$chatSDKConfi2;
40
69
  const token = await ((_chatSDK$chatSDKConfi2 = chatSDK.chatSDKConfig) === null || _chatSDK$chatSDKConfi2 === void 0 ? void 0 : _chatSDK$chatSDKConfi2.getAuthToken());
41
70
  if (isNullOrEmptyString(token)) {
71
+ // For mid-auth scenarios, empty token from SDK's getAuthToken is also expected
72
+ if (midAuthEnabled) {
73
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
74
+ Event: TelemetryEvent.GetAuthTokenCalled,
75
+ Description: "Mid-auth: SDK getAuthToken returned empty; user not signed in"
76
+ });
77
+ return {
78
+ "result": true,
79
+ "token": null
80
+ };
81
+ }
42
82
  TelemetryHelper.logActionEvent(LogLevel.ERROR, {
43
83
  Event: TelemetryEvent.ReceivedNullOrEmptyToken,
44
84
  Description: "getAuthToken in chat SDK returns empty string"
@@ -66,4 +106,4 @@ const removeAuthTokenProvider = chatSDK => {
66
106
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
107
  chatSDK.authenticatedUserToken = null;
68
108
  };
69
- export { getAuthClientFunction, handleAuthentication, removeAuthTokenProvider };
109
+ export { getAuthClientFunction, handleAuthentication, removeAuthTokenProvider, isMidAuthEnabled };
@@ -35,10 +35,8 @@ export const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineM
35
35
  }
36
36
  markdown.disable(["strikethrough"]);
37
37
 
38
- // Custom plugin to fix numbered list continuity
38
+ // Custom plugin to fix numbered list continuity and merge adjacent markdown links with the same href.
39
39
  markdown.use(function (md) {
40
- const originalRender = md.render.bind(md);
41
- const originalRenderInline = md.renderInline.bind(md);
42
40
  function preprocessText(text) {
43
41
  // Handle numbered lists that come with double line breaks (knowledge article format)
44
42
  // This ensures proper continuous numbering instead of separate lists
@@ -73,16 +71,111 @@ export const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineM
73
71
  return result;
74
72
  }
75
73
 
74
+ // Accessibility fix: when a bot emits content like "[1.](url) [View details](url)",
75
+ // markdown-it renders two sibling links that screen readers announce as two separate
76
+ // focusable links. Merge consecutive markdown link tokens with identical attributes so
77
+ // the number and label form one combined focusable link without discarding metadata.
78
+ md.core.ruler.after("inline", "merge_adjacent_same_href_links", function (state) {
79
+ const sortedAttrs = token => (token.attrs || []).map(attr => `${attr[0]}=${attr[1]}`).sort();
80
+ const hasSameAttributes = (first, second) => {
81
+ const firstAttrs = sortedAttrs(first);
82
+ const secondAttrs = sortedAttrs(second);
83
+ return firstAttrs.length === secondAttrs.length && firstAttrs.every((attr, index) => attr === secondAttrs[index]);
84
+ };
85
+ const collectLink = (children, index) => {
86
+ var _open$attrGet;
87
+ const open = children[index];
88
+ if (!open || open.type !== "link_open") {
89
+ return undefined;
90
+ }
91
+ const href = (_open$attrGet = open.attrGet) === null || _open$attrGet === void 0 ? void 0 : _open$attrGet.call(open, "href");
92
+ if (!href) {
93
+ return undefined;
94
+ }
95
+ let depth = 0;
96
+ for (let currentIndex = index; currentIndex < children.length; currentIndex++) {
97
+ const token = children[currentIndex];
98
+ if (token.type === "link_open") {
99
+ depth++;
100
+ } else if (token.type === "link_close") {
101
+ depth--;
102
+ if (depth === 0) {
103
+ return {
104
+ closeIndex: currentIndex,
105
+ href,
106
+ open
107
+ };
108
+ }
109
+ }
110
+ }
111
+ return undefined;
112
+ };
113
+ const getNextAdjacentLink = (children, startIndex) => {
114
+ const separatorTokens = [];
115
+ let index = startIndex;
116
+ while (index < children.length && children[index].type === "text" && /^\s*$/.test(children[index].content || "")) {
117
+ separatorTokens.push(children[index]);
118
+ index++;
119
+ }
120
+ const link = collectLink(children, index);
121
+ if (!link) {
122
+ return undefined;
123
+ }
124
+ return {
125
+ ...link,
126
+ openIndex: index,
127
+ separatorTokens
128
+ };
129
+ };
130
+ state.tokens.forEach(blockToken => {
131
+ if (blockToken.type !== "inline" || !blockToken.children) {
132
+ return;
133
+ }
134
+ const mergedChildren = [];
135
+ const children = blockToken.children;
136
+ let index = 0;
137
+ while (index < children.length) {
138
+ const firstLink = collectLink(children, index);
139
+ if (!firstLink) {
140
+ mergedChildren.push(children[index]);
141
+ index++;
142
+ continue;
143
+ }
144
+ const linkTokens = [firstLink.open, ...children.slice(index + 1, firstLink.closeIndex)];
145
+ let nextIndex = firstLink.closeIndex + 1;
146
+ let mergedAnyLink = false;
147
+ let nextLink = getNextAdjacentLink(children, nextIndex);
148
+ while (nextLink && nextLink.href === firstLink.href && hasSameAttributes(firstLink.open, nextLink.open)) {
149
+ linkTokens.push(...nextLink.separatorTokens);
150
+ linkTokens.push(...children.slice(nextLink.openIndex + 1, nextLink.closeIndex));
151
+ nextIndex = nextLink.closeIndex + 1;
152
+ mergedAnyLink = true;
153
+ nextLink = getNextAdjacentLink(children, nextIndex);
154
+ }
155
+ if (mergedAnyLink) {
156
+ mergedChildren.push(...linkTokens, children[firstLink.closeIndex]);
157
+ index = nextIndex;
158
+ } else {
159
+ mergedChildren.push(children[index]);
160
+ index++;
161
+ }
162
+ }
163
+ blockToken.children = mergedChildren;
164
+ });
165
+ });
166
+
76
167
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
168
  md.render = function (text, env) {
169
+ const safeEnv = env ?? {};
78
170
  const processedText = preprocessText(text);
79
- return originalRender(processedText, env);
171
+ return md.renderer.render(md.parse(processedText, safeEnv), md.options, safeEnv);
80
172
  };
81
173
 
82
174
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
175
  md.renderInline = function (text, env) {
176
+ const safeEnv = env ?? {};
84
177
  const processedText = preprocessText(text);
85
- return originalRenderInline(processedText, env);
178
+ return md.renderer.render(md.parseInline(processedText, safeEnv), md.options, safeEnv);
86
179
  };
87
180
  });
88
181
 
@@ -5,6 +5,7 @@ import { getPostChatContext, initiatePostChat } from "./renderSurveyHelpers";
5
5
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
6
6
  import { ConversationState } from "../../../contexts/common/ConversationState";
7
7
  import { LazyLoadHandler } from "../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity";
8
+ import { resetActivityMiddlewareCache } from "../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware";
8
9
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
9
10
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
10
11
  import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
@@ -20,9 +21,7 @@ import { uuidv4 } from "@microsoft/omnichannel-chat-sdk";
20
21
  const prepareEndChat = async (props, facadeChatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter) => {
21
22
  try {
22
23
  var _conversationDetails$, _state$domainStates, _state$appStates5;
23
- const {
24
- chatConfig
25
- } = props;
24
+ const chatConfig = props.chatConfig;
26
25
 
27
26
  // Use Case: If call is ongoing, end the call by simulating end call button click
28
27
  endVoiceVideoCallIfOngoing(facadeChatSDK, dispatch);
@@ -99,12 +98,11 @@ const prepareEndChat = async (props, facadeChatSDK, state, dispatch, setAdapter,
99
98
  });
100
99
  }
101
100
  const persistentEnabled = isPersistentEnabled(chatConfig);
102
- const {
103
- appStates
104
- } = executeReducer(state, {
105
- type: LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
106
- payload: undefined
107
- });
101
+ const _executeReducer = executeReducer(state, {
102
+ type: LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
103
+ payload: undefined
104
+ }),
105
+ appStates = _executeReducer.appStates;
108
106
  const endedByCustomer = (appStates === null || appStates === void 0 ? void 0 : appStates.conversationEndedBy) === "Customer";
109
107
 
110
108
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -243,6 +241,7 @@ const endChat = async (props, facadeChatSDK, state, dispatch, setAdapter, setWeb
243
241
 
244
242
  // Call direct reset to ensure LazyLoadHandler gets reset regardless of broadcast timing
245
243
  LazyLoadHandler.directReset();
244
+ resetActivityMiddlewareCache();
246
245
  BroadcastService.postMessage({
247
246
  eventName: BroadcastEvent.PersistentConversationReset
248
247
  });
@@ -335,6 +334,10 @@ export const closeChatStateCleanUp = dispatch => {
335
334
  type: LiveChatWidgetActionType.SET_CITATIONS,
336
335
  payload: {}
337
336
  });
337
+ dispatch({
338
+ type: LiveChatWidgetActionType.SET_SHOW_EMAIL_TRANSCRIPT_PANE,
339
+ payload: false
340
+ });
338
341
 
339
342
  // Dismiss the chat disconnect notification banner if it was shown
340
343
  NotificationHandler.dismissNotification(NotificationScenarios.ChatDisconnect);