@microsoft/omnichannel-chat-widget 0.1.0-main.3ac9d65 → 0.1.0-main.3aede09
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/storage/default/defaultCacheManager.js +34 -0
- package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +114 -0
- package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +86 -0
- package/lib/cjs/common/telemetry/TelemetryConstants.js +6 -0
- package/lib/cjs/components/footerstateful/FooterStateful.js +1 -8
- package/lib/cjs/components/livechatwidget/common/authHelper.js +65 -0
- package/lib/cjs/components/livechatwidget/common/createFooter.js +7 -16
- package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +12 -0
- package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +9 -1
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +4 -0
- package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +35 -23
- package/lib/cjs/components/livechatwidget/common/startChat.js +15 -34
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +77 -51
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +16 -2
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
- package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +10 -3
- package/lib/esm/common/storage/default/defaultCacheManager.js +19 -0
- package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +102 -0
- package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +71 -0
- package/lib/esm/common/telemetry/TelemetryConstants.js +6 -0
- package/lib/esm/components/footerstateful/FooterStateful.js +1 -8
- package/lib/esm/components/livechatwidget/common/authHelper.js +50 -0
- package/lib/esm/components/livechatwidget/common/createFooter.js +4 -15
- package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +8 -0
- package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +9 -1
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +4 -0
- package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +36 -25
- package/lib/esm/components/livechatwidget/common/startChat.js +16 -35
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +76 -51
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +14 -2
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
- package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +8 -3
- package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
- package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
- package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +5 -1
- package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
- package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +4 -4
- package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +2 -1
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
- package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
- package/package.json +2 -2
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.registerBroadcastServiceForLocalStorage = exports.defaultCacheManager = void 0;
|
|
7
|
+
|
|
8
|
+
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
9
|
+
|
|
10
|
+
var _utils = require("../../utils");
|
|
11
|
+
|
|
12
|
+
var _defaultClientDataStoreProvider = require("./defaultClientDataStoreProvider");
|
|
13
|
+
|
|
14
|
+
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; }
|
|
15
|
+
|
|
16
|
+
class defaultCacheManager {}
|
|
17
|
+
|
|
18
|
+
exports.defaultCacheManager = defaultCacheManager;
|
|
19
|
+
|
|
20
|
+
_defineProperty(defaultCacheManager, "InternalCache", {});
|
|
21
|
+
|
|
22
|
+
const registerBroadcastServiceForLocalStorage = (orgid, widgetId, widgetInstanceId) => {
|
|
23
|
+
const widgetCacheId = (0, _utils.getWidgetCacheId)(orgid, widgetId, widgetInstanceId);
|
|
24
|
+
|
|
25
|
+
_omnichannelChatComponents.BroadcastService.getMessageByEventName(widgetCacheId).subscribe(msg => {
|
|
26
|
+
try {
|
|
27
|
+
(0, _defaultClientDataStoreProvider.defaultClientDataStoreProvider)().setData(widgetCacheId, JSON.stringify(msg.payload), "localStorage");
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.error("Error in setting data to localstorage", error);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
exports.registerBroadcastServiceForLocalStorage = registerBroadcastServiceForLocalStorage;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.defaultClientDataStoreProvider = void 0;
|
|
7
|
+
|
|
8
|
+
var _defaultInMemoryDataStore = require("./defaultInMemoryDataStore");
|
|
9
|
+
|
|
10
|
+
var _TelemetryHelper = require("../../telemetry/TelemetryHelper");
|
|
11
|
+
|
|
12
|
+
var _TelemetryConstants = require("../../telemetry/TelemetryConstants");
|
|
13
|
+
|
|
14
|
+
const defaultClientDataStoreProvider = () => {
|
|
15
|
+
const isCookieAllowed = () => {
|
|
16
|
+
try {
|
|
17
|
+
localStorage;
|
|
18
|
+
sessionStorage;
|
|
19
|
+
return true;
|
|
20
|
+
} catch (error) {
|
|
21
|
+
console.error("Third party cookie blocked");
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const TtlInMs = 15 * 60 * 1000; // 15 mins
|
|
27
|
+
|
|
28
|
+
const dataStoreProvider = {
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
+
setData: (key, data, type) => {
|
|
31
|
+
if (isCookieAllowed()) {
|
|
32
|
+
try {
|
|
33
|
+
if (key) {
|
|
34
|
+
const now = new Date();
|
|
35
|
+
const item = {
|
|
36
|
+
data: data,
|
|
37
|
+
expiry: now.getTime() + TtlInMs
|
|
38
|
+
};
|
|
39
|
+
const strItem = JSON.stringify(item);
|
|
40
|
+
|
|
41
|
+
if (type === "localStorage") {
|
|
42
|
+
localStorage.setItem(key, strItem);
|
|
43
|
+
} else {
|
|
44
|
+
sessionStorage.setItem(key, strItem);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
} catch (error) {
|
|
48
|
+
_TelemetryHelper.TelemetryHelper.logConfigDataEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
49
|
+
Event: _TelemetryConstants.TelemetryEvent.ClientDataStoreProviderFailed,
|
|
50
|
+
ExceptionDetails: error,
|
|
51
|
+
Description: "Unable to store data in localStorage."
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
const dataToCache = {
|
|
56
|
+
key: key,
|
|
57
|
+
data: data,
|
|
58
|
+
type: type
|
|
59
|
+
};
|
|
60
|
+
parent.postMessage(dataToCache, "*");
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
64
|
+
getData: (key, type) => {
|
|
65
|
+
if (isCookieAllowed()) {
|
|
66
|
+
let item;
|
|
67
|
+
|
|
68
|
+
if (type === "localStorage") {
|
|
69
|
+
item = localStorage.getItem(key);
|
|
70
|
+
} else {
|
|
71
|
+
item = sessionStorage.getItem(key);
|
|
72
|
+
} //Return item if not expired
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
let itemInJson = undefined;
|
|
76
|
+
|
|
77
|
+
if (item !== null) {
|
|
78
|
+
itemInJson = JSON.parse(item);
|
|
79
|
+
const now = new Date(); // compare the expiry time of the item with the current time
|
|
80
|
+
|
|
81
|
+
if (now.getTime() > itemInJson.expiry) {
|
|
82
|
+
// If the item is expired, delete the item from storage
|
|
83
|
+
// and return null
|
|
84
|
+
localStorage.removeItem(key);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return itemInJson.data;
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
// get data from in memory db when cookie is disabled
|
|
92
|
+
return (0, _defaultInMemoryDataStore.inMemoryDataStore)().getData(key);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
96
|
+
removeData: (key, type) => {
|
|
97
|
+
if (isCookieAllowed()) {
|
|
98
|
+
if (key) {
|
|
99
|
+
if (type === "localStorage") {
|
|
100
|
+
return localStorage.removeItem(key);
|
|
101
|
+
} else {
|
|
102
|
+
return sessionStorage.removeItem(key);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
// get data from in memory db when cookie is disabled
|
|
107
|
+
return (0, _defaultInMemoryDataStore.inMemoryDataStore)().removeData(key);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
return dataStoreProvider;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
exports.defaultClientDataStoreProvider = defaultClientDataStoreProvider;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.inMemoryDataStore = exports.defaultInitializeInMemoryDataStore = void 0;
|
|
7
|
+
|
|
8
|
+
var _TelemetryConstants = require("../../telemetry/TelemetryConstants");
|
|
9
|
+
|
|
10
|
+
var _TelemetryHelper = require("../../telemetry/TelemetryHelper");
|
|
11
|
+
|
|
12
|
+
var _defaultCacheManager = require("./defaultCacheManager");
|
|
13
|
+
|
|
14
|
+
const defaultInitializeInMemoryDataStore = widgetId => {
|
|
15
|
+
try {
|
|
16
|
+
localStorage;
|
|
17
|
+
} catch (error) {
|
|
18
|
+
// Register below events when localStorage is not accessible
|
|
19
|
+
// Listening to event raised from client browser
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
window.addEventListener("message", function (e) {
|
|
22
|
+
try {
|
|
23
|
+
if (e.data.key) {
|
|
24
|
+
const browserData = e.data;
|
|
25
|
+
|
|
26
|
+
if (_defaultCacheManager.defaultCacheManager.InternalCache[browserData.key]) {
|
|
27
|
+
delete _defaultCacheManager.defaultCacheManager.InternalCache[browserData.key];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
_defaultCacheManager.defaultCacheManager.InternalCache[browserData.key] = browserData.data;
|
|
31
|
+
}
|
|
32
|
+
} catch (error) {
|
|
33
|
+
_TelemetryHelper.TelemetryHelper.logConfigDataEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
34
|
+
Event: _TelemetryConstants.TelemetryEvent.InMemoryDataStoreFailed,
|
|
35
|
+
ExceptionDetails: error,
|
|
36
|
+
Description: "Unable to register default in-memory cache."
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}); // send cache initialize message to client
|
|
40
|
+
|
|
41
|
+
if (_defaultCacheManager.defaultCacheManager.InternalCache === undefined || {}) {
|
|
42
|
+
parent.postMessage({
|
|
43
|
+
data: "cacheinitialize",
|
|
44
|
+
widgetId: widgetId
|
|
45
|
+
}, "*");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
exports.defaultInitializeInMemoryDataStore = defaultInitializeInMemoryDataStore;
|
|
51
|
+
|
|
52
|
+
const inMemoryDataStore = () => {
|
|
53
|
+
const dataStoreProvider = {
|
|
54
|
+
getData: key => {
|
|
55
|
+
if (_defaultCacheManager.defaultCacheManager.InternalCache && _defaultCacheManager.defaultCacheManager.InternalCache[key]) {
|
|
56
|
+
return _defaultCacheManager.defaultCacheManager.InternalCache[key];
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
|
+
setData: (key, data) => {
|
|
61
|
+
try {
|
|
62
|
+
_defaultCacheManager.defaultCacheManager.InternalCache[key] = data;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
_TelemetryHelper.TelemetryHelper.logConfigDataEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
65
|
+
Event: _TelemetryConstants.TelemetryEvent.InMemoryDataStoreFailed,
|
|
66
|
+
ExceptionDetails: error,
|
|
67
|
+
Description: "Unable to set data in default in-memory cache."
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
removeData: key => {
|
|
72
|
+
try {
|
|
73
|
+
_defaultCacheManager.defaultCacheManager.InternalCache[key] = {};
|
|
74
|
+
} catch (error) {
|
|
75
|
+
_TelemetryHelper.TelemetryHelper.logConfigDataEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
76
|
+
Event: _TelemetryConstants.TelemetryEvent.InMemoryDataStoreFailed,
|
|
77
|
+
ExceptionDetails: error,
|
|
78
|
+
Description: "Unable to remove data from default in-memory cache."
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
return dataStoreProvider;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.inMemoryDataStore = inMemoryDataStore;
|
|
@@ -101,6 +101,8 @@ exports.TelemetryEvent = TelemetryEvent;
|
|
|
101
101
|
TelemetryEvent["PostChatContextCallSucceed"] = "PostChatContextCallSucceed";
|
|
102
102
|
TelemetryEvent["PostChatContextCallFailed"] = "PostChatContextCallFailed";
|
|
103
103
|
TelemetryEvent["ParseAdaptiveCardFailed"] = "ParseAdaptiveCardFailed";
|
|
104
|
+
TelemetryEvent["ClientDataStoreProviderFailed"] = "ClientDataStoreProviderFailed";
|
|
105
|
+
TelemetryEvent["InMemoryDataStoreFailed"] = "InMemoryDataStoreFailed";
|
|
104
106
|
TelemetryEvent["WebChatLoaded"] = "WebChatLoaded";
|
|
105
107
|
TelemetryEvent["LCWChatButtonClicked"] = "LCWChatButtonClicked";
|
|
106
108
|
TelemetryEvent["LCWChatButtonShow"] = "LCWChatButtonShow";
|
|
@@ -171,6 +173,8 @@ exports.TelemetryEvent = TelemetryEvent;
|
|
|
171
173
|
TelemetryEvent["MessageSent"] = "MessageSent";
|
|
172
174
|
TelemetryEvent["MessageReceived"] = "MessageReceived";
|
|
173
175
|
TelemetryEvent["CustomContextReceived"] = "CustomContextReceived";
|
|
176
|
+
TelemetryEvent["NetworkDisconnected"] = "NetworkDisconnected";
|
|
177
|
+
TelemetryEvent["NetworkReconnected"] = "NetworkReconnected";
|
|
174
178
|
})(TelemetryEvent || (exports.TelemetryEvent = TelemetryEvent = {}));
|
|
175
179
|
|
|
176
180
|
class TelemetryConstants {
|
|
@@ -217,6 +221,8 @@ class TelemetryConstants {
|
|
|
217
221
|
case TelemetryEvent.MessageReceived:
|
|
218
222
|
case TelemetryEvent.CustomContextReceived:
|
|
219
223
|
case TelemetryEvent.BrowserUnloadEventStarted:
|
|
224
|
+
case TelemetryEvent.NetworkDisconnected:
|
|
225
|
+
case TelemetryEvent.NetworkReconnected:
|
|
220
226
|
return ScenarioType.ACTIONS;
|
|
221
227
|
|
|
222
228
|
case TelemetryEvent.StartChatSDKCall:
|
|
@@ -110,14 +110,7 @@ const FooterStateful = props => {
|
|
|
110
110
|
isAudioMuted: state.appStates.isAudioMuted
|
|
111
111
|
}
|
|
112
112
|
};
|
|
113
|
-
|
|
114
|
-
const footer = document.getElementById(footerId);
|
|
115
|
-
|
|
116
|
-
if (footer) {
|
|
117
|
-
footer.style.display = hideFooterDisplay ? "none" : "";
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.Footer, {
|
|
113
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !hideFooterDisplay && /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.Footer, {
|
|
121
114
|
componentOverrides: footerProps === null || footerProps === void 0 ? void 0 : footerProps.componentOverrides,
|
|
122
115
|
controlProps: controlProps,
|
|
123
116
|
styleProps: footerProps === null || footerProps === void 0 ? void 0 : footerProps.styleProps
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.removeAuthTokenProvider = exports.handleAuthentication = exports.getAuthClientFunction = void 0;
|
|
7
|
+
|
|
8
|
+
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
9
|
+
|
|
10
|
+
var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
|
|
11
|
+
|
|
12
|
+
var _utils = require("../../../common/utils");
|
|
13
|
+
|
|
14
|
+
const getAuthClientFunction = chatConfig => {
|
|
15
|
+
let authClientFunction = undefined;
|
|
16
|
+
|
|
17
|
+
if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
|
|
18
|
+
var _chatConfig$LiveChatC;
|
|
19
|
+
|
|
20
|
+
authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return authClientFunction;
|
|
24
|
+
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
exports.getAuthClientFunction = getAuthClientFunction;
|
|
28
|
+
|
|
29
|
+
const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
|
|
30
|
+
const authClientFunction = getAuthClientFunction(chatConfig);
|
|
31
|
+
|
|
32
|
+
if (getAuthToken && authClientFunction) {
|
|
33
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
34
|
+
Event: _TelemetryConstants.TelemetryEvent.GetAuthTokenCalled
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const token = await getAuthToken(authClientFunction);
|
|
38
|
+
|
|
39
|
+
if (!(0, _utils.isNullOrEmptyString)(token)) {
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
+
chatSDK.setAuthTokenProvider(async () => {
|
|
42
|
+
return token;
|
|
43
|
+
});
|
|
44
|
+
return true;
|
|
45
|
+
} else {
|
|
46
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
47
|
+
Event: _TelemetryConstants.TelemetryEvent.ReceivedNullOrEmptyToken
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return false;
|
|
55
|
+
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
exports.handleAuthentication = handleAuthentication;
|
|
59
|
+
|
|
60
|
+
const removeAuthTokenProvider = chatSDK => {
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
62
|
+
chatSDK.authenticatedUserToken = null;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
exports.removeAuthTokenProvider = removeAuthTokenProvider;
|
|
@@ -16,26 +16,17 @@ var _componentController = require("../../../controller/componentController");
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
18
18
|
const createFooter = (props, state) => {
|
|
19
|
-
var _props$
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
hideEmailTranscriptButton: true,
|
|
25
|
-
hideAudioNotificationButton: true
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
const footer = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && (0, _componentController.shouldShowFooter)(state) ? (0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/_react.default.createElement(_FooterStateful.default, {
|
|
19
|
+
var _props$controlProps, _props$componentOverr;
|
|
20
|
+
|
|
21
|
+
const hideFooterDisplay = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && (0, _componentController.shouldShowFooter)(state) ? false : true;
|
|
22
|
+
|
|
23
|
+
const footer = (0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/_react.default.createElement(_FooterStateful.default, {
|
|
29
24
|
footerProps: props.footerProps,
|
|
30
25
|
downloadTranscriptProps: props.downloadTranscriptProps,
|
|
31
26
|
audioNotificationProps: props.audioNotificationProps,
|
|
32
|
-
hideFooterDisplay:
|
|
33
|
-
}) : (0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.footer) || /*#__PURE__*/_react.default.createElement(_FooterStateful.default, {
|
|
34
|
-
footerProps: footerPropsHidden,
|
|
35
|
-
downloadTranscriptProps: props.downloadTranscriptProps,
|
|
36
|
-
audioNotificationProps: props.audioNotificationProps,
|
|
37
|
-
hideFooterDisplay: true
|
|
27
|
+
hideFooterDisplay: hideFooterDisplay
|
|
38
28
|
});
|
|
29
|
+
|
|
39
30
|
return footer;
|
|
40
31
|
};
|
|
41
32
|
|
|
@@ -13,6 +13,10 @@ var _NotificationScenarios = require("../../webchatcontainerstateful/webchatcont
|
|
|
13
13
|
|
|
14
14
|
var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
|
|
15
15
|
|
|
16
|
+
var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
|
|
17
|
+
|
|
18
|
+
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
19
|
+
|
|
16
20
|
const isInternetConnected = async () => {
|
|
17
21
|
try {
|
|
18
22
|
const response = await fetch(_Constants.Constants.internetConnectionTestUrl);
|
|
@@ -28,8 +32,16 @@ const createInternetConnectionChangeHandler = async () => {
|
|
|
28
32
|
const connected = await isInternetConnected();
|
|
29
33
|
|
|
30
34
|
if (!connected) {
|
|
35
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.WARN, {
|
|
36
|
+
Event: _TelemetryConstants.TelemetryEvent.NetworkDisconnected
|
|
37
|
+
});
|
|
38
|
+
|
|
31
39
|
_NotificationHandler.NotificationHandler.notifyError(_NotificationScenarios.NotificationScenarios.InternetConnection, _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_NO_INTERNET_CONNECTION);
|
|
32
40
|
} else {
|
|
41
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.WARN, {
|
|
42
|
+
Event: _TelemetryConstants.TelemetryEvent.NetworkReconnected
|
|
43
|
+
});
|
|
44
|
+
|
|
33
45
|
_NotificationHandler.NotificationHandler.notifySuccess(_NotificationScenarios.NotificationScenarios.InternetConnection, _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_INTERNET_BACK_ONLINE);
|
|
34
46
|
}
|
|
35
47
|
}; // Checking connection status on online & offline events due to possible false positives
|
|
@@ -339,7 +339,8 @@ const dummyDefaultProps = {
|
|
|
339
339
|
hideChatTitle: false,
|
|
340
340
|
hideNotificationBubble: true,
|
|
341
341
|
unreadMessageString: "new messages",
|
|
342
|
-
largeUnreadMessageString: "99+"
|
|
342
|
+
largeUnreadMessageString: "99+",
|
|
343
|
+
ariaLabelUnreadMessageString: "you have new messages"
|
|
343
344
|
},
|
|
344
345
|
styleProps: {
|
|
345
346
|
generalStyleProps: {
|
|
@@ -1675,6 +1676,9 @@ const dummyDefaultProps = {
|
|
|
1675
1676
|
},
|
|
1676
1677
|
attachmentSizeStyles: {
|
|
1677
1678
|
display: "none"
|
|
1679
|
+
},
|
|
1680
|
+
receivedMessageAnchorStyles: {
|
|
1681
|
+
color: "white"
|
|
1678
1682
|
}
|
|
1679
1683
|
},
|
|
1680
1684
|
localizedTexts: {
|
|
@@ -1702,6 +1706,10 @@ const dummyDefaultProps = {
|
|
|
1702
1706
|
botMagicCode: {
|
|
1703
1707
|
disabled: false,
|
|
1704
1708
|
fwdUrl: ""
|
|
1709
|
+
},
|
|
1710
|
+
adaptiveCardStyles: {
|
|
1711
|
+
background: "white",
|
|
1712
|
+
color: "black"
|
|
1705
1713
|
}
|
|
1706
1714
|
},
|
|
1707
1715
|
telemetryConfig: undefined,
|
|
@@ -125,6 +125,10 @@ const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatStyles)
|
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
127
|
} else {
|
|
128
|
+
dispatch({
|
|
129
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
130
|
+
payload: _ConversationState.ConversationState.InActive
|
|
131
|
+
});
|
|
128
132
|
dispatch({
|
|
129
133
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_ENDED_BY_AGENT,
|
|
130
134
|
payload: true
|
|
@@ -17,24 +17,34 @@ var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidget
|
|
|
17
17
|
|
|
18
18
|
var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
|
|
19
19
|
|
|
20
|
+
var _authHelper = require("./authHelper");
|
|
21
|
+
|
|
20
22
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
-
const getChatReconnectContext = async (chatSDK, reconnectId) => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
23
|
+
const getChatReconnectContext = async (chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId) => {
|
|
24
|
+
if (isReconnectEnabled) {
|
|
25
|
+
try {
|
|
26
|
+
if (reconnectId) {
|
|
27
|
+
const chatReconnectOptionalParams = {
|
|
28
|
+
reconnectId: reconnectId
|
|
29
|
+
};
|
|
30
|
+
return await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext(chatReconnectOptionalParams));
|
|
31
|
+
} else {
|
|
32
|
+
// set auth token to chat sdk to get reconnectId for auth chat
|
|
33
|
+
await (0, _authHelper.handleAuthentication)(chatSDK, chatConfig, getAuthToken);
|
|
34
|
+
const reconnectChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext()); // remove auth token after reconnectId is fetched
|
|
35
|
+
// this will be reset later at start chat
|
|
36
|
+
|
|
37
|
+
(0, _authHelper.removeAuthTokenProvider)(chatSDK);
|
|
38
|
+
return reconnectChatContext;
|
|
36
39
|
}
|
|
37
|
-
})
|
|
40
|
+
} catch (ex) {
|
|
41
|
+
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
42
|
+
Event: _TelemetryConstants.TelemetryEvent.GetChatReconnectContextSDKCallFailed,
|
|
43
|
+
ExceptionDetails: {
|
|
44
|
+
exception: ex
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
38
48
|
}
|
|
39
49
|
|
|
40
50
|
return null;
|
|
@@ -58,7 +68,9 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
|
|
|
58
68
|
|
|
59
69
|
/* && !isLoadWithState() */
|
|
60
70
|
) {
|
|
61
|
-
|
|
71
|
+
var _props$reconnectChatP2;
|
|
72
|
+
|
|
73
|
+
const previousActiveSessionResponse = await getChatReconnectContext(chatSDK, props.chatConfig, props.getAuthToken, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.isReconnectEnabled);
|
|
62
74
|
|
|
63
75
|
if (previousActiveSessionResponse && previousActiveSessionResponse.reconnectId) {
|
|
64
76
|
return previousActiveSessionResponse.reconnectId;
|
|
@@ -71,8 +83,8 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
|
|
|
71
83
|
|
|
72
84
|
exports.getReconnectIdForAuthenticatedChat = getReconnectIdForAuthenticatedChat;
|
|
73
85
|
|
|
74
|
-
const handleUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
|
|
75
|
-
const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
|
|
86
|
+
const handleUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isReconnectEnabled, reconnectId, initStartChat, redirectInSameWindow) => {
|
|
87
|
+
const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId);
|
|
76
88
|
|
|
77
89
|
if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
|
|
78
90
|
await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
|
|
@@ -84,8 +96,8 @@ const handleUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthTo
|
|
|
84
96
|
|
|
85
97
|
exports.handleUnauthenticatedReconnectChat = handleUnauthenticatedReconnectChat;
|
|
86
98
|
|
|
87
|
-
const startUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
|
|
88
|
-
const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
|
|
99
|
+
const startUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isReconnectEnabled, reconnectId, initStartChat) => {
|
|
100
|
+
const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId);
|
|
89
101
|
|
|
90
102
|
if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
|
|
91
103
|
await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
|
|
@@ -166,8 +178,8 @@ const startNewChatEmptyRedirectionUrl = async (chatSDK, chatConfig, getAuthToken
|
|
|
166
178
|
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
167
179
|
|
|
168
180
|
|
|
169
|
-
const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
|
|
170
|
-
const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
|
|
181
|
+
const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, isReconnectEnabled, reconnectId, redirectInSameWindow) => {
|
|
182
|
+
const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId);
|
|
171
183
|
|
|
172
184
|
if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
|
|
173
185
|
await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
|
|
@@ -37,6 +37,8 @@ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components
|
|
|
37
37
|
|
|
38
38
|
var _ActivityStreamHandler = require("./ActivityStreamHandler");
|
|
39
39
|
|
|
40
|
+
var _authHelper = require("./authHelper");
|
|
41
|
+
|
|
40
42
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
43
|
let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
42
44
|
|
|
@@ -55,9 +57,9 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
|
|
|
55
57
|
|
|
56
58
|
|
|
57
59
|
if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
|
|
58
|
-
var _props$reconnectChatP2, _props$reconnectChatP3;
|
|
60
|
+
var _props$reconnectChatP2, _props$reconnectChatP3, _props$reconnectChatP4;
|
|
59
61
|
|
|
60
|
-
await (0, _reconnectChatHelper.handleRedirectUnauthenticatedReconnectChat)(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.
|
|
62
|
+
await (0, _reconnectChatHelper.handleRedirectUnauthenticatedReconnectChat)(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.isReconnectEnabled, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.reconnectId, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.redirectInSameWindow);
|
|
61
63
|
return;
|
|
62
64
|
} // Getting reconnectId for authenticated chat
|
|
63
65
|
|
|
@@ -115,39 +117,20 @@ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, disp
|
|
|
115
117
|
|
|
116
118
|
exports.setPreChatAndInitiateChat = setPreChatAndInitiateChat;
|
|
117
119
|
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
Event: _TelemetryConstants.TelemetryEvent.GetAuthTokenCalled
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
let authClientFunction = undefined;
|
|
125
|
-
|
|
126
|
-
if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
|
|
127
|
-
var _chatConfig$LiveChatC;
|
|
120
|
+
const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
|
|
121
|
+
try {
|
|
122
|
+
var _newAdapter$activity$, _TelemetryTimers$Widg;
|
|
128
123
|
|
|
129
|
-
|
|
130
|
-
}
|
|
124
|
+
const authClientFunction = (0, _authHelper.getAuthClientFunction)(chatConfig);
|
|
131
125
|
|
|
132
|
-
|
|
126
|
+
if (getAuthToken && authClientFunction) {
|
|
127
|
+
// set auth token to chat sdk before start chat
|
|
128
|
+
const authSuccess = await (0, _authHelper.handleAuthentication)(chatSDK, chatConfig, getAuthToken);
|
|
133
129
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
return token;
|
|
138
|
-
});
|
|
139
|
-
} else {
|
|
140
|
-
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
141
|
-
Event: _TelemetryConstants.TelemetryEvent.ReceivedNullOrEmptyToken
|
|
142
|
-
});
|
|
130
|
+
if (!authSuccess) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
143
133
|
}
|
|
144
|
-
}
|
|
145
|
-
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
|
|
149
|
-
try {
|
|
150
|
-
var _newAdapter$activity$, _TelemetryTimers$Widg;
|
|
151
134
|
|
|
152
135
|
let isStartChatSuccessful = false; //Check if chat retrieved from cache
|
|
153
136
|
|
|
@@ -173,9 +156,7 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
|
|
|
173
156
|
|
|
174
157
|
|
|
175
158
|
setCustomContextParams(chatSDK);
|
|
176
|
-
optionalParams = Object.assign({}, params, optionalParams);
|
|
177
|
-
|
|
178
|
-
await handleAuthentication(chatSDK, chatConfig, getAuthToken);
|
|
159
|
+
optionalParams = Object.assign({}, params, optionalParams);
|
|
179
160
|
await chatSDK.startChat(optionalParams);
|
|
180
161
|
isStartChatSuccessful = true;
|
|
181
162
|
} catch (error) {
|