@microsoft/omnichannel-chat-widget 0.1.0-main.24bd1e6 → 0.1.0-main.3c8dc3b

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 (75) 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 +4 -3
  5. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  6. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  7. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  8. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  9. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  10. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  11. package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
  12. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +31 -30
  13. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +2 -2
  14. package/lib/cjs/components/livechatwidget/common/endChat.js +3 -3
  15. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +1 -2
  16. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +23 -15
  17. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  18. package/lib/cjs/components/livechatwidget/common/startChat.js +47 -11
  19. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +86 -41
  20. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  21. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  22. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
  23. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  24. package/lib/cjs/contexts/createReducer.js +8 -0
  25. package/lib/esm/common/Constants.js +2 -0
  26. package/lib/esm/common/telemetry/TelemetryConstants.js +2 -0
  27. package/lib/esm/common/utils.js +14 -5
  28. package/lib/esm/components/headerstateful/HeaderStateful.js +4 -3
  29. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  30. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  31. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  32. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  33. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  34. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  35. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
  36. package/lib/esm/components/livechatwidget/common/createMarkdown.js +31 -30
  37. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +2 -2
  38. package/lib/esm/components/livechatwidget/common/endChat.js +3 -3
  39. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +1 -2
  40. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +23 -15
  41. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  42. package/lib/esm/components/livechatwidget/common/startChat.js +46 -13
  43. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +85 -43
  44. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  45. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  46. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
  47. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  48. package/lib/esm/contexts/createReducer.js +8 -0
  49. package/lib/types/common/Constants.d.ts +1 -0
  50. package/lib/types/common/telemetry/TelemetryConstants.d.ts +2 -0
  51. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  52. package/lib/types/common/utils.d.ts +5 -4
  53. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  54. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  55. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  56. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  57. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  58. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  59. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  60. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  61. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  62. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -4
  63. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  64. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  65. package/lib/types/components/livechatwidget/common/startChat.d.ts +3 -2
  66. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  67. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  68. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -0
  69. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
  70. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  71. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  72. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  73. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  74. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  75. package/package.json +4 -3
@@ -49,7 +49,8 @@ export const HeaderStateful = props => {
49
49
  } else {
50
50
  const skipEndChatSDK = true;
51
51
  const skipCloseChat = false;
52
- await endChat(adapter, skipEndChatSDK, skipCloseChat);
52
+ const postMessageToOtherTabs = true;
53
+ await endChat(adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTabs);
53
54
  }
54
55
 
55
56
  dispatch({
@@ -58,8 +59,8 @@ export const HeaderStateful = props => {
58
59
  });
59
60
  },
60
61
  ...(headerProps === null || headerProps === void 0 ? void 0 : headerProps.controlProps),
61
- hideTitle: state.appStates.conversationState === ConversationState.Loading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP = headerProps.controlProps) === null || _headerProps$controlP === void 0 ? void 0 : _headerProps$controlP.hideTitle),
62
- hideIcon: state.appStates.conversationState === ConversationState.Loading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP2 = headerProps.controlProps) === null || _headerProps$controlP2 === void 0 ? void 0 : _headerProps$controlP2.hideIcon),
62
+ hideTitle: state.appStates.conversationState === ConversationState.Loading || state.appStates.conversationState === ConversationState.PostchatLoading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP = headerProps.controlProps) === null || _headerProps$controlP === void 0 ? void 0 : _headerProps$controlP.hideTitle),
63
+ hideIcon: state.appStates.conversationState === ConversationState.Loading || state.appStates.conversationState === ConversationState.PostchatLoading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP2 = headerProps.controlProps) === null || _headerProps$controlP2 === void 0 ? void 0 : _headerProps$controlP2.hideIcon),
63
64
  hideCloseButton: state.appStates.conversationState === ConversationState.Loading || state.appStates.conversationState === ConversationState.Prechat || state.appStates.conversationState === ConversationState.ReconnectChat || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP3 = headerProps.controlProps) === null || _headerProps$controlP3 === void 0 ? void 0 : _headerProps$controlP3.hideCloseButton)
64
65
  };
