@microsoft/omnichannel-chat-widget 0.1.0-main.3bd7d37 → 0.1.0-main.3c8dc3b

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