@microsoft/omnichannel-chat-widget 0.1.0-main.edd8c2a → 0.1.0-main.f514612

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 (237) hide show
  1. package/README.md +259 -0
  2. package/lib/cjs/assets/Audios.js +8 -0
  3. package/lib/cjs/assets/Icons.js +28 -0
  4. package/lib/cjs/common/Constants.js +54 -4
  5. package/lib/cjs/common/contextDataStore/DataStoreManager.js +14 -0
  6. package/lib/cjs/{assets/assets.d.js → common/interfaces/IContextDataStore.js} +0 -0
  7. package/lib/cjs/common/storage/default/defaultCacheManager.js +34 -0
  8. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +114 -0
  9. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +86 -0
  10. package/lib/cjs/common/telemetry/TelemetryConstants.js +67 -4
  11. package/lib/cjs/common/telemetry/TelemetryHelper.js +22 -4
  12. package/lib/cjs/common/telemetry/TelemetryManager.js +28 -9
  13. package/lib/cjs/common/telemetry/defaultConfigs/defaultAriaConfig.js +3 -3
  14. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  15. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +48 -15
  16. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +9 -5
  17. package/lib/cjs/common/utils.js +89 -2
  18. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  19. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -4
  20. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +7 -54
  21. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  22. package/lib/cjs/components/footerstateful/FooterStateful.js +5 -13
  23. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +11 -2
  24. package/lib/cjs/components/headerstateful/HeaderStateful.js +14 -10
  25. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  26. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  27. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  28. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  29. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  30. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  31. package/lib/cjs/components/livechatwidget/common/authHelper.js +65 -0
  32. package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
  33. package/lib/cjs/components/livechatwidget/common/createFooter.js +7 -16
  34. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +12 -0
  35. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +32 -32
  36. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +46 -26
  37. package/lib/cjs/components/livechatwidget/common/disposeTelemetryLoggers.js +14 -0
  38. package/lib/cjs/components/livechatwidget/common/endChat.js +142 -43
  39. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +5 -0
  40. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +51 -10
  41. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +144 -39
  42. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +11 -7
  43. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +22 -24
  44. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  45. package/lib/cjs/components/livechatwidget/common/startChat.js +207 -41
  46. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +3 -3
  47. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +324 -71
  48. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  49. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +8 -0
  50. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  51. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +22 -10
  52. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +27 -5
  53. package/lib/cjs/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  54. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +96 -2
  55. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
  56. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  57. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +6 -0
  58. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +51 -73
  59. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  60. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  61. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +14 -0
  62. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +25 -48
  63. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  64. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +3 -1
  65. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +52 -0
  66. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +98 -0
  67. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  68. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +117 -0
  69. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  70. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +45 -0
  71. package/lib/cjs/contexts/common/ConversationState.js +4 -2
  72. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +13 -7
  73. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +20 -5
  74. package/lib/cjs/contexts/createReducer.js +44 -10
  75. package/lib/cjs/controller/componentController.js +5 -5
  76. package/lib/cjs/plugins/newMessageEventHandler.js +99 -0
  77. package/lib/esm/assets/Audios.js +1 -0
  78. package/lib/esm/assets/Icons.js +11 -0
  79. package/lib/esm/common/Constants.js +50 -3
  80. package/lib/esm/common/contextDataStore/DataStoreManager.js +5 -0
  81. package/lib/esm/common/interfaces/IContextDataStore.js +1 -0
  82. package/lib/esm/common/storage/default/defaultCacheManager.js +19 -0
  83. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +102 -0
  84. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +71 -0
  85. package/lib/esm/common/telemetry/TelemetryConstants.js +63 -3
  86. package/lib/esm/common/telemetry/TelemetryHelper.js +22 -5
  87. package/lib/esm/common/telemetry/TelemetryManager.js +22 -9
  88. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +3 -3
  89. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  90. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +50 -15
  91. package/lib/esm/common/telemetry/loggers/consoleLogger.js +9 -5
  92. package/lib/esm/common/utils.js +64 -1
  93. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  94. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +22 -7
  95. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +7 -50
  96. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  97. package/lib/esm/components/footerstateful/FooterStateful.js +5 -13
  98. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +9 -3
  99. package/lib/esm/components/headerstateful/HeaderStateful.js +15 -11
  100. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  101. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  102. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  103. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  104. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  105. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  106. package/lib/esm/components/livechatwidget/common/authHelper.js +50 -0
  107. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
  108. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -15
  109. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +8 -0
  110. package/lib/esm/components/livechatwidget/common/createMarkdown.js +32 -31
  111. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +44 -27
  112. package/lib/esm/components/livechatwidget/common/disposeTelemetryLoggers.js +4 -0
  113. package/lib/esm/components/livechatwidget/common/endChat.js +139 -42
  114. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +3 -0
  115. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +45 -11
  116. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +134 -41
  117. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +10 -3
  118. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +19 -22
  119. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  120. package/lib/esm/components/livechatwidget/common/startChat.js +195 -39
  121. package/lib/esm/components/livechatwidget/common/startProactiveChat.js +5 -5
  122. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +307 -76
  123. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  124. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +6 -0
  125. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  126. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +22 -10
  127. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +26 -6
  128. package/lib/esm/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  129. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +86 -2
  130. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  131. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  132. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +6 -0
  133. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +2 -12
  134. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  135. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  136. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
  137. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +23 -46
  138. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  139. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -1
  140. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  141. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +94 -0
  142. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  143. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +107 -0
  144. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  145. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +32 -0
  146. package/lib/esm/contexts/common/ConversationState.js +4 -2
  147. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +13 -7
  148. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +18 -5
  149. package/lib/esm/contexts/createReducer.js +44 -9
  150. package/lib/esm/controller/componentController.js +5 -5
  151. package/lib/esm/plugins/newMessageEventHandler.js +82 -0
  152. package/lib/types/assets/Audios.d.ts +1 -0
  153. package/lib/types/assets/Icons.d.ts +11 -0
  154. package/lib/types/common/Constants.d.ts +27 -1
  155. package/lib/types/common/contextDataStore/DataStoreManager.d.ts +4 -0
  156. package/lib/types/common/interfaces/IContextDataStore.d.ts +14 -0
  157. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  158. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  159. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  160. package/lib/types/common/telemetry/TelemetryConstants.d.ts +49 -2
  161. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -0
  162. package/lib/types/common/telemetry/TelemetryManager.d.ts +1 -0
  163. package/lib/types/common/telemetry/definitions/Contracts.d.ts +3 -0
  164. package/lib/types/common/telemetry/definitions/Payload.d.ts +15 -9
  165. package/lib/types/common/telemetry/interfaces/IChatSDKLogger.d.ts +1 -0
  166. package/lib/types/common/telemetry/interfaces/IInternalTelemetryData.d.ts +2 -0
  167. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +12 -0
  168. package/lib/types/common/utils.d.ts +8 -1
  169. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +5 -2
  170. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  171. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +5 -1
  172. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  173. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  174. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  175. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  176. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  177. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  178. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  179. package/lib/types/components/livechatwidget/common/disposeTelemetryLoggers.d.ts +1 -0
  180. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  181. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +6 -2
  182. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  183. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  184. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -2
  185. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +2 -1
  186. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  187. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  188. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +4 -1
  189. package/lib/types/components/prechatsurveypanestateful/interfaces/IPreChatSurveyPaneStatefulParams.d.ts +1 -1
  190. package/lib/types/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.d.ts +3 -0
  191. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -1
  192. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  193. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +2 -0
  194. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  195. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  196. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  197. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +2 -1
  198. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +4 -0
  199. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  200. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +0 -1
  201. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  202. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  203. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  204. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  205. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  206. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  207. package/lib/types/contexts/common/ConversationState.d.ts +4 -2
  208. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +5 -1
  209. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +14 -8
  210. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  211. package/lib/types/plugins/newMessageEventHandler.d.ts +2 -0
  212. package/package.json +13 -12
  213. package/lib/cjs/assets/audios/newMessageNotification.mp3 +0 -0
  214. package/lib/cjs/assets/icons/archiveIcon.svg +0 -3
  215. package/lib/cjs/assets/icons/audioIcon.svg +0 -6
  216. package/lib/cjs/assets/icons/blankIcon.svg +0 -6
  217. package/lib/cjs/assets/icons/excelIcon.svg +0 -6
  218. package/lib/cjs/assets/icons/imageIcon.svg +0 -6
  219. package/lib/cjs/assets/icons/oneNoteIcon.svg +0 -6
  220. package/lib/cjs/assets/icons/pdfIcon.svg +0 -6
  221. package/lib/cjs/assets/icons/powerpointIcon.svg +0 -6
  222. package/lib/cjs/assets/icons/videoIcon.svg +0 -6
  223. package/lib/cjs/assets/icons/visioIcon.svg +0 -6
  224. package/lib/cjs/assets/icons/wordIcon.svg +0 -6
  225. package/lib/esm/assets/assets.d.js +0 -0
  226. package/lib/esm/assets/audios/newMessageNotification.mp3 +0 -0
  227. package/lib/esm/assets/icons/archiveIcon.svg +0 -3
  228. package/lib/esm/assets/icons/audioIcon.svg +0 -6
  229. package/lib/esm/assets/icons/blankIcon.svg +0 -6
  230. package/lib/esm/assets/icons/excelIcon.svg +0 -6
  231. package/lib/esm/assets/icons/imageIcon.svg +0 -6
  232. package/lib/esm/assets/icons/oneNoteIcon.svg +0 -6
  233. package/lib/esm/assets/icons/pdfIcon.svg +0 -6
  234. package/lib/esm/assets/icons/powerpointIcon.svg +0 -6
  235. package/lib/esm/assets/icons/videoIcon.svg +0 -6
  236. package/lib/esm/assets/icons/visioIcon.svg +0 -6
  237. package/lib/esm/assets/icons/wordIcon.svg +0 -6
