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

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 (216) 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/telemetry/TelemetryConstants.js +61 -4
  8. package/lib/cjs/common/telemetry/TelemetryHelper.js +22 -4
  9. package/lib/cjs/common/telemetry/TelemetryManager.js +28 -9
  10. package/lib/cjs/common/telemetry/defaultConfigs/defaultAriaConfig.js +3 -3
  11. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  12. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +48 -15
  13. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +9 -5
  14. package/lib/cjs/common/utils.js +89 -2
  15. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  16. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -4
  17. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +7 -54
  18. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  19. package/lib/cjs/components/footerstateful/FooterStateful.js +4 -5
  20. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +11 -2
  21. package/lib/cjs/components/headerstateful/HeaderStateful.js +14 -10
  22. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  23. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  24. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  25. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  26. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  27. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  28. package/lib/cjs/components/livechatwidget/common/authHelper.js +52 -0
  29. package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
  30. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +32 -32
  31. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +30 -24
  32. package/lib/cjs/components/livechatwidget/common/disposeTelemetryLoggers.js +14 -0
  33. package/lib/cjs/components/livechatwidget/common/endChat.js +142 -43
  34. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +5 -0
  35. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +51 -10
  36. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +144 -39
  37. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +11 -7
  38. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +22 -24
  39. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  40. package/lib/cjs/components/livechatwidget/common/startChat.js +198 -41
  41. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +3 -3
  42. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +299 -72
  43. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  44. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +8 -0
  45. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  46. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +22 -10
  47. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +27 -5
  48. package/lib/cjs/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  49. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +91 -0
  50. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
  51. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  52. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +6 -0
  53. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +51 -73
  54. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  55. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  56. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +14 -0
  57. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +25 -48
  58. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +3 -1
  59. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +52 -0
  60. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +98 -0
  61. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +117 -0
  62. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  63. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +45 -0
  64. package/lib/cjs/contexts/common/ConversationState.js +4 -2
  65. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +13 -7
  66. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +12 -4
  67. package/lib/cjs/contexts/createReducer.js +44 -10
  68. package/lib/cjs/controller/componentController.js +5 -5
  69. package/lib/cjs/plugins/newMessageEventHandler.js +99 -0
  70. package/lib/esm/assets/Audios.js +1 -0
  71. package/lib/esm/assets/Icons.js +11 -0
  72. package/lib/esm/common/Constants.js +50 -3
  73. package/lib/esm/common/contextDataStore/DataStoreManager.js +5 -0
  74. package/lib/esm/common/interfaces/IContextDataStore.js +1 -0
  75. package/lib/esm/common/telemetry/TelemetryConstants.js +57 -3
  76. package/lib/esm/common/telemetry/TelemetryHelper.js +22 -5
  77. package/lib/esm/common/telemetry/TelemetryManager.js +22 -9
  78. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +3 -3
  79. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  80. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +50 -15
  81. package/lib/esm/common/telemetry/loggers/consoleLogger.js +9 -5
  82. package/lib/esm/common/utils.js +64 -1
  83. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  84. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +22 -7
  85. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +7 -50
  86. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  87. package/lib/esm/components/footerstateful/FooterStateful.js +4 -5
  88. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +9 -3
  89. package/lib/esm/components/headerstateful/HeaderStateful.js +15 -11
  90. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  91. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  92. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  93. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  94. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  95. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  96. package/lib/esm/components/livechatwidget/common/authHelper.js +39 -0
  97. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
  98. package/lib/esm/components/livechatwidget/common/createMarkdown.js +32 -31
  99. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +28 -25
  100. package/lib/esm/components/livechatwidget/common/disposeTelemetryLoggers.js +4 -0
  101. package/lib/esm/components/livechatwidget/common/endChat.js +139 -42
  102. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +3 -0
  103. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +45 -11
  104. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +134 -41
  105. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +10 -3
  106. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +19 -22
  107. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  108. package/lib/esm/components/livechatwidget/common/startChat.js +186 -39
  109. package/lib/esm/components/livechatwidget/common/startProactiveChat.js +5 -5
  110. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +283 -77
  111. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  112. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +6 -0
  113. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  114. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +22 -10
  115. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +26 -6
  116. package/lib/esm/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  117. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +82 -0
  118. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  119. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  120. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +6 -0
  121. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +2 -12
  122. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  123. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  124. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
  125. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +23 -46
  126. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -1
  127. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  128. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +94 -0
  129. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +107 -0
  130. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  131. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +32 -0
  132. package/lib/esm/contexts/common/ConversationState.js +4 -2
  133. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +13 -7
  134. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +12 -4
  135. package/lib/esm/contexts/createReducer.js +44 -9
  136. package/lib/esm/controller/componentController.js +5 -5
  137. package/lib/esm/plugins/newMessageEventHandler.js +82 -0
  138. package/lib/types/assets/Audios.d.ts +1 -0
  139. package/lib/types/assets/Icons.d.ts +11 -0
  140. package/lib/types/common/Constants.d.ts +27 -1
  141. package/lib/types/common/contextDataStore/DataStoreManager.d.ts +4 -0
  142. package/lib/types/common/interfaces/IContextDataStore.d.ts +14 -0
  143. package/lib/types/common/telemetry/TelemetryConstants.d.ts +45 -2
  144. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -0
  145. package/lib/types/common/telemetry/TelemetryManager.d.ts +1 -0
  146. package/lib/types/common/telemetry/definitions/Contracts.d.ts +3 -0
  147. package/lib/types/common/telemetry/definitions/Payload.d.ts +15 -9
  148. package/lib/types/common/telemetry/interfaces/IChatSDKLogger.d.ts +1 -0
  149. package/lib/types/common/telemetry/interfaces/IInternalTelemetryData.d.ts +2 -0
  150. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +12 -0
  151. package/lib/types/common/utils.d.ts +8 -1
  152. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +5 -2
  153. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  154. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +5 -1
  155. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  156. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  157. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  158. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  159. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  160. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  161. package/lib/types/components/livechatwidget/common/authHelper.d.ts +4 -0
  162. package/lib/types/components/livechatwidget/common/disposeTelemetryLoggers.d.ts +1 -0
  163. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  164. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +6 -2
  165. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  166. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  167. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -2
  168. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +2 -1
  169. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  170. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  171. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +4 -1
  172. package/lib/types/components/prechatsurveypanestateful/interfaces/IPreChatSurveyPaneStatefulParams.d.ts +1 -1
  173. package/lib/types/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.d.ts +3 -0
  174. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -1
  175. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  176. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +2 -0
  177. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  178. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  179. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  180. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +4 -0
  181. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  182. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +0 -1
  183. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  184. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  185. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  186. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  187. package/lib/types/contexts/common/ConversationState.d.ts +4 -2
  188. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +5 -1
  189. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +14 -8
  190. package/lib/types/plugins/newMessageEventHandler.d.ts +2 -0
  191. package/package.json +13 -12
  192. package/lib/cjs/assets/audios/newMessageNotification.mp3 +0 -0
  193. package/lib/cjs/assets/icons/archiveIcon.svg +0 -3
  194. package/lib/cjs/assets/icons/audioIcon.svg +0 -6
  195. package/lib/cjs/assets/icons/blankIcon.svg +0 -6
  196. package/lib/cjs/assets/icons/excelIcon.svg +0 -6
  197. package/lib/cjs/assets/icons/imageIcon.svg +0 -6
  198. package/lib/cjs/assets/icons/oneNoteIcon.svg +0 -6
  199. package/lib/cjs/assets/icons/pdfIcon.svg +0 -6
  200. package/lib/cjs/assets/icons/powerpointIcon.svg +0 -6
  201. package/lib/cjs/assets/icons/videoIcon.svg +0 -6
  202. package/lib/cjs/assets/icons/visioIcon.svg +0 -6
  203. package/lib/cjs/assets/icons/wordIcon.svg +0 -6
  204. package/lib/esm/assets/assets.d.js +0 -0
  205. package/lib/esm/assets/audios/newMessageNotification.mp3 +0 -0
  206. package/lib/esm/assets/icons/archiveIcon.svg +0 -3
  207. package/lib/esm/assets/icons/audioIcon.svg +0 -6
  208. package/lib/esm/assets/icons/blankIcon.svg +0 -6
  209. package/lib/esm/assets/icons/excelIcon.svg +0 -6
  210. package/lib/esm/assets/icons/imageIcon.svg +0 -6
  211. package/lib/esm/assets/icons/oneNoteIcon.svg +0 -6
  212. package/lib/esm/assets/icons/pdfIcon.svg +0 -6
  213. package/lib/esm/assets/icons/powerpointIcon.svg +0 -6
  214. package/lib/esm/assets/icons/videoIcon.svg +0 -6
  215. package/lib/esm/assets/icons/visioIcon.svg +0 -6
  216. package/lib/esm/assets/icons/wordIcon.svg +0 -6
