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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/lib/cjs/common/Constants.js +2 -0
  2. package/lib/cjs/common/storage/default/defaultCacheManager.js +34 -0
  3. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +114 -0
  4. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +86 -0
  5. package/lib/cjs/common/telemetry/TelemetryConstants.js +15 -0
  6. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +31 -18
  7. package/lib/cjs/common/utils.js +20 -7
  8. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
  9. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  10. package/lib/cjs/components/footerstateful/FooterStateful.js +5 -13
  11. package/lib/cjs/components/headerstateful/HeaderStateful.js +14 -7
  12. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  13. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  14. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  15. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  16. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  17. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  18. package/lib/cjs/components/livechatwidget/common/authHelper.js +65 -0
  19. package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
  20. package/lib/cjs/components/livechatwidget/common/createFooter.js +7 -16
  21. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +12 -0
  22. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +31 -30
  23. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +57 -19
  24. package/lib/cjs/components/livechatwidget/common/endChat.js +3 -3
  25. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +7 -8
  26. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +5 -2
  27. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +55 -35
  28. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  29. package/lib/cjs/components/livechatwidget/common/startChat.js +54 -21
  30. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +149 -62
  31. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +6 -4
  32. package/lib/cjs/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  33. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  34. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +32 -4
  35. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
  36. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  37. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  38. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  39. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  40. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  41. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +10 -0
  42. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +10 -0
  43. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +2 -1
  44. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +13 -5
  45. package/lib/cjs/contexts/createReducer.js +10 -2
  46. package/lib/esm/common/Constants.js +2 -0
  47. package/lib/esm/common/storage/default/defaultCacheManager.js +19 -0
  48. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +102 -0
  49. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +71 -0
  50. package/lib/esm/common/telemetry/TelemetryConstants.js +15 -0
  51. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +29 -13
  52. package/lib/esm/common/utils.js +14 -5
  53. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
  54. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  55. package/lib/esm/components/footerstateful/FooterStateful.js +5 -13
  56. package/lib/esm/components/headerstateful/HeaderStateful.js +14 -7
  57. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  58. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  59. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  60. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  61. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  62. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  63. package/lib/esm/components/livechatwidget/common/authHelper.js +50 -0
  64. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
  65. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -15
  66. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +8 -0
  67. package/lib/esm/components/livechatwidget/common/createMarkdown.js +31 -30
  68. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +57 -19
  69. package/lib/esm/components/livechatwidget/common/endChat.js +3 -3
  70. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +7 -9
  71. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +5 -2
  72. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +56 -37
  73. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  74. package/lib/esm/components/livechatwidget/common/startChat.js +50 -22
  75. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +148 -64
  76. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +5 -4
  77. package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  78. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  79. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +25 -2
  80. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  81. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  82. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  83. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  84. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  85. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  86. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +3 -0
  87. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +3 -0
  88. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +2 -1
  89. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +11 -5
  90. package/lib/esm/contexts/createReducer.js +10 -2
  91. package/lib/types/common/Constants.d.ts +1 -0
  92. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  93. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  94. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  95. package/lib/types/common/telemetry/TelemetryConstants.d.ts +7 -1
  96. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  97. package/lib/types/common/utils.d.ts +5 -4
  98. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  99. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  100. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  101. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  102. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  103. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  104. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  105. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  106. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  107. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  108. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -4
  109. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  110. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  111. package/lib/types/components/livechatwidget/common/startChat.d.ts +3 -2
  112. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  113. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  114. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +3 -2
  115. package/lib/types/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.d.ts +2 -2
  116. package/lib/types/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.d.ts +4 -0
  117. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
  118. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  119. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  120. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  121. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +4 -1
  122. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  123. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  124. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  125. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  126. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  127. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.d.ts +3 -0
  128. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.d.ts +3 -0
  129. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -1
  130. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +3 -2
  131. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  132. package/package.json +5 -4
