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

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 (341) hide show
  1. package/README.md +7 -2
  2. package/lib/cjs/assets/Icons.js +4 -2
  3. package/lib/cjs/common/Constants.js +40 -164
  4. package/lib/cjs/common/KeyCodes.js +3 -4
  5. package/lib/cjs/common/contextDataStore/DataStoreManager.js +3 -5
  6. package/lib/cjs/common/storage/default/defaultCacheManager.js +26 -0
  7. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +111 -0
  8. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +78 -0
  9. package/lib/cjs/common/telemetry/TelemetryConstants.js +84 -30
  10. package/lib/cjs/common/telemetry/TelemetryHelper.js +21 -59
  11. package/lib/cjs/common/telemetry/TelemetryManager.js +3 -32
  12. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +0 -2
  13. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +30 -36
  14. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +0 -9
  15. package/lib/cjs/common/utils.js +92 -85
  16. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +8 -46
  17. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +19 -25
  18. package/lib/cjs/components/chatbuttonstateful/common/styleProps/defaultOutOfOfficeChatButtonStyleProps.js +3 -0
  19. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +18 -50
  20. package/lib/cjs/components/dimlayer/DimLayer.js +0 -4
  21. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +9 -37
  22. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -8
  23. package/lib/cjs/components/footerstateful/FooterStateful.js +11 -42
  24. package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +0 -6
  25. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +14 -43
  26. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -8
  27. package/lib/cjs/components/headerstateful/HeaderStateful.js +21 -32
  28. package/lib/cjs/components/livechatwidget/LiveChatWidget.js +2 -14
  29. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +39 -0
  30. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +139 -0
  31. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +20 -0
  32. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  33. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +34 -0
  34. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +64 -0
  35. package/lib/cjs/components/livechatwidget/common/Deferred.js +37 -0
  36. package/lib/cjs/components/livechatwidget/common/agentEndConversationHelper.js +36 -0
  37. package/lib/cjs/components/livechatwidget/common/authHelper.js +50 -0
  38. package/lib/cjs/components/livechatwidget/common/createAdapter.js +12 -9
  39. package/lib/cjs/components/livechatwidget/common/createFooter.js +4 -23
  40. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -10
  41. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +36 -43
  42. package/lib/cjs/components/livechatwidget/common/defaultProps/defaultScrollBarProps.js +14 -0
  43. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +139 -51
  44. package/lib/cjs/components/livechatwidget/common/disposeTelemetryLoggers.js +0 -3
  45. package/lib/cjs/components/livechatwidget/common/endChat.js +98 -57
  46. package/lib/cjs/components/livechatwidget/common/getGeneralStylesForButton.js +0 -6
  47. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +7 -16
  48. package/lib/cjs/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -8
  49. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +29 -88
  50. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +79 -128
  51. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +4 -17
  52. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +254 -14
  53. package/lib/cjs/components/livechatwidget/common/shareObservable.js +41 -0
  54. package/lib/cjs/components/livechatwidget/common/startChat.js +257 -117
  55. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +0 -8
  56. package/lib/cjs/components/livechatwidget/common/updateSessionDataForTelemetry.js +2 -11
  57. package/lib/cjs/components/livechatwidget/interfaces/IScrollBarProps.js +1 -0
  58. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +368 -197
  59. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +37 -25
  60. package/lib/cjs/components/loadingpanestateful/common/errorUIStyleProps/errorUILoadingPaneStyleProps.js +57 -0
  61. package/lib/cjs/components/loadingpanestateful/interfaces/IStartChatErrorPaneControlProps.js +1 -0
  62. package/lib/cjs/components/loadingpanestateful/interfaces/IStartChatErrorPaneProps.js +1 -0
  63. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +4 -17
  64. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +4 -17
  65. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +35 -24
  66. package/lib/cjs/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  67. package/lib/cjs/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +13 -0
  68. package/lib/cjs/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  69. package/lib/cjs/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  70. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +11 -42
  71. package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +1 -1
  72. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +19 -33
  73. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +8 -24
  74. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +94 -19
  75. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -7
  76. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -6
  77. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  78. package/lib/cjs/components/webchatcontainerstateful/common/mockadapter.js +12 -27
  79. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +6 -17
  80. package/lib/cjs/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -24
  81. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +5 -15
  82. package/lib/cjs/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -8
  83. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  84. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +12 -0
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +3 -5
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +0 -7
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -5
  97. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +27 -37
  98. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +10 -22
  99. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +25 -61
  100. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +7 -15
  101. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  102. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +82 -0
  103. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  104. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +10 -0
  105. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -3
  106. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -3
  107. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +10 -0
  108. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -9
  109. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +89 -0
  110. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +7 -18
  111. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +8 -42
  112. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +4 -22
  113. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +20 -33
  114. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +3 -9
  115. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +81 -45
  116. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +1 -10
  117. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +1 -12
  118. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +17 -19
  119. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +1 -9
  120. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -9
  121. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -34
  122. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +1 -10
  123. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +7 -11
  124. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +5 -14
  125. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -21
  126. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +0 -12
  127. package/lib/cjs/contexts/ChatAdapterStore.js +0 -2
  128. package/lib/cjs/contexts/ChatContextStore.js +0 -2
  129. package/lib/cjs/contexts/ChatSDKStore.js +0 -2
  130. package/lib/cjs/contexts/common/ConversationEndEntity.js +12 -0
  131. package/lib/cjs/contexts/common/ConversationState.js +3 -3
  132. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +34 -26
  133. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +20 -14
  134. package/lib/cjs/contexts/createReducer.js +200 -104
  135. package/lib/cjs/controller/componentController.js +4 -33
  136. package/lib/cjs/hooks/useChatAdapterStore.js +0 -6
  137. package/lib/cjs/hooks/useChatContextStore.js +0 -6
  138. package/lib/cjs/hooks/useChatSDKStore.js +0 -6
  139. package/lib/cjs/hooks/useDebounce.js +28 -0
  140. package/lib/cjs/hooks/useWindowDimensions.js +30 -0
  141. package/lib/cjs/index.js +0 -5
  142. package/lib/cjs/plugins/newMessageEventHandler.js +29 -36
  143. package/lib/esm/assets/Icons.js +2 -1
  144. package/lib/esm/common/Constants.js +36 -151
  145. package/lib/esm/common/KeyCodes.js +3 -3
  146. package/lib/esm/common/contextDataStore/DataStoreManager.js +3 -3
  147. package/lib/esm/common/storage/default/defaultCacheManager.js +18 -0
  148. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +104 -0
  149. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +70 -0
  150. package/lib/esm/common/telemetry/TelemetryConstants.js +88 -27
  151. package/lib/esm/common/telemetry/TelemetryHelper.js +21 -47
  152. package/lib/esm/common/telemetry/TelemetryManager.js +3 -19
  153. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +28 -24
  154. package/lib/esm/common/telemetry/loggers/consoleLogger.js +0 -5
  155. package/lib/esm/common/utils.js +84 -47
  156. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +8 -17
  157. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +22 -12
  158. package/lib/esm/components/chatbuttonstateful/common/styleProps/defaultOutOfOfficeChatButtonStyleProps.js +3 -0
  159. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +20 -31
  160. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +9 -16
  161. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -6
  162. package/lib/esm/components/footerstateful/FooterStateful.js +13 -23
  163. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +14 -36
  164. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -6
  165. package/lib/esm/components/headerstateful/HeaderStateful.js +21 -17
  166. package/lib/esm/components/livechatwidget/LiveChatWidget.js +2 -2
  167. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +32 -0
  168. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +134 -0
  169. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +13 -0
  170. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  171. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +27 -0
  172. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +57 -0
  173. package/lib/esm/components/livechatwidget/common/Deferred.js +30 -0
  174. package/lib/esm/components/livechatwidget/common/agentEndConversationHelper.js +30 -0
  175. package/lib/esm/components/livechatwidget/common/authHelper.js +42 -0
  176. package/lib/esm/components/livechatwidget/common/createAdapter.js +14 -4
  177. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -16
  178. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -5
  179. package/lib/esm/components/livechatwidget/common/createMarkdown.js +38 -37
  180. package/lib/esm/components/livechatwidget/common/defaultProps/defaultScrollBarProps.js +7 -0
  181. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +140 -37
  182. package/lib/esm/components/livechatwidget/common/endChat.js +98 -43
  183. package/lib/esm/components/livechatwidget/common/getGeneralStylesForButton.js +0 -2
  184. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +9 -11
  185. package/lib/esm/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -5
  186. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +32 -57
  187. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +80 -110
  188. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +4 -9
  189. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +257 -8
  190. package/lib/esm/components/livechatwidget/common/shareObservable.js +35 -0
  191. package/lib/esm/components/livechatwidget/common/startChat.js +256 -96
  192. package/lib/esm/components/livechatwidget/common/updateSessionDataForTelemetry.js +4 -2
  193. package/lib/esm/components/livechatwidget/interfaces/IScrollBarProps.js +1 -0
  194. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +372 -144
  195. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +38 -13
  196. package/lib/esm/components/loadingpanestateful/common/errorUIStyleProps/errorUILoadingPaneStyleProps.js +50 -0
  197. package/lib/esm/components/loadingpanestateful/interfaces/IStartChatErrorPaneControlProps.js +1 -0
  198. package/lib/esm/components/loadingpanestateful/interfaces/IStartChatErrorPaneProps.js +1 -0
  199. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +4 -5
  200. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +4 -5
  201. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +35 -12
  202. package/lib/esm/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  203. package/lib/esm/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +6 -0
  204. package/lib/esm/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  205. package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  206. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +15 -27
  207. package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +1 -1
  208. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +21 -9
  209. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +8 -6
  210. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +94 -4
  211. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  212. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -2
  213. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  214. package/lib/esm/components/webchatcontainerstateful/common/mockadapter.js +12 -19
  215. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +6 -13
  216. package/lib/esm/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -16
  217. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +5 -5
  218. package/lib/esm/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -6
  219. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  220. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  221. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
  222. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +3 -3
  223. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  224. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  225. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  226. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  227. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  228. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  229. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  230. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  231. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +2 -5
  232. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -4
  233. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +27 -22
  234. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -14
  235. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +25 -39
  236. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +9 -8
  237. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +34 -0
  238. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +80 -0
  239. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  240. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +3 -0
  241. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -1
  242. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -1
  243. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +3 -0
  244. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -7
  245. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +83 -0
  246. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +8 -9
  247. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +9 -28
  248. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +5 -14
  249. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +20 -22
  250. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +5 -8
  251. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +81 -40
  252. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +3 -7
  253. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +3 -8
  254. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +17 -14
  255. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +3 -7
  256. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -7
  257. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +15 -27
  258. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +3 -5
  259. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +9 -9
  260. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +7 -9
  261. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -13
  262. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +0 -5
  263. package/lib/esm/contexts/ChatAdapterStore.js +2 -1
  264. package/lib/esm/contexts/ChatContextStore.js +2 -1
  265. package/lib/esm/contexts/ChatSDKStore.js +2 -1
  266. package/lib/esm/contexts/common/ConversationEndEntity.js +5 -0
  267. package/lib/esm/contexts/common/ConversationState.js +3 -3
  268. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +34 -26
  269. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +20 -10
  270. package/lib/esm/contexts/createReducer.js +200 -101
  271. package/lib/esm/controller/componentController.js +5 -4
  272. package/lib/esm/hooks/useChatAdapterStore.js +0 -4
  273. package/lib/esm/hooks/useChatContextStore.js +0 -4
  274. package/lib/esm/hooks/useChatSDKStore.js +0 -4
  275. package/lib/esm/hooks/useDebounce.js +22 -0
  276. package/lib/esm/hooks/useWindowDimensions.js +23 -0
  277. package/lib/esm/plugins/newMessageEventHandler.js +29 -26
  278. package/lib/types/assets/Icons.d.ts +1 -0
  279. package/lib/types/common/Constants.d.ts +30 -1
  280. package/lib/types/common/interfaces/IContextDataStore.d.ts +1 -1
  281. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  282. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  283. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  284. package/lib/types/common/telemetry/TelemetryConstants.d.ts +65 -12
  285. package/lib/types/common/telemetry/definitions/Contracts.d.ts +4 -4
  286. package/lib/types/common/telemetry/definitions/Payload.d.ts +1 -0
  287. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +4 -0
  288. package/lib/types/common/utils.d.ts +8 -1
  289. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +0 -7
  290. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  291. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  292. package/lib/types/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.d.ts +9 -0
  293. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  294. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  295. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  296. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  297. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  298. package/lib/types/components/livechatwidget/common/agentEndConversationHelper.d.ts +6 -0
  299. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  300. package/lib/types/components/livechatwidget/common/defaultProps/defaultScrollBarProps.d.ts +2 -0
  301. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  302. package/lib/types/components/livechatwidget/common/initWebChatComposer.d.ts +1 -1
  303. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +6 -7
  304. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +6 -1
  305. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  306. package/lib/types/components/livechatwidget/common/startChat.d.ts +5 -2
  307. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +4 -1
  308. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +7 -2
  309. package/lib/types/components/livechatwidget/interfaces/IScrollBarProps.d.ts +22 -0
  310. package/lib/types/components/loadingpanestateful/LoadingPaneStateful.d.ts +1 -2
  311. package/lib/types/components/loadingpanestateful/common/errorUIStyleProps/errorUILoadingPaneStyleProps.d.ts +2 -0
  312. package/lib/types/components/loadingpanestateful/interfaces/IStartChatErrorPaneControlProps.d.ts +4 -0
  313. package/lib/types/components/loadingpanestateful/interfaces/IStartChatErrorPaneProps.d.ts +4 -0
  314. package/lib/types/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.d.ts +2 -2
  315. package/lib/types/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.d.ts +5 -0
  316. package/lib/types/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.d.ts +4 -0
  317. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -2
  318. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  319. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  320. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  321. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  322. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +4 -1
  323. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +4 -0
  324. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  325. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  326. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  327. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  328. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  329. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.d.ts +3 -0
  330. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.d.ts +3 -0
  331. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  332. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.d.ts +1 -1
  333. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +1 -1
  334. package/lib/types/contexts/common/ConversationEndEntity.d.ts +4 -0
  335. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  336. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +11 -4
  337. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +34 -25
  338. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  339. package/lib/types/hooks/useDebounce.d.ts +3 -0
  340. package/lib/types/hooks/useWindowDimensions.d.ts +4 -0
  341. package/package.json +5 -4
