@microsoft/omnichannel-chat-widget 0.1.0-main.02fa07b → 0.1.0-main.039b68b

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 (317) hide show
  1. package/lib/cjs/assets/Icons.js +4 -2
  2. package/lib/cjs/common/Constants.js +25 -170
  3. package/lib/cjs/common/KeyCodes.js +3 -4
  4. package/lib/cjs/common/contextDataStore/DataStoreManager.js +3 -5
  5. package/lib/cjs/common/storage/default/defaultCacheManager.js +26 -0
  6. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +111 -0
  7. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +78 -0
  8. package/lib/cjs/common/telemetry/TelemetryConstants.js +34 -23
  9. package/lib/cjs/common/telemetry/TelemetryHelper.js +21 -59
  10. package/lib/cjs/common/telemetry/TelemetryManager.js +3 -32
  11. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +0 -2
  12. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +30 -36
  13. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +0 -9
  14. package/lib/cjs/common/utils.js +34 -108
  15. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +8 -46
  16. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +2 -24
  17. package/lib/cjs/components/chatbuttonstateful/common/styleProps/defaultOutOfOfficeChatButtonStyleProps.js +3 -0
  18. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +9 -33
  19. package/lib/cjs/components/dimlayer/DimLayer.js +0 -4
  20. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +9 -37
  21. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -8
  22. package/lib/cjs/components/footerstateful/FooterStateful.js +11 -42
  23. package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +0 -6
  24. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +7 -45
  25. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -8
  26. package/lib/cjs/components/headerstateful/HeaderStateful.js +20 -32
  27. package/lib/cjs/components/livechatwidget/LiveChatWidget.js +2 -14
  28. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +39 -0
  29. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +20 -0
  30. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  31. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +34 -0
  32. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +64 -0
  33. package/lib/cjs/components/livechatwidget/common/Deferred.js +37 -0
  34. package/lib/cjs/components/livechatwidget/common/authHelper.js +50 -0
  35. package/lib/cjs/components/livechatwidget/common/createAdapter.js +10 -9
  36. package/lib/cjs/components/livechatwidget/common/createFooter.js +4 -23
  37. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -10
  38. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +36 -43
  39. package/lib/cjs/components/livechatwidget/common/defaultProps/defaultScrollBarProps.js +14 -0
  40. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +127 -51
  41. package/lib/cjs/components/livechatwidget/common/disposeTelemetryLoggers.js +0 -3
  42. package/lib/cjs/components/livechatwidget/common/endChat.js +53 -38
  43. package/lib/cjs/components/livechatwidget/common/getGeneralStylesForButton.js +0 -6
  44. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +7 -16
  45. package/lib/cjs/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -8
  46. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +33 -74
  47. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +76 -129
  48. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +4 -17
  49. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +2 -11
  50. package/lib/cjs/components/livechatwidget/common/shareObservable.js +41 -0
  51. package/lib/cjs/components/livechatwidget/common/startChat.js +222 -112
  52. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +0 -8
  53. package/lib/cjs/components/livechatwidget/common/updateSessionDataForTelemetry.js +2 -11
  54. package/lib/cjs/components/livechatwidget/interfaces/IScrollBarProps.js +1 -0
  55. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +261 -228
  56. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +26 -19
  57. package/lib/cjs/components/loadingpanestateful/common/errorUIStyleProps/errorUILoadingPaneStyleProps.js +57 -0
  58. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +4 -17
  59. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +4 -17
  60. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +32 -23
  61. package/lib/cjs/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  62. package/lib/cjs/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +13 -0
  63. package/lib/cjs/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  64. package/lib/cjs/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  65. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +11 -39
  66. package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +1 -1
  67. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +2 -32
  68. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +6 -24
  69. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +29 -34
  70. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -7
  71. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -6
  72. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  73. package/lib/cjs/components/webchatcontainerstateful/common/mockadapter.js +12 -27
  74. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +6 -17
  75. package/lib/cjs/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -24
  76. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +5 -15
  77. package/lib/cjs/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -8
  78. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  79. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +3 -5
  80. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +3 -5
  81. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  82. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  83. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  84. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +0 -7
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -5
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +17 -41
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +10 -22
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +25 -61
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +7 -15
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +2 -13
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +0 -16
  97. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  98. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +10 -0
  99. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -3
  100. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -3
  101. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +10 -0
  102. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -9
  103. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +2 -30
  104. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +7 -18
  105. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +8 -42
  106. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +4 -22
  107. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +13 -30
  108. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +3 -9
  109. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +6 -34
  110. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +1 -10
  111. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +1 -12
  112. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +17 -19
  113. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +1 -9
  114. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -9
  115. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -34
  116. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +1 -10
  117. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +7 -11
  118. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +5 -14
  119. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -21
  120. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +0 -12
  121. package/lib/cjs/contexts/ChatAdapterStore.js +0 -2
  122. package/lib/cjs/contexts/ChatContextStore.js +0 -2
  123. package/lib/cjs/contexts/ChatSDKStore.js +0 -2
  124. package/lib/cjs/contexts/common/ConversationState.js +0 -1
  125. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +30 -28
  126. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +14 -12
  127. package/lib/cjs/contexts/createReducer.js +159 -105
  128. package/lib/cjs/controller/componentController.js +2 -31
  129. package/lib/cjs/hooks/useChatAdapterStore.js +0 -6
  130. package/lib/cjs/hooks/useChatContextStore.js +0 -6
  131. package/lib/cjs/hooks/useChatSDKStore.js +0 -6
  132. package/lib/cjs/hooks/useDebounce.js +28 -0
  133. package/lib/cjs/hooks/useWindowDimensions.js +30 -0
  134. package/lib/cjs/index.js +0 -5
  135. package/lib/cjs/plugins/newMessageEventHandler.js +19 -36
  136. package/lib/esm/assets/Icons.js +2 -1
  137. package/lib/esm/common/Constants.js +22 -157
  138. package/lib/esm/common/KeyCodes.js +3 -3
  139. package/lib/esm/common/contextDataStore/DataStoreManager.js +3 -3
  140. package/lib/esm/common/storage/default/defaultCacheManager.js +18 -0
  141. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +104 -0
  142. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +70 -0
  143. package/lib/esm/common/telemetry/TelemetryConstants.js +38 -20
  144. package/lib/esm/common/telemetry/TelemetryHelper.js +21 -47
  145. package/lib/esm/common/telemetry/TelemetryManager.js +3 -19
  146. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +28 -24
  147. package/lib/esm/common/telemetry/loggers/consoleLogger.js +0 -5
  148. package/lib/esm/common/utils.js +31 -57
  149. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +8 -17
  150. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +2 -7
  151. package/lib/esm/components/chatbuttonstateful/common/styleProps/defaultOutOfOfficeChatButtonStyleProps.js +3 -0
  152. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +11 -14
  153. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +9 -16
  154. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -6
  155. package/lib/esm/components/footerstateful/FooterStateful.js +13 -23
  156. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +7 -35
  157. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -6
  158. package/lib/esm/components/headerstateful/HeaderStateful.js +20 -17
  159. package/lib/esm/components/livechatwidget/LiveChatWidget.js +2 -2
  160. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +32 -0
  161. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +13 -0
  162. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  163. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +27 -0
  164. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +57 -0
  165. package/lib/esm/components/livechatwidget/common/Deferred.js +30 -0
  166. package/lib/esm/components/livechatwidget/common/authHelper.js +42 -0
  167. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -4
  168. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -16
  169. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -5
  170. package/lib/esm/components/livechatwidget/common/createMarkdown.js +38 -37
  171. package/lib/esm/components/livechatwidget/common/defaultProps/defaultScrollBarProps.js +7 -0
  172. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +128 -37
  173. package/lib/esm/components/livechatwidget/common/endChat.js +55 -23
  174. package/lib/esm/components/livechatwidget/common/getGeneralStylesForButton.js +0 -2
  175. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +9 -11
  176. package/lib/esm/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -5
  177. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +35 -39
  178. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +77 -111
  179. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +4 -9
  180. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +4 -3
  181. package/lib/esm/components/livechatwidget/common/shareObservable.js +35 -0
  182. package/lib/esm/components/livechatwidget/common/startChat.js +222 -89
  183. package/lib/esm/components/livechatwidget/common/updateSessionDataForTelemetry.js +4 -2
  184. package/lib/esm/components/livechatwidget/interfaces/IScrollBarProps.js +1 -0
  185. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +264 -166
  186. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +26 -7
  187. package/lib/esm/components/loadingpanestateful/common/errorUIStyleProps/errorUILoadingPaneStyleProps.js +50 -0
  188. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +4 -5
  189. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +4 -5
  190. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +32 -11
  191. package/lib/esm/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  192. package/lib/esm/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +6 -0
  193. package/lib/esm/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  194. package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  195. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -23
  196. package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +1 -1
  197. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +4 -8
  198. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +6 -6
  199. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +27 -9
  200. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  201. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -2
  202. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  203. package/lib/esm/components/webchatcontainerstateful/common/mockadapter.js +12 -19
  204. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +6 -13
  205. package/lib/esm/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -16
  206. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +5 -5
  207. package/lib/esm/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -6
  208. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  209. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +3 -3
  210. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +3 -3
  211. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  212. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  213. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  214. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  215. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  216. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  217. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  218. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  219. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +2 -5
  220. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -4
  221. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +17 -26
  222. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -14
  223. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +25 -39
  224. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +9 -8
  225. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +2 -9
  226. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +0 -14
  227. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  228. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +3 -0
  229. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -1
  230. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -1
  231. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +3 -0
  232. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -7
  233. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +4 -28
  234. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +8 -9
  235. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +9 -28
  236. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +5 -14
  237. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +15 -19
  238. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +5 -8
  239. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +6 -29
  240. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +3 -7
  241. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +3 -8
  242. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +17 -14
  243. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +3 -7
  244. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -7
  245. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +15 -27
  246. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +3 -5
  247. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +9 -9
  248. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +7 -9
  249. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -13
  250. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +0 -5
  251. package/lib/esm/contexts/ChatAdapterStore.js +2 -1
  252. package/lib/esm/contexts/ChatContextStore.js +2 -1
  253. package/lib/esm/contexts/ChatSDKStore.js +2 -1
  254. package/lib/esm/contexts/common/ConversationState.js +0 -1
  255. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +30 -28
  256. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +14 -8
  257. package/lib/esm/contexts/createReducer.js +159 -102
  258. package/lib/esm/controller/componentController.js +3 -2
  259. package/lib/esm/hooks/useChatAdapterStore.js +0 -4
  260. package/lib/esm/hooks/useChatContextStore.js +0 -4
  261. package/lib/esm/hooks/useChatSDKStore.js +0 -4
  262. package/lib/esm/hooks/useDebounce.js +22 -0
  263. package/lib/esm/hooks/useWindowDimensions.js +23 -0
  264. package/lib/esm/plugins/newMessageEventHandler.js +19 -26
  265. package/lib/types/assets/Icons.d.ts +1 -0
  266. package/lib/types/common/Constants.d.ts +15 -0
  267. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  268. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  269. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  270. package/lib/types/common/telemetry/TelemetryConstants.d.ts +22 -5
  271. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  272. package/lib/types/common/telemetry/definitions/Contracts.d.ts +4 -4
  273. package/lib/types/common/telemetry/definitions/Payload.d.ts +1 -0
  274. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +4 -0
  275. package/lib/types/common/utils.d.ts +5 -4
  276. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  277. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  278. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  279. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  280. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  281. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  282. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  283. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  284. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  285. package/lib/types/components/livechatwidget/common/defaultProps/defaultScrollBarProps.d.ts +2 -0
  286. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  287. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +6 -7
  288. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  289. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  290. package/lib/types/components/livechatwidget/common/startChat.d.ts +5 -3
  291. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  292. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +4 -1
  293. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +5 -2
  294. package/lib/types/components/livechatwidget/interfaces/IScrollBarProps.d.ts +22 -0
  295. package/lib/types/components/loadingpanestateful/common/errorUIStyleProps/errorUILoadingPaneStyleProps.d.ts +2 -0
  296. package/lib/types/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.d.ts +2 -2
  297. package/lib/types/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.d.ts +5 -0
  298. package/lib/types/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.d.ts +4 -0
  299. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -2
  300. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  301. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  302. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  303. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +4 -1
  304. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  305. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  306. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  307. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  308. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  309. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.d.ts +3 -0
  310. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.d.ts +3 -0
  311. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.d.ts +1 -1
  312. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +4 -2
  313. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +30 -27
  314. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  315. package/lib/types/hooks/useDebounce.d.ts +3 -0
  316. package/lib/types/hooks/useWindowDimensions.d.ts +4 -0
  317. package/package.json +5 -4
