@microsoft/omnichannel-chat-widget 0.1.0-main.2d7913d → 0.1.0-main.3ac9d65

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 (58) hide show
  1. package/lib/cjs/common/Constants.js +2 -0
  2. package/lib/cjs/common/telemetry/TelemetryConstants.js +2 -0
  3. package/lib/cjs/common/utils.js +20 -7
  4. package/lib/cjs/components/headerstateful/HeaderStateful.js +2 -1
  5. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  6. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  7. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  8. package/lib/cjs/components/livechatwidget/common/createAdapter.js +4 -0
  9. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +2 -5
  10. package/lib/cjs/components/livechatwidget/common/endChat.js +3 -3
  11. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +23 -15
  12. package/lib/cjs/components/livechatwidget/common/startChat.js +71 -24
  13. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +86 -41
  14. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  15. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
  16. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  17. package/lib/cjs/contexts/createReducer.js +8 -0
  18. package/lib/esm/common/Constants.js +2 -0
  19. package/lib/esm/common/telemetry/TelemetryConstants.js +2 -0
  20. package/lib/esm/common/utils.js +14 -5
  21. package/lib/esm/components/headerstateful/HeaderStateful.js +2 -1
  22. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  23. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  24. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  25. package/lib/esm/components/livechatwidget/common/createAdapter.js +4 -1
  26. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +2 -5
  27. package/lib/esm/components/livechatwidget/common/endChat.js +3 -3
  28. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +24 -17
  29. package/lib/esm/components/livechatwidget/common/startChat.js +68 -26
  30. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +85 -43
  31. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  32. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
  33. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  34. package/lib/esm/contexts/createReducer.js +8 -0
  35. package/lib/types/common/Constants.d.ts +1 -0
  36. package/lib/types/common/telemetry/TelemetryConstants.d.ts +2 -0
  37. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  38. package/lib/types/common/utils.d.ts +5 -4
  39. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  40. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  41. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  42. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  43. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  44. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  45. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -5
  46. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  47. package/lib/types/components/livechatwidget/common/startChat.d.ts +3 -3
  48. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  49. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  50. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -2
  51. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  52. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  53. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  54. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  55. package/package.json +4 -3
  56. package/lib/cjs/components/livechatwidget/interfaces/IAuthProps.js +0 -1
  57. package/lib/esm/components/livechatwidget/interfaces/IAuthProps.js +0 -1
  58. package/lib/types/components/livechatwidget/interfaces/IAuthProps.d.ts +0 -4
@@ -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
 
@@ -143,6 +143,8 @@ exports.TelemetryEvent = TelemetryEvent;
143
143
  TelemetryEvent["SuppressBotMagicCodeFailed"] = "SuppressBotMagicCodeFailed";
144
144
  TelemetryEvent["GetConversationDetailsException"] = "GetConversationDetailsException";
145
145
  TelemetryEvent["BrowserUnloadEventStarted"] = "BrowserUnloadEventStarted";
146
+ TelemetryEvent["GetAuthTokenCalled"] = "GetAuthTokenCalled";
147
+ TelemetryEvent["ReceivedNullOrEmptyToken"] = "ReceivedNullOrEmptyToken";
146
148
  TelemetryEvent["ProcessingHTMLTextMiddlewareFailed"] = "ProcessingHTMLTextMiddlewareFailed";
147
149
  TelemetryEvent["ProcessingSanitizationMiddlewareFailed"] = "ProcessingSanitizationMiddlewareFailed";
148
150
  TelemetryEvent["FormatTagsMiddlewareJSONStringifyFailed"] = "FormatTagsMiddlewareJSONStringifyFailed";
@@ -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;
@@ -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,8 @@ 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());
46
+ return adapter.chatAdapter;
43
47
  }
44
48
 
45
49
  return adapter;
@@ -1704,10 +1704,7 @@ const dummyDefaultProps = {
1704
1704
  fwdUrl: ""
1705
1705
  }
1706
1706
  },
1707
- authProps: {
1708
- authClientFunction: undefined,
1709
- setAuthTokenProviderToChatSdk: undefined
1710
- },
1711
- telemetryConfig: undefined
1707
+ telemetryConfig: undefined,
1708
+ getAuthToken: undefined
1712
1709
  };