@@ -0,0 +1,34 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ import { Deferred } from "./Deferred";
4
+ export class ActivityStreamHandler {
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+
8
+ /**
9
+ * Use of a deferred pattern, to hold the execution of the activity.
10
+ *
11
+ * */
12
+ static cork() {
13
+ ActivityStreamHandler.restoreDeferred = new Deferred();
14
+ ActivityStreamHandler.restorePromise = ActivityStreamHandler.restoreDeferred.promise;
15
+ }
16
+ /**
17
+ * Resolve the promise, releasing it to continue with the execution of the activity.
18
+ *
19
+ * */
20
+
21
+
22
+ static uncork() {
23
+ ActivityStreamHandler.restoreDeferred.resolve();
24
+ }
25
+
26
+ }
27
+
28
+ _defineProperty(ActivityStreamHandler, "restoreDeferred", {
29
+ resolve: () => {
30
+ return "initialState";
31
+ }
32
+ });
33
+
34
+ _defineProperty(ActivityStreamHandler, "restorePromise", void 0);
@@ -0,0 +1,14 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ export class DefaultActivitySubscriber {
4
+ constructor() {
5
+ _defineProperty(this, "observer", void 0);
6
+ }
7
+
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ async next(activity) {
10
+ this.observer.next(activity);
11
+ return false;
12
+ }
13
+
14
+ }
@@ -0,0 +1,29 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ import { ActivityStreamHandler } from "../ActivityStreamHandler";
4
+ export class PauseActivitySubscriber {
5
+ constructor() {
6
+ _defineProperty(this, "observer", void 0);
7
+ }
8
+
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ async apply(activity) {
11
+ await ActivityStreamHandler.restorePromise;
12
+ return activity;
13
+ } // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
14
+
15
+
16
+ applicable(activity) {
17
+ return true;
18
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+
20
+
21
+ async next(activity) {
22
+ if (this.applicable(activity)) {
23
+ return await this.apply(activity);
24
+ }
25
+
26
+ return activity;
27
+ }
28
+
29
+ }
@@ -0,0 +1,59 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ import { DefaultActivitySubscriber } from "./ActivitySubscriber/DefaultActivitySubscriber";
4
+ import { shareObservable } from "./shareObservable";
5
+ export class ChatAdapterShim {
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ constructor(chatAdapter) {
11
+ _defineProperty(this, "chatAdapter", void 0);
12
+
13
+ _defineProperty(this, "activityObserver", void 0);
14
+
15
+ _defineProperty(this, "subscribers", void 0);
16
+
17
+ this.subscribers = [];
18
+ this.chatAdapter = { ...chatAdapter,
19
+ activity$: shareObservable( // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ new window.Observable(observer => {
21
+ this.activityObserver = observer; // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+
23
+ const abortController = new window.AbortController();
24
+
25
+ (async () => {
26
+ try {
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ for await (let activity of chatAdapter.activities({
29
+ signal: abortController.signal
30
+ })) {
31
+ for (const subscriber of [...this.subscribers, new DefaultActivitySubscriber()]) {
32
+ subscriber.observer = this.activityObserver;
33
+ activity = await subscriber.next(activity);
34
+
35
+ if (!activity) {
36
+ break;
37
+ }
38
+ }
39
+ }
40
+
41
+ observer.complete();
42
+ } catch (error) {
43
+ observer.error(error);
44
+ }
45
+ })();
46
+
47
+ return () => {
48
+ abortController.abort();
49
+ };
50
+ }))
51
+ };
52
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+
54
+
55
+ addSubscriber(subscriber) {
56
+ this.subscribers.push(subscriber);
57
+ }
58
+
59
+ }
@@ -0,0 +1,33 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ export class Deferred {
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ constructor() {
6
+ _defineProperty(this, "_promise", void 0);
7
+
8
+ _defineProperty(this, "_resolve", void 0);
9
+
10
+ _defineProperty(this, "_reject", () => {
11
+ return;
12
+ });
13
+
14
+ _defineProperty(this, "resolve", value => {
15
+ this._resolve(value);
16
+ });
17
+
18
+ _defineProperty(this, "reject", value => {
19
+ this._reject(value);
20
+ });
21
+
22
+ this._promise = new Promise((resolve, reject) => {
23
+ this._resolve = resolve;
24
+ this._reject = reject;
25
+ });
26
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+
28
+
29
+ get promise() {
30
+ return this._promise;
31
+ }
32
+
33
+ }
@@ -0,0 +1,50 @@
1
+ import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
3
+ import { isNullOrEmptyString } from "../../../common/utils";
4
+
5
+ const getAuthClientFunction = chatConfig => {
6
+ let authClientFunction = undefined;
7
+
8
+ if (chatConfig !== null && chatConfig !== void 0 && chatConfig.LiveChatConfigAuthSettings) {
9
+ var _chatConfig$LiveChatC;
10
+
11
+ authClientFunction = (chatConfig === null || chatConfig === void 0 ? void 0 : (_chatConfig$LiveChatC = chatConfig.LiveChatConfigAuthSettings) === null || _chatConfig$LiveChatC === void 0 ? void 0 : _chatConfig$LiveChatC.msdyn_javascriptclientfunction) ?? undefined;
12
+ }
13
+
14
+ return authClientFunction;
15
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+
17
+
18
+ const handleAuthentication = async (chatSDK, chatConfig, getAuthToken) => {
19
+ const authClientFunction = getAuthClientFunction(chatConfig);
20
+
21
+ if (getAuthToken && authClientFunction) {
22
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
23
+ Event: TelemetryEvent.GetAuthTokenCalled
24
+ });
25
+ const token = await getAuthToken(authClientFunction);
26
+
27
+ if (!isNullOrEmptyString(token)) {
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ chatSDK.setAuthTokenProvider(async () => {
30
+ return token;
31
+ });
32
+ return true;
33
+ } else {
34
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
35
+ Event: TelemetryEvent.ReceivedNullOrEmptyToken
36
+ });
37
+ return false;
38
+ }
39
+ }
40
+
41
+ return false;
42
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
43
+
44
+
45
+ const removeAuthTokenProvider = chatSDK => {
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ chatSDK.authenticatedUserToken = null;
48
+ };
49
+
50
+ export { getAuthClientFunction, handleAuthentication, removeAuthTokenProvider };
@@ -1,7 +1,9 @@
1
1
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
2
2
  import { NotificationLevel } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationLevel";