65
66
  const outOfOfficeControlProps = {
@@ -0,0 +1,34 @@
1
+ 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; }
2
+
3
+ import { Deferred } from "./Deferred";
4
+ export class ActivityStreamHandler {
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+
8
+ /**
9
+ * Use of a deferred pattern, to hold the execution of the activity.
10
+ *
11
+ * */
12
+ static cork() {
13
+ ActivityStreamHandler.restoreDeferred = new Deferred();
14
+ ActivityStreamHandler.restorePromise = ActivityStreamHandler.restoreDeferred.promise;
15
+ }
16
+ /**
17
+ * Resolve the promise, releasing it to continue with the execution of the activity.
18
+ *
19
+ * */
20
+
21
+
22
+ static uncork() {
23
+ ActivityStreamHandler.restoreDeferred.resolve();
24
+ }
25
+
26
+ }
27
+
28
+ _defineProperty(ActivityStreamHandler, "restoreDeferred", {
29
+ resolve: () => {
30
+ return "initialState";
31
+ }
32
+ });
33
+
34
+ _defineProperty(ActivityStreamHandler, "restorePromise", void 0);
@@ -0,0 +1,14 @@
1
+ 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; }
2
+
3
+ export class DefaultActivitySubscriber {
4
+ constructor() {
5
+ _defineProperty(this, "observer", void 0);
6
+ }
7
+
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ async next(activity) {
10
+ this.observer.next(activity);
11
+ return false;
12
+ }
13
+
14
+ }
@@ -0,0 +1,29 @@
1
+ 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; }
2
+
3
+ import { ActivityStreamHandler } from "../ActivityStreamHandler";
4
+ export class PauseActivitySubscriber {
5
+ constructor() {
6
+ _defineProperty(this, "observer", void 0);
7
+ }
8
+
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ async apply(activity) {
11
+ await ActivityStreamHandler.restorePromise;
12
+ return activity;
13
+ } // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
14
+
15
+
16
+ applicable(activity) {
17
+ return true;
18
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+
20
+
21
+ async next(activity) {
22
+ if (this.applicable(activity)) {
23
+ return await this.apply(activity);
24
+ }
25
+
26
+ return activity;
27
+ }
28
+
29
+ }
@@ -0,0 +1,59 @@
1
+ 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; }
2
+
3
+ import { DefaultActivitySubscriber } from "./ActivitySubscriber/DefaultActivitySubscriber";
4
+ import { shareObservable } from "./shareObservable";
5
+ export class ChatAdapterShim {
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ constructor(chatAdapter) {
11
+ _defineProperty(this, "chatAdapter", void 0);
12
+
13
+ _defineProperty(this, "activityObserver", void 0);
14
+
15
+ _defineProperty(this, "subscribers", void 0);
16
+
17
+ this.subscribers = [];
18
+ this.chatAdapter = { ...chatAdapter,
19
+ activity$: shareObservable( // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ new window.Observable(observer => {
21
+ this.activityObserver = observer; // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+
23
+ const abortController = new window.AbortController();
24
+
25
+ (async () => {
26
+ try {
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ for await (let activity of chatAdapter.activities({
29
+ signal: abortController.signal
30
+ })) {
31
+ for (const subscriber of [...this.subscribers, new DefaultActivitySubscriber()]) {
32
+ subscriber.observer = this.activityObserver;
33
+ activity = await subscriber.next(activity);
34
+
35
+ if (!activity) {
36
+ break;
37
+ }
38
+ }
39
+ }
40
+
41
+ observer.complete();
42
+ } catch (error) {
43
+ observer.error(error);
44
+ }
45
+ })();
46
+
47
+ return () => {
48
+ abortController.abort();
49
+ };
50
+ }))
51
+ };
52
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+
54
+
55
+ addSubscriber(subscriber) {
56
+ this.subscribers.push(subscriber);
57
+ }
58
+
59
+ }
@@ -0,0 +1,33 @@
1
+ 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; }
2
+
3
+ export class Deferred {
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ constructor() {
6
+ _defineProperty(this, "_promise", void 0);
7
+
8
+ _defineProperty(this, "_resolve", void 0);
9
+
10
+ _defineProperty(this, "_reject", () => {
11
+ return;
12
+ });
13
+
14
+ _defineProperty(this, "resolve", value => {
15
+ this._resolve(value);
16
+ });
17
+
18
+ _defineProperty(this, "reject", value => {
19
+ this._reject(value);
20
+ });
21
+
22
+ this._promise = new Promise((resolve, reject) => {
23
+ this._resolve = resolve;
24
+ this._reject = reject;
25
+ });
26
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+
28
+
29
+ get promise() {
30
+ return this._promise;
31
+ }
32
+
33
+ }
@@ -1,7 +1,9 @@
1
1
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
2
2
  import { NotificationLevel } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationLevel";
3
3
  import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
4
- import { defaultMiddlewareLocalizedTexts } from "../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+ import { defaultMiddlewareLocalizedTexts } from "../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts";
5
+ import { ChatAdapterShim } from "./ChatAdapterShim";
6
+ import { PauseActivitySubscriber } from "./ActivitySubscriber/PauseActivitySubscriber"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
7
 
6
8
  export const createAdapter = async chatSDK => {
7
9
  const chatAdapterOptionalParams = {
@@ -23,5 +25,13 @@ export const createAdapter = async chatSDK => {
23
25
  }
24
26
  }
25
27
  };
26
- return await chatSDK.createChatAdapter(chatAdapterOptionalParams);
28
+ let adapter = await chatSDK.createChatAdapter(chatAdapterOptionalParams); //so far, there is no need to convert to the shim adapter when using visual tests
29
+
30
+ if (chatSDK.isMockModeOn !== true) {
31
+ adapter = new ChatAdapterShim(adapter);
32
+ adapter.addSubscriber(new PauseActivitySubscriber());
33
+ return adapter.chatAdapter;
34
+ }
35
+
36
+ return adapter;
27
37
  };