@@ -0,0 +1,35 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2
+ export function shareObservable(observable) {
3
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+ let observers = [];
5
+
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ let subscription;
8
+
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ return new window.Observable(observer => {
11
+ if (!subscription) {
12
+ subscription = observable.subscribe({
13
+ complete() {
14
+ observers.forEach(observer => observer.complete());
15
+ },
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ error(err) {
18
+ observers.forEach(observer => observer.error(err));
19
+ },
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ next(value) {
22
+ observers.forEach(observer => observer.next(value));
23
+ }
24
+ });
25
+ }
26
+ observers.push(observer);
27
+ return () => {
28
+ observers = observers.filter(o => o !== observer);
29
+ if (!observers.length) {
30
+ subscription.unsubscribe();
31
+ subscription = null;
32
+ }
33
+ };
34
+ });
35
+ }
@@ -1,5 +1,9 @@
1
- import { ChatSDKError } from "../../../common/Constants";
2
1
  import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
+ import { ChatSDKError, LiveWorkItemState } from "../../../common/Constants";
3
+ import { createTimer, getStateFromCache, isUndefinedOrEmpty } from "../../../common/utils";
4
+ import { getAuthClientFunction, handleAuthentication } from "./authHelper";
5
+ import { ActivityStreamHandler } from "./ActivityStreamHandler";
6
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
3
7
  import { ConversationState } from "../../../contexts/common/ConversationState";
