@microsoft/omnichannel-chat-widget 0.1.0-main.edd8c2a → 0.1.0-main.fb426ed

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 (163) hide show
  1. package/README.md +227 -0
  2. package/lib/cjs/assets/Audios.js +8 -0
  3. package/lib/cjs/assets/Icons.js +28 -0
  4. package/lib/cjs/common/Constants.js +38 -4
  5. package/lib/cjs/common/contextDataStore/DataStoreManager.js +14 -0
  6. package/lib/cjs/{assets/assets.d.js → common/interfaces/IContextDataStore.js} +0 -0
  7. package/lib/cjs/common/telemetry/TelemetryConstants.js +42 -3
  8. package/lib/cjs/common/telemetry/TelemetryHelper.js +22 -4
  9. package/lib/cjs/common/telemetry/TelemetryManager.js +28 -9
  10. package/lib/cjs/common/telemetry/defaultConfigs/defaultAriaConfig.js +3 -3
  11. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  12. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +48 -15
  13. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +9 -5
  14. package/lib/cjs/common/utils.js +16 -2
  15. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  16. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +1 -1
  17. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +8 -54
  18. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  19. package/lib/cjs/components/footerstateful/FooterStateful.js +4 -5
  20. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +1 -1
  21. package/lib/cjs/components/headerstateful/HeaderStateful.js +11 -8
  22. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +3 -4
  23. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +18 -22
  24. package/lib/cjs/components/livechatwidget/common/disposeTelemetryLoggers.js +14 -0
  25. package/lib/cjs/components/livechatwidget/common/endChat.js +103 -50
  26. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +5 -0
  27. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +33 -9
  28. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +105 -20
  29. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +11 -7
  30. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +26 -24
  31. package/lib/cjs/components/livechatwidget/common/startChat.js +128 -54
  32. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +3 -3
  33. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +120 -33
  34. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  35. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +8 -0
  36. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  37. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +25 -10
  38. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +10 -4
  39. package/lib/cjs/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  40. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +4 -0
  41. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +51 -73
  42. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +9 -46
  43. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +3 -1
  44. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  45. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +45 -0
  46. package/lib/cjs/contexts/common/ConversationState.js +3 -2
  47. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +10 -7
  48. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +10 -3
  49. package/lib/cjs/contexts/createReducer.js +28 -10
  50. package/lib/cjs/controller/componentController.js +2 -2
  51. package/lib/cjs/plugins/newMessageEventHandler.js +99 -0
  52. package/lib/esm/assets/Audios.js +1 -0
  53. package/lib/esm/assets/Icons.js +11 -0
  54. package/lib/esm/common/Constants.js +34 -3
  55. package/lib/esm/common/contextDataStore/DataStoreManager.js +5 -0
  56. package/lib/esm/common/interfaces/IContextDataStore.js +1 -0
  57. package/lib/esm/common/telemetry/TelemetryConstants.js +38 -2
  58. package/lib/esm/common/telemetry/TelemetryHelper.js +22 -5
  59. package/lib/esm/common/telemetry/TelemetryManager.js +22 -9
  60. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +3 -3
  61. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  62. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +50 -15
  63. package/lib/esm/common/telemetry/loggers/consoleLogger.js +9 -5
  64. package/lib/esm/common/utils.js +12 -1
  65. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  66. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +1 -1
  67. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +8 -50
  68. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  69. package/lib/esm/components/footerstateful/FooterStateful.js +4 -5
  70. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +1 -1
  71. package/lib/esm/components/headerstateful/HeaderStateful.js +12 -9
  72. package/lib/esm/components/livechatwidget/common/createMarkdown.js +3 -3
  73. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +16 -23
  74. package/lib/esm/components/livechatwidget/common/disposeTelemetryLoggers.js +4 -0
  75. package/lib/esm/components/livechatwidget/common/endChat.js +101 -47
  76. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +3 -0
  77. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +29 -9
  78. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +94 -20
  79. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +10 -3
  80. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +23 -22
  81. package/lib/esm/components/livechatwidget/common/startChat.js +123 -51
  82. package/lib/esm/components/livechatwidget/common/startProactiveChat.js +5 -5
  83. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +111 -34
  84. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  85. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +6 -0
  86. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  87. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +23 -9
  88. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +9 -5
  89. package/lib/esm/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  90. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +4 -0
  91. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +2 -12
  92. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +7 -44
  93. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -1
  94. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  95. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +32 -0
  96. package/lib/esm/contexts/common/ConversationState.js +3 -2
  97. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +10 -7
  98. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +10 -3
  99. package/lib/esm/contexts/createReducer.js +28 -9
  100. package/lib/esm/controller/componentController.js +2 -2
  101. package/lib/esm/plugins/newMessageEventHandler.js +82 -0
  102. package/lib/types/assets/Audios.d.ts +1 -0
  103. package/lib/types/assets/Icons.d.ts +11 -0
  104. package/lib/types/common/Constants.d.ts +19 -1
  105. package/lib/types/common/contextDataStore/DataStoreManager.d.ts +4 -0
  106. package/lib/types/common/interfaces/IContextDataStore.d.ts +14 -0
  107. package/lib/types/common/telemetry/TelemetryConstants.d.ts +27 -1
  108. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -0
  109. package/lib/types/common/telemetry/TelemetryManager.d.ts +1 -0
  110. package/lib/types/common/telemetry/definitions/Contracts.d.ts +3 -0
  111. package/lib/types/common/telemetry/definitions/Payload.d.ts +15 -9
  112. package/lib/types/common/telemetry/interfaces/IChatSDKLogger.d.ts +1 -0
  113. package/lib/types/common/telemetry/interfaces/IInternalTelemetryData.d.ts +2 -0
  114. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +12 -0
  115. package/lib/types/common/utils.d.ts +1 -0
  116. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +5 -2
  117. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  118. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +4 -1
  119. package/lib/types/components/livechatwidget/common/disposeTelemetryLoggers.d.ts +1 -0
  120. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  121. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -2
  122. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  123. package/lib/types/components/livechatwidget/common/startChat.d.ts +1 -1
  124. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +2 -1
  125. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  126. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +3 -1
  127. package/lib/types/components/prechatsurveypanestateful/interfaces/IPreChatSurveyPaneStatefulParams.d.ts +1 -1
  128. package/lib/types/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.d.ts +3 -0
  129. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -0
  130. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  131. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  132. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +0 -1
  133. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  134. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  135. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +3 -0
  136. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +11 -8
  137. package/lib/types/plugins/newMessageEventHandler.d.ts +2 -0
  138. package/package.json +11 -11
  139. package/lib/cjs/assets/audios/newMessageNotification.mp3 +0 -0
  140. package/lib/cjs/assets/icons/archiveIcon.svg +0 -3
  141. package/lib/cjs/assets/icons/audioIcon.svg +0 -6
  142. package/lib/cjs/assets/icons/blankIcon.svg +0 -6
  143. package/lib/cjs/assets/icons/excelIcon.svg +0 -6
  144. package/lib/cjs/assets/icons/imageIcon.svg +0 -6
  145. package/lib/cjs/assets/icons/oneNoteIcon.svg +0 -6
  146. package/lib/cjs/assets/icons/pdfIcon.svg +0 -6
  147. package/lib/cjs/assets/icons/powerpointIcon.svg +0 -6
  148. package/lib/cjs/assets/icons/videoIcon.svg +0 -6
  149. package/lib/cjs/assets/icons/visioIcon.svg +0 -6
  150. package/lib/cjs/assets/icons/wordIcon.svg +0 -6
  151. package/lib/esm/assets/assets.d.js +0 -0
  152. package/lib/esm/assets/audios/newMessageNotification.mp3 +0 -0
  153. package/lib/esm/assets/icons/archiveIcon.svg +0 -3
  154. package/lib/esm/assets/icons/audioIcon.svg +0 -6
  155. package/lib/esm/assets/icons/blankIcon.svg +0 -6
  156. package/lib/esm/assets/icons/excelIcon.svg +0 -6
  157. package/lib/esm/assets/icons/imageIcon.svg +0 -6
  158. package/lib/esm/assets/icons/oneNoteIcon.svg +0 -6
  159. package/lib/esm/assets/icons/pdfIcon.svg +0 -6
  160. package/lib/esm/assets/icons/powerpointIcon.svg +0 -6
  161. package/lib/esm/assets/icons/videoIcon.svg +0 -6
  162. package/lib/esm/assets/icons/visioIcon.svg +0 -6
  163. package/lib/esm/assets/icons/wordIcon.svg +0 -6