1713
1710
  exports.dummyDefaultProps = dummyDefaultProps;
@@ -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
@@ -44,9 +44,17 @@ const getChatReconnectContext = async (chatSDK, reconnectId) => {
44
44
  exports.getChatReconnectContext = getChatReconnectContext;
45
45
 
46
46
  const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
47
- var _props$reconnectChatP, _props$authProps;
47
+ var _props$chatConfig, _props$reconnectChatP;
48
48
 
49
- if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && (_props$authProps = props.authProps) !== null && _props$authProps !== void 0 && _props$authProps.authClientFunction // TODO: Implement this after storage is in place
49
+ let authClientFunction = undefined;
50
+
51
+ if ((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) {
52
+ var _props$chatConfig2, _props$chatConfig2$Li;
53
+
54
+ authClientFunction = ((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 ? void 0 : (_props$chatConfig2$Li = _props$chatConfig2.LiveChatConfigAuthSettings) === null || _props$chatConfig2$Li === void 0 ? void 0 : _props$chatConfig2$Li.msdyn_javascriptclientfunction) ?? undefined;
55
+ }
56
+
57
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && authClientFunction // TODO: Implement this after storage is in place
50
58
 
51
59
  /* && !isLoadWithState() */
52
60
  ) {
@@ -63,31 +71,31 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
63
71
 
64
72
  exports.getReconnectIdForAuthenticatedChat = getReconnectIdForAuthenticatedChat;
65
73
 
66
- const handleUnauthenticatedReconnectChat = async (chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
74
+ const handleUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
67
75
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
68
76
 
69
77
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
70
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, authProps, dispatch, setAdapter, initStartChat, redirectInSameWindow);
78
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
71
79
  } else {
72
- await setReconnectIdAndStartChat(chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat);
80
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
73
81
  }
74
82
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
83
 
76
84
 
77
85
  exports.handleUnauthenticatedReconnectChat = handleUnauthenticatedReconnectChat;
78
86
 
79
- const startUnauthenticatedReconnectChat = async (chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat) => {
87
+ const startUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
80
88
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
81
89
 
82
90
  if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
83
- await setReconnectIdAndStartChat(chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat);
91
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
84
92
  }
85
93
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
94
 
87
95
 
88
96
  exports.startUnauthenticatedReconnectChat = startUnauthenticatedReconnectChat;
89
97
 
90
- const setReconnectIdAndStartChat = async (chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat) => {
98
+ const setReconnectIdAndStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
91
99
  const startUnauthenticatedReconnectChat = {
92
100
  eventName: _TelemetryConstants.BroadcastEvent.StartUnauthenticatedReconnectChat
93
101
  };
@@ -105,7 +113,7 @@ const setReconnectIdAndStartChat = async (chatSDK, authProps, dispatch, setAdapt
105
113
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
106
114
  payload: _ConversationState.ConversationState.Loading
107
115
  });
108
- await initStartChat(chatSDK, authProps, dispatch, setAdapter, optionalParams);
116
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, optionalParams);
109
117
  };
110
118
 
111
119
  const redirectPage = (redirectURL, redirectInSameWindow) => {
@@ -128,7 +136,7 @@ const shouldRedirectOrStartNewChat = reconnectAvailabilityResponse => {
128
136
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
129
137
 
130
138
 
131
- const startNewChatEmptyRedirectionUrl = async (chatSDK, authProps, dispatch, setAdapter, initStartChat) => {
139
+ const startNewChatEmptyRedirectionUrl = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat) => {
132
140
  const startUnauthenticatedReconnectChat = {
133
141
  eventName: _TelemetryConstants.BroadcastEvent.StartUnauthenticatedReconnectChat
134
142
  };
@@ -153,26 +161,26 @@ const startNewChatEmptyRedirectionUrl = async (chatSDK, authProps, dispatch, set
153
161
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
154
162
  payload: _ConversationState.ConversationState.Loading
155
163
  });
156
- await initStartChat(chatSDK, authProps, dispatch, setAdapter);
164
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
157
165
  }
158
166
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
159
167
 
160
168
 
161
- const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, authProps, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
169
+ const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
162
170
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
163
171
 
164
172
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
165
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, authProps, dispatch, setAdapter, initStartChat, redirectInSameWindow);
173
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
166
174
  }
