@microsoft/omnichannel-chat-widget 1.8.6 → 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 (258) 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/BotAuthActivitySubscriber.js +23 -6
  26. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
  27. package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
  28. package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
  29. package/lib/cjs/components/livechatwidget/common/authHelper.js +44 -4
  30. package/lib/cjs/components/livechatwidget/common/createAdapter.js +3 -2
  31. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +98 -5
  32. package/lib/cjs/components/livechatwidget/common/endChat.js +12 -9
  33. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +182 -1
  34. package/lib/cjs/components/livechatwidget/common/recoveryEligibilityTelemetry.js +60 -0
  35. package/lib/cjs/components/livechatwidget/common/startChat.js +31 -14
  36. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +160 -21
  37. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +16 -11
  38. package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +19 -12
  39. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +13 -6
  40. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  41. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +12 -5
  42. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  43. package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  44. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -7
  45. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +16 -7
  46. package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +10 -2
  47. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  48. package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  49. package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  50. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  51. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  52. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  53. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  54. package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  55. package/lib/cjs/components/webchatcontainerstateful/common/utils/citationA11y.js +195 -0
  56. package/lib/cjs/components/webchatcontainerstateful/interfaces/IWebChatAction.js +17 -1
  57. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  58. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  59. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  60. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  61. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  62. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +22 -6
  63. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  64. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -35
  65. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +199 -0
  66. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +29 -15
  67. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  68. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  69. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  70. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  71. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  72. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  73. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  74. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  75. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +14 -12
  76. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +16 -14
  77. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +18 -30
  78. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +10 -2
  79. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  80. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -12
  81. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  82. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +83 -0
  83. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  84. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -1
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -30
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  97. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  98. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  99. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  100. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +5 -0
  101. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  102. package/lib/cjs/contexts/createReducer.js +15 -0
  103. package/lib/cjs/controller/componentController.js +13 -1
  104. package/lib/cjs/hooks/useWindowDimensions.js +13 -5
  105. package/lib/cjs/package.json +1 -0
  106. package/lib/cjs/plugins/createChatTranscript.js +3 -4
  107. package/lib/cjs/plugins/newMessageEventHandler.js +20 -3
  108. package/lib/esm/common/Constants.js +5 -0
  109. package/lib/esm/common/facades/FacadeChatSDK.js +235 -10
  110. package/lib/esm/common/telemetry/TelemetryConstants.js +19 -0
  111. package/lib/esm/common/telemetry/TelemetryManager.js +6 -1
  112. package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +2 -3
  113. package/lib/esm/common/telemetry/sanitizeSasInPayload.js +84 -0
  114. package/lib/esm/common/utils.js +88 -14
  115. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +15 -5
  116. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +19 -9
  117. package/lib/esm/components/citationpanestateful/CitationDim.js +2 -3
  118. package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +26 -4
  119. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +22 -2
  120. package/lib/esm/components/dimlayer/DimLayer.js +1 -3
  121. package/lib/esm/components/draggable/DraggableChatWidget.js +34 -14
  122. package/lib/esm/components/draggable/DraggableEventEmitter.js +10 -1
  123. package/lib/esm/components/draggable/DraggableEventReceiver.js +1 -3
  124. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
  125. package/lib/esm/components/errorboundary/ErrorBoundary.js +4 -12
  126. package/lib/esm/components/footerstateful/FooterStateful.js +17 -8
  127. package/lib/esm/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
  128. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
  129. package/lib/esm/components/headerstateful/HeaderStateful.js +22 -10
  130. package/lib/esm/components/livechatwidget/LiveChatWidget.js +27 -4
  131. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +23 -6
  132. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
  133. package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
  134. package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
  135. package/lib/esm/components/livechatwidget/common/authHelper.js +44 -4
  136. package/lib/esm/components/livechatwidget/common/createAdapter.js +3 -2
  137. package/lib/esm/components/livechatwidget/common/createMarkdown.js +98 -5
  138. package/lib/esm/components/livechatwidget/common/endChat.js +12 -9
  139. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +182 -1
  140. package/lib/esm/components/livechatwidget/common/recoveryEligibilityTelemetry.js +52 -0
  141. package/lib/esm/components/livechatwidget/common/startChat.js +31 -14
  142. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +159 -20
  143. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +14 -9
  144. package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +17 -10
  145. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -5
  146. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  147. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +11 -4
  148. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  149. package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  150. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -6
  151. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +15 -6
  152. package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +9 -1
  153. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  154. package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  155. package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  156. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  157. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  158. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  159. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  160. package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  161. package/lib/esm/components/webchatcontainerstateful/common/utils/citationA11y.js +188 -0
  162. package/lib/esm/components/webchatcontainerstateful/interfaces/IWebChatAction.js +10 -1
  163. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  164. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  165. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  166. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  167. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  168. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +19 -4
  169. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  170. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -32
  171. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +193 -0
  172. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +28 -14
  173. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  174. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  175. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  176. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  177. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  178. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  179. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  180. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  181. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +13 -11
  182. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +15 -13
  183. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +17 -27
  184. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +9 -1
  185. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  186. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -10
  187. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  188. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +77 -0
  189. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  190. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -2
  191. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  192. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  193. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  194. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  195. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  196. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  197. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  198. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  199. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  200. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  201. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -31
  202. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  203. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  204. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  205. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  206. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +5 -0
  207. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  208. package/lib/esm/contexts/createReducer.js +15 -0
  209. package/lib/esm/controller/componentController.js +13 -1
  210. package/lib/esm/hooks/useWindowDimensions.js +13 -5
  211. package/lib/esm/plugins/createChatTranscript.js +3 -4
  212. package/lib/esm/plugins/newMessageEventHandler.js +20 -3
  213. package/lib/types/common/Constants.d.ts +4 -0
  214. package/lib/types/common/facades/FacadeChatSDK.d.ts +29 -0
  215. package/lib/types/common/facades/types/IFacadeChatSDKInput.d.ts +3 -1
  216. package/lib/types/common/telemetry/TelemetryConstants.d.ts +15 -2
  217. package/lib/types/common/telemetry/sanitizeSasInPayload.d.ts +24 -0
  218. package/lib/types/common/utils.d.ts +3 -1
  219. package/lib/types/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.d.ts +1 -0
  220. package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +2 -1
  221. package/lib/types/components/livechatwidget/common/authHelper.d.ts +9 -2
  222. package/lib/types/components/livechatwidget/common/recoveryEligibilityTelemetry.d.ts +17 -0
  223. package/lib/types/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.d.ts +1 -0
  224. package/lib/types/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.d.ts +6 -0
  225. package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +1 -1
  226. package/lib/types/components/webchatcontainerstateful/common/utils/citationA11y.d.ts +1 -0
  227. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
  228. package/lib/types/components/webchatcontainerstateful/interfaces/IBotAuthConfig.d.ts +7 -0
  229. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatAction.d.ts +16 -1
  230. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +7 -0
  231. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +14 -38
  232. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -0
  233. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.d.ts +18 -0
  234. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.d.ts +3 -0
  235. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.d.ts +2 -4
  236. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +2 -4
  237. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.d.ts +2 -4
  238. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.d.ts +10 -0
  239. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +2 -4
  240. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.d.ts +2 -2
  241. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.d.ts +2 -4
  242. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +2 -2
  243. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.d.ts +2 -4
  244. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.d.ts +2 -2
  245. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.d.ts +2 -4
  246. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.d.ts +2 -4
  247. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.d.ts +2 -4
  248. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.d.ts +2 -4
  249. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +2 -4
  250. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.d.ts +2 -4
  251. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.d.ts +2 -4
  252. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
  253. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.d.ts +2 -4
  254. package/lib/types/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.d.ts +7 -0
  255. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  256. package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +17 -0
  257. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  258. package/package.json +71 -57