@@ -1,27 +1,36 @@
1
1
  import "regenerator-runtime/runtime";
2
- import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
- import { Constants } from "../../../common/Constants";
2
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
4
4
  import { ConversationState } from "../../../contexts/common/ConversationState";
5
5
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
6
- import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
-
8
- const getChatReconnectContext = async (chatSDK, reconnectId) => {
9
- try {
10
- if (reconnectId) {
11
- const chatReconnectOptionalParams = {
12
- reconnectId: reconnectId
13
- };
14
- return await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext(chatReconnectOptionalParams));
15
- } else {
16
- return await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext());
17
- }
18
- } catch (ex) {
19
- TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
20
- Event: TelemetryEvent.GetChatReconnectContextSDKCallFailed,
21
- ExceptionDetails: {
22
- exception: ex
6
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
7
+ import { handleAuthentication, removeAuthTokenProvider } from "./authHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+
9
+ const getChatReconnectContext = async (chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId) => {
10
+ if (isReconnectEnabled) {
11
+ try {
12
+ if (reconnectId) {
13
+ const chatReconnectOptionalParams = {
14
+ reconnectId: reconnectId
15
+ };
16
+ return await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext(chatReconnectOptionalParams));
17
+ } else {
18
+ // set auth token to chat sdk to get reconnectId for auth chat
19
+ await handleAuthentication(chatSDK, chatConfig, getAuthToken);
20
+ const reconnectChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext()); // remove auth token after reconnectId is fetched
21
+ // this will be reset later at start chat
22
+
23
+ removeAuthTokenProvider(chatSDK);
24
+ return reconnectChatContext;
23
25
  }
24
- });
26
+ } catch (ex) {
27
+ TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
28
+ Event: TelemetryEvent.GetChatReconnectContextSDKCallFailed,
29
+ ExceptionDetails: {
30
+ exception: ex
31
+ }
32
+ });
33
+ }
25
34
  }
