@microsoft/omnichannel-chat-widget 0.1.0-main.02fa07b → 0.1.0-main.07a2a56

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 (132) hide show
  1. package/lib/cjs/common/Constants.js +2 -0
  2. package/lib/cjs/common/storage/default/defaultCacheManager.js +34 -0
  3. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +114 -0
  4. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +86 -0
  5. package/lib/cjs/common/telemetry/TelemetryConstants.js +15 -0
  6. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +31 -18
  7. package/lib/cjs/common/utils.js +20 -7
  8. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
  9. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  10. package/lib/cjs/components/footerstateful/FooterStateful.js +5 -13
  11. package/lib/cjs/components/headerstateful/HeaderStateful.js +14 -7
  12. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  13. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  14. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  15. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  16. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  17. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  18. package/lib/cjs/components/livechatwidget/common/authHelper.js +65 -0
  19. package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
  20. package/lib/cjs/components/livechatwidget/common/createFooter.js +7 -16
  21. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +12 -0
  22. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +31 -30
  23. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +57 -19
  24. package/lib/cjs/components/livechatwidget/common/endChat.js +3 -3
  25. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +7 -8
  26. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +5 -2
  27. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +55 -35
  28. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  29. package/lib/cjs/components/livechatwidget/common/startChat.js +54 -21
  30. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +149 -62
  31. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +6 -4
  32. package/lib/cjs/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  33. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  34. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +32 -4
  35. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
  36. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  37. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  38. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  39. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  40. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  41. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +10 -0
  42. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +10 -0
  43. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +2 -1
  44. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +13 -5
  45. package/lib/cjs/contexts/createReducer.js +10 -2
  46. package/lib/esm/common/Constants.js +2 -0
  47. package/lib/esm/common/storage/default/defaultCacheManager.js +19 -0
  48. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +102 -0
  49. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +71 -0
  50. package/lib/esm/common/telemetry/TelemetryConstants.js +15 -0
  51. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +29 -13
  52. package/lib/esm/common/utils.js +14 -5
  53. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
  54. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  55. package/lib/esm/components/footerstateful/FooterStateful.js +5 -13
  56. package/lib/esm/components/headerstateful/HeaderStateful.js +14 -7
  57. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  58. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  59. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  60. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  61. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  62. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  63. package/lib/esm/components/livechatwidget/common/authHelper.js +50 -0
  64. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
  65. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -15
  66. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +8 -0
  67. package/lib/esm/components/livechatwidget/common/createMarkdown.js +31 -30
  68. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +57 -19
  69. package/lib/esm/components/livechatwidget/common/endChat.js +3 -3
  70. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +7 -9
  71. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +5 -2
  72. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +56 -37
  73. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  74. package/lib/esm/components/livechatwidget/common/startChat.js +50 -22
  75. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +148 -64
  76. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +5 -4
  77. package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  78. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  79. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +25 -2
  80. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  81. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  82. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  83. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  84. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  85. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  86. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +3 -0
  87. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +3 -0
  88. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +2 -1
  89. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +11 -5
  90. package/lib/esm/contexts/createReducer.js +10 -2
  91. package/lib/types/common/Constants.d.ts +1 -0
  92. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  93. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  94. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  95. package/lib/types/common/telemetry/TelemetryConstants.d.ts +7 -1
  96. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  97. package/lib/types/common/utils.d.ts +5 -4
  98. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  99. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  100. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  101. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  102. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  103. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  104. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  105. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  106. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  107. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  108. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -4
  109. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  110. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  111. package/lib/types/components/livechatwidget/common/startChat.d.ts +3 -2
  112. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  113. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  114. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +3 -2
  115. package/lib/types/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.d.ts +2 -2
  116. package/lib/types/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.d.ts +4 -0
  117. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
  118. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  119. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  120. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  121. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +4 -1
  122. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  123. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  124. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  125. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  126. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  127. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.d.ts +3 -0
  128. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.d.ts +3 -0
  129. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -1
  130. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +3 -2
  131. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  132. package/package.json +5 -4
@@ -3,25 +3,34 @@ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/teleme
3
3
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
4
4
  import { ConversationState } from "../../../contexts/common/ConversationState";
5
5
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
6
- import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
-
8
- const getChatReconnectContext = async (chatSDK, reconnectId) => {
9
- try {
10
- if (reconnectId) {
11
- const chatReconnectOptionalParams = {
12
- reconnectId: reconnectId
13
- };
14
- return await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext(chatReconnectOptionalParams));
15
- } else {
16
- return await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext());
17
- }
18
- } catch (ex) {
19
- TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
20
- Event: TelemetryEvent.GetChatReconnectContextSDKCallFailed,
21
- ExceptionDetails: {
22
- exception: ex
6
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
7
+ import { handleAuthentication, removeAuthTokenProvider } from "./authHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+
9
+ const getChatReconnectContext = async (chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId) => {
10
+ if (isReconnectEnabled) {
11
+ try {
12
+ if (reconnectId) {
13
+ const chatReconnectOptionalParams = {
14
+ reconnectId: reconnectId
15
+ };
16
+ return await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext(chatReconnectOptionalParams));
17
+ } else {
18
+ // set auth token to chat sdk to get reconnectId for auth chat
19
+ await handleAuthentication(chatSDK, chatConfig, getAuthToken);
20
+ const reconnectChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatReconnectContext()); // remove auth token after reconnectId is fetched
21
+ // this will be reset later at start chat
22
+
23
+ removeAuthTokenProvider(chatSDK);
24
+ return reconnectChatContext;
23
25
  }
24
- });
26
+ } catch (ex) {
27
+ TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
28
+ Event: TelemetryEvent.GetChatReconnectContextSDKCallFailed,
29
+ ExceptionDetails: {
30
+ exception: ex
31
+ }
32
+ });
33
+ }
25
34
  }
