@microsoft/omnichannel-chat-widget 1.7.3-main.112d01b → 1.7.3-main.3609616
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/telemetry/TelemetryConstants.js +2 -0
- package/lib/cjs/components/livechatwidget/LiveChatWidget.js +6 -1
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +15 -6
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +77 -0
- package/lib/cjs/components/livechatwidget/common/createAdapter.js +15 -2
- package/lib/cjs/components/livechatwidget/common/endChat.js +20 -5
- package/lib/cjs/components/livechatwidget/common/getMockChatSDKIfApplicable.js +26 -0
- package/lib/cjs/components/livechatwidget/common/overridePropsOnMockIfApplicable.js +41 -0
- package/lib/cjs/components/livechatwidget/common/startChat.js +37 -28
- package/lib/cjs/components/livechatwidget/common/startChatErrorHandler.js +6 -6
- package/lib/cjs/components/livechatwidget/common/updateSessionDataForTelemetry.js +8 -3
- package/lib/cjs/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.js +1 -0
- package/lib/cjs/components/livechatwidget/interfaces/IMockProps.js +7 -0
- package/lib/cjs/components/webchatcontainerstateful/common/DemoChatAdapter.js +87 -0
- package/lib/cjs/components/webchatcontainerstateful/common/DemoChatSDK.js +17 -0
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +41 -0
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatSDK.js +17 -0
- package/lib/cjs/components/webchatcontainerstateful/common/MockBotCardCommandType.js +14 -0
- package/lib/cjs/components/webchatcontainerstateful/common/MockBotCommand.js +19 -0
- package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +3 -0
- package/lib/cjs/components/webchatcontainerstateful/common/utils/attachmentActivityUtils.js +71 -0
- package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +90 -0
- package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotAuthConfig.js +1 -0
- package/lib/cjs/plugins/newMessageEventHandler.js +4 -2
- package/lib/esm/common/telemetry/TelemetryConstants.js +2 -0
- package/lib/esm/components/livechatwidget/LiveChatWidget.js +6 -1
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +15 -6
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +70 -0
- package/lib/esm/components/livechatwidget/common/createAdapter.js +14 -2
- package/lib/esm/components/livechatwidget/common/endChat.js +20 -5
- package/lib/esm/components/livechatwidget/common/getMockChatSDKIfApplicable.js +20 -0
- package/lib/esm/components/livechatwidget/common/overridePropsOnMockIfApplicable.js +34 -0
- package/lib/esm/components/livechatwidget/common/startChat.js +37 -28
- package/lib/esm/components/livechatwidget/common/startChatErrorHandler.js +7 -7
- package/lib/esm/components/livechatwidget/common/updateSessionDataForTelemetry.js +7 -2
- package/lib/esm/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.js +1 -0
- package/lib/esm/components/livechatwidget/interfaces/IMockProps.js +6 -0
- package/lib/esm/components/webchatcontainerstateful/common/DemoChatAdapter.js +79 -0
- package/lib/esm/components/webchatcontainerstateful/common/DemoChatSDK.js +10 -0
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +33 -0
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatSDK.js +10 -0
- package/lib/esm/components/webchatcontainerstateful/common/MockBotCardCommandType.js +7 -0
- package/lib/esm/components/webchatcontainerstateful/common/MockBotCommand.js +12 -0
- package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +3 -0
- package/lib/esm/components/webchatcontainerstateful/common/utils/attachmentActivityUtils.js +61 -0
- package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +77 -0
- package/lib/esm/components/webchatcontainerstateful/interfaces/IBotAuthConfig.js +1 -0
- package/lib/esm/plugins/newMessageEventHandler.js +4 -2
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +3 -1
- package/lib/types/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.d.ts +4 -1
- package/lib/types/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.d.ts +7 -0
- package/lib/types/components/livechatwidget/common/createAdapter.d.ts +2 -1
- package/lib/types/components/livechatwidget/common/getMockChatSDKIfApplicable.d.ts +1 -0
- package/lib/types/components/livechatwidget/common/overridePropsOnMockIfApplicable.d.ts +3 -0
- package/lib/types/components/livechatwidget/common/updateSessionDataForTelemetry.d.ts +1 -1
- package/lib/types/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.d.ts +4 -0
- package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +2 -0
- package/lib/types/components/livechatwidget/interfaces/IMockProps.d.ts +8 -0
- package/lib/types/components/webchatcontainerstateful/common/DemoChatAdapter.d.ts +10 -0
- package/lib/types/components/webchatcontainerstateful/common/DemoChatSDK.d.ts +6 -0
- package/lib/types/components/webchatcontainerstateful/common/DesignerChatAdapter.d.ts +8 -0
- package/lib/types/components/webchatcontainerstateful/common/DesignerChatSDK.d.ts +6 -0
- package/lib/types/components/webchatcontainerstateful/common/MockBotCardCommandType.d.ts +6 -0
- package/lib/types/components/webchatcontainerstateful/common/MockBotCommand.d.ts +11 -0
- package/lib/types/components/webchatcontainerstateful/common/mockadapter.d.ts +2 -1
- package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +6 -0
- package/lib/types/components/webchatcontainerstateful/common/utils/attachmentActivityUtils.d.ts +9 -0
- package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +9 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IBotAuthConfig.d.ts +4 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
- package/package.json +3 -3
|
@@ -2,21 +2,21 @@ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/teleme
|
|
|
2
2
|
import { Constants, LiveWorkItemState, WidgetLoadCustomErrorString, WidgetLoadTelemetryMessage } from "../../../common/Constants";
|
|
3
3
|
import { checkContactIdError, createTimer, getConversationDetailsCall, getStateFromCache, getWidgetCacheIdfromProps, isNullOrEmptyString, isUndefinedOrEmpty } from "../../../common/utils";
|
|
4
4
|
import { getAuthClientFunction, handleAuthentication } from "./authHelper";
|
|
5
|
+
import { handleChatReconnect, isPersistentEnabled, isReconnectEnabled } from "./reconnectChatHelper";
|
|
6
|
+
import { handleStartChatError, logWidgetLoadComplete } from "./startChatErrorHandler";
|
|
5
7
|
import { ActivityStreamHandler } from "./ActivityStreamHandler";
|
|
6
8
|
import { BroadcastService } from "@microsoft/omnichannel-chat-components";
|
|
7
9
|
import { ConversationState } from "../../../contexts/common/ConversationState";
|
|
8
10
|
import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
|
|
9
11
|
import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
|
|
10
12
|
import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
|
|
13
|
+
import { chatSDKStateCleanUp } from "./endChat";
|
|
11
14
|
import { createAdapter } from "./createAdapter";
|
|
12
15
|
import { createOnNewAdapterActivityHandler } from "../../../plugins/newMessageEventHandler";
|
|
13
|
-
import { handleChatReconnect, isPersistentEnabled, isReconnectEnabled } from "./reconnectChatHelper";
|
|
14
|
-
import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
|
|
15
|
-
import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
|
|
16
|
-
import { logWidgetLoadComplete, handleStartChatError } from "./startChatErrorHandler";
|
|
17
|
-
import { chatSDKStateCleanUp } from "./endChat";
|
|
18
16
|
import { isPersistentChatEnabled } from "./liveChatConfigUtils";
|
|
17
|
+
import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
|
|
19
18
|
import { shouldSetPreChatIfPersistentChat } from "./persistentChatHelper";
|
|
19
|
+
import { updateTelemetryData } from "./updateSessionDataForTelemetry";
|
|
20
20
|
|
|
21
21
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
22
|
let optionalParams = {};
|
|
@@ -43,6 +43,7 @@ const setAuthenticationIfApplicable = async (props, chatSDK) => {
|
|
|
43
43
|
const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
|
|
44
44
|
optionalParams = {}; //Resetting to ensure no stale values
|
|
45
45
|
widgetInstanceId = getWidgetCacheIdfromProps(props);
|
|
46
|
+
|
|
46
47
|
// reconnect > chat from cache
|
|
47
48
|
if (isReconnectEnabled(props.chatConfig) === true && !isPersistentEnabled(props.chatConfig)) {
|
|
48
49
|
const shouldStartChatNormally = await handleChatReconnect(chatSDK, props, dispatch, setAdapter, initStartChat, state);
|
|
@@ -64,7 +65,11 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
|
|
|
64
65
|
// Setting Proactive chat settings
|
|
65
66
|
const isProactiveChat = state.appStates.conversationState === ConversationState.ProactiveChat;
|
|
66
67
|
const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat;
|
|
67
|
-
|
|
68
|
+
|
|
69
|
+
// Setting auth settings to OC API to retrieve existing persistent chat session before start chat if any
|
|
70
|
+
if (isPersistentEnabled(props.chatConfig)) {
|
|
71
|
+
await setAuthenticationIfApplicable(props, chatSDK);
|
|
72
|
+
}
|
|
68
73
|
|
|
69
74
|
//Setting PreChat and intiate chat
|
|
70
75
|
await setPreChatAndInitiateChat(chatSDK, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat, state, props);
|
|
@@ -146,7 +151,7 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, state, props, params
|
|
|
146
151
|
chatSDKStateCleanUp(chatSDK);
|
|
147
152
|
}
|
|
148
153
|
try {
|
|
149
|
-
var _state$appStates2
|
|
154
|
+
var _state$appStates2;
|
|
150
155
|
// Clear disconnect state on start chat
|
|
151
156
|
(state === null || state === void 0 ? void 0 : (_state$appStates2 = state.appStates) === null || _state$appStates2 === void 0 ? void 0 : _state$appStates2.chatDisconnectEventReceived) && dispatch({
|
|
152
157
|
type: LiveChatWidgetActionType.SET_CHAT_DISCONNECT_EVENT_RECEIVED,
|
|
@@ -160,6 +165,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, state, props, params
|
|
|
160
165
|
Description: "Widget loading started"
|
|
161
166
|
});
|
|
162
167
|
|
|
168
|
+
// Auth token retrieval needs to happen during start chat to support pop-out chat
|
|
169
|
+
await setAuthenticationIfApplicable(props, chatSDK);
|
|
170
|
+
|
|
163
171
|
//Check if chat retrieved from cache
|
|
164
172
|
if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
|
|
165
173
|
var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
|
|
@@ -194,16 +202,7 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, state, props, params
|
|
|
194
202
|
isStartChatSuccessful = false;
|
|
195
203
|
throw error;
|
|
196
204
|
}
|
|
197
|
-
|
|
198
|
-
// New adapter creation
|
|
199
|
-
const newAdapter = await createAdapter(chatSDK);
|
|
200
|
-
setAdapter(newAdapter);
|
|
201
|
-
const chatToken = await chatSDK.getChatToken();
|
|
202
|
-
dispatch({
|
|
203
|
-
type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
|
|
204
|
-
payload: chatToken
|
|
205
|
-
});
|
|
206
|
-
newAdapter === null || newAdapter === void 0 ? void 0 : (_newAdapter$activity$ = newAdapter.activity$) === null || _newAdapter$activity$ === void 0 ? void 0 : _newAdapter$activity$.subscribe(createOnNewAdapterActivityHandler(chatToken === null || chatToken === void 0 ? void 0 : chatToken.chatId, chatToken === null || chatToken === void 0 ? void 0 : chatToken.visitorId));
|
|
205
|
+
await createAdapterAndSubscribe(chatSDK, dispatch, setAdapter, props);
|
|
207
206
|
|
|
208
207
|
// Set app state to Active
|
|
209
208
|
if (isStartChatSuccessful) {
|
|
@@ -224,27 +223,26 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, state, props, params
|
|
|
224
223
|
payload: persistedState
|
|
225
224
|
});
|
|
226
225
|
logWidgetLoadComplete(WidgetLoadTelemetryMessage.PersistedStateRetrievedMessage);
|
|
227
|
-
|
|
226
|
+
// Set post chat context in state, load in background to do not block the load
|
|
227
|
+
setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
|
|
228
228
|
return;
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
232
|
-
const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
|
|
233
|
-
|
|
234
231
|
// Persistent Chat relies on the `reconnectId` retrieved from reconnectablechats API to reconnect upon start chat and not `liveChatContext`
|
|
235
232
|
if (!persistentChatEnabled) {
|
|
233
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
234
|
+
const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
|
|
235
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
236
236
|
dispatch({
|
|
237
237
|
type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
|
|
238
238
|
payload: liveChatContext
|
|
239
239
|
});
|
|
240
240
|
}
|
|
241
241
|
logWidgetLoadComplete();
|
|
242
|
-
// Set post chat context in state
|
|
243
|
-
|
|
244
|
-
await setPostChatContextAndLoadSurvey(chatSDK, dispatch);
|
|
245
|
-
|
|
242
|
+
// Set post chat context in state, load in background to do not block the load
|
|
243
|
+
setPostChatContextAndLoadSurvey(chatSDK, dispatch);
|
|
246
244
|
// Updating chat session detail for telemetry
|
|
247
|
-
await
|
|
245
|
+
await updateTelemetryData(chatSDK, dispatch);
|
|
248
246
|
} catch (ex) {
|
|
249
247
|
handleStartChatError(dispatch, chatSDK, props, ex, isStartChatSuccessful);
|
|
250
248
|
} finally {
|
|
@@ -253,6 +251,19 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, state, props, params
|
|
|
253
251
|
}
|
|
254
252
|
};
|
|
255
253
|
|
|
254
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
255
|
+
const createAdapterAndSubscribe = async (chatSDK, dispatch, setAdapter, props) => {
|
|
256
|
+
var _newAdapter$activity$;
|
|
257
|
+
// New adapter creation
|
|
258
|
+
const newAdapter = await createAdapter(chatSDK, props);
|
|
259
|
+
setAdapter(newAdapter);
|
|
260
|
+
const chatToken = await chatSDK.getChatToken();
|
|
261
|
+
dispatch({
|
|
262
|
+
type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
|
|
263
|
+
payload: chatToken
|
|
264
|
+
});
|
|
265
|
+
newAdapter === null || newAdapter === void 0 ? void 0 : (_newAdapter$activity$ = newAdapter.activity$) === null || _newAdapter$activity$ === void 0 ? void 0 : _newAdapter$activity$.subscribe(createOnNewAdapterActivityHandler(chatToken === null || chatToken === void 0 ? void 0 : chatToken.chatId, chatToken === null || chatToken === void 0 ? void 0 : chatToken.visitorId));
|
|
266
|
+
};
|
|
256
267
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
257
268
|
const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
|
|
258
269
|
var _state$appStates3, _persistedState$domai6, _persistedState$appSt;
|
|
@@ -341,10 +352,8 @@ const checkIfConversationStillValid = async (chatSDK, dispatch, state) => {
|
|
|
341
352
|
var _state$domainStates8, _state$domainStates8$, _state$domainStates9;
|
|
342
353
|
const requestIdFromCache = (_state$domainStates8 = state.domainStates) === null || _state$domainStates8 === void 0 ? void 0 : (_state$domainStates8$ = _state$domainStates8.liveChatContext) === null || _state$domainStates8$ === void 0 ? void 0 : _state$domainStates8$.requestId;
|
|
343
354
|
const liveChatContext = state === null || state === void 0 ? void 0 : (_state$domainStates9 = state.domainStates) === null || _state$domainStates9 === void 0 ? void 0 : _state$domainStates9.liveChatContext;
|
|
344
|
-
|
|
345
355
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
346
356
|
let conversationDetails = undefined;
|
|
347
|
-
|
|
348
357
|
// Preserve current requestId
|
|
349
358
|
const currentRequestId = chatSDK.requestId ?? "";
|
|
350
359
|
dispatch({
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChatSDKError, ChatSDKErrorName } from "@microsoft/omnichannel-chat-sdk";
|
|
2
2
|
import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { PrepareEndChatDescriptionConstants, WidgetLoadCustomErrorString, WidgetLoadTelemetryMessage } from "../../../common/Constants";
|
|
4
|
+
import { callingStateCleanUp, chatSDKStateCleanUp, closeChatStateCleanUp, endChatStateCleanUp } from "./endChat";
|
|
5
5
|
import { ConversationState } from "../../../contexts/common/ConversationState";
|
|
6
|
-
import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
|
|
7
|
-
import { callingStateCleanUp, endChatStateCleanUp, closeChatStateCleanUp, chatSDKStateCleanUp } from "./endChat";
|
|
8
6
|
import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
|
|
9
|
-
import {
|
|
10
|
-
import { PrepareEndChatDescriptionConstants, WidgetLoadCustomErrorString, WidgetLoadTelemetryMessage } from "../../../common/Constants";
|
|
7
|
+
import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
|
|
11
8
|
import { StartChatFailureType } from "../../../contexts/common/StartChatFailureType";
|
|
9
|
+
import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
|
|
10
|
+
import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
|
|
11
|
+
import { getWidgetCacheIdfromProps } from "../../../common/utils";
|
|
12
12
|
|
|
13
13
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
14
|
export const handleStartChatError = (dispatch, chatSDK, props, ex, isStartChatSuccessful) => {
|
|
@@ -6,7 +6,13 @@ import { TelemetryManager } from "../../../common/telemetry/TelemetryManager";
|
|
|
6
6
|
import { getConversationDetailsCall } from "../../../common/utils";
|
|
7
7
|
|
|
8
8
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
-
export const
|
|
9
|
+
export const updateTelemetryData = async (chatSDK, dispatch) => {
|
|
10
|
+
// load it concurrently, this will reduce the load time
|
|
11
|
+
await Promise.all([updateSessionDataForTelemetry(chatSDK, dispatch), updateConversationDataForTelemetry(chatSDK, dispatch)]);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
|
+
const updateSessionDataForTelemetry = async (chatSDK, dispatch) => {
|
|
10
16
|
if (chatSDK) {
|
|
11
17
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
18
|
const chatSession = await chatSDK.getCurrentLiveChatContext();
|
|
@@ -21,7 +27,6 @@ export const updateSessionDataForTelemetry = async (chatSDK, dispatch) => {
|
|
|
21
27
|
chatSession
|
|
22
28
|
}
|
|
23
29
|
});
|
|
24
|
-
await updateConversationDataForTelemetry(chatSDK, dispatch);
|
|
25
30
|
}
|
|
26
31
|
};
|
|
27
32
|
|
package/lib/esm/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import "rxjs/add/operator/share";
|
|
2
|
+
import "rxjs/add/observable/of";
|
|
3
|
+
import { Observable } from "rxjs/Observable";
|
|
4
|
+
import MockAdapter from "./mockadapter";
|
|
5
|
+
import { customerUser, postBotMessageActivity, postBotAttachmentActivity, postBotTypingActivity, postEchoActivity, postSystemMessageActivity } from "./utils/chatAdapterUtils";
|
|
6
|
+
import { createHeroCardAttachment, createJpgFileAttachment, createSigninCardAttachment, createThumbnailCardAttachment } from "./utils/attachmentActivityUtils";
|
|
7
|
+
import MockBotCommand from "./MockBotCommand";
|
|
8
|
+
import MockBotCardCommandType from "./MockBotCardCommandType";
|
|
9
|
+
export class DemoChatAdapter extends MockAdapter {
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
setTimeout(() => {
|
|
13
|
+
postSystemMessageActivity(this.activityObserver, "You're currently using a demo.", 0);
|
|
14
|
+
postBotMessageActivity(this.activityObserver, "Type `/help` to learn more", undefined, 0); // send init message from bot
|
|
15
|
+
}, 1000);
|
|
16
|
+
}
|
|
17
|
+
postBotCommandsActivity() {
|
|
18
|
+
let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1000;
|
|
19
|
+
postBotAttachmentActivity(this.activityObserver, [{
|
|
20
|
+
contentType: "application/vnd.microsoft.card.thumbnail",
|
|
21
|
+
content: {
|
|
22
|
+
buttons: [{
|
|
23
|
+
title: "Send system message",
|
|
24
|
+
type: "imBack",
|
|
25
|
+
value: "send system message"
|
|
26
|
+
}, {
|
|
27
|
+
title: "Send typing",
|
|
28
|
+
type: "imBack",
|
|
29
|
+
value: "send typing"
|
|
30
|
+
}, {
|
|
31
|
+
title: "Send bot message",
|
|
32
|
+
type: "imBack",
|
|
33
|
+
value: "send bot message"
|
|
34
|
+
}],
|
|
35
|
+
title: "Commands"
|
|
36
|
+
}
|
|
37
|
+
}], delay);
|
|
38
|
+
}
|
|
39
|
+
postActivity(activity) {
|
|
40
|
+
if (activity) {
|
|
41
|
+
postEchoActivity(this.activityObserver, activity, customerUser);
|
|
42
|
+
if (activity.text) {
|
|
43
|
+
switch (true) {
|
|
44
|
+
case activity.text === MockBotCommand.Help:
|
|
45
|
+
this.postBotCommandsActivity();
|
|
46
|
+
break;
|
|
47
|
+
case activity.text === MockBotCommand.SendSystemMessage:
|
|
48
|
+
postSystemMessageActivity(this.activityObserver, "Contoso has joined the chat.");
|
|
49
|
+
break;
|
|
50
|
+
case activity.text === MockBotCommand.SendTyping:
|
|
51
|
+
postBotTypingActivity(this.activityObserver);
|
|
52
|
+
break;
|
|
53
|
+
case activity.text === MockBotCommand.SendAttachment:
|
|
54
|
+
postBotAttachmentActivity(this.activityObserver, [createJpgFileAttachment()]);
|
|
55
|
+
break;
|
|
56
|
+
case activity.text === MockBotCommand.SendBotMessage:
|
|
57
|
+
postBotMessageActivity(this.activityObserver, "Hi, how can I help you?");
|
|
58
|
+
break;
|
|
59
|
+
case activity.text === `${MockBotCommand.Card} ${MockBotCardCommandType.Signin}`:
|
|
60
|
+
postBotAttachmentActivity(this.activityObserver, [createSigninCardAttachment()]);
|
|
61
|
+
break;
|
|
62
|
+
case activity.text === `${MockBotCommand.Card} ${MockBotCardCommandType.Hero}`:
|
|
63
|
+
postBotAttachmentActivity(this.activityObserver, [createHeroCardAttachment()]);
|
|
64
|
+
break;
|
|
65
|
+
case activity.text === `${MockBotCommand.Card} ${MockBotCardCommandType.Thumbnail}`:
|
|
66
|
+
postBotAttachmentActivity(this.activityObserver, [createThumbnailCardAttachment()]);
|
|
67
|
+
break;
|
|
68
|
+
case activity.text.startsWith(`${MockBotCommand.Bot} `):
|
|
69
|
+
postBotMessageActivity(this.activityObserver, activity.text.substring(5));
|
|
70
|
+
break;
|
|
71
|
+
case activity.text.startsWith(`${MockBotCommand.System} `):
|
|
72
|
+
postSystemMessageActivity(this.activityObserver, activity.text.substring(8));
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return Observable.of(activity.id || "");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Observable } from "rxjs/Observable";
|
|
2
|
+
import MockAdapter from "./mockadapter";
|
|
3
|
+
import { customerUser, postBotMessageActivity, postEchoActivity, postSystemMessageActivity } from "./utils/chatAdapterUtils";
|
|
4
|
+
export class DesignerChatAdapter extends MockAdapter {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
setTimeout(() => {
|
|
8
|
+
postBotMessageActivity(this.activityObserver, "Id venenatis a condimentum vitae?", undefined, 0);
|
|
9
|
+
this.postUserActivity("Diam donec adipiscing tristique risus nec feugiat in fermentum", 0);
|
|
10
|
+
postSystemMessageActivity(this.activityObserver, "We are finding the best agent for your inquiry, please hold ...", 100);
|
|
11
|
+
postSystemMessageActivity(this.activityObserver, "John has joined the chat", 100);
|
|
12
|
+
postBotMessageActivity(this.activityObserver, "Neque viverra justo nec ultrices dui sapien eget mi proin", undefined, 100);
|
|
13
|
+
}, 1000);
|
|
14
|
+
}
|
|
15
|
+
postUserActivity(text) {
|
|
16
|
+
let delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
|
|
17
|
+
setTimeout(() => {
|
|
18
|
+
postEchoActivity(this.activityObserver, {
|
|
19
|
+
text,
|
|
20
|
+
from: {
|
|
21
|
+
...customerUser
|
|
22
|
+
},
|
|
23
|
+
type: "message"
|
|
24
|
+
}, customerUser, 0);
|
|
25
|
+
}, delay);
|
|
26
|
+
}
|
|
27
|
+
postActivity(activity) {
|
|
28
|
+
if (activity) {
|
|
29
|
+
postEchoActivity(this.activityObserver, activity, customerUser);
|
|
30
|
+
}
|
|
31
|
+
return Observable.of(activity.id || "");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DesignerChatAdapter } from "./DesignerChatAdapter";
|
|
2
|
+
import { MockChatSDK } from "./mockchatsdk";
|
|
3
|
+
export class DesignerChatSDK extends MockChatSDK {
|
|
4
|
+
constructor() {
|
|
5
|
+
super();
|
|
6
|
+
}
|
|
7
|
+
createChatAdapter() {
|
|
8
|
+
return new DesignerChatAdapter();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
var MockBotCardCommandType;
|
|
2
|
+
(function (MockBotCardCommandType) {
|
|
3
|
+
MockBotCardCommandType["Hero"] = "hero";
|
|
4
|
+
MockBotCardCommandType["Signin"] = "signin";
|
|
5
|
+
MockBotCardCommandType["Thumbnail"] = "thumbnail";
|
|
6
|
+
})(MockBotCardCommandType || (MockBotCardCommandType = {}));
|
|
7
|
+
export default MockBotCardCommandType;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
var MockBotCommand;
|
|
2
|
+
(function (MockBotCommand) {
|
|
3
|
+
MockBotCommand["Bot"] = "/bot";
|
|
4
|
+
MockBotCommand["Card"] = "/card";
|
|
5
|
+
MockBotCommand["Help"] = "/help";
|
|
6
|
+
MockBotCommand["SendAttachment"] = "send attachment";
|
|
7
|
+
MockBotCommand["SendBotMessage"] = "send bot message";
|
|
8
|
+
MockBotCommand["SendSystemMessage"] = "send system message";
|
|
9
|
+
MockBotCommand["SendTyping"] = "send typing";
|
|
10
|
+
MockBotCommand["System"] = "/system";
|
|
11
|
+
})(MockBotCommand || (MockBotCommand = {}));
|
|
12
|
+
export default MockBotCommand;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export const createJpgFileAttachment = () => {
|
|
2
|
+
return {
|
|
3
|
+
contentType: "image/jpeg",
|
|
4
|
+
name: "600x400.jpg",
|
|
5
|
+
contentUrl: "https://raw.githubusercontent.com/microsoft/omnichannel-chat-sdk/e7e75d4ede351e1cf2e52f13860d2284848c4af0/playwright/public/images/600x400.jpg"
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export const createHeroCardAttachment = () => {
|
|
9
|
+
return {
|
|
10
|
+
contentType: "application/vnd.microsoft.card.hero",
|
|
11
|
+
content: {
|
|
12
|
+
buttons: [{
|
|
13
|
+
title: "Bellevue",
|
|
14
|
+
type: "imBack",
|
|
15
|
+
value: "Bellevue"
|
|
16
|
+
}, {
|
|
17
|
+
title: "Redmond",
|
|
18
|
+
type: "imBack",
|
|
19
|
+
value: "Redmond"
|
|
20
|
+
}, {
|
|
21
|
+
title: "Seattle",
|
|
22
|
+
type: "imBack",
|
|
23
|
+
value: "Seattle"
|
|
24
|
+
}],
|
|
25
|
+
title: "Choose your location"
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export const createThumbnailCardAttachment = () => {
|
|
30
|
+
return {
|
|
31
|
+
contentType: "application/vnd.microsoft.card.thumbnail",
|
|
32
|
+
content: {
|
|
33
|
+
title: "Microsoft",
|
|
34
|
+
subtitle: "Our mission is to empower every person and every organization on the planet to achieve more.",
|
|
35
|
+
text: "Microsoft creates platforms and tools powered by AI to deliver innovative solutions that meet the evolving needs of our customers. The technology company is committed to making AI available broadly and doing so responsibly, with a mission to empower every person and every organization on the planet to achieve more.",
|
|
36
|
+
images: [{
|
|
37
|
+
alt: "Microsoft logo",
|
|
38
|
+
url: "https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE1Mu3b?ver=5c31" // logo from https://microsoft.com
|
|
39
|
+
}],
|
|
40
|
+
|
|
41
|
+
buttons: [{
|
|
42
|
+
title: "Learn more",
|
|
43
|
+
type: "openUrl",
|
|
44
|
+
value: "https://www.microsoft.com/"
|
|
45
|
+
}]
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export const createSigninCardAttachment = () => {
|
|
50
|
+
return {
|
|
51
|
+
contentType: "application/vnd.microsoft.card.signin",
|
|
52
|
+
content: {
|
|
53
|
+
text: "Please login",
|
|
54
|
+
buttons: [{
|
|
55
|
+
type: "signin",
|
|
56
|
+
title: "Signin",
|
|
57
|
+
value: "https://login.live.com/"
|
|
58
|
+
}]
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { uuidv4 } from "@microsoft/omnichannel-chat-sdk";
|
|
2
|
+
export const customerUser = {
|
|
3
|
+
id: "usedId",
|
|
4
|
+
name: "User",
|
|
5
|
+
role: "user"
|
|
6
|
+
};
|
|
7
|
+
export const botUser = {
|
|
8
|
+
id: "botId",
|
|
9
|
+
name: "Bot",
|
|
10
|
+
role: "bot"
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// WebChat expects an "echo" activity to confirm the message has been sent successfully
|
|
14
|
+
export const postEchoActivity = function (activityObserver, activity, user) {
|
|
15
|
+
let delay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1000;
|
|
16
|
+
const echoActivity = {
|
|
17
|
+
...activity,
|
|
18
|
+
id: uuidv4(),
|
|
19
|
+
from: {
|
|
20
|
+
...activity.from,
|
|
21
|
+
...user
|
|
22
|
+
},
|
|
23
|
+
timestamp: new Date().toISOString()
|
|
24
|
+
};
|
|
25
|
+
setTimeout(() => {
|
|
26
|
+
activityObserver === null || activityObserver === void 0 ? void 0 : activityObserver.next(echoActivity); // mock message sent activity
|
|
27
|
+
}, delay);
|
|
28
|
+
};
|
|
29
|
+
export const postBotMessageActivity = function (activityObserver, text) {
|
|
30
|
+
let tags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
|
|
31
|
+
let delay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1000;
|
|
32
|
+
setTimeout(() => {
|
|
33
|
+
activityObserver === null || activityObserver === void 0 ? void 0 : activityObserver.next({
|
|
34
|
+
id: uuidv4(),
|
|
35
|
+
from: {
|
|
36
|
+
...botUser
|
|
37
|
+
},
|
|
38
|
+
text,
|
|
39
|
+
type: "message",
|
|
40
|
+
channelData: {
|
|
41
|
+
tags
|
|
42
|
+
},
|
|
43
|
+
timestamp: new Date().toISOString()
|
|
44
|
+
});
|
|
45
|
+
}, delay);
|
|
46
|
+
};
|
|
47
|
+
export const postSystemMessageActivity = function (activityObserver, text) {
|
|
48
|
+
let delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;
|
|
49
|
+
postBotMessageActivity(activityObserver, text, "system", delay);
|
|
50
|
+
};
|
|
51
|
+
export const postBotTypingActivity = function (activityObserver) {
|
|
52
|
+
let delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
|
|
53
|
+
setTimeout(() => {
|
|
54
|
+
activityObserver === null || activityObserver === void 0 ? void 0 : activityObserver.next({
|
|
55
|
+
id: uuidv4(),
|
|
56
|
+
from: {
|
|
57
|
+
...botUser
|
|
58
|
+
},
|
|
59
|
+
type: "typing"
|
|
60
|
+
});
|
|
61
|
+
}, delay);
|
|
62
|
+
};
|
|
63
|
+
export const postBotAttachmentActivity = function (activityObserver) {
|
|
64
|
+
let attachments = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
65
|
+
let delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;
|
|
66
|
+
setTimeout(() => {
|
|
67
|
+
activityObserver === null || activityObserver === void 0 ? void 0 : activityObserver.next({
|
|
68
|
+
id: uuidv4(),
|
|
69
|
+
from: {
|
|
70
|
+
...botUser
|
|
71
|
+
},
|
|
72
|
+
attachments,
|
|
73
|
+
type: "message",
|
|
74
|
+
timestamp: new Date().toISOString()
|
|
75
|
+
});
|
|
76
|
+
}, delay);
|
|
77
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -14,7 +14,7 @@ export const createOnNewAdapterActivityHandler = (chatId, userId) => {
|
|
|
14
14
|
const raiseMessageEvent = (activity, isHistoryMessage) => {
|
|
15
15
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
16
|
const polyfillMessagePayloadForEvent = payload => {
|
|
17
|
-
var _activity$conversatio, _TelemetryManager$Int;
|
|
17
|
+
var _activity$conversatio, _TelemetryManager$Int, _attachments;
|
|
18
18
|
return {
|
|
19
19
|
...payload,
|
|
20
20
|
channelData: activity === null || activity === void 0 ? void 0 : activity.channelData,
|
|
@@ -23,7 +23,9 @@ export const createOnNewAdapterActivityHandler = (chatId, userId) => {
|
|
|
23
23
|
id: activity === null || activity === void 0 ? void 0 : activity.id,
|
|
24
24
|
isChatComplete: false,
|
|
25
25
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
|
-
text: activity === null || activity === void 0 ? void 0 : activity.text
|
|
26
|
+
text: activity === null || activity === void 0 ? void 0 : activity.text,
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
+
attachment: (activity === null || activity === void 0 ? void 0 : (_attachments = activity.attachments) === null || _attachments === void 0 ? void 0 : _attachments.length) >= 1 ? activity === null || activity === void 0 ? void 0 : activity.attachments : []
|
|
27
29
|
};
|
|
28
30
|
};
|
|
29
31
|
if ((activity === null || activity === void 0 ? void 0 : activity.type) === Constants.message) {
|
|
@@ -88,6 +88,7 @@ export declare enum TelemetryEvent {
|
|
|
88
88
|
GetConversationDetailsCallStarted = "GetConversationDetailsCallStarted",
|
|
89
89
|
GetConversationDetailsCallFailed = "GetConversationDetailsCallFailed",
|
|
90
90
|
EndChatSDKCallFailed = "EndChatSDKCallFailed",
|
|
91
|
+
DisconnectEndChatSDKCallFailed = "DisconnectEndChatSDKCallFailed",
|
|
91
92
|
GetChatReconnectContextSDKCallStarted = "GetChatReconnectContextSDKCallStarted",
|
|
92
93
|
GetChatReconnectContextSDKCallFailed = "GetChatReconnectContextSDKCallFailed",
|
|
93
94
|
ParseAdaptiveCardFailed = "ParseAdaptiveCardFailed",
|
|
@@ -200,7 +201,8 @@ export declare enum TelemetryEvent {
|
|
|
200
201
|
PostChatContextCallFailed = "PostChatContextCallFailed",
|
|
201
202
|
PostChatSurveyLoadingPaneLoaded = "PostChatSurveyLoadingPaneLoaded",
|
|
202
203
|
PostChatSurveyLoaded = "PostChatSurveyLoaded",
|
|
203
|
-
ChatDisconnectThreadEventReceived = "ChatDisconnectThreadEventReceived"
|
|
204
|
+
ChatDisconnectThreadEventReceived = "ChatDisconnectThreadEventReceived",
|
|
205
|
+
HiddenAdaptiveCardMessageReceived = "HiddenAdaptiveCardMessageReceived"
|
|
204
206
|
}
|
|
205
207
|
export interface TelemetryInput {
|
|
206
208
|
scenarioType: ScenarioType;
|
package/lib/types/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { IActivitySubscriber } from "./IActivitySubscriber";
|
|
2
|
+
import { IBotAuthActivitySubscriberOptionalParams } from "../../interfaces/IBotAuthActivitySubscriberOptionalParams";
|
|
2
3
|
export declare class BotAuthActivitySubscriber implements IActivitySubscriber {
|
|
3
4
|
observer: any;
|
|
4
5
|
private signInCardSeen;
|
|
5
|
-
|
|
6
|
+
private fetchBotAuthConfigRetries;
|
|
7
|
+
private fetchBotAuthConfigRetryInterval;
|
|
8
|
+
constructor(optionalParams?: IBotAuthActivitySubscriberOptionalParams);
|
|
6
9
|
applicable(activity: any): boolean;
|
|
7
10
|
apply(activity: any): Promise<any>;
|
|
8
11
|
next(activity: any): Promise<any>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IActivitySubscriber } from "./IActivitySubscriber";
|
|
2
|
+
export declare class HiddenAdaptiveCardActivitySubscriber implements IActivitySubscriber {
|
|
3
|
+
observer: any;
|
|
4
|
+
apply(activity: any): Promise<void>;
|
|
5
|
+
applicable(activity: any): boolean;
|
|
6
|
+
next(activity: any): Promise<any>;
|
|
7
|
+
}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { ILiveChatWidgetProps } from "../interfaces/ILiveChatWidgetProps";
|
|
2
|
+
export declare const createAdapter: (chatSDK: any, props?: ILiveChatWidgetProps | undefined) => Promise<any>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getMockChatSDKIfApplicable: (chatSDK: any, type?: string | undefined) => any;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Dispatch } from "react";
|
|
2
2
|
import { ILiveChatWidgetAction } from "../../../contexts/common/ILiveChatWidgetAction";
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const updateTelemetryData: (chatSDK: any, dispatch: Dispatch<ILiveChatWidgetAction>) => Promise<void>;
|
|
@@ -25,6 +25,7 @@ import { IPostChatSurveyPaneStatefulProps } from "../../postchatsurveypanestatef
|
|
|
25
25
|
import { IScrollBarProps } from "./IScrollBarProps";
|
|
26
26
|
import { IDraggableChatWidgetProps } from "./IDraggableChatWidgetProps";
|
|
27
27
|
import { INotificationPaneProps } from "@microsoft/omnichannel-chat-components/lib/types/components/notificationpane/interfaces/INotificationPaneProps";
|
|
28
|
+
import { IMockProps } from "./IMockProps";
|
|
28
29
|
export interface ILiveChatWidgetProps {
|
|
29
30
|
audioNotificationProps?: IAudioNotificationProps;
|
|
30
31
|
callingContainerProps?: ICallingContainerProps;
|
|
@@ -61,4 +62,5 @@ export interface ILiveChatWidgetProps {
|
|
|
61
62
|
allowSdkChatSupport?: boolean;
|
|
62
63
|
initialCustomContext?: any;
|
|
63
64
|
draggableChatWidgetProps?: IDraggableChatWidgetProps;
|
|
65
|
+
mock?: IMockProps;
|
|
64
66
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import "rxjs/add/operator/share";
|
|
2
|
+
import "rxjs/add/observable/of";
|
|
3
|
+
import { Message } from "botframework-directlinejs";
|
|
4
|
+
import { Observable } from "rxjs/Observable";
|
|
5
|
+
import MockAdapter from "./mockadapter";
|
|
6
|
+
export declare class DemoChatAdapter extends MockAdapter {
|
|
7
|
+
constructor();
|
|
8
|
+
private postBotCommandsActivity;
|
|
9
|
+
postActivity(activity: Message): Observable<string>;
|
|
10
|
+
}
|