26
35
 
27
36
  return null;
@@ -29,13 +38,23 @@ const getChatReconnectContext = async (chatSDK, reconnectId) => {
29
38
 
30
39
 
31
40
  const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
32
- var _props$reconnectChatP, _props$reconnectChatP2;
41
+ var _props$chatConfig, _props$reconnectChatP;
42
+
43
+ let authClientFunction = undefined;
33
44
 
34
- if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && (_props$reconnectChatP2 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP2 !== void 0 && _props$reconnectChatP2.authClientFunction // TODO: Implement this after storage is in place
45
+ if ((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) {
46
+ var _props$chatConfig2, _props$chatConfig2$Li;
47
+
48
+ authClientFunction = ((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 ? void 0 : (_props$chatConfig2$Li = _props$chatConfig2.LiveChatConfigAuthSettings) === null || _props$chatConfig2$Li === void 0 ? void 0 : _props$chatConfig2$Li.msdyn_javascriptclientfunction) ?? undefined;
49
+ }
50
+
51
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && authClientFunction // TODO: Implement this after storage is in place
35
52
 
36
53
  /* && !isLoadWithState() */
37
54
  ) {
38
- const previousActiveSessionResponse = await getChatReconnectContext(chatSDK);
55
+ var _props$reconnectChatP2;
56
+
57
+ const previousActiveSessionResponse = await getChatReconnectContext(chatSDK, props.chatConfig, props.getAuthToken, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.isReconnectEnabled);
39
58
 
40
59
  if (previousActiveSessionResponse && previousActiveSessionResponse.reconnectId) {
41
60
  return previousActiveSessionResponse.reconnectId;
@@ -46,33 +65,107 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
46
65
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
66
 
48
67
 
49
- const handleUnauthenticatedReconnectChat = async (dispatch, reconnectId, initStartChat) => {
50
- const reconnectAvailabilityResponse = await getChatReconnectContext(reconnectId);
68
+ const handleUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isReconnectEnabled, reconnectId, initStartChat, redirectInSameWindow) => {
69
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId);
51
70
 
52
- if (reconnectAvailabilityResponse && reconnectAvailabilityResponse.redirectURL) {
53
- redirectPage(reconnectAvailabilityResponse.redirectURL);
71
+ if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
72
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
54
73
  } else {
55
- const optionalParams = {
56
- reconnectId: reconnectId
57
- };
74
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
75
+ }
76
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
+
78
+
79
+ const startUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isReconnectEnabled, reconnectId, initStartChat) => {
80
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId);
81
+
82
+ if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
83
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
84
+ }
85
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+
87
+
88
+ const setReconnectIdAndStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
89
+ const startUnauthenticatedReconnectChat = {
90
+ eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
91
+ };
92
+ BroadcastService.postMessage(startUnauthenticatedReconnectChat);
93
+ const optionalParams = {
94
+ reconnectId: reconnectId
95
+ };
96
+ dispatch({
97
+ type: LiveChatWidgetActionType.SET_RECONNECT_ID,
98
+ payload: reconnectId
99
+ });
100
+ dispatch({
101
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
102
+ payload: ConversationState.Loading
103
+ });
104
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, optionalParams);
105
+ };
106
+
107
+ const redirectPage = (redirectURL, redirectInSameWindow) => {
108
+ const redirectPageRequest = {
109
+ eventName: BroadcastEvent.RedirectPageRequest,
110
+ payload: {
111
+ redirectURL: redirectURL
112
+ }
113
+ };
114
+ BroadcastService.postMessage(redirectPageRequest);
115
+
116
+ if (redirectInSameWindow) {
117
+ window.location.href = redirectURL;
118
+ }
119
+ };
120
+
121
+ const shouldRedirectOrStartNewChat = reconnectAvailabilityResponse => {
122
+ return reconnectAvailabilityResponse && !reconnectAvailabilityResponse.reconnectId;
123
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
124
+
125
+
126
+ const startNewChatEmptyRedirectionUrl = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat) => {
127
+ const startUnauthenticatedReconnectChat = {
128
+ eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
129
+ };
130
+ BroadcastService.postMessage(startUnauthenticatedReconnectChat); // Getting PreChat Survey Context
131
+
132
+ const parseToJson = false;
133
+ const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
134
+
135
+ if (preChatSurveyResponse) {
58
136
  dispatch({
59
- type: LiveChatWidgetActionType.SET_RECONNECT_ID,
60
- payload: reconnectId
137
+ type: LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
138
+ payload: preChatSurveyResponse
61
139
  });
140
+ dispatch({
141
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
142
+ payload: ConversationState.Prechat
143
+ });
144
+ } else {
62
145
  dispatch({
63
146
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
64
147
  payload: ConversationState.Loading
65
148
  });
66
- await initStartChat(optionalParams);
149
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
67
150
  }
68
- };
151
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
152
 
70
- const redirectPage = newUrl => {
71
- const data = {
72
- messageName: Constants.redirectPageRequest,
73
- newUrl: newUrl
74
- };
75
- window.parent.postMessage(data, "*");
153
+
154
+ const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, isReconnectEnabled, reconnectId, redirectInSameWindow) => {
155
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId);
156
+
157
+ if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
158
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
159
+ }
160
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
161
+
162
+
163
+ const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
164
+ if (reconnectAvailabilityResponse.redirectURL) {
165
+ redirectPage(reconnectAvailabilityResponse.redirectURL, redirectInSameWindow);
166
+ } else {
167
+ await startNewChatEmptyRedirectionUrl(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat);
168
+ }
76
169
  };