4
8
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
5
9
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
@@ -8,63 +12,55 @@ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
8
12
  import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
9
13
  import { createAdapter } from "./createAdapter";
10
14
  import { createOnNewAdapterActivityHandler } from "../../../plugins/newMessageEventHandler";
11
- import { createTimer, getStateFromCache, isUndefinedOrEmpty } from "../../../common/utils";
12
- import { getReconnectIdForAuthenticatedChat, handleRedirectUnauthenticatedReconnectChat } from "./reconnectChatHelper";
15
+ import { handleChatReconnect } from "./reconnectChatHelper";
13
16
  import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
14
17
  import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
15
- import { BroadcastService } from "@microsoft/omnichannel-chat-components"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
18
 
17
- let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ let optionalParams = {};
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ let widgetInstanceId;
18
23
 
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
25
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
20
- var _props$reconnectChatP;
21
-
26
+ var _props$controlProps;
22
27
  optionalParams = {}; //Resetting to ensure no stale values
23
- // Can connect to existing chat session
28
+ widgetInstanceId = props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId;
24
29
 
30
+ // Can connect to existing chat session
25
31
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
26
32
  return;
27
- } // Redirecting if unauthenticated reconnect chat expired
28
-
29
-
30
- if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
31
- var _props$reconnectChatP2, _props$reconnectChatP3;
32
-
33
- await handleRedirectUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.redirectInSameWindow);
34
- return;
35
- } // Getting reconnectId for authenticated chat
36
-
37
-
38
- const reconnectId = await getReconnectIdForAuthenticatedChat(props, chatSDK);
33
+ }
34
+ await handleChatReconnect(chatSDK, props, dispatch, setAdapter, initStartChat, state);
39
35
 
