@microsoft/omnichannel-chat-widget 0.1.0-main.72620c9 → 0.1.0-main.78a2099
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/README.md +32 -0
- package/lib/cjs/common/Constants.js +8 -2
- package/lib/cjs/common/telemetry/TelemetryConstants.js +15 -2
- package/lib/cjs/common/telemetry/TelemetryManager.js +7 -1
- package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +8 -9
- package/lib/cjs/common/telemetry/loggers/consoleLogger.js +6 -5
- package/lib/cjs/common/utils.js +17 -2
- package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
- package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +12 -4
- package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +11 -2
- package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +7 -13
- package/lib/cjs/components/livechatwidget/common/endChat.js +28 -13
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +9 -2
- package/lib/cjs/components/livechatwidget/common/startChat.js +49 -10
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +52 -5
- package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +4 -5
- package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -0
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +80 -0
- package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +14 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +9 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +52 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +98 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +1 -0
- package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +23 -21
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
- package/lib/cjs/contexts/createReducer.js +8 -0
- package/lib/cjs/plugins/newMessageEventHandler.js +10 -13
- package/lib/esm/common/Constants.js +8 -2
- package/lib/esm/common/telemetry/TelemetryConstants.js +15 -2
- package/lib/esm/common/telemetry/TelemetryManager.js +6 -1
- package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +8 -6
- package/lib/esm/common/telemetry/loggers/consoleLogger.js +6 -5
- package/lib/esm/common/utils.js +8 -0
- package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
- package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +13 -5
- package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +9 -3
- package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +7 -13
- package/lib/esm/components/livechatwidget/common/endChat.js +25 -14
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +9 -3
- package/lib/esm/components/livechatwidget/common/startChat.js +51 -14
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +47 -6
- package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +6 -7
- package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -0
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +72 -0
- package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +9 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +94 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +1 -0
- package/lib/esm/contexts/common/LiveChatWidgetActionType.js +23 -21
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
- package/lib/esm/contexts/createReducer.js +8 -0
- package/lib/esm/plugins/newMessageEventHandler.js +10 -12
- package/lib/types/common/Constants.d.ts +4 -1
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +15 -4
- package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -0
- package/lib/types/common/telemetry/definitions/Payload.d.ts +12 -9
- package/lib/types/common/utils.d.ts +2 -0
- package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
- package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
- package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +23 -21
- package/package.json +2 -2
|
@@ -35,7 +35,11 @@ var _setPostChatContextAndLoadSurvey = require("./setPostChatContextAndLoadSurve
|
|
|
35
35
|
|
|
36
36
|
var _updateSessionDataForTelemetry = require("./updateSessionDataForTelemetry");
|
|
37
37
|
|
|
38
|
+
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
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
|
+
|
|
39
43
|
const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
|
|
40
44
|
var _props$reconnectChatP;
|
|
41
45
|
|
|
@@ -74,11 +78,13 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
|
|
|
74
78
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
75
79
|
payload: _ConversationState.ConversationState.Prechat
|
|
76
80
|
});
|
|
81
|
+
setCustomContextParams(props, state);
|
|
77
82
|
} else {
|
|
78
83
|
dispatch({
|
|
79
84
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
80
85
|
payload: _ConversationState.ConversationState.Loading
|
|
81
86
|
});
|
|
87
|
+
setCustomContextParams(props, state);
|
|
82
88
|
await initStartChat(chatSDK, dispatch, setAdapter);
|
|
83
89
|
}
|
|
84
90
|
}
|
|
@@ -91,6 +97,21 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
|
|
|
91
97
|
try {
|
|
92
98
|
var _newAdapter$activity$, _TelemetryTimers$Widg;
|
|
93
99
|
|
|
100
|
+
let isStartChatSuccessful = false;
|
|
101
|
+
|
|
102
|
+
if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
|
|
103
|
+
var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
|
|
104
|
+
|
|
105
|
+
// Broadcasting limited cached chat details
|
|
106
|
+
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
107
|
+
eventName: _TelemetryConstants.BroadcastEvent.ChatRetrievedFromCache,
|
|
108
|
+
payload: {
|
|
109
|
+
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,
|
|
110
|
+
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
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
94
115
|
try {
|
|
95
116
|
_TelemetryManager.TelemetryTimers.WidgetLoadTimer = (0, _utils.createTimer)();
|
|
96
117
|
|
|
@@ -98,7 +119,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
|
|
|
98
119
|
Event: _TelemetryConstants.TelemetryEvent.StartChatSDKCall
|
|
99
120
|
});
|
|
100
121
|
|
|
101
|
-
|
|
122
|
+
optionalParams = Object.assign({}, params, optionalParams);
|
|
123
|
+
await chatSDK.startChat(optionalParams);
|
|
124
|
+
isStartChatSuccessful = true;
|
|
102
125
|
} catch (error) {
|
|
103
126
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
104
127
|
Event: _TelemetryConstants.TelemetryEvent.StartChatMethodException,
|
|
@@ -106,6 +129,8 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
|
|
|
106
129
|
exception: `Failed to setup startChat: ${error}`
|
|
107
130
|
}
|
|
108
131
|
});
|
|
132
|
+
|
|
133
|
+
isStartChatSuccessful = false;
|
|
109
134
|
}
|
|
110
135
|
|
|
111
136
|
const newAdapter = await (0, _createAdapter.createAdapter)(chatSDK);
|
|
@@ -133,10 +158,12 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
|
|
|
133
158
|
await (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch);
|
|
134
159
|
await (0, _updateSessionDataForTelemetry.updateSessionDataForTelemetry)(chatSDK, dispatch); // Set app state to Active
|
|
135
160
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
161
|
+
if (isStartChatSuccessful) {
|
|
162
|
+
dispatch({
|
|
163
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
164
|
+
payload: _ConversationState.ConversationState.Active
|
|
165
|
+
});
|
|
166
|
+
}
|
|
140
167
|
} else {
|
|
141
168
|
dispatch({
|
|
142
169
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_STATE,
|
|
@@ -178,24 +205,36 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
|
|
|
178
205
|
exports.initStartChat = initStartChat;
|
|
179
206
|
|
|
180
207
|
const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
|
|
181
|
-
var _DataStoreManager$cli, _persistedState$
|
|
208
|
+
var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _DataStoreManager$cli, _persistedState$domai6;
|
|
182
209
|
|
|
183
|
-
const
|
|
210
|
+
const widgetStateEventName = (0, _utils.getWidgetCacheId)((chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId) ?? "", (chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId) ?? "");
|
|
211
|
+
const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateEventName, "localStorage");
|
|
184
212
|
const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
|
|
185
213
|
|
|
186
|
-
if (persistedState !== null && persistedState !== void 0 && (_persistedState$
|
|
187
|
-
var _persistedState$
|
|
214
|
+
if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai6 = persistedState.domainStates) !== null && _persistedState$domai6 !== void 0 && _persistedState$domai6.liveChatContext) {
|
|
215
|
+
var _persistedState$domai7;
|
|
188
216
|
|
|
189
217
|
dispatch({
|
|
190
218
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
191
219
|
payload: _ConversationState.ConversationState.Loading
|
|
192
220
|
});
|
|
193
221
|
const optionalParams = {
|
|
194
|
-
liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$
|
|
222
|
+
liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
|
|
195
223
|
};
|
|
196
224
|
await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
|
|
197
225
|
return true;
|
|
198
226
|
} else {
|
|
199
227
|
return false;
|
|
200
228
|
}
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
const setCustomContextParams = (props, state) => {
|
|
232
|
+
var _props$chatConfig, _state$domainStates;
|
|
233
|
+
|
|
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
|
+
optionalParams = Object.assign({}, optionalParams, {
|
|
237
|
+
customContext: state.domainStates.customContext
|
|
238
|
+
});
|
|
239
|
+
}
|
|
201
240
|
};
|
|
@@ -107,7 +107,8 @@ const LiveChatWidgetStateful = props => {
|
|
|
107
107
|
...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
|
|
108
108
|
}); // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
109
109
|
|
|
110
|
-
const chatSDK = (0, _useChatSDKStore.default)();
|
|
110
|
+
const chatSDK = (0, _useChatSDKStore.default)(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
111
|
+
|
|
111
112
|
const [voiceVideoCallingSDK, setVoiceVideoCallingSDK] = (0, _react2.useState)(undefined);
|
|
112
113
|
const {
|
|
113
114
|
Composer
|
|
@@ -135,6 +136,10 @@ const LiveChatWidgetStateful = props => {
|
|
|
135
136
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
|
|
136
137
|
payload: ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.skipChatButtonRendering) || false
|
|
137
138
|
});
|
|
139
|
+
dispatch({
|
|
140
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_E2VV_ENABLED,
|
|
141
|
+
payload: false
|
|
142
|
+
});
|
|
138
143
|
(0, _initCallingSdk.initCallingSdk)(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
|
|
139
144
|
sdkCreated && dispatch({
|
|
140
145
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_E2VV_ENABLED,
|
|
@@ -201,7 +206,22 @@ const LiveChatWidgetStateful = props => {
|
|
|
201
206
|
}
|
|
202
207
|
}, [state.appStates.skipChatButtonRendering]);
|
|
203
208
|
(0, _react2.useEffect)(() => {
|
|
204
|
-
|
|
209
|
+
var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
|
|
210
|
+
|
|
211
|
+
// Add the custom context on receiving the SetCustomContext event
|
|
212
|
+
_omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.SetCustomContext).subscribe(msg => {
|
|
213
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
214
|
+
Event: _TelemetryConstants.TelemetryEvent.CustomContextReceived,
|
|
215
|
+
Description: "CustomContext received."
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
dispatch({
|
|
219
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
|
|
220
|
+
payload: msg === null || msg === void 0 ? void 0 : msg.payload
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
_omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartProactiveChat).subscribe(msg => {
|
|
205
225
|
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
206
226
|
Event: _TelemetryConstants.TelemetryEvent.StartProactiveChatEventReceived,
|
|
207
227
|
Description: "Start proactive chat event received."
|
|
@@ -220,7 +240,7 @@ const LiveChatWidgetStateful = props => {
|
|
|
220
240
|
}); // start chat from SDK Event
|
|
221
241
|
|
|
222
242
|
|
|
223
|
-
_omnichannelChatComponents.BroadcastService.getMessageByEventName(
|
|
243
|
+
_omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartChat).subscribe(() => {
|
|
224
244
|
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
225
245
|
Event: _TelemetryConstants.TelemetryEvent.StartChatEventRecevied,
|
|
226
246
|
Description: "Start chat event received."
|
|
@@ -237,7 +257,7 @@ const LiveChatWidgetStateful = props => {
|
|
|
237
257
|
}); // end chat from SDK Event
|
|
238
258
|
|
|
239
259
|
|
|
240
|
-
_omnichannelChatComponents.BroadcastService.getMessageByEventName(
|
|
260
|
+
_omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.EndChat).subscribe(async () => {
|
|
241
261
|
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
242
262
|
Event: _TelemetryConstants.TelemetryEvent.EndChatEventReceived,
|
|
243
263
|
Description: "End chat event received."
|
|
@@ -250,6 +270,30 @@ const LiveChatWidgetStateful = props => {
|
|
|
250
270
|
const skipCloseChat = false;
|
|
251
271
|
(0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
|
|
252
272
|
}
|
|
273
|
+
}); // Listen to end chat event from other tabs
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
const endChatEventName = (0, _utils.getWidgetEndChatEventName)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId);
|
|
277
|
+
|
|
278
|
+
_omnichannelChatComponents.BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
|
|
279
|
+
(0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
|
|
280
|
+
}); // Close popout window
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
_omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.ClosePopoutWindow).subscribe(() => {
|
|
284
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
285
|
+
Event: _TelemetryConstants.TelemetryEvent.ClosePopoutWindowEventRecevied,
|
|
286
|
+
Description: "Close popout window event received."
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
dispatch({
|
|
290
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
|
|
291
|
+
payload: {
|
|
292
|
+
proactiveChatBodyTitle: "",
|
|
293
|
+
proactiveChatEnablePrechat: false,
|
|
294
|
+
proactiveChatInNewWindow: false
|
|
295
|
+
}
|
|
296
|
+
});
|
|
253
297
|
});
|
|
254
298
|
|
|
255
299
|
window.addEventListener("beforeunload", () => {
|
|
@@ -335,8 +379,11 @@ const LiveChatWidgetStateful = props => {
|
|
|
335
379
|
const confirmationPaneProps = (0, _initConfirmationPropsComposer.initConfirmationPropsComposer)(props); // publish chat widget state
|
|
336
380
|
|
|
337
381
|
(0, _react2.useEffect)(() => {
|
|
382
|
+
var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic;
|
|
383
|
+
|
|
384
|
+
const widgetStateEventName = (0, _utils.getWidgetCacheId)(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId);
|
|
338
385
|
const chatWidgetStateChangeEvent = {
|
|
339
|
-
eventName:
|
|
386
|
+
eventName: widgetStateEventName,
|
|
340
387
|
payload: { ...state
|
|
341
388
|
}
|
|
342
389
|
};
|
|
@@ -93,9 +93,10 @@ const PreChatSurveyPaneStateful = props => {
|
|
|
93
93
|
});
|
|
94
94
|
|
|
95
95
|
try {
|
|
96
|
-
var _DataStoreManager$cli, _persistedState$domai;
|
|
96
|
+
var _state$domainStates, _state$domainStates$t, _state$domainStates$t2, _DataStoreManager$cli, _persistedState$domai;
|
|
97
97
|
|
|
98
|
-
const
|
|
98
|
+
const widgetStateCacheId = (0, _utils.getWidgetCacheId)(((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : (_state$domainStates$t = _state$domainStates.telemetryInternalData) === null || _state$domainStates$t === void 0 ? void 0 : _state$domainStates$t.orgId) ?? "", ((_state$domainStates$t2 = state.domainStates.telemetryInternalData) === null || _state$domainStates$t2 === void 0 ? void 0 : _state$domainStates$t2.widgetId) ?? "");
|
|
99
|
+
const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateCacheId, "localStorage");
|
|
99
100
|
const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
|
|
100
101
|
let optionalParams = {};
|
|
101
102
|
|
|
@@ -109,9 +110,7 @@ const PreChatSurveyPaneStateful = props => {
|
|
|
109
110
|
} else {
|
|
110
111
|
const prechatResponseValues = (0, _utils.extractPreChatSurveyResponseValues)(state.domainStates.preChatSurveyResponse, values);
|
|
111
112
|
optionalParams = {
|
|
112
|
-
|
|
113
|
-
preChatResponse: prechatResponseValues
|
|
114
|
-
}
|
|
113
|
+
preChatResponse: prechatResponseValues
|
|
115
114
|
};
|
|
116
115
|
setPreChatResponseEmail(values);
|
|
117
116
|
await initStartChat(optionalParams);
|
|
@@ -46,6 +46,14 @@ const ProactiveChatPaneStateful = props => {
|
|
|
46
46
|
const handleProactiveChatInviteTimeout = () => {
|
|
47
47
|
if (!timeoutRemoved) {
|
|
48
48
|
setTimeoutRemoved(true);
|
|
49
|
+
dispatch({
|
|
50
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
|
|
51
|
+
payload: {
|
|
52
|
+
proactiveChatBodyTitle: "",
|
|
53
|
+
proactiveChatEnablePrechat: false,
|
|
54
|
+
proactiveChatInNewWindow: false
|
|
55
|
+
}
|
|
56
|
+
});
|
|
49
57
|
dispatch({
|
|
50
58
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
51
59
|
payload: _ConversationState.ConversationState.Closed
|
|
@@ -111,6 +119,14 @@ const ProactiveChatPaneStateful = props => {
|
|
|
111
119
|
Description: "Proactive chat closed."
|
|
112
120
|
});
|
|
113
121
|
|
|
122
|
+
dispatch({
|
|
123
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
|
|
124
|
+
payload: {
|
|
125
|
+
proactiveChatBodyTitle: "",
|
|
126
|
+
proactiveChatEnablePrechat: false,
|
|
127
|
+
proactiveChatInNewWindow: false
|
|
128
|
+
}
|
|
129
|
+
});
|
|
114
130
|
dispatch({
|
|
115
131
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
116
132
|
payload: _ConversationState.ConversationState.Closed
|
|
@@ -25,15 +25,53 @@ var _utils = require("../../common/utils");
|
|
|
25
25
|
|
|
26
26
|
var _ = require("../..");
|
|
27
27
|
|
|
28
|
+
var _WebChatActionType = require("./webchatcontroller/enums/WebChatActionType");
|
|
29
|
+
|
|
30
|
+
var _WebChatStoreLoader = require("./webchatcontroller/WebChatStoreLoader");
|
|
31
|
+
|
|
32
|
+
var _Constants = require("../../common/Constants");
|
|
33
|
+
|
|
34
|
+
var _BotMagicCodeStore = require("./webchatcontroller/BotMagicCodeStore");
|
|
35
|
+
|
|
28
36
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
37
|
|
|
30
38
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
31
39
|
|
|
40
|
+
const broadcastChannelMessageEvent = "message";
|
|
41
|
+
|
|
42
|
+
const postActivity = activity => {
|
|
43
|
+
// eslint-disable-line @typescript-eslint/no-explicit-any
|
|
44
|
+
return {
|
|
45
|
+
type: _WebChatActionType.WebChatActionType.DIRECT_LINE_POST_ACTIVITY,
|
|
46
|
+
meta: {
|
|
47
|
+
method: "keyboard"
|
|
48
|
+
},
|
|
49
|
+
payload: {
|
|
50
|
+
activity: {
|
|
51
|
+
channelData: undefined,
|
|
52
|
+
text: "",
|
|
53
|
+
textFormat: "plain",
|
|
54
|
+
type: _Constants.Constants.message,
|
|
55
|
+
...activity
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const createMagicCodeSuccessResponse = signin => {
|
|
62
|
+
return {
|
|
63
|
+
signin,
|
|
64
|
+
result: "Success"
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
|
|
32
68
|
const WebChatContainerStateful = props => {
|
|
33
69
|
const {
|
|
34
70
|
BasicWebChat
|
|
35
71
|
} = _botframeworkWebchat.Components;
|
|
36
72
|
const [state, dispatch] = (0, _.useChatContextStore)();
|
|
73
|
+
const magicCodeBroadcastChannel = new BroadcastChannel(_Constants.Constants.magicCodeBroadcastChannel);
|
|
74
|
+
const magicCodeResponseBroadcastChannel = new BroadcastChannel(_Constants.Constants.magicCodeResponseBroadcastChannel);
|
|
37
75
|
const containerStyles = {
|
|
38
76
|
root: Object.assign({}, _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.containerStyles, props === null || props === void 0 ? void 0 : props.containerStyles, {
|
|
39
77
|
display: state.appStates.isMinimized ? "none" : ""
|
|
@@ -58,6 +96,48 @@ const WebChatContainerStateful = props => {
|
|
|
58
96
|
Event: _TelemetryConstants.TelemetryEvent.WebChatLoaded
|
|
59
97
|
});
|
|
60
98
|
}, []);
|
|
99
|
+
(0, _react2.useEffect)(() => {
|
|
100
|
+
const eventListener = event => {
|
|
101
|
+
// eslint-disable-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-function
|
|
102
|
+
const {
|
|
103
|
+
data
|
|
104
|
+
} = event;
|
|
105
|
+
|
|
106
|
+
if (_BotMagicCodeStore.BotMagicCodeStore.botOAuthSignInId === data.signin) {
|
|
107
|
+
const {
|
|
108
|
+
signin,
|
|
109
|
+
code
|
|
110
|
+
} = data;
|
|
111
|
+
const text = `${code}`;
|
|
112
|
+
const action = postActivity({
|
|
113
|
+
text,
|
|
114
|
+
channelData: {
|
|
115
|
+
tags: [_Constants.Constants.hiddenTag]
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
_WebChatStoreLoader.WebChatStoreLoader.store.dispatch(action);
|
|
120
|
+
|
|
121
|
+
const response = createMagicCodeSuccessResponse(signin);
|
|
122
|
+
magicCodeResponseBroadcastChannel.postMessage(response);
|
|
123
|
+
|
|
124
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
125
|
+
Event: _TelemetryConstants.TelemetryEvent.SuppressBotMagicCodeSucceeded
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
_BotMagicCodeStore.BotMagicCodeStore.botOAuthSignInId = "";
|
|
129
|
+
magicCodeBroadcastChannel.close();
|
|
130
|
+
magicCodeResponseBroadcastChannel.close();
|
|
131
|
+
} else {
|
|
132
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
133
|
+
Event: _TelemetryConstants.TelemetryEvent.SuppressBotMagicCodeFailed,
|
|
134
|
+
Description: "Signin does not match"
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
magicCodeBroadcastChannel.addEventListener(broadcastChannelMessageEvent, eventListener);
|
|
140
|
+
}, []);
|
|
61
141
|
return /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, /*#__PURE__*/_react2.default.createElement("style", null, `
|
|
62
142
|
.ms_lcw_webchat_received_message img.webchat__markdown__external-link-icon {
|
|
63
143
|
background-image : url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik03LjI1MDEgNC41MDAxN0gxMC43NDk1QzExLjE2MzcgNC41MDAxNyAxMS40OTk1IDQuODM1OTYgMTEuNDk5NSA1LjI1MDE3QzExLjQ5OTUgNS42Mjk4NiAxMS4yMTczIDUuOTQzNjYgMTAuODUxMyA1Ljk5MzMyTDEwLjc0OTUgNi4wMDAxN0g3LjI0OTc0QzYuMDcwNzkgNS45OTk2MSA1LjEwMzQ5IDYuOTA2NTYgNS4wMDc4NiA4LjA2MTEyTDUuMDAwMjggOC4yMjAwM0w1LjAwMzEyIDE2Ljc1MDdDNS4wMDM0MyAxNy45NDE1IDUuOTI4ODUgMTguOTE2MSA3LjA5OTY2IDE4Ljk5NDlMNy4yNTM3MSAxOS4wMDAxTDE1Ljc1MTggMTguOTg4NEMxNi45NDE1IDE4Ljk4NjggMTcuOTE0NSAxOC4wNjIgMTcuOTkzNSAxNi44OTIzTDE3Ljk5ODcgMTYuNzM4NFYxMy4yMzIxQzE3Ljk5ODcgMTIuODE3OSAxOC4zMzQ1IDEyLjQ4MjEgMTguNzQ4NyAxMi40ODIxQzE5LjEyODQgMTIuNDgyMSAxOS40NDIyIDEyLjc2NDMgMTkuNDkxOCAxMy4xMzAzTDE5LjQ5ODcgMTMuMjMyMVYxNi43Mzg0QzE5LjQ5ODcgMTguNzQwNyAxNy45MjkzIDIwLjM3NjkgMTUuOTUyOCAyMC40ODI5TDE1Ljc1MzggMjAuNDg4NEw3LjI1ODI3IDIwLjUwMDFMNy4wNTQ5NSAyMC40OTQ5QzUuMTQyMzkgMjAuMzk1NCAzLjYwODk1IDE4Ljg2MjcgMy41MDgzNyAxNi45NTAyTDMuNTAzMTIgMTYuNzUxMUwzLjUwMDg5IDguMjUyN0wzLjUwNTI5IDguMDUwMkMzLjYwNTM5IDYuMTM3NDkgNS4xMzg2NyA0LjYwNDQ5IDcuMDUwOTYgNC41MDUyN0w3LjI1MDEgNC41MDAxN0gxMC43NDk1SDcuMjUwMVpNMTMuNzQ4MSAzLjAwMTQ2TDIwLjMwMTggMy4wMDE5N0wyMC40MDE0IDMuMDE1NzVMMjAuNTAyMiAzLjA0MzkzTDIwLjU1OSAzLjA2ODAzQzIwLjYxMjIgMy4wOTEyMiAyMC42NjM0IDMuMTIxNjMgMjAuNzExMSAzLjE1ODg1TDIwLjc4MDQgMy4yMjE1NkwyMC44NjQxIDMuMzIwMTRMMjAuOTE4MyAzLjQxMDI1TDIwLjk1NyAzLjUwMDU3TDIwLjk3NjIgMy41NjQ3NkwyMC45ODk4IDMuNjI4NjJMMjAuOTk5MiAzLjcyMjgyTDIwLjk5OTcgMTAuMjU1NEMyMC45OTk3IDEwLjY2OTYgMjAuNjYzOSAxMS4wMDU0IDIwLjI0OTcgMTEuMDA1NEMxOS44NyAxMS4wMDU0IDE5LjU1NjIgMTAuNzIzMiAxOS41MDY1IDEwLjM1NzFMMTkuNDk5NyAxMC4yNTU0TDE5LjQ5ODkgNS41NjE0N0wxMi4yNzk3IDEyLjc4NDdDMTIuMDEzNCAxMy4wNTEgMTEuNTk2OCAxMy4wNzUzIDExLjMwMzEgMTIuODU3NUwxMS4yMTkgMTIuNzg0OUMxMC45NTI3IDEyLjUxODcgMTAuOTI4NCAxMi4xMDIxIDExLjE0NjIgMTEuODA4NEwxMS4yMTg4IDExLjcyNDNMMTguNDM2OSA0LjUwMTQ2SDEzLjc0ODFDMTMuMzY4NCA0LjUwMTQ2IDEzLjA1NDYgNC4yMTkzMSAxMy4wMDUgMy44NTMyNEwxMi45OTgxIDMuNzUxNDZDMTIuOTk4MSAzLjM3MTc3IDEzLjI4MDMgMy4wNTc5NyAxMy42NDY0IDMuMDA4MzFMMTMuNzQ4MSAzLjAwMTQ2WiIgZmlsbD0iI0ZGRkZGRiIgLz48L3N2Zz4) !important;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BotMagicCodeStore = void 0;
|
|
7
|
+
|
|
8
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
9
|
+
|
|
10
|
+
class BotMagicCodeStore {}
|
|
11
|
+
|
|
12
|
+
exports.BotMagicCodeStore = BotMagicCodeStore;
|
|
13
|
+
|
|
14
|
+
_defineProperty(BotMagicCodeStore, "botOAuthSignInId", "");
|
|
@@ -83,7 +83,7 @@ const createActivityMiddleware = (systemMessageStyleProps, userMessageStyleProps
|
|
|
83
83
|
const [card] = args;
|
|
84
84
|
|
|
85
85
|
if (card.activity) {
|
|
86
|
-
var _card$activity$from
|
|
86
|
+
var _card$activity$from;
|
|
87
87
|
|
|
88
88
|
if (((_card$activity$from = card.activity.from) === null || _card$activity$from === void 0 ? void 0 : _card$activity$from.role) === _DirectLineSenderRole.DirectLineSenderRole.Channel) {
|
|
89
89
|
var _card$activity$channe3;
|
|
@@ -98,8 +98,14 @@ const createActivityMiddleware = (systemMessageStyleProps, userMessageStyleProps
|
|
|
98
98
|
return () => false;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
if (
|
|
102
|
-
|
|
101
|
+
if (card.activity.channelData.tags) {
|
|
102
|
+
if (card.activity.channelData.tags.includes(_Constants.Constants.hiddenTag)) {
|
|
103
|
+
return () => false;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (card.activity.channelData.tags.includes(_Constants.Constants.systemMessageTag)) {
|
|
107
|
+
return handleSystemMessage(next, args, card, systemMessageStyleProps);
|
|
108
|
+
}
|
|
103
109
|
} else if (card.activity.text && card.activity.type === _DirectLineActivityType.DirectLineActivityType.Message) {
|
|
104
110
|
if (!card.activity.channelData.isHtmlEncoded && card.activity.channelId === _Constants.Constants.webchatChannelId) {
|
|
105
111
|
card.activity.text = (0, _utils.escapeHtml)(card.activity.text);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createCardActionMiddleware = void 0;
|
|
7
|
+
|
|
8
|
+
var _BotMagicCodeStore = require("../../BotMagicCodeStore");
|
|
9
|
+
|
|
10
|
+
var CardActionType;
|
|
11
|
+
|
|
12
|
+
(function (CardActionType) {
|
|
13
|
+
CardActionType["OpenUrl"] = "openUrl";
|
|
14
|
+
CardActionType["SignIn"] = "signin";
|
|
15
|
+
})(CardActionType || (CardActionType = {}));
|
|
16
|
+
|
|
17
|
+
const validCardActionTypes = [CardActionType.OpenUrl, CardActionType.SignIn];
|
|
18
|
+
const botOauthUrlRegex = /[\S]+.botframework.com\/api\/oauth\/signin\?signin=([\S]+)/;
|
|
19
|
+
|
|
20
|
+
const createCardActionMiddleware = botMagicCodeConfig => {
|
|
21
|
+
const cardActionMiddleware = () => next => function () {
|
|
22
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
23
|
+
args[_key] = arguments[_key];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// eslint-disable-line @typescript-eslint/no-explicit-any
|
|
27
|
+
const [card] = args;
|
|
28
|
+
|
|
29
|
+
if (card.cardAction && validCardActionTypes.indexOf(card.cardAction.type) >= 0 && card.cardAction.value) {
|
|
30
|
+
// Override signin url only if fwdUrl is valid & feature is enabled
|
|
31
|
+
if ((botMagicCodeConfig === null || botMagicCodeConfig === void 0 ? void 0 : botMagicCodeConfig.disabled) === true && botMagicCodeConfig !== null && botMagicCodeConfig !== void 0 && botMagicCodeConfig.fwdUrl) {
|
|
32
|
+
const baseUrl = window.location.origin;
|
|
33
|
+
const result = botOauthUrlRegex.exec(card.cardAction.value);
|
|
34
|
+
|
|
35
|
+
if (result) {
|
|
36
|
+
_BotMagicCodeStore.BotMagicCodeStore.botOAuthSignInId = `${result[1]}`;
|
|
37
|
+
} // fwdUrl must be on the same domain as the chat widget
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
if (botMagicCodeConfig !== null && botMagicCodeConfig !== void 0 && botMagicCodeConfig.fwdUrl.startsWith(baseUrl)) {
|
|
41
|
+
card.cardAction.value += `&fwdUrl=${botMagicCodeConfig.fwdUrl}`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return next(...args);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
return cardActionMiddleware;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
exports.createCardActionMiddleware = createCardActionMiddleware;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom/extend-expect");
|
|
4
|
+
|
|
5
|
+
var _cardActionMiddleware = require("./cardActionMiddleware");
|
|
6
|
+
|
|
7
|
+
describe("cardActionMiddleware test", () => {
|
|
8
|
+
it("createCardActionMiddleware() with undefined botMagicCodeConfig should not change the sign in card url", () => {
|
|
9
|
+
const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
|
|
13
|
+
const args = {
|
|
14
|
+
cardAction: {
|
|
15
|
+
type: "signin",
|
|
16
|
+
value: signInUrl
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const results = (0, _cardActionMiddleware.createCardActionMiddleware)(undefined)()(next)(args);
|
|
20
|
+
expect(signInUrl).toEqual(results.cardAction.value);
|
|
21
|
+
});
|
|
22
|
+
it("createCardActionMiddleware() with botMagicCode enabled should not change the sign in card url", () => {
|
|
23
|
+
const botMagicCodeConfig = {
|
|
24
|
+
disabled: false
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
|
|
31
|
+
const args = {
|
|
32
|
+
cardAction: {
|
|
33
|
+
type: "signin",
|
|
34
|
+
value: signInUrl
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const results = (0, _cardActionMiddleware.createCardActionMiddleware)(botMagicCodeConfig)()(next)(args);
|
|
38
|
+
expect(args.cardAction.value).toEqual(results.cardAction.value);
|
|
39
|
+
});
|
|
40
|
+
it("createCardActionMiddleware() with botMagicCode disabled & no fwdUrl should not change the sign in card url", () => {
|
|
41
|
+
const botMagicCodeConfig = {
|
|
42
|
+
disabled: true
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
|
|
49
|
+
const args = {
|
|
50
|
+
cardAction: {
|
|
51
|
+
type: "signin",
|
|
52
|
+
value: signInUrl
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const results = (0, _cardActionMiddleware.createCardActionMiddleware)(botMagicCodeConfig)()(next)(args);
|
|
56
|
+
expect(args.cardAction.value).toEqual(results.cardAction.value);
|
|
57
|
+
});
|
|
58
|
+
it("createCardActionMiddleware() with botMagicCode disabled & fwdUrl should append the fwdUrl in the sign in card url", () => {
|
|
59
|
+
const botMagicCodeConfig = {
|
|
60
|
+
disabled: true,
|
|
61
|
+
fwdUrl: "http://localhost/forwarder.html"
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
|
|
68
|
+
const args = {
|
|
69
|
+
cardAction: {
|
|
70
|
+
type: "signin",
|
|
71
|
+
value: signInUrl
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const results = (0, _cardActionMiddleware.createCardActionMiddleware)(botMagicCodeConfig)()(next)(args);
|
|
75
|
+
expect(signInUrl === results.cardAction.value).toBe(false);
|
|
76
|
+
expect(results.cardAction.value === `${signInUrl}&fwdUrl=${botMagicCodeConfig.fwdUrl}`).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
it("createCardActionMiddleware() should not append fwdUrl if fwdUrl & sign in card url are not in the same domain", () => {
|
|
79
|
+
const botMagicCodeConfig = {
|
|
80
|
+
disabled: true,
|
|
81
|
+
fwdUrl: "https://localhost/forwarder.html"
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
|
|
88
|
+
const args = {
|
|
89
|
+
cardAction: {
|
|
90
|
+
type: "signin",
|
|
91
|
+
value: signInUrl
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const results = (0, _cardActionMiddleware.createCardActionMiddleware)(botMagicCodeConfig)()(next)(args);
|
|
95
|
+
expect(signInUrl === results.cardAction.value).toBe(true);
|
|
96
|
+
expect(results.cardAction.value === `${signInUrl}&fwdUrl=${botMagicCodeConfig.fwdUrl}`).toBe(false);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
@@ -10,6 +10,7 @@ var _TelemetryConstants = require("../../../../common/telemetry/TelemetryConstan
|
|
|
10
10
|
var _TelemetryHelper = require("../../../../common/telemetry/TelemetryHelper");
|
|
11
11
|
|
|
12
12
|
function createWebChatTelemetry() {
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
14
|
const handleTelemetry = event => {
|
|
14
15
|
const {
|
|
15
16
|
level
|