26
35
 
27
36
  return null;
@@ -29,13 +38,23 @@ const getChatReconnectContext = async (chatSDK, reconnectId) => {
29
38
 
30
39
 
31
40
  const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
32
- var _props$reconnectChatP, _props$reconnectChatP2;
41
+ var _props$chatConfig, _props$reconnectChatP;
42
+
43
+ let authClientFunction = undefined;
33
44
 
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
45
+ if ((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) {
46
+ var _props$chatConfig2, _props$chatConfig2$Li;
47
+
48
+ 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;
49
+ }
50
+
51
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && authClientFunction // TODO: Implement this after storage is in place
35
52
 
36
53
  /* && !isLoadWithState() */
37
54
  ) {
38
- const previousActiveSessionResponse = await getChatReconnectContext(chatSDK);
55
+ var _props$reconnectChatP2;
56
+
57
+ const previousActiveSessionResponse = await getChatReconnectContext(chatSDK, props.chatConfig, props.getAuthToken, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.isReconnectEnabled);
39
58
 
40
59
  if (previousActiveSessionResponse && previousActiveSessionResponse.reconnectId) {
41
60
  return previousActiveSessionResponse.reconnectId;
@@ -46,27 +65,27 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
46
65
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
66
 
48
67
 
49
- const handleUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
50
- const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
68
+ const handleUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isReconnectEnabled, reconnectId, initStartChat, redirectInSameWindow) => {
69
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId);
51
70
 
52
71
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
53
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
72
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
54
73
  } else {
55
- await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
74
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
56
75
  }
57
76
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
77
 
59
78
 
60
- const startUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
61
- const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
79
+ const startUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isReconnectEnabled, reconnectId, initStartChat) => {
80
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId);
62
81
 
63
82
  if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
64
- await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
83
+ await setReconnectIdAndStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat);
65
84
  }
66
85
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
86
 
68
87
 
69
- const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
88
+ const setReconnectIdAndStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, reconnectId, initStartChat) => {
70
89
  const startUnauthenticatedReconnectChat = {
71
90
  eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
72
91
  };
@@ -82,7 +101,7 @@ const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconne
82
101
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
83
102
  payload: ConversationState.Loading
84
103
  });
85
- await initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
104
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, optionalParams);
86
105
  };
87
106
 
88
107
  const redirectPage = (redirectURL, redirectInSameWindow) => {
@@ -104,7 +123,7 @@ const shouldRedirectOrStartNewChat = reconnectAvailabilityResponse => {
104
123
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
105
124
 
106
125
 
107
- const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, initStartChat) => {
126
+ const startNewChatEmptyRedirectionUrl = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat) => {
108
127
  const startUnauthenticatedReconnectChat = {
109
128
  eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
110
129
  };
@@ -127,25 +146,25 @@ const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, in
127
146
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
128
147
  payload: ConversationState.Loading
129
148
  });
130
- await initStartChat(chatSDK, dispatch, setAdapter);
149
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
131
150
  }
132
151
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
133
152
 
134
153
 
135
- const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
136
- const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
154
+ const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, isReconnectEnabled, reconnectId, redirectInSameWindow) => {
155
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, chatConfig, getAuthToken, isReconnectEnabled, reconnectId);
137
156
 
138
157
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
139
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
158
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow);
140
159
  }
141
160
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
142
161
 
143
162
 
144
- const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
163
+ const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
145
164
  if (reconnectAvailabilityResponse.redirectURL) {
146
165
  redirectPage(reconnectAvailabilityResponse.redirectURL, redirectInSameWindow);
147
166
  } else {
148
- await startNewChatEmptyRedirectionUrl(chatSDK, dispatch, setAdapter, initStartChat);
167
+ await startNewChatEmptyRedirectionUrl(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, initStartChat);
149
168
  }
150
169
  };
151
170
 
@@ -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
+ }
@@ -12,15 +12,20 @@ import { createTimer, getStateFromCache, isUndefinedOrEmpty } from "../../../com
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";
17
+ import { getAuthClientFunction, handleAuthentication } from "./authHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
18
 
17
19
  let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
20
 
21
+ let widgetInstanceId; // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+
19
23
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
20
- var _props$reconnectChatP;
24
+ var _props$controlProps, _props$reconnectChatP;
21
25
 