77
170
 
78
- export { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat };
171
+ export { getChatReconnectContext, getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat, startUnauthenticatedReconnectChat, handleRedirectUnauthenticatedReconnectChat };
@@ -1,10 +1,9 @@
1
- import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
2
1
  import { RegisterLoggers, TelemetryManager } from "../../../common/telemetry/TelemetryManager";
2
+ import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
3
3
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
4
4
  import { defaultAriaConfig } from "../../../common/telemetry/defaultConfigs/defaultAriaConfig";
5
5
  import { defaultInternalTelemetryData } from "../../../common/telemetry/defaultConfigs/defaultTelemetryInternalData";
6
6
  import { defaultTelemetryConfiguration } from "../../../common/telemetry/defaultConfigs/defaultTelemetryConfiguration";
7
- import packageInfo from "@microsoft/omnichannel-chat-sdk/package.json";
8
7
  export const registerTelemetryLoggers = (props, dispatch) => {
9
8
  var _props$liveChatContex, _props$liveChatContex2;
10
9
 
@@ -17,6 +16,8 @@ export const registerTelemetryLoggers = (props, dispatch) => {
17
16
 
18
17
  TelemetryManager.InternalTelemetryData = (_props$liveChatContex3 = props.liveChatContextFromCache) === null || _props$liveChatContex3 === void 0 ? void 0 : (_props$liveChatContex4 = _props$liveChatContex3.domainStates) === null || _props$liveChatContex4 === void 0 ? void 0 : _props$liveChatContex4.telemetryInternalData;
19
18
  } else {
19
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$chatSDK3, _props$chatSDK3$omnic;
20
+
20
21
  let telemetryData = { ...defaultInternalTelemetryData,
21
22
  telemetryConfig: Object.assign({}, defaultTelemetryConfiguration, telemetryConfig),
22
23
  ariaConfig: Object.assign({}, defaultAriaConfig, telemetryConfig === null || telemetryConfig === void 0 ? void 0 : telemetryConfig.ariaConfigurations)
@@ -27,7 +28,13 @@ export const registerTelemetryLoggers = (props, dispatch) => {
27
28
  }
28
29
 
29
30
  telemetryData = TelemetryHelper.addWidgetDataToTelemetry(telemetryConfig, telemetryData);
30
- telemetryData.OCChatSDKVersion = packageInfo.version;
31
+ telemetryData.OCChatSDKVersion = telemetryConfig.OCChatSDKVersion ?? "0.0.0-0";
32
+ telemetryData.chatComponentVersion = telemetryConfig.chatComponentVersion ?? "0.0.0-0";
33
+ telemetryData.chatWidgetVersion = telemetryConfig.chatWidgetVersion ?? "0.0.0-0";
34
+ telemetryData.orgId = (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId;
35
+ telemetryData.widgetId = (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId;
36
+ telemetryData.orgUrl = (_props$chatSDK3 = props.chatSDK) === null || _props$chatSDK3 === void 0 ? void 0 : (_props$chatSDK3$omnic = _props$chatSDK3.omnichannelConfig) === null || _props$chatSDK3$omnic === void 0 ? void 0 : _props$chatSDK3$omnic.orgUrl;
37
+ TelemetryManager.InternalTelemetryData = telemetryData;
31
38
  dispatch({
32
39
  type: LiveChatWidgetActionType.SET_TELEMETRY_DATA,
33
40
  payload: telemetryData
@@ -1,20 +1,23 @@
1
1
  import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
3
+ import { ConversationState } from "../../../contexts/common/ConversationState";
2
4
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
3
- import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
4
- import { ConversationState } from "../../../contexts/common/ConversationState"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
6
 
6
- export const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, loadSurvey) => {
7
+ export const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, persistedChat) => {
7
8
  try {
8
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
- const context = await chatSDK.getPostChatSurveyContext();
10
- TelemetryHelper.logSDKEvent(LogLevel.INFO, {
11
- Event: TelemetryEvent.PostChatContextCallSucceed,
12
- Description: "Postchat context call succeed."
13
- });
14
- dispatch({
15
- type: LiveChatWidgetActionType.SET_POST_CHAT_CONTEXT,
16
- payload: context
17
- });
9
+ if (!persistedChat) {
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ const context = await chatSDK.getPostChatSurveyContext();
12
+ TelemetryHelper.logSDKEvent(LogLevel.INFO, {
13
+ Event: TelemetryEvent.PostChatContextCallSucceed,
14
+ Description: "Postchat context call succeed."
15
+ });
16
+ dispatch({
17
+ type: LiveChatWidgetActionType.SET_POST_CHAT_CONTEXT,
18
+ payload: context
19
+ });
20
+ }
18
21
  } catch (ex) {
19
22
  TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
20
23
  Event: TelemetryEvent.PostChatContextCallFailed,
@@ -22,19 +25,13 @@ export const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, loadSur
22
25
  exception: ex
23
26
  }
24
27
  });
25
- }
26
- /* -true: setPostChatContextAndLoadSurvey is called after passing all checks from ConfirmationPane and endChatMiddleware in usual scenario.
27
- -false: Below if condition is needed for multi-tab scenarios. So when agent ends a chat and customer has opened chat in multiple tabs,
28
- all tabs should show post chat survey as per existing functionality. But when an agent end a conversation, Omnichannel SDK
29
- getPostChatSurveyContext returns as invalid conversation. To avoid that, caching the survey url is needed after chat starts and
30
- in this case loadSurvey is false
31
- */
28
+ } // eslint-disable-next-line @typescript-eslint/no-unused-vars
32
29
 
33
30
 
34
- if (loadSurvey) {
31
+ BroadcastService.getMessageByEventName("LoadPostChatSurvey").subscribe(msg => {
35
32
  dispatch({
36
33
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
37
34
  payload: ConversationState.Postchat
38
35
  });
39
- }
36
+ });
40
37
  };
@@ -0,0 +1,38 @@
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 = []; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+
6
+ let subscription; // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+
8
+ return new window.Observable(observer => {
9
+ if (!subscription) {
10
+ subscription = observable.subscribe({
11
+ complete() {
12
+ observers.forEach(observer => observer.complete());
13
+ },
14
+
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ error(err) {
17
+ observers.forEach(observer => observer.error(err));
18
+ },
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
+ }
27
+
28
+ observers.push(observer);
29
+ return () => {
30
+ observers = observers.filter(o => o !== observer);
31
+
32
+ if (!observers.length) {
33
+ subscription.unsubscribe();
34
+ subscription = null;
35
+ }
36
+ };
37
+ });
38
+ }
@@ -1,5 +1,5 @@
1
- import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
1
  import { ChatSDKError } from "../../../common/Constants";
2
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
3
  import { ConversationState } from "../../../contexts/common/ConversationState";
4
4
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
5
5
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
@@ -7,16 +7,38 @@ import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcon
7
7
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
8
8
  import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
9
9
  import { createAdapter } from "./createAdapter";
10
- import { createTimer } from "../../../common/utils";
11
- import { getReconnectIdForAuthenticatedChat } from "./reconnectChatHelper";
10
+ import { createOnNewAdapterActivityHandler } from "../../../plugins/newMessageEventHandler";
11
+ import { createTimer, getStateFromCache, isUndefinedOrEmpty } from "../../../common/utils";
12
+ import { getReconnectIdForAuthenticatedChat, handleRedirectUnauthenticatedReconnectChat } from "./reconnectChatHelper";
13
+ import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
12
14
  import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
13
- import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
16
+ import { ActivityStreamHandler } from "./ActivityStreamHandler";
17
+ import { getAuthClientFunction, handleAuthentication } from "./authHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+
19
+ let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+
21
+ let widgetInstanceId; // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
22
 
15
23
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
16
- // Getting PreChat Survey Context
17
- const parseToJson = false;
18
- const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
19
- const showPrechat = state.appStates.conversationState === ConversationState.ProactiveChat ? preChatSurveyResponse && state.appStates.proactiveChatStates.proactiveChatEnablePrechat : preChatSurveyResponse; // Getting reconnectId for authenticated chat
24
+ var _props$controlProps, _props$reconnectChatP;
25
+
26
+ optionalParams = {}; //Resetting to ensure no stale values
27
+
28
+ widgetInstanceId = props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId; // Can connect to existing chat session
29
+
30
+ if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
31
+ return;
32
+ } // Redirecting if unauthenticated reconnect chat expired
33
+
34
+
35
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
36
+ var _props$reconnectChatP2, _props$reconnectChatP3, _props$reconnectChatP4;
37
+
38
+ await handleRedirectUnauthenticatedReconnectChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.isReconnectEnabled, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.reconnectId, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.redirectInSameWindow);
39
+ return;
40
+ } // Getting reconnectId for authenticated chat
41
+
20
42
 
