@microsoft/omnichannel-chat-widget 0.1.0-main.d48dae2 → 0.1.0-main.d4c1f9e

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.
Files changed (67) hide show
  1. package/lib/cjs/common/Constants.js +2 -0
  2. package/lib/cjs/common/utils.js +20 -7
  3. package/lib/cjs/components/headerstateful/HeaderStateful.js +2 -1
  4. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  5. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  6. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  7. package/lib/cjs/components/livechatwidget/common/authHelper.js +52 -0
  8. package/lib/cjs/components/livechatwidget/common/createAdapter.js +3 -0
  9. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +6 -1
  10. package/lib/cjs/components/livechatwidget/common/endChat.js +3 -3
  11. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +4 -0
  12. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +35 -23
  13. package/lib/cjs/components/livechatwidget/common/startChat.js +39 -47
  14. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +87 -42
  15. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  16. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +11 -0
  17. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
  18. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  19. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  20. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
  21. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  22. package/lib/cjs/contexts/createReducer.js +8 -0
  23. package/lib/esm/common/Constants.js +2 -0
  24. package/lib/esm/common/utils.js +14 -5
  25. package/lib/esm/components/headerstateful/HeaderStateful.js +2 -1
  26. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  27. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  28. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  29. package/lib/esm/components/livechatwidget/common/authHelper.js +39 -0
  30. package/lib/esm/components/livechatwidget/common/createAdapter.js +3 -1
  31. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +6 -1
  32. package/lib/esm/components/livechatwidget/common/endChat.js +3 -3
  33. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +4 -0
  34. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +36 -25
  35. package/lib/esm/components/livechatwidget/common/startChat.js +35 -47
  36. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +86 -44
  37. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  38. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +10 -0
  39. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  40. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  41. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  42. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
  43. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  44. package/lib/esm/contexts/createReducer.js +8 -0
  45. package/lib/types/common/Constants.d.ts +1 -0
  46. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  47. package/lib/types/common/utils.d.ts +4 -3
  48. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  49. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  50. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  51. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  52. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  53. package/lib/types/components/livechatwidget/common/authHelper.d.ts +4 -0
  54. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  55. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +4 -4
  56. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  57. package/lib/types/components/livechatwidget/common/startChat.d.ts +2 -2
  58. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  59. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  60. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  61. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  62. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  63. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  64. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  65. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  66. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  67. package/package.json +4 -3