22
26
  optionalParams = {}; //Resetting to ensure no stale values
23
- // Can connect to existing chat session
27
+
28
+ 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
24
29
 
25
30
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
26
31
  return;
@@ -28,9 +33,9 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
28
33
 
29
34
 
30
35
  if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
31
- var _props$reconnectChatP2, _props$reconnectChatP3;
36
+ var _props$reconnectChatP2, _props$reconnectChatP3, _props$reconnectChatP4;
32
37
 
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);
38
+ await 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);
34
39
  return;
35
40
  } // Getting reconnectId for authenticated chat
36
41
 
@@ -47,19 +52,17 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
47
52
  payload: ConversationState.ReconnectChat
48
53
  });
49
54
  return;
50
- } // Set custom context params
55
+ } // Setting Proactive chat settings
51
56
 
52
57
 
53
- setCustomContextParams(props, chatSDK); // Setting Proactive chat settings
54
-
55
58
  const isProactiveChat = state.appStates.conversationState === ConversationState.ProactiveChat;
56
59
  const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
57
60
 
58
- setPreChatAndInitiateChat(chatSDK, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
61
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
59
62
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
63
 
61
64
 
62
- const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
65
+ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
63
66
  // Getting prechat Survey Context
64
67
  const parseToJson = false;
65
68
  const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
@@ -82,14 +85,25 @@ const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProact
82
85
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
83
86
  payload: ConversationState.Loading
84
87
  });
85
- await initStartChat(chatSDK, dispatch, setAdapter);
88
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
86
89
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
90
 
88
91
 
89
- const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
92
+ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
90
93
  try {
91
94
  var _newAdapter$activity$, _TelemetryTimers$Widg;
92
95
 
96
+ const authClientFunction = getAuthClientFunction(chatConfig);
97
+
98
+ if (getAuthToken && authClientFunction) {
99
+ // set auth token to chat sdk before start chat
100
+ const authSuccess = await handleAuthentication(chatSDK, chatConfig, getAuthToken);
101
+
102
+ if (!authSuccess) {
103
+ return;
104
+ }
105
+ }
106
+
93
107
  let isStartChatSuccessful = false; //Check if chat retrieved from cache
94
108
 
95
109
  if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
@@ -109,8 +123,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
109
123
  TelemetryTimers.WidgetLoadTimer = createTimer();
110
124
  TelemetryHelper.logSDKEvent(LogLevel.INFO, {
111
125
  Event: TelemetryEvent.StartChatSDKCall
112
- }); // Set optional params
126
+ }); // Set custom context params
113
127
 
128
+ setCustomContextParams(chatSDK);
114
129
  optionalParams = Object.assign({}, params, optionalParams);
115
130
  await chatSDK.startChat(optionalParams);
116
131
  isStartChatSuccessful = true;
@@ -162,6 +177,7 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
162
177
  await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
163
178
 
164
179
  if (isStartChatSuccessful) {
180
+ ActivityStreamHandler.uncork();
165
181
  dispatch({
166
182
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
167
183
  payload: ConversationState.Active
@@ -194,19 +210,20 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
194
210
  }
195
211
  } finally {
196
212
  optionalParams = {};
213
+ widgetInstanceId = "";
197
214
  }
198
215
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
199
216
 
200
217
 
201
218
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
202
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _persistedState$domai6, _persistedState$appSt;
219
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
203
220
 
204
221
  // By pass this function in case of popout chat
205
222
  if (state.appStates.skipChatButtonRendering === true) {
206
223
  return false;
207
224
  }
208
225
 
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
226
+ 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$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.widgetInstanceId) ?? ""); //Connect to only active chat session
210
227
 
211
228
  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
229
  var _persistedState$domai7;
@@ -218,7 +235,7 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
218
235
  const optionalParams = {
219
236
  liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
220
237
  };
221
- await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
238
+ await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
222
239
  return true;
223
240
  } else {
224
241
  return false;
@@ -226,17 +243,28 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
226
243
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
227
244
 
228
245
 
229
- const setCustomContextParams = (props, chatSDK) => {
230
- var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$chatConfig, _persistedState$domai8;
246
+ const setCustomContextParams = chatSDK => {
247
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _persistedState$domai8;
231
248
 
232
249
  // 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);
250
+ 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, widgetInstanceId ?? "");
251
+
252
+ if (!isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
253
+ var _persistedState$domai9, _persistedState$domai10;
234
254
 
235
- 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
- var _persistedState$domai9;
255
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
256
+ const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
257
+ TelemetryHelper.logSDKEvent(LogLevel.WARN, {
258
+ Event: TelemetryEvent.StartChatMethodException,
259
+ ExceptionDetails: {
260
+ exception: errorMessage
261
+ }
262
+ });
263
+ throw new Error(errorMessage);
264
+ }
237
265
 
238
266
  optionalParams = Object.assign({}, optionalParams, {
239
- customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai9 = persistedState.domainStates) === null || _persistedState$domai9 === void 0 ? void 0 : _persistedState$domai9.customContext
267
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
240
268
  });
241
269
  }
242
270
  };