@@ -1,6 +1,6 @@
1
1
  import "regenerator-runtime/runtime";
2
- import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
- import { Constants } from "../../../common/Constants";
2
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
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
6
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -46,33 +46,107 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
46
46
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
47
 
48
48
 
49
- const handleUnauthenticatedReconnectChat = async (dispatch, reconnectId, initStartChat) => {
50
- const reconnectAvailabilityResponse = await getChatReconnectContext(reconnectId);
49
+ const handleUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
50
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
51
51
 
52
- if (reconnectAvailabilityResponse && reconnectAvailabilityResponse.redirectURL) {
53
- redirectPage(reconnectAvailabilityResponse.redirectURL);
52
+ if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
53
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
54
54
  } else {
55
- const optionalParams = {
56
- reconnectId: reconnectId
57
- };
55
+ await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
56
+ }
57
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+
59
+
60
+ const startUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
61
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
62
+
63
+ if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
64
+ await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
65
+ }
66
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+
68
+
69
+ const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
70
+ const startUnauthenticatedReconnectChat = {
71
+ eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
72
+ };
73
+ BroadcastService.postMessage(startUnauthenticatedReconnectChat);
74
+ const optionalParams = {
75
+ reconnectId: reconnectId
76
+ };
77
+ dispatch({
78
+ type: LiveChatWidgetActionType.SET_RECONNECT_ID,
79
+ payload: reconnectId
80
+ });
81
+ dispatch({
82
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
83
+ payload: ConversationState.Loading
84
+ });
85
+ await initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
86
+ };
87
+
88
+ const redirectPage = (redirectURL, redirectInSameWindow) => {
89
+ const redirectPageRequest = {
90
+ eventName: BroadcastEvent.RedirectPageRequest,
91
+ payload: {
92
+ redirectURL: redirectURL
93
+ }
94
+ };
95
+ BroadcastService.postMessage(redirectPageRequest);
96
+
97
+ if (redirectInSameWindow) {
98
+ window.location.href = redirectURL;
99
+ }
100
+ };
101
+
102
+ const shouldRedirectOrStartNewChat = reconnectAvailabilityResponse => {
103
+ return reconnectAvailabilityResponse && !reconnectAvailabilityResponse.reconnectId;
104
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
105
+
106
+
107
+ const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, initStartChat) => {
108
+ const startUnauthenticatedReconnectChat = {
109
+ eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
110
+ };
111
+ BroadcastService.postMessage(startUnauthenticatedReconnectChat); // Getting PreChat Survey Context
112
+
113
+ const parseToJson = false;
114
+ const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
115
+
116
+ if (preChatSurveyResponse) {
58
117
  dispatch({
59
- type: LiveChatWidgetActionType.SET_RECONNECT_ID,
60
- payload: reconnectId
118
+ type: LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
119
+ payload: preChatSurveyResponse
61
120
  });
121
+ dispatch({
122
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
123
+ payload: ConversationState.Prechat
124
+ });
125
+ } else {
62
126
  dispatch({
63
127
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
64
128
  payload: ConversationState.Loading
65
129
  });
66
- await initStartChat(optionalParams);
130
+ await initStartChat(chatSDK, dispatch, setAdapter);
67
131
  }
68
- };
132
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
133
 