@@ -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 { 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,104 @@ 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
+ let isStartChatSuccessful = false; //Check if chat retrieved from cache
97
+
98
+ if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
99
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
100
+
101
+ BroadcastService.postMessage({
102
+ eventName: BroadcastEvent.ChatRetrievedFromCache,
103
+ payload: {
104
+ 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,
105
+ 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
106
+ }
58
107
  });
59
- await chatSDK.startChat(params);
108
+ }
109
+
110
+ try {
111
+ //Start widget load timer
60
112
  TelemetryTimers.WidgetLoadTimer = createTimer();
113
+ TelemetryHelper.logSDKEvent(LogLevel.INFO, {
114
+ Event: TelemetryEvent.StartChatSDKCall
115
+ }); // Set custom context params
116
+
117
+ setCustomContextParams(chatSDK);
118
+ optionalParams = Object.assign({}, params, optionalParams); // set auth token to chat sdk before start chat
119
+
120
+ await handleAuthentication(chatSDK, chatConfig, getAuthToken);
121
+ await chatSDK.startChat(optionalParams);
122
+ isStartChatSuccessful = true;
61
123
  } catch (error) {
62
- TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
124
+ TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
63
125
  Event: TelemetryEvent.StartChatMethodException,
64
126
  ExceptionDetails: {
65
127
  exception: `Failed to setup startChat: ${error}`
66
128
  }
67
129
  });