40
- if (reconnectId) {
41
- dispatch({
42
- type: LiveChatWidgetActionType.SET_RECONNECT_ID,
43
- payload: reconnectId
44
- });
45
- dispatch({
46
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
47
- payload: ConversationState.ReconnectChat
48
- });
36
+ // If chat reconnect has kicked in chat state will become Active or Reconnect. So just exit, else go next
37
+ if (state.appStates.conversationState === ConversationState.Active || state.appStates.conversationState === ConversationState.ReconnectChat) {
49
38
  return;
50
- } // Set custom context params
51
-
52
-
53
- setCustomContextParams(props, chatSDK); // Setting Proactive chat settings
39
+ }
54
40
 
41
+ // Setting Proactive chat settings
55
42
  const isProactiveChat = state.appStates.conversationState === ConversationState.ProactiveChat;
56
- const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
43
+ const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat;
57
44
 
58
- setPreChatAndInitiateChat(chatSDK, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
59
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
+ //Setting PreChat and intiate chat
46
+ setPreChatAndInitiateChat(chatSDK, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat, undefined, props);
47
+ };
60
48
 
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState, state, props) => {
51
+ //Handle reconnect scenario
52
+ if (state) {
53
+ await handleChatReconnect(chatSDK, props, dispatch, setAdapter, initStartChat, state);
54
+ // If chat reconnect has kicked in chat state will become Active or Reconnect. So just exit, else go next
55
+ if (state.appStates.conversationState === ConversationState.Active || state.appStates.conversationState === ConversationState.ReconnectChat) {
56
+ return;
57
+ }
58
+ }
61
59
 
62
- const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
63
60
  // Getting prechat Survey Context
64
61
  const parseToJson = false;
65
62
  const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
66
63
  const showPrechat = isProactiveChat ? preChatSurveyResponse && proactiveChatEnablePrechatState : preChatSurveyResponse;
67
-
68
64
  if (showPrechat) {
69
65
  dispatch({
70
66
  type: LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
@@ -75,26 +71,46 @@ const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProact
75
71
  payload: ConversationState.Prechat
76
72
  });
77
73
  return;
78
- } //Initiate start chat
79
-
74
+ }
80
75
 
