@microsoft/omnichannel-chat-widget 0.1.0-main.4188c11 → 0.1.0-main.4eb4d1f

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 (101) hide show
  1. package/README.md +32 -0
  2. package/lib/cjs/common/Constants.js +16 -2
  3. package/lib/cjs/common/telemetry/TelemetryConstants.js +21 -3
  4. package/lib/cjs/common/utils.js +62 -2
  5. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +19 -3
  6. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
  7. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +10 -1
  8. package/lib/cjs/components/headerstateful/HeaderStateful.js +2 -2
  9. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  10. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  11. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  12. package/lib/cjs/components/livechatwidget/common/createAdapter.js +9 -1
  13. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +31 -30
  14. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +9 -3
  15. package/lib/cjs/components/livechatwidget/common/endChat.js +68 -22
  16. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +16 -3
  17. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +23 -15
  18. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
  19. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  20. package/lib/cjs/components/livechatwidget/common/startChat.js +173 -67
  21. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +179 -84
  22. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +5 -10
  23. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -1
  24. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +80 -0
  25. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  26. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  27. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +14 -0
  28. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +16 -2
  29. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +52 -0
  30. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +98 -0
  31. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +117 -0
  32. package/lib/cjs/contexts/common/ConversationState.js +3 -2
  33. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +2 -0
  34. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -2
  35. package/lib/cjs/contexts/createReducer.js +8 -0
  36. package/lib/cjs/controller/componentController.js +3 -3
  37. package/lib/esm/common/Constants.js +16 -2
  38. package/lib/esm/common/telemetry/TelemetryConstants.js +21 -3
  39. package/lib/esm/common/utils.js +43 -0
  40. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +21 -6
  41. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
  42. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +8 -2
  43. package/lib/esm/components/headerstateful/HeaderStateful.js +2 -2
  44. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  45. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  46. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  47. package/lib/esm/components/livechatwidget/common/createAdapter.js +9 -2
  48. package/lib/esm/components/livechatwidget/common/createMarkdown.js +31 -30
  49. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +9 -3
  50. package/lib/esm/components/livechatwidget/common/endChat.js +65 -22
  51. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +15 -5
  52. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +23 -15
  53. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
  54. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  55. package/lib/esm/components/livechatwidget/common/startChat.js +170 -68
  56. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +173 -86
  57. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +7 -11
  58. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -1
  59. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +72 -0
  60. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  61. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  62. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
  63. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +16 -2
  64. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  65. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +94 -0
  66. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +107 -0
  67. package/lib/esm/contexts/common/ConversationState.js +3 -2
  68. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +2 -0
  69. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -2
  70. package/lib/esm/contexts/createReducer.js +8 -0
  71. package/lib/esm/controller/componentController.js +3 -3
  72. package/lib/types/common/Constants.d.ts +8 -1
  73. package/lib/types/common/interfaces/IContextDataStore.d.ts +1 -1
  74. package/lib/types/common/telemetry/TelemetryConstants.d.ts +21 -4
  75. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  76. package/lib/types/common/utils.d.ts +6 -1
  77. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  78. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  79. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  80. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  81. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  82. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -4
  83. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  84. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  85. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -2
  86. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  87. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -0
  88. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
  89. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  90. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  91. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  92. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  93. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  94. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  95. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  96. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  97. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  98. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  99. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -1
  100. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +3 -1
  101. package/package.json +2 -2
@@ -1,7 +1,6 @@
1
- import { ChatSDKError, Constants } from "../../../common/Constants";
2
- import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
1
+ import { ChatSDKError } from "../../../common/Constants";
2
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
3
  import { ConversationState } from "../../../contexts/common/ConversationState";
4
- import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
5
4
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
6
5
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
7
6
  import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
@@ -9,14 +8,20 @@ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
9
8
  import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
10
9
  import { createAdapter } from "./createAdapter";
11
10
  import { createOnNewAdapterActivityHandler } from "../../../plugins/newMessageEventHandler";
12
- import { createTimer } from "../../../common/utils";
11
+ import { createTimer, getStateFromCache, isNullOrEmptyString, isUndefinedOrEmpty } from "../../../common/utils";
13
12
  import { getReconnectIdForAuthenticatedChat, handleRedirectUnauthenticatedReconnectChat } from "./reconnectChatHelper";
14
13
  import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
15
- import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
15
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+
17
+ let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
18
 
