@microsoft/omnichannel-chat-widget 0.1.0-main.ceb1702 → 0.1.0-main.d4c1f9e

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 (95) hide show
  1. package/lib/cjs/common/Constants.js +4 -0
  2. package/lib/cjs/common/telemetry/TelemetryConstants.js +6 -0
  3. package/lib/cjs/common/utils.js +64 -5
  4. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +4 -0
  5. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
  6. package/lib/cjs/components/headerstateful/HeaderStateful.js +4 -3
  7. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  8. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  9. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  10. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  11. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  12. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  13. package/lib/cjs/components/livechatwidget/common/authHelper.js +52 -0
  14. package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
  15. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +31 -30
  16. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +8 -3
  17. package/lib/cjs/components/livechatwidget/common/endChat.js +52 -20
  18. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +12 -0
  19. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +55 -35
  20. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
  21. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  22. package/lib/cjs/components/livechatwidget/common/startChat.js +131 -80
  23. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +153 -110
  24. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +4 -8
  25. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +1 -1
  26. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +11 -0
  27. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
  28. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  29. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  30. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  31. package/lib/cjs/contexts/common/ConversationState.js +3 -2
  32. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
  33. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -2
  34. package/lib/cjs/contexts/createReducer.js +8 -0
  35. package/lib/cjs/controller/componentController.js +2 -2
  36. package/lib/esm/common/Constants.js +4 -0
  37. package/lib/esm/common/telemetry/TelemetryConstants.js +6 -0
  38. package/lib/esm/common/utils.js +48 -3
  39. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +4 -0
  40. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
  41. package/lib/esm/components/headerstateful/HeaderStateful.js +4 -3
  42. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  43. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  44. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  45. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  46. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  47. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  48. package/lib/esm/components/livechatwidget/common/authHelper.js +39 -0
  49. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
  50. package/lib/esm/components/livechatwidget/common/createMarkdown.js +31 -30
  51. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +8 -3
  52. package/lib/esm/components/livechatwidget/common/endChat.js +53 -21
  53. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +13 -2
  54. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +56 -37
  55. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
  56. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  57. package/lib/esm/components/livechatwidget/common/startChat.js +127 -80
  58. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +153 -112
  59. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +5 -8
  60. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +1 -1
  61. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +10 -0
  62. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  63. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  64. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  65. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  66. package/lib/esm/contexts/common/ConversationState.js +3 -2
  67. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
  68. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -2
  69. package/lib/esm/contexts/createReducer.js +8 -0
  70. package/lib/esm/controller/componentController.js +2 -2
  71. package/lib/types/common/Constants.d.ts +2 -0
  72. package/lib/types/common/telemetry/TelemetryConstants.d.ts +6 -1
  73. package/lib/types/common/utils.d.ts +7 -3
  74. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  75. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  76. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  77. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  78. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  79. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  80. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  81. package/lib/types/components/livechatwidget/common/authHelper.d.ts +4 -0
  82. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -4
  83. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  84. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -3
  85. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  86. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -0
  87. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
  88. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  89. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  90. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  91. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  92. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  93. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -1
  94. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  95. package/package.json +4 -3
@@ -1,7 +1,6 @@
1
1
  import { ChatSDKError } from "../../../common/Constants";
2
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,16 +8,24 @@ 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, getWidgetCacheId } from "../../../common/utils";
11
+ import { createTimer, getStateFromCache, isUndefinedOrEmpty } from "../../../common/utils";
13
12
  import { getReconnectIdForAuthenticatedChat, handleRedirectUnauthenticatedReconnectChat } from "./reconnectChatHelper";
14
13
  import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
15
14
  import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
16
- import { BroadcastService } from "@microsoft/omnichannel-chat-components"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
16
+ import { ActivityStreamHandler } from "./ActivityStreamHandler";
17
+ import { handleAuthentication } from "./authHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
18
 
18
19
  let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
20
 
21
+ let widgetInstanceId; // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+
20
23
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
21
- var _props$reconnectChatP;
24
+ var _props$controlProps, _props$reconnectChatP;
25
+
26
+ optionalParams = {}; //Resetting to ensure no stale values
27
+
28
+ widgetInstanceId = props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId; // Can connect to existing chat session
22
29
 
23
30
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
24
31
  return;
@@ -26,31 +33,37 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
26
33
 
27
34
 
28
35
  if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
29
- var _props$reconnectChatP2, _props$reconnectChatP3;
36
+ var _props$reconnectChatP2, _props$reconnectChatP3, _props$reconnectChatP4;
30
37
 