70
- const redirectPage = newUrl => {
71
- const data = {
72
- messageName: Constants.redirectPageRequest,
73
- newUrl: newUrl
74
- };
75
- window.parent.postMessage(data, "*");
134
+
135
+ const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
136
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
137
+
138
+ if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
139
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
140
+ }
141
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
142
+
143
+
144
+ const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
145
+ if (reconnectAvailabilityResponse.redirectURL) {
146
+ redirectPage(reconnectAvailabilityResponse.redirectURL, redirectInSameWindow);
147
+ } else {
148
+ await startNewChatEmptyRedirectionUrl(chatSDK, dispatch, setAdapter, initStartChat);
149
+ }
76
150
  };
77
151
 
78
- export { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat };
152
+ export { getChatReconnectContext, getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat, startUnauthenticatedReconnectChat, handleRedirectUnauthenticatedReconnectChat };
@@ -1,10 +1,9 @@
1
- import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
2
1
  import { RegisterLoggers, TelemetryManager } from "../../../common/telemetry/TelemetryManager";
2
+ import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
3
3
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
4
4
  import { defaultAriaConfig } from "../../../common/telemetry/defaultConfigs/defaultAriaConfig";
5
5
  import { defaultInternalTelemetryData } from "../../../common/telemetry/defaultConfigs/defaultTelemetryInternalData";
