@microsoft/omnichannel-chat-widget 0.1.0-main.c2417f9 → 0.1.0-main.ce08f21
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.
- package/lib/cjs/common/Constants.js +4 -0
- package/lib/cjs/common/telemetry/TelemetryConstants.js +7 -0
- package/lib/cjs/common/utils.js +58 -5
- package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +4 -0
- package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
- package/lib/cjs/components/headerstateful/HeaderStateful.js +4 -3
- package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
- package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
- package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
- package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
- package/lib/cjs/components/livechatwidget/common/createMarkdown.js +31 -30
- package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +2 -2
- package/lib/cjs/components/livechatwidget/common/endChat.js +52 -20
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +8 -0
- package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +23 -15
- package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
- package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
- package/lib/cjs/components/livechatwidget/common/startChat.js +152 -81
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +167 -112
- package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +4 -8
- package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
- package/lib/cjs/contexts/common/ConversationState.js +3 -2
- package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -2
- package/lib/cjs/contexts/createReducer.js +8 -0
- package/lib/cjs/controller/componentController.js +3 -3
- package/lib/esm/common/Constants.js +4 -0
- package/lib/esm/common/telemetry/TelemetryConstants.js +7 -0
- package/lib/esm/common/utils.js +45 -3
- package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +4 -0
- package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
- package/lib/esm/components/headerstateful/HeaderStateful.js +4 -3
- package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
- package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
- package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
- package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
- package/lib/esm/components/livechatwidget/common/createMarkdown.js +31 -30
- package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +2 -2
- package/lib/esm/components/livechatwidget/common/endChat.js +53 -21
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +9 -2
- package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +23 -15
- package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
- package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
- package/lib/esm/components/livechatwidget/common/startChat.js +147 -80
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +164 -112
- package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +5 -8
- package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
- package/lib/esm/contexts/common/ConversationState.js +3 -2
- package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -2
- package/lib/esm/contexts/createReducer.js +8 -0
- package/lib/esm/controller/componentController.js +3 -3
- package/lib/types/common/Constants.d.ts +2 -0
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +7 -1
- package/lib/types/common/utils.d.ts +6 -3
- package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
- package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
- package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
- package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
- package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
- package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
- package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
- package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +4 -3
- package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
- package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -2
- package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
- package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -0
- package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
- package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
- package/lib/types/contexts/common/ConversationState.d.ts +3 -2
- package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -1
- package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
- package/package.json +4 -3
|
@@ -67,6 +67,8 @@ var _cardActionMiddleware = require("../../webchatcontainerstateful/webchatcontr
|
|
|
67
67
|
|
|
68
68
|
var _messageTimestampMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware"));
|
|
69
69
|
|
|
70
|
+
var _Constants = require("../../../common/Constants");
|
|
71
|
+
|
|
70
72
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
71
73
|
|
|
72
74
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -105,6 +107,12 @@ const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatStyles)
|
|
|
105
107
|
|
|
106
108
|
if (isPostChatEnabled === "true") {
|
|
107
109
|
if (postChatSurveyMode === _PostChatSurveyMode.PostChatSurveyMode.Embed) {
|
|
110
|
+
_WebChatStoreLoader.WebChatStoreLoader.store = null;
|
|
111
|
+
dispatch({
|
|
112
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
113
|
+
payload: _ConversationState.ConversationState.PostchatLoading
|
|
114
|
+
});
|
|
115
|
+
await (0, _utils.addDelayInMs)(_Constants.Constants.PostChatLoadingDurationInMs);
|
|
108
116
|
const loadPostChatEvent = {
|
|
109
117
|
eventName: _TelemetryConstants.BroadcastEvent.LoadPostChatSurvey
|
|
110
118
|
};
|
|
@@ -44,9 +44,17 @@ const getChatReconnectContext = async (chatSDK, reconnectId) => {
|
|
|
44
44
|
exports.getChatReconnectContext = getChatReconnectContext;
|
|
45
45
|
|
|
46
46
|
const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
|
|
47
|
-
var _props$
|
|
47
|
+
var _props$chatConfig, _props$reconnectChatP;
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
let authClientFunction = undefined;
|
|
50
|
+
|
|
51
|
+
if ((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) {
|
|
52
|
+
var _props$chatConfig2, _props$chatConfig2$Li;
|
|
53
|
+
|
|
54
|
+
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;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && authClientFunction // TODO: Implement this after storage is in place
|
|
50
58
|
|
|
51
59
|
/* && !isLoadWithState() */
|
|
52
60
|
) {
|
|
@@ -63,31 +71,31 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
|
|
|
63
71
|
|
|
64
72
|
exports.getReconnectIdForAuthenticatedChat = getReconnectIdForAuthenticatedChat;
|
|
65
73
|
|
|
66
|
-
const handleUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
|
|
74
|
+
const handleUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
|
|
67
75
|
const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
|
|
68
76
|
|
|
69
77
|
if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
|
|
70
|
-
await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
|
|
78
|
+
await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
|
|
71
79
|
} else {
|
|
72
|
-
await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
|
|
80
|
+
await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
|
|
73
81
|
}
|
|
74
82
|
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
83
|
|
|
76
84
|
|
|
77
85
|
exports.handleUnauthenticatedReconnectChat = handleUnauthenticatedReconnectChat;
|
|
78
86
|
|
|
79
|
-
const startUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
|
|
87
|
+
const startUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
|
|
80
88
|
const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
|
|
81
89
|
|
|
82
90
|
if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
|
|
83
|
-
await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
|
|
91
|
+
await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
|
|
84
92
|
}
|
|
85
93
|
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
86
94
|
|
|
87
95
|
|
|
88
96
|
exports.startUnauthenticatedReconnectChat = startUnauthenticatedReconnectChat;
|
|
89
97
|
|
|
90
|
-
const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
|
|
98
|
+
const setReconnectIdAndStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
|
|
91
99
|
const startUnauthenticatedReconnectChat = {
|
|
92
100
|
eventName: _TelemetryConstants.BroadcastEvent.StartUnauthenticatedReconnectChat
|
|
93
101
|
};
|
|
@@ -105,7 +113,7 @@ const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconne
|
|
|
105
113
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
106
114
|
payload: _ConversationState.ConversationState.Loading
|
|
107
115
|
});
|
|
108
|
-
await initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
|
|
116
|
+
await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, optionalParams);
|
|
109
117
|
};
|
|
110
118
|
|
|
111
119
|
const redirectPage = (redirectURL, redirectInSameWindow) => {
|
|
@@ -128,7 +136,7 @@ const shouldRedirectOrStartNewChat = reconnectAvailabilityResponse => {
|
|
|
128
136
|
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
129
137
|
|
|
130
138
|
|
|
131
|
-
const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, initStartChat) => {
|
|
139
|
+
const startNewChatEmptyRedirectionUrl = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat) => {
|
|
132
140
|
const startUnauthenticatedReconnectChat = {
|
|
133
141
|
eventName: _TelemetryConstants.BroadcastEvent.StartUnauthenticatedReconnectChat
|
|
134
142
|
};
|
|
@@ -153,26 +161,26 @@ const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, in
|
|
|
153
161
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
154
162
|
payload: _ConversationState.ConversationState.Loading
|
|
155
163
|
});
|
|
156
|
-
await initStartChat(chatSDK, dispatch, setAdapter);
|
|
164
|
+
await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
|
|
157
165
|
}
|
|
158
166
|
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
159
167
|
|
|
160
168
|
|
|
161
|
-
const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
|
|
169
|
+
const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
|
|
162
170
|
const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
|
|
163
171
|
|
|
164
172
|
if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
|
|
165
|
-
await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
|
|
173
|
+
await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
|
|
166
174
|
}
|
|
167
175
|
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
168
176
|
|
|
169
177
|
|
|
170
178
|
exports.handleRedirectUnauthenticatedReconnectChat = handleRedirectUnauthenticatedReconnectChat;
|
|
171
179
|
|
|
172
|
-
const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
|
|
180
|
+
const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
|
|
173
181
|
if (reconnectAvailabilityResponse.redirectURL) {
|
|
174
182
|
redirectPage(reconnectAvailabilityResponse.redirectURL, redirectInSameWindow);
|
|
175
183
|
} else {
|
|
176
|
-
await startNewChatEmptyRedirectionUrl(chatSDK, dispatch, setAdapter, initStartChat);
|
|
184
|
+
await startNewChatEmptyRedirectionUrl(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat);
|
|
177
185
|
}
|
|
178
186
|
};
|
|
@@ -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,12 +35,17 @@ var _updateSessionDataForTelemetry = require("./updateSessionDataForTelemetry");
|
|
|
37
35
|
|
|
38
36
|
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
39
37
|
|
|
38
|
+
var _ActivityStreamHandler = require("./ActivityStreamHandler");
|
|
39
|
+
|
|
40
40
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
41
|
let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
42
42
|
|
|
43
43
|
const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
|
|
44
44
|
var _props$reconnectChatP;
|
|
45
45
|
|
|
46
|
+
optionalParams = {}; //Resetting to ensure no stale values
|
|
47
|
+
// Can connect to existing chat session
|
|
48
|
+
|
|
46
49
|
if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
|
|
47
50
|
return;
|
|
48
51
|
} // Redirecting if unauthenticated reconnect chat expired
|
|
@@ -51,58 +54,105 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
|
|
|
51
54
|
if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
|
|
52
55
|
var _props$reconnectChatP2, _props$reconnectChatP3;
|
|
53
56
|
|
|
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
|
-
|
|
56
|
-
|
|
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
|
|
57
|
+
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);
|
|
58
|
+
return;
|
|
59
|
+
} // Getting reconnectId for authenticated chat
|
|
60
60
|
|
|
61
|
-
const reconnectId = await (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK);
|
|
62
61
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
62
|
+
const reconnectId = await (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK);
|
|
63
|
+
|
|
64
|
+
if (reconnectId) {
|
|
65
|
+
dispatch({
|
|
66
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_RECONNECT_ID,
|
|
67
|
+
payload: reconnectId
|
|
68
|
+
});
|
|
69
|
+
dispatch({
|
|
70
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
71
|
+
payload: _ConversationState.ConversationState.ReconnectChat
|
|
72
|
+
});
|
|
73
|
+
return;
|
|
74
|
+
} // Set custom context params
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
setCustomContextParams(props, chatSDK); // Setting Proactive chat settings
|
|
78
|
+
|
|
79
|
+
const isProactiveChat = state.appStates.conversationState === _ConversationState.ConversationState.ProactiveChat;
|
|
80
|
+
const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
|
|
81
|
+
|
|
82
|
+
setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
|
|
83
|
+
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
exports.prepareStartChat = prepareStartChat;
|
|
87
|
+
|
|
88
|
+
const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
|
|
89
|
+
// Getting prechat Survey Context
|
|
90
|
+
const parseToJson = false;
|
|
91
|
+
const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
|
|
92
|
+
const showPrechat = isProactiveChat ? preChatSurveyResponse && proactiveChatEnablePrechatState : preChatSurveyResponse;
|
|
93
|
+
|
|
94
|
+
if (showPrechat) {
|
|
95
|
+
dispatch({
|
|
96
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
|
|
97
|
+
payload: preChatSurveyResponse
|
|
98
|
+
});
|
|
99
|
+
dispatch({
|
|
100
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
101
|
+
payload: _ConversationState.ConversationState.Prechat
|
|
102
|
+
});
|
|
103
|
+
return;
|
|
104
|
+
} //Initiate start chat
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
dispatch({
|
|
108
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
109
|
+
payload: _ConversationState.ConversationState.Loading
|
|
110
|
+
});
|
|
111
|
+
await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
|
|
112
|
+
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
exports.setPreChatAndInitiateChat = setPreChatAndInitiateChat;
|
|
116
|
+
|
|
117
|
+
const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
|
|
118
|
+
if (getAuthToken) {
|
|
119
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
120
|
+
Event: _TelemetryConstants.TelemetryEvent.GetAuthTokenCalled
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
let authClientFunction = undefined;
|
|
124
|
+
|
|
125
|
+
if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
|
|
126
|
+
var _chatConfig$LiveChatC;
|
|
127
|
+
|
|
128
|
+
authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const token = await getAuthToken(authClientFunction);
|
|
132
|
+
|
|
133
|
+
if (!(0, _utils.isNullOrEmptyString)(token)) {
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
135
|
+
chatSDK.setAuthTokenProvider(async () => {
|
|
136
|
+
return token;
|
|
80
137
|
});
|
|
81
|
-
setCustomContextParams(props, state);
|
|
82
138
|
} else {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
payload: _ConversationState.ConversationState.Loading
|
|
139
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
140
|
+
Event: _TelemetryConstants.TelemetryEvent.ReceivedNullOrEmptyToken
|
|
86
141
|
});
|
|
87
|
-
setCustomContextParams(props, state);
|
|
88
|
-
await initStartChat(chatSDK, dispatch, setAdapter);
|
|
89
142
|
}
|
|
90
143
|
}
|
|
91
144
|
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
92
145
|
|
|
93
146
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
|
|
147
|
+
const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
|
|
97
148
|
try {
|
|
98
149
|
var _newAdapter$activity$, _TelemetryTimers$Widg;
|
|
99
150
|
|
|
100
|
-
let isStartChatSuccessful = false;
|
|
151
|
+
let isStartChatSuccessful = false; //Check if chat retrieved from cache
|
|
101
152
|
|
|
102
153
|
if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
|
|
103
154
|
var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
|
|
104
155
|
|
|
105
|
-
// Broadcasting limited cached chat details
|
|
106
156
|
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
107
157
|
eventName: _TelemetryConstants.BroadcastEvent.ChatRetrievedFromCache,
|
|
108
158
|
payload: {
|
|
@@ -113,13 +163,17 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
|
|
|
113
163
|
}
|
|
114
164
|
|
|
115
165
|
try {
|
|
166
|
+
//Start widget load timer
|
|
116
167
|
_TelemetryManager.TelemetryTimers.WidgetLoadTimer = (0, _utils.createTimer)();
|
|
117
168
|
|
|
118
169
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
119
170
|
Event: _TelemetryConstants.TelemetryEvent.StartChatSDKCall
|
|
120
|
-
});
|
|
171
|
+
}); // Set optional params
|
|
172
|
+
|
|
121
173
|
|
|
122
|
-
optionalParams = Object.assign({}, params, optionalParams);
|
|
174
|
+
optionalParams = Object.assign({}, params, optionalParams); // set auth token to chat sdk before start chat
|
|
175
|
+
|
|
176
|
+
await handleAuthentication(chatSDK, chatConfig, getAuthToken);
|
|
123
177
|
await chatSDK.startChat(optionalParams);
|
|
124
178
|
isStartChatSuccessful = true;
|
|
125
179
|
} catch (error) {
|
|
@@ -130,46 +184,53 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
|
|
|
130
184
|
}
|
|
131
185
|
});
|
|
132
186
|
|
|
133
|
-
isStartChatSuccessful = false;
|
|
134
|
-
|
|
187
|
+
isStartChatSuccessful = false; // Resetting the widget state to Closed, for recent introduction of OC rate limiting(429 Error)
|
|
188
|
+
// TODO : How to diplay a proper UI message to customer to try after sometime at this point - cool down scenario
|
|
189
|
+
|
|
190
|
+
dispatch({
|
|
191
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
192
|
+
payload: _ConversationState.ConversationState.Closed
|
|
193
|
+
});
|
|
194
|
+
return;
|
|
195
|
+
} // New adapter creation
|
|
196
|
+
|
|
135
197
|
|
|
136
198
|
const newAdapter = await (0, _createAdapter.createAdapter)(chatSDK);
|
|
137
199
|
setAdapter(newAdapter);
|
|
138
200
|
const chatToken = await chatSDK.getChatToken();
|
|
201
|
+
dispatch({
|
|
202
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CHAT_TOKEN,
|
|
203
|
+
payload: chatToken
|
|
204
|
+
});
|
|
139
205
|
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
206
|
|
|
141
|
-
if (
|
|
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 {
|
|
207
|
+
if (persistedState) {
|
|
168
208
|
dispatch({
|
|
169
209
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_STATE,
|
|
170
210
|
payload: persistedState
|
|
171
211
|
});
|
|
172
212
|
await (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch, true);
|
|
213
|
+
return;
|
|
214
|
+
} // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
|
|
218
|
+
dispatch({
|
|
219
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
|
|
220
|
+
payload: liveChatContext
|
|
221
|
+
}); // Set post chat context in state, no survey load
|
|
222
|
+
|
|
223
|
+
await (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch); // Updating chat session detail for telemetry
|
|
224
|
+
|
|
225
|
+
await (0, _updateSessionDataForTelemetry.updateSessionDataForTelemetry)(chatSDK, dispatch); // Set app state to Active
|
|
226
|
+
|
|
227
|
+
if (isStartChatSuccessful) {
|
|
228
|
+
_ActivityStreamHandler.ActivityStreamHandler.uncork();
|
|
229
|
+
|
|
230
|
+
dispatch({
|
|
231
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
232
|
+
payload: _ConversationState.ConversationState.Active
|
|
233
|
+
});
|
|
173
234
|
}
|
|
174
235
|
|
|
175
236
|
_TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
@@ -198,6 +259,8 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
|
|
|
198
259
|
payload: _ConversationState.ConversationState.OutOfOffice
|
|
199
260
|
});
|
|
200
261
|
}
|
|
262
|
+
} finally {
|
|
263
|
+
optionalParams = {};
|
|
201
264
|
}
|
|
202
265
|
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
203
266
|
|
|
@@ -205,13 +268,16 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
|
|
|
205
268
|
exports.initStartChat = initStartChat;
|
|
206
269
|
|
|
207
270
|
const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
|
|
208
|
-
var _chatSDK$omnichannelC, _chatSDK$omnichannelC2,
|
|
271
|
+
var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps, _persistedState$domai6, _persistedState$appSt;
|
|
209
272
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
273
|
+
// By pass this function in case of popout chat
|
|
274
|
+
if (state.appStates.skipChatButtonRendering === true) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
213
277
|
|
|
214
|
-
|
|
278
|
+
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$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId) ?? ""); //Connect to only active chat session
|
|
279
|
+
|
|
280
|
+
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
281
|
var _persistedState$domai7;
|
|
216
282
|
|
|
217
283
|
dispatch({
|
|
@@ -221,20 +287,25 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
|
|
|
221
287
|
const optionalParams = {
|
|
222
288
|
liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
|
|
223
289
|
};
|
|
224
|
-
await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
|
|
290
|
+
await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
|
|
225
291
|
return true;
|
|
226
292
|
} else {
|
|
227
293
|
return false;
|
|
228
294
|
}
|
|
229
|
-
};
|
|
295
|
+
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
const setCustomContextParams = (props, chatSDK) => {
|
|
299
|
+
var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$controlProps2, _props$chatConfig, _persistedState$domai8;
|
|
300
|
+
|
|
301
|
+
// Add custom context only for unauthenticated chat
|
|
302
|
+
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, (props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.widgetInstanceId) ?? "");
|
|
230
303
|
|
|
231
|
-
|
|
232
|
-
|
|
304
|
+
if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && !(0, _utils.isUndefinedOrEmpty)(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
|
|
305
|
+
var _persistedState$domai9;
|
|
233
306
|
|
|
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) {
|
|
236
307
|
optionalParams = Object.assign({}, optionalParams, {
|
|
237
|
-
customContext:
|
|
308
|
+
customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai9 = persistedState.domainStates) === null || _persistedState$domai9 === void 0 ? void 0 : _persistedState$domai9.customContext
|
|
238
309
|
});
|
|
239
310
|
}
|
|
240
311
|
};
|