68
- }
130
+ isStartChatSuccessful = false; // Resetting the widget state to Closed, for recent introduction of OC rate limiting(429 Error)
131
+ // TODO : How to diplay a proper UI message to customer to try after sometime at this point - cool down scenario
132
+
133
+ dispatch({
134
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
135
+ payload: ConversationState.Closed
136
+ });
137
+ return;
138
+ } // New adapter creation
139
+
69
140
 
70
141
  const newAdapter = await createAdapter(chatSDK);
71
- setAdapter(newAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
142
+ setAdapter(newAdapter);
143
+ const chatToken = await chatSDK.getChatToken();
144
+ dispatch({
145
+ type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
146
+ payload: chatToken
147
+ });
148
+ 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
149
 
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());
150
+ if (persistedState) {
76
151
  dispatch({
77
- type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
78
- payload: chatToken
152
+ type: LiveChatWidgetActionType.SET_WIDGET_STATE,
153
+ payload: persistedState
79
154
  });
80
- }
155
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
156
+ return;
157
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
158
 
82
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch, false);
83
- await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
84
159
 
160
+ const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
85
161
  dispatch({
86
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
87
- payload: ConversationState.Active
88
- });
162
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
163
+ payload: liveChatContext
164
+ }); // Set post chat context in state, no survey load
165
+
166
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch); // Updating chat session detail for telemetry
167
+
168
+ await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
169
+
170
+ if (isStartChatSuccessful) {
171
+ ActivityStreamHandler.uncork();
172
+ dispatch({
173
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
174
+ payload: ConversationState.Active
175
+ });
176
+ }
177
+
89
178
  TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