76
+ //Initiate start chat
81
77
  dispatch({
82
78
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
83
79
  payload: ConversationState.Loading
84
80
  });
85
- await initStartChat(chatSDK, dispatch, setAdapter);
86
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
-
81
+ const optionalParams = {
82
+ isProactiveChat
83
+ };
84
+ await initStartChat(chatSDK, dispatch, setAdapter, props, optionalParams);
85
+ };
88
86
 
89
- const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
+ const initStartChat = async (chatSDK, dispatch, setAdapter, props, params, persistedState) => {
89
+ var _props$controlProps2;
90
+ let isStartChatSuccessful = false;
91
+ const chatConfig = props === null || props === void 0 ? void 0 : props.chatConfig;
92
+ const getAuthToken = props === null || props === void 0 ? void 0 : props.getAuthToken;
93
+ const hideErrorUIPane = props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.hideErrorUIPane;
90
94
  try {
91
95
  var _newAdapter$activity$, _TelemetryTimers$Widg;
96
+ //Start widget load timer
97
+ TelemetryTimers.WidgetLoadTimer = createTimer();
98
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
99
+ Event: TelemetryEvent.WidgetLoadStarted,
100
+ Description: "Widget loading started"
101
+ });
102
+ const authClientFunction = getAuthClientFunction(chatConfig);
103
+ if (getAuthToken && authClientFunction) {
104
+ // set auth token to chat sdk before start chat
105
+ const authSuccess = await handleAuthentication(chatSDK, chatConfig, getAuthToken);
106
+ if (!authSuccess) {
107
+ return;
108
+ }
109
+ }
92
110
 
93
- let isStartChatSuccessful = false; //Check if chat retrieved from cache
94
-
111
+ //Check if chat retrieved from cache
95
112
  if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
96
113
  var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
97
-
98
114
  BroadcastService.postMessage({
99
115
  eventName: BroadcastEvent.ChatRetrievedFromCache,
100
116
  payload: {
@@ -103,16 +119,17 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
103
119
  }
104
120
  });
105
121
  }
