@microsoft/omnichannel-chat-widget 0.1.0-main.bcfe8a3 → 0.1.0-main.bf74329

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 (285) hide show
  1. package/lib/cjs/common/Constants.js +2 -165
  2. package/lib/cjs/common/KeyCodes.js +0 -3
  3. package/lib/cjs/common/contextDataStore/DataStoreManager.js +0 -4
  4. package/lib/cjs/common/storage/default/defaultCacheManager.js +24 -0
  5. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +102 -0
  6. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +78 -0
  7. package/lib/cjs/common/telemetry/TelemetryConstants.js +26 -18
  8. package/lib/cjs/common/telemetry/TelemetryHelper.js +14 -57
  9. package/lib/cjs/common/telemetry/TelemetryManager.js +0 -31
  10. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +0 -2
  11. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +30 -36
  12. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +0 -9
  13. package/lib/cjs/common/utils.js +65 -93
  14. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +6 -44
  15. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +5 -23
  16. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +7 -32
  17. package/lib/cjs/components/dimlayer/DimLayer.js +0 -4
  18. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +8 -36
  19. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -8
  20. package/lib/cjs/components/footerstateful/FooterStateful.js +11 -42
  21. package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +0 -6
  22. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +7 -45
  23. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -8
  24. package/lib/cjs/components/headerstateful/HeaderStateful.js +16 -30
  25. package/lib/cjs/components/livechatwidget/LiveChatWidget.js +2 -14
  26. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +37 -0
  27. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +18 -0
  28. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  29. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +32 -0
  30. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +62 -0
  31. package/lib/cjs/components/livechatwidget/common/Deferred.js +35 -0
  32. package/lib/cjs/components/livechatwidget/common/authHelper.js +50 -0
  33. package/lib/cjs/components/livechatwidget/common/createAdapter.js +10 -9
  34. package/lib/cjs/components/livechatwidget/common/createFooter.js +4 -23
  35. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -10
  36. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +36 -43
  37. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +63 -38
  38. package/lib/cjs/components/livechatwidget/common/disposeTelemetryLoggers.js +0 -3
  39. package/lib/cjs/components/livechatwidget/common/endChat.js +50 -43
  40. package/lib/cjs/components/livechatwidget/common/getGeneralStylesForButton.js +0 -6
  41. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +7 -16
  42. package/lib/cjs/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -8
  43. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +27 -53
  44. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +68 -82
  45. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +4 -17
  46. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +2 -15
  47. package/lib/cjs/components/livechatwidget/common/shareObservable.js +41 -0
  48. package/lib/cjs/components/livechatwidget/common/startChat.js +145 -117
  49. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +0 -8
  50. package/lib/cjs/components/livechatwidget/common/updateSessionDataForTelemetry.js +2 -11
  51. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +203 -217
  52. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +4 -17
  53. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +4 -17
  54. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +4 -17
  55. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +32 -23
  56. package/lib/cjs/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  57. package/lib/cjs/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +13 -0
  58. package/lib/cjs/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  59. package/lib/cjs/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  60. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +10 -42
  61. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +3 -33
  62. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +2 -24
  63. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +29 -34
  64. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -7
  65. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -6
  66. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  67. package/lib/cjs/components/webchatcontainerstateful/common/mockadapter.js +9 -26
  68. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +3 -16
  69. package/lib/cjs/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -24
  70. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +3 -15
  71. package/lib/cjs/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -8
  72. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  73. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +0 -4
  74. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +0 -4
  75. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  76. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  77. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  78. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  79. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  80. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  81. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  82. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  83. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +0 -7
  84. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -5
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +17 -41
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +9 -19
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +23 -60
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +7 -15
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +2 -13
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +0 -16
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +10 -0
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -3
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -3
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +10 -0
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -9
  97. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +2 -30
  98. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +2 -12
  99. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +6 -28
  100. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +2 -11
  101. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +13 -30
  102. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +3 -9
  103. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +6 -34
  104. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +1 -10
  105. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +1 -12
  106. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +5 -18
  107. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +1 -9
  108. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -9
  109. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -34
  110. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +1 -10
  111. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +7 -11
  112. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +5 -14
  113. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -21
  114. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +0 -12
  115. package/lib/cjs/contexts/ChatAdapterStore.js +0 -2
  116. package/lib/cjs/contexts/ChatContextStore.js +0 -2
  117. package/lib/cjs/contexts/ChatSDKStore.js +0 -2
  118. package/lib/cjs/contexts/common/ConversationState.js +3 -3
  119. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +2 -2
  120. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +10 -12
  121. package/lib/cjs/contexts/createReducer.js +140 -103
  122. package/lib/cjs/controller/componentController.js +3 -32
  123. package/lib/cjs/hooks/useChatAdapterStore.js +0 -6
  124. package/lib/cjs/hooks/useChatContextStore.js +0 -6
  125. package/lib/cjs/hooks/useChatSDKStore.js +0 -6
  126. package/lib/cjs/index.js +0 -5
  127. package/lib/cjs/plugins/newMessageEventHandler.js +15 -36
  128. package/lib/esm/common/Constants.js +2 -153
  129. package/lib/esm/common/KeyCodes.js +0 -2
  130. package/lib/esm/common/contextDataStore/DataStoreManager.js +0 -2
  131. package/lib/esm/common/storage/default/defaultCacheManager.js +16 -0
  132. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +95 -0
  133. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +70 -0
  134. package/lib/esm/common/telemetry/TelemetryConstants.js +30 -15
  135. package/lib/esm/common/telemetry/TelemetryHelper.js +14 -45
  136. package/lib/esm/common/telemetry/TelemetryManager.js +0 -18
  137. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +28 -24
  138. package/lib/esm/common/telemetry/loggers/consoleLogger.js +0 -5
  139. package/lib/esm/common/utils.js +60 -50
  140. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +6 -15
  141. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +5 -6
  142. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +9 -13
  143. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +8 -15
  144. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -6
  145. package/lib/esm/components/footerstateful/FooterStateful.js +13 -23
  146. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +7 -35
  147. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -6
  148. package/lib/esm/components/headerstateful/HeaderStateful.js +16 -15
  149. package/lib/esm/components/livechatwidget/LiveChatWidget.js +2 -2
  150. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +30 -0
  151. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +11 -0
  152. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  153. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +25 -0
  154. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +55 -0
  155. package/lib/esm/components/livechatwidget/common/Deferred.js +28 -0
  156. package/lib/esm/components/livechatwidget/common/authHelper.js +42 -0
  157. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -4
  158. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -16
  159. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -5
  160. package/lib/esm/components/livechatwidget/common/createMarkdown.js +38 -37
  161. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +65 -25
  162. package/lib/esm/components/livechatwidget/common/endChat.js +52 -28
  163. package/lib/esm/components/livechatwidget/common/getGeneralStylesForButton.js +0 -2
  164. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +9 -11
  165. package/lib/esm/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -5
  166. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +30 -20
  167. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +71 -68
  168. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +4 -9
  169. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +4 -7
  170. package/lib/esm/components/livechatwidget/common/shareObservable.js +35 -0
  171. package/lib/esm/components/livechatwidget/common/startChat.js +147 -96
  172. package/lib/esm/components/livechatwidget/common/updateSessionDataForTelemetry.js +4 -2
  173. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +208 -156
  174. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +4 -5
  175. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +4 -5
  176. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +4 -5
  177. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +32 -11
  178. package/lib/esm/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  179. package/lib/esm/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +6 -0
  180. package/lib/esm/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  181. package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  182. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -26
  183. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +5 -9
  184. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +2 -6
  185. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +27 -9
  186. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  187. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -2
  188. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  189. package/lib/esm/components/webchatcontainerstateful/common/mockadapter.js +9 -18
  190. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +3 -12
  191. package/lib/esm/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -16
  192. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +3 -5
  193. package/lib/esm/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -6
  194. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  195. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +0 -2
  196. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +0 -2
  197. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  198. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  199. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  200. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  201. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  202. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  203. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  204. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  205. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +2 -5
  206. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -4
  207. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +17 -26
  208. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +11 -11
  209. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +23 -38
  210. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +9 -8
  211. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +2 -9
  212. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +0 -14
  213. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  214. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +3 -0
  215. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -1
  216. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -1
  217. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +3 -0
  218. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -7
  219. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +4 -28
  220. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +3 -3
  221. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +7 -14
  222. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +3 -3
  223. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +15 -19
  224. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +5 -8
  225. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +6 -29
  226. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +3 -7
  227. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +3 -8
  228. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +5 -13
  229. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +3 -7
  230. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -7
  231. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +15 -27
  232. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +3 -5
  233. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +9 -9
  234. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +7 -9
  235. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -13
  236. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +0 -5
  237. package/lib/esm/contexts/ChatAdapterStore.js +2 -1
  238. package/lib/esm/contexts/ChatContextStore.js +2 -1
  239. package/lib/esm/contexts/ChatSDKStore.js +2 -1
  240. package/lib/esm/contexts/common/ConversationState.js +3 -3
  241. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +2 -2
  242. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +10 -8
  243. package/lib/esm/contexts/createReducer.js +140 -100
  244. package/lib/esm/controller/componentController.js +4 -3
  245. package/lib/esm/hooks/useChatAdapterStore.js +0 -4
  246. package/lib/esm/hooks/useChatContextStore.js +0 -4
  247. package/lib/esm/hooks/useChatSDKStore.js +0 -4
  248. package/lib/esm/plugins/newMessageEventHandler.js +15 -26
  249. package/lib/types/common/Constants.d.ts +2 -0
  250. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  251. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  252. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  253. package/lib/types/common/telemetry/TelemetryConstants.d.ts +15 -2
  254. package/lib/types/common/utils.d.ts +7 -3
  255. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  256. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  257. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  258. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  259. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  260. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  261. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  262. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  263. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -4
  264. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  265. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -2
  266. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  267. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +3 -2
  268. package/lib/types/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.d.ts +2 -2
  269. package/lib/types/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.d.ts +5 -0
  270. package/lib/types/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.d.ts +4 -0
  271. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
  272. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  273. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  274. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  275. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +4 -1
  276. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  277. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  278. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  279. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.d.ts +3 -0
  280. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.d.ts +3 -0
  281. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  282. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -2
  283. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +3 -2
  284. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  285. package/package.json +5 -4