21
43
  const reconnectId = await getReconnectIdForAuthenticatedChat(props, chatSDK);
22
44
 
@@ -29,7 +51,24 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
29
51
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
30
52
  payload: ConversationState.ReconnectChat
31
53
  });
32
- } else if (showPrechat) {
54
+ return;
55
+ } // Setting Proactive chat settings
56
+
57
+
58
+ const isProactiveChat = state.appStates.conversationState === ConversationState.ProactiveChat;
59
+ const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
60
+
61
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
62
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
+
64
+
65
+ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
66
+ // Getting prechat Survey Context
67
+ const parseToJson = false;
68
+ const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
69
+ const showPrechat = isProactiveChat ? preChatSurveyResponse && proactiveChatEnablePrechatState : preChatSurveyResponse;
70
+
71
+ if (showPrechat) {
33
72
  dispatch({
34
73
  type: LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
35
74
  payload: preChatSurveyResponse
@@ -38,54 +77,113 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
38
77
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
39
78
  payload: ConversationState.Prechat
40
79
  });
41
- } else {
42
- dispatch({
43
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
44
- payload: ConversationState.Loading
45
- });
46
- await initStartChat(chatSDK, dispatch, setAdapter);
47
- }
80
+ return;
81
+ } //Initiate start chat
82
+
83
+
84
+ dispatch({
85
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
86
+ payload: ConversationState.Loading
87
+ });
88
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
48
89
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
90
 