3
3
  import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
4
- import { defaultMiddlewareLocalizedTexts } from "../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+ import { defaultMiddlewareLocalizedTexts } from "../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts";
5
+ import { ChatAdapterShim } from "./ChatAdapterShim";
6
+ import { PauseActivitySubscriber } from "./ActivitySubscriber/PauseActivitySubscriber"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
7
 
6
8
  export const createAdapter = async chatSDK => {
7
9
  const chatAdapterOptionalParams = {
@@ -23,5 +25,13 @@ export const createAdapter = async chatSDK => {
23
25
  }
24
26
  }
25
27
  };
26
- return await chatSDK.createChatAdapter(chatAdapterOptionalParams);
28
+ let adapter = await chatSDK.createChatAdapter(chatAdapterOptionalParams); //so far, there is no need to convert to the shim adapter when using visual tests
29
+
30
+ if (chatSDK.isMockModeOn !== true) {
31
+ adapter = new ChatAdapterShim(adapter);
32
+ adapter.addSubscriber(new PauseActivitySubscriber());
33
+ return adapter.chatAdapter;
34
+ }
35
+
36
+ return adapter;
27
37
  };
@@ -3,25 +3,14 @@ import React from "react";
3
3
  import { decodeComponentString } from "@microsoft/omnichannel-chat-components";
4
4
  import { shouldShowFooter } from "../../../controller/componentController";
