@microsoft/omnichannel-chat-widget 0.1.0-main.2d7913d → 0.1.0-main.3ac9d65

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 (58) hide show
  1. package/lib/cjs/common/Constants.js +2 -0
  2. package/lib/cjs/common/telemetry/TelemetryConstants.js +2 -0
  3. package/lib/cjs/common/utils.js +20 -7
  4. package/lib/cjs/components/headerstateful/HeaderStateful.js +2 -1
  5. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  6. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  7. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  8. package/lib/cjs/components/livechatwidget/common/createAdapter.js +4 -0
  9. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +2 -5
  10. package/lib/cjs/components/livechatwidget/common/endChat.js +3 -3
  11. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +23 -15
  12. package/lib/cjs/components/livechatwidget/common/startChat.js +71 -24
  13. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +86 -41
  14. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  15. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
  16. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  17. package/lib/cjs/contexts/createReducer.js +8 -0
  18. package/lib/esm/common/Constants.js +2 -0
  19. package/lib/esm/common/telemetry/TelemetryConstants.js +2 -0
  20. package/lib/esm/common/utils.js +14 -5
  21. package/lib/esm/components/headerstateful/HeaderStateful.js +2 -1
  22. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  23. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  24. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  25. package/lib/esm/components/livechatwidget/common/createAdapter.js +4 -1
  26. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +2 -5
  27. package/lib/esm/components/livechatwidget/common/endChat.js +3 -3
  28. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +24 -17
  29. package/lib/esm/components/livechatwidget/common/startChat.js +68 -26
  30. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +85 -43
  31. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  32. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
  33. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  34. package/lib/esm/contexts/createReducer.js +8 -0
  35. package/lib/types/common/Constants.d.ts +1 -0
  36. package/lib/types/common/telemetry/TelemetryConstants.d.ts +2 -0
  37. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  38. package/lib/types/common/utils.d.ts +5 -4
  39. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  40. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  41. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  42. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  43. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  44. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  45. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -5
  46. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  47. package/lib/types/components/livechatwidget/common/startChat.d.ts +3 -3
  48. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  49. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  50. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -2
  51. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  52. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  53. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  54. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  55. package/package.json +4 -3
  56. package/lib/cjs/components/livechatwidget/interfaces/IAuthProps.js +0 -1
  57. package/lib/esm/components/livechatwidget/interfaces/IAuthProps.js +0 -1
  58. package/lib/types/components/livechatwidget/interfaces/IAuthProps.d.ts +0 -4
@@ -31,7 +31,7 @@ const prepareEndChat = async (props, chatSDK, setAdapter, setWebChatStyles, disp
31
31
  if (isPostChatEnabled === "true" && ((_conversationDetails = conversationDetails) === null || _conversationDetails === void 0 ? void 0 : _conversationDetails.canRenderPostChat) === Constants.truePascal) {
32
32
  const skipEndChatSDK = false;
33
33
  const skipCloseChat = true;
34
- await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, true);
34
+ await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, false);
35
35
 