167
175
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
168
176
 
169
177
 
170
178
  exports.handleRedirectUnauthenticatedReconnectChat = handleRedirectUnauthenticatedReconnectChat;
171
179
 
172
- const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, authProps, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
180
+ const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
173
181
  if (reconnectAvailabilityResponse.redirectURL) {
174
182
  redirectPage(reconnectAvailabilityResponse.redirectURL, redirectInSameWindow);
175
183
  } else {
176
- await startNewChatEmptyRedirectionUrl(chatSDK, authProps, dispatch, setAdapter, initStartChat);
184
+ await startNewChatEmptyRedirectionUrl(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat);
177
185
  }
178
186
  };
@@ -35,14 +35,19 @@ var _updateSessionDataForTelemetry = require("./updateSessionDataForTelemetry");
35
35
 
36
36
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
37
37
 
38
+ var _ActivityStreamHandler = require("./ActivityStreamHandler");
39
+
38
40
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
41
  let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
42
 
43
+ let widgetInstanceId; // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
+
41
45
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
42
- var _props$reconnectChatP;
46
+ var _props$controlProps, _props$reconnectChatP;
43
47
 
44
48
  optionalParams = {}; //Resetting to ensure no stale values
45
- // Can connect to existing chat session
49
+
50
+ 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
51
 
47
52
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
48
53
  return;
@@ -52,7 +57,7 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
52
57
  if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
53
58
  var _props$reconnectChatP2, _props$reconnectChatP3;
54
59
 
55
- await (0, _reconnectChatHelper.handleRedirectUnauthenticatedReconnectChat)(chatSDK, props.authProps, 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);
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.reconnectId, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.redirectInSameWindow);
56
61
  return;
57
62
  } // Getting reconnectId for authenticated chat
58
63
 
@@ -69,21 +74,19 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
69
74
  payload: _ConversationState.ConversationState.ReconnectChat
70
75
  });
71
76
  return;
72
- } // Set custom context params
73
-
77
+ } // Setting Proactive chat settings
74
78
 
75
- setCustomContextParams(props, chatSDK); // Setting Proactive chat settings
76
79
 
77
80
  const isProactiveChat = state.appStates.conversationState === _ConversationState.ConversationState.ProactiveChat;
78
81
  const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
79
82
 
80
- setPreChatAndInitiateChat(chatSDK, props.authProps, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
83
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
81
84
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
85
 
83
86
 
84
87
  exports.prepareStartChat = prepareStartChat;
85
88
 
86
- const setPreChatAndInitiateChat = async (chatSDK, authProps, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
89
+ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
87
90
  // Getting prechat Survey Context
88
91
  const parseToJson = false;
89
92
  const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
@@ -106,13 +109,43 @@ const setPreChatAndInitiateChat = async (chatSDK, authProps, dispatch, setAdapte
106
109
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
107
110
  payload: _ConversationState.ConversationState.Loading
108
111
  });
109
- await initStartChat(chatSDK, authProps, dispatch, setAdapter);
112
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
110
113
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
114
 
112
115
 
113
116
  exports.setPreChatAndInitiateChat = setPreChatAndInitiateChat;
114
117
 
115
- const initStartChat = async (chatSDK, authProps, dispatch, setAdapter, params, persistedState) => {
118
+ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
119
+ if (getAuthToken) {
120
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
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;
128
+
129
+ authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
130
+ }
131
+
132
+ const token = await getAuthToken(authClientFunction);
133
+
134
+ if (!(0, _utils.isNullOrEmptyString)(token)) {
135
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
136
+ chatSDK.setAuthTokenProvider(async () => {
137
+ return token;
138
+ });
139
+ } else {
140
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
141
+ Event: _TelemetryConstants.TelemetryEvent.ReceivedNullOrEmptyToken
142
+ });
143
+ }
144
+ }
145
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
146
+
147
+
148
+ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
116
149
  try {
117
150
  var _newAdapter$activity$, _TelemetryTimers$Widg;
118
151
 
@@ -136,15 +169,13 @@ const initStartChat = async (chatSDK, authProps, dispatch, setAdapter, params, p
136
169
 
137
170
  _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
138
171
  Event: _TelemetryConstants.TelemetryEvent.StartChatSDKCall
139
- }); // Set optional params
172
+ }); // Set custom context params
140
173
 
