@microsoft/omnichannel-chat-widget 0.1.0-main.86df755 → 0.1.0-main.886e5cf

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