@@ -169,6 +169,8 @@ _defineProperty(Constants, "ChatWidgetStateChangedPrefix", "ChatWidgetStateChang
169
169
 
170
170
  _defineProperty(Constants, "PostChatLoadingDurationInMs", 2000);
171
171
 
172
+ _defineProperty(Constants, "BrowserUnloadConfirmationMessage", "Do you want to leave chat?");
173
+
172
174
  const Regex = (_class = class Regex {}, _defineProperty(_class, "EmailRegex", "(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"), _class);
173
175
  exports.Regex = Regex;
174
176
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.setTabIndices = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseAdaptiveCardPayload = exports.newGuid = exports.isUndefinedOrEmpty = exports.isNullOrUndefined = exports.isNullOrEmptyString = exports.getWidgetEndChatEventName = exports.getWidgetCacheId = exports.getTimestampHourMinute = exports.getStateFromCache = exports.getLocaleDirection = exports.getIconText = exports.getDomain = exports.findParentFocusableElementsWithoutChildContainer = exports.findAllFocusableElement = exports.extractPreChatSurveyResponseValues = exports.escapeHtml = exports.createTimer = exports.changeLanguageCodeFormatForWebChat = exports.addDelayInMs = void 0;
6
+ exports.setTabIndices = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseAdaptiveCardPayload = exports.newGuid = exports.isUndefinedOrEmpty = exports.isNullOrUndefined = exports.isNullOrEmptyString = exports.getWidgetEndChatEventName = exports.getWidgetCacheId = exports.getTimestampHourMinute = exports.getStateFromCache = exports.getLocaleDirection = exports.getIconText = exports.getDomain = exports.getBroadcastChannelName = exports.findParentFocusableElementsWithoutChildContainer = exports.findAllFocusableElement = exports.extractPreChatSurveyResponseValues = exports.escapeHtml = exports.createTimer = exports.changeLanguageCodeFormatForWebChat = exports.addDelayInMs = void 0;
7
7
 
8
8
  var _Constants = require("./Constants");
9
9
 
@@ -13,6 +13,8 @@ var _KeyCodes = require("./KeyCodes");
13
13
 
14
14
  var _TelemetryConstants = require("./telemetry/TelemetryConstants");
15
15
 
16
+ var _md5Typescript = require("md5-typescript");
17
+
16
18
  const getElementBySelector = selector => {
17
19
  let element;
18
20
 
@@ -354,26 +356,31 @@ const getDomain = hostValue => {
354
356
 
355
357
  exports.getDomain = getDomain;
356
358
 
357
- const getWidgetCacheId = (orgId, widgetId) => {
358
- return `${_Constants.Constants.ChatWidgetStateChangedPrefix}_${orgId}_${widgetId}`;
359
+ const getWidgetCacheId = (orgId, widgetId, widgetInstanceId) => {
360
+ const widgetCacheId = `${widgetInstanceId}_${orgId}_${widgetId}`;
361
+ return _md5Typescript.Md5.init(widgetCacheId);
359
362
  };
360
363
 
361
364
  exports.getWidgetCacheId = getWidgetCacheId;
362
365
 
363
- const getWidgetEndChatEventName = (orgId, widgetId) => {
366
+ const getWidgetEndChatEventName = (orgId, widgetId, widgetInstanceId) => {
367
+ if (!isNullOrEmptyString(widgetInstanceId)) {
368
+ return `${_TelemetryConstants.BroadcastEvent.ChatEnded}_${widgetInstanceId}_${orgId}_${widgetId}`;
369
+ }
370
+
364
371
  return `${_TelemetryConstants.BroadcastEvent.ChatEnded}_${orgId}_${widgetId}`;
365
372
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
366
373
 
367
374
 
368
375
  exports.getWidgetEndChatEventName = getWidgetEndChatEventName;
369
376
 
370
- const getStateFromCache = (orgId, widgetId) => {
377
+ const getStateFromCache = (orgId, widgetId, widgetInstanceId) => {
371
378
  // Getting updated state from cache
372
379
  try {
373
380
  if (_DataStoreManager.DataStoreManager.clientDataStore) {
374
381
  var _DataStoreManager$cli;
375
382
 
376
- const widgetStateEventName = getWidgetCacheId(orgId, widgetId);
383
+ const widgetStateEventName = getWidgetCacheId(orgId, widgetId, widgetInstanceId);
377
384
  const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateEventName, "localStorage");
378
385
  const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
379
386
  return persistedState;
@@ -408,4 +415,10 @@ const addDelayInMs = ms => {
408
415
  return new Promise(resolve => setTimeout(resolve, ms));
409
416
  };
410
417
 
411
- exports.addDelayInMs = addDelayInMs;
418
+ exports.addDelayInMs = addDelayInMs;
419
+
420
+ const getBroadcastChannelName = (widgetId, widgetInstanceId) => {
421
+ return widgetInstanceId && !isNullOrEmptyString(widgetInstanceId) ? `${widgetInstanceId}_${widgetId}` : widgetId;
422
+ };
423
+
424
+ exports.getBroadcastChannelName = getBroadcastChannelName;
@@ -72,7 +72,8 @@ const HeaderStateful = props => {
72
72
  } else {
73
73
  const skipEndChatSDK = true;
74
74
  const skipCloseChat = false;
75
- await endChat(adapter, skipEndChatSDK, skipCloseChat);
75
+ const postMessageToOtherTabs = true;
76
+ await endChat(adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTabs);
76
77
  }
77
78
 
78
79
  dispatch({
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ActivityStreamHandler = void 0;
7
+
8
+ var _Deferred = require("./Deferred");
9
+
10
+ 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; }
11
+
12
+ class ActivityStreamHandler {
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+
16
+ /**
17
+ * Use of a deferred pattern, to hold the execution of the activity.
18
+ *
19
+ * */
20
+ static cork() {
21
+ ActivityStreamHandler.restoreDeferred = new _Deferred.Deferred();
22
+ ActivityStreamHandler.restorePromise = ActivityStreamHandler.restoreDeferred.promise;
23
+ }
24
+ /**
25
+ * Resolve the promise, releasing it to continue with the execution of the activity.
26
+ *
27
+ * */
28
+
29
+
30
+ static uncork() {
31
+ ActivityStreamHandler.restoreDeferred.resolve();
32
+ }
33
+
34
+ }
35
+
36
+ exports.ActivityStreamHandler = ActivityStreamHandler;
37
+
38
+ _defineProperty(ActivityStreamHandler, "restoreDeferred", {
39
+ resolve: () => {
40
+ return "initialState";
41
+ }
42
+ });
43
+
44
+ _defineProperty(ActivityStreamHandler, "restorePromise", void 0);
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PauseActivitySubscriber = void 0;
7
+
8
+ var _ActivityStreamHandler = require("../ActivityStreamHandler");
9
+
10
+ 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; }
11
+
12
+ class PauseActivitySubscriber {
13
+ constructor() {
14
+ _defineProperty(this, "observer", void 0);
15
+ }
16
+
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ async apply(activity) {
19
+ await _ActivityStreamHandler.ActivityStreamHandler.restorePromise;
20
+ return activity;
21
+ } // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
22
+
23
+
24
+ applicable(activity) {
25
+ return true;
26
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+
28
+
29
+ async next(activity) {
30
+ if (this.applicable(activity)) {
31
+ return await this.apply(activity);
32
+ }
33
+
34
+ return activity;
35
+ }
36
+
37
+ }
38
+
39
+ exports.PauseActivitySubscriber = PauseActivitySubscriber;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Deferred = void 0;
7
+
8
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
+
10
+ class Deferred {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ constructor() {
13
+ _defineProperty(this, "_promise", void 0);
14
+
15
+ _defineProperty(this, "_resolve", void 0);
16
+
17
+ _defineProperty(this, "_reject", () => {
18
+ return;
19
+ });
20
+
21
+ _defineProperty(this, "resolve", value => {
22
+ this._resolve(value);
23
+ });
24
+
25
+ _defineProperty(this, "reject", value => {
26
+ this._reject(value);
27
+ });
28
+
29
+ this._promise = new Promise((resolve, reject) => {
30
+ this._resolve = resolve;
31
+ this._reject = reject;
32
+ });
33
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+
35
+
36
+ get promise() {
37
+ return this._promise;
38
+ }
39
+
40
+ }
41
+
42
+ exports.Deferred = Deferred;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.removeAuthTokenProvider = exports.handleAuthentication = 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
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
16
+ let authClientFunction = undefined;
17
+
18
+ if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
19
+ var _chatConfig$LiveChatC;
20
+
21
+ authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
22
+ }
23
+
24
+ if (getAuthToken && authClientFunction) {
25
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
26
+ Event: _TelemetryConstants.TelemetryEvent.GetAuthTokenCalled
27
+ });
28
+
29
+ const token = await getAuthToken(authClientFunction);
30
+
31
+ if (!(0, _utils.isNullOrEmptyString)(token)) {
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ chatSDK.setAuthTokenProvider(async () => {
34
+ return token;
35
+ });
36
+ } else {
37
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
38
+ Event: _TelemetryConstants.TelemetryEvent.ReceivedNullOrEmptyToken
39
+ });
40
+ }
41
+ }
42
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
43
+
44
+
45
+ exports.handleAuthentication = handleAuthentication;
46
+
47
+ const removeAuthTokenProvider = chatSDK => {
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ chatSDK.authenticatedUserToken = null;
50
+ };
51
+
52
+ exports.removeAuthTokenProvider = removeAuthTokenProvider;
@@ -15,6 +15,8 @@ var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/c
15
15
 
16
16
  var _ChatAdapterShim = require("./ChatAdapterShim");
17
17
 
18
+ var _PauseActivitySubscriber = require("./ActivitySubscriber/PauseActivitySubscriber");
19
+
18
20
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
21
  const createAdapter = async chatSDK => {
20
22
  const chatAdapterOptionalParams = {
@@ -40,6 +42,7 @@ const createAdapter = async chatSDK => {
40
42
 
41
43
  if (chatSDK.isMockModeOn !== true) {
42
44
  adapter = new _ChatAdapterShim.ChatAdapterShim(adapter);
45
+ adapter.addSubscriber(new _PauseActivitySubscriber.PauseActivitySubscriber());
43
46
  return adapter.chatAdapter;
44
47
  }
45
48
 
@@ -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: {
@@ -1702,6 +1703,10 @@ const dummyDefaultProps = {
1702
1703
  botMagicCode: {
1703
1704
  disabled: false,
1704
1705
  fwdUrl: ""
1706
+ },
1707
+ adaptiveCardStyles: {
1708
+ background: "white",
1709
+ color: "black"
1705
1710
  }
1706
1711
  },
1707
1712
  telemetryConfig: undefined,
@@ -48,7 +48,7 @@ const prepareEndChat = async (props, chatSDK, setAdapter, setWebChatStyles, disp
48
48
  if (isPostChatEnabled === "true" && ((_conversationDetails = conversationDetails) === null || _conversationDetails === void 0 ? void 0 : _conversationDetails.canRenderPostChat) === _Constants.Constants.truePascal) {
49
49
  const skipEndChatSDK = false;
50
50
  const skipCloseChat = true;
51
- await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, true);
51
+ await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, false);
52
52
 
53
53
  if (postChatSurveyMode === _PostChatSurveyMode.PostChatSurveyMode.Embed) {
54
54
  dispatch({
@@ -151,9 +151,9 @@ const endChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, a
151
151
  });
152
152
 
153
153
  if (postMessageToOtherTab) {
154
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
154
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps;
155
155
 
156
- const endChatEventName = (0, _utils.getWidgetEndChatEventName)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId);
156
+ const endChatEventName = (0, _utils.getWidgetEndChatEventName)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId) ?? "");
157
157
 
158
158
  _omnichannelChatComponents.BroadcastService.postMessage({
159
159
  eventName: endChatEventName
@@ -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
- try {
23
- if (reconnectId) {
24
- const chatReconnectOptionalParams = {
25
- reconnectId: reconnectId
26
- };
27
- return await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext(chatReconnectOptionalParams));
28
- } else {
29
- return await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext());
30
- }
31
- } catch (ex) {
32
- _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
33
- Event: _TelemetryConstants.TelemetryEvent.GetChatReconnectContextSDKCallFailed,
34
- ExceptionDetails: {
35
- exception: ex
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
- const previousActiveSessionResponse = await getChatReconnectContext(chatSDK);
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);
@@ -35,14 +35,21 @@ var _updateSessionDataForTelemetry = require("./updateSessionDataForTelemetry");
35
35
 
36
36
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
37
37
 
38
+ var _ActivityStreamHandler = require("./ActivityStreamHandler");
39
+
40
+ var _authHelper = require("./authHelper");
41
+
38
42
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
43
  let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
44
 
45
+ let widgetInstanceId; // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+
41
47
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
42
- var _props$reconnectChatP;
48
+ var _props$controlProps, _props$reconnectChatP;
43
49
 
44
50
  optionalParams = {}; //Resetting to ensure no stale values
45
- // Can connect to existing chat session
51
+
52
+ widgetInstanceId = props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId; // Can connect to existing chat session
46
53
 
47
54
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
48
55
  return;
@@ -50,9 +57,9 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
50
57
 
51
58
 
52
59
  if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
53
- var _props$reconnectChatP2, _props$reconnectChatP3;
60
+ var _props$reconnectChatP2, _props$reconnectChatP3, _props$reconnectChatP4;
54
61
 
55
- 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.reconnectId, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.redirectInSameWindow);
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);
56
63
  return;
57
64
  } // Getting reconnectId for authenticated chat
58
65
 
@@ -69,11 +76,9 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
69
76
  payload: _ConversationState.ConversationState.ReconnectChat
70
77
  });
71
78
  return;
72
- } // Set custom context params
79
+ } // Setting Proactive chat settings
73
80
 
74
81
 
75
- setCustomContextParams(props, chatSDK); // Setting Proactive chat settings
76
-
77
82
  const isProactiveChat = state.appStates.conversationState === _ConversationState.ConversationState.ProactiveChat;
78
83
  const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
79
84
 
@@ -112,36 +117,6 @@ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, disp
112
117
 
113
118
  exports.setPreChatAndInitiateChat = setPreChatAndInitiateChat;
114
119
 
115
- const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
116
- if (getAuthToken) {
117
- _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
118
- Event: _TelemetryConstants.TelemetryEvent.GetAuthTokenCalled
119
- });
120
-
121
- let authClientFunction = undefined;
122
-
123
- if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
124
- var _chatConfig$LiveChatC;
125
-
126
- authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
127
- }
128
-
129
- const token = await getAuthToken(authClientFunction);
130
-
131
- if (!(0, _utils.isNullOrEmptyString)(token)) {
132
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
133
- chatSDK.setAuthTokenProvider(async () => {
134
- return token;
135
- });
136
- } else {
137
- _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
138
- Event: _TelemetryConstants.TelemetryEvent.ReceivedNullOrEmptyToken
139
- });
140
- }
141
- }
142
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
143
-
144
-
145
120
  const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