141
174
 
175
+ setCustomContextParams(chatSDK);
142
176
  optionalParams = Object.assign({}, params, optionalParams); // set auth token to chat sdk before start chat
143
177
 
144
- if (authProps && authProps.setAuthTokenProviderToChatSdk) {
145
- await authProps.setAuthTokenProviderToChatSdk(chatSDK, authProps.authClientFunction);
146
- }
147
-
178
+ await handleAuthentication(chatSDK, chatConfig, getAuthToken);
148
179
  await chatSDK.startChat(optionalParams);
149
180
  isStartChatSuccessful = true;
150
181
  } catch (error) {
@@ -196,6 +227,8 @@ const initStartChat = async (chatSDK, authProps, dispatch, setAdapter, params, p
196
227
  await (0, _updateSessionDataForTelemetry.updateSessionDataForTelemetry)(chatSDK, dispatch); // Set app state to Active
197
228
 
198
229
  if (isStartChatSuccessful) {
230
+ _ActivityStreamHandler.ActivityStreamHandler.uncork();
231
+
199
232
  dispatch({
200
233
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
201
234
  payload: _ConversationState.ConversationState.Active
@@ -230,6 +263,7 @@ const initStartChat = async (chatSDK, authProps, dispatch, setAdapter, params, p
230
263
  }
231
264
  } finally {
232
265
  optionalParams = {};
266
+ widgetInstanceId = "";
233
267
  }
234
268
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
235
269
 
@@ -237,14 +271,14 @@ const initStartChat = async (chatSDK, authProps, dispatch, setAdapter, params, p
237
271
  exports.initStartChat = initStartChat;
238
272
 
239
273
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
240
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _persistedState$domai6, _persistedState$appSt;
274
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
241
275
 
242
276
  // By pass this function in case of popout chat
243
277
  if (state.appStates.skipChatButtonRendering === true) {
244
278
  return false;
245
279
  }
246
280
 
247
- 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
281
+ 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
248
282
 
249
283
  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) {
250
284
  var _persistedState$domai7;
@@ -256,7 +290,7 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
256
290
  const optionalParams = {
257
291
  liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
258
292
  };
259
- await initStartChat(chatSDK, props.authProps, dispatch, setAdapter, optionalParams, persistedState);
293
+ await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
260
294
  return true;
261
295
  } else {
262
296
  return false;
@@ -264,17 +298,30 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
264
298
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
265
299
 
266
300
 
267
- const setCustomContextParams = (props, chatSDK) => {
268
- var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$chatConfig, _persistedState$domai8;
301
+ const setCustomContextParams = chatSDK => {
302
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _persistedState$domai8;
269
303
 
270
304
  // Add custom context only for unauthenticated chat
271
- 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);
305
+ 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 ?? "");
306
+
307
+ 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)) {
308
+ var _persistedState$domai9, _persistedState$domai10;
272
309
 
273
- 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)) {
274
- var _persistedState$domai9;
310
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
311
+ const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
312
+
313
+ _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.WARN, {
314
+ Event: _TelemetryConstants.TelemetryEvent.StartChatMethodException,
315
+ ExceptionDetails: {
316
+ exception: errorMessage
317
+ }
318
+ });
319
+
320
+ throw new Error(errorMessage);
321
+ }
275
322
 
276
323
  optionalParams = Object.assign({}, optionalParams, {
277
- customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai9 = persistedState.domainStates) === null || _persistedState$domai9 === void 0 ? void 0 : _persistedState$domai9.customContext
324
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
278
325
  });
279
326
  }
280
327
  };