31
- 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);
32
- } else {
33
- // Getting reconnectId for authenticated chat
34
- const reconnectId = await getReconnectIdForAuthenticatedChat(props, chatSDK);
38
+ await handleRedirectUnauthenticatedReconnectChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.isReconnectEnabled, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.reconnectId, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.redirectInSameWindow);
39
+ return;
40
+ } // Getting reconnectId for authenticated chat
35
41
 
36
- if (reconnectId) {
37
- dispatch({
38
- type: LiveChatWidgetActionType.SET_RECONNECT_ID,
39
- payload: reconnectId
40
- });
41
- dispatch({
42
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
43
- payload: ConversationState.ReconnectChat
44
- });
45
- } else {
46
- setCustomContextParams(props, state);
47
- setupChatState(chatSDK, dispatch, setAdapter, state.appStates.conversationState === ConversationState.ProactiveChat, state.appStates.proactiveChatStates.proactiveChatEnablePrechat);
48
- }
49
- }
50
- };
51
42
 
52
- const setupChatState = async (chatSDK, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
53
- // Getting PreChat Survey Context
43
+ const reconnectId = await getReconnectIdForAuthenticatedChat(props, chatSDK);
44
+
45
+ if (reconnectId) {
46
+ dispatch({
47
+ type: LiveChatWidgetActionType.SET_RECONNECT_ID,
48
+ payload: reconnectId
49
+ });
50
+ dispatch({
51
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
52
+ payload: ConversationState.ReconnectChat
53
+ });
54
+ return;
55
+ } // Setting Proactive chat settings
56
+
57
+
58
+ const isProactiveChat = state.appStates.conversationState === ConversationState.ProactiveChat;
59
+ const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
60
+
61
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
62
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
+
64
+
65
+ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
66
+ // Getting prechat Survey Context
54
67
  const parseToJson = false;
55
68
  const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
56
69
  const showPrechat = isProactiveChat ? preChatSurveyResponse && proactiveChatEnablePrechatState : preChatSurveyResponse;
@@ -64,26 +77,27 @@ const setupChatState = async (chatSDK, dispatch, setAdapter, isProactiveChat, pr
64
77
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
65
78
  payload: ConversationState.Prechat
66
79
  });
67
- } else {
68
- dispatch({
69
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
70
- payload: ConversationState.Loading
71
- });
72
- await initStartChat(chatSDK, dispatch, setAdapter);
73
- }
80
+ return;
81
+ } //Initiate start chat
82
+
83
+
84
+ dispatch({
85
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
86
+ payload: ConversationState.Loading
87
+ });
88
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
74
89
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
90
 
76
91
 
77
- const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
92
+ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
78
93
  try {
79
94
  var _newAdapter$activity$, _TelemetryTimers$Widg;
80
95
 
81
- let isStartChatSuccessful = false;
96
+ let isStartChatSuccessful = false; //Check if chat retrieved from cache
82
97
 
83
98
  if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
84
99
  var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
85
100
 
86
- // Broadcasting limited cached chat details
87
101
  BroadcastService.postMessage({
88
102
  eventName: BroadcastEvent.ChatRetrievedFromCache,
89
103
  payload: {
@@ -94,11 +108,16 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
94
108
  }
95
109
 
96
110
  try {
111
+ //Start widget load timer
97
112
  TelemetryTimers.WidgetLoadTimer = createTimer();
98
113
  TelemetryHelper.logSDKEvent(LogLevel.INFO, {
99
114
  Event: TelemetryEvent.StartChatSDKCall
100
- });
101
- optionalParams = Object.assign({}, params, optionalParams);
115
+ }); // Set custom context params
116
+
117
+ setCustomContextParams(chatSDK);
118
+ optionalParams = Object.assign({}, params, optionalParams); // set auth token to chat sdk before start chat
119
+
120
+ await handleAuthentication(chatSDK, chatConfig, getAuthToken);
102
121
  await chatSDK.startChat(optionalParams);
103
122
  isStartChatSuccessful = true;
104
123
  } catch (error) {
@@ -108,46 +127,52 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
108
127
  exception: `Failed to setup startChat: ${error}`
109
128
  }
110
129
  });
111
- isStartChatSuccessful = false;
112
- }
130
+ isStartChatSuccessful = false; // Resetting the widget state to Closed, for recent introduction of OC rate limiting(429 Error)
131
+ // TODO : How to diplay a proper UI message to customer to try after sometime at this point - cool down scenario
132
+
133
+ dispatch({
134
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
135
+ payload: ConversationState.Closed
136
+ });
137
+ return;
138
+ } // New adapter creation
139
+
113
140
 
114
141
  const newAdapter = await createAdapter(chatSDK);
115
142
  setAdapter(newAdapter);
116
143
  const chatToken = await chatSDK.getChatToken();
