@microsoft/omnichannel-chat-widget 1.0.3-main.c925679 → 1.0.4-main.337860d

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 (35) hide show
  1. package/lib/cjs/common/Constants.js +4 -0
  2. package/lib/cjs/common/telemetry/TelemetryConstants.js +2 -1
  3. package/lib/cjs/common/telemetry/TelemetryManager.js +5 -2
  4. package/lib/cjs/common/utils.js +22 -2
  5. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +1 -10
  6. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +7 -6
  7. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +7 -1
  8. package/lib/cjs/components/livechatwidget/common/endChat.js +32 -43
  9. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +7 -8
  10. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +2 -1
  11. package/lib/cjs/components/livechatwidget/common/startChat.js +61 -20
  12. package/lib/cjs/components/livechatwidget/common/updateSessionDataForTelemetry.js +2 -1
  13. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +20 -20
  14. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +4 -4
  15. package/lib/cjs/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -2
  16. package/lib/esm/common/Constants.js +4 -0
  17. package/lib/esm/common/telemetry/TelemetryConstants.js +2 -1
  18. package/lib/esm/common/telemetry/TelemetryManager.js +5 -2
  19. package/lib/esm/common/utils.js +20 -1
  20. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +4 -13
  21. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +7 -6
  22. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +7 -1
  23. package/lib/esm/components/livechatwidget/common/endChat.js +31 -41
  24. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +7 -8
  25. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +2 -1
  26. package/lib/esm/components/livechatwidget/common/startChat.js +62 -21
  27. package/lib/esm/components/livechatwidget/common/updateSessionDataForTelemetry.js +2 -1
  28. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +21 -21
  29. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +4 -4
  30. package/lib/esm/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -2
  31. package/lib/types/common/Constants.d.ts +3 -1
  32. package/lib/types/common/telemetry/TelemetryConstants.d.ts +3 -2
  33. package/lib/types/common/utils.d.ts +1 -0
  34. package/lib/types/components/livechatwidget/common/endChat.d.ts +2 -3
  35. package/package.json +3 -4
@@ -112,6 +112,9 @@ _defineProperty(Constants, "SessionCacheSuffix", "session");
112
112
  _defineProperty(Constants, "PopoutCacheSuffix", "popout");
113
113
  // Visibility timeout for conversation details
114
114
  _defineProperty(Constants, "LWICheckOnVisibilityTimeout", 3 * 60 * 1000);
115
+ // 3 minute
116
+ // Popup mode custom context response event message name
117
+ _defineProperty(Constants, "InitContextParamsResponse", "initContextParamsResponse");
115
118
  const Regex = (_class = class Regex {}, _defineProperty(_class, "EmailRegex", "(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"), _class);
116
119
  exports.Regex = Regex;
117
120
  class HtmlIdNames {}
@@ -186,6 +189,7 @@ let ChatSDKError;
186
189
  exports.ChatSDKError = ChatSDKError;
187
190
  (function (ChatSDKError) {
188
191
  ChatSDKError["WidgetUseOutsideOperatingHour"] = "WidgetUseOutsideOperatingHour";
192
+ ChatSDKError["AuthContactIdNotFoundFailure"] = "AuthContactIdNotFoundFailure";
189
193
  })(ChatSDKError || (exports.ChatSDKError = ChatSDKError = {}));
190
194
  let EnvironmentVersion;
191
195
  exports.EnvironmentVersion = EnvironmentVersion;
@@ -36,7 +36,6 @@ exports.BroadcastEvent = BroadcastEvent;
36
36
  BroadcastEvent["StartProactiveChat"] = "StartProactiveChat";
37
37
  BroadcastEvent["ProactiveChatStartChat"] = "ProactiveChatStartChat";
38
38
  BroadcastEvent["ProactiveChatStartPopoutChat"] = "ProactiveChatStartPopoutChat";
39
- BroadcastEvent["ProactiveChatIsInPopoutMode"] = "ProactiveChatIsInPopoutMode";
40
39
  BroadcastEvent["ResetProactiveChatParams"] = "ResetProactiveChatParams";