@@ -15,10 +15,16 @@ var _NotificationScenarios = require("../webchatcontainerstateful/webchatcontrol
15
15
  var _Constants = require("../../common/Constants");
16
16
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
17
17
  var _defaultMiddlewareLocalizedTexts = require("../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
18
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
18
+ var _useChatContextStore3 = _interopRequireDefault(require("../../hooks/useChatContextStore"));
19
19
  var _useFacadeChatSDKStore = _interopRequireDefault(require("../../hooks/useFacadeChatSDKStore"));
20
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
21
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
22
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
23
+ 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."); }
24
+ 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; } }
25
+ 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; }
26
+ 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; } }
27
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
22
28
  let uiTimer;
23
29
  const EmailTranscriptPaneStateful = props => {
24
30
  var _props$controlProps;
@@ -31,19 +37,34 @@ const EmailTranscriptPaneStateful = props => {
31
37
  }, []);
32
38
  const initialTabIndexMap = new Map();
33
39
  let elements = [];
34
- const [state, dispatch] = (0, _useChatContextStore.default)();
35
- const [facadeChatSDK] = (0, _useFacadeChatSDKStore.default)();
36
- const [initialEmail, setInitialEmail] = (0, _react.useState)("");
37
- const closeEmailTranscriptPane = () => {
40
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
41
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
42
+ state = _useChatContextStore2[0],
43
+ dispatch = _useChatContextStore2[1];
44
+ const _useFacadeSDKStore = (0, _useFacadeChatSDKStore.default)(),
45
+ _useFacadeSDKStore2 = _slicedToArray(_useFacadeSDKStore, 1),
46
+ facadeChatSDK = _useFacadeSDKStore2[0];
47
+ const _useState = (0, _react.useState)(""),
48
+ _useState2 = _slicedToArray(_useState, 2),
49
+ initialEmail = _useState2[0],
50
+ setInitialEmail = _useState2[1];
51
+ // restoreFocus=false is used on the submit path: the notification banner
52
+ // (success or error) takes focus via NotificationHandler.setFocusOnNotificationCloseButton,
53
+ // so an intermediate restore to the chat-widget shell would otherwise cause SRs to
54
+ // announce "Enter <widget>" in between the dialog and the banner.
55
+ const closeEmailTranscriptPane = function () {
56
+ let restoreFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
38
57
  dispatch({
39
58
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_SHOW_EMAIL_TRANSCRIPT_PANE,
40
59
  payload: false
41
60
  });
42
- const previousFocusedElementId = state.appStates.previousElementIdOnFocusBeforeModalOpen;
43
- if (previousFocusedElementId) {
44
- (0, _utils.setFocusOnElement)("#" + previousFocusedElementId);
45
- } else {
46
- (0, _utils.setFocusOnSendBox)();
61
+ if (restoreFocus) {
62
+ const previousFocusedElementId = state.appStates.previousElementIdOnFocusBeforeModalOpen;
63
+ if (previousFocusedElementId) {
64
+ (0, _utils.setFocusOnElement)("#" + previousFocusedElementId);
65
+ } else {
66
+ (0, _utils.setFocusOnSendBox)();
67
+ }
47
68
  }
48
69
  dispatch({
49
70
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
@@ -54,23 +75,31 @@ const EmailTranscriptPaneStateful = props => {
54
75
  const onSend = (0, _react.useCallback)(async email => {
55
76
  var _state$domainStates;
56
77
  const liveChatContext = state === null || state === void 0 || (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.liveChatContext;
57
- closeEmailTranscriptPane();
78
+ closeEmailTranscriptPane(false);
58
79
  const chatTranscriptBody = {
59
80
  emailAddress: email,
60
81
  attachmentMessage: (props === null || props === void 0 ? void 0 : props.attachmentMessage) ?? "The following attachment was uploaded during the conversation:"
61
82
  };
62
83
  try {
63
- var _state$domainStates2;
84
+ var _state$domainStates2, _state$domainStates3;
64
85
  await (facadeChatSDK === null || facadeChatSDK === void 0 ? void 0 : facadeChatSDK.emailLiveChatTranscript(chatTranscriptBody, {
65
86
  liveChatContext
66
87
  }));
67
- _NotificationHandler.NotificationHandler.notifySuccess(_NotificationScenarios.NotificationScenarios.EmailAddressSaved, (state === null || state === void 0 || (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 || (_state$domainStates2 = _state$domainStates2.middlewareLocalizedTexts) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS) ?? (_defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts === null || _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts === void 0 ? void 0 : _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS));
88
+ const successMessage = (state === null || state === void 0 || (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 || (_state$domainStates2 = _state$domainStates2.middlewareLocalizedTexts) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS) ?? (_defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts === null || _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts === void 0 ? void 0 : _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS);
89
+ // Announce from a live region at document.body level so the
90
+ // screen reader speaks the confirmation immediately, without
91
+ // traversing the chat transcript on the way to the banner.
92
+ // Prefix with the explicit state word so SR users hear the outcome
93
+ // (visual users already see a success icon on the banner).
94
+ const successSrPrefix = (state === null || state === void 0 || (_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 || (_state$domainStates3 = _state$domainStates3.middlewareLocalizedTexts) === null || _state$domainStates3 === void 0 ? void 0 : _state$domainStates3.MIDDLEWARE_SR_PREFIX_SUCCESS) ?? _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_SR_PREFIX_SUCCESS;
95
+ (0, _utils.announceMessageImmediately)(`${successSrPrefix}${successMessage}`);
96
+ _NotificationHandler.NotificationHandler.notifySuccess(_NotificationScenarios.NotificationScenarios.EmailAddressSaved, successMessage);
68
97
  _TelemetryHelper.TelemetryHelper.logActionEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
69
98
  Event: _TelemetryConstants.TelemetryEvent.EmailTranscriptSent,
70
99
  Description: "Transcript sent to email successfully."
71
100
  });
72
101
  } catch (ex) {
73
- var _state$domainStates3;
102
+ var _state$domainStates4, _state$domainStates5;
74
103
  _TelemetryHelper.TelemetryHelper.logActionEventToAllTelemetry(_TelemetryConstants.LogLevel.ERROR, {
75
104
  Event: _TelemetryConstants.TelemetryEvent.EmailTranscriptFailed,
76
105
  Description: "Email transcript failed.",
@@ -78,8 +107,11 @@ const EmailTranscriptPaneStateful = props => {
78
107
  exception: ex
79
108
  }
80
109
  });
81
- const message = (0, _utils.formatTemplateString)((state === null || state === void 0 || (_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 || (_state$domainStates3 = _state$domainStates3.middlewareLocalizedTexts) === null || _state$domainStates3 === void 0 ? void 0 : _state$domainStates3.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR) ?? _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR, [email]);
82
- _NotificationHandler.NotificationHandler.notifyError(_NotificationScenarios.NotificationScenarios.EmailTranscriptError, (props === null || props === void 0 ? void 0 : props.bannerMessageOnError) ?? message);
110
+ const message = (0, _utils.formatTemplateString)((state === null || state === void 0 || (_state$domainStates4 = state.domainStates) === null || _state$domainStates4 === void 0 || (_state$domainStates4 = _state$domainStates4.middlewareLocalizedTexts) === null || _state$domainStates4 === void 0 ? void 0 : _state$domainStates4.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR) ?? _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR, [email]);
111
+ const bannerMessage = (props === null || props === void 0 ? void 0 : props.bannerMessageOnError) ?? message;
112
+ const errorSrPrefix = (state === null || state === void 0 || (_state$domainStates5 = state.domainStates) === null || _state$domainStates5 === void 0 || (_state$domainStates5 = _state$domainStates5.middlewareLocalizedTexts) === null || _state$domainStates5 === void 0 ? void 0 : _state$domainStates5.MIDDLEWARE_SR_PREFIX_ERROR) ?? _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_SR_PREFIX_ERROR;
113
+ (0, _utils.announceMessageImmediately)(`${errorSrPrefix}${bannerMessage}`);
114
+ _NotificationHandler.NotificationHandler.notifyError(_NotificationScenarios.NotificationScenarios.EmailTranscriptError, bannerMessage);
83
115
  }
84
116
  }, [props.attachmentMessage, props.bannerMessageOnError, facadeChatSDK, state.domainStates.liveChatContext]);
85
117
  const controlProps = {
@@ -102,7 +134,7 @@ const EmailTranscriptPaneStateful = props => {
102
134
 
103
135
  // Move focus to the first button
104
136
  (0, _react.useEffect)(() => {
105
- (0, _utils.preventFocusToMoveOutOfElement)(controlProps.id);
137
+ const cleanup = (0, _utils.preventFocusToMoveOutOfElement)(controlProps.id);
106
138
  const focusableElements = (0, _utils.findAllFocusableElement)(`#${controlProps.id}`);
107
139
  if (focusableElements) {
108
140
  focusableElements[0].focus();
@@ -117,6 +149,11 @@ const EmailTranscriptPaneStateful = props => {
117
149
  Event: _TelemetryConstants.TelemetryEvent.UXEmailTranscriptPaneCompleted,
118
150
  ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
119
151
  });
152
+ return () => {
153
+ // internal tracking: restore parent tab indices on unmount.
154
+ (0, _utils.setTabIndices)(elements, initialTabIndexMap, true);
155
+ cleanup();
156
+ };
120
157
  }, [initialEmail]);
121
158
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_DimLayer.DimLayer, {
122
159
  brightness: (controlProps === null || controlProps === void 0 ? void 0 : controlProps.brightnessValueOnDim) ?? "0.2"
@@ -20,9 +20,7 @@ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new T
20
20
  function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
21
21
  // eslint-disable-next-line @typescript-eslint/ban-types
22
22
  const RenderChildrenFunction = _ref => {
23
- let {
24
- children
25
- } = _ref;
23
+ let children = _ref.children;
26
24
  return typeof children === "function" ? children() : children;
27
25
  };
28
26
  let ErrorBoundary = /*#__PURE__*/function (_Component) {
@@ -39,9 +37,7 @@ let ErrorBoundary = /*#__PURE__*/function (_Component) {
39
37
  return _createClass(ErrorBoundary, [{
40
38
  key: "componentDidCatch",
41
39
  value: function componentDidCatch(error) {
42
- const {
43
- onError
44
- } = this.props;
40
+ const onError = this.props.onError;
45
41
  this.setState({
46
42
  hasError: true
47
43
  });
@@ -52,12 +48,8 @@ let ErrorBoundary = /*#__PURE__*/function (_Component) {
52
48
  }, {
53
49
  key: "render",
54
50
  value: function render() {
55
- const {
56
- children
57
- } = this.props;
58
- const {
59
- hasError
60
- } = this.state;
51
+ const children = this.props.children;
52
+ const hasError = this.state.hasError;
61
53
  return !hasError && /*#__PURE__*/_react.default.createElement(RenderChildrenFunction, null, children);
62
54
  }
63
55
  }]);
@@ -17,10 +17,16 @@ var _NotificationScenarios = require("../webchatcontainerstateful/webchatcontrol
17
17
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
18
18
  var _utils = require("../../common/utils");
19
19
  var _DownloadTranscriptStateful = require("./downloadtranscriptstateful/DownloadTranscriptStateful");
20
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
20
+ var _useChatContextStore3 = _interopRequireDefault(require("../../hooks/useChatContextStore"));
21
21
  var _useFacadeChatSDKStore = _interopRequireDefault(require("../../hooks/useFacadeChatSDKStore"));
22
22
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
23
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
24
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
25
+ 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."); }
26
+ 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; } }
27
+ 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; }
28
+ 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; } }
29
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
24
30
  let uiTimer;
25
31
 
26
32
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -32,17 +38,20 @@ const FooterStateful = props => {
32
38
  Event: _TelemetryConstants.TelemetryEvent.UXFooterStart
33
39
  });
34
40
  }, []);
35
- const [state, dispatch] = (0, _useChatContextStore.default)();
41
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
42
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
43
+ state = _useChatContextStore2[0],
44
+ dispatch = _useChatContextStore2[1];
36
45
  // hideFooterDisplay - the purpose of this is to keep the footer always "active",
37
46
  // but hide it visually in certain states (e.g., loading state) and show in some other states (e.g. active state).
38
47
  // The reason for this approach is to make sure that state variables for audio notification work correctly after minimizing
39
- const {
40
- footerProps,
41
- downloadTranscriptProps,
42
- audioNotificationProps,
43
- hideFooterDisplay
44
- } = props;
45
- const [facadeChatSDK] = (0, _useFacadeChatSDKStore.default)();
48
+ const footerProps = props.footerProps,
49
+ downloadTranscriptProps = props.downloadTranscriptProps,
50
+ audioNotificationProps = props.audioNotificationProps,
51
+ hideFooterDisplay = props.hideFooterDisplay;
52
+ const _useFacadeSDKStore = (0, _useFacadeChatSDKStore.default)(),
53
+ _useFacadeSDKStore2 = _slicedToArray(_useFacadeSDKStore, 1),
54
+ facadeChatSDK = _useFacadeSDKStore2[0];
46
55
  const controlProps = {
47
56
  id: "oc-lcw-footer",
48
57
  dir: state.domainStates.globalDir,
@@ -8,10 +8,8 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
9
9
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
10
10
  const AudioNotificationStateful = props => {
11
- const {
12
- audioSrc,
13
- isAudioMuted
14
- } = props;
11
+ const audioSrc = props.audioSrc,
12
+ isAudioMuted = props.isAudioMuted;
15
13
  const audioRef = (0, _react.useRef)(new Audio(audioSrc));
16
14
  (0, _react.useEffect)(() => {
17
15
  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
@@ -195,12 +195,10 @@ const downloadTranscript = async (facadeChatSDK, downloadTranscriptProps, state)
195
195
  if (typeof data === _Constants.Constants.String) {
196
196
  data = JSON.parse(data);
197
197
  }
198
- const {
199
- bannerMessageOnError,
200
- renderMarkDown,
201
- attachmentMessage,
202
- webChatTranscript
203
- } = downloadTranscriptProps;
198
+ const bannerMessageOnError = downloadTranscriptProps.bannerMessageOnError,
199
+ renderMarkDown = downloadTranscriptProps.renderMarkDown,
200
+ attachmentMessage = downloadTranscriptProps.attachmentMessage,
201
+ webChatTranscript = downloadTranscriptProps.webChatTranscript;
204
202
  if (data[_Constants.Constants.ChatMessagesJson] !== null && data[_Constants.Constants.ChatMessagesJson] !== undefined) {
205
203
  const useWebChatTranscript = (0, _utils.isNullOrUndefined)(webChatTranscript === null || webChatTranscript === void 0 ? void 0 : webChatTranscript.disabled) || (webChatTranscript === null || webChatTranscript === void 0 ? void 0 : webChatTranscript.disabled) === false;
206
204
  if (useWebChatTranscript) {
@@ -14,10 +14,16 @@ var _LiveChatWidgetActionType = require("../../contexts/common/LiveChatWidgetAct
14
14
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
15
15
  var _utils = require("../../common/utils");
16
16
  var _defaultOutOfOfficeHeaderStyleProps = require("./common/styleProps/defaultOutOfOfficeHeaderStyleProps");
17
- var _useChatAdapterStore = _interopRequireDefault(require("../../hooks/useChatAdapterStore"));
18
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
17
+ var _useChatAdapterStore3 = _interopRequireDefault(require("../../hooks/useChatAdapterStore"));
18
+ var _useChatContextStore3 = _interopRequireDefault(require("../../hooks/useChatContextStore"));
19
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
20
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
21
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
22
+ 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."); }
23
+ 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; } }
24
+ 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; }
25
+ 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; } }
26
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
21
27
  let uiTimer;
22
28
  const HeaderStateful = props => {
23
29
  var _state$domainStates, _headerProps$controlP, _headerProps$controlP2, _headerProps$controlP3, _outOfOfficeHeaderPro, _state$domainStates3;
@@ -27,19 +33,25 @@ const HeaderStateful = props => {
27
33
  Event: _TelemetryConstants.TelemetryEvent.UXHeaderStart
28
34
  });
29
35
  }, []);
30
- const [state, dispatch] = (0, _useChatContextStore.default)();
36
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
37
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
38
+ state = _useChatContextStore2[0],
39
+ dispatch = _useChatContextStore2[1];
31
40
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
- const [adapter] = (0, _useChatAdapterStore.default)();
33
- const {
34
- headerProps,
35
- outOfOfficeHeaderProps,
36
- endChat
37
- } = props;
41
+ const _useChatAdapterStore = (0, _useChatAdapterStore3.default)(),
42
+ _useChatAdapterStore2 = _slicedToArray(_useChatAdapterStore, 1),
43
+ adapter = _useChatAdapterStore2[0];
44
+ const headerProps = props.headerProps,
45
+ outOfOfficeHeaderProps = props.outOfOfficeHeaderProps,
46
+ endChat = props.endChat;
38
47
  //Setting OutOfOperatingHours Flag
39
48
  // Initialize with the current state value to prevent visual flicker
40
- const [outOfOperatingHours, setOutOfOperatingHours] = (0, _react.useState)(() => {
41
- return state.appStates.conversationState === _ConversationState.ConversationState.Closed && state.appStates.outsideOperatingHours;
42
- });
49
+ const _useState = (0, _react.useState)(() => {
50
+ return state.appStates.conversationState === _ConversationState.ConversationState.Closed && state.appStates.outsideOperatingHours;
51
+ }),
52
+ _useState2 = _slicedToArray(_useState, 2),
53
+ outOfOperatingHours = _useState2[0],
54
+ setOutOfOperatingHours = _useState2[1];
43
55
  const outOfOfficeStyleProps = Object.assign({}, _defaultOutOfOfficeHeaderStyleProps.defaultOutOfOfficeHeaderStyleProps, outOfOfficeHeaderProps === null || outOfOfficeHeaderProps === void 0 ? void 0 : outOfOfficeHeaderProps.styleProps);
44
56
 
45
57
  // For some reason state object is not getting updated values in this component
@@ -20,13 +20,28 @@ var _overridePropsOnMockIfApplicable = _interopRequireDefault(require("./common/
20
20
  var _registerTelemetryLoggers = require("./common/registerTelemetryLoggers");
21
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
22
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
23
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
24
+ 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."); }
25
+ 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; } }
26
+ 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; }
27
+ 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; } }
28
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
23
29
  const LiveChatWidget = props => {
24
30
  var _props$featureConfigP, _props$chatConfig, _props$chatConfig2;
25
31
  const reducer = (0, _createReducer.createReducer)();
26
- const [state, dispatch] = (0, _react.useReducer)(reducer, (0, _LiveChatWidgetContextInitialState.getLiveChatWidgetContextInitialState)(props));
32
+ const _useReducer = (0, _react.useReducer)(reducer, (0, _LiveChatWidgetContextInitialState.getLiveChatWidgetContextInitialState)(props)),
33
+ _useReducer2 = _slicedToArray(_useReducer, 2),
34
+ state = _useReducer2[0],
35
+ dispatch = _useReducer2[1];
27
36
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
- const [adapter, setAdapter] = (0, _react.useState)(undefined);
29
- const [facadeChatSDK, setFacadeChatSDK] = (0, _react.useState)(undefined);
37
+ const _useState = (0, _react.useState)(undefined),
38
+ _useState2 = _slicedToArray(_useState, 2),
39
+ adapter = _useState2[0],
40
+ setAdapter = _useState2[1];
41
+ const _useState3 = (0, _react.useState)(undefined),
42
+ _useState4 = _slicedToArray(_useState3, 2),
43
+ facadeChatSDK = _useState4[0],
44
+ setFacadeChatSDK = _useState4[1];
30
45
  const chatSDK = (0, _getMockChatSDKIfApplicable.getMockChatSDKIfApplicable)(props.chatSDK, props === null || props === void 0 ? void 0 : props.mock);
31
46
  const disableReauthentication = ((_props$featureConfigP = props.featureConfigProps) === null || _props$featureConfigP === void 0 ? void 0 : _props$featureConfigP.disableReauthentication) === true;
32
47
  (0, _overridePropsOnMockIfApplicable.default)(props);
@@ -34,8 +49,16 @@ const LiveChatWidget = props => {
34
49
  throw new Error("chatConfig is required");
35
50
  }
36
51
 
52
+ // Check configuration flags
37
53
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
- 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) || (0, _liveChatConfigUtils.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);
54
+ 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);
55
+ const persistentChatEnabled = (0, _liveChatConfigUtils.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);
56
+
57
+ // isAuthenticatedChat determines if FacadeChatSDK should require authentication:
58
+ // REGULAR AUTH FLOW (config-based):
59
+ // - Persistent chat enabled ? always authenticated
60
+ // - Auth settings exist ? authenticated from start
61
+ const isAuthenticatedChat = persistentChatEnabled || hasAuthClientFn;
39
62
  if (!facadeChatSDK) {
40
63
  var _props$mock;
41
64
  setFacadeChatSDK(new _FacadeChatSDK.FacadeChatSDK({
@@ -44,7 +44,7 @@ const extractSasUrl = async attachment => {
44
44
  }
45
45
  return sasUrl;
46
46
  };
47
- const fetchBotAuthConfig = async (retries, interval) => {
47
+ const fetchBotAuthConfig = async (retries, interval, fallback) => {
48
48
  _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
49
49
  Event: _TelemetryConstants.TelemetryEvent.SetBotAuthProviderFetchConfig
50
50
  });
@@ -60,13 +60,23 @@ const fetchBotAuthConfig = async (retries, interval) => {
60
60
  });
61
61
  if (retries === 1) {
62
62
  // Base Case
63
- throw new Error();
63
+ if (response !== undefined) {
64
+ return response;
65
+ }
66
+ if (fallback !== undefined) {
67
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.WARN, {
68
+ Event: _TelemetryConstants.TelemetryEvent.SetBotAuthProviderNotFound,
69
+ Description: `Failed to fetch bot auth config after maximum retries. Using fallback value: ${fallback}`
70
+ });
71
+ return fallback;
72
+ }
73
+ throw new Error("Failed to fetch bot auth config after maximum retries");
64
74
  }
65
75
  await delay(interval);
66
76
  if (response !== undefined) {
67
77
  return response;
68
78
  }
69
- return await fetchBotAuthConfig(--retries, interval);
79
+ return await fetchBotAuthConfig(--retries, interval, fallback);
70
80
  };
71
81
  let BotAuthActivitySubscriber = exports.BotAuthActivitySubscriber = /*#__PURE__*/function () {
72
82
  function BotAuthActivitySubscriber() {
@@ -76,6 +86,7 @@ let BotAuthActivitySubscriber = exports.BotAuthActivitySubscriber = /*#__PURE__*
76
86
  _defineProperty(this, "signInCardSeen", void 0);
77
87
  _defineProperty(this, "fetchBotAuthConfigRetries", void 0);
78
88
  _defineProperty(this, "fetchBotAuthConfigRetryInterval", void 0);
89
+ _defineProperty(this, "fallbackShowSignInCard", void 0);
79
90
  this.signInCardSeen = new Set();
80
91
  this.fetchBotAuthConfigRetries = 3;
81
92
  this.fetchBotAuthConfigRetryInterval = 1000;
@@ -85,6 +96,11 @@ let BotAuthActivitySubscriber = exports.BotAuthActivitySubscriber = /*#__PURE__*
85
96
  if (optionalParams.fetchBotAuthConfigRetryInterval) {
86
97
  this.fetchBotAuthConfigRetryInterval = optionalParams.fetchBotAuthConfigRetryInterval;
87
98
  }
99
+ this.fallbackShowSignInCard = optionalParams.fallbackShowSignInCard;
100
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
101
+ Event: _TelemetryConstants.TelemetryEvent.SetBotAuthProviderFetchConfig,
102
+ Description: `BotAuthActivitySubscriber initialized with fallbackShowSignInCard: ${optionalParams.fallbackShowSignInCard}`
103
+ });
88
104
  }
89
105
  return _createClass(BotAuthActivitySubscriber, [{
90
106
  key: "applicable",
@@ -129,7 +145,7 @@ let BotAuthActivitySubscriber = exports.BotAuthActivitySubscriber = /*#__PURE__*
129
145
  _omnichannelChatComponents.BroadcastService.postMessage(event);
130
146
  }
131
147
  try {
132
- const response = await fetchBotAuthConfig(this.fetchBotAuthConfigRetries, this.fetchBotAuthConfigRetryInterval);
148
+ const response = await fetchBotAuthConfig(this.fetchBotAuthConfigRetries, this.fetchBotAuthConfigRetryInterval, this.fallbackShowSignInCard);
133
149
  if (response === false) {
134
150
  _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
135
151
  Event: _TelemetryConstants.TelemetryEvent.SetBotAuthProviderHideCard
@@ -140,9 +156,10 @@ let BotAuthActivitySubscriber = exports.BotAuthActivitySubscriber = /*#__PURE__*
140
156
  });
141
157
  return activity;
142
158
  }
143
- } catch {
159
+ } catch (e) {
144
160
  _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
145
- Event: _TelemetryConstants.TelemetryEvent.SetBotAuthProviderNotFound
161
+ Event: _TelemetryConstants.TelemetryEvent.SetBotAuthProviderNotFound,
162
+ ExceptionDetails: e instanceof Error ? e.message : JSON.stringify(e)
146
163
  });
147
164
  //this is to ensure listener continues waiting for response
148
165
  if (this.signInCardSeen.has(signInId)) {
@@ -25,10 +25,8 @@ let HiddenAdaptiveCardActivitySubscriber = exports.HiddenAdaptiveCardActivitySub
25
25
  value:
26
26
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
27
  async function apply(activity) {
28
- const {
29
- attachments,
30
- attachment
31
- } = activity;
28
+ const attachments = activity.attachments,
29
+ attachment = activity.attachment;
32
30
  this.observer.next(false);
33
31
  _omnichannelChatComponents.BroadcastService.postMessage({
34
32
  eventName: _TelemetryConstants.BroadcastEvent.NewMessageReceived,
@@ -44,10 +42,8 @@ let HiddenAdaptiveCardActivitySubscriber = exports.HiddenAdaptiveCardActivitySub
44
42
  }, {
45
43
  key: "applicable",
46
44
  value: function applicable(activity) {
47
- const {
48
- attachments,
49
- attachment
50
- } = activity;
45
+ const attachments = activity.attachments,
46
+ attachment = activity.attachment;
51
47
 
52
48
  // Use `attachments` or `attachment` (whichever exists)
53
49
  const cards = attachments || [attachment];
@@ -57,9 +53,7 @@ let HiddenAdaptiveCardActivitySubscriber = exports.HiddenAdaptiveCardActivitySub
57
53
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
54
  item => _Constants.Constants.supportedAdaptiveCardContentTypes.indexOf(item === null || item === void 0 ? void 0 : item.contentType) >= 0);
59
55
  if (adaptiveCard && adaptiveCard.content) {
60
- const {
61
- body
62
- } = adaptiveCard.content;
56
+ const body = adaptiveCard.content.body;
63
57
  if (Array.isArray(body)) {
64
58
  // Check if all elements in `body` have `isVisible: false`
65
59
  const allInvisible = body.every(item => item.isVisible === false);
@@ -9,6 +9,7 @@ var ChatWidgetEvents = /*#__PURE__*/function (ChatWidgetEvents) {
9
9
  ChatWidgetEvents["FETCH_PERSISTENT_CHAT_HISTORY"] = "CHAT_WIDGET/FETCH_PERSISTENT_CHAT_HISTORY";
10
10
  ChatWidgetEvents["NO_MORE_HISTORY_AVAILABLE"] = "CHAT_WIDGET/NO_MORE_HISTORY_AVAILABLE";
11
11
  ChatWidgetEvents["HISTORY_LOAD_ERROR"] = "CHAT_WIDGET/HISTORY_LOAD_ERROR";
12
+ ChatWidgetEvents["HISTORY_BATCH_LOADED"] = "CHAT_WIDGET/HISTORY_BATCH_LOADED";
12
13
  return ChatWidgetEvents;
13
14
  }(ChatWidgetEvents || {});
14
15
  var _default = exports.default = ChatWidgetEvents;
@@ -132,6 +132,12 @@ let PersistentConversationHandler = /*#__PURE__*/function () {
132
132
  }
133
133
  const messagesDescOrder = (_ref = [...messages]) === null || _ref === void 0 ? void 0 : _ref.reverse();
134
134
  this.processHistoryMessages(messagesDescOrder);
135
+
136
+ // Signal that a batch of history messages has been added to the store.
137
+ // LazyLoadActivity subscribes to this to apply scroll anchoring after render.
138
+ (0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.HISTORY_BATCH_LOADED, {
139
+ messageCount: messages.length
140
+ });
135
141
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
136
142
  Event: _TelemetryConstants.TelemetryEvent.LCWPersistentHistoryPullCompleted,
137
143
  Description: "History pull completed successfully",
@@ -196,10 +202,8 @@ let PersistentConversationHandler = /*#__PURE__*/function () {
196
202
  try {
197
203
  var _this$facadeChatSDK;
198
204
  const response = await ((_this$facadeChatSDK = this.facadeChatSDK) === null || _this$facadeChatSDK === void 0 ? void 0 : _this$facadeChatSDK.fetchPersistentConversationHistory(options));
199
- const {
200
- chatMessages: messages,
201
- nextPageToken: pageToken
202
- } = response;
205
+ const messages = response.chatMessages,
206
+ pageToken = response.nextPageToken;
203
207
  this.pageToken = pageToken || null;
204
208
  if (pageToken === null) {
205
209
  this.isLastPull = true;
@@ -240,6 +244,9 @@ let PersistentConversationHandler = /*#__PURE__*/function () {
240
244
  value: function processMessageToActivity(message) {
241
245
  try {
242
246
  const activity = (0, _convertPersistentChatHistoryMessageToActivity.default)(message);
247
+ if (!activity) {
248
+ return null;
249
+ }
243
250
  activity.id = activity.id || `activity-${this.count}`;
244
251
  activity.channelData = {
245
252
  ...activity.channelData,
@@ -3,11 +3,22 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.removeAuthTokenProvider = exports.handleAuthentication = exports.getAuthClientFunction = void 0;
6
+ exports.removeAuthTokenProvider = exports.isMidAuthEnabled = exports.handleAuthentication = exports.getAuthClientFunction = void 0;
7
7
  var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
8
8
  var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
9
9
  var _Constants = require("../../../common/Constants");
10
10
  var _utils = require("../../../common/utils");
11
+ /**
12
+ * Check if mid-auth is enabled based on chatConfig.
13
+ * Mid-auth flag lives under LiveWSAndLiveChatEngJoin.msdyn_authenticatedsigninoptional.
14
+ */
15
+ const isMidAuthEnabled = chatConfig => {
16
+ var _chatConfig$LiveWSAnd, _value$toString, _value$toString$call$, _value$toString$call;
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ const value = chatConfig === null || chatConfig === void 0 || (_chatConfig$LiveWSAnd = chatConfig.LiveWSAndLiveChatEngJoin) === null || _chatConfig$LiveWSAnd === void 0 ? void 0 : _chatConfig$LiveWSAnd.msdyn_authenticatedsigninoptional;
19
+ 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";
20
+ };
21
+ exports.isMidAuthEnabled = isMidAuthEnabled;
11
22
  const getAuthClientFunction = chatConfig => {
12
23
  let authClientFunction = undefined;
13
24
  if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
@@ -19,12 +30,17 @@ const getAuthClientFunction = chatConfig => {
19
30
  exports.getAuthClientFunction = getAuthClientFunction;
20
31
  const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
21
32
  var _chatSDK$chatSDKConfi;
33
+ const midAuthEnabled = isMidAuthEnabled(chatConfig);
22
34
  const authClientFunction = getAuthClientFunction(chatConfig);
23
35
  if (getAuthToken && authClientFunction) {
24
36
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
25
37
  Event: _TelemetryConstants.TelemetryEvent.GetAuthTokenCalled
26
38
  });
27
- const token = await getAuthToken(authClientFunction);
39
+
40
+ // Only pass isMidAuthEnabled option when mid-auth is enabled.
41
+ const token = midAuthEnabled ? await getAuthToken(authClientFunction, {
42
+ isMidAuthEnabled: midAuthEnabled
43
+ }) : await getAuthToken(authClientFunction);
28
44
  if (!(0, _utils.isNullOrEmptyString)(token)) {
29
45
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
46
  chatSDK.setAuthTokenProvider(async () => {
@@ -35,8 +51,21 @@ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
35
51
  "token": token
36
52
  };
37
53
  } else {
38
- // instead of returning false, it's more appropiate to thrown an error to force error handling on the caller side
39
- // this will help to avoid the error to be ignored and the chat to be started
54
+ // For mid-auth scenarios, empty token means "user not signed in" - this is expected behavior.
55
+ // Return result: true with empty token so caller can decide to proceed unauthenticated.
56
+ if (midAuthEnabled) {
57
+ // Expected behavior for mid-auth: user not signed in
58
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
59
+ Event: _TelemetryConstants.TelemetryEvent.GetAuthTokenCalled,
60
+ Description: "Mid-auth: token provider returned empty; user not signed in"
61
+ });
62
+ return {
63
+ "result": true,
64
+ "token": null
65
+ };
66
+ }
67
+
68
+ // For non-mid-auth scenarios, empty token is an error
40
69
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
41
70
  Event: _TelemetryConstants.TelemetryEvent.ReceivedNullOrEmptyToken
42
71
  });
@@ -46,6 +75,17 @@ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
46
75
  var _chatSDK$chatSDKConfi2;
47
76
  const token = await ((_chatSDK$chatSDKConfi2 = chatSDK.chatSDKConfig) === null || _chatSDK$chatSDKConfi2 === void 0 ? void 0 : _chatSDK$chatSDKConfi2.getAuthToken());
48
77
  if ((0, _utils.isNullOrEmptyString)(token)) {
78
+ // For mid-auth scenarios, empty token from SDK's getAuthToken is also expected
79
+ if (midAuthEnabled) {
80
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
81
+ Event: _TelemetryConstants.TelemetryEvent.GetAuthTokenCalled,
82
+ Description: "Mid-auth: SDK getAuthToken returned empty; user not signed in"
83
+ });
84
+ return {
85
+ "result": true,
86
+ "token": null
87
+ };
88
+ }
49
89
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
50
90
  Event: _TelemetryConstants.TelemetryEvent.ReceivedNullOrEmptyToken,
51
91
  Description: "getAuthToken in chat SDK returns empty string"