@microsoft/omnichannel-chat-widget 1.7.3-main.fee24eb → 1.7.4-main.0574a04
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 +1 -0
- package/lib/cjs/common/telemetry/TelemetryConstants.js +3 -0
- package/lib/cjs/components/footerstateful/FooterStateful.js +17 -3
- 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/chatDisconnectHelper.js +2 -2
- package/lib/cjs/components/livechatwidget/common/createAdapter.js +15 -2
- package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +6 -2
- package/lib/cjs/components/livechatwidget/common/createMarkdown.js +2 -2
- package/lib/cjs/components/livechatwidget/common/endChat.js +20 -9
- package/lib/cjs/components/livechatwidget/common/helpers/markdownHelper.js +23 -0
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +8 -4
- package/lib/cjs/components/livechatwidget/common/persistentChatHelper.js +2 -1
- package/lib/cjs/components/livechatwidget/common/startChat.js +9 -3
- package/lib/cjs/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.js +1 -0
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +49 -0
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +11 -6
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +4 -4
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatSDK.js +31 -0
- package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotAuthConfig.js +1 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +2 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +8 -0
- package/lib/cjs/index.js +7 -0
- package/lib/cjs/plugins/createChatTranscript.js +84 -0
- package/lib/esm/common/Constants.js +1 -0
- package/lib/esm/common/telemetry/TelemetryConstants.js +3 -0
- package/lib/esm/components/footerstateful/FooterStateful.js +15 -3
- 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/chatDisconnectHelper.js +3 -2
- package/lib/esm/components/livechatwidget/common/createAdapter.js +14 -2
- package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +6 -2
- package/lib/esm/components/livechatwidget/common/createMarkdown.js +2 -2
- package/lib/esm/components/livechatwidget/common/endChat.js +20 -9
- package/lib/esm/components/livechatwidget/common/helpers/markdownHelper.js +15 -0
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +8 -4
- package/lib/esm/components/livechatwidget/common/persistentChatHelper.js +2 -1
- package/lib/esm/components/livechatwidget/common/startChat.js +9 -3
- package/lib/esm/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.js +1 -0
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +50 -1
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +11 -6
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +4 -4
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatSDK.js +31 -0
- package/lib/esm/components/webchatcontainerstateful/interfaces/IBotAuthConfig.js +1 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +2 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +8 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/plugins/createChatTranscript.js +84 -0
- package/lib/types/common/Constants.d.ts +1 -0
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +5 -2
- 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/helpers/markdownHelper.d.ts +2 -0
- package/lib/types/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.d.ts +4 -0
- package/lib/types/components/webchatcontainerstateful/common/DesignerChatSDK.d.ts +25 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IBotAuthConfig.d.ts +4 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
- package/lib/types/index.d.ts +1 -0
- package/package.json +4 -2
|
@@ -307,6 +307,7 @@ class WidgetLoadCustomErrorString {}
|
|
|
307
307
|
exports.WidgetLoadCustomErrorString = WidgetLoadCustomErrorString;
|
|
308
308
|
_defineProperty(WidgetLoadCustomErrorString, "AuthenticationFailedErrorString", "Authentication was not successful");
|
|
309
309
|
_defineProperty(WidgetLoadCustomErrorString, "NetworkErrorString", "Network Error");
|
|
310
|
+
_defineProperty(WidgetLoadCustomErrorString, "CloseAdapterAfterDisconnectionErrorString", "Error trying to end/close chat adapter after the widget is back on-line, for an already disconnected session");
|
|
310
311
|
class PrepareEndChatDescriptionConstants {}
|
|
311
312
|
exports.PrepareEndChatDescriptionConstants = PrepareEndChatDescriptionConstants;
|
|
312
313
|
_defineProperty(PrepareEndChatDescriptionConstants, "ConversationEndedByCustomerWithoutPostChat", "Conversation ended by customer. Post chat not configured or should not show.");
|
|
@@ -65,6 +65,7 @@ exports.BroadcastEvent = BroadcastEvent;
|
|
|
65
65
|
BroadcastEvent["UpdateConversationDataForTelemetry"] = "UpdateConversationDataForTelemetry";
|
|
66
66
|
BroadcastEvent["ContactIdNotFound"] = "ContactIdNotFound";
|
|
67
67
|
BroadcastEvent["SyncMinimize"] = "SyncMinimize";
|
|
68
|
+
BroadcastEvent["OnWidgetError"] = "OnWidgetError";
|
|
68
69
|
})(BroadcastEvent || (exports.BroadcastEvent = BroadcastEvent = {}));
|
|
69
70
|
let TelemetryEvent;
|
|
70
71
|
exports.TelemetryEvent = TelemetryEvent;
|
|
@@ -215,6 +216,8 @@ exports.TelemetryEvent = TelemetryEvent;
|
|
|
215
216
|
TelemetryEvent["PostChatSurveyLoadingPaneLoaded"] = "PostChatSurveyLoadingPaneLoaded";
|
|
216
217
|
TelemetryEvent["PostChatSurveyLoaded"] = "PostChatSurveyLoaded";
|
|
217
218
|
TelemetryEvent["ChatDisconnectThreadEventReceived"] = "ChatDisconnectThreadEventReceived";
|
|
219
|
+
TelemetryEvent["HiddenAdaptiveCardMessageReceived"] = "HiddenAdaptiveCardMessageReceived";
|
|
220
|
+
TelemetryEvent["EndingAdapterAfterDisconnectionError"] = "EndingAdapterAfterDisconnectionError";
|
|
218
221
|
})(TelemetryEvent || (exports.TelemetryEvent = TelemetryEvent = {}));
|
|
219
222
|
class TelemetryConstants {
|
|
220
223
|
static map(eventTypeOrScenarioType) {
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.FooterStateful = void 0;
|
|
7
7
|
var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
|
|
8
|
-
var _react =
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _AudioNotificationStateful = _interopRequireDefault(require("./audionotificationstateful/AudioNotificationStateful"));
|
|
10
10
|
var _Constants = require("../../common/Constants");
|
|
11
11
|
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
@@ -17,10 +17,13 @@ var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
|
|
|
17
17
|
var _DownloadTranscriptStateful = require("./downloadtranscriptstateful/DownloadTranscriptStateful");
|
|
18
18
|
var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
|
|
19
19
|
var _useChatSDKStore = _interopRequireDefault(require("../../hooks/useChatSDKStore"));
|
|
20
|
+
var _ConversationState = require("../../contexts/common/ConversationState");
|
|
20
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
|
+
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); }
|
|
23
|
+
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; }
|
|
21
24
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
25
|
const FooterStateful = props => {
|
|
23
|
-
var _footerProps$controlP3
|
|
26
|
+
var _footerProps$controlP3;
|
|
24
27
|
const [state, dispatch] = (0, _useChatContextStore.default)();
|
|
25
28
|
// hideFooterDisplay - the purpose of this is to keep the footer always "active",
|
|
26
29
|
// but hide it visually in certain states (e.g., loading state) and show in some other states (e.g. active state).
|
|
@@ -87,13 +90,24 @@ const FooterStateful = props => {
|
|
|
87
90
|
isAudioMuted: state.appStates.isAudioMuted
|
|
88
91
|
}
|
|
89
92
|
};
|
|
93
|
+
(0, _react.useEffect)(() => {
|
|
94
|
+
if (state.appStates.conversationState === _ConversationState.ConversationState.Active) {
|
|
95
|
+
if (state.appStates.isAudioMuted === null) {
|
|
96
|
+
var _footerProps$controlP4, _footerProps$controlP5, _footerProps$controlP6;
|
|
97
|
+
dispatch({
|
|
98
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_AUDIO_NOTIFICATION,
|
|
99
|
+
payload: footerProps !== null && footerProps !== void 0 && (_footerProps$controlP4 = footerProps.controlProps) !== null && _footerProps$controlP4 !== void 0 && _footerProps$controlP4.hideAudioNotificationButton ? true : (footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP5 = footerProps.controlProps) === null || _footerProps$controlP5 === void 0 ? void 0 : (_footerProps$controlP6 = _footerProps$controlP5.audioNotificationButtonProps) === null || _footerProps$controlP6 === void 0 ? void 0 : _footerProps$controlP6.isAudioMuted) ?? false
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}, [state.appStates.conversationState]);
|
|
90
104
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !hideFooterDisplay && /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.Footer, {
|
|
91
105
|
componentOverrides: footerProps === null || footerProps === void 0 ? void 0 : footerProps.componentOverrides,
|
|
92
106
|
controlProps: controlProps,
|
|
93
107
|
styleProps: footerProps === null || footerProps === void 0 ? void 0 : footerProps.styleProps
|
|
94
108
|
}), /*#__PURE__*/_react.default.createElement(_AudioNotificationStateful.default, {
|
|
95
109
|
audioSrc: (audioNotificationProps === null || audioNotificationProps === void 0 ? void 0 : audioNotificationProps.audioSrc) ?? _Audios.NewMessageNotificationSoundBase64,
|
|
96
|
-
isAudioMuted: state.appStates.isAudioMuted
|
|
110
|
+
isAudioMuted: state.appStates.isAudioMuted ?? false
|
|
97
111
|
}));
|
|
98
112
|
};
|
|
99
113
|
exports.FooterStateful = FooterStateful;
|
package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js
CHANGED
|
@@ -13,8 +13,6 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
|
|
|
13
13
|
const supportedSignInCardContentTypes = ["application/vnd.microsoft.card.signin", "application/vnd.microsoft.card.oauth"];
|
|
14
14
|
const botOauthUrlRegex = /[\S]+.botframework.com\/api\/oauth\/signin\?signin=([\S]+)/;
|
|
15
15
|
const delay = t => new Promise(resolve => setTimeout(resolve, t));
|
|
16
|
-
const fetchBotAuthConfigRetries = 3;
|
|
17
|
-
const fetchBotAuthConfigRetryInterval = 1000;
|
|
18
16
|
let response;
|
|
19
17
|
const extractSignInId = signInUrl => {
|
|
20
18
|
const result = botOauthUrlRegex.exec(signInUrl);
|
|
@@ -43,7 +41,7 @@ const extractSasUrl = async attachment => {
|
|
|
43
41
|
}
|
|
44
42
|
return sasUrl;
|
|
45
43
|
};
|
|
46
|
-
const fetchBotAuthConfig = async retries => {
|
|
44
|
+
const fetchBotAuthConfig = async (retries, interval) => {
|
|
47
45
|
_TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
48
46
|
Event: _TelemetryConstants.TelemetryEvent.SetBotAuthProviderFetchConfig
|
|
49
47
|
});
|
|
@@ -64,14 +62,25 @@ const fetchBotAuthConfig = async retries => {
|
|
|
64
62
|
// Base Case
|
|
65
63
|
throw new Error();
|
|
66
64
|
}
|
|
67
|
-
await delay(
|
|
68
|
-
return await fetchBotAuthConfig(--retries);
|
|
65
|
+
await delay(interval);
|
|
66
|
+
return await fetchBotAuthConfig(--retries, interval);
|
|
69
67
|
};
|
|
70
68
|
class BotAuthActivitySubscriber {
|
|
71
69
|
constructor() {
|
|
70
|
+
let optionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
72
71
|
_defineProperty(this, "observer", void 0);
|
|
73
72
|
_defineProperty(this, "signInCardSeen", void 0);
|
|
73
|
+
_defineProperty(this, "fetchBotAuthConfigRetries", void 0);
|
|
74
|
+
_defineProperty(this, "fetchBotAuthConfigRetryInterval", void 0);
|
|
74
75
|
this.signInCardSeen = new Set();
|
|
76
|
+
this.fetchBotAuthConfigRetries = 3;
|
|
77
|
+
this.fetchBotAuthConfigRetryInterval = 1000;
|
|
78
|
+
if (optionalParams.fetchBotAuthConfigRetries) {
|
|
79
|
+
this.fetchBotAuthConfigRetries = optionalParams.fetchBotAuthConfigRetries;
|
|
80
|
+
}
|
|
81
|
+
if (optionalParams.fetchBotAuthConfigRetryInterval) {
|
|
82
|
+
this.fetchBotAuthConfigRetryInterval = optionalParams.fetchBotAuthConfigRetryInterval;
|
|
83
|
+
}
|
|
75
84
|
}
|
|
76
85
|
applicable(activity) {
|
|
77
86
|
var _activity$attachments;
|
|
@@ -110,7 +119,7 @@ class BotAuthActivitySubscriber {
|
|
|
110
119
|
_omnichannelChatComponents.BroadcastService.postMessage(event);
|
|
111
120
|
}
|
|
112
121
|
try {
|
|
113
|
-
const response = await fetchBotAuthConfig(fetchBotAuthConfigRetries);
|
|
122
|
+
const response = await fetchBotAuthConfig(this.fetchBotAuthConfigRetries, this.fetchBotAuthConfigRetryInterval);
|
|
114
123
|
if (response === false) {
|
|
115
124
|
_TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
116
125
|
Event: _TelemetryConstants.TelemetryEvent.SetBotAuthProviderHideCard
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.HiddenAdaptiveCardActivitySubscriber = void 0;
|
|
7
|
+
var _Constants = require("../../../../common/Constants");
|
|
8
|
+
var _TelemetryConstants = require("../../../../common/telemetry/TelemetryConstants");
|
|
9
|
+
var _TelemetryHelper = require("../../../../common/telemetry/TelemetryHelper");
|
|
10
|
+
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
11
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
12
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
13
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
14
|
+
class HiddenAdaptiveCardActivitySubscriber {
|
|
15
|
+
constructor() {
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
+
_defineProperty(this, "observer", void 0);
|
|
18
|
+
}
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
+
async apply(activity) {
|
|
21
|
+
const {
|
|
22
|
+
attachments,
|
|
23
|
+
attachment
|
|
24
|
+
} = activity;
|
|
25
|
+
this.observer.next(false);
|
|
26
|
+
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
27
|
+
eventName: _TelemetryConstants.BroadcastEvent.NewMessageReceived,
|
|
28
|
+
payload: {
|
|
29
|
+
attachments: attachments || [attachment],
|
|
30
|
+
text: "Custom Event"
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
37
|
+
applicable(activity) {
|
|
38
|
+
const {
|
|
39
|
+
attachments,
|
|
40
|
+
attachment
|
|
41
|
+
} = activity;
|
|
42
|
+
|
|
43
|
+
// Use `attachments` or `attachment` (whichever exists)
|
|
44
|
+
const cards = attachments || [attachment];
|
|
45
|
+
|
|
46
|
+
// Check if contentType is "AdaptiveCard"
|
|
47
|
+
const adaptiveCard = cards === null || cards === void 0 ? void 0 : cards.find(
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
49
|
+
item => _Constants.Constants.supportedAdaptiveCardContentTypes.indexOf(item === null || item === void 0 ? void 0 : item.contentType) >= 0);
|
|
50
|
+
if (adaptiveCard && adaptiveCard.content) {
|
|
51
|
+
const {
|
|
52
|
+
body
|
|
53
|
+
} = adaptiveCard.content;
|
|
54
|
+
if (Array.isArray(body)) {
|
|
55
|
+
// Check if all elements in `body` have `isVisible: false`
|
|
56
|
+
const allInvisible = body.every(item => item.isVisible === false);
|
|
57
|
+
if (allInvisible) {
|
|
58
|
+
_TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
59
|
+
Event: _TelemetryConstants.TelemetryEvent.HiddenAdaptiveCardMessageReceived,
|
|
60
|
+
Description: "All elements in AdaptiveCard are invisible"
|
|
61
|
+
});
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
70
|
+
async next(activity) {
|
|
71
|
+
if (this.applicable(activity)) {
|
|
72
|
+
return await this.apply(activity);
|
|
73
|
+
}
|
|
74
|
+
return activity;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.HiddenAdaptiveCardActivitySubscriber = HiddenAdaptiveCardActivitySubscriber;
|
|
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.handleChatDisconnect = void 0;
|
|
7
|
+
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
7
8
|
var _NotificationHandler = require("../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler");
|
|
8
9
|
var _NotificationScenarios = require("../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios");
|
|
9
|
-
var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
|
|
10
|
-
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
11
10
|
var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
|
|
11
|
+
var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
|
|
12
12
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
13
|
const handleChatDisconnect = (props, state, setWebChatStyles) => {
|
|
14
14
|
var _state$appStates, _state$domainStates, _state$domainStates$m, _props$webChatContain, _props$webChatContain2;
|
|
@@ -11,8 +11,14 @@ var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/c
|
|
|
11
11
|
var _ChatAdapterShim = require("./ChatAdapterShim");
|
|
12
12
|
var _PauseActivitySubscriber = require("./ActivitySubscriber/PauseActivitySubscriber");
|
|
13
13
|
var _BotAuthActivitySubscriber = require("./ActivitySubscriber/BotAuthActivitySubscriber");
|
|
14
|
+
var _HiddenAdaptiveCardActivitySubscriber = require("./ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber");
|
|
15
|
+
const defaultBotAuthConfig = {
|
|
16
|
+
fetchBotAuthConfigRetries: 3,
|
|
17
|
+
fetchBotAuthConfigRetryInterval: 1000
|
|
18
|
+
};
|
|
19
|
+
|
|
14
20
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
|
-
const createAdapter = async chatSDK => {
|
|
21
|
+
const createAdapter = async (chatSDK, props) => {
|
|
16
22
|
const chatAdapterOptionalParams = {
|
|
17
23
|
IC3Adapter: {
|
|
18
24
|
options: {
|
|
@@ -38,9 +44,16 @@ const createAdapter = async chatSDK => {
|
|
|
38
44
|
let adapter = await chatSDK.createChatAdapter(chatAdapterOptionalParams);
|
|
39
45
|
//so far, there is no need to convert to the shim adapter when using visual tests
|
|
40
46
|
if (chatSDK.isMockModeOn !== true) {
|
|
47
|
+
var _props$webChatContain, _props$webChatContain2, _props$webChatContain3, _props$webChatContain4;
|
|
48
|
+
const botAuthActivitySubscriberOptionalParams = {
|
|
49
|
+
fetchBotAuthConfigRetries: (props === null || props === void 0 ? void 0 : (_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : (_props$webChatContain2 = _props$webChatContain.botAuthConfig) === null || _props$webChatContain2 === void 0 ? void 0 : _props$webChatContain2.fetchBotAuthConfigRetries) || defaultBotAuthConfig.fetchBotAuthConfigRetries,
|
|
50
|
+
fetchBotAuthConfigRetryInterval: (props === null || props === void 0 ? void 0 : (_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : (_props$webChatContain4 = _props$webChatContain3.botAuthConfig) === null || _props$webChatContain4 === void 0 ? void 0 : _props$webChatContain4.fetchBotAuthConfigRetryInterval) || defaultBotAuthConfig.fetchBotAuthConfigRetryInterval
|
|
51
|
+
};
|
|
41
52
|
adapter = new _ChatAdapterShim.ChatAdapterShim(adapter);
|
|
42
53
|
adapter.addSubscriber(new _PauseActivitySubscriber.PauseActivitySubscriber());
|
|
43
|
-
adapter.addSubscriber(new _BotAuthActivitySubscriber.BotAuthActivitySubscriber());
|
|
54
|
+
adapter.addSubscriber(new _BotAuthActivitySubscriber.BotAuthActivitySubscriber(botAuthActivitySubscriberOptionalParams));
|
|
55
|
+
// Remove this code after ICM ID:544623085 is fixed
|
|
56
|
+
adapter.addSubscriber(new _HiddenAdaptiveCardActivitySubscriber.HiddenAdaptiveCardActivitySubscriber());
|
|
44
57
|
return adapter.chatAdapter;
|
|
45
58
|
}
|
|
46
59
|
return adapter;
|
|
@@ -4,12 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createInternetConnectionChangeHandler = void 0;
|
|
7
|
+
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
8
|
+
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
7
9
|
var _Constants = require("../../../common/Constants");
|
|
8
10
|
var _NotificationHandler = require("../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler");
|
|
9
11
|
var _NotificationScenarios = require("../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios");
|
|
10
|
-
var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
|
|
11
12
|
var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
|
|
12
|
-
var
|
|
13
|
+
var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
|
|
13
14
|
const isInternetConnected = async () => {
|
|
14
15
|
try {
|
|
15
16
|
const response = await fetch(_Constants.Constants.internetConnectionTestUrl);
|
|
@@ -32,6 +33,9 @@ const createInternetConnectionChangeHandler = async () => {
|
|
|
32
33
|
Event: _TelemetryConstants.TelemetryEvent.NetworkReconnected
|
|
33
34
|
});
|
|
34
35
|
_NotificationHandler.NotificationHandler.notifySuccess(_NotificationScenarios.NotificationScenarios.InternetConnection, _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_INTERNET_BACK_ONLINE);
|
|
36
|
+
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
37
|
+
eventName: _TelemetryConstants.BroadcastEvent.NetworkReconnected
|
|
38
|
+
});
|
|
35
39
|
}
|
|
36
40
|
};
|
|
37
41
|
|
|
@@ -7,8 +7,8 @@ exports.createMarkdown = void 0;
|
|
|
7
7
|
var _Constants = require("../../../common/Constants");
|
|
8
8
|
var _markdownIt = _interopRequireDefault(require("markdown-it"));
|
|
9
9
|
var _markdownItForInline = _interopRequireDefault(require("markdown-it-for-inline"));
|
|
10
|
-
var _slackMarkdownIt = _interopRequireDefault(require("slack-markdown-it"));
|
|
11
10
|
var _defaultMarkdownLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMarkdownLocalizedTexts");
|
|
11
|
+
var _markdownHelper = require("./helpers/markdownHelper");
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
14
|
const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineMarkdownSupport) => {
|
|
@@ -19,7 +19,7 @@ const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineMarkdown
|
|
|
19
19
|
linkify: true,
|
|
20
20
|
breaks: !disableNewLineMarkdownSupport
|
|
21
21
|
});
|
|
22
|
-
markdown
|
|
22
|
+
markdown = (0, _markdownHelper.addSlackMarkdownIt)(markdown);
|
|
23
23
|
} else {
|
|
24
24
|
markdown = new _markdownIt.default(_Constants.Constants.Zero, {
|
|
25
25
|
html: true,
|
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.prepareEndChat = exports.endVoiceVideoCallIfOngoing = exports.endChatStateCleanUp = exports.endChat = exports.closeChatStateCleanUp = exports.chatSDKStateCleanUp = exports.callingStateCleanUp = void 0;
|
|
7
|
-
var _Constants = require("../../../common/Constants");
|
|
8
7
|
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
8
|
+
var _Constants = require("../../../common/Constants");
|
|
9
9
|
var _utils = require("../../../common/utils");
|
|
10
10
|
var _renderSurveyHelpers = require("./renderSurveyHelpers");
|
|
11
11
|
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
@@ -60,6 +60,13 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
|
|
|
60
60
|
const postchatContext = (await (0, _renderSurveyHelpers.getPostChatContext)(chatSDK, state, dispatch)) ?? (state === null || state === void 0 ? void 0 : (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.postChatContext);
|
|
61
61
|
if (postchatContext === undefined) {
|
|
62
62
|
var _state$appStates2;
|
|
63
|
+
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
64
|
+
eventName: _TelemetryConstants.BroadcastEvent.OnWidgetError,
|
|
65
|
+
payload: {
|
|
66
|
+
errorMessage: "Widget did not display post chat survey as getPostChatContext returned undefined."
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
63
70
|
// For Customer intiated conversations, just close chat widget
|
|
64
71
|
if ((state === null || state === void 0 ? void 0 : (_state$appStates2 = state.appStates) === null || _state$appStates2 === void 0 ? void 0 : _state$appStates2.conversationEndedBy) === _Constants.ConversationEndEntity.Customer) {
|
|
65
72
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
@@ -133,21 +140,25 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
|
|
|
133
140
|
exports.prepareEndChat = prepareEndChat;
|
|
134
141
|
const endChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => {
|
|
135
142
|
if (!skipEndChatSDK && chatSDK.conversation) {
|
|
143
|
+
var _inMemoryState$appSta;
|
|
144
|
+
const inMemoryState = (0, _createReducer.executeReducer)(state, {
|
|
145
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
146
|
+
payload: null
|
|
147
|
+
});
|
|
148
|
+
const endChatOptionalParameters = {
|
|
149
|
+
isSessionEnded: inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta = inMemoryState.appStates) === null || _inMemoryState$appSta === void 0 ? void 0 : _inMemoryState$appSta.chatDisconnectEventReceived
|
|
150
|
+
};
|
|
136
151
|
try {
|
|
137
152
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
138
153
|
Event: _TelemetryConstants.TelemetryEvent.EndChatSDKCall
|
|
139
154
|
});
|
|
140
155
|
//Get auth token again if chat continued for longer time, otherwise gets 401 error
|
|
141
156
|
await (0, _authHelper.handleAuthentication)(chatSDK, props.chatConfig, props.getAuthToken);
|
|
142
|
-
await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat());
|
|
157
|
+
await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat(endChatOptionalParameters));
|
|
143
158
|
} catch (ex) {
|
|
144
|
-
var _inMemoryState$
|
|
145
|
-
const inMemoryState = (0, _createReducer.executeReducer)(state, {
|
|
146
|
-
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
147
|
-
payload: null
|
|
148
|
-
});
|
|
159
|
+
var _inMemoryState$appSta2;
|
|
149
160
|
// if the chat was disconnected or ended by the agent, we don't want to log the error
|
|
150
|
-
if (!(inMemoryState !== null && inMemoryState !== void 0 && (_inMemoryState$
|
|
161
|
+
if (!(inMemoryState !== null && inMemoryState !== void 0 && (_inMemoryState$appSta2 = inMemoryState.appStates) !== null && _inMemoryState$appSta2 !== void 0 && _inMemoryState$appSta2.chatDisconnectEventReceived)) {
|
|
151
162
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
152
163
|
Event: _TelemetryConstants.TelemetryEvent.EndChatSDKCallFailed,
|
|
153
164
|
ExceptionDetails: {
|
|
@@ -164,7 +175,7 @@ const endChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatSt
|
|
|
164
175
|
}
|
|
165
176
|
postMessageToOtherTab = false;
|
|
166
177
|
} finally {
|
|
167
|
-
|
|
178
|
+
endChatStateCleanUp(dispatch);
|
|
168
179
|
}
|
|
169
180
|
}
|
|
170
181
|
if (!skipCloseChat) {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.addSlackMarkdownIt = void 0;
|
|
7
|
+
var _slackMarkdownIt = _interopRequireDefault(require("slack-markdown-it"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
const addSlackMarkdownIt = markdown => {
|
|
10
|
+
try {
|
|
11
|
+
markdown.use(_slackMarkdownIt.default);
|
|
12
|
+
} catch (e) {
|
|
13
|
+
// this is to support the case when slack-markdown-it
|
|
14
|
+
// transpiled code doesn't export default (webpack5)
|
|
15
|
+
if (_slackMarkdownIt.default.default.apply) {
|
|
16
|
+
markdown.use(_slackMarkdownIt.default.default);
|
|
17
|
+
} else {
|
|
18
|
+
console.error("Error while adding slackMarkdown plugin", e);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return markdown;
|
|
22
|
+
};
|
|
23
|
+
exports.addSlackMarkdownIt = addSlackMarkdownIt;
|
|
@@ -7,6 +7,7 @@ exports.initWebChatComposer = void 0;
|
|
|
7
7
|
var _Constants = require("../../../common/Constants");
|
|
8
8
|
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
9
9
|
var _utils = require("../../../common/utils");
|
|
10
|
+
var _dompurify = _interopRequireDefault(require("dompurify"));
|
|
10
11
|
var _HyperlinkTextOverrideRenderer = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/markdownrenderers/HyperlinkTextOverrideRenderer"));
|
|
11
12
|
var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
|
|
12
13
|
var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
|
|
@@ -22,8 +23,10 @@ var _conversationEndMiddleware = _interopRequireDefault(require("../../webchatco
|
|
|
22
23
|
var _dataMaskingMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware"));
|
|
23
24
|
var _createMarkdown = require("./createMarkdown");
|
|
24
25
|
var _maxMessageSizeValidator = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator"));
|
|
26
|
+
var _messageSequenceIdOverrideMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware"));
|
|
25
27
|
var _messageTimestampMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware"));
|
|
26
28
|
var _botframeworkWebchat = require("botframework-webchat");
|
|
29
|
+
var _toastMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware"));
|
|
27
30
|
var _WebChatLogger = require("../../webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger");
|
|
28
31
|
var _defaultAttachmentProps = require("../../webchatcontainerstateful/common/defaultProps/defaultAttachmentProps");
|
|
29
32
|
var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
|
|
@@ -34,9 +37,6 @@ var _htmlPlayerMiddleware = _interopRequireDefault(require("../../webchatcontain
|
|
|
34
37
|
var _htmlTextMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware"));
|
|
35
38
|
var _preProcessingMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware"));
|
|
36
39
|
var _sanitizationMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware"));
|
|
37
|
-
var _dompurify = _interopRequireDefault(require("dompurify"));
|
|
38
|
-
var _messageSequenceIdOverrideMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware"));
|
|
39
|
-
var _toastMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware"));
|
|
40
40
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
41
41
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
42
42
|
const initWebChatComposer = (props, state, dispatch, chatSDK, endChat) => {
|
|
@@ -106,7 +106,11 @@ const initWebChatComposer = (props, state, dispatch, chatSDK, endChat) => {
|
|
|
106
106
|
markdownRenderers.forEach(renderer => {
|
|
107
107
|
text = renderer.render(text);
|
|
108
108
|
});
|
|
109
|
-
|
|
109
|
+
const config = {
|
|
110
|
+
FORBID_TAGS: ["form", "button", "script", "div"],
|
|
111
|
+
FORBID_ATTR: ["action"]
|
|
112
|
+
};
|
|
113
|
+
text = _dompurify.default.sanitize(text, config);
|
|
110
114
|
return text;
|
|
111
115
|
};
|
|
112
116
|
function postDomPurifyActivities() {
|
|
@@ -11,7 +11,8 @@ const shouldSetPreChatIfPersistentChat = async (chatSDK, conversationMode, showP
|
|
|
11
11
|
let skipPreChat = false;
|
|
12
12
|
if (persistentEnabled) {
|
|
13
13
|
const reconnectableChatsParams = {
|
|
14
|
-
authenticatedUserToken: chatSDK.authenticatedUserToken
|
|
14
|
+
authenticatedUserToken: chatSDK.authenticatedUserToken,
|
|
15
|
+
requestId: chatSDK.requestId
|
|
15
16
|
};
|
|
16
17
|
try {
|
|
17
18
|
const reconnectableChatsResponse = await chatSDK.OCClient.getReconnectableChats(reconnectableChatsParams);
|
|
@@ -206,10 +206,16 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, state, props, params
|
|
|
206
206
|
exception: `Failed to setup startChat: ${error}`
|
|
207
207
|
}
|
|
208
208
|
});
|
|
209
|
+
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
210
|
+
eventName: _TelemetryConstants.BroadcastEvent.OnWidgetError,
|
|
211
|
+
payload: {
|
|
212
|
+
errorMessage: error
|
|
213
|
+
}
|
|
214
|
+
});
|
|
209
215
|
isStartChatSuccessful = false;
|
|
210
216
|
throw error;
|
|
211
217
|
}
|
|
212
|
-
await createAdapterAndSubscribe(chatSDK, dispatch, setAdapter);
|
|
218
|
+
await createAdapterAndSubscribe(chatSDK, dispatch, setAdapter, props);
|
|
213
219
|
|
|
214
220
|
// Set app state to Active
|
|
215
221
|
if (isStartChatSuccessful) {
|
|
@@ -260,10 +266,10 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, state, props, params
|
|
|
260
266
|
|
|
261
267
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
262
268
|
exports.initStartChat = initStartChat;
|
|
263
|
-
const createAdapterAndSubscribe = async (chatSDK, dispatch, setAdapter) => {
|
|
269
|
+
const createAdapterAndSubscribe = async (chatSDK, dispatch, setAdapter, props) => {
|
|
264
270
|
var _newAdapter$activity$;
|
|
265
271
|
// New adapter creation
|
|
266
|
-
const newAdapter = await (0, _createAdapter.createAdapter)(chatSDK);
|
|
272
|
+
const newAdapter = await (0, _createAdapter.createAdapter)(chatSDK, props);
|
|
267
273
|
setAdapter(newAdapter);
|
|
268
274
|
const chatToken = await chatSDK.getChatToken();
|
|
269
275
|
dispatch({
|
package/lib/cjs/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -155,6 +155,12 @@ const LiveChatWidgetStateful = props => {
|
|
|
155
155
|
}
|
|
156
156
|
return;
|
|
157
157
|
}
|
|
158
|
+
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
159
|
+
eventName: _TelemetryConstants.BroadcastEvent.OnWidgetError,
|
|
160
|
+
payload: {
|
|
161
|
+
errorMessage: "Chat found in cache but invalid as the conversation status is inactive."
|
|
162
|
+
}
|
|
163
|
+
});
|
|
158
164
|
}
|
|
159
165
|
if (isChatValid === false) {
|
|
160
166
|
if (localState) {
|
|
@@ -274,6 +280,12 @@ const LiveChatWidgetStateful = props => {
|
|
|
274
280
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
275
281
|
payload: _ConversationState.ConversationState.OutOfOffice
|
|
276
282
|
});
|
|
283
|
+
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
284
|
+
eventName: _TelemetryConstants.BroadcastEvent.OnWidgetError,
|
|
285
|
+
payload: {
|
|
286
|
+
errorMessage: "Out-of-office hours status is shown."
|
|
287
|
+
}
|
|
288
|
+
});
|
|
277
289
|
return;
|
|
278
290
|
}
|
|
279
291
|
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
@@ -354,6 +366,30 @@ const LiveChatWidgetStateful = props => {
|
|
|
354
366
|
}
|
|
355
367
|
}
|
|
356
368
|
});
|
|
369
|
+
_omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.NetworkReconnected).subscribe(async () => {
|
|
370
|
+
var _window2, _window2$location;
|
|
371
|
+
if ((0, _utils.isThisSessionPopout)((_window2 = window) === null || _window2 === void 0 ? void 0 : (_window2$location = _window2.location) === null || _window2$location === void 0 ? void 0 : _window2$location.href)) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
const conversationDetails = await (0, _utils.getConversationDetailsCall)(chatSDK);
|
|
375
|
+
if ((conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.state) === _Constants.LiveWorkItemState.WrapUp || (conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.state) === _Constants.LiveWorkItemState.Closed) {
|
|
376
|
+
dispatch({
|
|
377
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CHAT_DISCONNECT_EVENT_RECEIVED,
|
|
378
|
+
payload: true
|
|
379
|
+
});
|
|
380
|
+
const desc = "Chat disconnected due to timeout, user went offline or blocked the device (including closing laptop)";
|
|
381
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
382
|
+
Event: _TelemetryConstants.TelemetryEvent.ChatDisconnectThreadEventReceived,
|
|
383
|
+
Description: desc
|
|
384
|
+
});
|
|
385
|
+
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
386
|
+
eventName: _TelemetryConstants.BroadcastEvent.OnWidgetError,
|
|
387
|
+
payload: {
|
|
388
|
+
errorMessage: desc
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
});
|
|
357
393
|
|
|
358
394
|
/**
|
|
359
395
|
* This will allow to sync multiple tabs to handle minimize and maximize state,
|
|
@@ -671,11 +707,24 @@ const LiveChatWidgetStateful = props => {
|
|
|
671
707
|
|
|
672
708
|
// Handle Chat disconnect cases
|
|
673
709
|
(0, _react2.useEffect)(() => {
|
|
710
|
+
var _inMemoryState$appSta5;
|
|
674
711
|
const inMemoryState = (0, _createReducer.executeReducer)(state, {
|
|
675
712
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
676
713
|
payload: null
|
|
677
714
|
});
|
|
678
715
|
(0, _chatDisconnectHelper.handleChatDisconnect)(props, inMemoryState, setWebChatStyles);
|
|
716
|
+
const chatDisconnectState = inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta5 = inMemoryState.appStates) === null || _inMemoryState$appSta5 === void 0 ? void 0 : _inMemoryState$appSta5.chatDisconnectEventReceived;
|
|
717
|
+
if (chatDisconnectState && adapter) {
|
|
718
|
+
try {
|
|
719
|
+
adapter.end();
|
|
720
|
+
adapter.close();
|
|
721
|
+
} catch (e) {
|
|
722
|
+
_TelemetryHelper.TelemetryHelper.logWebChatEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
723
|
+
Event: _TelemetryConstants.TelemetryEvent.EndingAdapterAfterDisconnectionError,
|
|
724
|
+
Description: _Constants.WidgetLoadCustomErrorString.CloseAdapterAfterDisconnectionErrorString
|
|
725
|
+
});
|
|
726
|
+
}
|
|
727
|
+
}
|
|
679
728
|
}, [state.appStates.chatDisconnectEventReceived]);
|
|
680
729
|
|
|
681
730
|
// if props state gets updates we need to update the renderingMiddlewareProps in the state
|