@microsoft/omnichannel-chat-widget 0.1.0-main.8b6c0d8 → 0.1.0-main.8cded52

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