@@ -13,26 +13,40 @@ export const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineM
13
13
  breaks: !disableNewLineMarkdownSupport
14
14
  }); // ToDo: Commenting below usage of plugin until deferred bug is resolved: https://github.com/mayashavin/markdown-it-slack/issues/1
15
15
  // markdown.use(MarkdownSlack);
16
- // Markdown override for open link in new tab
17
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, quotes
16
+ } else {
17
+ markdown = new MarkdownIt(Constants.Zero, {
18
+ html: true,
19
+ linkify: true,
20
+ breaks: !disableNewLineMarkdownSupport
21
+ });
22
+ markdown.enable(["entity", // Rule to process html entity - {, ¯, "
23
+ "linkify", // Rule to replace link-like texts with link nodes
24
+ "html_block", // Rule to process html blocks and paragraphs
25
+ "html_inline", // Rule to process html tags
26
+ "newline" // Rule to proceess '\n'
27
+ ]);
28
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
29
 
19
- markdown.use(MarkdownItForInline, "url_new_win", "link_open", function (tokens, idx, env) {
20
- const targetAttrIndex = tokens[idx].attrIndex(Constants.Target); // Put a transparent pixel instead of the "open in new window" icon, so developers can easily modify the icon in CSS.
21
30
 
22
- const TRANSPARENT_GIF = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
31
+ markdown.use(MarkdownItForInline, "url_new_win", "link_open", function (tokens, idx, env) {
32
+ const targetAttrIndex = tokens[idx].attrIndex(Constants.Target); // Put a transparent pixel instead of the "open in new window" icon, so developers can easily modify the icon in CSS.
23
33
 
24
- if (~targetAttrIndex) {
25
- tokens[idx].attrs[targetAttrIndex][1] = Constants.Blank;
26
- } else {
27
- tokens[idx].attrPush([Constants.Target, Constants.Blank]);
28
- }
34
+ const TRANSPARENT_GIF = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
35
+
36
+ if (~targetAttrIndex) {
37
+ tokens[idx].attrs[targetAttrIndex][1] = Constants.Blank;
38
+ } else {
39
+ tokens[idx].attrPush([Constants.Target, Constants.Blank]);
40
+ }
41
+
42
+ const relAttrIndex = tokens[idx].attrIndex(Constants.TargetRelationship);
29
43
 
30
- const relAttrIndex = tokens[idx].attrIndex(Constants.TargetRelationship);
44
+ if (~relAttrIndex) {
45
+ tokens[idx].attrs[relAttrIndex][1] = Constants.TargetRelationshipAttributes;
46
+ } else {
47
+ tokens[idx].attrPush([Constants.TargetRelationship, Constants.TargetRelationshipAttributes]);
31
48
 
32
- if (~relAttrIndex) {
33
- tokens[idx].attrs[relAttrIndex][1] = Constants.TargetRelationshipAttributes;
34
- } else {
35
- tokens[idx].attrPush([Constants.TargetRelationship, Constants.TargetRelationshipAttributes]);
49
+ if (!disableMarkdownMessageFormatting) {
36
50
  tokens[idx].attrPush([Constants.Title, defaultMarkdownLocalizedTexts.MARKDOWN_EXTERNAL_LINK_ALT]); // eslint-disable-next-line quotes
37
51
 
38
52
  const iconTokens = markdown.parseInline(`![${defaultMarkdownLocalizedTexts.MARKDOWN_EXTERNAL_LINK_ALT}](${TRANSPARENT_GIF})`, env)[0].children;
@@ -42,20 +56,7 @@ export const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineM
42
56
  tokens.splice(idx + 2, 0, ...iconTokens);
43
57
  }
44
58
  }
45
- });
46
- } else {
47
- markdown = new MarkdownIt(Constants.Zero, {
48
- html: true,
49
- linkify: true,
50
- breaks: !disableNewLineMarkdownSupport
51
- });
52
- markdown.enable(["entity", // Rule to process html entity - {, ¯, "
53
- "linkify", // Rule to replace link-like texts with link nodes
54
- "html_block", // Rule to process html blocks and paragraphs
55
- "html_inline", // Rule to process html tags
56
- "newline" // Rule to proceess '\n'
57
- ]);
58
- }
59
-
59
+ }
60
+ });
60
61
  return markdown;
