@microsoft/omnichannel-chat-widget 0.1.0-main.eb80fb1 → 0.1.0-main.ec08ec5

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 (308) hide show
  1. package/README.md +35 -11
  2. package/lib/cjs/common/Constants.js +31 -150
  3. package/lib/cjs/common/KeyCodes.js +0 -3
  4. package/lib/cjs/common/contextDataStore/DataStoreManager.js +0 -4
  5. package/lib/cjs/common/storage/default/defaultCacheManager.js +24 -0
  6. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +102 -0
  7. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +78 -0
  8. package/lib/cjs/common/telemetry/TelemetryConstants.js +79 -24
  9. package/lib/cjs/common/telemetry/TelemetryHelper.js +26 -54
  10. package/lib/cjs/common/telemetry/TelemetryManager.js +14 -34
  11. package/lib/cjs/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  12. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -3
  13. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +49 -35
  14. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +6 -14
  15. package/lib/cjs/common/utils.js +80 -80
  16. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +21 -45
  17. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -26
  18. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +12 -70
  19. package/lib/cjs/components/dimlayer/DimLayer.js +0 -4
  20. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +8 -36
  21. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -8
  22. package/lib/cjs/components/footerstateful/FooterStateful.js +12 -44
  23. package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +0 -6
  24. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +15 -44
  25. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -8
  26. package/lib/cjs/components/headerstateful/HeaderStateful.js +23 -34
  27. package/lib/cjs/components/livechatwidget/LiveChatWidget.js +2 -14
  28. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +37 -0
  29. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +18 -0
  30. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  31. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +32 -0
  32. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +62 -0
  33. package/lib/cjs/components/livechatwidget/common/Deferred.js +35 -0
  34. package/lib/cjs/components/livechatwidget/common/authHelper.js +50 -0
  35. package/lib/cjs/components/livechatwidget/common/createAdapter.js +10 -9
  36. package/lib/cjs/components/livechatwidget/common/createFooter.js +4 -23
  37. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -10
  38. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +36 -44
  39. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +73 -52
  40. package/lib/cjs/components/livechatwidget/common/disposeTelemetryLoggers.js +0 -3
  41. package/lib/cjs/components/livechatwidget/common/endChat.js +127 -61
  42. package/lib/cjs/components/livechatwidget/common/getGeneralStylesForButton.js +0 -6
  43. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +8 -17
  44. package/lib/cjs/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -8
  45. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +58 -54
  46. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +131 -56
  47. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +9 -33
  48. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +3 -15
  49. package/lib/cjs/components/livechatwidget/common/shareObservable.js +41 -0
  50. package/lib/cjs/components/livechatwidget/common/startChat.js +157 -77
  51. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +0 -8
  52. package/lib/cjs/components/livechatwidget/common/updateSessionDataForTelemetry.js +2 -11
  53. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +287 -139
  54. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +4 -17
  55. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +4 -17
  56. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +9 -14
  57. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +32 -23
  58. package/lib/cjs/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  59. package/lib/cjs/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +13 -0
  60. package/lib/cjs/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  61. package/lib/cjs/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  62. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +11 -44
  63. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +21 -35
  64. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +2 -24
  65. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +94 -19
  66. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -7
  67. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -6
  68. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  69. package/lib/cjs/components/webchatcontainerstateful/common/mockadapter.js +9 -26
  70. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +6 -15
  71. package/lib/cjs/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -24
  72. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +3 -15
  73. package/lib/cjs/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -8
  74. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  75. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  76. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +10 -0
  77. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +0 -4
  78. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  79. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  80. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  81. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  82. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  83. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  84. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +0 -7
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -5
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +33 -80
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +9 -19
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +25 -60
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +7 -15
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +82 -0
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +10 -0
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -3
  97. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -3
  98. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +10 -0
  99. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -9
  100. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +89 -0
  101. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +2 -12
  102. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +6 -28
  103. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +2 -11
  104. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +13 -30
  105. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +3 -9
  106. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +6 -34
  107. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +1 -10
  108. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +7 -18
  109. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +16 -19
  110. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +1 -9
  111. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -9
  112. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -34
  113. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +1 -10
  114. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +7 -11
  115. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +5 -14
  116. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -21
  117. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +33 -0
  118. package/lib/cjs/contexts/ChatAdapterStore.js +0 -2
  119. package/lib/cjs/contexts/ChatContextStore.js +0 -2
  120. package/lib/cjs/contexts/ChatSDKStore.js +0 -2
  121. package/lib/cjs/contexts/common/ConversationState.js +4 -3
  122. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +11 -9
  123. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +14 -10
  124. package/lib/cjs/contexts/createReducer.js +150 -107
  125. package/lib/cjs/controller/componentController.js +5 -34
  126. package/lib/cjs/hooks/useChatAdapterStore.js +0 -6
  127. package/lib/cjs/hooks/useChatContextStore.js +0 -6
  128. package/lib/cjs/hooks/useChatSDKStore.js +0 -6
  129. package/lib/cjs/index.js +0 -5
  130. package/lib/cjs/plugins/newMessageEventHandler.js +78 -0
  131. package/lib/esm/common/Constants.js +28 -138
  132. package/lib/esm/common/KeyCodes.js +0 -2
  133. package/lib/esm/common/contextDataStore/DataStoreManager.js +0 -2
  134. package/lib/esm/common/storage/default/defaultCacheManager.js +16 -0
  135. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +95 -0
  136. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +70 -0
  137. package/lib/esm/common/telemetry/TelemetryConstants.js +78 -19
  138. package/lib/esm/common/telemetry/TelemetryHelper.js +27 -44
  139. package/lib/esm/common/telemetry/TelemetryManager.js +14 -23
  140. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  141. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  142. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +49 -23
  143. package/lib/esm/common/telemetry/loggers/consoleLogger.js +6 -10
  144. package/lib/esm/common/utils.js +73 -45
  145. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +21 -16
  146. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +23 -13
  147. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +13 -46
  148. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +8 -15
  149. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -6
  150. package/lib/esm/components/footerstateful/FooterStateful.js +14 -25
  151. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +15 -37
  152. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -6
  153. package/lib/esm/components/headerstateful/HeaderStateful.js +24 -20
  154. package/lib/esm/components/livechatwidget/LiveChatWidget.js +2 -2
  155. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +30 -0
  156. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +11 -0
  157. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  158. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +25 -0
  159. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +55 -0
  160. package/lib/esm/components/livechatwidget/common/Deferred.js +28 -0
  161. package/lib/esm/components/livechatwidget/common/authHelper.js +42 -0
  162. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -4
  163. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -16
  164. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -5
  165. package/lib/esm/components/livechatwidget/common/createMarkdown.js +38 -37
  166. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +75 -40
  167. package/lib/esm/components/livechatwidget/common/endChat.js +131 -50
  168. package/lib/esm/components/livechatwidget/common/getGeneralStylesForButton.js +0 -2
  169. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +10 -12
  170. package/lib/esm/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -5
  171. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +60 -26
  172. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +129 -50
  173. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +9 -23
  174. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +4 -6
  175. package/lib/esm/components/livechatwidget/common/shareObservable.js +35 -0
  176. package/lib/esm/components/livechatwidget/common/startChat.js +161 -61
  177. package/lib/esm/components/livechatwidget/common/updateSessionDataForTelemetry.js +4 -2
  178. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +293 -94
  179. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +4 -5
  180. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +4 -5
  181. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +9 -4
  182. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +32 -11
  183. package/lib/esm/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  184. package/lib/esm/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +6 -0
  185. package/lib/esm/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  186. package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  187. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +15 -29
  188. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +24 -12
  189. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +2 -6
  190. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +94 -4
  191. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  192. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -2
  193. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  194. package/lib/esm/components/webchatcontainerstateful/common/mockadapter.js +9 -18
  195. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +6 -11
  196. package/lib/esm/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -16
  197. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +3 -5
  198. package/lib/esm/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -6
  199. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  200. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  201. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +3 -0
  202. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +0 -2
  203. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  204. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  205. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  206. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  207. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  208. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  209. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  210. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  211. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +2 -5
  212. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -4
  213. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +34 -66
  214. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +11 -11
  215. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +25 -39
  216. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +9 -8
  217. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +34 -0
  218. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +80 -0
  219. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  220. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +3 -0
  221. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -1
  222. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -1
  223. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +3 -0
  224. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -7
  225. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +83 -0
  226. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +3 -3
  227. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +7 -14
  228. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +3 -3
  229. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +15 -19
  230. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +5 -8
  231. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +6 -29
  232. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +3 -7
  233. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +9 -14
  234. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +16 -14
  235. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +3 -7
  236. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -7
  237. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +15 -27
  238. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +3 -5
  239. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +9 -9
  240. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +7 -9
  241. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -13
  242. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +27 -0
  243. package/lib/esm/contexts/ChatAdapterStore.js +2 -1
  244. package/lib/esm/contexts/ChatContextStore.js +2 -1
  245. package/lib/esm/contexts/ChatSDKStore.js +2 -1
  246. package/lib/esm/contexts/common/ConversationState.js +4 -3
  247. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +11 -9
  248. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +14 -6
  249. package/lib/esm/contexts/createReducer.js +150 -103
  250. package/lib/esm/controller/componentController.js +6 -5
  251. package/lib/esm/hooks/useChatAdapterStore.js +0 -4
  252. package/lib/esm/hooks/useChatContextStore.js +0 -4
  253. package/lib/esm/hooks/useChatSDKStore.js +0 -4
  254. package/lib/esm/plugins/newMessageEventHandler.js +71 -0
  255. package/lib/types/common/Constants.d.ts +27 -2
  256. package/lib/types/common/interfaces/IContextDataStore.d.ts +2 -2
  257. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  258. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  259. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  260. package/lib/types/common/telemetry/TelemetryConstants.d.ts +53 -6
  261. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -0
  262. package/lib/types/common/telemetry/definitions/Contracts.d.ts +2 -4
  263. package/lib/types/common/telemetry/definitions/Payload.d.ts +12 -9
  264. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +3 -3
  265. package/lib/types/common/utils.d.ts +8 -1
  266. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +5 -2
  267. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  268. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +5 -1
  269. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  270. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  271. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  272. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  273. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  274. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  275. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  276. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  277. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +7 -2
  278. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  279. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -2
  280. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  281. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  282. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +4 -3
  283. package/lib/types/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.d.ts +2 -2
  284. package/lib/types/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.d.ts +5 -0
  285. package/lib/types/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.d.ts +4 -0
  286. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -2
  287. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  288. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +2 -0
  289. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  290. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  291. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +4 -1
  292. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +4 -0
  293. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  294. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +0 -1
  295. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  296. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  297. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  298. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  299. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.d.ts +3 -0
  300. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.d.ts +3 -0
  301. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  302. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  303. package/lib/types/contexts/common/ConversationState.d.ts +4 -2
  304. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +4 -2
  305. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +12 -9
  306. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  307. package/lib/types/plugins/newMessageEventHandler.d.ts +2 -0
  308. package/package.json +12 -13