@@ -0,0 +1,83 @@
1
+ import { WebChatActionType } from "../../enums/WebChatActionType";
2
+ import { Constants } from "../../../../../common/Constants";
3
+
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
5
+ const createMessageTimeStampMiddleware = _ref => {
6
+ let {
7
+ dispatch
8
+ } = _ref;
9
+ return next => action => {
10
+ if (isApplicable(action)) {
11
+ return next(evaluateTagsAndOverrideTimeStamp(action));
12
+ }
13
+ return next(action);
14
+ };
15
+ };
16
+ const isApplicable = action => {
17
+ return action.type === WebChatActionType.DIRECT_LINE_INCOMING_ACTIVITY && isPVAConversation(action) && isPayloadValid(action) && isValidChannel(action);
18
+ };
19
+ const isPayloadValid = action => {
20
+ var _action$payload;
21
+ return action === null || action === void 0 ? void 0 : (_action$payload = action.payload) === null || _action$payload === void 0 ? void 0 : _action$payload.activity;
22
+ };
23
+ const isValidChannel = action => {
24
+ var _action$payload2, _action$payload2$acti;
25
+ return (action === null || action === void 0 ? void 0 : (_action$payload2 = action.payload) === null || _action$payload2 === void 0 ? void 0 : (_action$payload2$acti = _action$payload2.activity) === null || _action$payload2$acti === void 0 ? void 0 : _action$payload2$acti.channelId) === Constants.acsChannel;
26
+ };
27
+ const isPVAConversation = action => {
28
+ return !isTagIncluded(action, Constants.systemMessageTag) && !isTagIncluded(action, Constants.publicMessageTag) && !isRoleUserOn(action);
29
+ };
30
+
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ const isTagIncluded = (action, tag) => {
33
+ return isDataTagsPresent(action) && action.payload.activity.channelData.tags.includes(tag);
34
+ };
35
+ const isRoleUserOn = action => {
36
+ var _action$payload3, _action$payload3$acti, _action$payload3$acti2;
37
+ return (action === null || action === void 0 ? void 0 : (_action$payload3 = action.payload) === null || _action$payload3 === void 0 ? void 0 : (_action$payload3$acti = _action$payload3.activity) === null || _action$payload3$acti === void 0 ? void 0 : (_action$payload3$acti2 = _action$payload3$acti.from) === null || _action$payload3$acti2 === void 0 ? void 0 : _action$payload3$acti2.role) === Constants.userMessageTag;
38
+ };
39
+ const overrideTimeStamp = (timestampOriginal, timeStampNew) => {
40
+ return isTimestampValid(timeStampNew) ? timeStampNew : timestampOriginal;
41
+ };
42
+ const isTimestampValid = timeStamp => {
43
+ const regex = /(\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(T)(\d{2})(:{1})(\d{2})(:{1})(\d{2})(.\d+)([Z]{1}))/;
44
+ return regex.test(timeStamp);
45
+ };
46
+ const isDataTagsPresent = action => {
47
+ var _action$payload4, _action$payload4$acti, _action$payload4$acti2;
48
+ return (action === null || action === void 0 ? void 0 : (_action$payload4 = action.payload) === null || _action$payload4 === void 0 ? void 0 : (_action$payload4$acti = _action$payload4.activity) === null || _action$payload4$acti === void 0 ? void 0 : (_action$payload4$acti2 = _action$payload4$acti.channelData) === null || _action$payload4$acti2 === void 0 ? void 0 : _action$payload4$acti2.tags) && action.payload.activity.channelData.tags.length > 0;
49
+ };
50
+ const evaluateTagsAndOverrideTimeStamp = action => {
51
+ const tagValue = tagLookup(action, Constants.prefixTimestampTag);
52
+ if (tagValue) {
53
+ const newTimestamp = extractTimeStamp(tagValue);
54
+ action.payload.activity.timestamp = overrideTimeStamp(action.payload.activity.timestamp, newTimestamp);
55
+ }
56
+ return action;
57
+ };
58
+ const extractTimeStamp = timeStamp => {
59
+ if (timeStamp && timeStamp.length > 0) {
60
+ const ts = timeStamp.split(Constants.prefixTimestampTag);
61
+ if (ts && ts.length > 1) {
62
+ return ts[1];
63
+ }
64
+ }
65
+ return timeStamp;
66
+ };
67
+ const tagLookup = (action, tag) => {
68
+ if (!isDataTagsPresent(action)) {
69
+ return null;
70
+ }
71
+ const tags = action.payload.activity.channelData.tags;
72
+ let value;
73
+ if (tags && tags.length > 0) {
74
+ for (let i = 0; i < tags.length; i++) {
75
+ value = tags[i];
76
+ if (value && value.indexOf(tag) > -1) {
77
+ return value;
78
+ }
79
+ }
80
+ }
81
+ return null;
82
+ };
83
+ export default createMessageTimeStampMiddleware;
@@ -5,11 +5,10 @@ import { defaultMiddlewareLocalizedTexts } from "../../../../common/defaultProps
5
5
  import { defaultTimestampContentStyles } from "../defaultStyles/defaultTimestampContentStyles";