41
40
  BroadcastEvent["InvalidAdaptiveCardFormat"] = "InvalidAdaptiveCardFormat";
42
41
  BroadcastEvent["NewMessageSent"] = "NewMessageSent";
@@ -64,6 +63,7 @@ exports.BroadcastEvent = BroadcastEvent;
64
63
  BroadcastEvent["HideChatVisibilityChangeEvent"] = "hideChatVisibilityChangeEvent";
65
64
  BroadcastEvent["UpdateSessionDataForTelemetry"] = "UpdateSessionDataForTelemetry";
66
65
  BroadcastEvent["UpdateConversationDataForTelemetry"] = "UpdateConversationDataForTelemetry";
66
+ BroadcastEvent["ContactIdNotFound"] = "ContactIdNotFound";
67
67
  })(BroadcastEvent || (exports.BroadcastEvent = BroadcastEvent = {}));
68
68
  let TelemetryEvent;
69
69
  exports.TelemetryEvent = TelemetryEvent;
@@ -108,6 +108,7 @@ exports.TelemetryEvent = TelemetryEvent;
108
108
  TelemetryEvent["ChatVisibilityChanged"] = "ChatVisibilityChanged";
109
109
  TelemetryEvent["EndChatSucceeded"] = "EndChatSucceeded";
110
110
  TelemetryEvent["EndChatFailed"] = "EndChatFailed";
111
+ TelemetryEvent["SettingCustomContext"] = "SettingCustomContext";
111
112
  TelemetryEvent["WebChatLoaded"] = "WebChatLoaded";
112
113
  TelemetryEvent["LCWChatButtonClicked"] = "LCWChatButtonClicked";
113
114
  TelemetryEvent["LCWChatButtonShow"] = "LCWChatButtonShow";
@@ -64,14 +64,17 @@ const RegisterLoggers = () => {
64
64
  };
65
65
  const logTelemetry = telemetryEvent => {
66
66
  loggers.map(logger => {
67
- var _payload;
67
+ var _payload, _telemetryInput$paylo;
68
68
  const logLevel = telemetryEvent.logLevel ?? _TelemetryConstants.LogLevel.INFO;
69
69
  const scenarioType = ((_payload = telemetryEvent.payload) === null || _payload === void 0 ? void 0 : _payload.scenarioType) ?? _TelemetryConstants.ScenarioType.UNDEFINED;
70
70
  const telemetryInput = parseInput(telemetryEvent === null || telemetryEvent === void 0 ? void 0 : telemetryEvent.payload, scenarioType);
71
71
  telemetryInput.telemetryInfo = {
72
72
  telemetryInfo: _TelemetryHelper.TelemetryHelper.buildTelemetryEvent(logLevel, telemetryInput)
73
73
  };
74
- logger.log(logLevel, telemetryInput);
74
+ //Do not log events without an Event Name
75
+ if (telemetryInput !== null && telemetryInput !== void 0 && (_telemetryInput$paylo = telemetryInput.payload) !== null && _telemetryInput$paylo !== void 0 && _telemetryInput$paylo.Event) {
76
+ logger.log(logLevel, telemetryInput);
77
+ }
75
78
  });
76
79
  };
77
80
  return registerLoggers();
@@ -3,9 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.setTabIndices = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseAdaptiveCardPayload = exports.newGuid = exports.isUndefinedOrEmpty = exports.isNullOrUndefined = exports.isNullOrEmptyString = exports.getWidgetEndChatEventName = exports.getWidgetCacheIdfromProps = exports.getWidgetCacheId = exports.getTimestampHourMinute = exports.getStateFromCache = exports.getLocaleDirection = exports.getIconText = exports.getDomain = exports.getConversationDetailsCall = exports.getBroadcastChannelName = exports.findParentFocusableElementsWithoutChildContainer = exports.findAllFocusableElement = exports.extractPreChatSurveyResponseValues = exports.escapeHtml = exports.debounceLeading = exports.createTimer = exports.changeLanguageCodeFormatForWebChat = exports.addDelayInMs = void 0;
6
+ exports.setTabIndices = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseAdaptiveCardPayload = exports.newGuid = exports.isUndefinedOrEmpty = exports.isNullOrUndefined = exports.isNullOrEmptyString = exports.getWidgetEndChatEventName = exports.getWidgetCacheIdfromProps = exports.getWidgetCacheId = exports.getTimestampHourMinute = exports.getStateFromCache = exports.getLocaleDirection = exports.getIconText = exports.getDomain = exports.getConversationDetailsCall = exports.getBroadcastChannelName = exports.findParentFocusableElementsWithoutChildContainer = exports.findAllFocusableElement = exports.extractPreChatSurveyResponseValues = exports.escapeHtml = exports.debounceLeading = exports.createTimer = exports.checkContactIdError = exports.changeLanguageCodeFormatForWebChat = exports.addDelayInMs = void 0;
7
7
  var _Constants = require("./Constants");
