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