36
36
  if (postChatSurveyMode === PostChatSurveyMode.Embed) {
37
37
  dispatch({
@@ -129,9 +129,9 @@ const endChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, a
129
129
  });
130
130
 
131
131
  if (postMessageToOtherTab) {
132
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
132
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps;
133
133
 
134
- const endChatEventName = getWidgetEndChatEventName(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);
134
+ const endChatEventName = getWidgetEndChatEventName(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) ?? "");
135
135
  BroadcastService.postMessage({
136
136
  eventName: endChatEventName
137
137
  });
@@ -3,9 +3,8 @@ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/teleme
3
3
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
4
4
  import { ConversationState } from "../../../contexts/common/ConversationState";
5
5
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
6
- import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
6
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
7
 
8
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
8
  const getChatReconnectContext = async (chatSDK, reconnectId) => {
10
9
  try {
11
10
  if (reconnectId) {
@@ -30,9 +29,17 @@ const getChatReconnectContext = async (chatSDK, reconnectId) => {
30
29
 
31
30
 
32
31
  const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
33
- var _props$reconnectChatP, _props$authProps;
32
+ var _props$chatConfig, _props$reconnectChatP;
34
33
 
35
- if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && (_props$authProps = props.authProps) !== null && _props$authProps !== void 0 && _props$authProps.authClientFunction // TODO: Implement this after storage is in place
34
+ let authClientFunction = undefined;
35
+
36
+ if ((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) {
37
+ var _props$chatConfig2, _props$chatConfig2$Li;
38
+
39
+ authClientFunction = ((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 ? void 0 : (_props$chatConfig2$Li = _props$chatConfig2.LiveChatConfigAuthSettings) === null || _props$chatConfig2$Li === void 0 ? void 0 : _props$chatConfig2$Li.msdyn_javascriptclientfunction) ?? undefined;
40
+ }
41
+
42
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && authClientFunction // TODO: Implement this after storage is in place
36
43
 
37
44
  /* && !isLoadWithState() */
38
45
  ) {
@@ -47,27 +54,27 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
47
54
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
55
 
49
56
 
50
- const handleUnauthenticatedReconnectChat = async (chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
57
+ const handleUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
51
58
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
52
59
 
53
60
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
54
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, authProps, dispatch, setAdapter, initStartChat, redirectInSameWindow);
61
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
55
62
  } else {
56
- await setReconnectIdAndStartChat(chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat);
63
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
57
64
  }
58
65
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
66
 
60
67
 
61
- const startUnauthenticatedReconnectChat = async (chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat) => {
68
+ const startUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
62
69
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
63
70
 
64
71
  if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
65
- await setReconnectIdAndStartChat(chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat);
72
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
66
73
  }
67
74
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
75
 
69
76
 
70
- const setReconnectIdAndStartChat = async (chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat) => {
77
+ const setReconnectIdAndStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
71
78
  const startUnauthenticatedReconnectChat = {
72
79
  eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
73
80
  };
@@ -83,7 +90,7 @@ const setReconnectIdAndStartChat = async (chatSDK, authProps, dispatch, setAdapt
83
90
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
84
91
  payload: ConversationState.Loading
85
92
  });
86
- await initStartChat(chatSDK, authProps, dispatch, setAdapter, optionalParams);
93
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, optionalParams);
87
94
  };
88
95
 
89
96
  const redirectPage = (redirectURL, redirectInSameWindow) => {
@@ -105,7 +112,7 @@ const shouldRedirectOrStartNewChat = reconnectAvailabilityResponse => {
105
112
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
113
 
107
114
 
108
- const startNewChatEmptyRedirectionUrl = async (chatSDK, authProps, dispatch, setAdapter, initStartChat) => {
115
+ const startNewChatEmptyRedirectionUrl = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat) => {
109
116
  const startUnauthenticatedReconnectChat = {
110
117
  eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
111
118
  };
@@ -128,25 +135,25 @@ const startNewChatEmptyRedirectionUrl = async (chatSDK, authProps, dispatch, set
128
135
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
129
136
  payload: ConversationState.Loading
130
137
  });
131
- await initStartChat(chatSDK, authProps, dispatch, setAdapter);
138
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
132
139
  }
133
140
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
134
141
 
135
142
 
136
- const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, authProps, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
143
+ const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
137
144
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
138
145
 
139
146
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
140
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, authProps, dispatch, setAdapter, initStartChat, redirectInSameWindow);
147
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
141
148
  }
142
149
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
143
150
 
144
151
 
145
- const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, authProps, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
152
+ const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
146
153
  if (reconnectAvailabilityResponse.redirectURL) {
147
154
  redirectPage(reconnectAvailabilityResponse.redirectURL, redirectInSameWindow);
148
155
  } else {
149
- await startNewChatEmptyRedirectionUrl(chatSDK, authProps, dispatch, setAdapter, initStartChat);
156
+ await startNewChatEmptyRedirectionUrl(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat);
150
157
  }
151
158
  };
152
159
 
@@ -8,19 +8,23 @@ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
8
8
  import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
9
9
  import { createAdapter } from "./createAdapter";
10
10
  import { createOnNewAdapterActivityHandler } from "../../../plugins/newMessageEventHandler";
11
- import { createTimer, getStateFromCache, isUndefinedOrEmpty } from "../../../common/utils";
11
+ import { createTimer, getStateFromCache, isNullOrEmptyString, isUndefinedOrEmpty } from "../../../common/utils";
12
12
  import { getReconnectIdForAuthenticatedChat, handleRedirectUnauthenticatedReconnectChat } from "./reconnectChatHelper";
13
13
  import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
14
14
  import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
15
15
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
16
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ import { ActivityStreamHandler } from "./ActivityStreamHandler"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+
17
18
  let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
19
 
20
+ let widgetInstanceId; // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+
19
22
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
20
- var _props$reconnectChatP;
23
+ var _props$controlProps, _props$reconnectChatP;
21
24
 
22
25
  optionalParams = {}; //Resetting to ensure no stale values
23
- // Can connect to existing chat session
26
+
27
+ 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
24
28
 
25
29
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
26
30
  return;
@@ -30,7 +34,7 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
30
34
  if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
31
35
  var _props$reconnectChatP2, _props$reconnectChatP3;
32
36
 
33
- await handleRedirectUnauthenticatedReconnectChat(chatSDK, props.authProps, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.redirectInSameWindow);
37
+ 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
38
  return;
35
39
  } // Getting reconnectId for authenticated chat
36
40
 
@@ -47,19 +51,17 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
47
51
  payload: ConversationState.ReconnectChat
48
52
  });
