@microsoft/omnichannel-chat-widget 1.7.8-main.29ce174 → 1.7.8-main.50111af
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 +57 -18
- package/lib/cjs/common/KeyCodes.js +6 -1
- package/lib/cjs/common/contextDataStore/DataStoreManager.js +6 -1
- package/lib/cjs/common/facades/FacadeChatSDK.js +385 -292
- package/lib/cjs/common/storage/default/defaultCacheManager.js +6 -3
- package/lib/cjs/common/telemetry/TelemetryConstants.js +137 -116
- package/lib/cjs/common/telemetry/TelemetryHelper.js +219 -181
- package/lib/cjs/common/telemetry/TelemetryManager.js +9 -2
- package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +4 -5
- package/lib/cjs/components/headerstateful/HeaderStateful.js +3 -5
- package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +32 -19
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +71 -56
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +17 -8
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +65 -52
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +31 -18
- package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +14 -6
- package/lib/cjs/components/livechatwidget/common/Deferred.js +14 -6
- package/lib/cjs/components/livechatwidget/common/chatDisconnectHelper.js +3 -1
- package/lib/cjs/components/livechatwidget/common/endChat.js +4 -18
- package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +0 -5
- package/lib/cjs/components/livechatwidget/common/startChat.js +2 -23
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +3 -3
- package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +6 -4
- package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +7 -6
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +4 -3
- package/lib/cjs/components/webchatcontainerstateful/common/DemoChatAdapter.js +88 -65
- package/lib/cjs/components/webchatcontainerstateful/common/DemoChatSDK.js +26 -7
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +49 -26
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatSDK.js +57 -35
- package/lib/cjs/components/webchatcontainerstateful/common/mockadapter.js +62 -52
- package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +95 -61
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +6 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +6 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/markdownrenderers/HyperlinkTextOverrideRenderer.js +53 -39
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +4 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +88 -60
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +18 -6
- package/lib/cjs/firstresponselatency/Constants.js +13 -0
- package/lib/cjs/firstresponselatency/FirstMessageTrackerFromBot.js +118 -0
- package/lib/cjs/firstresponselatency/FirstResponseLatencyTracker.js +201 -0
- package/lib/cjs/firstresponselatency/util.js +98 -0
- package/lib/cjs/plugins/createChatTranscript.js +88 -58
- package/lib/cjs/plugins/newMessageEventHandler.js +102 -88
- package/lib/esm/common/Constants.js +57 -18
- package/lib/esm/common/KeyCodes.js +6 -1
- package/lib/esm/common/contextDataStore/DataStoreManager.js +6 -1
- package/lib/esm/common/facades/FacadeChatSDK.js +385 -292
- package/lib/esm/common/storage/default/defaultCacheManager.js +6 -1
- package/lib/esm/common/telemetry/TelemetryConstants.js +137 -116
- package/lib/esm/common/telemetry/TelemetryHelper.js +219 -181
- package/lib/esm/common/telemetry/TelemetryManager.js +9 -2
- package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +4 -5
- package/lib/esm/components/headerstateful/HeaderStateful.js +3 -5
- package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +32 -19
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +71 -56
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +17 -8
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +65 -52
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +31 -18
- package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +14 -6
- package/lib/esm/components/livechatwidget/common/Deferred.js +14 -6
- package/lib/esm/components/livechatwidget/common/chatDisconnectHelper.js +3 -1
- package/lib/esm/components/livechatwidget/common/endChat.js +4 -18
- package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +1 -6
- package/lib/esm/components/livechatwidget/common/startChat.js +3 -24
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +3 -3
- package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +6 -4
- package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +7 -6
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +4 -3
- package/lib/esm/components/webchatcontainerstateful/common/DemoChatAdapter.js +88 -65
- package/lib/esm/components/webchatcontainerstateful/common/DemoChatSDK.js +26 -7
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +49 -26
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatSDK.js +57 -35
- package/lib/esm/components/webchatcontainerstateful/common/mockadapter.js +63 -52
- package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +95 -61
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +6 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +6 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/markdownrenderers/HyperlinkTextOverrideRenderer.js +53 -39
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +4 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +88 -60
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +18 -6
- package/lib/esm/firstresponselatency/Constants.js +6 -0
- package/lib/esm/firstresponselatency/FirstMessageTrackerFromBot.js +112 -0
- package/lib/esm/firstresponselatency/FirstResponseLatencyTracker.js +194 -0
- package/lib/esm/firstresponselatency/util.js +87 -0
- package/lib/esm/plugins/createChatTranscript.js +88 -58
- package/lib/esm/plugins/newMessageEventHandler.js +100 -86
- package/lib/types/common/facades/FacadeChatSDK.d.ts +1 -0
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +8 -1
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatProps.d.ts +2 -2
- package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -1
- package/lib/types/firstresponselatency/Constants.d.ts +30 -0
- package/lib/types/firstresponselatency/FirstMessageTrackerFromBot.d.ts +1 -0
- package/lib/types/firstresponselatency/FirstResponseLatencyTracker.d.ts +22 -0
- package/lib/types/firstresponselatency/util.d.ts +7 -0
- package/package.json +18 -6
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
2
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
3
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
1
4
|
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; }
|
|
2
5
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
6
|
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); }
|
|
@@ -6,21 +9,9 @@ import { getAuthClientFunction, handleAuthentication } from "../../components/li
|
|
|
6
9
|
import { BroadcastService } from "@microsoft/omnichannel-chat-components";
|
|
7
10
|
import { TelemetryHelper } from "../telemetry/TelemetryHelper";
|
|
8
11
|
import { isNullOrEmptyString } from "../utils";
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
getChatSDK() {
|
|
14
|
-
return this.chatSDK;
|
|
15
|
-
}
|
|
16
|
-
destroy() {
|
|
17
|
-
this.token = null;
|
|
18
|
-
this.expiration = 0;
|
|
19
|
-
}
|
|
20
|
-
isTokenSet() {
|
|
21
|
-
return !isNullOrEmptyString(this.token);
|
|
22
|
-
}
|
|
23
|
-
constructor(input, disableReauthentication) {
|
|
12
|
+
export let FacadeChatSDK = /*#__PURE__*/function () {
|
|
13
|
+
function FacadeChatSDK(input, disableReauthentication) {
|
|
14
|
+
_classCallCheck(this, FacadeChatSDK);
|
|
24
15
|
_defineProperty(this, "chatSDK", void 0);
|
|
25
16
|
_defineProperty(this, "chatConfig", void 0);
|
|
26
17
|
_defineProperty(this, "token", "");
|
|
@@ -38,310 +29,412 @@ export class FacadeChatSDK {
|
|
|
38
29
|
}
|
|
39
30
|
|
|
40
31
|
//set default expiration to zero, for undefined or missed exp in jwt
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
32
|
+
_createClass(FacadeChatSDK, [{
|
|
33
|
+
key: "isSDKMocked",
|
|
34
|
+
value: function isSDKMocked() {
|
|
35
|
+
return this.sdkMocked;
|
|
36
|
+
}
|
|
37
|
+
}, {
|
|
38
|
+
key: "getChatSDK",
|
|
39
|
+
value: function getChatSDK() {
|
|
40
|
+
return this.chatSDK;
|
|
41
|
+
}
|
|
42
|
+
}, {
|
|
43
|
+
key: "destroy",
|
|
44
|
+
value: function destroy() {
|
|
45
|
+
this.token = null;
|
|
46
|
+
this.expiration = 0;
|
|
47
|
+
}
|
|
48
|
+
}, {
|
|
49
|
+
key: "isTokenSet",
|
|
50
|
+
value: function isTokenSet() {
|
|
51
|
+
return !isNullOrEmptyString(this.token);
|
|
54
52
|
}
|
|
53
|
+
}, {
|
|
54
|
+
key: "convertExpiration",
|
|
55
|
+
value: function convertExpiration() {
|
|
56
|
+
let expiration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
57
|
+
// Converting expiration to seconds, if contains decimals or is identified as milliseconds
|
|
58
|
+
if (expiration.toString().length === 13) {
|
|
59
|
+
return Math.floor(expiration / 1000);
|
|
60
|
+
}
|
|
61
|
+
// If the epoch value is already in seconds, return it as is
|
|
62
|
+
return expiration;
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
key: "isTokenExpired",
|
|
66
|
+
value: function isTokenExpired() {
|
|
67
|
+
// if expiration is 0, token is not going to be validated ( this is to cover the case of token with no expiration)
|
|
68
|
+
if (this.expiration === 0) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
55
71
|
|
|
56
|
-
|
|
57
|
-
|
|
72
|
+
// obtain current time in seconds
|
|
73
|
+
const now = Math.floor(Date.now() / 1000);
|
|
58
74
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
75
|
+
// compare expiration time with current time
|
|
76
|
+
if (now > this.expiration) {
|
|
77
|
+
console.error("Token is expired", now, this.expiration, now > this.expiration);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
63
81
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
82
|
+
}, {
|
|
83
|
+
key: "enforceBase64Encoding",
|
|
84
|
+
value: function enforceBase64Encoding(payload) {
|
|
85
|
+
//base64url when present, switches the "-" and "_" characters with "+" and "/"
|
|
86
|
+
const base64Payload = payload.replace(/-/g, "+").replace(/_/g, "/");
|
|
87
|
+
// since base64 encoding requires padding, we need to add padding to the payload
|
|
88
|
+
return base64Payload.padEnd(base64Payload.length + (4 - base64Payload.length % 4) % 4, "=");
|
|
89
|
+
}
|
|
90
|
+
}, {
|
|
91
|
+
key: "extractExpFromToken",
|
|
92
|
+
value: function extractExpFromToken(token) {
|
|
93
|
+
const tokenParts = token.split(".");
|
|
94
|
+
const last3digits = token.slice(-3);
|
|
75
95
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
try {
|
|
89
|
-
const payload = this.enforceBase64Encoding(tokenParts[1]);
|
|
90
|
-
// decode payload
|
|
91
|
-
const decodedPayload = atob(payload);
|
|
92
|
-
const jsonPayload = JSON.parse(decodedPayload);
|
|
93
|
-
// check if exp is present in payload
|
|
94
|
-
if (jsonPayload) {
|
|
95
|
-
if (jsonPayload.exp) {
|
|
96
|
-
return jsonPayload.exp;
|
|
97
|
-
}
|
|
98
|
-
return 0;
|
|
96
|
+
// token must have 3 parts as JWT format
|
|
97
|
+
if (tokenParts.length !== 3) {
|
|
98
|
+
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.ERROR, {
|
|
99
|
+
Event: TelemetryEvent.NewTokenFailed,
|
|
100
|
+
Description: "Invalid token format",
|
|
101
|
+
ExceptionDetails: {
|
|
102
|
+
message: "Invalid token format, must be in JWT format",
|
|
103
|
+
token: last3digits
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
throw new Error("Invalid token format, must be in JWT format");
|
|
99
107
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.ERROR, {
|
|
112
|
-
Event: TelemetryEvent.NewTokenFailed,
|
|
113
|
-
Description: "Failed to decode token",
|
|
114
|
-
ExceptionDetails: {
|
|
115
|
-
message: "Failed to decode token",
|
|
116
|
-
token: last3digits
|
|
108
|
+
try {
|
|
109
|
+
const payload = this.enforceBase64Encoding(tokenParts[1]);
|
|
110
|
+
// decode payload
|
|
111
|
+
const decodedPayload = atob(payload);
|
|
112
|
+
const jsonPayload = JSON.parse(decodedPayload);
|
|
113
|
+
// check if exp is present in payload
|
|
114
|
+
if (jsonPayload) {
|
|
115
|
+
if (jsonPayload.exp) {
|
|
116
|
+
return jsonPayload.exp;
|
|
117
|
+
}
|
|
118
|
+
return 0;
|
|
117
119
|
}
|
|
118
|
-
});
|
|
119
|
-
throw new Error("Failed to decode token");
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
async setToken(token) {
|
|
123
|
-
// token must be not null, and must be new
|
|
124
|
-
if (!isNullOrEmptyString(token) && token !== this.token) {
|
|
125
|
-
const last3digits = token.slice(-3);
|
|
126
|
-
const instant = Math.floor(Date.now() / 1000);
|
|
127
|
-
this.token = token;
|
|
128
|
-
// calculate expiration time
|
|
129
|
-
this.expiration = this.convertExpiration(this.extractExpFromToken(token) || 0);
|
|
130
|
-
// this is a control , in case the getAuthToken function returns same token
|
|
131
|
-
if (this.expiration > 0 && this.expiration < instant) {
|
|
132
120
|
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.ERROR, {
|
|
133
|
-
Event: TelemetryEvent.
|
|
134
|
-
Description: "
|
|
121
|
+
Event: TelemetryEvent.NewTokenFailed,
|
|
122
|
+
Description: "Invalid token payload",
|
|
135
123
|
ExceptionDetails: {
|
|
136
|
-
"
|
|
137
|
-
|
|
138
|
-
"Token": last3digits
|
|
124
|
+
message: "Token payload is not valid JSON",
|
|
125
|
+
token: last3digits
|
|
139
126
|
}
|
|
140
127
|
});
|
|
141
|
-
throw new Error(
|
|
128
|
+
throw new Error("Invalid token payload, payload is not valid JSON");
|
|
129
|
+
} catch (e) {
|
|
130
|
+
console.error("Failed to decode token", e);
|
|
131
|
+
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.ERROR, {
|
|
132
|
+
Event: TelemetryEvent.NewTokenFailed,
|
|
133
|
+
Description: "Failed to decode token",
|
|
134
|
+
ExceptionDetails: {
|
|
135
|
+
message: "Failed to decode token",
|
|
136
|
+
token: last3digits
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
throw new Error("Failed to decode token");
|
|
142
140
|
}
|
|
143
141
|
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if (this.isTokenSet() && !this.isTokenExpired()) {
|
|
169
|
-
return {
|
|
170
|
-
result: true,
|
|
171
|
-
message: "Token is valid"
|
|
172
|
-
};
|
|
142
|
+
}, {
|
|
143
|
+
key: "setToken",
|
|
144
|
+
value: async function setToken(token) {
|
|
145
|
+
// token must be not null, and must be new
|
|
146
|
+
if (!isNullOrEmptyString(token) && token !== this.token) {
|
|
147
|
+
const last3digits = token.slice(-3);
|
|
148
|
+
const instant = Math.floor(Date.now() / 1000);
|
|
149
|
+
this.token = token;
|
|
150
|
+
// calculate expiration time
|
|
151
|
+
this.expiration = this.convertExpiration(this.extractExpFromToken(token) || 0);
|
|
152
|
+
// this is a control , in case the getAuthToken function returns same token
|
|
153
|
+
if (this.expiration > 0 && this.expiration < instant) {
|
|
154
|
+
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.ERROR, {
|
|
155
|
+
Event: TelemetryEvent.NewTokenExpired,
|
|
156
|
+
Description: "New token is already expired",
|
|
157
|
+
ExceptionDetails: {
|
|
158
|
+
"Instant": instant,
|
|
159
|
+
"Expiration": this.expiration,
|
|
160
|
+
"Token": last3digits
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
throw new Error(`New token is already expired, with epoch time ${this.expiration} , last 3 digits of token: ${last3digits}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
173
166
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
};
|
|
167
|
+
}, {
|
|
168
|
+
key: "corroborateTokenIsSet",
|
|
169
|
+
value: async function corroborateTokenIsSet(chatSDK) {
|
|
170
|
+
var _chatSDK$chatSDKConfi;
|
|
171
|
+
// if getAuthToken is not set, it's because handleAuthentication hasnt being called
|
|
172
|
+
// so we need to call it
|
|
173
|
+
if (this.isAuthenticated && (chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$chatSDKConfi = chatSDK.chatSDKConfig) === null || _chatSDK$chatSDKConfi === void 0 ? void 0 : _chatSDK$chatSDKConfi.getAuthToken) === undefined) {
|
|
174
|
+
handleAuthentication(this.chatSDK, this.chatConfig, this.getAuthToken);
|
|
175
|
+
}
|
|
184
176
|
}
|
|
177
|
+
}, {
|
|
178
|
+
key: "tokenRing",
|
|
179
|
+
value: async function tokenRing() {
|
|
180
|
+
var _this$chatSDK$chatSDK;
|
|
181
|
+
if (this.disableReauthentication === true) {
|
|
182
|
+
// Since we are not validating the token anymore, we at least need to check if the token is set
|
|
183
|
+
// no need to validate anything other that the token is set
|
|
184
|
+
await this.corroborateTokenIsSet(this.chatSDK);
|
|
185
|
+
// facade feature is disabled, so we are bypassing the re authentication and let it fail.
|
|
186
|
+
return {
|
|
187
|
+
result: true,
|
|
188
|
+
message: "Facade is disabled"
|
|
189
|
+
};
|
|
190
|
+
}
|
|
185
191
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
this.expiration = 0;
|
|
189
|
-
try {
|
|
190
|
-
const ring = await handleAuthentication(this.chatSDK, this.chatConfig, this.getAuthToken);
|
|
191
|
-
if (ring.result === true && ring.token) {
|
|
192
|
-
await this.setToken(ring.token);
|
|
193
|
-
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.INFO, {
|
|
194
|
-
Event: TelemetryEvent.NewTokenSuccess,
|
|
195
|
-
Description: "New Token obtained",
|
|
196
|
-
Data: {
|
|
197
|
-
"Token_Expiration": this.expiration
|
|
198
|
-
}
|
|
199
|
-
});
|
|
192
|
+
// this is needed for storybooks, specifically for reconnect pane which requires authentication bypass
|
|
193
|
+
if (this.sdkMocked === true) {
|
|
200
194
|
return {
|
|
201
195
|
result: true,
|
|
202
|
-
message: "
|
|
196
|
+
message: "Authentication not needed"
|
|
203
197
|
};
|
|
204
|
-
}
|
|
205
|
-
|
|
198
|
+
}
|
|
199
|
+
if (!this.isAuthenticated) {
|
|
200
|
+
return {
|
|
201
|
+
result: true,
|
|
202
|
+
message: "Authentication not needed"
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (this.isTokenSet() && !this.isTokenExpired()) {
|
|
206
|
+
return {
|
|
207
|
+
result: true,
|
|
208
|
+
message: "Token is valid"
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
if (this.getAuthToken === undefined && ((_this$chatSDK$chatSDK = this.chatSDK.chatSDKConfig) === null || _this$chatSDK$chatSDK === void 0 ? void 0 : _this$chatSDK$chatSDK.getAuthToken) === undefined) {
|
|
206
212
|
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.ERROR, {
|
|
207
213
|
Event: TelemetryEvent.NewTokenFailed,
|
|
208
|
-
Description:
|
|
209
|
-
ExceptionDetails:
|
|
214
|
+
Description: "GetAuthToken function is not present",
|
|
215
|
+
ExceptionDetails: "Missing function : " + getAuthClientFunction(this.chatConfig)
|
|
210
216
|
});
|
|
211
217
|
return {
|
|
212
218
|
result: false,
|
|
213
|
-
message:
|
|
219
|
+
message: "GetAuthToken function is not present"
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// if token is not set, or token is already expired , then go to grab a token
|
|
224
|
+
this.token = "";
|
|
225
|
+
this.expiration = 0;
|
|
226
|
+
try {
|
|
227
|
+
const ring = await handleAuthentication(this.chatSDK, this.chatConfig, this.getAuthToken);
|
|
228
|
+
if ((ring === null || ring === void 0 ? void 0 : ring.result) === true && ring !== null && ring !== void 0 && ring.token) {
|
|
229
|
+
await this.setToken(ring.token);
|
|
230
|
+
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.INFO, {
|
|
231
|
+
Event: TelemetryEvent.NewTokenSuccess,
|
|
232
|
+
Description: "New Token obtained",
|
|
233
|
+
Data: {
|
|
234
|
+
"Token_Expiration": this.expiration
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
return {
|
|
238
|
+
result: true,
|
|
239
|
+
message: "New Token obtained"
|
|
240
|
+
};
|
|
241
|
+
} else {
|
|
242
|
+
var _ring$error, _ring$error2;
|
|
243
|
+
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.ERROR, {
|
|
244
|
+
Event: TelemetryEvent.NewTokenFailed,
|
|
245
|
+
Description: ring === null || ring === void 0 ? void 0 : (_ring$error = ring.error) === null || _ring$error === void 0 ? void 0 : _ring$error.message,
|
|
246
|
+
ExceptionDetails: ring === null || ring === void 0 ? void 0 : ring.error
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
result: false,
|
|
250
|
+
message: (ring === null || ring === void 0 ? void 0 : (_ring$error2 = ring.error) === null || _ring$error2 === void 0 ? void 0 : _ring$error2.message) || "Failed to get token"
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
} catch (e) {
|
|
254
|
+
console.error("Unexpected error while getting token", e);
|
|
255
|
+
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.ERROR, {
|
|
256
|
+
Event: TelemetryEvent.NewTokenFailed,
|
|
257
|
+
Description: "Unexpected error while getting token",
|
|
258
|
+
ExceptionDetails: e
|
|
259
|
+
});
|
|
260
|
+
return {
|
|
261
|
+
result: false,
|
|
262
|
+
message: "Unexpected error while getting token"
|
|
214
263
|
};
|
|
215
264
|
}
|
|
216
|
-
} catch (e) {
|
|
217
|
-
console.error("Unexpected error while getting token", e);
|
|
218
|
-
TelemetryHelper.logFacadeChatSDKEvent(LogLevel.ERROR, {
|
|
219
|
-
Event: TelemetryEvent.NewTokenFailed,
|
|
220
|
-
Description: "Unexpected error while getting token",
|
|
221
|
-
ExceptionDetails: e
|
|
222
|
-
});
|
|
223
|
-
return {
|
|
224
|
-
result: false,
|
|
225
|
-
message: "Unexpected error while getting token"
|
|
226
|
-
};
|
|
227
265
|
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const executionErrorMessage = `Authentication failed: Process to get a token failed for ${functionName}, ${pingResponse.message}`;
|
|
235
|
-
//telemetry is already logged in tokenRing, so no need to log again, just return the error and communicate to the console
|
|
236
|
-
console.error(executionErrorMessage);
|
|
237
|
-
BroadcastService.postMessage({
|
|
238
|
-
eventName: BroadcastEvent.OnWidgetError,
|
|
239
|
-
payload: {
|
|
240
|
-
errorMessage: executionErrorMessage
|
|
266
|
+
}, {
|
|
267
|
+
key: "validateAndExecuteCall",
|
|
268
|
+
value: async function validateAndExecuteCall(functionName, fn) {
|
|
269
|
+
const pingResponse = await this.tokenRing();
|
|
270
|
+
if (pingResponse.result === true) {
|
|
271
|
+
return fn();
|
|
241
272
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
273
|
+
const executionErrorMessage = `Authentication failed: Process to get a token failed for ${functionName}, ${pingResponse.message}`;
|
|
274
|
+
//telemetry is already logged in tokenRing, so no need to log again, just return the error and communicate to the console
|
|
275
|
+
console.error(executionErrorMessage);
|
|
276
|
+
BroadcastService.postMessage({
|
|
277
|
+
eventName: BroadcastEvent.OnWidgetError,
|
|
278
|
+
payload: {
|
|
279
|
+
errorMessage: executionErrorMessage
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
throw new Error(executionErrorMessage);
|
|
283
|
+
}
|
|
284
|
+
}, {
|
|
285
|
+
key: "initialize",
|
|
286
|
+
value: async function initialize() {
|
|
287
|
+
let optionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
288
|
+
return this.validateAndExecuteCall("initialize", () => this.chatSDK.initialize(optionalParams));
|
|
289
|
+
}
|
|
290
|
+
}, {
|
|
291
|
+
key: "getChatReconnectContext",
|
|
292
|
+
value: async function getChatReconnectContext() {
|
|
293
|
+
let optionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
294
|
+
return this.validateAndExecuteCall("getChatReconnectContext", () => this.chatSDK.getChatReconnectContext(optionalParams));
|
|
295
|
+
}
|
|
296
|
+
}, {
|
|
297
|
+
key: "startChat",
|
|
298
|
+
value: async function startChat() {
|
|
299
|
+
let optionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
300
|
+
return this.validateAndExecuteCall("startChat", () => this.chatSDK.startChat(optionalParams));
|
|
301
|
+
}
|
|
302
|
+
}, {
|
|
303
|
+
key: "endChat",
|
|
304
|
+
value: async function endChat() {
|
|
305
|
+
let optionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
306
|
+
return this.validateAndExecuteCall("endChat", () => this.chatSDK.endChat(optionalParams));
|
|
307
|
+
}
|
|
308
|
+
}, {
|
|
309
|
+
key: "getCurrentLiveChatContext",
|
|
310
|
+
value: async function getCurrentLiveChatContext() {
|
|
311
|
+
return this.validateAndExecuteCall("getCurrentLiveChatContext", () => this.chatSDK.getCurrentLiveChatContext());
|
|
312
|
+
}
|
|
313
|
+
}, {
|
|
314
|
+
key: "getConversationDetails",
|
|
315
|
+
value: async function getConversationDetails() {
|
|
316
|
+
let optionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
317
|
+
return this.validateAndExecuteCall("getConversationDetails", () => this.chatSDK.getConversationDetails(optionalParams));
|
|
318
|
+
}
|
|
268
319
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
320
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
321
|
+
}, {
|
|
322
|
+
key: "getPreChatSurvey",
|
|
323
|
+
value: async function getPreChatSurvey() {
|
|
324
|
+
let parse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
325
|
+
//prechat survey is obtained from config object, which is not required to be authenticated
|
|
326
|
+
// removing the tokenRing function from this call for backward compatibility
|
|
327
|
+
// TODO :: wrap this function around authentication
|
|
328
|
+
return this.chatSDK.getPreChatSurvey(parse);
|
|
329
|
+
}
|
|
330
|
+
}, {
|
|
331
|
+
key: "getLiveChatConfig",
|
|
332
|
+
value: async function getLiveChatConfig(optionalParams) {
|
|
333
|
+
return this.validateAndExecuteCall("getLiveChatConfig", () => this.chatSDK.getLiveChatConfig(optionalParams));
|
|
334
|
+
}
|
|
335
|
+
}, {
|
|
336
|
+
key: "getChatToken",
|
|
337
|
+
value: async function getChatToken() {
|
|
338
|
+
let cached = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
339
|
+
let optionalParams = arguments.length > 1 ? arguments[1] : undefined;
|
|
340
|
+
return this.validateAndExecuteCall("getChatToken", () => this.chatSDK.getChatToken(cached, optionalParams));
|
|
341
|
+
}
|
|
342
|
+
}, {
|
|
343
|
+
key: "getCallingToken",
|
|
344
|
+
value: async function getCallingToken() {
|
|
345
|
+
return this.validateAndExecuteCall("getCallingToken", () => this.chatSDK.getCallingToken());
|
|
346
|
+
}
|
|
347
|
+
}, {
|
|
348
|
+
key: "getMessages",
|
|
349
|
+
value: async function getMessages() {
|
|
350
|
+
return this.validateAndExecuteCall("getMessages", () => this.chatSDK.getMessages());
|
|
351
|
+
}
|
|
352
|
+
}, {
|
|
353
|
+
key: "getDataMaskingRules",
|
|
354
|
+
value: async function getDataMaskingRules() {
|
|
355
|
+
return this.validateAndExecuteCall("getDataMaskingRules", () => this.chatSDK.getDataMaskingRules());
|
|
356
|
+
}
|
|
357
|
+
}, {
|
|
358
|
+
key: "sendMessage",
|
|
359
|
+
value: async function sendMessage(message) {
|
|
360
|
+
return this.validateAndExecuteCall("sendMessage", () => this.chatSDK.sendMessage(message));
|
|
361
|
+
}
|
|
362
|
+
}, {
|
|
363
|
+
key: "onNewMessage",
|
|
364
|
+
value: async function onNewMessage(onNewMessageCallback) {
|
|
365
|
+
let optionalParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
366
|
+
disablePolling: false
|
|
367
|
+
};
|
|
368
|
+
return this.validateAndExecuteCall("onNewMessage", () => this.chatSDK.onNewMessage(onNewMessageCallback, optionalParams));
|
|
369
|
+
}
|
|
370
|
+
}, {
|
|
371
|
+
key: "sendTypingEvent",
|
|
372
|
+
value: async function sendTypingEvent() {
|
|
373
|
+
return this.validateAndExecuteCall("sendTypingEvent", () => this.chatSDK.sendTypingEvent());
|
|
374
|
+
}
|
|
375
|
+
}, {
|
|
376
|
+
key: "onTypingEvent",
|
|
377
|
+
value: async function onTypingEvent(onTypingEventCallback) {
|
|
378
|
+
return this.validateAndExecuteCall("onTypingEvent", () => this.chatSDK.onTypingEvent(onTypingEventCallback));
|
|
379
|
+
}
|
|
380
|
+
}, {
|
|
381
|
+
key: "onAgentEndSession",
|
|
382
|
+
value: async function onAgentEndSession(onAgentEndSessionCallback) {
|
|
383
|
+
return this.validateAndExecuteCall("onAgentEndSession", () => this.chatSDK.onAgentEndSession(onAgentEndSessionCallback));
|
|
384
|
+
}
|
|
385
|
+
}, {
|
|
386
|
+
key: "uploadFileAttachment",
|
|
387
|
+
value: async function uploadFileAttachment(fileInfo) {
|
|
388
|
+
return this.validateAndExecuteCall("uploadFileAttachment", () => this.chatSDK.uploadFileAttachment(fileInfo));
|
|
389
|
+
}
|
|
390
|
+
}, {
|
|
391
|
+
key: "downloadFileAttachment",
|
|
392
|
+
value: async function downloadFileAttachment(fileMetadata) {
|
|
393
|
+
return this.validateAndExecuteCall("downloadFileAttachment", () => this.chatSDK.downloadFileAttachment(fileMetadata));
|
|
394
|
+
}
|
|
395
|
+
}, {
|
|
396
|
+
key: "emailLiveChatTranscript",
|
|
397
|
+
value: async function emailLiveChatTranscript(body) {
|
|
398
|
+
let optionalParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
399
|
+
return this.validateAndExecuteCall("emailLiveChatTranscript", () => this.chatSDK.emailLiveChatTranscript(body, optionalParams));
|
|
400
|
+
}
|
|
401
|
+
}, {
|
|
402
|
+
key: "getLiveChatTranscript",
|
|
403
|
+
value: async function getLiveChatTranscript() {
|
|
404
|
+
let optionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
405
|
+
return this.validateAndExecuteCall("getLiveChatTranscript", () => this.chatSDK.getLiveChatTranscript(optionalParams));
|
|
406
|
+
}
|
|
326
407
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
}
|
|
347
|
-
|
|
408
|
+
// response from origin is unknown, but this definition breaks create adapter for shimAdapter, switching to any until type is returned from origin
|
|
409
|
+
}, {
|
|
410
|
+
key: "createChatAdapter",
|
|
411
|
+
value: async function createChatAdapter() {
|
|
412
|
+
let optionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
413
|
+
return this.validateAndExecuteCall("createChatAdapter", () => this.chatSDK.createChatAdapter(optionalParams));
|
|
414
|
+
}
|
|
415
|
+
}, {
|
|
416
|
+
key: "isVoiceVideoCallingEnabled",
|
|
417
|
+
value: async function isVoiceVideoCallingEnabled() {
|
|
418
|
+
this.tokenRing();
|
|
419
|
+
return this.chatSDK.isVoiceVideoCallingEnabled();
|
|
420
|
+
}
|
|
421
|
+
}, {
|
|
422
|
+
key: "getVoiceVideoCalling",
|
|
423
|
+
value: async function getVoiceVideoCalling() {
|
|
424
|
+
let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
425
|
+
return this.validateAndExecuteCall("getVoiceVideoCalling", () => this.chatSDK.getVoiceVideoCalling(params));
|
|
426
|
+
}
|
|
427
|
+
}, {
|
|
428
|
+
key: "getPostChatSurveyContext",
|
|
429
|
+
value: async function getPostChatSurveyContext() {
|
|
430
|
+
return this.validateAndExecuteCall("getPostChatSurveyContext", () => this.chatSDK.getPostChatSurveyContext());
|
|
431
|
+
}
|
|
432
|
+
}, {
|
|
433
|
+
key: "getAgentAvailability",
|
|
434
|
+
value: async function getAgentAvailability() {
|
|
435
|
+
let optionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
436
|
+
return this.validateAndExecuteCall("getAgentAvailability", () => this.chatSDK.getAgentAvailability(optionalParams));
|
|
437
|
+
}
|
|
438
|
+
}]);
|
|
439
|
+
return FacadeChatSDK;
|
|
440
|
+
}();
|