5
5
  export const createFooter = (props, state) => {
6
- var _props$footerProps, _props$controlProps, _props$componentOverr, _props$componentOverr2;
6
+ var _props$controlProps, _props$componentOverr;
7
7
 
8
- const footerPropsHidden = { ...props.footerProps,
9
- controlProps: { ...((_props$footerProps = props.footerProps) === null || _props$footerProps === void 0 ? void 0 : _props$footerProps.controlProps),
10
- hideDownloadTranscriptButton: true,
11
- hideEmailTranscriptButton: true,
12
- hideAudioNotificationButton: true
13
- }
14
- };
15
- const footer = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && shouldShowFooter(state) ? decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/React.createElement(FooterStateful, {
8
+ const hideFooterDisplay = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && shouldShowFooter(state) ? false : true;
9
+ const footer = decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/React.createElement(FooterStateful, {
16
10
  footerProps: props.footerProps,
17
11
  downloadTranscriptProps: props.downloadTranscriptProps,
18
12
  audioNotificationProps: props.audioNotificationProps,
19
- hideFooterDisplay: false
20
- }) : decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.footer) || /*#__PURE__*/React.createElement(FooterStateful, {
21
- footerProps: footerPropsHidden,
22
- downloadTranscriptProps: props.downloadTranscriptProps,
23
- audioNotificationProps: props.audioNotificationProps,
24
- hideFooterDisplay: true
13
+ hideFooterDisplay: hideFooterDisplay
25
14
  });
26
15
  return footer;
27
16
  };
@@ -2,6 +2,8 @@ import { Constants } from "../../../common/Constants";
2
2
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
3
3
  import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
4
4
  import { defaultMiddlewareLocalizedTexts } from "../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts";
5
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
6
+ import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
5
7
 
6
8
  const isInternetConnected = async () => {
7
9
  try {
@@ -18,8 +20,14 @@ export const createInternetConnectionChangeHandler = async () => {
18
20
  const connected = await isInternetConnected();
19
21
 
20
22
  if (!connected) {
23
+ TelemetryHelper.logActionEvent(LogLevel.WARN, {
24
+ Event: TelemetryEvent.NetworkDisconnected
25
+ });
21
26
  NotificationHandler.notifyError(NotificationScenarios.InternetConnection, defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_NO_INTERNET_CONNECTION);
22
27
  } else {
28
+ TelemetryHelper.logActionEvent(LogLevel.WARN, {
29
+ Event: TelemetryEvent.NetworkReconnected
30
+ });
23
31
  NotificationHandler.notifySuccess(NotificationScenarios.InternetConnection, defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_INTERNET_BACK_ONLINE);
24
32
  }
25
33
  }; // Checking connection status on online & offline events due to possible false positives
@@ -13,26 +13,40 @@ export const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineM
13
13
  breaks: !disableNewLineMarkdownSupport
14
14
  }); // ToDo: Commenting below usage of plugin until deferred bug is resolved: https://github.com/mayashavin/markdown-it-slack/issues/1
15
15
  // markdown.use(MarkdownSlack);
16
- // Markdown override for open link in new tab
17
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, quotes
16
+ } else {
17
+ markdown = new MarkdownIt(Constants.Zero, {
18
+ html: true,
19
+ linkify: true,
20
+ breaks: !disableNewLineMarkdownSupport
21
+ });
22
+ markdown.enable(["entity", // Rule to process html entity - {, ¯, "
23
+ "linkify", // Rule to replace link-like texts with link nodes
24
+ "html_block", // Rule to process html blocks and paragraphs
25
+ "html_inline", // Rule to process html tags
26
+ "newline" // Rule to proceess '\n'
27
+ ]);
28
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
29
 
19
- markdown.use(MarkdownItForInline, "url_new_win", "link_open", function (tokens, idx, env) {
20
- const targetAttrIndex = tokens[idx].attrIndex(Constants.Target); // Put a transparent pixel instead of the "open in new window" icon, so developers can easily modify the icon in CSS.
21
30
 
22
- const TRANSPARENT_GIF = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
31
+ markdown.use(MarkdownItForInline, "url_new_win", "link_open", function (tokens, idx, env) {
32
+ const targetAttrIndex = tokens[idx].attrIndex(Constants.Target); // Put a transparent pixel instead of the "open in new window" icon, so developers can easily modify the icon in CSS.
23
33
 
24
- if (~targetAttrIndex) {
25
- tokens[idx].attrs[targetAttrIndex][1] = Constants.Blank;
26
- } else {
27
- tokens[idx].attrPush([Constants.Target, Constants.Blank]);
28
- }
34
+ const TRANSPARENT_GIF = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
35
+
36
+ if (~targetAttrIndex) {
37
+ tokens[idx].attrs[targetAttrIndex][1] = Constants.Blank;
38
+ } else {
39
+ tokens[idx].attrPush([Constants.Target, Constants.Blank]);
40
+ }
41
+
42
+ const relAttrIndex = tokens[idx].attrIndex(Constants.TargetRelationship);
29
43
 
30
- const relAttrIndex = tokens[idx].attrIndex(Constants.TargetRelationship);
44
+ if (~relAttrIndex) {
45
+ tokens[idx].attrs[relAttrIndex][1] = Constants.TargetRelationshipAttributes;
46
+ } else {
47
+ tokens[idx].attrPush([Constants.TargetRelationship, Constants.TargetRelationshipAttributes]);
31
48
 
32
- if (~relAttrIndex) {
33
- tokens[idx].attrs[relAttrIndex][1] = Constants.TargetRelationshipAttributes;
34
- } else {
35
- tokens[idx].attrPush([Constants.TargetRelationship, Constants.TargetRelationshipAttributes]);
49
+ if (!disableMarkdownMessageFormatting) {
36
50
  tokens[idx].attrPush([Constants.Title, defaultMarkdownLocalizedTexts.MARKDOWN_EXTERNAL_LINK_ALT]); // eslint-disable-next-line quotes
37
51
 
38
52
  const iconTokens = markdown.parseInline(`![${defaultMarkdownLocalizedTexts.MARKDOWN_EXTERNAL_LINK_ALT}](${TRANSPARENT_GIF})`, env)[0].children;
@@ -42,20 +56,7 @@ export const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineM
42
56
  tokens.splice(idx + 2, 0, ...iconTokens);
43
57
  }
44
58
  }
45
- });
46
- } else {
47
- markdown = new MarkdownIt(Constants.Zero, {
48
- html: true,
49
- linkify: true,
50
- breaks: !disableNewLineMarkdownSupport
51
- });
52
- markdown.enable(["entity", // Rule to process html entity - {, ¯, "
53
- "linkify", // Rule to replace link-like texts with link nodes
54
- "html_block", // Rule to process html blocks and paragraphs
55
- "html_inline", // Rule to process html tags
56
- "newline" // Rule to proceess '\n'
57
- ]);
58
- }
59
-
59
+ }
60
+ });
60
61
  return markdown;