6
6
  import { getTimestampHourMinute } from "../../../../../../common/utils";
7
7
  import { useChatContextStore } from "../../../../../..";
8
- /* eslint @typescript-eslint/no-explicit-any: "off" */
9
8
 
9
+ /* eslint @typescript-eslint/no-explicit-any: "off" */
10
10
  export const DeliveredTimestamp = _ref => {
11
11
  var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$m;
12
-
13
12
  let {
14
13
  args,
15
14
  role,
@@ -17,7 +16,8 @@ export const DeliveredTimestamp = _ref => {
17
16
  } = _ref;
18
17
  const [state] = useChatContextStore();
19
18
  const dir = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.timestampDir) ?? state.domainStates.globalDir;
20
- const contentStyles = { ...defaultTimestampContentStyles,
19
+ const contentStyles = {
20
+ ...defaultTimestampContentStyles,
21
21
  ...((_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.timestampContentStyleProps)
22
22
  };
23
23
  const {
@@ -27,13 +27,12 @@ export const DeliveredTimestamp = _ref => {
27
27
  } = args;
28
28
  return /*#__PURE__*/React.createElement(Stack, {
29
29
  style: contentStyles,
30
+ dir: dir
31
+ }, role === DirectLineSenderRole.Bot && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
30
32
  dir: dir,
31
- horizontal: true
32
- }, role === DirectLineSenderRole.Bot && /*#__PURE__*/React.createElement("span", {
33
33
  "aria-hidden": "false"
34
- }, name), role === DirectLineSenderRole.Bot && /*#__PURE__*/React.createElement("span", null, " \xA0-\xA0 "), /*#__PURE__*/React.createElement("span", {
34
+ }, name, " - ", getTimestampHourMinute(timestamp))), role === DirectLineSenderRole.User && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
35
+ "aria-hidden": "false",
35
36
  dir: dir
36
- }, " ", getTimestampHourMinute(timestamp)), role === DirectLineSenderRole.User && /*#__PURE__*/React.createElement("span", null, " \xA0-\xA0 "), role === DirectLineSenderRole.User && /*#__PURE__*/React.createElement("span", {
37
- "aria-hidden": "false"
38
- }, ((_state$domainStates$m = state.domainStates.middlewareLocalizedTexts) === null || _state$domainStates$m === void 0 ? void 0 : _state$domainStates$m.MIDDLEWARE_MESSAGE_DELIVERED) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_MESSAGE_DELIVERED));
37
+ }, " ", getTimestampHourMinute(timestamp), " - ", ((_state$domainStates$m = state.domainStates.middlewareLocalizedTexts) === null || _state$domainStates$m === void 0 ? void 0 : _state$domainStates$m.MIDDLEWARE_MESSAGE_DELIVERED) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_MESSAGE_DELIVERED)));
39
38
  };