@@ -1,13 +1,14 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
-
3
2
  /******
4
3
  * AttachmentMiddleware
5
4
  *
6
5
  * Handles attachment downloading.
7
6
  ******/
7
+
8
8
  import { Constants, MimeTypes, WebChatMiddlewareConstants } from "../../../../../common/Constants";
9
9
  import React from "react";
10
10
  import { getFileAttachmentIconData, isInlineMediaSupported } from "../../../common/utils/FileAttachmentIconManager";
11
+ import { BroadcastEvent } from "../../../../../common/telemetry/TelemetryConstants";
11
12
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
12
13
  import { WebChatActionType } from "../../enums/WebChatActionType";
13
14
  import { defaultAttachmentAdaptiveCardStyles } from "./defaultStyles/defaultAtttachmentAdaptiveCardStyles";
@@ -20,14 +21,12 @@ import { defaultAttachmentProps } from "../../../common/defaultProps/defaultAtta
20
21
  import { defaultAttachmentSizeStyles } from "./defaultStyles/defaultAttachmentSizeStyles";
21
22
  import { defaultAttachmentStyles } from "./defaultStyles/defaultAtttachmentStyles";
22
23
  import { useChatContextStore } from "../../../../..";
23
-
24
24
  const AttachmentContent = props => {
25
25
  return /*#__PURE__*/React.createElement("div", {
26
26
  id: props.id,
27
27
  style: props.style
28
28
  }, props.children);
29
29
  };