17
19
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
18
20
  var _props$reconnectChatP;
19
21
 
22
+ optionalParams = {}; //Resetting to ensure no stale values
23
+ // Can connect to existing chat session
24
+
20
25
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
21
26
  return;
22
27
  } // Redirecting if unauthenticated reconnect chat expired
@@ -25,54 +30,121 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
25
30
  if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
26
31
  var _props$reconnectChatP2, _props$reconnectChatP3;
27
32
 
28
- await handleRedirectUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.redirectInSameWindow);
29
- } else {
30
- // Getting PreChat Survey Context
31
- const parseToJson = false;
32
- const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
33
- const showPrechat = state.appStates.conversationState === ConversationState.ProactiveChat ? preChatSurveyResponse && state.appStates.proactiveChatStates.proactiveChatEnablePrechat : preChatSurveyResponse; // Getting reconnectId for authenticated chat
33
+ 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);
34
+ return;
35
+ } // Getting reconnectId for authenticated chat
34
36
 
35
- const reconnectId = await getReconnectIdForAuthenticatedChat(props, chatSDK);
36
37
 
37
- if (reconnectId) {
38
- dispatch({
39
- type: LiveChatWidgetActionType.SET_RECONNECT_ID,
40
- payload: reconnectId
41
- });
42
- dispatch({
43
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
44
- payload: ConversationState.ReconnectChat
45
- });
46
- } else if (showPrechat) {
47
- dispatch({
48
- type: LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
49
- payload: preChatSurveyResponse
50
- });
51
- dispatch({
52
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
53
- payload: ConversationState.Prechat
38
+ const reconnectId = await getReconnectIdForAuthenticatedChat(props, chatSDK);
39
+
40
+ if (reconnectId) {
41
+ dispatch({
42
+ type: LiveChatWidgetActionType.SET_RECONNECT_ID,
43
+ payload: reconnectId
44
+ });
45
+ dispatch({
46
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
47
+ payload: ConversationState.ReconnectChat
48
+ });
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.chatConfig, props.getAuthToken, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
59
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
+
61
+
62
+ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, 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) {
69
+ dispatch({
70
+ type: LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
71
+ payload: preChatSurveyResponse
72
+ });
73
+ dispatch({
74
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
75
+ payload: ConversationState.Prechat
76
+ });
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, chatConfig, getAuthToken, dispatch, setAdapter);
86
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
+
88
+
89
+ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
90
+ if (getAuthToken) {
91
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
92
+ Event: TelemetryEvent.GetAuthTokenCalled
93
+ });
94
+ let authClientFunction = undefined;
95
+
96
+ if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
97
+ var _chatConfig$LiveChatC;
98
+
99
+ authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
100
+ }
101
+
102
+ const token = await getAuthToken(authClientFunction);
103
+
104
+ if (!isNullOrEmptyString(token)) {
105
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
+ chatSDK.setAuthTokenProvider(async () => {
107
+ return token;
54
108
  });
55
109
  } else {
56
- dispatch({
57
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
58
- payload: ConversationState.Loading
110
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
111
+ Event: TelemetryEvent.ReceivedNullOrEmptyToken
59
112
  });
60
- await initStartChat(chatSDK, dispatch, setAdapter);
61
113
  }
62
114
  }
63
115
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
116
 
65
117
 
66
- const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
118
+ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
67
119
  try {
68
120
  var _newAdapter$activity$, _TelemetryTimers$Widg;
69
121
 
122
+ let isStartChatSuccessful = false; //Check if chat retrieved from cache
123
+
124
+ if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
125
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
126
+
127
+ BroadcastService.postMessage({
128
+ eventName: BroadcastEvent.ChatRetrievedFromCache,
129
+ payload: {
130
+ 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,
131
+ 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
132
+ }
133
+ });
134
+ }
135
+
70
136
  try {
137
+ //Start widget load timer
71
138
  TelemetryTimers.WidgetLoadTimer = createTimer();
72
139
  TelemetryHelper.logSDKEvent(LogLevel.INFO, {
73
140
  Event: TelemetryEvent.StartChatSDKCall
74
- });
75
- await chatSDK.startChat(params);
141
+ }); // Set optional params
142
+
143
+ optionalParams = Object.assign({}, params, optionalParams); // set auth token to chat sdk before start chat
144
+
145
+ await handleAuthentication(chatSDK, chatConfig, getAuthToken);
146
+ await chatSDK.startChat(optionalParams);
147
+ isStartChatSuccessful = true;
76
148
  } catch (error) {
77
149
  TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
78
150
  Event: TelemetryEvent.StartChatMethodException,
@@ -80,43 +152,51 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
80
152
  exception: `Failed to setup startChat: ${error}`
81
153
  }