50
91
 
51
- const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
92
+ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
52
93
  try {
53
- var _TelemetryTimers$Widg;
94
+ var _newAdapter$activity$, _TelemetryTimers$Widg;
54
95
 
55
- try {
56
- TelemetryHelper.logConfigDataEvent(LogLevel.INFO, {
57
- Event: TelemetryEvent.StartChatSDKCall
96
+ const authClientFunction = getAuthClientFunction(chatConfig);
97
+
98
+ if (getAuthToken && authClientFunction) {
99
+ // set auth token to chat sdk before start chat
100
+ const authSuccess = await handleAuthentication(chatSDK, chatConfig, getAuthToken);
101
+
102
+ if (!authSuccess) {
103
+ return;
104
+ }
105
+ }
106
+
107
+ let isStartChatSuccessful = false; //Check if chat retrieved from cache
108
+
109
+ if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
110
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
111
+
112
+ BroadcastService.postMessage({
113
+ eventName: BroadcastEvent.ChatRetrievedFromCache,
114
+ payload: {
115
+ chatId: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai = persistedState.domainStates) === null || _persistedState$domai === void 0 ? void 0 : (_persistedState$domai2 = _persistedState$domai.liveChatContext) === null || _persistedState$domai2 === void 0 ? void 0 : (_persistedState$domai3 = _persistedState$domai2.chatToken) === null || _persistedState$domai3 === void 0 ? void 0 : _persistedState$domai3.chatId,
116
+ requestId: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai4 = persistedState.domainStates) === null || _persistedState$domai4 === void 0 ? void 0 : (_persistedState$domai5 = _persistedState$domai4.liveChatContext) === null || _persistedState$domai5 === void 0 ? void 0 : _persistedState$domai5.requestId
117
+ }
58
118
  });
59
- await chatSDK.startChat(params);
119
+ }
120
+
121
+ try {
122
+ //Start widget load timer
60
123
  TelemetryTimers.WidgetLoadTimer = createTimer();
124
+ TelemetryHelper.logSDKEvent(LogLevel.INFO, {
125
+ Event: TelemetryEvent.StartChatSDKCall
126
+ }); // Set custom context params
127
+
128
+ setCustomContextParams(chatSDK);
129
+ optionalParams = Object.assign({}, params, optionalParams);
130
+ await chatSDK.startChat(optionalParams);
131
+ isStartChatSuccessful = true;
61
132
  } catch (error) {
62
- TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
133
+ TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
63
134
  Event: TelemetryEvent.StartChatMethodException,
64
135
  ExceptionDetails: {
65
136
  exception: `Failed to setup startChat: ${error}`
66
137
  }
67
138
  });