106
-
107
122
  try {
108
- //Start widget load timer
109
- TelemetryTimers.WidgetLoadTimer = createTimer();
110
- TelemetryHelper.logSDKEvent(LogLevel.INFO, {
111
- Event: TelemetryEvent.StartChatSDKCall
112
- }); // Set optional params
113
-
114
- optionalParams = Object.assign({}, params, optionalParams);
115
- await chatSDK.startChat(optionalParams);
123
+ var _window$Microsoft, _window$Microsoft$Dyn, _window$Microsoft$Dyn2, _window$Microsoft$Dyn3;
124
+ // Set custom context params
125
+ setCustomContextParams(chatSDK);
126
+ const defaultOptionalParams = {
127
+ sendDefaultInitContext: true,
128
+ isProactiveChat: !!(params !== null && params !== void 0 && params.isProactiveChat),
129
+ portalContactId: (_window$Microsoft = window.Microsoft) === null || _window$Microsoft === void 0 ? void 0 : (_window$Microsoft$Dyn = _window$Microsoft.Dynamic365) === null || _window$Microsoft$Dyn === void 0 ? void 0 : (_window$Microsoft$Dyn2 = _window$Microsoft$Dyn.Portal) === null || _window$Microsoft$Dyn2 === void 0 ? void 0 : (_window$Microsoft$Dyn3 = _window$Microsoft$Dyn2.User) === null || _window$Microsoft$Dyn3 === void 0 ? void 0 : _window$Microsoft$Dyn3.contactId
130
+ };
131
+ const startChatOptionalParams = Object.assign({}, params, optionalParams, defaultOptionalParams);
132
+ await chatSDK.startChat(startChatOptionalParams);
116
133
  isStartChatSuccessful = true;
117
134
  } catch (error) {
118
135
  TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
@@ -121,17 +138,17 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
121
138
  exception: `Failed to setup startChat: ${error}`
122
139
  }
123
140
  });
124
- isStartChatSuccessful = false; // Resetting the widget state to Closed, for recent introduction of OC rate limiting(429 Error)
141
+ isStartChatSuccessful = false;
142
+ // Resetting the widget state to Closed, for recent introduction of OC rate limiting(429 Error)
125
143
  // TODO : How to diplay a proper UI message to customer to try after sometime at this point - cool down scenario
126
-
127
144
  dispatch({
128
145
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
129
146
  payload: ConversationState.Closed
130
147
  });
131
148
  return;
132
- } // New adapter creation
133
-
149
+ }
134
150
 
151
+ // New adapter creation
135
152
  const newAdapter = await createAdapter(chatSDK);
136
153
  setAdapter(newAdapter);
137
154
  const chatToken = await chatSDK.getChatToken();
@@ -140,34 +157,41 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
140
157
  payload: chatToken
141
158
  });
142
159
  newAdapter === null || newAdapter === void 0 ? void 0 : (_newAdapter$activity$ = newAdapter.activity$) === null || _newAdapter$activity$ === void 0 ? void 0 : _newAdapter$activity$.subscribe(createOnNewAdapterActivityHandler(chatToken === null || chatToken === void 0 ? void 0 : chatToken.chatId, chatToken === null || chatToken === void 0 ? void 0 : chatToken.visitorId));
143
-
144
160
  if (persistedState) {
145
161
  dispatch({
146
162
  type: LiveChatWidgetActionType.SET_WIDGET_STATE,
147
163
  payload: persistedState
148
164
  });
149
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
165
+ setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
150
166
  return;
151
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
-
167
+ }
153
168
 
169
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
154
170
  const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
155
171
  dispatch({
156
172
  type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
157
173
  payload: liveChatContext
158
- }); // Set post chat context in state, no survey load
174
+ });
159
175
 
160
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch); // Updating chat session detail for telemetry
176
+ // Set post chat context in state, no survey load
177
+ setPostChatContextAndLoadSurvey(chatSDK, dispatch);
161
178
 
162
- await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
179
+ // Updating chat session detail for telemetry
180
+ await updateSessionDataForTelemetry(chatSDK, dispatch);
163
181
 
182
+ // Set app state to Active
164
183
  if (isStartChatSuccessful) {
184
+ ActivityStreamHandler.uncork();
185
+ // Update start chat failure app state if chat loads successfully
186
+ dispatch({
187
+ type: LiveChatWidgetActionType.SET_START_CHAT_FAILING,
188
+ payload: false
189
+ });
165
190
  dispatch({
166
191
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
167
192
  payload: ConversationState.Active
168
193
  });
169
194
  }
170
-
171
195
  TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
172
196
  Event: TelemetryEvent.WidgetLoadComplete,
173
197
  Description: "Widget load complete",
@@ -180,8 +204,8 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
180
204
  Exception: `Widget load Failed: ${ex}`
181
205
  }
182
206
  });