6
6
  import { defaultTelemetryConfiguration } from "../../../common/telemetry/defaultConfigs/defaultTelemetryConfiguration";
7
- import packageInfo from "@microsoft/omnichannel-chat-sdk/package.json";
8
7
  export const registerTelemetryLoggers = (props, dispatch) => {
9
8
  var _props$liveChatContex, _props$liveChatContex2;
10
9
 
@@ -17,6 +16,8 @@ export const registerTelemetryLoggers = (props, dispatch) => {
17
16
 
18
17
  TelemetryManager.InternalTelemetryData = (_props$liveChatContex3 = props.liveChatContextFromCache) === null || _props$liveChatContex3 === void 0 ? void 0 : (_props$liveChatContex4 = _props$liveChatContex3.domainStates) === null || _props$liveChatContex4 === void 0 ? void 0 : _props$liveChatContex4.telemetryInternalData;
19
18
  } else {
19
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$chatSDK3, _props$chatSDK3$omnic;
20
+
20
21
  let telemetryData = { ...defaultInternalTelemetryData,
21
22
  telemetryConfig: Object.assign({}, defaultTelemetryConfiguration, telemetryConfig),
22
23
  ariaConfig: Object.assign({}, defaultAriaConfig, telemetryConfig === null || telemetryConfig === void 0 ? void 0 : telemetryConfig.ariaConfigurations)
@@ -27,7 +28,13 @@ export const registerTelemetryLoggers = (props, dispatch) => {
27
28
  }
28
29
 
29
30
  telemetryData = TelemetryHelper.addWidgetDataToTelemetry(telemetryConfig, telemetryData);
30
- telemetryData.OCChatSDKVersion = packageInfo.version;
31
+ telemetryData.OCChatSDKVersion = telemetryConfig.OCChatSDKVersion ?? "0.0.0-0";
32
+ telemetryData.chatComponentVersion = telemetryConfig.chatComponentVersion ?? "0.0.0-0";
33
+ telemetryData.chatWidgetVersion = telemetryConfig.chatWidgetVersion ?? "0.0.0-0";
34
+ telemetryData.orgId = (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId;
35
+ telemetryData.widgetId = (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId;
36
+ telemetryData.orgUrl = (_props$chatSDK3 = props.chatSDK) === null || _props$chatSDK3 === void 0 ? void 0 : (_props$chatSDK3$omnic = _props$chatSDK3.omnichannelConfig) === null || _props$chatSDK3$omnic === void 0 ? void 0 : _props$chatSDK3$omnic.orgUrl;
37
+ TelemetryManager.InternalTelemetryData = telemetryData;
31
38
  dispatch({
32
39
  type: LiveChatWidgetActionType.SET_TELEMETRY_DATA,
33
40
  payload: telemetryData
@@ -1,20 +1,23 @@
1
1
  import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
3
+ import { ConversationState } from "../../../contexts/common/ConversationState";
2
4
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
3
- import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
4
- import { ConversationState } from "../../../contexts/common/ConversationState"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
6
 
6
- export const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, loadSurvey) => {
7
+ export const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, persistedChat) => {
7
8
  try {
8
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
- const context = await chatSDK.getPostChatSurveyContext();
10
- TelemetryHelper.logSDKEvent(LogLevel.INFO, {
11
- Event: TelemetryEvent.PostChatContextCallSucceed,
12
- Description: "Postchat context call succeed."
13
- });
14
- dispatch({
15
- type: LiveChatWidgetActionType.SET_POST_CHAT_CONTEXT,
16
- payload: context
17
- });
9
+ if (!persistedChat) {
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ const context = await chatSDK.getPostChatSurveyContext();
12
+ TelemetryHelper.logSDKEvent(LogLevel.INFO, {
13
+ Event: TelemetryEvent.PostChatContextCallSucceed,
14
+ Description: "Postchat context call succeed."
15
+ });
16
+ dispatch({
17
+ type: LiveChatWidgetActionType.SET_POST_CHAT_CONTEXT,
18
+ payload: context
19
+ });
20
+ }
18
21
  } catch (ex) {
19
22
  TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
20
23
  Event: TelemetryEvent.PostChatContextCallFailed,
@@ -22,19 +25,17 @@ export const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, loadSur
22
25
  exception: ex
23
26
  }
24
27
  });
25
- }
26
- /* -true: setPostChatContextAndLoadSurvey is called after passing all checks from ConfirmationPane and endChatMiddleware in usual scenario.
27
- -false: Below if condition is needed for multi-tab scenarios. So when agent ends a chat and customer has opened chat in multiple tabs,
28
- all tabs should show post chat survey as per existing functionality. But when an agent end a conversation, Omnichannel SDK
29
- getPostChatSurveyContext returns as invalid conversation. To avoid that, caching the survey url is needed after chat starts and
30
- in this case loadSurvey is false
31
- */
28
+ } // eslint-disable-next-line @typescript-eslint/no-unused-vars
32
29
 
33
30
 
34
- if (loadSurvey) {
31
+ BroadcastService.getMessageByEventName("LoadPostChatSurvey").subscribe(msg => {
32
+ dispatch({
33
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
34
+ payload: ConversationState.Loading
35
+ });
35
36
  dispatch({
36
37
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
37
38
  payload: ConversationState.Postchat
38
39
  });
39
- }
40
+ });
40
41
  };
@@ -1,65 +1,84 @@
1
+ import { ChatSDKError, Constants } from "../../../common/Constants";
1
2
  import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
- import { ChatSDKError } from "../../../common/Constants";
3
3
  import { ConversationState } from "../../../contexts/common/ConversationState";
4
+ import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
4
5
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
5
6
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
6
7
  import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
7
8
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
8
9
  import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
9
10
  import { createAdapter } from "./createAdapter";
11
+ import { createOnNewAdapterActivityHandler } from "../../../plugins/newMessageEventHandler";
10
12
  import { createTimer } from "../../../common/utils";
11
- import { getReconnectIdForAuthenticatedChat } from "./reconnectChatHelper";
13
+ import { getReconnectIdForAuthenticatedChat, handleRedirectUnauthenticatedReconnectChat } from "./reconnectChatHelper";
14
+ import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
12
15
  import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
13
- import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
17
 
15
18
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
16
- // Getting PreChat Survey Context
17
- const parseToJson = false;
18
- const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
19
- const showPrechat = state.appStates.conversationState === ConversationState.ProactiveChat ? preChatSurveyResponse && state.appStates.proactiveChatStates.proactiveChatEnablePrechat : preChatSurveyResponse; // Getting reconnectId for authenticated chat
19
+ var _props$reconnectChatP;
20
20
 
21
- const reconnectId = await getReconnectIdForAuthenticatedChat(props, chatSDK);
21
+ if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
22
+ return;
23
+ } // Redirecting if unauthenticated reconnect chat expired
22
24
 
23
- if (reconnectId) {
24
- dispatch({
25
- type: LiveChatWidgetActionType.SET_RECONNECT_ID,
26
- payload: reconnectId
27
- });
28
- dispatch({
29
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
30
- payload: ConversationState.ReconnectChat
31
- });
32
- } else if (showPrechat) {
33
- dispatch({
34
- type: LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
35
- payload: preChatSurveyResponse
36
- });
37
- dispatch({
38
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
39
- payload: ConversationState.Prechat
40
- });
25
+
26
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
27
+ var _props$reconnectChatP2, _props$reconnectChatP3;
28
+
29
+ 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);
41
30
  } else {
42
- dispatch({
43
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
44
- payload: ConversationState.Loading
45
- });
46
- await initStartChat(chatSDK, dispatch, setAdapter);
31
+ // Getting PreChat Survey Context
32
+ const parseToJson = false;
33
+ const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
34
+ const showPrechat = state.appStates.conversationState === ConversationState.ProactiveChat ? preChatSurveyResponse && state.appStates.proactiveChatStates.proactiveChatEnablePrechat : preChatSurveyResponse; // Getting reconnectId for authenticated chat
35
+
36
+ const reconnectId = await getReconnectIdForAuthenticatedChat(props, chatSDK);
37
+
38
+ if (reconnectId) {
39
+ dispatch({
40
+ type: LiveChatWidgetActionType.SET_RECONNECT_ID,
41
+ payload: reconnectId
42
+ });
43
+ dispatch({
44
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
45
+ payload: ConversationState.ReconnectChat
46
+ });
47
+ } else if (showPrechat) {
48
+ dispatch({
49
+ type: LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
50
+ payload: preChatSurveyResponse
51
+ });
52
+ dispatch({
53
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
54
+ payload: ConversationState.Prechat
55
+ });
56
+ setCustomContextParams(props, state);
57
+ } else {
58
+ dispatch({
59
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
60
+ payload: ConversationState.Loading
61
+ });
62
+ setCustomContextParams(props, state);
63
+ await initStartChat(chatSDK, dispatch, setAdapter);
64
+ }
47
65
  }