68
- }
139
+ isStartChatSuccessful = false; // Resetting the widget state to Closed, for recent introduction of OC rate limiting(429 Error)
140
+ // TODO : How to diplay a proper UI message to customer to try after sometime at this point - cool down scenario
141
+
142
+ dispatch({
143
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
144
+ payload: ConversationState.Closed
145
+ });
146
+ return;
147
+ } // New adapter creation
148
+
69
149
 
70
150
  const newAdapter = await createAdapter(chatSDK);
71
- setAdapter(newAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
151
+ setAdapter(newAdapter);
152
+ const chatToken = await chatSDK.getChatToken();
153
+ dispatch({
154
+ type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
155
+ payload: chatToken
156
+ });
157
+ 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));
72
158
 
73
- if (chatSDK !== null && chatSDK !== void 0 && chatSDK.getVoiceVideoCalling) {
74
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
- const chatToken = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatToken());
159
+ if (persistedState) {
76
160
  dispatch({
77
- type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
78
- payload: chatToken
161
+ type: LiveChatWidgetActionType.SET_WIDGET_STATE,
162
+ payload: persistedState
79
163
  });
80
- }
164
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
165
+ return;
166
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
167
 
82
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch, false);
83
- await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
84
168
 
169
+ const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
85
170
  dispatch({
86
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
87
- payload: ConversationState.Active
88
- });
171
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
172
+ payload: liveChatContext
173
+ }); // Set post chat context in state, no survey load
174
+
175
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch); // Updating chat session detail for telemetry
176
+
177
+ await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
178
+
179
+ if (isStartChatSuccessful) {
180
+ ActivityStreamHandler.uncork();
181
+ dispatch({
182
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
183
+ payload: ConversationState.Active
184
+ });
185
+ }
186
+
89
187
  TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