49
53
  return;
50
- } // Set custom context params
51
-
54
+ } // Setting Proactive chat settings
52
55
 
53
- setCustomContextParams(props, chatSDK); // Setting Proactive chat settings
54
56
 
55
57
  const isProactiveChat = state.appStates.conversationState === ConversationState.ProactiveChat;
56
58
  const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
57
59
 
58
- setPreChatAndInitiateChat(chatSDK, props.authProps, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
60
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
59
61
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
62
 
61
63
 
62
- const setPreChatAndInitiateChat = async (chatSDK, authProps, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
64
+ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
63
65
  // Getting prechat Survey Context
64
66
  const parseToJson = false;
65
67
  const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
@@ -82,11 +84,40 @@ const setPreChatAndInitiateChat = async (chatSDK, authProps, dispatch, setAdapte
82
84
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
83
85
  payload: ConversationState.Loading
84
86
  });
85
- await initStartChat(chatSDK, authProps, dispatch, setAdapter);
87
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
86
88
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
89
 
88
90
 
89
- const initStartChat = async (chatSDK, authProps, dispatch, setAdapter, params, persistedState) => {
91
+ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
92
+ if (getAuthToken) {
93
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
94
+ Event: TelemetryEvent.GetAuthTokenCalled
95
+ });
96
+ let authClientFunction = undefined;
97
+
98
+ if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
99
+ var _chatConfig$LiveChatC;
100
+
101
+ authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
102
+ }
103
+
104
+ const token = await getAuthToken(authClientFunction);
105
+
106
+ if (!isNullOrEmptyString(token)) {
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
+ chatSDK.setAuthTokenProvider(async () => {
109
+ return token;
110
+ });
111
+ } else {
112
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
113
+ Event: TelemetryEvent.ReceivedNullOrEmptyToken
114
+ });
115
+ }
116
+ }
117
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
+
119
+
120
+ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
90
121
  try {
91
122
  var _newAdapter$activity$, _TelemetryTimers$Widg;
92
123
 
@@ -109,14 +140,12 @@ const initStartChat = async (chatSDK, authProps, dispatch, setAdapter, params, p
109
140
  TelemetryTimers.WidgetLoadTimer = createTimer();
110
141
  TelemetryHelper.logSDKEvent(LogLevel.INFO, {
111
142
  Event: TelemetryEvent.StartChatSDKCall
112
- }); // Set optional params
143
+ }); // Set custom context params
113
144
 