8
8
  var _TelemetryConstants = require("./telemetry/TelemetryConstants");
9
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
9
10
  var _DataStoreManager = require("./contextDataStore/DataStoreManager");
10
11
  var _KeyCodes = require("./KeyCodes");
11
12
  var _md5Typescript = require("md5-typescript");
@@ -385,8 +386,13 @@ const getConversationDetailsCall = async chatSDK => {
385
386
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
386
387
  let conversationDetails = undefined;
387
388
  try {
389
+ _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
390
+ Event: _TelemetryConstants.TelemetryEvent.GetConversationDetailsCallStarted,
391
+ Description: "Conversation details call started"
392
+ });
388
393
  conversationDetails = await chatSDK.getConversationDetails();
389
394
  } catch (error) {
395
+ checkContactIdError(error);
390
396
  _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
391
397
  Event: _TelemetryConstants.TelemetryEvent.GetConversationDetailsCallFailed,
392
398
  ExceptionDetails: {
@@ -396,4 +402,18 @@ const getConversationDetailsCall = async chatSDK => {
396
402
  }
397
403
  return conversationDetails;
398
404
  };
399
- exports.getConversationDetailsCall = getConversationDetailsCall;
405
+
406
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
407
+ exports.getConversationDetailsCall = getConversationDetailsCall;
408
+ const checkContactIdError = e => {
409
+ if ((e === null || e === void 0 ? void 0 : e.message) === _Constants.ChatSDKError.AuthContactIdNotFoundFailure) {
410
+ const contactIdNotFoundErrorEvent = {
411
+ eventName: _TelemetryConstants.BroadcastEvent.ContactIdNotFound,
412
+ payload: {
413
+ error: e
414
+ }
415
+ };
416
+ _omnichannelChatComponents.BroadcastService.postMessage(contactIdNotFoundErrorEvent);
417
+ }
418
+ };
419
+ exports.checkContactIdError = checkContactIdError;
@@ -28,7 +28,6 @@ const ChatButtonStateful = props => {
28
28
  } = props;
29
29
  //Setting OutOfOperatingHours Flag
30
30
  const [outOfOperatingHours, setOutOfOperatingHours] = (0, _react.useState)(((_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : (_state$domainStates$l2 = _state$domainStates$l.LiveWSAndLiveChatEngJoin) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.OutOfOperatingHours) === "True");
31
- const proactiveChatInNewWindow = (0, _react.useRef)(state.appStates.proactiveChatStates.proactiveChatInNewWindow);
32
31
  const outOfOfficeStyleProps = Object.assign({}, _defaultOutOfOfficeChatButtonStyleProps.defaultOutOfOfficeChatButtonStyleProps, outOfOfficeButtonProps === null || outOfOfficeButtonProps === void 0 ? void 0 : outOfOfficeButtonProps.styleProps);
33
32
  const controlProps = {
34
33
  id: "oc-lcw-chat-button",
@@ -41,12 +40,7 @@ const ChatButtonStateful = props => {
41
40
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
42
41
  Event: _TelemetryConstants.TelemetryEvent.LCWChatButtonClicked
43
42
  });
44
- if (proactiveChatInNewWindow.current) {
45
- const proactiveChatIsInPopoutModeEvent = {
46
- eventName: _TelemetryConstants.BroadcastEvent.ProactiveChatIsInPopoutMode
47
- };
48
- _omnichannelChatComponents.BroadcastService.postMessage(proactiveChatIsInPopoutModeEvent);
49
- } else if (state.appStates.isMinimized) {
43
+ if (state.appStates.isMinimized) {
50
44
  dispatch({
51
45
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_MINIMIZED,
52
46
  payload: false
@@ -99,9 +93,6 @@ const ChatButtonStateful = props => {
99
93
  });
100
94
  }
101
95
  }, []);
102
- (0, _react.useEffect)(() => {
103
- proactiveChatInNewWindow.current = state.appStates.proactiveChatStates.proactiveChatInNewWindow;
104
- }, [state.appStates.proactiveChatStates.proactiveChatInNewWindow]);
105
96
  return /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.ChatButton, {
106
97
  componentOverrides: buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.componentOverrides,
107
98
  controlProps: outOfOperatingHours ? outOfOfficeControlProps : controlProps,
@@ -160,12 +160,13 @@ const beautifyChatTranscripts = (chatTranscripts, renderMarkDown, attachmentMess
160
160
  const downloadTranscript = async (chatSDK, renderMarkDown, bannerMessageOnError, attachmentMessage, state) => {
161
161
  var _state$domainStates, _state$domainStates2, _state$domainStates2$;
162
162
  // Need to keep existing request id for scenarios when trnascript is downloaded after endchat
163
- const existingRequestId = chatSDK.requestId;
164
- chatSDK.chatToken = state === null || state === void 0 ? void 0 : (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.chatToken;
165
- chatSDK.requestId = state === null || state === void 0 ? void 0 : (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : (_state$domainStates2$ = _state$domainStates2.chatToken) === null || _state$domainStates2$ === void 0 ? void 0 : _state$domainStates2$.requestId;
166
- let data = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getLiveChatTranscript());
167
- // This is used for allowing to start next chat
168
- chatSDK.requestId = existingRequestId;
163
+ const liveChatContext = {
164
+ chatToken: state === null || state === void 0 ? void 0 : (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.chatToken,
165
+ requestId: state === null || state === void 0 ? void 0 : (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : (_state$domainStates2$ = _state$domainStates2.chatToken) === null || _state$domainStates2$ === void 0 ? void 0 : _state$domainStates2$.requestId
166
+ };
167
+ let data = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getLiveChatTranscript({
168
+ liveChatContext
169
+ }));
169
170
  if (typeof data === _Constants.Constants.String) {
170
171
  data = JSON.parse(data);
171
172
  }
@@ -1196,7 +1196,13 @@ const dummyDefaultProps = {
1196
1196
  borderRadius: "0 0 4px 4px",
1197
1197
  borderWidth: "3px",
1198
1198
  backgroundColor: "#FFFFFF",
1199
- borderColor: "#F1F1F1"
1199
+ borderColor: "#F1F1F1",
1200
+ position: "initial",
1201
+ height: "100%",
1202
+ width: "100%",
1203
+ left: "0%",
1204
+ top: "0%",
1205
+ display: "contents"
1200
1206
  }
1201
1207
  },
1202
1208
  isCustomerVoiceSurveyCompact: undefined
@@ -3,23 +3,23 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.prepareEndChat = exports.getConversationDetails = exports.endChat = void 0;
6
+ exports.prepareEndChat = exports.endChat = void 0;
7
+ var _Constants = require("../../../common/Constants");
7
8
  var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
9
+ var _authHelper = require("./authHelper");
10
+ var _utils = require("../../../common/utils");
11
+ var _renderSurveyHelpers = require("./renderSurveyHelpers");
8
12
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
9
13
  var _ConversationState = require("../../../contexts/common/ConversationState");
10
14
  var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
11
15
  var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
12
16
  var _WebChatStoreLoader = require("../../webchatcontainerstateful/webchatcontroller/WebChatStoreLoader");
13
17
  var _defaultWebChatContainerStatefulProps = require("../../webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps");
14
- var _utils = require("../../../common/utils");
15
- var _authHelper = require("./authHelper");
16
- var _renderSurveyHelpers = require("./renderSurveyHelpers");
17
- var _Constants = require("../../../common/Constants");
18
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
19
  const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, uwid) => {
20
20
  try {
21
21
  var _conversationDetails$, _state$domainStates, _state$domainStates2;
22
- const conversationDetails = await getConversationDetails(chatSDK);
22
+ const conversationDetails = await (0, _utils.getConversationDetailsCall)(chatSDK);
23
23
 
24
24
  // Use Case : When post chat is not configured
25
25
  if ((conversationDetails === null || conversationDetails === void 0 ? void 0 : (_conversationDetails$ = conversationDetails.canRenderPostChat) === null || _conversationDetails$ === void 0 ? void 0 : _conversationDetails$.toLowerCase()) === _Constants.Constants.false) {
@@ -125,18 +125,12 @@ const endChat = async function (props, chatSDK, state, dispatch, setAdapter, set
125
125
  }
126
126
  });
127
127
  } finally {
128
- var _state$appStates3;
129
128
  dispatch({
130
129
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
131
130
  payload: 0
132
131
  });
133
- //Always allow to close the chat for embedded mode irrespective of end chat errors
134
- if (!(state !== null && state !== void 0 && (_state$appStates3 = state.appStates) !== null && _state$appStates3 !== void 0 && _state$appStates3.hideStartChatButton)) {
135
- dispatch({
136
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
137
- payload: _ConversationState.ConversationState.Closed
138
- });
139
- }
132
+ // Always allow to close the chat for embedded mode irrespective of end chat errors
133
+ closeChatWidget(dispatch, props, state);
140
134
  }
141
135
  }
142
136
  if (postMessageToOtherTab && !(0, _utils.isNullOrEmptyString)(uwid)) {
@@ -150,10 +144,6 @@ const endChat = async function (props, chatSDK, state, dispatch, setAdapter, set
150
144
  exports.endChat = endChat;
151
145
  const endChatStateCleanUp = async dispatch => {
152
146
  // Need to clear these states immediately when chat ended from OC.
153
- dispatch({
154
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
155
- payload: undefined
156
- });
157
147
  dispatch({
158
148
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
159
149
  payload: undefined
@@ -202,6 +192,27 @@ const closeChatStateCleanUp = async dispatch => {
202
192
  }
203
193
  });
204
194
  };
195
+ const closeChatWidget = (dispatch, props, state) => {
196
+ var _state$appStates3;
197
+ if (state !== null && state !== void 0 && (_state$appStates3 = state.appStates) !== null && _state$appStates3 !== void 0 && _state$appStates3.hideStartChatButton) {
198
+ var _props$controlProps2, _props$controlProps3;
199
+ // Only close chat if header is enabled for popout
200
+ // TODO : This condition needs to be removed eventually when the filler UX is ready for popout, removing this condition would show a blank screen for OOB Widget
201
+ if ((props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.hideHeader) === undefined || (props === null || props === void 0 ? void 0 : (_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.hideHeader) === false) {
202
+ dispatch({
203
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
204
+ payload: _ConversationState.ConversationState.Closed
205
+ });
206
+ }
207
+ return;
208
+ }
209
+
210
+ // Embedded chat
211
+ dispatch({
212
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
213
+ payload: _ConversationState.ConversationState.Closed
214
+ });
215
+ };
205
216
 
206
217
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
207
218
  const handleAuthenticationIfEnabled = async (props, chatSDK) => {
@@ -239,28 +250,6 @@ const chatTokenCleanUp = async dispatch => {
239
250
 
240
251
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
241
252
  const getEndChatEventName = async (chatSDK, props) => {
242
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2;
243
- return (0, _utils.getWidgetEndChatEventName)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.widgetInstanceId) ?? "");
244
- };
245
-
246
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
247
- const getConversationDetails = async chatSDK => {
248
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
249
- let conversationDetails = undefined;
250
- try {
251
- _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
252
- Event: _TelemetryConstants.TelemetryEvent.GetConversationDetailsCallStarted,
253
- Description: "Conversation details call started"
254
- });
255
- conversationDetails = await chatSDK.getConversationDetails();
256
- } catch (error) {
257
- _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
258
- Event: _TelemetryConstants.TelemetryEvent.GetConversationDetailsCallFailed,
259
- ExceptionDetails: {
260
- exception: `Get Conversation Details Call Failed : ${error}`
261
- }
262
- });
263
- }
264
- return conversationDetails;
265
- };
266
- exports.getConversationDetails = getConversationDetails;
253
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps4;
254
+ return (0, _utils.getWidgetEndChatEventName)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.widgetInstanceId) ?? "");
255
+ };
@@ -4,22 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.initWebChatComposer = void 0;
7
+ var _Constants = require("../../../common/Constants");
7
8
  var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
