@microsoft/omnichannel-chat-widget 1.8.3 → 1.8.4-main.424a580

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 +5 -0
  2. package/lib/cjs/common/facades/FacadeChatSDK.js +6 -0
  3. package/lib/cjs/common/telemetry/AppInsightsEvents.js +4 -5
  4. package/lib/cjs/common/telemetry/TelemetryConstants.js +44 -2
  5. package/lib/cjs/common/telemetry/loggers/appInsightsLogger.js +26 -10
  6. package/lib/cjs/common/utils/SecureEventBus.js +307 -0
  7. package/lib/cjs/common/utils/dispatchCustomEvent.js +25 -0
  8. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +16 -4
  9. package/lib/cjs/components/citationpanestateful/CitationPaneStateful.js +20 -1
  10. package/lib/cjs/components/headerstateful/HeaderStateful.js +8 -2
  11. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.js +127 -0
  12. package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +15 -0
  13. package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +287 -0
  14. package/lib/cjs/components/livechatwidget/common/createAdapter.js +2 -0
  15. package/lib/cjs/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.js +18 -0
  16. package/lib/cjs/components/livechatwidget/common/endChat.js +7 -1
  17. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +16 -7
  18. package/lib/cjs/components/livechatwidget/common/renderSurveyHelpers.js +2 -2
  19. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +3 -3
  20. package/lib/cjs/components/livechatwidget/common/startChat.js +5 -1
  21. package/lib/cjs/components/livechatwidget/common/startChatErrorHandler.js +24 -4
  22. package/lib/cjs/components/livechatwidget/interfaces/IPersistentChatHistoryProps.js +1 -0
  23. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +22 -3
  24. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +29 -2
  25. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +12 -3
  26. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +36 -5
  27. package/lib/cjs/components/webchatcontainerstateful/common/activities/botActivity.js +14 -0
  28. package/lib/cjs/components/webchatcontainerstateful/common/activities/conversationDividerActivity.js +17 -0
  29. package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +97 -0
  30. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -1
  31. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +1 -1
  32. package/lib/cjs/components/webchatcontainerstateful/hooks/usePersistentChatHistory.js +59 -0
  33. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +122 -0
  34. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/Constants.js +10 -0
  35. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/ConversationDividerActivity.js +47 -0
  36. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +1038 -0
  37. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +34 -0
  38. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +50 -1
  39. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +16 -2
  40. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.js +20 -0
  41. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +2 -2
  42. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +59 -0
  43. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +5 -3
  44. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +2 -2
  45. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +29 -7
  46. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
  47. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +7 -1
  48. package/lib/cjs/contexts/createReducer.js +15 -0
  49. package/lib/cjs/firstresponselatency/FirstMessageTrackerFromBot.js +3 -2
  50. package/lib/cjs/firstresponselatency/FirstResponseLatencyTracker.js +6 -2
  51. package/lib/cjs/plugins/newMessageEventHandler.js +4 -1
  52. package/lib/esm/common/Constants.js +5 -0
  53. package/lib/esm/common/facades/FacadeChatSDK.js +6 -0
  54. package/lib/esm/common/telemetry/AppInsightsEvents.js +4 -5
  55. package/lib/esm/common/telemetry/TelemetryConstants.js +42 -1
  56. package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +27 -11
  57. package/lib/esm/common/utils/SecureEventBus.js +328 -0
  58. package/lib/esm/common/utils/dispatchCustomEvent.js +18 -0
  59. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +17 -5
  60. package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +20 -1
  61. package/lib/esm/components/headerstateful/HeaderStateful.js +9 -3
  62. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.js +120 -0
  63. package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +8 -0
  64. package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +280 -0
  65. package/lib/esm/components/livechatwidget/common/createAdapter.js +2 -0
  66. package/lib/esm/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.js +11 -0
  67. package/lib/esm/components/livechatwidget/common/endChat.js +7 -1
  68. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +16 -7
  69. package/lib/esm/components/livechatwidget/common/renderSurveyHelpers.js +2 -2
  70. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +3 -3
  71. package/lib/esm/components/livechatwidget/common/startChat.js +7 -3
  72. package/lib/esm/components/livechatwidget/common/startChatErrorHandler.js +23 -4
  73. package/lib/esm/components/livechatwidget/interfaces/IPersistentChatHistoryProps.js +1 -0
  74. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +23 -4
  75. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +31 -4
  76. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -4
  77. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +39 -5
  78. package/lib/esm/components/webchatcontainerstateful/common/activities/botActivity.js +7 -0
  79. package/lib/esm/components/webchatcontainerstateful/common/activities/conversationDividerActivity.js +9 -0
  80. package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +90 -0
  81. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -1
  82. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -2
  83. package/lib/esm/components/webchatcontainerstateful/hooks/usePersistentChatHistory.js +51 -0
  84. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +115 -0
  85. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/Constants.js +3 -0
  86. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/ConversationDividerActivity.js +39 -0
  87. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +1060 -0
  88. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +25 -0
  89. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +48 -1
  90. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +13 -0
  91. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.js +13 -0
  92. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +1 -1
  93. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +52 -0
  94. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +3 -2
  95. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +1 -1
  96. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +29 -7
  97. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
  98. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +7 -1
  99. package/lib/esm/contexts/createReducer.js +15 -0
  100. package/lib/esm/firstresponselatency/FirstMessageTrackerFromBot.js +3 -2
  101. package/lib/esm/firstresponselatency/FirstResponseLatencyTracker.js +6 -2
  102. package/lib/esm/plugins/newMessageEventHandler.js +4 -1
  103. package/lib/types/common/Constants.d.ts +4 -0
  104. package/lib/types/common/facades/FacadeChatSDK.d.ts +3 -1
  105. package/lib/types/common/telemetry/TelemetryConstants.d.ts +39 -2
  106. package/lib/types/common/utils/SecureEventBus.d.ts +159 -0
  107. package/lib/types/common/utils/dispatchCustomEvent.d.ts +2 -0
  108. package/lib/types/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.d.ts +45 -0
  109. package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +7 -0
  110. package/lib/types/components/livechatwidget/common/PersistentConversationHandler.d.ts +28 -0
  111. package/lib/types/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.d.ts +2 -0
  112. package/lib/types/components/livechatwidget/common/startChatErrorHandler.d.ts +1 -0
  113. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +2 -0
  114. package/lib/types/components/livechatwidget/interfaces/IPersistentChatHistoryProps.d.ts +12 -0
  115. package/lib/types/components/webchatcontainerstateful/common/activities/botActivity.d.ts +7 -0
  116. package/lib/types/components/webchatcontainerstateful/common/activities/conversationDividerActivity.d.ts +10 -0
  117. package/lib/types/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.d.ts +2 -0
  118. package/lib/types/components/webchatcontainerstateful/hooks/usePersistentChatHistory.d.ts +4 -0
  119. package/lib/types/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.d.ts +7 -0
  120. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/Constants.d.ts +3 -0
  121. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/ConversationDividerActivity.d.ts +4 -0
  122. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +326 -0
  123. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.d.ts +8 -0
  124. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -1
  125. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -0
  126. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.d.ts +2 -0
  127. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.d.ts +2 -0
  128. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +1 -1
  129. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  130. package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +6 -0
  131. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  132. package/package.json +3 -3
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _defaultInLineBannerStyle = require("../defaultStyles/defaultInLineBannerStyle");
9
+ var _defaultMiddlewareLocalizedTexts = require("../../../../common/defaultProps/defaultMiddlewareLocalizedTexts");
10
+ var _mergeStyles = require("@fluentui/merge-styles");
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ const LoadInlineBannerActivity = _ref => {
14
+ let {
15
+ webChatContainerProps,
16
+ persistentChatHistory,
17
+ id
18
+ } = _ref;
19
+ const localizedTexts = (0, _react.useMemo)(() => ({
20
+ ..._defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts,
21
+ ...(webChatContainerProps === null || webChatContainerProps === void 0 ? void 0 : webChatContainerProps.localizedTexts)
22
+ }), [webChatContainerProps === null || webChatContainerProps === void 0 ? void 0 : webChatContainerProps.localizedTexts]);
23
+ const bannerStyle = (0, _mergeStyles.mergeStyles)(persistentChatHistory === null || persistentChatHistory === void 0 ? void 0 : persistentChatHistory.bannerStyle, _defaultInLineBannerStyle.defaultInlineBannerStyle);
24
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
25
+ id: id,
26
+ className: bannerStyle,
27
+ role: "status",
28
+ "aria-live": "polite",
29
+ "aria-label": localizedTexts.PREVIOUS_MESSAGES_LOADING,
30
+ "aria-busy": "true"
31
+ }, localizedTexts.PREVIOUS_MESSAGES_LOADING));
32
+ };
33
+ var _default = LoadInlineBannerActivity;
34
+ exports.default = _default;
@@ -4,16 +4,23 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createActivityMiddleware = void 0;
7
+ var _LazyLoadActivity = _interopRequireWildcard(require("./activities/LazyLoadActivity"));
7
8
  var _TelemetryConstants = require("../../../../../common/telemetry/TelemetryConstants");