146
121
  try {
147
122
  var _newAdapter$activity$, _TelemetryTimers$Widg;
@@ -166,12 +141,13 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
166
141
 
167
142
  _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
168
143
  Event: _TelemetryConstants.TelemetryEvent.StartChatSDKCall
169
- }); // Set optional params
144
+ }); // Set custom context params
170
145
 
171
146
 
147
+ setCustomContextParams(chatSDK);
172
148
  optionalParams = Object.assign({}, params, optionalParams); // set auth token to chat sdk before start chat
173
149
 
174
- await handleAuthentication(chatSDK, chatConfig, getAuthToken);
150
+ await (0, _authHelper.handleAuthentication)(chatSDK, chatConfig, getAuthToken);
175
151
  await chatSDK.startChat(optionalParams);
176
152
  isStartChatSuccessful = true;
177
153
  } catch (error) {
@@ -223,6 +199,8 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
223
199
  await (0, _updateSessionDataForTelemetry.updateSessionDataForTelemetry)(chatSDK, dispatch); // Set app state to Active
224
200
 
225
201
  if (isStartChatSuccessful) {
202
+ _ActivityStreamHandler.ActivityStreamHandler.uncork();
203
+
226
204
  dispatch({
227
205
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
228
206
  payload: _ConversationState.ConversationState.Active
@@ -257,6 +235,7 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
257
235
  }
258
236
  } finally {
259
237
  optionalParams = {};
238
+ widgetInstanceId = "";
260
239
  }
261
240
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
262
241
 
@@ -264,14 +243,14 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
264
243
  exports.initStartChat = initStartChat;
265
244
 
266
245
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
267
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _persistedState$domai6, _persistedState$appSt;
246
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
268
247
 
269
248
  // By pass this function in case of popout chat
270
249
  if (state.appStates.skipChatButtonRendering === true) {
271
250
  return false;
272
251
  }
273
252
 
274
- const persistedState = (0, _utils.getStateFromCache)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId); //Connect to only active chat session
253
+ const persistedState = (0, _utils.getStateFromCache)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.widgetInstanceId) ?? ""); //Connect to only active chat session
275
254
 