90
179
  Event: TelemetryEvent.WidgetLoadComplete,
91
180
  Description: "Widget load complete",
@@ -93,9 +182,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
93
182
  });
94
183
  } catch (ex) {
95
184
  TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
96
- Event: TelemetryEvent.StartChatFailed,
185
+ Event: TelemetryEvent.WidgetLoadFailed,
97
186
  ExceptionDetails: {
98
- Exception: `Start Chat Failed: ${ex}`
187
+ Exception: `Widget load Failed: ${ex}`
99
188
  }
100
189
  });
101
190
  NotificationHandler.notifyError(NotificationScenarios.Connection, "Start Chat Failed: " + ex); // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -110,7 +199,65 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
110
199
  payload: ConversationState.OutOfOffice
111
200
  });
112
201
  }
202
+ } finally {
203
+ optionalParams = {};
204
+ widgetInstanceId = "";
205
+ }
206
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
207
+
208
+
209
+ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
210
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
211
+
212
+ // By pass this function in case of popout chat
213
+ if (state.appStates.skipChatButtonRendering === true) {
214
+ return false;
215
+ }
216
+
217
+ 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
218
+
219
+ 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) {
220
+ var _persistedState$domai7;
221
+
222
+ dispatch({
223
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
224
+ payload: ConversationState.Loading
225
+ });
226
+ const optionalParams = {
227
+ liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
228
+ };
229
+ await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
230
+ return true;
231
+ } else {
232
+ return false;
233
+ }
234
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
235
+
236
+
237
+ const setCustomContextParams = chatSDK => {
238
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _persistedState$domai8;
239
+
240
+ // Add custom context only for unauthenticated chat
241
+ 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 ?? "");
242
+
243
+ if (!isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
244
+ var _persistedState$domai9, _persistedState$domai10;
245
+
246
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
247
+ const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
248
+ TelemetryHelper.logSDKEvent(LogLevel.WARN, {
249
+ Event: TelemetryEvent.StartChatMethodException,
250
+ ExceptionDetails: {
251
+ exception: errorMessage
252
+ }
253
+ });
254
+ throw new Error(errorMessage);
255
+ }
256
+
257
+ optionalParams = Object.assign({}, optionalParams, {
258
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
259
+ });
113
260
  }
114
261
  };
115
262
 
116
- export { prepareStartChat, initStartChat };
263
+ export { prepareStartChat, initStartChat, setPreChatAndInitiateChat };
@@ -2,14 +2,14 @@ import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryCon
2
2
  import { ConversationState } from "../../../contexts/common/ConversationState";
3
3
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
4
4
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
5
- import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager"; // Defines startProactiveChat callback
6
-
7
- export const startProactiveChat = (dispatch, bodyTitle, showPrechat, inNewWindow) => {
5
+ import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
6
+ // Defines startProactiveChat callback
7
+ export const startProactiveChat = (dispatch, notificationConfig, enablePreChat, inNewWindow) => {
8
8
  dispatch({
9
9
  type: LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
10
10
  payload: {
11
- proactiveChatBodyTitle: bodyTitle ?? "",
12
- proactiveChatEnablePrechat: showPrechat ?? false,
11
+ proactiveChatBodyTitle: notificationConfig && notificationConfig.message ? notificationConfig.message : "",
12
+ proactiveChatEnablePrechat: enablePreChat ?? false,
13
13
  proactiveChatInNewWindow: inNewWindow ?? false
14
14
  }
15
15
  });