@@ -10,22 +10,22 @@ import { NotificationScenarios } from "../webchatcontainerstateful/webchatcontro
10
10
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
11
11
  import { downloadTranscript } from "./downloadtranscriptstateful/DownloadTranscriptStateful";
12
12
  import useChatContextStore from "../../hooks/useChatContextStore";
13
- import useChatSDKStore from "../../hooks/useChatSDKStore"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ import useChatSDKStore from "../../hooks/useChatSDKStore";
14
14
 
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
16
  export const FooterStateful = props => {
16
17
  var _footerProps$controlP3, _footerProps$controlP4;
17
-
18
- const [state, dispatch] = useChatContextStore(); // hideFooterDisplay - the purpose of this is to keep the footer always "active",
18
+ const [state, dispatch] = useChatContextStore();
19
+ // hideFooterDisplay - the purpose of this is to keep the footer always "active",
19
20
  // but hide it visually in certain states (e.g., loading state) and show in some other states (e.g. active state).
20
21
  // The reason for this approach is to make sure that state variables for audio notification work correctly after minimizing
21
-
22
22
  const {
23
23
  footerProps,
24
24
  downloadTranscriptProps,
25
25
  audioNotificationProps,
26
26
  hideFooterDisplay
27
- } = props; // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
-
27
+ } = props;
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
29
  const chatSDK = useChatSDKStore();