61
62
  };
@@ -166,24 +166,28 @@ export const dummyDefaultProps = {
166
166
  },
167
167
  audioCallButtonStyleProps: {
168
168
  borderRadius: "50%",
169
- color: "#FFFFFF",
170
169
  backgroundColor: "#008000",
171
170
  lineHeight: "40px",
172
171
  height: "40px",
173
172
  width: "40px",
174
- fontSize: 18
173
+ icon: {
174
+ fontSize: 18,
175
+ color: "#FFFFFF"
176
+ }
175
177
  },
176
178
  audioCallButtonHoverStyleProps: {
177
179
  filter: "brightness(0.8)"
178
180
  },
179
181
  videoCallButtonStyleProps: {
180
182
  borderRadius: "50%",
181
- color: "#FFFFFF",
182
183
  backgroundColor: "#008000",
183
184
  lineHeight: "40px",
184
185
  height: "40px",
185
186
  width: "40px",
186
- fontSize: 18
187
+ icon: {
188
+ fontSize: 18,
189
+ color: "#FFFFFF"
190
+ }
187
191
  },
188
192
  videoCallButtonHoverStyleProps: {
189
193
  filter: "brightness(0.8)"
@@ -194,13 +198,15 @@ export const dummyDefaultProps = {
194
198
  },
195
199
  declineCallButtonStyleProps: {
196
200
  borderRadius: "50%",
197
- color: "#FFFFFF",
198
201
  backgroundColor: "#DC0000",
199
202
  lineHeight: "40px",
200
203
  height: "40px",
201
204
  width: "40px",
202
- fontSize: 18,
203
- marginLeft: "5px"
205
+ marginLeft: "5px",
206
+ icon: {
207
+ fontSize: 18,
208
+ color: "#FFFFFF"
209
+ }
204
210
  },
205
211
  incomingCallTitleStyleProps: {
206
212
  margin: "0 5px",
@@ -318,7 +324,8 @@ export const dummyDefaultProps = {
318
324
  hideChatTitle: false,
319
325
  hideNotificationBubble: true,
320
326
  unreadMessageString: "new messages",
321
- largeUnreadMessageString: "99+"
327
+ largeUnreadMessageString: "99+",
328
+ ariaLabelUnreadMessageString: "you have new messages"
322
329
  },
323
330
  styleProps: {
324
331
  generalStyleProps: {
@@ -770,6 +777,7 @@ export const dummyDefaultProps = {
770
777
  },
771
778
  audioNotificationButtonProps: {
772
779
  id: "oc-lcw-footer-audionotification-button",
780
+ type: "icon",
773
781
  ariaLabel: "Turn sound off",
774
782
  toggleAriaLabel: "Turn sound on",
775
783
  iconName: "Volume3",
@@ -795,8 +803,10 @@ export const dummyDefaultProps = {
795
803
  padding: "0 10px 5px 10px"
796
804
  },
797
805
  downloadTranscriptButtonStyleProps: {
798
- color: "blue",
799
- fontSize: 16,
806
+ icon: {
807
+ color: "blue",
808
+ fontSize: 16
809
+ },
800
810
  height: "25px",
801
811
  lineHeight: "25px",
802
812
  width: "25px"
@@ -806,8 +816,10 @@ export const dummyDefaultProps = {
806
816
  backgroundColor: "#C8C8C8"
807
817
  },
808
818
  emailTranscriptButtonStyleProps: {
809
- color: "blue",
810
- fontSize: 16,
819
+ cicon: {
820
+ color: "blue",
821
+ fontSize: 16
822
+ },
811
823
  height: "25px",
812
824
  lineHeight: "25px",
813
825
  width: "25px"
@@ -817,8 +829,10 @@ export const dummyDefaultProps = {
817
829
  backgroundColor: "#C8C8C8"
818
830
  },
819
831
  audioNotificationButtonStyleProps: {
820
- color: "blue",
821
- fontSize: 16,
832
+ icon: {
833
+ color: "blue",
834
+ fontSize: 16
835
+ },
822
836
  height: "25px",
823
837
  lineHeight: "25px",
824
838
  width: "25px"
@@ -869,7 +883,7 @@ export const dummyDefaultProps = {
869
883
  className: undefined
870
884
  },
871
885
  closeButtonProps: {
872
- id: "oc-lcw-header-minimize-button",
886
+ id: "oc-lcw-header-close-button",
873
887
  type: "icon",
874
888
  iconName: "ChromeClose",
875
889
  ariaLabel: "Close",
@@ -1165,7 +1179,8 @@ export const dummyDefaultProps = {
1165
1179
  backgroundColor: "#FFFFFF",
1166
1180
  borderColor: "#F1F1F1"
1167
1181
  }
1168
- }
1182
+ },
1183
+ isCustomerVoiceSurveyCompact: undefined
1169
1184
  },
1170
1185
  proactiveChatPaneProps: {
1171
1186
  componentOverrides: {
@@ -1185,7 +1200,17 @@ export const dummyDefaultProps = {
1185
1200
  hideSubtitle: false,
1186
1201
  subtitleText: "Live chat support!",
1187
1202
  hideCloseButton: false,
1188
- closeButtonAriaLabel: "Close Button",
1203
+ closeButtonProps: {
1204
+ id: "oc-lcw-proactivechat-closebutton",
1205
+ type: "icon",
1206
+ iconName: "ChromeClose",
1207
+ ariaLabel: "Close",
1208
+ imageIconProps: undefined,
1209
+ text: "Close",
1210
+ onClick: undefined,
1211
+ className: undefined,
1212
+ hideButtonTitle: true
1213
+ },
1189
1214
  isBodyContainerHorizantal: false,
1190
1215
  hideBodyTitle: false,
1191
1216
  bodyTitleText: "Hi! Have any questions? I am here to help.",
@@ -1413,7 +1438,6 @@ export const dummyDefaultProps = {
1413
1438
  startNewChatButtonClassName: undefined
1414
1439
  }
1415
1440
  },
1416
- authClientFunction: undefined,
1417
1441
  isReconnectEnabled: undefined,
1418
1442
  reconnectId: undefined,
1419
1443
  redirectInSameWindow: undefined
@@ -1536,6 +1560,12 @@ export const dummyDefaultProps = {
1536
1560
  lineHeight: "16px",
1537
1561
  padding: "0px 10px 0 10px"
1538
1562
  },
1563
+ userMessageBoxStyles: {
1564
+ maxWidth: "75%"
1565
+ },
1566
+ systemMessageBoxStyles: {
1567
+ maxWidth: "75%"
1568
+ },
1539
1569
  typingIndicatorStyleProps: {
1540
1570
  marginLeft: "10px",
1541
1571
  marginBottom: "5px",
@@ -1655,6 +1685,9 @@ export const dummyDefaultProps = {
1655
1685
  },
1656
1686
  attachmentSizeStyles: {
1657
1687
  display: "none"
1688
+ },
1689
+ receivedMessageAnchorStyles: {
1690
+ color: "white"
1658
1691
  }
1659
1692
  },
1660
1693
  localizedTexts: {
@@ -1682,7 +1715,12 @@ export const dummyDefaultProps = {
1682
1715
  botMagicCode: {
1683
1716
  disabled: false,
1684
1717
  fwdUrl: ""
1718
+ },
1719
+ adaptiveCardStyles: {
1720
+ background: "white",
1721
+ color: "black"
1685
1722
  }
1686
1723
  },
1687
- telemetryConfig: undefined
1724
+ telemetryConfig: undefined,
1725
+ getAuthToken: undefined
1688
1726
  };
@@ -31,7 +31,7 @@ const prepareEndChat = async (props, chatSDK, setAdapter, setWebChatStyles, disp
31
31
  if (isPostChatEnabled === "true" && ((_conversationDetails = conversationDetails) === null || _conversationDetails === void 0 ? void 0 : _conversationDetails.canRenderPostChat) === Constants.truePascal) {
32
32
  const skipEndChatSDK = false;
33
33
  const skipCloseChat = true;
34
- await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, true);
34
+ await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, false);
35
35
 
36
36
  if (postChatSurveyMode === PostChatSurveyMode.Embed) {
37
37
  dispatch({
@@ -129,9 +129,9 @@ const endChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, a
129
129
  });
130
130
 
131
131
  if (postMessageToOtherTab) {
132
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
132
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps;
133
133
 
134
- const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId);
134
+ const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId) ?? "");
135
135
  BroadcastService.postMessage({
136
136
  eventName: endChatEventName
137
137
  });
@@ -16,15 +16,13 @@ export const initCallingSdk = async (chatSDK, setVoiceVideoCallingSDK) => {
16
16
 
17
17
  return false;
18
18
  } catch (error) {
19
- if (error !== "Voice and video call is not enabled") {
20
- TelemetryHelper.logCallingEvent(LogLevel.ERROR, {
21
- Event: TelemetryEvent.CallingSDKLoadFailed,
22
- ExceptionDetails: {
23
- exception: error
24
- }
25
- });
26
- }
27
-
19
+ TelemetryHelper.logCallingEvent(LogLevel.ERROR, {
20
+ Event: TelemetryEvent.CallingSDKLoadFailed,
21
+ ExceptionDetails: {
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ exception: error.message
24
+ }
25
+ });
28
26
  return false;
29
27
  }
30
28
  };
@@ -64,10 +64,9 @@ export const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatS
64
64
  });
65
65
  }
66
66
 
67
- WebChatStoreLoader.store = null;
68
-
69
67
  if (isPostChatEnabled === "true") {
70
68
  if (postChatSurveyMode === PostChatSurveyMode.Embed) {
69
+ WebChatStoreLoader.store = null;
71
70
  dispatch({
72
71
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
73
72
  payload: ConversationState.PostchatLoading
@@ -84,6 +83,10 @@ export const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatS
84
83
  });
85
84
  }
86
85
  } else {
86
+ dispatch({
87
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
88
+ payload: ConversationState.InActive
89
+ });
87
90
  dispatch({
88
91
  type: LiveChatWidgetActionType.SET_CONVERSATION_ENDED_BY_AGENT,
89
92
  payload: true