61
62
  };
@@ -1413,7 +1413,6 @@ export const dummyDefaultProps = {
1413
1413
  startNewChatButtonClassName: undefined
1414
1414
  }
1415
1415
  },
1416
- authClientFunction: undefined,
1417
1416
  isReconnectEnabled: undefined,
1418
1417
  reconnectId: undefined,
1419
1418
  redirectInSameWindow: undefined
@@ -1684,5 +1683,6 @@ export const dummyDefaultProps = {
1684
1683
  fwdUrl: ""
1685
1684
  }
1686
1685
  },
1687
- telemetryConfig: undefined
1686
+ telemetryConfig: undefined,
1687
+ getAuthToken: undefined
1688
1688
  };
@@ -31,7 +31,7 @@ const prepareEndChat = async (props, chatSDK, setAdapter, setWebChatStyles, disp
31
31
  if (isPostChatEnabled === "true" && ((_conversationDetails = conversationDetails) === null || _conversationDetails === void 0 ? void 0 : _conversationDetails.canRenderPostChat) === Constants.truePascal) {
32
32
  const skipEndChatSDK = false;
33
33
  const skipCloseChat = true;
34
- await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, true);
34
+ await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, false);
35
35
 
36
36
  if (postChatSurveyMode === PostChatSurveyMode.Embed) {
37
37
  dispatch({
@@ -129,9 +129,9 @@ const endChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, a
129
129
  });
130
130
 
131
131
  if (postMessageToOtherTab) {
132
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
132
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps;
133
133
 
134
- const endChatEventName = 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);
134
+ const endChatEventName = 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) ?? "");
135
135
  BroadcastService.postMessage({
136
136
  eventName: endChatEventName
137
137
  });
@@ -64,10 +64,9 @@ export const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatS
64
64
  });
65
65
  }
66
66
 