30
30
  const controlProps = {
31
31
  id: "oc-lcw-footer",
@@ -49,21 +49,17 @@ export const FooterStateful = props => {
49
49
  },
50
50
  onEmailTranscriptClick: () => {
51
51
  var _footerProps$controlP, _footerProps$controlP2;
52
-
53
52
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
54
53
  Event: TelemetryEvent.EmailTranscriptButtonClicked,
55
54
  Description: "Email Transcript button clicked."
56
55
  });
57
- const emailTranscriptButtonId = (footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP = footerProps.controlProps) === null || _footerProps$controlP === void 0 ? void 0 : (_footerProps$controlP2 = _footerProps$controlP.emailTranscriptButtonProps) === null || _footerProps$controlP2 === void 0 ? void 0 : _footerProps$controlP2.id) ?? "oc-lcw-footer-emailtranscript-button";
58
- const emailTranscriptButton = document.getElementById(emailTranscriptButtonId);
59
-
60
- if (emailTranscriptButton) {
56
+ const emailTranscriptButtonId = (footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP = footerProps.controlProps) === null || _footerProps$controlP === void 0 ? void 0 : (_footerProps$controlP2 = _footerProps$controlP.emailTranscriptButtonProps) === null || _footerProps$controlP2 === void 0 ? void 0 : _footerProps$controlP2.id) ?? `${controlProps.id}-emailtranscript-button`;
57
+ if (emailTranscriptButtonId) {
61
58
  dispatch({
62
- type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
63
- payload: emailTranscriptButton
59
+ type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
60
+ payload: emailTranscriptButtonId
64
61
  });
65
62
  }
66
-
67
63
  dispatch({
68
64
  type: LiveChatWidgetActionType.SET_SHOW_EMAIL_TRANSCRIPT_PANE,
69
65
  payload: true
@@ -80,18 +76,12 @@ export const FooterStateful = props => {
80
76
  });
81
77
  },
82
78
  ...(footerProps === null || footerProps === void 0 ? void 0 : footerProps.controlProps),
83
- audioNotificationButtonProps: { ...(footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP3 = footerProps.controlProps) === null || _footerProps$controlP3 === void 0 ? void 0 : _footerProps$controlP3.audioNotificationButtonProps),
79
+ audioNotificationButtonProps: {
80
+ ...(footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP3 = footerProps.controlProps) === null || _footerProps$controlP3 === void 0 ? void 0 : _footerProps$controlP3.audioNotificationButtonProps),
84
81
  isAudioMuted: state.appStates.isAudioMuted
85
82
  }
86
83
  };