145
+ setCustomContextParams(chatSDK);
114
146
  optionalParams = Object.assign({}, params, optionalParams); // set auth token to chat sdk before start chat
115
147
 
116
- if (authProps && authProps.setAuthTokenProviderToChatSdk) {
117
- await authProps.setAuthTokenProviderToChatSdk(chatSDK, authProps.authClientFunction);
118
- }
119
-
148
+ await handleAuthentication(chatSDK, chatConfig, getAuthToken);
120
149
  await chatSDK.startChat(optionalParams);
121
150
  isStartChatSuccessful = true;
122
151
  } catch (error) {
@@ -167,6 +196,7 @@ const initStartChat = async (chatSDK, authProps, dispatch, setAdapter, params, p
167
196
  await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
168
197
 
169
198
  if (isStartChatSuccessful) {
199
+ ActivityStreamHandler.uncork();
170
200
  dispatch({
171
201
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
172
202
  payload: ConversationState.Active
@@ -199,19 +229,20 @@ const initStartChat = async (chatSDK, authProps, dispatch, setAdapter, params, p
199
229
  }
200
230
  } finally {
201
231
  optionalParams = {};
232
+ widgetInstanceId = "";
202
233
  }
203
234
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
204
235
 
205
236
 
206
237
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
207
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _persistedState$domai6, _persistedState$appSt;
238
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
208
239
 
209
240
  // By pass this function in case of popout chat
210
241
  if (state.appStates.skipChatButtonRendering === true) {
211
242
  return false;
212
243
  }
213
244
 
214
- const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId); //Connect to only active chat session
245
+ 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
215
246
 
216
247
  if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai6 = persistedState.domainStates) === null || _persistedState$domai6 === void 0 ? void 0 : _persistedState$domai6.liveChatContext) && (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$appSt = persistedState.appStates) === null || _persistedState$appSt === void 0 ? void 0 : _persistedState$appSt.conversationState) === ConversationState.Active) {
217
248
  var _persistedState$domai7;
@@ -223,7 +254,7 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
223
254
  const optionalParams = {
224
255
  liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
225
256
  };
226
- await initStartChat(chatSDK, props.authProps, dispatch, setAdapter, optionalParams, persistedState);
257
+ await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
227
258
  return true;
228
259
  } else {
229
260
  return false;
@@ -231,17 +262,28 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
231
262
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
232
263
 
233
264
 
234
- const setCustomContextParams = (props, chatSDK) => {
235
- var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$chatConfig, _persistedState$domai8;
265
+ const setCustomContextParams = chatSDK => {
266
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _persistedState$domai8;
236
267
 
237
268
  // Add custom context only for unauthenticated chat
238
- const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.widgetId);
269
+ 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 ?? "");
239
270
 
240
- if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
241
- var _persistedState$domai9;
271
+ if (!isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
272
+ var _persistedState$domai9, _persistedState$domai10;
273
+
274
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
275
+ const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
276
+ TelemetryHelper.logSDKEvent(LogLevel.WARN, {
277
+ Event: TelemetryEvent.StartChatMethodException,
278
+ ExceptionDetails: {
279
+ exception: errorMessage
280
+ }
281
+ });
282
+ throw new Error(errorMessage);
283
+ }
242
284
 
243
285
  optionalParams = Object.assign({}, optionalParams, {
244
- customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai9 = persistedState.domainStates) === null || _persistedState$domai9 === void 0 ? void 0 : _persistedState$domai9.customContext
286
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
245
287
  });
246
288
  }
247
289
  };