48
66
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
67
 
50
68
 
51
- const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
69
+ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
52
70
  try {
53
- var _TelemetryTimers$Widg;
71
+ var _newAdapter$activity$, _TelemetryTimers$Widg;
54
72
 
55
73
  try {
56
- TelemetryHelper.logConfigDataEvent(LogLevel.INFO, {
74
+ TelemetryTimers.WidgetLoadTimer = createTimer();
75
+ TelemetryHelper.logSDKEvent(LogLevel.INFO, {
57
76
  Event: TelemetryEvent.StartChatSDKCall
58
77
  });
59
- await chatSDK.startChat(params);
60
- TelemetryTimers.WidgetLoadTimer = createTimer();
78
+ optionalParams = Object.assign({}, params, optionalParams);
79
+ await chatSDK.startChat(optionalParams);
61
80
  } catch (error) {
62
- TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
81
+ TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
63
82
  Event: TelemetryEvent.StartChatMethodException,
64
83
  ExceptionDetails: {
65
84
  exception: `Failed to setup startChat: ${error}`
@@ -68,24 +87,42 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
68
87
  }
69
88
 
70
89
  const newAdapter = await createAdapter(chatSDK);
71
- setAdapter(newAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
90
+ setAdapter(newAdapter);
91
+ const chatToken = await chatSDK.getChatToken();
92
+ newAdapter === null || newAdapter === void 0 ? void 0 : (_newAdapter$activity$ = newAdapter.activity$) === null || _newAdapter$activity$ === void 0 ? void 0 : _newAdapter$activity$.subscribe(createOnNewAdapterActivityHandler(chatToken === null || chatToken === void 0 ? void 0 : chatToken.chatId, chatToken === null || chatToken === void 0 ? void 0 : chatToken.visitorId));
72
93
 
73
- if (chatSDK !== null && chatSDK !== void 0 && chatSDK.getVoiceVideoCalling) {
94
+ if (!persistedState) {
74
95
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
- const chatToken = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatToken());
96
+ if (chatSDK !== null && chatSDK !== void 0 && chatSDK.getVoiceVideoCalling) {
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ const chatToken = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatToken());
99
+ dispatch({
100
+ type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
101
+ payload: chatToken
102
+ });
103
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
104
+
105
+
106
+ const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
76
107
  dispatch({
77
- type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
78
- payload: chatToken
108
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
109
+ payload: liveChatContext
79
110
  });
80
- }
111
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch);
112
+ await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
81
113
 
82
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch, false);
83
- await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
114
+ dispatch({
115
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
116
+ payload: ConversationState.Active
117
+ });
118
+ } else {
119
+ dispatch({
120
+ type: LiveChatWidgetActionType.SET_WIDGET_STATE,
121
+ payload: persistedState
122
+ });
123
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
124
+ }
84
125
 
85
- dispatch({
86
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
87
- payload: ConversationState.Active
88
- });
89
126
  TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
90
127
  Event: TelemetryEvent.WidgetLoadComplete,
91
128
  Description: "Widget load complete",
@@ -93,9 +130,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
93
130
  });