8
9
  var _Constants = require("../../../../../common/Constants");
10
+ var _ConversationDividerActivity = _interopRequireDefault(require("./activities/ConversationDividerActivity"));
9
11
  var _DirectLineActivityType = require("../../enums/DirectLineActivityType");
10
12
  var _DirectLineSenderRole = require("../../enums/DirectLineSenderRole");
11
13
  var _react = _interopRequireDefault(require("react"));
12
14
  var _TelemetryHelper = require("../../../../../common/telemetry/TelemetryHelper");
15
+ var _defaultMiddlewareLocalizedTexts = require("../../../common/defaultProps/defaultMiddlewareLocalizedTexts");
13
16
  var _defaultSystemMessageStyles = require("./defaultStyles/defaultSystemMessageStyles");
14
17
  var _defaultUserMessageStyles = require("./defaultStyles/defaultUserMessageStyles");
15
18
  var _utils = require("../../../../../common/utils");
16
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
22
+ /* eslint-disable @typescript-eslint/no-explicit-any */
23
+ /* eslint-disable react/display-name */
17
24
  /******
18
25
  * ActivityMiddleware
19
26
  *
@@ -24,6 +31,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
24
31
  ******/
25
32
 
26
33
  const loggedSystemMessages = new Array();
34
+ let lastRenderedAt = 0; // Track last rendered receivedAt timestamp for deduplication
27
35
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
36
  const handleSystemMessage = (next, args, card, renderMarkdown, systemMessageStyleProps) => {
29
37
  var _card$activity, _card$activity$channe, _card$activity$channe2, _card$activity2, _card$activity2$chann, _card$activity3, _card$activity3$chann, _card$activity3$chann2, _card$activity4, _card$activity4$chann, _card$activity5, _card$activity5$chann, _card$nextVisibleActi, _card$nextVisibleActi2, _card$activity6, _card$activity6$chann, _card$activity7, _card$nextVisibleActi3, _card$activity8;
@@ -72,7 +80,7 @@ const isDataTagsPresent = card => {
72
80
  };
73
81
 
74
82
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
- const createActivityMiddleware = (renderMarkdown, systemMessageStyleProps, userMessageStyleProps) => () => next => function () {
83
+ const createActivityMiddleware = (renderMarkdown, systemMessageStyleProps, userMessageStyleProps, localizedTexts) => () => next => function () {
76
84
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
77
85
  args[_key] = arguments[_key];
78
86
  }
@@ -88,6 +96,47 @@ const createActivityMiddleware = (renderMarkdown, systemMessageStyleProps, userM
88
96
  if (isTagIncluded(card, _Constants.Constants.systemMessageTag)) {
89
97
  return handleSystemMessage(next, args, card, renderMarkdown, systemMessageStyleProps);
90
98
  }
99
+ if (isTagIncluded(card, _Constants.Constants.persistentChatHistoryMessagePullTriggerTag)) {
100
+ var _card$activity9, _card$activity9$chann, _card$activity9$chann2;
101
+ // Safety check: if this is a new chat session and flag is false, auto-correct it
102
+ if (!_LazyLoadActivity.LazyLoadHandler.hasMoreHistoryAvailable) {
103
+ _LazyLoadActivity.LazyLoadHandler.setHasMoreHistoryAvailable(true);
104
+ }
105
+ const receivedAt = card === null || card === void 0 ? void 0 : (_card$activity9 = card.activity) === null || _card$activity9 === void 0 ? void 0 : (_card$activity9$chann = _card$activity9.channelData) === null || _card$activity9$chann === void 0 ? void 0 : (_card$activity9$chann2 = _card$activity9$chann.webChat) === null || _card$activity9$chann2 === void 0 ? void 0 : _card$activity9$chann2.receivedAt;
106
+ if (receivedAt < lastRenderedAt) {
107
+ card.activity = null;
108
+ return () => false;
109
+ }
110
+ lastRenderedAt = receivedAt;
111
+
112
+ // Return a function that checks availability at render time
113
+ return () => {
114
+ // Double-check at render time in case history availability changed
115
+ if (!_LazyLoadActivity.LazyLoadHandler.hasMoreHistoryAvailable) {
116
+ return null;
117
+ }
118
+ return /*#__PURE__*/_react.default.createElement(_LazyLoadActivity.default, null);
119
+ };
120
+ }
121
+ if (isTagIncluded(card, _Constants.Constants.persistentChatHistoryMessageTag)) {
122
+ const userMessageStyles = {
123
+ ..._defaultUserMessageStyles.defaultUserMessageStyles,
124
+ ...userMessageStyleProps
125
+ };
126
+ return function () {
127
+ return /*#__PURE__*/_react.default.createElement("div", {
128
+ className: card.activity.from.role === _DirectLineSenderRole.DirectLineSenderRole.User ? _Constants.Constants.sentMessageClassName : _Constants.Constants.receivedMessageClassName,
129
+ style: userMessageStyles
130
+ }, next(...args)(...arguments));
131
+ };
132
+ }
133
+ if (isTagIncluded(card, _Constants.Constants.conversationDividerTag)) {
134
+ const conversationDividerLabel = (localizedTexts === null || localizedTexts === void 0 ? void 0 : localizedTexts.CONVERSATION_DIVIDER_ARIA_LABEL) || _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.CONVERSATION_DIVIDER_ARIA_LABEL;
135
+ // Pass the computed localized text to the divider component
136
+ return /*#__PURE__*/_react.default.createElement(_ConversationDividerActivity.default, {
137
+ dividerActivityAriaLabel: conversationDividerLabel
138
+ });
139
+ }
91
140
  if (card.activity.text && card.activity.type === _DirectLineActivityType.DirectLineActivityType.Message) {
92
141
  if (!card.activity.channelData.isHtmlEncoded && card.activity.channelId === _Constants.Constants.webchatChannelId) {
93
142
  card.activity.text = (0, _utils.escapeHtml)(card.activity.text);
@@ -3,9 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.activityStatusMiddleware = void 0;
6
+ exports.createActivityStatusMiddleware = exports.activityStatusMiddleware = void 0;
7
7
  var _Constants = require("../../../../../common/Constants");
8
8
  var _DeliveredTimestamp = require("./timestamps/DeliveredTimestamp");
9
+ var _HistoryMessageTimestamp = require("./timestamps/HistoryMessageTimestamp");
9
10
  var _NotDeliveredTimestamp = require("./timestamps/NotDeliveredTimestamp");
10
11
  var _react = _interopRequireDefault(require("react"));
11
12
  var _SendStatus = require("../../enums/SendStatus");
@@ -32,6 +33,11 @@ const activityStatusMiddleware = () => next => args => {
32
33
  current_role = role,
33
34
  current_timestamp = timestamp;
34
35
  let sameTimestampGroupTemp = sameTimestampGroup;
36
+ if (tags !== null && tags !== void 0 && tags.includes(_Constants.Constants.persistentChatHistoryMessageTag)) {
37
+ return /*#__PURE__*/_react.default.createElement(_HistoryMessageTimestamp.HistoryMessageTimestamp, {
38
+ args: args
39
+ });
40
+ }
35
41
  if (args[_Constants.WebChatMiddlewareConstants.nextVisibleActivity]) {
36
42
  const {
37
43
  nextVisibleActivity: {
@@ -41,6 +47,7 @@ const activityStatusMiddleware = () => next => args => {
41
47
  timestamp
42
48
  }
43
49
  } = args;
50
+
44
51
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
45
52
  const next_name = name,
46
53
  next_timestamp = timestamp;
@@ -68,4 +75,11 @@ const activityStatusMiddleware = () => next => args => {
68
75
  ;
69
76
  }
70
77
  };
71
- exports.activityStatusMiddleware = activityStatusMiddleware;
78
+
79
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
80
+ exports.activityStatusMiddleware = activityStatusMiddleware;
81
+ const createActivityStatusMiddleware = function () {
82
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "en-us";
83
+ return activityStatusMiddleware;
84
+ };
85
+ exports.createActivityStatusMiddleware = createActivityStatusMiddleware;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.defaultInlineBannerStyle = void 0;
7
+ var _defaultSystemMessageStyles = require("./defaultSystemMessageStyles");
8
+ // Adjust the import path if necessary
9
+
10
+ const defaultInlineBannerStyle = {
11
+ ..._defaultSystemMessageStyles.defaultSystemMessageStyles,
12
+ visibility: "visible",
13
+ height: "20px",
14
+ display: "flex",
15
+ justifyContent: "center",
16
+ alignItems: "center",
17
+ margin: "5px 10px",
18
+ cursor: "pointer"
19
+ };
20
+ exports.defaultInlineBannerStyle = defaultInlineBannerStyle;
@@ -10,7 +10,7 @@ var _react2 = require("@fluentui/react");
10
10
  var _defaultMiddlewareLocalizedTexts = require("../../../../common/defaultProps/defaultMiddlewareLocalizedTexts");
11
11
  var _defaultTimestampContentStyles = require("../defaultStyles/defaultTimestampContentStyles");
12
12
  var _utils = require("../../../../../../common/utils");
13
- var _ = require("../../../../../..");
13
+ var _useChatContextStore = _interopRequireDefault(require("../../../../../../hooks/useChatContextStore"));
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
15
  /* eslint @typescript-eslint/no-explicit-any: "off" */
16
16
  const DeliveredTimestamp = _ref => {
@@ -20,7 +20,7 @@ const DeliveredTimestamp = _ref => {
20
20
  role,
21
21
  name
22
22
  } = _ref;
23
- const [state] = (0, _.useChatContextStore)();
23
+ const [state] = (0, _useChatContextStore.default)();
24
24
  const dir = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.timestampDir) ?? state.domainStates.globalDir;
25
25
  const contentStyles = {
26
26
  ..._defaultTimestampContentStyles.defaultTimestampContentStyles,
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.HistoryMessageTimestamp = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _react2 = require("@fluentui/react");
9
+ var _defaultMiddlewareLocalizedTexts = require("../../../../common/defaultProps/defaultMiddlewareLocalizedTexts");
10
+ var _defaultTimestampContentStyles = require("../defaultStyles/defaultTimestampContentStyles");
11
+ var _utils = require("../../../../../../common/utils");
12
+ var _useChatContextStore = _interopRequireDefault(require("../../../../../../hooks/useChatContextStore"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ const HistoryMessageTimestamp = _ref => {
16
+ var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$m;
17
+ let {
18
+ args
19
+ } = _ref;
20
+ const [state] = (0, _useChatContextStore.default)();
21
+ const dir = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.timestampDir) ?? state.domainStates.globalDir;
22
+ const {
23
+ activity: {
24
+ timestamp,
25
+ from: {
26
+ name,
27
+ role
28
+ }
29
+ }
30
+ } = args;
31
+ const contentStyles = {
32
+ ..._defaultTimestampContentStyles.defaultTimestampContentStyles,
33
+ ...((_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.timestampContentStyleProps)
34
+ };
35
+ const getTimeElement = timestamp => {
36
+ const timeString = (0, _utils.getTimestampHourMinute)(timestamp);
37
+ const isAmPmFormat = timeString.toLowerCase().includes("am") || timeString.toLowerCase().includes("pm");
38
+ if (dir === "rtl" && isAmPmFormat) {
39
+ return /*#__PURE__*/_react.default.createElement("span", {
40
+ dir: "ltr"
41
+ }, timeString);
42
+ } else {
43
+ return /*#__PURE__*/_react.default.createElement("span", {
44
+ dir: dir
45
+ }, timeString);
46
+ }
47
+ };
48
+ return /*#__PURE__*/_react.default.createElement(_react2.Stack, {
49
+ style: contentStyles,
50
+ dir: dir
51
+ }, role === "bot" && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
52
+ dir: dir,
53
+ "aria-hidden": "false"
54
+ }, name, " : ", getTimeElement(timestamp))), role === "user" && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
55
+ "aria-hidden": "false",
56
+ dir: dir
57
+ }, " ", getTimeElement(timestamp), " - ", ((_state$domainStates$m = state.domainStates.middlewareLocalizedTexts) === null || _state$domainStates$m === void 0 ? void 0 : _state$domainStates$m.MIDDLEWARE_MESSAGE_DELIVERED) ?? _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_MESSAGE_DELIVERED), " "));
58
+ };
59
+ exports.HistoryMessageTimestamp = HistoryMessageTimestamp;
@@ -13,10 +13,11 @@ var _defaultTimestampFailedStyles = require("../defaultStyles/defaultTimestampFa
13
13
  var _defaultTimestampRetryStyles = require("../defaultStyles/defaultTimestampRetryStyles");
14
14
  var _utils = require("../../../../../../common/utils");
15
15
  var _botframeworkWebchat = require("botframework-webchat");
16
- var _ = require("../../../../../..");
16
+ var _useChatContextStore = _interopRequireDefault(require("../../../../../../hooks/useChatContextStore"));
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
18
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
19
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
- /* eslint @typescript-eslint/no-explicit-any: "off" */
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
21
  const NotDeliveredTimestamp = _ref => {
21
22
  var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$r3, _state$domainStates$r4, _state$domainStates$m, _state$domainStates$m2;
22
23
  let {
@@ -35,7 +36,7 @@ const NotDeliveredTimestamp = _ref => {
35
36
  const {
36
37
  timestamp
37
38
  } = activity;
38
- const [state] = (0, _.useChatContextStore)();
39
+ const [state] = (0, _useChatContextStore.default)();
39
40
  const dir = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.timestampDir) ?? state.domainStates.globalDir;
40
41
  const contentStyles = {
41
42
  ..._defaultTimestampContentStyles.defaultTimestampContentStyles,
@@ -76,6 +77,7 @@ const NotDeliveredTimestamp = _ref => {
76
77
  style: failedTextStyles
77
78
  }, " ", ((_state$domainStates$m = state.domainStates.middlewareLocalizedTexts) === null || _state$domainStates$m === void 0 ? void 0 : _state$domainStates$m.MIDDLEWARE_MESSAGE_NOT_DELIVERED) ?? _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_MESSAGE_NOT_DELIVERED, " "), /*#__PURE__*/_react.default.createElement("span", null, " \xA0-\xA0 "), /*#__PURE__*/_react.default.createElement("span", {
78
79
  style: retryTextStyles,
80
+ role: "button",
79
81
  onClick: onRetryClick,
80
82
  onKeyDown: onRetryKeyEnter,
81
83
  tabIndex: 0
@@ -8,12 +8,12 @@ var _react = _interopRequireDefault(require("react"));
8
8
  var _react2 = require("@fluentui/react");
9
9
  var _defaultMiddlewareLocalizedTexts = require("../../../../common/defaultProps/defaultMiddlewareLocalizedTexts");
10
10
  var _defaultTimestampContentStyles = require("../defaultStyles/defaultTimestampContentStyles");
11
- var _ = require("../../../../../..");
11
+ var _useChatContextStore = _interopRequireDefault(require("../../../../../../hooks/useChatContextStore"));
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
  /* eslint @typescript-eslint/no-explicit-any: "off" */
14
14
  const SendingTimestamp = () => {
15
15
  var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$m;
16
- const [state] = (0, _.useChatContextStore)();
16
+ const [state] = (0, _useChatContextStore.default)();
17
17
  const dir = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.timestampDir) ?? state.domainStates.globalDir;
18
18
  const contentStyles = {
19
19
  ..._defaultTimestampContentStyles.defaultTimestampContentStyles,
@@ -4,18 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.localizedStringsBotInitialsMiddleware = exports.getOverriddenLocalizedStrings = void 0;
7
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
7
8
  var _Constants = require("../../../../../common/Constants");
8
- var _utils = require("../../../../../common/utils");
9
- var _defaultWebChatStyles = require("../../../common/defaultStyles/defaultWebChatStyles");
10
9
  var _WebChatActionType = require("../../enums/WebChatActionType");
10
+ var _defaultWebChatStyles = require("../../../common/defaultStyles/defaultWebChatStyles");
11
+ var _utils = require("../../../../../common/utils");
11
12
  /* eslint-disable @typescript-eslint/no-explicit-any */
12
13
 
13
14
  let currentAgentInitials = _defaultWebChatStyles.defaultWebChatStyles.botAvatarInitials;
14
- const localizedStringsBotInitialsMiddleware = () => _ref => {
15
+
16
+ // Optional external updater (React context dispatch wrapper) set at runtime
17
+ let externalInitialsUpdater;
18
+ const localizedStringsBotInitialsMiddleware = onInitialsChange => _ref => {
15
19
  let {
16
20
  dispatch
17
21
  } = _ref;
18
22
  return next => action => {
23
+ if (onInitialsChange && !externalInitialsUpdater) {
24
+ externalInitialsUpdater = onInitialsChange; // capture once
25
+ }
26
+
19
27
  if (action.type === _WebChatActionType.WebChatActionType.DIRECT_LINE_INCOMING_ACTIVITY) {
20
28
  var _action$payload, _activity$from;
21
29
  const activity = (_action$payload = action.payload) === null || _action$payload === void 0 ? void 0 : _action$payload.activity;
@@ -23,10 +31,25 @@ const localizedStringsBotInitialsMiddleware = () => _ref => {
23
31
  var _activity$channelData, _activity$channelData2, _activity$tags;
24
32
  const agentName = activity.from.name.trim();
25
33
  const isSystemMessage = agentName === "__agent__" || agentName.startsWith("__") || ((_activity$channelData = activity.channelData) === null || _activity$channelData === void 0 ? void 0 : (_activity$channelData2 = _activity$channelData.tags) === null || _activity$channelData2 === void 0 ? void 0 : _activity$channelData2.includes(_Constants.Constants.systemMessageTag)) || ((_activity$tags = activity.tags) === null || _activity$tags === void 0 ? void 0 : _activity$tags.includes(_Constants.Constants.systemMessageTag));
26
- if (!isSystemMessage && agentName !== "") {
27
- // Update initials for valid agent/bot names
34
+ if (!isSystemMessage && agentName) {
28
35
  const newInitials = (0, _utils.getIconText)(agentName) || currentAgentInitials;
29
- currentAgentInitials = newInitials;
36
+ if (newInitials !== currentAgentInitials) {
37
+ var _externalInitialsUpda;
38
+ currentAgentInitials = newInitials;
39
+ // Notify external React context if provided
40
+ (_externalInitialsUpda = externalInitialsUpdater) === null || _externalInitialsUpda === void 0 ? void 0 : _externalInitialsUpda(currentAgentInitials || "");
41
+ // Broadcast (optional) for multi-tab sync without forcing consumers
42
+ _omnichannelChatComponents.BroadcastService.postMessage({
43
+ eventName: "BotAvatarInitialsUpdated",
44
+ payload: {
45
+ initials: currentAgentInitials
46
+ }
47
+ });
48
+ // Also dispatch a no-op action into WebChat store to encourage re-render (cheap)
49
+ dispatch({
50
+ type: "__BOT_INITIALS_UPDATED__"
51
+ });
52
+ }
30
53
  }
31
54
  }
32
55
  }
@@ -40,7 +63,6 @@ const getOverriddenLocalizedStrings = existingOverrides => {
40
63
  ...strings,
41
64
  ...existingOverrides
42
65
  };
43
-
44
66
  // Apply dynamic bot initials to alt text if not already overridden through props
45
67
  if (!(existingOverrides !== null && existingOverrides !== void 0 && existingOverrides.ACTIVITY_BOT_SAID_ALT)) {
46
68
  result.ACTIVITY_BOT_SAID_ALT = `${currentAgentInitials} said:`;
@@ -56,4 +56,5 @@ exports.LiveChatWidgetActionType = LiveChatWidgetActionType;
56
56
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_CONVERSATIONAL_SURVEY_ENABLED"] = 46] = "SET_CONVERSATIONAL_SURVEY_ENABLED";
57
57
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_CONVERSATIONAL_SURVEY_DISPLAY"] = 47] = "SET_CONVERSATIONAL_SURVEY_DISPLAY";
58
58
  LiveChatWidgetActionType[LiveChatWidgetActionType["GET_IN_MEMORY_STATE"] = 48] = "GET_IN_MEMORY_STATE";
59
+ LiveChatWidgetActionType[LiveChatWidgetActionType["SET_BOT_AVATAR_INITIALS"] = 49] = "SET_BOT_AVATAR_INITIALS";
59
60
  })(LiveChatWidgetActionType || (exports.LiveChatWidgetActionType = LiveChatWidgetActionType = {}));
@@ -10,6 +10,7 @@ var _ConversationState = require("./ConversationState");
10
10
  var _StartChatFailureType = require("./StartChatFailureType");
11
11
  var _defaultClientDataStoreProvider = require("../../common/storage/default/defaultClientDataStoreProvider");
12
12
  var _defaultMiddlewareLocalizedTexts = require("../../components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
13
+ var _defaultWebChatStyles = require("../../components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles");
13
14
  const getLiveChatWidgetContextInitialState = props => {
14
15
  var _props$controlProps, _props$webChatContain;
15
16
  const isOutsideOperatingHours = () => {
@@ -39,6 +40,10 @@ const getLiveChatWidgetContextInitialState = props => {
39
40
  initialStateFromCache.domainStates.liveChatConfig = props.chatConfig;
40
41
  // Cache the result of isOutsideOperatingHours() to ensure consistency
41
42
  initialStateFromCache.appStates.outsideOperatingHours = outsideOperatingHours;
43
+ // Backward compatibility: if botAvatarInitials not cached (older sessions), seed with default
44
+ if (!initialStateFromCache.domainStates.botAvatarInitials) {
45
+ initialStateFromCache.domainStates.botAvatarInitials = _defaultWebChatStyles.defaultWebChatStyles.botAvatarInitials;
46
+ }
42
47
  return initialStateFromCache;
43
48
  }
44
49
  const LiveChatWidgetContextInitialState = {
@@ -62,7 +67,8 @@ const getLiveChatWidgetContextInitialState = props => {
62
67
  transcriptRequestId: "",
63
68
  confirmationPaneConfirmedOptionClicked: false,
64
69
  confirmationState: _Constants.ConfirmationState.NotSet,
65
- startChatFailureType: _StartChatFailureType.StartChatFailureType.Generic
70
+ startChatFailureType: _StartChatFailureType.StartChatFailureType.Generic,
71
+ botAvatarInitials: _defaultWebChatStyles.defaultWebChatStyles.botAvatarInitials
66
72
  },
67
73
  appStates: {
68
74
  conversationState: _ConversationState.ConversationState.Closed,
@@ -562,6 +562,21 @@ const reducer = (state, action) => {
562
562
  widgetSize: action.payload
563
563
  }
564
564
  };
565
+ case _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_BOT_AVATAR_INITIALS:
566
+ inMemory = {
567
+ ...inMemory,
568
+ domainStates: {
569
+ ...inMemory.domainStates,
570
+ botAvatarInitials: action.payload
571
+ }
572
+ };
573
+ return {
574
+ ...state,
575
+ domainStates: {
576
+ ...state.domainStates,
577
+ botAvatarInitials: action.payload
578
+ }
579
+ };
565
580
  case _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_INSTANCE_ID:
566
581
  inMemory = {
567
582
  ...inMemory,
@@ -36,7 +36,7 @@ const createTrackingForFirstMessage = () => {
36
36
  * Starts tracking the time for the first bot message after widget loads.
37
37
  * Sets a 5-second timeout to auto-reset if no bot message is received.
38
38
  */
39
- const widgetLoadListener = _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.TelemetryEvent.WidgetLoadComplete).subscribe(() => {
39
+ const widgetLoadListener = _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.TelemetryEvent.StartChatComplete).subscribe(() => {
40
40
  if (isTracking) return;
41
41
  isTracking = true;
42
42
  startTime = new Date().getTime();
@@ -91,7 +91,8 @@ const createTrackingForFirstMessage = () => {
91
91
  CustomProperties: {
92
92
  elapsedTime,
93
93
  widgetLoadedAt: startTime,
94
- botMessage: stopTrackingMessage
94
+ botMessage: stopTrackingMessage,
95
+ type: payload === null || payload === void 0 ? void 0 : payload.type
95
96
  }
96
97
  });
97
98
  disconnectListener();
@@ -7,6 +7,7 @@ exports.FirstResponseLatencyTracker = void 0;
7
7
  var _TelemetryConstants = require("../common/telemetry/TelemetryConstants");
8
8
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
9
9
  var _TelemetryHelper = require("../common/telemetry/TelemetryHelper");
10
+ var _Constants = require("../common/Constants");
10
11
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
12
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
12
13
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
@@ -133,7 +134,8 @@ let FirstResponseLatencyTracker = /*#__PURE__*/function () {
133
134
  CustomProperties: {
134
135
  elapsedTime,
135
136
  userMessage: this.startTrackingMessage,
136
- botMessage: this.stopTrackingMessage
137
+ botMessage: this.stopTrackingMessage,
138
+ type: payload === null || payload === void 0 ? void 0 : payload.type
137
139
  }
138
140
  });
139
141
  }
@@ -174,7 +176,9 @@ let FirstResponseLatencyTracker = /*#__PURE__*/function () {
174
176
  value: function stopClock(payload) {
175
177
  try {
176
178
  if (!payload || !payload.Id) {
177
- throw new Error("Invalid payload");
179
+ if ((payload === null || payload === void 0 ? void 0 : payload.type) !== _Constants.Constants.typing) {
180
+ throw new Error("Invalid payload");
181
+ }
178
182
  }
179
183
 
180
184
  // Only allow stopTracking if sender is valid and tracking is active
@@ -84,6 +84,9 @@ const createOnNewAdapterActivityHandler = (chatId, userId, startTime) => {
84
84
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
85
  const messageHasNoAttachments = !(activity !== null && activity !== void 0 && activity.attachments) || (activity === null || activity === void 0 ? void 0 : activity.attachments.length) === 0;
86
86
  if (messageHasNoTags && messageHasNoText && messageHasNoAttachments) {
87
+ if ((activity === null || activity === void 0 ? void 0 : activity.type) === _Constants2.Constants.typing) {
88
+ return true;
89
+ }
87
90
  return false;
88
91
  }
89
92
  return true;
@@ -112,7 +115,7 @@ const createOnNewAdapterActivityHandler = (chatId, userId, startTime) => {
112
115
  });
113
116
  };
114
117
  const raiseMessageEvent = activity => {
115
- if ((activity === null || activity === void 0 ? void 0 : activity.type) === _Constants2.Constants.message) {
118
+ if ((activity === null || activity === void 0 ? void 0 : activity.type) === _Constants2.Constants.message || (activity === null || activity === void 0 ? void 0 : activity.type) === _Constants2.Constants.typing) {
116
119
  const scenarioType = (0, _util.getScenarioType)(activity);
117
120
  switch (scenarioType) {
118
121
  case _Constants.ScenarioType.UserSendMessageStrategy:
@@ -38,6 +38,10 @@ _defineProperty(Constants, "botParticipantTypeTag", "Bot");
38
38
  _defineProperty(Constants, "channelIdKey", "ChannelId-");
39
39
  _defineProperty(Constants, "ChannelId", "lcw");
40
40
  _defineProperty(Constants, "CustomerTag", "FromCustomer");
41
+ // LCW only tags (Only applicable on client-side for additional processing, not recognized by service)
42
+ _defineProperty(Constants, "persistentChatHistoryMessageTag", "PersistentChatHistory");
43
+ _defineProperty(Constants, "persistentChatHistoryMessagePullTriggerTag", "PersistentChatHistoryMessagePullTrigger");
44
+ _defineProperty(Constants, "conversationDividerTag", "ConversationDivider");
41
45
  // gifUploadMiddleware
42
46
  _defineProperty(Constants, "GifContentType", "image/gif");
43
47
  // htmlPlayerMiddleware
@@ -57,6 +61,7 @@ _defineProperty(Constants, "queuePositionMessageTag", "queueposition");
57
61
  _defineProperty(Constants, "averageWaitTimeMessageTag", "averagewaittime");
58
62
  _defineProperty(Constants, "message", "message");
59
63
  _defineProperty(Constants, "hiddenTag", "Hidden");
64
+ _defineProperty(Constants, "typing", "typing");
60
65
  // messageTimestampMiddleware
61
66
  _defineProperty(Constants, "prefixTimestampTag", "ServerMessageTimestamp_");
62
67
  _defineProperty(Constants, "acsChannel", "ACS_CHANNEL");
@@ -481,6 +481,12 @@ export let FacadeChatSDK = /*#__PURE__*/function () {
481
481
  reconnectableChatsParams.authenticatedUserToken = this.token;
482
482
  return this.validateAndExecuteCall("getReconnectableChats", () => this.chatSDK.OCClient.getReconnectableChats(reconnectableChatsParams));
483
483
  }
484
+ }, {
485
+ key: "fetchPersistentConversationHistory",
486
+ value: async function fetchPersistentConversationHistory() {
487
+ let getPersistentChatHistoryOptionalParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
488
+ return this.validateAndExecuteCall("getPersistentChatHistory", () => this.chatSDK.getPersistentChatHistory(getPersistentChatHistoryOptionalParams));
489
+ }
484
490
  }]);
485
491
  return FacadeChatSDK;
486
492
  }();
@@ -1,8 +1,5 @@
1
1
  export const AppInsightsEventMapping = {
2
2
  "LCWChatButtonClicked": "LCWChatButtonActionStarted",
3
- "WidgetLoadStarted": "WidgetStartChatStarted",
4
- "WidgetLoadComplete": "WidgetStartChatCompleted",
5
- "WidgetLoadFailed": "WidgetStartChatFailed",
6
3
  "PrechatSubmitted": "PrechatSubmitCompleted",
7
4
  "StartChatEventRecevied": "StartChatEventReceivedCompleted",
8
5
  "EndChatEventReceived": "EndChatEventReceivedCompleted",
@@ -18,7 +15,9 @@ export const AppInsightsEventMapping = {
18
15
  "MessageSent": "MessageSentCompleted",
19
16
  "MessageReceived": "MessageReceivedCompleted",
20
17
  "SystemMessageReceived": "SystemMessageReceivedCompleted",
21
- "RehydrateMessageReceived": "RehydrateMessageReceivedCompleted",
18
+ "RehydrateMessageReceived": "ChatHistoryMessageReceivedCompleted",
22
19
  "CustomContextReceived": "CustomContextReceivedCompleted",
23
- "PostChatContextCallSucceed": "PostChatContextCallCompleted"
20
+ "NewTokenValidationStarted": "AuthTokenValidationStarted",
21
+ "NewTokenValidationCompleted": "AuthTokenValidationCompleted",
22
+ "NewTokenValidationFailed": "AuthTokenValidationFailed"
24
23
  };