183
- NotificationHandler.notifyError(NotificationScenarios.Connection, "Start Chat Failed: " + ex); // eslint-disable-next-line @typescript-eslint/no-explicit-any
184
-
207
+ NotificationHandler.notifyError(NotificationScenarios.Connection, "Start Chat Failed: " + ex);
208
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
185
209
  if (ex.message === ChatSDKError.WidgetUseOutsideOperatingHour) {
186
210
  dispatch({
187
211
  type: LiveChatWidgetActionType.SET_OUTSIDE_OPERATING_HOURS,
@@ -191,26 +215,59 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
191
215
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
192
216
  payload: ConversationState.OutOfOffice
193
217
  });
218
+ return;
219
+ }
220
+ if (!hideErrorUIPane) {
221
+ // Set app state to failing start chat if hideErrorUI is not turned on
222
+ dispatch({
223
+ type: LiveChatWidgetActionType.SET_START_CHAT_FAILING,
224
+ payload: true
225
+ });
226
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
227
+ Event: TelemetryEvent.ErrorUIPaneLoaded,
228
+ Description: "Error UI Pane Loaded"
229
+ });
230
+ }
231
+ // Show the loading pane in other cases for failure, this will help for both hideStartChatButton case
232
+ dispatch({
233
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
234
+ payload: ConversationState.Loading
235
+ });
236
+
237
+ // If sessionInit was successful but LCW startchat failed due to some reason e.g adapter didn't load
238
+ // we need to directly endChat to avoid leaving ghost chats in OC, not disturbing any other UI state
239
+ if (isStartChatSuccessful === true) {
240
+ await forceEndChat(chatSDK);
194
241
  }
195
242
  } finally {
196
243
  optionalParams = {};
244
+ widgetInstanceId = "";
197
245
  }
198
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
246
+ };
199
247
 
248
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
249
+ const forceEndChat = async chatSDK => {
250
+ TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
251
+ Event: TelemetryEvent.WidgetLoadFailed,
252
+ ExceptionDetails: {
253
+ Exception: "SessionInit was successful, but widget load failed."
254
+ }
255
+ });
256
+ chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat();
257
+ };
200
258
 
259
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
201
260
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
202
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _persistedState$domai6, _persistedState$appSt;
203
-
261
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps3, _persistedState$domai6, _persistedState$appSt;
204
262
  // By pass this function in case of popout chat
205
- if (state.appStates.skipChatButtonRendering === true) {
263
+ if (state.appStates.hideStartChatButton === true) {
206
264
  return false;
207
265
  }
266
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.widgetInstanceId) ?? "");
208
267
 
209
- const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId); //Connect to only active chat session
210
-
268
+ //Connect to only active chat session
211
269
  if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai6 = persistedState.domainStates) === null || _persistedState$domai6 === void 0 ? void 0 : _persistedState$domai6.liveChatContext) && (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$appSt = persistedState.appStates) === null || _persistedState$appSt === void 0 ? void 0 : _persistedState$appSt.conversationState) === ConversationState.Active) {
212
270
  var _persistedState$domai7;
213
-
214
271
  dispatch({
215
272
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
216
273
  payload: ConversationState.Loading
@@ -218,27 +275,103 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
218
275
  const optionalParams = {
219
276
  liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
220
277
  };
221
- await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
278
+ await initStartChat(chatSDK, dispatch, setAdapter, props, optionalParams, persistedState);
222
279
  return true;
223
280
  } else {
224
281
  return false;
225
282
  }
226
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
283
+ };
227
284
 
285
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
286
+ const setCustomContextParams = chatSDK => {
287
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _persistedState$domai8;
288
+ // Add custom context only for unauthenticated chat
289
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.widgetId, widgetInstanceId ?? "");
290
+ if (!isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
291
+ var _persistedState$domai9, _persistedState$domai10;
292
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
293
+ const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
294
+ TelemetryHelper.logSDKEvent(LogLevel.WARN, {
295
+ Event: TelemetryEvent.StartChatMethodException,
296
+ ExceptionDetails: {
297
+ exception: errorMessage
298
+ }
299
+ });
300
+ throw new Error(errorMessage);
301
+ }
302
+ optionalParams = Object.assign({}, optionalParams, {
303
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
304
+ });
305
+ }
306
+ };
228
307
 