67
- WebChatStoreLoader.store = null;
68
-
69
67
  if (isPostChatEnabled === "true") {
70
68
  if (postChatSurveyMode === PostChatSurveyMode.Embed) {
69
+ WebChatStoreLoader.store = null;
71
70
  dispatch({
72
71
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
73
72
  payload: ConversationState.PostchatLoading
@@ -29,9 +29,17 @@ const getChatReconnectContext = async (chatSDK, reconnectId) => {
29
29
 
30
30
 
31
31
  const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
32
- var _props$reconnectChatP, _props$reconnectChatP2;
32
+ var _props$chatConfig, _props$reconnectChatP;
33
33
 
34
- if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && (_props$reconnectChatP2 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP2 !== void 0 && _props$reconnectChatP2.authClientFunction // TODO: Implement this after storage is in place
34
+ let authClientFunction = undefined;
35
+
36
+ if ((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) {
37
+ var _props$chatConfig2, _props$chatConfig2$Li;
38
+
39
+ 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;
40
+ }
41
+
42
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && authClientFunction // TODO: Implement this after storage is in place
35
43
 
36
44
  /* && !isLoadWithState() */
37
45
  ) {
@@ -46,27 +54,27 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
46
54
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
55
 
48
56
 
49
- const handleUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
57
+ const handleUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
50
58
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
51
59
 
52
60
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
53
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
61
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
54
62
  } else {
55
- await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
63
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
56
64
  }
57
65
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
66
 
59
67
 
60
- const startUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
68
+ const startUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
61
69
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
62
70
 
63
71
  if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
64
- await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
72
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
65
73
  }
66
74
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
75
 
68
76
 
69
- const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
77
+ const setReconnectIdAndStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
70
78
  const startUnauthenticatedReconnectChat = {
71
79
  eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
72
80
  };
@@ -82,7 +90,7 @@ const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconne
82
90
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
83
91
  payload: ConversationState.Loading
84
92
  });
85
- await initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
93
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, optionalParams);
86
94
  };
87
95
 
88
96
  const redirectPage = (redirectURL, redirectInSameWindow) => {
@@ -104,7 +112,7 @@ const shouldRedirectOrStartNewChat = reconnectAvailabilityResponse => {
104
112
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
105
113
 
106
114
 
107
- const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, initStartChat) => {
115
+ const startNewChatEmptyRedirectionUrl = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat) => {
108
116
  const startUnauthenticatedReconnectChat = {
109
117
  eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
110
118
  };
@@ -127,25 +135,25 @@ const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, in
127
135
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
128
136
  payload: ConversationState.Loading
129
137
  });
130
- await initStartChat(chatSDK, dispatch, setAdapter);
138
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
131
139
  }
132
140
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
133
141
 
134
142
 
135
- const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
143
+ const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
136
144
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
137
145
 
138
146
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
139
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
147
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
140
148
  }
141
149
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
142
150
 
143
151
 
144
- const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
152
+ const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
145
153
  if (reconnectAvailabilityResponse.redirectURL) {
146
154
  redirectPage(reconnectAvailabilityResponse.redirectURL, redirectInSameWindow);
147
155
  } else {
148
- await startNewChatEmptyRedirectionUrl(chatSDK, dispatch, setAdapter, initStartChat);
156
+ await startNewChatEmptyRedirectionUrl(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat);
149
157
  }
150
158
  };
151
159
 
@@ -0,0 +1,38 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2
+ export function shareObservable(observable) {
3
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+ let observers = []; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+
6
+ let subscription; // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+
8
+ return new window.Observable(observer => {
9
+ if (!subscription) {
10
+ subscription = observable.subscribe({
11
+ complete() {
12
+ observers.forEach(observer => observer.complete());
13
+ },
14
+
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ error(err) {
17
+ observers.forEach(observer => observer.error(err));
18
+ },
19
+
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ next(value) {
22
+ observers.forEach(observer => observer.next(value));
23
+ }
24
+
25
+ });
26
+ }
27
+
28
+ observers.push(observer);
29
+ return () => {
30
+ observers = observers.filter(o => o !== observer);
31
+
32
+ if (!observers.length) {
33
+ subscription.unsubscribe();
34
+ subscription = null;
35
+ }
36
+ };
37
+ });
38
+ }
@@ -8,11 +8,12 @@ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
8
8
  import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
9
9
  import { createAdapter } from "./createAdapter";
10
10
  import { createOnNewAdapterActivityHandler } from "../../../plugins/newMessageEventHandler";
11
- import { createTimer, getStateFromCache, isUndefinedOrEmpty } from "../../../common/utils";
11
+ import { createTimer, getStateFromCache, isNullOrEmptyString, isUndefinedOrEmpty } from "../../../common/utils";
12
12
  import { getReconnectIdForAuthenticatedChat, handleRedirectUnauthenticatedReconnectChat } from "./reconnectChatHelper";
13
13
  import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
14
14
  import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