276
255
  if (persistedState && !(0, _utils.isUndefinedOrEmpty)(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai6 = persistedState.domainStates) === null || _persistedState$domai6 === void 0 ? void 0 : _persistedState$domai6.liveChatContext) && (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$appSt = persistedState.appStates) === null || _persistedState$appSt === void 0 ? void 0 : _persistedState$appSt.conversationState) === _ConversationState.ConversationState.Active) {
277
256
  var _persistedState$domai7;
@@ -291,17 +270,30 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
291
270
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
292
271
 
293
272
 
294
- const setCustomContextParams = (props, chatSDK) => {
295
- var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$chatConfig, _persistedState$domai8;
273
+ const setCustomContextParams = chatSDK => {
274
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _persistedState$domai8;
296
275
 
297
276
  // Add custom context only for unauthenticated chat
298
- const persistedState = (0, _utils.getStateFromCache)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.widgetId);
277
+ const persistedState = (0, _utils.getStateFromCache)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.widgetId, widgetInstanceId ?? "");
278
+
279
+ if (!(0, _utils.isUndefinedOrEmpty)(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
280
+ var _persistedState$domai9, _persistedState$domai10;
299
281
 
300
- if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && !(0, _utils.isUndefinedOrEmpty)(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
301
- var _persistedState$domai9;
282
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
283
+ const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
284
+
285
+ _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.WARN, {
286
+ Event: _TelemetryConstants.TelemetryEvent.StartChatMethodException,
287
+ ExceptionDetails: {
288
+ exception: errorMessage
289
+ }
290
+ });
291
+
292
+ throw new Error(errorMessage);
293
+ }
302
294
 
303
295
  optionalParams = Object.assign({}, optionalParams, {
304
- customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai9 = persistedState.domainStates) === null || _persistedState$domai9 === void 0 ? void 0 : _persistedState$domai9.customContext
296
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
305
297
  });
306
298
  }
307
299
  };