144
+ dispatch({
145
+ type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
146
+ payload: chatToken
147
+ });
117
148
  newAdapter === null || newAdapter === void 0 ? void 0 : (_newAdapter$activity$ = newAdapter.activity$) === null || _newAdapter$activity$ === void 0 ? void 0 : _newAdapter$activity$.subscribe(createOnNewAdapterActivityHandler(chatToken === null || chatToken === void 0 ? void 0 : chatToken.chatId, chatToken === null || chatToken === void 0 ? void 0 : chatToken.visitorId));
118
149
 
119
- if (!persistedState) {
120
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
121
- if (chatSDK !== null && chatSDK !== void 0 && chatSDK.getVoiceVideoCalling) {
122
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
123
- const chatToken = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatToken());
124
- dispatch({
125
- type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
126
- payload: chatToken
127
- });
128
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
129
-
130
-
131
- const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
132
- dispatch({
133
- type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
134
- payload: liveChatContext
135
- });
136
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch);
137
- await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
138
-
139
- if (isStartChatSuccessful) {
140
- dispatch({
141
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
142
- payload: ConversationState.Active
143
- });
144
- }
145
- } else {
150
+ if (persistedState) {
146
151
  dispatch({
147
152
  type: LiveChatWidgetActionType.SET_WIDGET_STATE,
148
153
  payload: persistedState
149
154
  });
150
155
  await setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
156
+ return;
157
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
158
+
159
+
160
+ const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
161
+ dispatch({
162
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
163
+ payload: liveChatContext
164
+ }); // Set post chat context in state, no survey load
165
+
166
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch); // Updating chat session detail for telemetry
167
+
168
+ await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
169
+
170
+ if (isStartChatSuccessful) {
171
+ ActivityStreamHandler.uncork();
172
+ dispatch({
173
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
174
+ payload: ConversationState.Active
175
+ });
151
176
  }
152
177
 
153
178
  TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
@@ -174,18 +199,24 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
174
199
  payload: ConversationState.OutOfOffice
175
200
  });
176
201
  }
202
+ } finally {
203
+ optionalParams = {};
204
+ widgetInstanceId = "";
177
205
  }
178
206
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
179
207
 
180
208
 
181
209
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
182
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _DataStoreManager$cli, _persistedState$domai6;
210
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
183
211
 
184
- const widgetStateEventName = getWidgetCacheId((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) ?? "");
185
- const widgetStateFromCache = (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateEventName, "localStorage");
186
- const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
212
+ // By pass this function in case of popout chat
213
+ if (state.appStates.skipChatButtonRendering === true) {
214
+ return false;
215
+ }
216
+
217
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.widgetInstanceId) ?? ""); //Connect to only active chat session
187
218
 
188
- if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai6 = persistedState.domainStates) !== null && _persistedState$domai6 !== void 0 && _persistedState$domai6.liveChatContext) {
219
+ if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai6 = persistedState.domainStates) === null || _persistedState$domai6 === void 0 ? void 0 : _persistedState$domai6.liveChatContext) && (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$appSt = persistedState.appStates) === null || _persistedState$appSt === void 0 ? void 0 : _persistedState$appSt.conversationState) === ConversationState.Active) {
189
220
  var _persistedState$domai7;
190
221
 
191
222
  dispatch({
@@ -195,22 +226,38 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
195
226
  const optionalParams = {
196
227
  liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
197
228
  };
198
- await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
229
+ await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
199
230
  return true;
200
231
  } else {
201
232
  return false;
202
233
  }
203
- };
234
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
204
235
 
205
- const setCustomContextParams = (props, state) => {
206
- var _props$chatConfig, _state$domainStates;
207
236
 
208
- // Add custom context if any only for unauthenticated chat
209
- if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && (_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.customContext) {
237
+ const setCustomContextParams = chatSDK => {
238
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _persistedState$domai8;
239
+
240
+ // Add custom context only for unauthenticated chat
241
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.widgetId, widgetInstanceId ?? "");
242
+
243
+ if (!isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
244
+ var _persistedState$domai9, _persistedState$domai10;
245
+
246
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
247
+ const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
248
+ TelemetryHelper.logSDKEvent(LogLevel.WARN, {
249
+ Event: TelemetryEvent.StartChatMethodException,
250
+ ExceptionDetails: {
251
+ exception: errorMessage
252
+ }
253
+ });
254
+ throw new Error(errorMessage);
255
+ }
256
+
210
257
  optionalParams = Object.assign({}, optionalParams, {
211
- customContext: state.domainStates.customContext
258
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
212
259
  });
213
260
  }
214
261
  };
215
262
 
216
- export { prepareStartChat, initStartChat, setupChatState };
263
+ export { prepareStartChat, initStartChat, setPreChatAndInitiateChat };