90
188
  Event: TelemetryEvent.WidgetLoadComplete,
91
189
  Description: "Widget load complete",
@@ -93,9 +191,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
93
191
  });
94
192
  } catch (ex) {
95
193
  TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
96
- Event: TelemetryEvent.StartChatFailed,
194
+ Event: TelemetryEvent.WidgetLoadFailed,
97
195
  ExceptionDetails: {
98
- Exception: `Start Chat Failed: ${ex}`
196
+ Exception: `Widget load Failed: ${ex}`
99
197
  }
100
198
  });
101
199
  NotificationHandler.notifyError(NotificationScenarios.Connection, "Start Chat Failed: " + ex); // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -110,7 +208,65 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
110
208
  payload: ConversationState.OutOfOffice
111
209
  });
112
210
  }
211
+ } finally {
212
+ optionalParams = {};
213
+ widgetInstanceId = "";
214
+ }
215
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
216
+
217
+
218
+ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
219
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
220
+
221
+ // By pass this function in case of popout chat
222
+ if (state.appStates.skipChatButtonRendering === true) {
223
+ return false;
224
+ }
225
+
226
+ 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$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.widgetInstanceId) ?? ""); //Connect to only active chat session
227
+
228
+ 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) {
229
+ var _persistedState$domai7;
230
+
231
+ dispatch({
232
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
233
+ payload: ConversationState.Loading
234
+ });
235
+ const optionalParams = {
236
+ liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
237
+ };
238
+ await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
239
+ return true;
240
+ } else {
241
+ return false;
242
+ }
243
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
244
+
245
+
246
+ const setCustomContextParams = chatSDK => {
247
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _persistedState$domai8;
248
+
249
+ // Add custom context only for unauthenticated chat
250
+ 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 ?? "");
251
+
252
+ if (!isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
253
+ var _persistedState$domai9, _persistedState$domai10;
254
+
255
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
256
+ const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
257
+ TelemetryHelper.logSDKEvent(LogLevel.WARN, {
258
+ Event: TelemetryEvent.StartChatMethodException,
259
+ ExceptionDetails: {
260
+ exception: errorMessage
261
+ }
262
+ });
263
+ throw new Error(errorMessage);
264
+ }
265
+
266
+ optionalParams = Object.assign({}, optionalParams, {
267
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
268
+ });
113
269
  }
114
270
  };
115
271
 
116
- export { prepareStartChat, initStartChat };
272
+ export { prepareStartChat, initStartChat, setPreChatAndInitiateChat };