229
- const setCustomContextParams = (props, chatSDK) => {
230
- var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$chatConfig, _persistedState$domai8;
308
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
309
+ const handleAuthenticationIfEnabled = async (chatSDK, props) => {
310
+ //For auth chat
311
+ if (props.getAuthToken) {
312
+ const authClientFunction = getAuthClientFunction(props.chatConfig);
313
+ if (authClientFunction) {
314
+ // set auth token to chat sdk before start chat
315
+ const authSuccess = await handleAuthentication(chatSDK, props.chatConfig, props.getAuthToken);
316
+ if (!authSuccess) {
317
+ return false;
318
+ }
319
+ return true;
320
+ }
321
+ }
322
+ return true;
323
+ };
231
324
 
232
- // Add custom context only for unauthenticated chat
233
- const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.widgetId);
325
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
326
+ const checkIfConversationStillValid = async (chatSDK, props, requestId, dispatch) => {
327
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
328
+ let conversationDetails = undefined;
234
329
 
235
- if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
236
- var _persistedState$domai9;
330
+ // Show Loading screen during auth check and start chat calls
331
+ dispatch({
332
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
333
+ payload: ConversationState.Loading
334
+ });
335
+ const authSucceed = await handleAuthenticationIfEnabled(chatSDK, props);
336
+ if (!authSucceed) {
337
+ var _props$controlProps4;
338
+ if (!(props !== null && props !== void 0 && (_props$controlProps4 = props.controlProps) !== null && _props$controlProps4 !== void 0 && _props$controlProps4.hideErrorUIPane)) {
339
+ // Set app state to failing start chat if hideErrorUI is not turned on
340
+ dispatch({
341
+ type: LiveChatWidgetActionType.SET_START_CHAT_FAILING,
342
+ payload: true
343
+ });
344
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
345
+ Event: TelemetryEvent.ErrorUIPaneLoaded,
346
+ Description: "Error UI Pane Loaded"
347
+ });
348
+ }
349
+ return false;
350
+ }
237
351
 
238
- optionalParams = Object.assign({}, optionalParams, {
239
- customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai9 = persistedState.domainStates) === null || _persistedState$domai9 === void 0 ? void 0 : _persistedState$domai9.customContext
352
+ //Preserve old requestId
353
+ const oldRequestId = chatSDK.requestId;
354
+ try {
355
+ chatSDK.requestId = requestId;
356
+ conversationDetails = await chatSDK.getConversationDetails();
357
+ if (Object.keys(conversationDetails).length === 0) {
358
+ chatSDK.requestId = oldRequestId;
359
+ return false;
360
+ }
361
+ if (conversationDetails.state === LiveWorkItemState.Closed || conversationDetails.state === LiveWorkItemState.WrapUp) {
362
+ chatSDK.requestId = oldRequestId;
363
+ return false;
364
+ }
365
+ return true;
366
+ } catch (erorr) {
367
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
368
+ Event: TelemetryEvent.GetConversationDetailsException,
369
+ ExceptionDetails: {
370
+ exception: `Conversation is not valid: ${erorr}`
371
+ }
240
372
  });
373
+ chatSDK.requestId = oldRequestId;
374
+ return false;
241
375
  }
242
376
  };
243
-
244
- export { prepareStartChat, initStartChat, setPreChatAndInitiateChat };
377
+ export { prepareStartChat, initStartChat, setPreChatAndInitiateChat, checkIfConversationStillValid };
@@ -1,7 +1,8 @@
1
1
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
2
2
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
3
- import { TelemetryManager } from "../../../common/telemetry/TelemetryManager"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
3
+ import { TelemetryManager } from "../../../common/telemetry/TelemetryManager";
4
4
 
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
6
  export const updateSessionDataForTelemetry = async (chatSDK, dispatch) => {
6
7
  if (chatSDK) {
7
8
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -13,8 +14,9 @@ export const updateSessionDataForTelemetry = async (chatSDK, dispatch) => {
13
14
  });
14
15
  await updateConversationDataForTelemetry(chatSDK, dispatch);
15
16
  }
16
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ };
17
18
 
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
20
  const updateConversationDataForTelemetry = async (chatSDK, dispatch) => {
19
21
  if (chatSDK) {
20
22
  // eslint-disable-next-line @typescript-eslint/no-explicit-any