@microsoft/omnichannel-chat-widget 0.1.0-main.a7e4e7d → 0.1.0-main.acb91cf

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