8
- var _botframeworkWebchat = require("botframework-webchat");
9
+ var _utils = require("../../../common/utils");
10
+ var _HyperlinkTextOverrideRenderer = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/markdownrenderers/HyperlinkTextOverrideRenderer"));
9
11
  var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
10
12
  var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
11
13
  var _WebChatStoreLoader = require("../../webchatcontainerstateful/webchatcontroller/WebChatStoreLoader");
12
14
  var _attachmentProcessingMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware"));
13
- var _utils = require("../../../common/utils");
14
15
  var _channelDataMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware"));
15
16
  var _activityMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware");
16
17
  var _attachmentMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware"));
17
18
  var _attachmentUploadValidatorMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware"));
18
19
  var _avatarMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware");
20
+ var _cardActionMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware");
19
21
  var _conversationEndMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware"));
20
22
  var _dataMaskingMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware"));
21
23
  var _createMarkdown = require("./createMarkdown");
22
24
  var _maxMessageSizeValidator = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator"));
25
+ var _messageTimestampMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware"));
26
+ var _botframeworkWebchat = require("botframework-webchat");
23
27
  var _WebChatLogger = require("../../webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger");
24
28
  var _defaultAttachmentProps = require("../../webchatcontainerstateful/common/defaultProps/defaultAttachmentProps");