30
-
31
30
  const AttachmentIcon = props => {
32
31
  return /*#__PURE__*/React.createElement("div", {
33
32
  id: props.id,
@@ -36,10 +35,8 @@ const AttachmentIcon = props => {
36
35
  src: props.src ?? getFileAttachmentIconData("txt")
37
36
  }));
38
37
  };
39
-
40
38
  const Attachment = props => {
41
39
  var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$r3, _state$domainStates$r4, _state$domainStates$r5, _state$domainStates$r6, _state$domainStates$r7, _state$domainStates$r8, _state$domainStates$r9;
42
-
43
40
  const {
44
41
  iconData,
45
42
  imageCard,
@@ -48,34 +45,41 @@ const Attachment = props => {
48
45
  } = props;
49
46
  const [state] = useChatContextStore();
50
47
  const attachmentId = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : (_state$domainStates$r2 = _state$domainStates$r.attachmentProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.webChatAttachmentId) ?? defaultAttachmentProps.webChatAttachmentId;
51
- const attachmentDividerStyles = { ...defaultAttachmentDividerStyles,
48
+ const attachmentDividerStyles = {
49
+ ...defaultAttachmentDividerStyles,
52
50
  ...((_state$domainStates$r3 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r3 === void 0 ? void 0 : _state$domainStates$r3.attachmentDividerStyles)
53
51
  };
54
- const attachmentIconStyles = { ...defaultAttachmentIconStyles,
52
+ const attachmentIconStyles = {
53
+ ...defaultAttachmentIconStyles,
55
54
  ...((_state$domainStates$r4 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r4 === void 0 ? void 0 : _state$domainStates$r4.attachmentIconStyles)
56
55
  };
57
- const attachmentStyles = { ...defaultAttachmentStyles,
56
+ const attachmentStyles = {
57
+ ...defaultAttachmentStyles,
58
58
  ...((_state$domainStates$r5 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r5 === void 0 ? void 0 : _state$domainStates$r5.attachmentStyles)
59
59
  };
60
- const attachmentSizeStylesString = Object.entries({ ...defaultAttachmentSizeStyles,
60
+ const attachmentSizeStylesString = Object.entries({
61
+ ...defaultAttachmentSizeStyles,
61
62
  ...((_state$domainStates$r6 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r6 === void 0 ? void 0 : _state$domainStates$r6.attachmentSizeStyles)
62
63
  }).map(_ref => {
63
64
  let [k, v] = _ref;
64
65
  return `${k.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)}:${v}`;
65
66
  }).join(";");
66
- const attachmentContentStylesString = Object.entries({ ...defaultAttachmentContentStyles,
67
+ const attachmentContentStylesString = Object.entries({
68
+ ...defaultAttachmentContentStyles,
67
69
  ...((_state$domainStates$r7 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r7 === void 0 ? void 0 : _state$domainStates$r7.attachmentContentStyles)
68
70
  }).map(_ref2 => {
69
71
  let [k, v] = _ref2;
70
72
  return `${k.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)}:${v}`;
71
73
  }).join(";");
72
- const attachmentFileNameStylesString = Object.entries({ ...defaultAttachmentFileNameStyles,
74
+ const attachmentFileNameStylesString = Object.entries({
75
+ ...defaultAttachmentFileNameStyles,
73
76
  ...((_state$domainStates$r8 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r8 === void 0 ? void 0 : _state$domainStates$r8.attachmentFileNameStyles)
74
77
  }).map(_ref3 => {
75
78
  let [k, v] = _ref3;
76
79
  return `${k.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)}:${v}`;
77
80
  }).join(";");
78
- const attachmentDownloadIconStylesString = Object.entries({ ...defaultAttachmentDownloadIconStyles,
81
+ const attachmentDownloadIconStylesString = Object.entries({
82
+ ...defaultAttachmentDownloadIconStyles,
79
83
  ...((_state$domainStates$r9 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r9 === void 0 ? void 0 : _state$domainStates$r9.attachmentDownloadIconStyles)
80
84
  }).map(_ref4 => {
81
85
  let [k, v] = _ref4;
@@ -101,13 +105,12 @@ const Attachment = props => {
101
105
  style: attachmentIconStyles
102
106
  }), textCard && renderer(textCard))));
103
107
  };
108
+
104
109
  /**
105
110
  * Patch card with different attachment data.
106
111
  * @param card
107
112
  * @param newAttachment
108
113
  */
109
-
110
-
111
114
  const patchAttachment = (card, newAttachment) => {
112
115
  const {
113
116
  activity,
@@ -124,7 +127,6 @@ const patchAttachment = (card, newAttachment) => {
124
127
  attachment: patchedAttachment
125
128
  };
126
129
  };
127
-
128
130
  const genPreviewCardWithAttachment = (card, iconData, next) => {
129
131
  const patchedTextCard = patchAttachment(card, {
130
132
  contentType: MimeTypes.UnknownFileType,
@@ -137,35 +139,30 @@ const genPreviewCardWithAttachment = (card, iconData, next) => {
137
139
  renderer: next
138
140
  });
139
141
  };
140
-
141
142
  const createAttachmentMiddleware = enableInlinePlaying => {
142
143
  // eslint-disable-next-line react/display-name
143
144
  const attachmentMiddleware = () => next => function () {
144
145
  var _state$domainStates$r10, _state$domainStates$r11, _state$domainStates$r12, _card$activity$channe;
145
-
146
146
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
147
147
  args[_key] = arguments[_key];
148
148
  }
149
-
150
149
  const [card] = args;
151
-
152
150
  if (!(card !== null && card !== void 0 && card.activity)) {
153
151
  return next(...args);
154
152
  }
155
-
156
153
  const {
157
154
  activity: {
158
155
  attachments
159
156
  },
160
157
  attachment
161
- } = card; // No attachment
162
-
158
+ } = card;
159
+ // No attachment
163
160
  if (!attachments || !attachments.length || !attachment) {
164
161
  return next(...args);
165
- } // Check for Adaptive cards
166
- // eslint-disable-next-line prefer-const
167
-
162
+ }
168
163
 
164
+ // Check for Adaptive cards
165
+ // eslint-disable-next-line prefer-const
169
166
  let {
170
167
  content,
171
168
  contentType
@@ -178,7 +175,6 @@ const createAttachmentMiddleware = enableInlinePlaying => {
178
175
  } = content || {
179
176
  type: ""
180
177
  };
181
-
182
178
  if (!type && content && Constants.supportedAdaptiveCardContentTypes.indexOf(contentType) >= 0) {
183
179
  try {
184
180
  content = JSON.parse(content);
@@ -187,7 +183,7 @@ const createAttachmentMiddleware = enableInlinePlaying => {
187
183
  } catch (e) {
188
184
  const errorData = "Unable to parse the adaptive card format";
189
185
  BroadcastService.postMessage({
190
- eventName: "InvalidAdaptiveCardFormat",
186
+ eventName: BroadcastEvent.InvalidAdaptiveCardFormat,
191
187
  payload: {
192
188
  Message: errorData,
193
189
  ExceptionDetails: e
@@ -195,41 +191,35 @@ const createAttachmentMiddleware = enableInlinePlaying => {
195
191
  });
196
192
  }
197
193
  }
198
-
199
194
  const [state] = useChatContextStore();
200
195
  const attachmentId = ((_state$domainStates$r10 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r10 === void 0 ? void 0 : (_state$domainStates$r11 = _state$domainStates$r10.attachmentProps) === null || _state$domainStates$r11 === void 0 ? void 0 : _state$domainStates$r11.adaptiveCardAttachmentId) ?? defaultAttachmentProps.adaptiveCardAttachmentId;
201
- const atttachmentAdaptiveCardStyles = { ...defaultAttachmentAdaptiveCardStyles,
196
+ const atttachmentAdaptiveCardStyles = {
197
+ ...defaultAttachmentAdaptiveCardStyles,
202
198
  ...((_state$domainStates$r12 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r12 === void 0 ? void 0 : _state$domainStates$r12.attachmentAdaptiveCardStyles)
203
199
  };
204
-
205
200
  if (type === WebChatMiddlewareConstants.adaptiveCard || Constants.supportedAdaptiveCardContentTypes.indexOf(contentType) >= 0) {
206
201
  return /*#__PURE__*/React.createElement("div", {
207
202
  id: attachmentId,
208
203
  style: atttachmentAdaptiveCardStyles
209
204
  }, next(...args));
210
205
  }
211
-
212
206
  if ((_card$activity$channe = card.activity.channelData) !== null && _card$activity$channe !== void 0 && _card$activity$channe.middlewareData) {
213
207
  attachment.contentUrl = card.activity.channelData.middlewareData[attachment.name];
214
208
  } else if (attachment !== null && attachment !== void 0 && attachment.tempContentUrl) {
215
209
  attachment.contentUrl = attachment.tempContentUrl;
216
210
  }
217
-
218
211
  const fileExtension = attachment.name.substring(attachment.name.lastIndexOf(".") + 1, attachment.name.length) || attachment.name;
219
212
  const imageExtension = Constants.imageRegex.test(attachment.name);
220
213
  const audioExtension = Constants.audioMediaRegex.test(attachment.name);
221
214
  const videoExtension = Constants.videoMediaRegex.test(attachment.name);
222
215
  const iconData = getFileAttachmentIconData(fileExtension);
223
-
224
216
  if (imageExtension) {
225
217
  return genPreviewCardWithAttachment(card, iconData, next);
226
218
  }
227
-
228
219
  if (audioExtension || videoExtension) {
229
220
  if (enableInlinePlaying && card.activity.actionType && card.activity.actionType === WebChatActionType.DIRECT_LINE_INCOMING_ACTIVITY && isInlineMediaSupported(attachment.name)) {
230
221
  return genPreviewCardWithAttachment(card, iconData, next);
231
222
  }
232
-
233
223
  return /*#__PURE__*/React.createElement(Attachment, {
234
224
  iconData: iconData,
235
225
  textCard: patchAttachment(card, {
@@ -239,7 +229,6 @@ const createAttachmentMiddleware = enableInlinePlaying => {
239
229
  renderer: next
240
230
  });
241
231
  }
242
-
243
232
  if (fileExtension === "txt") {
244
233
  return /*#__PURE__*/React.createElement(Attachment, {
245
234
  iconData: iconData,
@@ -250,15 +239,12 @@ const createAttachmentMiddleware = enableInlinePlaying => {
250
239
  renderer: next
251
240
  });
252
241
  }
253
-
254
242
  return /*#__PURE__*/React.createElement(Attachment, {
255
243
  iconData: iconData,
256
244
  textCard: card,
257
245
  renderer: next
258
246
  });
259
247
  };
260
-
261
248
  return attachmentMiddleware;
262
249
  };
263
-
264
250
  export default createAttachmentMiddleware;
@@ -4,17 +4,18 @@
4
4
  * This middleware handles the avatar icon for each non-system message. It does the following processing:
5
5
  * 1. Renders the first two letters of the sender as the profile pic
6
6
  ******/
7
+
7
8
  import React from "react";
8
9
  import { Constants } from "../../../../../common/Constants";
9
10
  import { defaultAvatarStyles } from "./defaultStyles/defaultAvatarStyles";
10
11
  import { defaultAvatarTextStyles } from "./defaultStyles/defaultAvatarTextStyles";
11
- import { getIconText } from "../../../../../common/utils"; // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
12
+ import { getIconText } from "../../../../../common/utils";
12
13
 
14
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
13
15
  export const createAvatarMiddleware = (avatarStyleProps, avatarTextStyleProps) => () => next => function () {
14
16
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15
17
  args[_key] = arguments[_key];
16
18
  }
17
-
18
19
  const [params] = args;
19
20
  const {
20
21
  activity: {
@@ -27,18 +28,18 @@ export const createAvatarMiddleware = (avatarStyleProps, avatarTextStyleProps) =
27
28
  },
28
29
  fromUser
29
30
  } = params;
30
-
31
31
  if (fromUser !== false || tags && tags.includes(Constants.systemMessageTag)) {
32
32
  return false;
33
33
  }
34
-
35
- const avatarStyles = { ...defaultAvatarStyles,
34
+ const avatarStyles = {
35
+ ...defaultAvatarStyles,
36
36
  ...avatarStyleProps
37
37
  };
38
- const avatarTextStyles = { ...defaultAvatarTextStyles,
38
+ const avatarTextStyles = {
39
+ ...defaultAvatarTextStyles,
39
40
  ...avatarTextStyleProps
40
- }; // eslint-disable-next-line react/display-name
41
-
41
+ };
42
+ // eslint-disable-next-line react/display-name
42
43
  return () => /*#__PURE__*/React.createElement("div", {
43
44
  style: avatarStyles
44
45
  }, /*#__PURE__*/React.createElement("p", {
@@ -0,0 +1,34 @@
1
+ import { BotMagicCodeStore } from "../../BotMagicCodeStore";
2
+ var CardActionType;
3
+ (function (CardActionType) {
4
+ CardActionType["OpenUrl"] = "openUrl";
5
+ CardActionType["SignIn"] = "signin";
6
+ })(CardActionType || (CardActionType = {}));
7
+ const validCardActionTypes = [CardActionType.OpenUrl, CardActionType.SignIn];
8
+ const botOauthUrlRegex = /[\S]+.botframework.com\/api\/oauth\/signin\?signin=([\S]+)/;
9
+ export const createCardActionMiddleware = botMagicCodeConfig => {
10
+ const cardActionMiddleware = () => next => function () {
11
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
12
+ args[_key] = arguments[_key];
13
+ }
14
+ // eslint-disable-line @typescript-eslint/no-explicit-any
15
+ const [card] = args;
16
+ if (card.cardAction && validCardActionTypes.indexOf(card.cardAction.type) >= 0 && card.cardAction.value) {
17
+ // Override signin url only if fwdUrl is valid & feature is enabled
18
+ if ((botMagicCodeConfig === null || botMagicCodeConfig === void 0 ? void 0 : botMagicCodeConfig.disabled) === true && botMagicCodeConfig !== null && botMagicCodeConfig !== void 0 && botMagicCodeConfig.fwdUrl) {
19
+ const baseUrl = window.location.origin;
20
+ const result = botOauthUrlRegex.exec(card.cardAction.value);
21
+ if (result) {
22
+ BotMagicCodeStore.botOAuthSignInId = `${result[1]}`;
23
+ }
24
+
25
+ // fwdUrl must be on the same domain as the chat widget
26
+ if (botMagicCodeConfig !== null && botMagicCodeConfig !== void 0 && botMagicCodeConfig.fwdUrl.startsWith(baseUrl)) {
27
+ card.cardAction.value += `&fwdUrl=${botMagicCodeConfig.fwdUrl}`;
28
+ }
29
+ }
30
+ }
31
+ return next(...args);
32
+ };
33
+ return cardActionMiddleware;
34
+ };
@@ -0,0 +1,80 @@
1
+ import "@testing-library/jest-dom/extend-expect";
2
+ import { createCardActionMiddleware } from "./cardActionMiddleware";
3
+ describe("cardActionMiddleware test", () => {
4
+ it("createCardActionMiddleware() with undefined botMagicCodeConfig should not change the sign in card url", () => {
5
+ const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
6
+ const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
7
+ const args = {
8
+ cardAction: {
9
+ type: "signin",
10
+ value: signInUrl
11
+ }
12
+ };
13
+ const results = createCardActionMiddleware(undefined)()(next)(args);
14
+ expect(signInUrl).toEqual(results.cardAction.value);
15
+ });
16
+ it("createCardActionMiddleware() with botMagicCode enabled should not change the sign in card url", () => {
17
+ const botMagicCodeConfig = {
18
+ disabled: false
19
+ };
20
+ const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
21
+ const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
22
+ const args = {
23
+ cardAction: {
24
+ type: "signin",
25
+ value: signInUrl
26
+ }
27
+ };
28
+ const results = createCardActionMiddleware(botMagicCodeConfig)()(next)(args);
29
+ expect(args.cardAction.value).toEqual(results.cardAction.value);
30
+ });
31
+ it("createCardActionMiddleware() with botMagicCode disabled & no fwdUrl should not change the sign in card url", () => {
32
+ const botMagicCodeConfig = {
33
+ disabled: true
34
+ };
35
+ const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
36
+ const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
37
+ const args = {
38
+ cardAction: {
39
+ type: "signin",
40
+ value: signInUrl
41
+ }
42
+ };
43
+ const results = createCardActionMiddleware(botMagicCodeConfig)()(next)(args);
44
+ expect(args.cardAction.value).toEqual(results.cardAction.value);
45
+ });
46
+ it("createCardActionMiddleware() with botMagicCode disabled & fwdUrl should append the fwdUrl in the sign in card url", () => {
47
+ const botMagicCodeConfig = {
48
+ disabled: true,
49
+ fwdUrl: "http://localhost/forwarder.html"
50
+ };
51
+ const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
52
+ const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
53
+ const args = {
54
+ cardAction: {
55
+ type: "signin",
56
+ value: signInUrl
57
+ }
58
+ };
59
+ const results = createCardActionMiddleware(botMagicCodeConfig)()(next)(args);
60
+ expect(signInUrl === results.cardAction.value).toBe(false);
61
+ expect(results.cardAction.value === `${signInUrl}&fwdUrl=${botMagicCodeConfig.fwdUrl}`).toBe(true);
62
+ });
63
+ it("createCardActionMiddleware() should not append fwdUrl if fwdUrl & sign in card url are not in the same domain", () => {
64
+ const botMagicCodeConfig = {
65
+ disabled: true,
66
+ fwdUrl: "https://localhost/forwarder.html"
67
+ };
68
+ const next = args => args; // eslint-disable-line @typescript-eslint/no-explicit-any
69
+ const signInUrl = "https://token.botframework.com/api/oauth/signin?signin=[signin]";
70
+ const args = {
71
+ cardAction: {
72
+ type: "signin",
73
+ value: signInUrl
74
+ }
75
+ };
76
+ const results = createCardActionMiddleware(botMagicCodeConfig)()(next)(args);
77
+ expect(signInUrl === results.cardAction.value).toBe(true);
78
+ expect(results.cardAction.value === `${signInUrl}&fwdUrl=${botMagicCodeConfig.fwdUrl}`).toBe(false);
79
+ });
80
+ });
@@ -1,4 +1,5 @@
1
1
  import { defaultTimestampContentStyles } from "./defaultTimestampContentStyles";
2
- export const defaultTimestampFailedStyles = { ...defaultTimestampContentStyles,
2
+ export const defaultTimestampFailedStyles = {
3
+ ...defaultTimestampContentStyles,
3
4
  color: "#A80000"
4
5
  };
@@ -1,5 +1,6 @@
1
1
  import { defaultTimestampContentStyles } from "./defaultTimestampContentStyles";
2
- export const defaultTimestampRetryStyles = { ...defaultTimestampContentStyles,
2
+ export const defaultTimestampRetryStyles = {
3
+ ...defaultTimestampContentStyles,
3
4
  color: "#0063B1",
4
5
  cursor: "pointer"
5
6
  };
@@ -4,13 +4,12 @@
4
4
  * This middleware controls which messages are grouped together regarding to timestamps. It does the following processing:
5
5
  * 1. Distinguishes different messages by sender name and whether it is a system message
6
6
  ******/
7
- import { Constants } from "../../../../../common/Constants";
8
7
 
8
+ import { Constants } from "../../../../../common/Constants";
9
9
  function bin(items, grouping) {
10
10
  let lastBin;
11
11
  const bins = [];
12
12
  let lastItem;
13
-
14
13
  if (items.length > 0) {
15
14
  items.forEach(item => {
16
15
  if (lastItem && grouping(lastItem, item)) {
@@ -19,20 +18,17 @@ function bin(items, grouping) {
19
18
  lastBin = [item];
20
19
  bins.push(lastBin);
21
20
  }
22
-
23
21
  lastItem = item;
24
22
  });
25
23
  }
26
-
27
24
  return bins;
28
- } // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
29
-
25
+ }
30
26
 
27
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
31
28
  export const groupActivitiesMiddleware = () => next => args => {
32
29
  const {
33
30
  activities
34
31
  } = args;
35
-
36
32
  if (activities != null && activities.length > 0) {
37
33
  const {
38
34
  status
@@ -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 {
@@ -9,11 +9,10 @@ import { defaultTimestampRetryStyles } from "../defaultStyles/defaultTimestampRe
9
9
  import { getTimestampHourMinute } from "../../../../../../common/utils";
10
10
  import { hooks } from "botframework-webchat";
11
11
  import { useChatContextStore } from "../../../../../..";
12
- /* eslint @typescript-eslint/no-explicit-any: "off" */
13
12
 
13
+ /* eslint @typescript-eslint/no-explicit-any: "off" */
14
14
  export const NotDeliveredTimestamp = _ref => {
15
15
  var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$r3, _state$domainStates$r4, _state$domainStates$m, _state$domainStates$m2;
16
-
17
16
  let {
18
17
  args
19
18
  } = _ref;
@@ -32,54 +31,48 @@ export const NotDeliveredTimestamp = _ref => {
32
31
  } = activity;
33
32
  const [state] = useChatContextStore();
34
33
  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,
34
+ const contentStyles = {
35
+ ...defaultTimestampContentStyles,
36
36
  ...((_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.timestampContentStyleProps)
37
37
  };
38
- const failedTextStyles = { ...defaultTimestampFailedStyles,
38
+ const failedTextStyles = {
39
+ ...defaultTimestampFailedStyles,
39
40
  ...((_state$domainStates$r3 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r3 === void 0 ? void 0 : _state$domainStates$r3.timestampFailedTextStyleProps)
40
41
  };
41
- const retryTextStyles = { ...defaultTimestampRetryStyles,
42
+ const retryTextStyles = {
43
+ ...defaultTimestampRetryStyles,
42
44
  ...((_state$domainStates$r4 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r4 === void 0 ? void 0 : _state$domainStates$r4.timestampRetryTextStyleProps)
43
45
  };
44
46
  useEffect(() => {
45
47
  var _timestampRef$current;
46
-
47
48
  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
49
  if ((timestampWebChatNodes === null || timestampWebChatNodes === void 0 ? void 0 : timestampWebChatNodes.length) > 1) {
50
50
  timestampWebChatNodes[1].innerText = getTimestampHourMinute(timestamp);
51
51
  }
52
52
  }, [timestampRef]);
53
53
  const onRetryClick = useCallback(async event => {
54
54
  var _activity$channelData;
55
-
56
55
  removeNotDeliveredTimestamp(event);
57
56
  activity.previousClientActivityID = (_activity$channelData = activity.channelData) === null || _activity$channelData === void 0 ? void 0 : _activity$channelData.clientActivityID;
58
57
  await postActivity(activity);
59
58
  focus("sendBox");
60
59
  }, [activity, focus, postActivity]);
61
-
62
60
  const onRetryKeyEnter = event => {
63
61
  if (event.code === KeyCodes.ENTER) {
64
62
  event.preventDefault();
65
63
  onRetryClick(event);
66
64
  }
67
65
  };
68
-
69
66
  const removeNotDeliveredTimestamp = event => {
70
67
  let parent = event.target.parentElement;
71
-
72
68
  while (parent.tagName !== HtmlAttributeNames.listItem) {
73
69
  parent = parent.parentElement;
74
-
75
70
  if (parent.tagName === HtmlAttributeNames.unorderedList) {
76
71
  return;
77
72
  }
78
73
  }
79
-
80
74
  parent.parentNode.removeChild(parent);
81
75
  };
82
-
83
76
  return /*#__PURE__*/React.createElement(Stack, {
84
77
  style: contentStyles,
85
78
  dir: dir,