82
154
  });
83
- }
155
+ isStartChatSuccessful = false; // Resetting the widget state to Closed, for recent introduction of OC rate limiting(429 Error)
156
+ // TODO : How to diplay a proper UI message to customer to try after sometime at this point - cool down scenario
157
+
158
+ dispatch({
159
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
160
+ payload: ConversationState.Closed
161
+ });
162
+ return;
163
+ } // New adapter creation
164
+
84
165
 
85
166
  const newAdapter = await createAdapter(chatSDK);
86
167
  setAdapter(newAdapter);
87
168
  const chatToken = await chatSDK.getChatToken();
169
+ dispatch({
170
+ type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
171
+ payload: chatToken
172
+ });
88
173
  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));
89
174
 
90
- if (!persistedState) {
91
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
92
- if (chatSDK !== null && chatSDK !== void 0 && chatSDK.getVoiceVideoCalling) {
93
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
94
- const chatToken = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatToken());
95
- dispatch({
96
- type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
97
- payload: chatToken
98
- });
99
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
-
101
-
102
- const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
175
+ if (persistedState) {
103
176
  dispatch({
104
- type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
105
- payload: liveChatContext
177
+ type: LiveChatWidgetActionType.SET_WIDGET_STATE,
178
+ payload: persistedState
106
179
  });
107
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch);
108
- await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
180
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
181
+ return;
182
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
183
+
184
+
185
+ const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
186
+ dispatch({
187
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
188
+ payload: liveChatContext
189
+ }); // Set post chat context in state, no survey load
190
+
191
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch); // Updating chat session detail for telemetry
192
+
193
+ await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
109
194
 
195
+ if (isStartChatSuccessful) {
110
196
  dispatch({
111
197
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
112
198
  payload: ConversationState.Active
113
199
  });
114
- } else {
115
- dispatch({
116
- type: LiveChatWidgetActionType.SET_WIDGET_STATE,
117
- payload: persistedState
118
- });
119
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
120
200
  }
121
201
 
122
202
  TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
@@ -143,31 +223,53 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
143
223
  payload: ConversationState.OutOfOffice
144
224
  });
145
225
  }
226
+ } finally {
227
+ optionalParams = {};
146
228
  }
147
229
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
148
230
 
149
231
 
150
232
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
151
- var _DataStoreManager$cli, _persistedState$domai;
233
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _persistedState$domai6, _persistedState$appSt;
152
234
 
153
- const widgetStateFromCache = (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(Constants.widgetStateDataKey, "localStorage");
154
- const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
235
+ // By pass this function in case of popout chat
236
+ if (state.appStates.skipChatButtonRendering === true) {
237
+ return false;
238
+ }
239
+
240
+ 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
155
241
 
156
- if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext) {
157
- var _persistedState$domai2;
242
+ 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) {
243
+ var _persistedState$domai7;
158
244
 
159
245
  dispatch({
160
246
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
161
247
  payload: ConversationState.Loading
162
248
  });
163
249
  const optionalParams = {
164
- liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai2 = persistedState.domainStates) === null || _persistedState$domai2 === void 0 ? void 0 : _persistedState$domai2.liveChatContext
250
+ liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
165
251
  };
166
- await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
252
+ await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
167
253
  return true;
168
254
  } else {
169
255
  return false;
170
256
  }
257
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
258
+
259
+
260
+ const setCustomContextParams = (props, chatSDK) => {
261
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$chatConfig, _persistedState$domai8;
262
+
263
+ // Add custom context only for unauthenticated chat
264
+ 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);
265
+
266
+ 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)) {
267
+ var _persistedState$domai9;
268
+
269
+ optionalParams = Object.assign({}, optionalParams, {
270
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai9 = persistedState.domainStates) === null || _persistedState$domai9 === void 0 ? void 0 : _persistedState$domai9.customContext
271
+ });
272
+ }
171
273
  };
172
274
 
173
- export { prepareStartChat, initStartChat };
275
+ export { prepareStartChat, initStartChat, setPreChatAndInitiateChat };