25
29
  var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
@@ -30,11 +34,6 @@ var _htmlPlayerMiddleware = _interopRequireDefault(require("../../webchatcontain
30
34
  var _htmlTextMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware"));
31
35
  var _preProcessingMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware"));
32
36
  var _sanitizationMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware"));
33
- var _cardActionMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware");
34
- var _messageTimestampMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware"));
35
- var _Constants = require("../../../common/Constants");
36
- var _endChat = require("./endChat");
37
- var _HyperlinkTextOverrideRenderer = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/markdownrenderers/HyperlinkTextOverrideRenderer"));
38
37
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
38
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
39
  const initWebChatComposer = (props, state, dispatch, chatSDK) => {
@@ -53,7 +52,7 @@ const initWebChatComposer = (props, state, dispatch, chatSDK) => {
53
52
  var _state$domainStates$l, _state$domainStates$l2, _state$domainStates$l3, _props$webChatContain5;
54
53
  const conversationEndCallback = async () => {
55
54
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
- const conversationDetails = await (0, _endChat.getConversationDetails)(chatSDK);
55
+ const conversationDetails = await (0, _utils.getConversationDetailsCall)(chatSDK);
57
56
  if ((conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.participantType) === _Constants.ParticipantType.Bot) {
58
57
  dispatch({
59
58
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_ENDED_BY,
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.isReconnectEnabled = exports.handleChatReconnect = exports.getChatReconnectContext = void 0;
7
7
  require("regenerator-runtime/runtime");
8
8
  var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
9
- var _authHelper = require("./authHelper");
10
9
  var _utils = require("../../../common/utils");
10
+ var _authHelper = require("./authHelper");
11
11
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
12
12
  var _ConversationState = require("../../../contexts/common/ConversationState");
13
13
  var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
@@ -75,6 +75,7 @@ const getChatReconnectContext = async (chatSDK, chatConfig, props, isAuthenticat
75
75
  }
76
76
  return reconnectChatContext;
77
77
  } catch (error) {
78
+ (0, _utils.checkContactIdError)(error);
78
79
  _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
79
80
  Event: _TelemetryConstants.TelemetryEvent.GetChatReconnectContextSDKCallFailed,
80
81
  ExceptionDetails: {
@@ -130,7 +130,7 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, props, params, persi
130
130
  try {
131
131
  var _window$Microsoft, _window$Microsoft$Dyn, _window$Microsoft$Dyn2, _window$Microsoft$Dyn3;
132
132
  // Set custom context params
133
- setCustomContextParams();
133
+ await setCustomContextParams(props);
134
134
  const defaultOptionalParams = {
135
135
  sendDefaultInitContext: true,
136
136
  isProactiveChat: !!(params !== null && params !== void 0 && params.isProactiveChat),
@@ -140,6 +140,7 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, props, params, persi
140
140
  await chatSDK.startChat(startChatOptionalParams);
141
141
  isStartChatSuccessful = true;
142
142
  } catch (error) {
143
+ (0, _utils.checkContactIdError)(error);
143
144
  _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
144
145
  Event: _TelemetryConstants.TelemetryEvent.StartChatMethodException,
145
146
  ExceptionDetails: {
@@ -286,25 +287,35 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
286
287
  };
287
288
 
288
289
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
289
- const setCustomContextParams = () => {
290
- var _persistedState$domai8;
290
+ const setCustomContextParams = async props => {
291
+ var _props$chatConfig, _props$chatConfig$Liv, _persistedState$domai8;
292
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
293
+ const isAuthenticatedChat = props !== null && props !== void 0 && (_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && (_props$chatConfig$Liv = _props$chatConfig.LiveChatConfigAuthSettings) !== null && _props$chatConfig$Liv !== void 0 && _props$chatConfig$Liv.msdyn_javascriptclientfunction ? true : false;
294
+ //Should not set custom context for auth chat
295
+ if (isAuthenticatedChat) {
296
+ return;
297
+ }
298
+ if ((0, _utils.isNullOrEmptyString)(widgetInstanceId)) {
299
+ widgetInstanceId = (0, _utils.getWidgetCacheIdfromProps)(props);
300
+ }
291
301
  // Add custom context only for unauthenticated chat
292
302
  const persistedState = (0, _utils.getStateFromCache)(widgetInstanceId);
293
- if (!(0, _utils.isUndefinedOrEmpty)(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
294
- var _persistedState$domai9, _persistedState$domai10;
295
- if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
296
- const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
297
- _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.WARN, {
298
- Event: _TelemetryConstants.TelemetryEvent.StartChatMethodException,
299
- ExceptionDetails: {
300
- exception: errorMessage
301
- }
302
- });
303
- throw new Error(errorMessage);
304
- }
303
+ const customContextLocal = (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext) ?? (props === null || props === void 0 ? void 0 : props.initialCustomContext);
304
+ if (customContextLocal) {
305
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
306
+ Event: _TelemetryConstants.TelemetryEvent.SettingCustomContext,
307
+ Description: "Setting custom context for unauthenticated chat"
308
+ });
305
309
  optionalParams = Object.assign({}, optionalParams, {
306
- customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
310
+ customContext: customContextLocal
307
311
  });
312
+ } else {
313
+ const customContextFromParent = await getInitContextParamsForPopout();
314
+ if (!(0, _utils.isUndefinedOrEmpty)(customContextFromParent === null || customContextFromParent === void 0 ? void 0 : customContextFromParent.contextVariables)) {
315
+ optionalParams = Object.assign({}, optionalParams, {
316
+ customContext: customContextFromParent.contextVariables
317
+ });
318
+ }
308
319
  }
309
320
  };
310
321
  const canStartPopoutChat = async props => {
@@ -313,9 +324,9 @@ const canStartPopoutChat = async props => {
313
324
  }
314
325
  popoutWidgetInstanceId = (0, _utils.getWidgetCacheIdfromProps)(props, true);
315
326
  if (!(0, _utils.isNullOrEmptyString)(popoutWidgetInstanceId)) {
316
- var _persistedState$domai11, _persistedState$appSt2;
327
+ var _persistedState$domai9, _persistedState$appSt2;
317
328
  const persistedState = (0, _utils.getStateFromCache)(popoutWidgetInstanceId);
318
- if (persistedState && !(0, _utils.isUndefinedOrEmpty)(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai11 = persistedState.domainStates) === null || _persistedState$domai11 === void 0 ? void 0 : _persistedState$domai11.liveChatContext) && (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$appSt2 = persistedState.appStates) === null || _persistedState$appSt2 === void 0 ? void 0 : _persistedState$appSt2.conversationState) === _ConversationState.ConversationState.Active) {
329
+ if (persistedState && !(0, _utils.isUndefinedOrEmpty)(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai9 = persistedState.domainStates) === null || _persistedState$domai9 === void 0 ? void 0 : _persistedState$domai9.liveChatContext) && (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$appSt2 = persistedState.appStates) === null || _persistedState$appSt2 === void 0 ? void 0 : _persistedState$appSt2.conversationState) === _ConversationState.ConversationState.Active) {
319
330
  // Initiate popout chat
320
331
  _omnichannelChatComponents.BroadcastService.postMessage({
321
332
  eventName: _TelemetryConstants.BroadcastEvent.InitiateStartChatInPopoutMode
@@ -341,7 +352,7 @@ const checkIfConversationStillValid = async (chatSDK, dispatch, state) => {
341
352
  });
342
353
  try {
343
354
  chatSDK.requestId = requestIdFromCache;
344
- conversationDetails = await chatSDK.getConversationDetails();
355
+ conversationDetails = await (0, _utils.getConversationDetailsCall)(chatSDK);
345
356
  if (Object.keys(conversationDetails).length === 0) {
346
357
  chatSDK.requestId = currentRequestId;
347
358
  return false;
@@ -366,4 +377,34 @@ const checkIfConversationStillValid = async (chatSDK, dispatch, state) => {
366
377
  return false;
367
378
  }
368
379
  };
369
- exports.checkIfConversationStillValid = checkIfConversationStillValid;
380
+
381
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
382
+ exports.checkIfConversationStillValid = checkIfConversationStillValid;
383
+ const getInitContextParamsForPopout = async () => {
384
+ return window.opener ? await getInitContextParamForPopoutFromOuterScope(window.opener) : null;
385
+ };
386
+
387
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
388
+ const getInitContextParamForPopoutFromOuterScope = async scope => {
389
+ let payload;
390
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
391
+ let waitPromiseResolve;
392
+ const waitPromise = new Promise((res, rej) => {
393
+ waitPromiseResolve = res;
394
+ setTimeout(() => rej("Failed to find method in outer scope"), 5000);
395
+ }).catch(rej => console.warn(rej));
396
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
397
+ const getInitContextParamsFromParent = e => {
398
+ if (e.data && e.data.messageName == _Constants.Constants.InitContextParamsResponse) {
399
+ payload = e.data.payload;
400
+ waitPromiseResolve();
401
+ }
402
+ };
403
+ window.addEventListener("message", getInitContextParamsFromParent, false);
404
+ scope.postMessage({
405
+ messageName: _Constants.Constants.InitContextParamsResponse
406
+ }, "*");
407
+ await waitPromise;
408
+ window.removeEventListener("message", getInitContextParamsFromParent, false);
409
+ return payload;
410
+ };
@@ -9,6 +9,7 @@ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components
9
9
  var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
10
10
  var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
11
11
  var _TelemetryManager = require("../../../common/telemetry/TelemetryManager");
12
+ var _utils = require("../../../common/utils");
12
13
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
14
  const updateSessionDataForTelemetry = async (chatSDK, dispatch) => {
14
15
  if (chatSDK) {
@@ -34,7 +35,7 @@ exports.updateSessionDataForTelemetry = updateSessionDataForTelemetry;
34
35
  const updateConversationDataForTelemetry = async (chatSDK, dispatch) => {
35
36
  if (chatSDK) {
36
37
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
- const liveWorkItem = await chatSDK.getConversationDetails();
38
+ const liveWorkItem = await (0, _utils.getConversationDetailsCall)(chatSDK);
38
39
  const telemetryData = _TelemetryHelper.TelemetryHelper.addConversationDataToTelemetry(liveWorkItem, _TelemetryManager.TelemetryManager.InternalTelemetryData);
39
40
  dispatch({
40
41
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_TELEMETRY_DATA,