@@ -1,5 +1,4 @@
1
1
  import React, { useCallback, useEffect, useRef } from "react";
2
- import { HtmlAttributeNames } from "../../../../../../common/Constants";
3
2
  import { KeyCodes } from "../../../../../../common/KeyCodes";
4
3
  import { Stack } from "@fluentui/react";
5
4
  import { defaultMiddlewareLocalizedTexts } from "../../../../common/defaultProps/defaultMiddlewareLocalizedTexts";
@@ -9,11 +8,10 @@ import { defaultTimestampRetryStyles } from "../defaultStyles/defaultTimestampRe
9
8
  import { getTimestampHourMinute } from "../../../../../../common/utils";
10
9
  import { hooks } from "botframework-webchat";
11
10
  import { useChatContextStore } from "../../../../../..";
12
- /* eslint @typescript-eslint/no-explicit-any: "off" */
13
11
 
12
+ /* eslint @typescript-eslint/no-explicit-any: "off" */
14
13
  export const NotDeliveredTimestamp = _ref => {
15
14
  var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$r3, _state$domainStates$r4, _state$domainStates$m, _state$domainStates$m2;
16
-
17
15
  let {
18
16
  args
19
17
  } = _ref;
@@ -32,54 +30,37 @@ export const NotDeliveredTimestamp = _ref => {
32
30
  } = activity;
33
31
  const [state] = useChatContextStore();
34
32
  const dir = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.timestampDir) ?? state.domainStates.globalDir;