15
- import { BroadcastService } from "@microsoft/omnichannel-chat-components"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
16
+ import { ActivityStreamHandler } from "./ActivityStreamHandler"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
17
 
17
18
  let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
19
 
@@ -30,7 +31,7 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
30
31
  if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
31
32
  var _props$reconnectChatP2, _props$reconnectChatP3;
32
33
 
33
- await handleRedirectUnauthenticatedReconnectChat(chatSDK, 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);
34
+ await 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);
34
35
  return;
35
36
  } // Getting reconnectId for authenticated chat
36
37
 
@@ -55,11 +56,11 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
55
56
  const isProactiveChat = state.appStates.conversationState === ConversationState.ProactiveChat;
56
57
  const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
57
58
 
58
- setPreChatAndInitiateChat(chatSDK, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
59
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
59
60
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
61
 
61
62
 
62
- const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
63
+ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
63
64
  // Getting prechat Survey Context
64
65
  const parseToJson = false;
65
66
  const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
@@ -82,11 +83,40 @@ const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProact
82
83
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
83
84
  payload: ConversationState.Loading
84
85
  });
85
- await initStartChat(chatSDK, dispatch, setAdapter);
86
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
86
87
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
88
 
88
89
 
89
- const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
90
+ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
91
+ if (getAuthToken) {
92
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
93
+ Event: TelemetryEvent.GetAuthTokenCalled
94
+ });
95
+ let authClientFunction = undefined;
96
+
97
+ if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
98
+ var _chatConfig$LiveChatC;
99
+
100
+ authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
101
+ }
102
+
103
+ const token = await getAuthToken(authClientFunction);
104
+
105
+ if (!isNullOrEmptyString(token)) {
106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
+ chatSDK.setAuthTokenProvider(async () => {
108
+ return token;
109
+ });
110
+ } else {
111
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
112
+ Event: TelemetryEvent.ReceivedNullOrEmptyToken
113
+ });
114
+ }
115
+ }
116
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
117
+
118
+
119
+ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
90
120
  try {
91
121
  var _newAdapter$activity$, _TelemetryTimers$Widg;
92
122
 
@@ -111,7 +141,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
111
141
  Event: TelemetryEvent.StartChatSDKCall
112
142
  }); // Set optional params
113
143
 
114
- optionalParams = Object.assign({}, params, optionalParams);
144
+ optionalParams = Object.assign({}, params, optionalParams); // set auth token to chat sdk before start chat
145
+
146
+ await handleAuthentication(chatSDK, chatConfig, getAuthToken);
115
147
  await chatSDK.startChat(optionalParams);
116
148
  isStartChatSuccessful = true;
117
149
  } catch (error) {
@@ -162,6 +194,7 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
162
194
  await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
163
195
 
164
196
  if (isStartChatSuccessful) {
197
+ ActivityStreamHandler.uncork();
165
198
  dispatch({
166
199
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
167
200
  payload: ConversationState.Active
@@ -199,14 +232,14 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
199
232
 
200
233
 
201
234
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
202
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _persistedState$domai6, _persistedState$appSt;
235
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps, _persistedState$domai6, _persistedState$appSt;
203
236
 
204
237
  // By pass this function in case of popout chat
205
238
  if (state.appStates.skipChatButtonRendering === true) {
206
239
  return false;
207
240
  }
208
241
 
209
- const persistedState = 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
242
+ const persistedState = 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$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId) ?? ""); //Connect to only active chat session
210
243
 
211
244
  if (persistedState && !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.Active) {
212
245
  var _persistedState$domai7;
@@ -218,7 +251,7 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
218
251
  const optionalParams = {
219
252
  liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
220
253
  };
221
- await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
254
+ await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
222
255
  return true;
223
256
  } else {
224
257
  return false;
@@ -227,10 +260,10 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
227
260
 
228
261
 
229
262
  const setCustomContextParams = (props, chatSDK) => {
230
- var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$chatConfig, _persistedState$domai8;
263
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$controlProps2, _props$chatConfig, _persistedState$domai8;
231
264
 
232
265
  // Add custom context only for unauthenticated chat
233
- const persistedState = 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);
266
+ const persistedState = 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, (props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.widgetInstanceId) ?? "");
234
267
 
235
268
  if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
236
269
  var _persistedState$domai9;