94
131
  } catch (ex) {
95
132
  TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
96
- Event: TelemetryEvent.StartChatFailed,
133
+ Event: TelemetryEvent.WidgetLoadFailed,
97
134
  ExceptionDetails: {
98
- Exception: `Start Chat Failed: ${ex}`
135
+ Exception: `Widget load Failed: ${ex}`
99
136
  }
100
137
  });
101
138
  NotificationHandler.notifyError(NotificationScenarios.Connection, "Start Chat Failed: " + ex); // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -111,6 +148,41 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
111
148
  });
112
149
  }
113
150
  }
151
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
+
153
+
154
+ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
155
+ var _DataStoreManager$cli, _persistedState$domai;
156
+
157
+ const widgetStateFromCache = (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(Constants.widgetStateDataKey, "localStorage");
158
+ const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
159
+
160
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext) {
161
+ var _persistedState$domai2;
162
+
163
+ dispatch({
164
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
165
+ payload: ConversationState.Loading
166
+ });
167
+ const optionalParams = {
168
+ liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai2 = persistedState.domainStates) === null || _persistedState$domai2 === void 0 ? void 0 : _persistedState$domai2.liveChatContext
169
+ };
170
+ await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
171
+ return true;
172
+ } else {
173
+ return false;
174
+ }
175
+ };
176
+
177
+ const setCustomContextParams = (props, state) => {
178
+ var _props$chatConfig, _state$domainStates;
179
+
180
+ // Add custom context if any only for unauthenticated chat
181
+ if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && (_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.customContext) {
182
+ optionalParams = Object.assign({}, optionalParams, {
183
+ customContext: state.domainStates.customContext
184
+ });
185
+ }
114
186
  };
115
187
 
116
188
  export { prepareStartChat, initStartChat };
@@ -2,14 +2,14 @@ import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryCon
2
2
  import { ConversationState } from "../../../contexts/common/ConversationState";
3
3
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
4
4
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
5
- import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager"; // Defines startProactiveChat callback
6
-
7
- export const startProactiveChat = (dispatch, bodyTitle, showPrechat, inNewWindow) => {
5
+ import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
6
+ // Defines startProactiveChat callback
7
+ export const startProactiveChat = (dispatch, notificationConfig, enablePreChat, inNewWindow) => {
8
8
  dispatch({
9
9
  type: LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
10
10
  payload: {
11
- proactiveChatBodyTitle: bodyTitle ?? "",
12
- proactiveChatEnablePrechat: showPrechat ?? false,
11
+ proactiveChatBodyTitle: notificationConfig && notificationConfig.message ? notificationConfig.message : "",
12
+ proactiveChatEnablePrechat: enablePreChat ?? false,
13
13
  proactiveChatInNewWindow: inNewWindow ?? false
14
14
  }
15
15
  });