35
- const contentStyles = { ...defaultTimestampContentStyles,
33
+ const contentStyles = {
34
+ ...defaultTimestampContentStyles,
36
35
  ...((_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.timestampContentStyleProps)
37
36
  };
38
- const failedTextStyles = { ...defaultTimestampFailedStyles,
37
+ const failedTextStyles = {
38
+ ...defaultTimestampFailedStyles,
39
39
  ...((_state$domainStates$r3 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r3 === void 0 ? void 0 : _state$domainStates$r3.timestampFailedTextStyleProps)
40
40
  };
41
- const retryTextStyles = { ...defaultTimestampRetryStyles,
41
+ const retryTextStyles = {
42
+ ...defaultTimestampRetryStyles,
42
43
  ...((_state$domainStates$r4 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r4 === void 0 ? void 0 : _state$domainStates$r4.timestampRetryTextStyleProps)
43
44
  };
44
45
  useEffect(() => {
45
46
  var _timestampRef$current;
46
-
47
47
  const timestampWebChatNodes = timestampRef === null || timestampRef === void 0 ? void 0 : (_timestampRef$current = timestampRef.current) === null || _timestampRef$current === void 0 ? void 0 : _timestampRef$current.childNodes;
48
-
49
48
  if ((timestampWebChatNodes === null || timestampWebChatNodes === void 0 ? void 0 : timestampWebChatNodes.length) > 1) {
50
49
  timestampWebChatNodes[1].innerText = getTimestampHourMinute(timestamp);
51
50
  }
52
51
  }, [timestampRef]);
53
- const onRetryClick = useCallback(async event => {
52
+ const onRetryClick = useCallback(async () => {
54
53
  var _activity$channelData;
55
-
56
- removeNotDeliveredTimestamp(event);
57
54
  activity.previousClientActivityID = (_activity$channelData = activity.channelData) === null || _activity$channelData === void 0 ? void 0 : _activity$channelData.clientActivityID;
58
55
  await postActivity(activity);
59
56
  focus("sendBox");
60
57
  }, [activity, focus, postActivity]);
61
-
62
58
  const onRetryKeyEnter = event => {
63
59
  if (event.code === KeyCodes.ENTER) {
64
60
  event.preventDefault();
65
- onRetryClick(event);
61
+ onRetryClick();
66
62
  }
67
63
  };
68
-
69
- const removeNotDeliveredTimestamp = event => {
70
- let parent = event.target.parentElement;
71
-
72
- while (parent.tagName !== HtmlAttributeNames.listItem) {
73
- parent = parent.parentElement;
74
-
75
- if (parent.tagName === HtmlAttributeNames.unorderedList) {
76
- return;
77
- }
78
- }
79
-
80
- parent.parentNode.removeChild(parent);
81
- };
82
-
83
64
  return /*#__PURE__*/React.createElement(Stack, {
84
65
  style: contentStyles,
85
66
  dir: dir,
@@ -2,29 +2,20 @@ import React from "react";
2
2
  import { Stack } from "@fluentui/react";
3
3
  import { defaultMiddlewareLocalizedTexts } from "../../../../common/defaultProps/defaultMiddlewareLocalizedTexts";
4
4
  import { defaultTimestampContentStyles } from "../defaultStyles/defaultTimestampContentStyles";
5
- import { getTimestampHourMinute } from "../../../../../../common/utils";
6
5
  import { useChatContextStore } from "../../../../../..";
7
- /* eslint @typescript-eslint/no-explicit-any: "off" */
8
6
 
9
- export const SendingTimestamp = _ref => {
7
+ /* eslint @typescript-eslint/no-explicit-any: "off" */
8
+ export const SendingTimestamp = () => {
10
9
  var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$m;
11
-
12
- let {
13
- args
14
- } = _ref;
15
10
  const [state] = useChatContextStore();
16
11
  const dir = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.timestampDir) ?? state.domainStates.globalDir;
17
- const contentStyles = { ...defaultTimestampContentStyles,
12
+ const contentStyles = {
13
+ ...defaultTimestampContentStyles,
18
14
  ...((_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.timestampContentStyleProps)
19
15
  };
20
- const {
21
- activity: {
22
- timestamp
23
- }
24
- } = args;
25
16
  return /*#__PURE__*/React.createElement(Stack, {
26
17
  style: contentStyles,
27
18
  dir: dir,
28
19
  horizontal: true
29
- }, /*#__PURE__*/React.createElement("span", null, " ", getTimestampHourMinute(timestamp)), /*#__PURE__*/React.createElement("span", null, " \xA0-\xA0 "), /*#__PURE__*/React.createElement("span", null, " ", ((_state$domainStates$m = state.domainStates.middlewareLocalizedTexts) === null || _state$domainStates$m === void 0 ? void 0 : _state$domainStates$m.MIDDLEWARE_MESSAGE_SENDING) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_MESSAGE_SENDING, " "));
20
+ }, /*#__PURE__*/React.createElement("span", null, " ", ((_state$domainStates$m = state.domainStates.middlewareLocalizedTexts) === null || _state$domainStates$m === void 0 ? void 0 : _state$domainStates$m.MIDDLEWARE_MESSAGE_SENDING) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_MESSAGE_SENDING, " "));
30
21
  };
@@ -1,20 +1,22 @@
1
1
  /******
2
2
  * TypingIndicatorMiddleware
3
- *
3
+ *
4
4
  * This middleware changes the component that shows who's actively typing. It uses the default Microsoft LiveChatWidget styles.
5
5
  ******/
6
- import React from "react";
6
+
7
+ import React, { useCallback } from "react";
7
8
  import { DirectLineSenderRole } from "../../enums/DirectLineSenderRole";
9
+ import { debounceLeading } from "../../../../../common/utils";
8
10
  import { defaultMiddlewareLocalizedTexts } from "../../../common/defaultProps/defaultMiddlewareLocalizedTexts";
9
11
  import { defaultTypingIndicatorBubbleStyles } from "./defaultStyles/defaultTypingIndicatorBubbleStyles";
10
12
  import { defaultTypingIndicatorContainerStyles } from "./defaultStyles/defaultTypingIndicatorContainerStyles";
11
13
  import { defaultTypingIndicatorMessageStyles } from "./defaultStyles/defaultTypingIndicatorMessageStyles";
12
14
  import { useChatContextStore } from "../../../../..";
13
- import useChatSDKStore from "../../../../../hooks/useChatSDKStore"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ import useChatSDKStore from "../../../../../hooks/useChatSDKStore";
14
16
 
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
18
  const TypingIndicator = _ref => {
16
19
  var _state$domainStates$l, _state$domainStates$r, _state$domainStates$r2, _state$domainStates$r3;
17
-
18
20
  let {
19
21
  activeTyping,
20
22
  visible
@@ -22,39 +24,38 @@ const TypingIndicator = _ref => {
22
24
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
25
  const chatSDK = useChatSDKStore();
24
26
  const [state] = useChatContextStore();
25
-
27
+ const debounceTyping = useCallback(debounceLeading(() => chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.sendTypingEvent()), []);
26
28
  if (!activeTyping || Object.keys(activeTyping).length === 0 || ((_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : _state$domainStates$l.LiveChatVersion) === 1 && !visible) {
27
29
  return null;
28
30
  }
29
-
30
31
  activeTyping = Object.keys(activeTyping).map(key => activeTyping[key]);
31
-
32
32
  for (let i = 0; i < activeTyping.length; i++) {
33
33
  if (activeTyping[i].role && activeTyping[i].role === DirectLineSenderRole.User) {
34
34
  var _state$domainStates$l2;
35
-
36
35
  //visible is set to false if the current user is typing, in which case, we just send typing indicator to OC
37
36
  if (((_state$domainStates$l2 = state.domainStates.liveChatConfig) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.LiveChatVersion) === 2 && !visible) {
38
- chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.sendTypingEvent();
37
+ debounceTyping();
39
38
  return null;
40
39
  }
41
-
42
40
  activeTyping.splice(i, 1);
43
41
  i--;
44
42
  }
45
43
  }
46
-
47
- const localizedTexts = { ...defaultMiddlewareLocalizedTexts,
44
+ const localizedTexts = {
45
+ ...defaultMiddlewareLocalizedTexts,
48
46
  ...state.domainStates.middlewareLocalizedTexts
49
47
  };
50
48
  const message = getTypingIndicatorMessage(activeTyping, localizedTexts);
51
- const typingIndicatorStyles = { ...defaultTypingIndicatorContainerStyles,
49
+ const typingIndicatorStyles = {
50
+ ...defaultTypingIndicatorContainerStyles,
52
51
  ...((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.typingIndicatorStyleProps)
53
52
  };
54
- const typingIndicatorBubbleStyles = { ...defaultTypingIndicatorBubbleStyles,
53
+ const typingIndicatorBubbleStyles = {
54
+ ...defaultTypingIndicatorBubbleStyles,
55
55
  ...((_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.typingIndicatorBubbleStyleProps)
56
56
  };
57
- const typingIndicatorMessageStyles = { ...defaultTypingIndicatorMessageStyles,
57
+ const typingIndicatorMessageStyles = {
58
+ ...defaultTypingIndicatorMessageStyles,
58
59
  ...((_state$domainStates$r3 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r3 === void 0 ? void 0 : _state$domainStates$r3.typingIndicatorMessageStyleProps)
59
60
  };
60
61
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("style", null, `
@@ -96,9 +97,9 @@ const TypingIndicator = _ref => {
96
97
  }), /*#__PURE__*/React.createElement("div", {
97
98
  style: typingIndicatorMessageStyles
98
99
  }, " ", message, " ")));
99
- }; // eslint-disable-next-line react/display-name, @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
100
-
100
+ };
101
101
 
102
+ // eslint-disable-next-line react/display-name, @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
102
103
  export const typingIndicatorMiddleware = () => next => args => {
103
104
  const {
104
105
  activeTyping,
@@ -108,8 +109,9 @@ export const typingIndicatorMiddleware = () => next => args => {
108
109
  activeTyping: activeTyping,
109
110
  visible: visible
110
111
  });
111
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
112
+ };
112
113
 
114
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
113
115
  const getTypingIndicatorMessage = (activeTyping, localizedTexts) => {
114
116
  if (!activeTyping || activeTyping.length === 0) {
115
117
  return "";
@@ -120,19 +122,15 @@ const getTypingIndicatorMessage = (activeTyping, localizedTexts) => {
120
122
  const firstMember = activeTyping[0].name;
121
123
  const lastMember = activeTyping[1].name;
122
124
  let message = localizedTexts.MIDDLEWARE_TYPING_INDICATOR_TWO;
123
-
124
125
  if (!message) {
125
126
  return "";
126
127
  }
127
-
128
128
  if (message.includes("{0}")) {
129
129
  message = message.replace("{0}", firstMember);
130
130
  }
131
-
132
131
  if (message.includes("{1}")) {
133
132
  message = message.replace("{1}", lastMember);
134
133
  }
135
-
136
134
  return message;
137
135
  } else {
138
136
  const message = localizedTexts.MIDDLEWARE_TYPING_INDICATOR_MULTIPLE;
@@ -3,8 +3,10 @@
3
3
  *
4
4
  * Handles attachment sending.
5
5
  ******/
6
- import { WebChatActionType } from "../../enums/WebChatActionType"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
6
 
7
+ import { WebChatActionType } from "../../enums/WebChatActionType";
8
+
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
10
  const createSendFileAction = files => {
9
11
  return {
10
12
  payload: {
@@ -12,31 +14,26 @@ const createSendFileAction = files => {
12
14
  },
13
15
  type: WebChatActionType.WEB_CHAT_SEND_FILES
14
16
  };
15
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
-
17
+ };
17
18
 
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
20
  const attachmentProcessingMiddleware = _ref => {
19
21
  let {
20
22
  dispatch
21
23
  } = _ref;
22
24
  return next => async action => {
23
25
  var _action$payload, _action$payload$files;
24
-
25
26
  if ((action === null || action === void 0 ? void 0 : action.type) === WebChatActionType.WEB_CHAT_SEND_FILES && (action === null || action === void 0 ? void 0 : (_action$payload = action.payload) === null || _action$payload === void 0 ? void 0 : (_action$payload$files = _action$payload.files) === null || _action$payload$files === void 0 ? void 0 : _action$payload$files.length) > 0) {
26
27
  const files = action.payload.files;
27
-
28
28
  if (files.length === 1) {
29
29
  return next(action);
30
30
  }
31
-
32
31
  const dispatchAction = createSendFileAction(files.slice(0, files.length - 1));
33
32
  const nextAction = createSendFileAction([files[files.length - 1]]);
34
33
  await dispatch(dispatchAction);
35
34
  return next(nextAction);
36
35
  }
37
-
38
36
  return next(action);
39
37
  };
40
38
  };
41
-
42
39
  export default attachmentProcessingMiddleware;
@@ -3,36 +3,37 @@
3
3
  *
4
4
  * Checks if the attachment being uploaded satisfies Omnichannel's requirement on file extensions and file size.
5
5
  ******/
6
+
7
+ import { LogLevel, TelemetryEvent } from "../../../../../common/telemetry/TelemetryConstants";
6
8
  import { NotificationHandler } from "../../notification/NotificationHandler";
7
9
  import { NotificationScenarios } from "../../enums/NotificationScenarios";
8
10
  import { WebChatActionType } from "../../enums/WebChatActionType";
11
+ import { TelemetryHelper } from "../../../../../common/telemetry/TelemetryHelper";
12
+ import { AMSConstants } from "../../../../../common/Constants";
9
13
  const MBtoBRatio = 1000000;
14
+
10
15
  /*
11
16
  * If an attachment is invalid, delete this attachment from the attachments list
12
17
  * If the result attachment list is empty, return a dummy action
13
18
  */
14
-
15
- const validateAttachment = (action, allowedFileExtensions, maxUploadFileSize, localizedTexts) => {
19
+ const validateAttachment = (action, allowedFileExtensions, maxFileSizeSupportedByDynamics, localizedTexts) => {
16
20
  var _action$payload, _action$payload$activ, _action$payload2, _action$payload2$acti, _action$payload2$acti2, _action$payload3, _action$payload3$acti, _action$payload3$acti2;
17
-
18
21
  const attachments = action === null || action === void 0 ? void 0 : (_action$payload = action.payload) === null || _action$payload === void 0 ? void 0 : (_action$payload$activ = _action$payload.activity) === null || _action$payload$activ === void 0 ? void 0 : _action$payload$activ.attachments;
19
22
  const attachmentSizes = action === null || action === void 0 ? void 0 : (_action$payload2 = action.payload) === null || _action$payload2 === void 0 ? void 0 : (_action$payload2$acti = _action$payload2.activity) === null || _action$payload2$acti === void 0 ? void 0 : (_action$payload2$acti2 = _action$payload2$acti.channelData) === null || _action$payload2$acti2 === void 0 ? void 0 : _action$payload2$acti2.attachmentSizes;
20
-
21
23
  if (attachments) {
22
24
  for (let i = 0; i < attachments.length; i++) {
25
+ const maxUploadFileSize = getMaxUploadFileSize(maxFileSizeSupportedByDynamics, attachments[i].contentType);
23
26
  const fileExtensionValid = validateFileExtension(attachments[i], allowedFileExtensions);
24
27
  const fileSizeValid = validateFileSize(attachmentSizes[i], maxUploadFileSize);
25
28
  const fileIsEmpty = parseInt(attachmentSizes[i]) == 0;
26
-
27
29
  if (!fileExtensionValid || !fileSizeValid || fileIsEmpty) {
28
- NotificationHandler.notifyError(NotificationScenarios.AttachmentError, buildErrorMessage(attachments[i].name, fileExtensionValid, fileSizeValid, fileIsEmpty, maxUploadFileSize, localizedTexts));
30
+ NotificationHandler.notifyError(NotificationScenarios.AttachmentError, buildErrorMessage(attachments[i].name, fileExtensionValid, fileSizeValid, fileIsEmpty, maxUploadFileSize.toString(), maxFileSizeSupportedByDynamics, localizedTexts));
29
31
  attachments.splice(i, 1);
30
32
  attachmentSizes.splice(i, 1);
31
33
  i--;
32
34
  }
33
35
  }
34
36
  }
35
-
36
37
  if ((action === null || action === void 0 ? void 0 : (_action$payload3 = action.payload) === null || _action$payload3 === void 0 ? void 0 : (_action$payload3$acti = _action$payload3.activity) === null || _action$payload3$acti === void 0 ? void 0 : (_action$payload3$acti2 = _action$payload3$acti.attachments) === null || _action$payload3$acti2 === void 0 ? void 0 : _action$payload3$acti2.length) > 0) {
37
38
  return action;
38
39
  } else {
@@ -41,109 +42,149 @@ const validateAttachment = (action, allowedFileExtensions, maxUploadFileSize, lo
41
42
  payload: null
42
43
  };
43
44
  }
44
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
-
45
+ };
46
46
 
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
48
  const validateFileExtension = (attachment, allowedFileExtensions) => {
48
49
  if (!allowedFileExtensions) {
49
50
  return true;
50
51
  }
51
-
52
52
  const fileName = attachment.name.toLowerCase();
53
53
  const index = fileName.lastIndexOf(".");
54
-
55
54
  if (!index) {
56
55
  return false;
57
56
  }
58
-
59
57
  const fileExtension = fileName.substring(index);
60
58
  const allExtensions = allowedFileExtensions === null || allowedFileExtensions === void 0 ? void 0 : allowedFileExtensions.toLowerCase().split(",");
61
59
  return allExtensions.indexOf(fileExtension) > -1;
62
60
  };
63
-
64
61
  const validateFileSize = (attachmentSize, maxUploadFileSize) => {
65
- return (maxUploadFileSize && parseInt(maxUploadFileSize) * MBtoBRatio) > parseInt(attachmentSize);
62
+ return maxUploadFileSize * MBtoBRatio > parseInt(attachmentSize);
66
63
  };
67
-
68
- const buildErrorMessage = (fileName, supportedFileExtension, supportedFileSize, fileIsEmpty, maxUploadFileSize, localizedTexts) => {
64
+ const getMaxUploadFileSize = (maxFileSizeSupportedByDynamicsStr, contentType) => {
65
+ const maxFileSizeSupportedByDynamics = maxFileSizeSupportedByDynamicsStr && parseInt(maxFileSizeSupportedByDynamicsStr) ? parseInt(maxFileSizeSupportedByDynamicsStr) : AMSConstants.maxSupportedFileSize;
66
+ const amsAttachmentSizeLimit = isImage(contentType) ? AMSConstants.maxSupportedImageSize : AMSConstants.maxSupportedFileSize;
67
+ // Takes the smallest max file size configure betteween AMS and Dynamics Config
68
+ return maxFileSizeSupportedByDynamics < amsAttachmentSizeLimit ? maxFileSizeSupportedByDynamics : amsAttachmentSizeLimit;
69
+ };
70
+ const isImage = contentType => {
71
+ return AMSConstants.supportedImagesMimeTypes.includes(contentType);
72
+ };
73
+ const buildErrorMessage = (fileName, supportedFileExtension, supportedFileSize, fileIsEmpty, maxUploadFileSize, maxFileSizeSupportedByDynamics, localizedTexts) => {
69
74
  let errorMessage = "";
70
-
71
75
  if (!fileName || !maxUploadFileSize) {
76
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
77
+ Event: TelemetryEvent.AttachmentUploadValidatorMiddlewareFailed,
78
+ Description: "Attachment validation failed",
79
+ ExceptionDetails: {
80
+ ErrorDetails: "File provided is null"
81
+ }
82
+ });
72
83
  return localizedTexts.MIDDLEWARE_BANNER_FILE_NULL_ERROR ?? "";
73
84
  }
74
-
75
85
  if (!supportedFileExtension && !supportedFileSize) {
76
- errorMessage = getFileSizeAndFileExtensionErrorMessage(fileName, maxUploadFileSize, localizedTexts);
86
+ errorMessage = getFileSizeAndFileExtensionErrorMessage(fileName, maxUploadFileSize, maxFileSizeSupportedByDynamics, localizedTexts);
77
87
  } else if (!supportedFileSize) {
78
- errorMessage = getFileSizeErrorMessage(maxUploadFileSize, localizedTexts);
88
+ errorMessage = getFileSizeErrorMessage(maxUploadFileSize, maxFileSizeSupportedByDynamics, localizedTexts);
79
89
  } else if (!supportedFileExtension) {
80
90
  errorMessage = getFileExtensionErrorMessage(fileName, localizedTexts);
81
91
  } else if (fileIsEmpty) {
92
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
93
+ Event: TelemetryEvent.AttachmentUploadValidatorMiddlewareFailed,
94
+ Description: "Attachment validation failed",
95
+ ExceptionDetails: {
96
+ ErrorDetails: "File provided is empty"
97
+ }
98
+ });
82
99
  errorMessage = localizedTexts.MIDDLEWARE_BANNER_FILE_IS_EMPTY_ERROR ?? "";
83
100
  } else {
101
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
102
+ Event: TelemetryEvent.AttachmentUploadValidatorMiddlewareFailed,
103
+ Description: "Attachment validation failed",
104
+ ExceptionDetails: {
105
+ ErrorDetails: `Unexpected error: supportedFileExtension=${supportedFileExtension} supportedFileSize=${supportedFileSize} fileIsEmpty=${!fileIsEmpty}`
106
+ }
107
+ });
84
108
  errorMessage = localizedTexts.MIDDLEWARE_BANNER_ERROR_MESSAGE ?? "";
85
109
  }
86
-
87
110
  return errorMessage;
88
111
  };
89
-
90
- const getFileSizeAndFileExtensionErrorMessage = (fileName, maxUploadFileSize, localizedTexts) => {
112
+ const getFileSizeAndFileExtensionErrorMessage = (fileName, maxUploadFileSize, maxFileSizeSupportedByDynamics, localizedTexts) => {
91
113
  const index = fileName.lastIndexOf(".");
92
- let errorMessage;
93
-
114
+ let errorMessage, exceptionDetails;
94
115
  if (index < 0) {
95
116
  errorMessage = localizedTexts.MIDDLEWARE_BANNER_FILE_SIZE_WITHOUT_EXTENSION_ERROR;
117
+ exceptionDetails = `File exceeded the allowed limit of ${maxUploadFileSize} MB and File provided without file extension`;
96
118
  } else {
97
119
  var _errorMessage;
98
-
99
120
  const fileExtension = fileName.substring(index);
100
121
  errorMessage = localizedTexts.MIDDLEWARE_BANNER_FILE_SIZE_EXTENSION_ERROR;
101
-
122
+ exceptionDetails = `File exceeds the allowed limit of ${maxUploadFileSize} MB and ${fileExtension} files are not supported`;
102
123
  if ((_errorMessage = errorMessage) !== null && _errorMessage !== void 0 && _errorMessage.includes("{1}")) {
103
124
  errorMessage = errorMessage.replace("{1}", fileExtension);
104
125
  }
105
126
  }
106
-
127
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
128
+ Event: TelemetryEvent.AttachmentUploadValidatorMiddlewareFailed,
129
+ Description: "Attachment validation failed",
130
+ ExceptionDetails: {
131
+ ErrorDetails: `${exceptionDetails} Dynamics file size limit=${maxFileSizeSupportedByDynamics} AMS image size limit=${AMSConstants.maxSupportedImageSize} AMS file size limit=${AMSConstants.maxSupportedFileSize}`
132
+ }
133
+ });
107
134
  return errorMessage ? errorMessage.includes("{0}") ? errorMessage.replace("{0}", maxUploadFileSize) : errorMessage : "";
108
135
  };
109
-
110
136
  const getFileExtensionErrorMessage = (fileName, localizedTexts) => {
111
137
  const index = fileName.lastIndexOf(".");
112
-
113
138
  if (index < 0) {
139
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
140
+ Event: TelemetryEvent.AttachmentUploadValidatorMiddlewareFailed,
141
+ Description: "Attachment validation failed",
142
+ ExceptionDetails: {
143
+ ErrorDetails: "File provided without file extension"
144
+ }
145
+ });
114
146
  return localizedTexts.MIDDLEWARE_BANNER_FILE_WITHOUT_EXTENSION ?? "";
115
147
  } else {
116
148
  const fileExtension = fileName.substring(index);
149
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
150
+ Event: TelemetryEvent.AttachmentUploadValidatorMiddlewareFailed,
151
+ Description: "Attachment validation failed",
152
+ ExceptionDetails: {
153
+ ErrorDetails: `${fileExtension} files extension is not supported.`
154
+ }
155
+ });
117
156
  const errorMessage = localizedTexts.MIDDLEWARE_BANNER_FILE_EXTENSION_ERROR;
118
157
  return errorMessage ? errorMessage.includes("{0}") ? errorMessage.replace("{0}", fileExtension) : errorMessage : "";
119
158
  }
120
159
  };
121
-
122
- const getFileSizeErrorMessage = (maxUploadFileSize, localizedTexts) => {
160
+ const getFileSizeErrorMessage = (maxUploadFileSize, maxFileSizeSupportedByDynamics, localizedTexts) => {
161
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
162
+ Event: TelemetryEvent.AttachmentUploadValidatorMiddlewareFailed,
163
+ Description: "Attachment validation failed",
164
+ ExceptionDetails: {
165
+ ErrorDetails: `File exceeds the allowed limit of ${maxUploadFileSize}MB. Dynamics file size limit=${maxFileSizeSupportedByDynamics} AMS image size limit=${AMSConstants.maxSupportedImageSize} AMS file size limit=${AMSConstants.maxSupportedFileSize}`
166
+ }
167
+ });
123
168
  const errorMessage = localizedTexts.MIDDLEWARE_BANNER_FILE_SIZE_ERROR;
124
169
  return errorMessage ? errorMessage.includes("{0}") ? errorMessage.replace("{0}", maxUploadFileSize) : errorMessage : "";
125
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
126
-
170
+ };
127
171
 
128
- const createAttachmentUploadValidatorMiddleware = (allowedFileExtensions, maxUploadFileSize, localizedTexts) => _ref => {
172
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
173
+ const createAttachmentUploadValidatorMiddleware = (allowedFileExtensions, maxFileSizeSupportedByDynamics, localizedTexts) => _ref => {
129
174
  let {
130
175
  dispatch
131
176
  } = _ref;
132
177
  return next => action => {
133
178
  if (action.type === WebChatActionType.DIRECT_LINE_POST_ACTIVITY) {
134
179
  var _payload$activity, _payload$activity2, _payload$activity2$ch, _payload$activity3, _payload$activity3$at, _payload$activity4, _payload$activity4$ch, _payload$activity4$ch2;
135
-
136
180
  const {
137
181
  payload
138
182
  } = action;
139
-
140
183
  if (payload !== null && payload !== void 0 && (_payload$activity = payload.activity) !== null && _payload$activity !== void 0 && _payload$activity.attachments && payload !== null && payload !== void 0 && (_payload$activity2 = payload.activity) !== null && _payload$activity2 !== void 0 && (_payload$activity2$ch = _payload$activity2.channelData) !== null && _payload$activity2$ch !== void 0 && _payload$activity2$ch.attachmentSizes && (payload === null || payload === void 0 ? void 0 : (_payload$activity3 = payload.activity) === null || _payload$activity3 === void 0 ? void 0 : (_payload$activity3$at = _payload$activity3.attachments) === null || _payload$activity3$at === void 0 ? void 0 : _payload$activity3$at.length) === (payload === null || payload === void 0 ? void 0 : (_payload$activity4 = payload.activity) === null || _payload$activity4 === void 0 ? void 0 : (_payload$activity4$ch = _payload$activity4.channelData) === null || _payload$activity4$ch === void 0 ? void 0 : (_payload$activity4$ch2 = _payload$activity4$ch.attachmentSizes) === null || _payload$activity4$ch2 === void 0 ? void 0 : _payload$activity4$ch2.length)) {
141
- return next(validateAttachment(action, allowedFileExtensions, maxUploadFileSize, localizedTexts));
184
+ return next(validateAttachment(action, allowedFileExtensions, maxFileSizeSupportedByDynamics, localizedTexts));
142
185
  }
143
186
  }
144
-
145
187
  return next(action);
146
188
  };
147
189
  };
148
-
149
190
  export default createAttachmentUploadValidatorMiddleware;