87
- const footerId = (controlProps === null || controlProps === void 0 ? void 0 : controlProps.id) ?? "oc-lcw-footer";
88
- const footer = document.getElementById(footerId);
89
-
90
- if (footer) {
91
- footer.style.display = hideFooterDisplay ? "none" : "";
92
- }
93
-
94
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Footer, {
84
+ return /*#__PURE__*/React.createElement(React.Fragment, null, !hideFooterDisplay && /*#__PURE__*/React.createElement(Footer, {
95
85
  componentOverrides: footerProps === null || footerProps === void 0 ? void 0 : footerProps.componentOverrides,
96
86
  controlProps: controlProps,
97
87
  styleProps: footerProps === null || footerProps === void 0 ? void 0 : footerProps.styleProps
@@ -3,27 +3,21 @@ import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcon
3
3
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
4
4
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
5
5
  import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
6
-
7
6
  const processDisplayName = displayName => {
8
7
  // if displayname matches "teamsvisitor:<some alphanumeric string>", we replace it with "Customer"
9
8
  const displayNameRegex = ".+:.+";
10
9
  const matchedTeamsDisplayName = displayName.match(displayNameRegex);
11
-
12
10
  if (displayName.indexOf("teamsvisitor") >= 0 && matchedTeamsDisplayName && matchedTeamsDisplayName.length > 0) {
13
11
  displayName = "Customer";
14
12
  }
15
-
16
13
  return displayName;
17
14
  };
18
-
19
15
  const constructIconName = displayName => {
20
16
  if (!displayName) {
21
17
  return "";
22
18
  }
23
-
24
19
  let iconName = "C";
25
20
  const displayNameSplit = displayName.split(" ");
26
-
27
21
  if (displayNameSplit.length > 1) {
28
22
  // get the first letter of name and surname
29
23
  iconName = displayNameSplit[0][0] + displayNameSplit[1][0];
@@ -31,55 +25,42 @@ const constructIconName = displayName => {
31
25
  // get the first letter of name
32
26
  iconName = displayNameSplit[0][0];
33
27
  }
34
-
35
28
  return iconName;
36
29
  };
37
-
38
30
  const processCreatedDateTime = (createdDateTime, chatCount) => {
39
- const formattedDate = new Date(createdDateTime); // TODO: Localization:
40
-
41
- const formattedTimeString = formattedDate.toLocaleTimeString("en-us"
42
- /* Bootstrapper.LiveChatConfiguration.chatWidgetLocale */
43
- , {
31
+ const formattedDate = new Date(createdDateTime);
32
+ // TODO: Localization:
33
+ const formattedTimeString = formattedDate.toLocaleTimeString("en-us" /* Bootstrapper.LiveChatConfiguration.chatWidgetLocale */, {
44
34
  hour: "2-digit",
45
35
  minute: "2-digit"
46
36
  });
47
37
  const formattedSplitTimeString = formattedTimeString.split(" ");
48
38
  let finalizedTimeString = "";
49
-
50
39
  if (formattedSplitTimeString && formattedSplitTimeString.length > 1) {
51
40
  finalizedTimeString = formattedSplitTimeString[0] + " " + formattedSplitTimeString[1];
52
41
  }
53
-
54
42
  if (chatCount == 0) {
55
43
  return formattedDate.toLocaleDateString("en-us") + " " + finalizedTimeString;
56
44
  }
57
-
58
45
  return finalizedTimeString;
59
46
  };
60
-
61
47
  const processContent = (transcriptContent, isAgentChat, renderMarkDown) => {
62
48
  if (transcriptContent.toString().toLowerCase().indexOf(TranscriptConstants.TranscriptMessageEmojiMessageType) >= 0) {
63
49
  // eslint-disable-next-line no-useless-escape
64
50
  const emojiRegex = "<img src=\"http.*:\/\/.+\/objects\/.+\/views.+\">";
65
51
  const matchedEmojiImgTag = transcriptContent.match(emojiRegex);
66
-
67
52
  if (matchedEmojiImgTag && matchedEmojiImgTag.length > 0 && transcriptContent.toString().toLowerCase().indexOf(matchedEmojiImgTag[0]) >= 0) {
68
53
  transcriptContent = transcriptContent.replace(matchedEmojiImgTag[0], "");
69
54
  }
70
55
  }
71
-
72
56
  if (!isAgentChat && transcriptContent.toString().toLowerCase().indexOf("a href") >= 0 && transcriptContent.toString().toLowerCase().indexOf("target") >= 0) {
73
57
  transcriptContent = transcriptContent.slice(0, transcriptContent.toString().indexOf("target")) + " style='color:white' " + transcriptContent.slice(transcriptContent.toString().indexOf("target"));
74
58
  }
75
-
76
59
  if (renderMarkDown) {
77
60
  transcriptContent = renderMarkDown(transcriptContent);
78
61
  }
79
-
80
62
  return transcriptContent;
81
63
  };
82
-
83
64
  const beautifyChatTranscripts = (chatTranscripts, renderMarkDown, attachmentMessage) => {
84
65
  const chats = JSON.parse(chatTranscripts).reverse();
85
66
  const docTypeTag = "<!DOCTYPE html>";
@@ -94,8 +75,9 @@ const beautifyChatTranscripts = (chatTranscripts, renderMarkDown, attachmentMess
94
75
  let tabIndex = 1;
95
76
  const mainTranscriptSection = "<div class='allTranscripts' style='max-width:60%;min-width:30%;margin-left:20%;background-color:#FFFFFF;'>";
96
77
  let previousDisplayName = "";
97
- let chatCount = 0; // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
+ let chatCount = 0;
98
79
 
80
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
99
81
  chats.forEach(value => {
100
82
  let dialogNameMarginTop = "6px";
101
83
  let dialogboxMarginleft = "40px";
@@ -111,7 +93,6 @@ const beautifyChatTranscripts = (chatTranscripts, renderMarkDown, attachmentMess
111
93
  const isInternalMessage = value.deliveryMode && value.deliveryMode.toLowerCase() === TranscriptConstants.InternalMode;
112
94
  const isHiddenMessage = value.tags && value.tags.toLowerCase().indexOf(Constants.hiddenTag.toLowerCase()) !== -1;
113
95
  const shouldIgnoreMessage = isSystemMessage || isControlMessage || isAdaptiveCard || isInternalMessage || isHiddenMessage;
114
-
115
96
  if (shouldIgnoreMessage) {
116
97
  return;
117
98
  } else if (value.from) {
@@ -127,19 +108,15 @@ const beautifyChatTranscripts = (chatTranscripts, renderMarkDown, attachmentMess
127
108
  displayName = value.from.user.displayName;
128
109
  dialogColor = TranscriptConstants.CustomerDialogColor;
129
110
  }
130
-
131
111
  displayName = processDisplayName(displayName);
132
112
  iconName = constructIconName(displayName);
133
-
134
113
  if (value.attachments && value.attachments.length > 0 && value.attachments[0].name) {
135
114
  fileAttachmentName = value.attachments[0].name;
136
115
  value.content = attachmentMessage ? attachmentMessage + " " + fileAttachmentName : "The following attachment was uploaded during the conversation: " + fileAttachmentName;
137
116
  }
138
117
  }
139
-
140
118
  let displayNamePlaceholder = processCreatedDateTime(value.createdDateTime, chatCount);
141
119
  let iconPara = "";
142
-
143
120
  if (displayName !== previousDisplayName) {
144
121
  dialogboxMarginleft = "0px";
145
122
  displayNamePlaceholder = "<b>" + displayName + " </b> " + processCreatedDateTime(value.createdDateTime, chatCount);
@@ -150,17 +127,14 @@ const beautifyChatTranscripts = (chatTranscripts, renderMarkDown, attachmentMess
150
127
  </div>";
151
128
  tabIndex++;
152
129
  }
153
-
154
130
  if (displayName !== previousDisplayName) {
155
131
  if (previousDisplayName === "") {
156
132
  dialogNameMarginTop = "0px";
157
133
  }
158
-
159
134
  if (previousDisplayName !== "") {
160
135
  dialogNameMarginTop = "20px";
161
136
  }
162
137
  }
163
-
164
138
  const displayNameDiv = "<div style='margin-right:-2px;margin-top:" + dialogNameMarginTop + ";margin-bottom:-2px;margin-left:42px;top:-2px;position:relative;'>\
165
139
  <font tabindex ='" + tabIndex + "' size = '1px' color='#000000' style='font-family:Segoe UI,SegoeUI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:500;'>\
166
140
  " + displayNamePlaceholder + "\
@@ -174,16 +148,14 @@ const beautifyChatTranscripts = (chatTranscripts, renderMarkDown, attachmentMess
174
148
  });
175
149
  const str = docTypeTag + docStartTag + docMetaTag + bodyStartTag + mainTranscriptSection + beautifiedChats + divEndTag + bodyEndTag + docEndTag;
176
150
  return str;
177
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
178
-
151
+ };
179
152
 
153
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
180
154
  export const downloadTranscript = async (chatSDK, renderMarkDown, bannerMessageOnError, attachmentMessage) => {
181
155
  let data = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getLiveChatTranscript());
182
-
183
156
  if (typeof data === Constants.String) {
184
157
  data = JSON.parse(data);
185
158
  }
186
-
187
159
  if (data[Constants.ChatMessagesJson] !== null && data[Constants.ChatMessagesJson] !== undefined) {
188
160
  const chatTranscripts = window.btoa(encodeURIComponent(beautifyChatTranscripts(data[Constants.ChatMessagesJson], renderMarkDown, attachmentMessage)));
189
161
  const byteCharacters = decodeURIComponent(window.atob(chatTranscripts));
@@ -14,10 +14,10 @@ describe("DownloadTranscriptStateful unit test", () => {
14
14
  };
15
15
  const chatSDK = new OmnichannelChatSDK(omnichannelConfig);
16
16
  jest.spyOn(chatSDK, "getLiveChatTranscript").mockResolvedValue(Promise.resolve());
17
-
18
17
  try {
19
18
  await chatSDK.getLiveChatTranscript();
20
- expect(chatSDK.getLiveChatTranscript).toHaveBeenCalledTimes(1); // eslint-disable-next-line no-empty
19
+ expect(chatSDK.getLiveChatTranscript).toHaveBeenCalledTimes(1);
20
+ // eslint-disable-next-line no-empty
21
21
  } catch (ex) {}
22
22
  });
23
23
  it("Method getLiveChatTranscript throws exception", async () => {
@@ -29,9 +29,9 @@ describe("DownloadTranscriptStateful unit test", () => {
29
29
  };
30
30
  const chatSDK = new OmnichannelChatSDK(omnichannelConfig);
31
31
  jest.spyOn(chatSDK, "getLiveChatTranscript").mockRejectedValue(new Error(errorMessage));
32
-
33
32
  try {
34
- await chatSDK.getLiveChatTranscript(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ await chatSDK.getLiveChatTranscript();
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
35
  } catch (ex) {
36
36
  expect(ex.message).toEqual(errorMessage);
37
37
  }
@@ -44,9 +44,9 @@ describe("DownloadTranscriptStateful unit test", () => {
44
44
  widgetId: ""
45
45
  };
46
46
  const chatSDK = new OmnichannelChatSDK(omnichannelConfig);
47
-
48
47
  try {
49
- await chatSDK.getLiveChatTranscript(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ await chatSDK.getLiveChatTranscript();
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
50
  } catch (ex) {
51
51
  expect(ex.message).toEqual(errorMessage);
52
52
  }
@@ -9,16 +9,15 @@ import useChatAdapterStore from "../../hooks/useChatAdapterStore";
9
9
  import useChatContextStore from "../../hooks/useChatContextStore";
10
10
  export const HeaderStateful = props => {
11
11
  var _state$domainStates$l, _state$domainStates$l2, _headerProps$controlP, _headerProps$controlP2, _headerProps$controlP3, _outOfOfficeHeaderPro;
12
-
13
- const [state, dispatch] = useChatContextStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
-
12
+ const [state, dispatch] = useChatContextStore();
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
14
  const [adapter] = useChatAdapterStore();
16
15
  const {
17
16
  headerProps,
18
17
  outOfOfficeHeaderProps,
19
18
  endChat
20
- } = props; //Setting OutOfOperatingHours Flag
21
-
19
+ } = props;
20
+ //Setting OutOfOperatingHours Flag
22
21
  const [outOfOperatingHours, setOutOfOperatingHours] = useState(((_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : (_state$domainStates$l2 = _state$domainStates$l.LiveWSAndLiveChatEngJoin) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.OutOfOperatingHours) === "True");
23
22
  const outOfOfficeStyleProps = Object.assign({}, defaultOutOfOfficeHeaderStyleProps, outOfOfficeHeaderProps === null || outOfOfficeHeaderProps === void 0 ? void 0 : outOfOfficeHeaderProps.styleProps);
24
23
  const conversationState = useRef(state.appStates.conversationState);
@@ -36,11 +35,11 @@ export const HeaderStateful = props => {
36
35
  });
37
36
  },
38
37
  onCloseClick: async () => {
38
+ var _props$headerProps, _props$headerProps$co, _props$headerProps$co2;
39
39
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
40
40
  Event: TelemetryEvent.HeaderCloseButtonClicked,
41
41
  Description: "Header Close button clicked."
42
42
  });
43
-
44
43
  if (conversationState.current === ConversationState.Active) {
45
44
  dispatch({
46
45
  type: LiveChatWidgetActionType.SET_SHOW_CONFIRMATION,
@@ -49,17 +48,20 @@ export const HeaderStateful = props => {
49
48
  } else {
50
49
  const skipEndChatSDK = true;
51
50
  const skipCloseChat = false;
52
- await endChat(adapter, skipEndChatSDK, skipCloseChat);
51
+ const postMessageToOtherTabs = true;
52
+ await endChat(adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTabs);
53
+ }
54
+ const closeButtonId = ((_props$headerProps = props.headerProps) === null || _props$headerProps === void 0 ? void 0 : (_props$headerProps$co = _props$headerProps.controlProps) === null || _props$headerProps$co === void 0 ? void 0 : (_props$headerProps$co2 = _props$headerProps$co.closeButtonProps) === null || _props$headerProps$co2 === void 0 ? void 0 : _props$headerProps$co2.id) ?? `${controlProps.id}-close-button`;
55
+ if (closeButtonId) {
56
+ dispatch({
57
+ type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
58
+ payload: closeButtonId
59
+ });
53
60
  }
54
-
55
- dispatch({
56
- type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
57
- payload: document.getElementById(`${controlProps.id}-closebutton`)
58
- });
59
61
  },
60
62
  ...(headerProps === null || headerProps === void 0 ? void 0 : headerProps.controlProps),
61
- hideTitle: state.appStates.conversationState === ConversationState.Loading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP = headerProps.controlProps) === null || _headerProps$controlP === void 0 ? void 0 : _headerProps$controlP.hideTitle),
62
- hideIcon: state.appStates.conversationState === ConversationState.Loading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP2 = headerProps.controlProps) === null || _headerProps$controlP2 === void 0 ? void 0 : _headerProps$controlP2.hideIcon),
63
+ hideTitle: state.appStates.conversationState === ConversationState.Loading || state.appStates.conversationState === ConversationState.PostchatLoading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP = headerProps.controlProps) === null || _headerProps$controlP === void 0 ? void 0 : _headerProps$controlP.hideTitle),
64
+ hideIcon: state.appStates.conversationState === ConversationState.Loading || state.appStates.conversationState === ConversationState.PostchatLoading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP2 = headerProps.controlProps) === null || _headerProps$controlP2 === void 0 ? void 0 : _headerProps$controlP2.hideIcon),
63
65
  hideCloseButton: state.appStates.conversationState === ConversationState.Loading || state.appStates.conversationState === ConversationState.Prechat || state.appStates.conversationState === ConversationState.ReconnectChat || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP3 = headerProps.controlProps) === null || _headerProps$controlP3 === void 0 ? void 0 : _headerProps$controlP3.hideCloseButton)
64
66
  };
65
67
  const outOfOfficeControlProps = {
@@ -81,7 +83,6 @@ export const HeaderStateful = props => {
81
83
  if (state.appStates.outsideOperatingHours) {
82
84
  setOutOfOperatingHours(true);
83
85
  }
84
-
85
86
  if (state.appStates.conversationState) {
86
87
  conversationState.current = state.appStates.conversationState;
87
88
  }
@@ -7,8 +7,8 @@ import { createReducer } from "../../contexts/createReducer";
7
7
  import { getLiveChatWidgetContextInitialState } from "../../contexts/common/LiveChatWidgetContextInitialState";
8
8
  export const LiveChatWidget = props => {
9
9
  const reducer = createReducer();
10
- const [state, dispatch] = useReducer(reducer, getLiveChatWidgetContextInitialState(props)); // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
-
10
+ const [state, dispatch] = useReducer(reducer, getLiveChatWidgetContextInitialState(props));
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
12
  const [adapter, setAdapter] = useState(undefined);
13
13
  return /*#__PURE__*/React.createElement(ChatSDKStore.Provider, {
14
14
  value: props.chatSDK
@@ -0,0 +1,30 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ import { Deferred } from "./Deferred";
3
+ export class ActivityStreamHandler {
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+
8
+ /**
9
+ * Use of a deferred pattern, to hold the execution of the activity.
10
+ *
11
+ * */
12
+ static cork() {
13
+ ActivityStreamHandler.restoreDeferred = new Deferred();
14
+ ActivityStreamHandler.restorePromise = ActivityStreamHandler.restoreDeferred.promise;
15
+ }
16
+
17
+ /**
18
+ * Resolve the promise, releasing it to continue with the execution of the activity.
19
+ *
20
+ * */
21
+ static uncork() {
22
+ ActivityStreamHandler.restoreDeferred.resolve();
23
+ }
24
+ }
25
+ _defineProperty(ActivityStreamHandler, "restoreDeferred", {
26
+ resolve: () => {
27
+ return "initialState";
28
+ }
29
+ });
30
+ _defineProperty(ActivityStreamHandler, "restorePromise", void 0);
@@ -0,0 +1,11 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ export class DefaultActivitySubscriber {
3
+ constructor() {
4
+ _defineProperty(this, "observer", void 0);
5
+ }
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ async next(activity) {
8
+ this.observer.next(activity);
9
+ return false;
10
+ }
11
+ }
@@ -0,0 +1,25 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ import { ActivityStreamHandler } from "../ActivityStreamHandler";
3
+ export class PauseActivitySubscriber {
4
+ constructor() {
5
+ _defineProperty(this, "observer", void 0);
6
+ }
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ async apply(activity) {
9
+ await ActivityStreamHandler.restorePromise;
10
+ return activity;
11
+ }
12
+
13
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
14
+ applicable(activity) {
15
+ return true;
16
+ }
17
+
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ async next(activity) {
20
+ if (this.applicable(activity)) {
21
+ return await this.apply(activity);
22
+ }
23
+ return activity;
24
+ }
25
+ }
@@ -0,0 +1,55 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ import { DefaultActivitySubscriber } from "./ActivitySubscriber/DefaultActivitySubscriber";
3
+ import { shareObservable } from "./shareObservable";
4
+ export class ChatAdapterShim {
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ constructor(chatAdapter) {
13
+ _defineProperty(this, "chatAdapter", void 0);
14
+ _defineProperty(this, "activityObserver", void 0);
15
+ _defineProperty(this, "subscribers", void 0);
16
+ this.subscribers = [];
17
+ this.chatAdapter = {
18
+ ...chatAdapter,
19
+ activity$: shareObservable(
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ new window.Observable(observer => {
22
+ this.activityObserver = observer;
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ const abortController = new window.AbortController();
25
+ (async () => {
26
+ try {
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ for await (let activity of chatAdapter.activities({
29
+ signal: abortController.signal
30
+ })) {
31
+ for (const subscriber of [...this.subscribers, new DefaultActivitySubscriber()]) {
32
+ subscriber.observer = this.activityObserver;
33
+ activity = await subscriber.next(activity);
34
+ if (!activity) {
35
+ break;
36
+ }
37
+ }
38
+ }
39
+ observer.complete();
40
+ } catch (error) {
41
+ observer.error(error);
42
+ }
43
+ })();
44
+ return () => {
45
+ abortController.abort();
46
+ };
47
+ }))
48
+ };
49
+ }
50
+
51
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
+ addSubscriber(subscriber) {
53
+ this.subscribers.push(subscriber);
54
+ }
55
+ }
@@ -0,0 +1,28 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ export class Deferred {
3
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+
5
+ constructor() {
6
+ _defineProperty(this, "_promise", void 0);
7
+ _defineProperty(this, "_resolve", void 0);
8
+ _defineProperty(this, "_reject", () => {
9
+ return;
10
+ });
11
+ _defineProperty(this, "resolve", value => {
12
+ this._resolve(value);
13
+ });
14
+ _defineProperty(this, "reject", value => {
15
+ this._reject(value);
16
+ });
17
+ this._promise = new Promise((resolve, reject) => {
18
+ this._resolve = resolve;
19
+ this._reject = reject;
20
+ });
21
+ }
22
+
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+
25
+ get promise() {
26
+ return this._promise;
27
+ }
28
+ }
@@ -0,0 +1,42 @@
1
+ import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
3
+ import { isNullOrEmptyString } from "../../../common/utils";
4
+ const getAuthClientFunction = chatConfig => {
5
+ let authClientFunction = undefined;
6
+ if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
7
+ var _chatConfig$LiveChatC;
8
+ authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
9
+ }
10
+ return authClientFunction;
11
+ };
12
+
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
15
+ const authClientFunction = getAuthClientFunction(chatConfig);
16
+ if (getAuthToken && authClientFunction) {
17
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
18
+ Event: TelemetryEvent.GetAuthTokenCalled
19
+ });
20
+ const token = await getAuthToken(authClientFunction);
21
+ if (!isNullOrEmptyString(token)) {
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ chatSDK.setAuthTokenProvider(async () => {
24
+ return token;
25
+ });
26
+ return true;
27
+ } else {
28
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
29
+ Event: TelemetryEvent.ReceivedNullOrEmptyToken
30
+ });
31
+ return false;
32
+ }
33
+ }
34
+ return false;
35
+ };
36
+
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ const removeAuthTokenProvider = chatSDK => {
39
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
+ chatSDK.authenticatedUserToken = null;
41
+ };
42
+ export { getAuthClientFunction, handleAuthentication, removeAuthTokenProvider };
@@ -1,8 +1,11 @@
1
1
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
2
2
  import { NotificationLevel } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationLevel";
3
3
  import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
4
- import { defaultMiddlewareLocalizedTexts } from "../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+ import { defaultMiddlewareLocalizedTexts } from "../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts";
5
+ import { ChatAdapterShim } from "./ChatAdapterShim";
6
+ import { PauseActivitySubscriber } from "./ActivitySubscriber/PauseActivitySubscriber";
5
7
 
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
9
  export const createAdapter = async chatSDK => {
7
10
  const chatAdapterOptionalParams = {
8
11
  IC3Adapter: {
@@ -11,11 +14,9 @@ export const createAdapter = async chatSDK => {
11
14
  if (notification.id === NotificationScenarios.InternetConnection && notification.level == NotificationLevel.Error) {
12
15
  notification.message = defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_NO_INTERNET_CONNECTION;
13
16
  }
14
-
15
17
  if (notification.id === NotificationScenarios.InternetConnection && notification.level == NotificationLevel.Success) {
16
18
  notification.message = defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_INTERNET_BACK_ONLINE;
17
19
  }
18
-
19
20
  if (notification.id && notification.message) {
20
21
  NotificationHandler.notifyWithLevel(notification.id, notification.message, notification.level);
21
22
  }
@@ -23,5 +24,12 @@ export const createAdapter = async chatSDK => {
23
24
  }
24
25
  }
25
26
  };
26
- return await chatSDK.createChatAdapter(chatAdapterOptionalParams);
27
+ let adapter = await chatSDK.createChatAdapter(chatAdapterOptionalParams);
28
+ //so far, there is no need to convert to the shim adapter when using visual tests
29
+ if (chatSDK.isMockModeOn !== true) {
30
+ adapter = new ChatAdapterShim(adapter);
31
+ adapter.addSubscriber(new PauseActivitySubscriber());
32
+ return adapter.chatAdapter;
33
+ }
34
+ return adapter;
27
35
  };
@@ -3,25 +3,13 @@ import React from "react";
3
3
  import { decodeComponentString } from "@microsoft/omnichannel-chat-components";
4
4
  import { shouldShowFooter } from "../../../controller/componentController";
5
5
  export const createFooter = (props, state) => {
6
- var _props$footerProps, _props$controlProps, _props$componentOverr, _props$componentOverr2;
7
-
8
- const footerPropsHidden = { ...props.footerProps,
9
- controlProps: { ...((_props$footerProps = props.footerProps) === null || _props$footerProps === void 0 ? void 0 : _props$footerProps.controlProps),
10
- hideDownloadTranscriptButton: true,
11
- hideEmailTranscriptButton: true,
12
- hideAudioNotificationButton: true
13
- }
14
- };
15
- const footer = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && shouldShowFooter(state) ? decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/React.createElement(FooterStateful, {
6
+ var _props$controlProps, _props$componentOverr;
7
+ const hideFooterDisplay = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && shouldShowFooter(state) ? false : true;
8
+ const footer = decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/React.createElement(FooterStateful, {
16
9
  footerProps: props.footerProps,
17
10
  downloadTranscriptProps: props.downloadTranscriptProps,
18
11
  audioNotificationProps: props.audioNotificationProps,
19
- hideFooterDisplay: false
20
- }) : decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.footer) || /*#__PURE__*/React.createElement(FooterStateful, {
21
- footerProps: footerPropsHidden,
22
- downloadTranscriptProps: props.downloadTranscriptProps,
23
- audioNotificationProps: props.audioNotificationProps,
24
- hideFooterDisplay: true
12
+ hideFooterDisplay: hideFooterDisplay
25
13
  });
26
14
  return footer;
27
15
  };