@microsoft/omnichannel-chat-widget 0.1.0-main.47ede4d → 0.1.0-main.5854782

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