@envive-ai/react-hooks 0.3.7 → 0.3.8

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 (379) hide show
  1. package/dist/application/commerce-api.cjs +1 -1
  2. package/dist/application/commerce-api.js +1 -1
  3. package/dist/application/models/chatElementDisplayLocationV3.cjs +3 -1
  4. package/dist/application/models/chatElementDisplayLocationV3.d.cts +3 -1
  5. package/dist/application/models/chatElementDisplayLocationV3.d.ts +3 -1
  6. package/dist/application/models/chatElementDisplayLocationV3.js +3 -1
  7. package/dist/application/models/frontendConfigV3.d.cts +2 -2
  8. package/dist/application/models/frontendConfigV3.d.ts +2 -2
  9. package/dist/application/utils/widgetTextRequestToApiRequest.cjs +5 -2
  10. package/dist/application/utils/widgetTextRequestToApiRequest.js +5 -2
  11. package/dist/atoms/app/index.cjs +4 -4
  12. package/dist/atoms/app/index.d.cts +7 -7
  13. package/dist/atoms/app/index.d.ts +7 -7
  14. package/dist/atoms/app/index.js +4 -4
  15. package/dist/atoms/app/variant.d.cts +6 -6
  16. package/dist/atoms/app/variant.d.ts +6 -6
  17. package/dist/atoms/chat/chatState.d.cts +18 -18
  18. package/dist/atoms/chat/chatState.d.ts +17 -17
  19. package/dist/atoms/chat/form.d.cts +2 -2
  20. package/dist/atoms/chat/form.d.ts +2 -2
  21. package/dist/atoms/chat/index.d.cts +2 -2
  22. package/dist/atoms/chat/index.d.ts +2 -2
  23. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  24. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  25. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  26. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  27. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  28. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  29. package/dist/atoms/chat/replies.cjs +46 -0
  30. package/dist/atoms/chat/replies.d.cts +14 -0
  31. package/dist/atoms/chat/replies.d.ts +14 -0
  32. package/dist/atoms/chat/replies.js +45 -0
  33. package/dist/atoms/chat/suggestions.d.cts +2 -2
  34. package/dist/atoms/chat/suggestions.d.ts +2 -2
  35. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  36. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  37. package/dist/atoms/org/customerService.d.cts +6 -6
  38. package/dist/atoms/org/customerService.d.ts +6 -6
  39. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  40. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  41. package/dist/atoms/org/index.cjs +2 -2
  42. package/dist/atoms/org/index.js +2 -2
  43. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  44. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  45. package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
  46. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  47. package/dist/atoms/search/chatSearch.cjs +1 -1
  48. package/dist/atoms/search/chatSearch.d.cts +17 -17
  49. package/dist/atoms/search/chatSearch.d.ts +17 -17
  50. package/dist/atoms/search/chatSearch.js +1 -1
  51. package/dist/atoms/search/searchAPI.cjs +1 -1
  52. package/dist/atoms/search/searchAPI.d.cts +13 -13
  53. package/dist/atoms/search/searchAPI.d.ts +13 -13
  54. package/dist/atoms/search/searchAPI.js +1 -1
  55. package/dist/atoms/search/types.d.cts +1 -1
  56. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  57. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  58. package/dist/contexts/amplitudeContext/amplitudeContext.cjs +6 -4
  59. package/dist/contexts/amplitudeContext/amplitudeContext.js +6 -4
  60. package/dist/contexts/enviveContext/enviveContext.cjs +38 -16
  61. package/dist/contexts/enviveContext/enviveContext.d.cts +4 -1
  62. package/dist/contexts/enviveContext/enviveContext.d.ts +4 -1
  63. package/dist/contexts/enviveContext/enviveContext.js +38 -16
  64. package/dist/contexts/enviveContext/types.d.cts +1 -1
  65. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +56 -2
  66. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +6 -1
  67. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +6 -1
  68. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +56 -2
  69. package/dist/contexts/graphqlContext/graphqlContext.cjs +10 -4
  70. package/dist/contexts/graphqlContext/graphqlContext.js +10 -4
  71. package/dist/contexts/graphqlContext/mockV3Config.cjs +18 -7
  72. package/dist/contexts/graphqlContext/mockV3Config.js +17 -6
  73. package/dist/contexts/hardcopyContext/hardcopyContext.cjs +29 -1
  74. package/dist/contexts/hardcopyContext/hardcopyContext.js +29 -1
  75. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +1 -1
  76. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +1 -1
  77. package/dist/contexts/salesAgentContext/chatAPI.cjs +33 -5
  78. package/dist/contexts/salesAgentContext/chatAPI.d.cts +4 -4
  79. package/dist/contexts/salesAgentContext/chatAPI.d.ts +4 -4
  80. package/dist/contexts/salesAgentContext/chatAPI.js +33 -5
  81. package/dist/contexts/salesAgentContext/formSubmittedUtils.cjs +37 -0
  82. package/dist/contexts/salesAgentContext/formSubmittedUtils.js +36 -0
  83. package/dist/contexts/salesAgentContext/index.d.cts +2 -2
  84. package/dist/contexts/salesAgentContext/index.d.ts +2 -2
  85. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +33 -4
  86. package/dist/contexts/salesAgentContext/salesAgentContext.d.cts +11 -4
  87. package/dist/contexts/salesAgentContext/salesAgentContext.d.ts +11 -4
  88. package/dist/contexts/salesAgentContext/salesAgentContext.js +33 -4
  89. package/dist/contexts/salesAgentContext/salesAgentService.cjs +13 -7
  90. package/dist/contexts/salesAgentContext/salesAgentService.js +13 -7
  91. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  92. package/dist/contexts/searchContext/searchContext.js +1 -1
  93. package/dist/contexts/types.d.cts +1 -1
  94. package/dist/contexts/types.d.ts +1 -1
  95. package/dist/contexts/typesV3.cjs +2 -7
  96. package/dist/contexts/typesV3.d.cts +12 -9
  97. package/dist/contexts/typesV3.d.ts +12 -9
  98. package/dist/contexts/typesV3.js +3 -7
  99. package/dist/contexts/userIdentityContext/userIdentityContext.cjs +22 -29
  100. package/dist/contexts/userIdentityContext/userIdentityContext.d.cts +9 -8
  101. package/dist/contexts/userIdentityContext/userIdentityContext.d.ts +9 -8
  102. package/dist/contexts/userIdentityContext/userIdentityContext.js +22 -29
  103. package/dist/hooks/ElementObserver/useElementObserver.cjs +3 -2
  104. package/dist/hooks/ElementObserver/useElementObserver.js +3 -2
  105. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  106. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  107. package/dist/hooks/Search/useSearch.cjs +2 -2
  108. package/dist/hooks/Search/useSearch.js +2 -2
  109. package/dist/hooks/Search/useSearchInput.cjs +2 -2
  110. package/dist/hooks/Search/useSearchInput.js +2 -2
  111. package/dist/hooks/utils.d.cts +1 -1
  112. package/dist/mocks/index.cjs +5 -0
  113. package/dist/mocks/index.d.cts +2 -0
  114. package/dist/mocks/index.d.ts +2 -0
  115. package/dist/mocks/index.js +3 -0
  116. package/dist/mocks/salesAgentMockData.cjs +207 -0
  117. package/dist/mocks/salesAgentMockData.d.cts +11 -0
  118. package/dist/mocks/salesAgentMockData.d.ts +11 -0
  119. package/dist/mocks/salesAgentMockData.js +204 -0
  120. package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.cjs +2 -2
  121. package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.js +2 -2
  122. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.cjs +2 -2
  123. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.js +2 -2
  124. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.cjs +18 -18
  125. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.js +18 -18
  126. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.cjs +1 -1
  127. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.js +1 -1
  128. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.cjs +4 -4
  129. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.js +4 -4
  130. package/dist/packages/components-v3/dist/ChatPreviewLoading/components/Skeleton.cjs +1 -0
  131. package/dist/packages/components-v3/dist/ChatPreviewLoading/components/Skeleton.js +3 -0
  132. package/dist/packages/components-v3/dist/Container/Container.cjs +19 -3
  133. package/dist/packages/components-v3/dist/Container/Container.js +19 -4
  134. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.cjs +13 -0
  135. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.js +11 -1
  136. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.cjs +13 -0
  137. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.js +11 -1
  138. package/dist/packages/components-v3/dist/Container/index.cjs +1 -1
  139. package/dist/packages/components-v3/dist/Container/index.js +1 -1
  140. package/dist/packages/components-v3/dist/DesignTokens/components/utils.cjs +16 -0
  141. package/dist/packages/components-v3/dist/DesignTokens/components/utils.js +15 -0
  142. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.cjs +2 -2
  143. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.js +2 -2
  144. package/dist/packages/components-v3/dist/PromptButton/PromptButton.cjs +40 -4
  145. package/dist/packages/components-v3/dist/PromptButton/PromptButton.js +40 -5
  146. package/dist/packages/components-v3/dist/PromptButton/components/Icon.cjs +10 -0
  147. package/dist/packages/components-v3/dist/PromptButton/components/Icon.js +8 -1
  148. package/dist/packages/components-v3/dist/PromptButton/components/Label.cjs +18 -1
  149. package/dist/packages/components-v3/dist/PromptButton/components/Label.js +16 -2
  150. package/dist/packages/components-v3/dist/PromptButton/components/Layout.cjs +31 -3
  151. package/dist/packages/components-v3/dist/PromptButton/components/Layout.js +31 -4
  152. package/dist/packages/components-v3/dist/PromptButton/components/Loading.cjs +5 -1
  153. package/dist/packages/components-v3/dist/PromptButton/components/Loading.js +5 -2
  154. package/dist/packages/components-v3/dist/PromptButton/components/index.cjs +16 -4
  155. package/dist/packages/components-v3/dist/PromptButton/components/index.js +15 -5
  156. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBackgroundColorsProperties.cjs +18 -0
  157. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBackgroundColorsProperties.js +18 -0
  158. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.cjs +12 -0
  159. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.js +10 -1
  160. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBorderColorsProperties.cjs +18 -0
  161. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBorderColorsProperties.js +18 -0
  162. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetIconColorsProperties.cjs +32 -0
  163. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetIconColorsProperties.js +32 -0
  164. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.cjs +9 -1
  165. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.js +9 -2
  166. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetTextColorsProperties.cjs +19 -0
  167. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetTextColorsProperties.js +19 -0
  168. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetVariantColorsProperties.cjs +29 -0
  169. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetVariantColorsProperties.js +29 -0
  170. package/dist/packages/components-v3/dist/PromptButton/index.cjs +1 -1
  171. package/dist/packages/components-v3/dist/PromptButton/index.js +1 -1
  172. package/dist/packages/components-v3/dist/PromptButton/utils/functions.cjs +10 -0
  173. package/dist/packages/components-v3/dist/PromptButton/utils/functions.js +10 -0
  174. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.js +1 -1
  175. package/dist/packages/components-v3/dist/SocialProof/SocialProof.cjs +10 -0
  176. package/dist/packages/components-v3/dist/SocialProof/SocialProof.js +12 -0
  177. package/dist/packages/components-v3/dist/SocialProof/components/Headline.cjs +53 -0
  178. package/dist/packages/components-v3/dist/SocialProof/components/Headline.js +54 -0
  179. package/dist/packages/components-v3/dist/SocialProof/components/ImageGallery.cjs +5 -0
  180. package/dist/packages/components-v3/dist/SocialProof/components/ImageGallery.js +7 -0
  181. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourGrid.cjs +6 -0
  182. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourGrid.js +8 -0
  183. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourHorizontal.cjs +16 -0
  184. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourHorizontal.js +17 -0
  185. package/dist/packages/components-v3/dist/SocialProof/components/LayoutSingle.cjs +8 -0
  186. package/dist/packages/components-v3/dist/SocialProof/components/LayoutSingle.js +10 -0
  187. package/dist/packages/components-v3/dist/SocialProof/components/Skeleton.cjs +1 -0
  188. package/dist/packages/components-v3/dist/SocialProof/components/Skeleton.js +3 -0
  189. package/dist/packages/components-v3/dist/SocialProof/components/Subheadline.cjs +8 -0
  190. package/dist/packages/components-v3/dist/SocialProof/components/Subheadline.js +10 -0
  191. package/dist/packages/components-v3/dist/SocialProof/components/Textfield.cjs +3 -0
  192. package/dist/packages/components-v3/dist/SocialProof/components/Textfield.js +5 -0
  193. package/dist/packages/components-v3/dist/SocialProof/components/index.cjs +8 -0
  194. package/dist/packages/components-v3/dist/SocialProof/components/index.js +10 -0
  195. package/dist/packages/components-v3/dist/SocialProof/hooks/index.cjs +1 -0
  196. package/dist/packages/components-v3/dist/SocialProof/hooks/index.js +3 -0
  197. package/dist/packages/components-v3/dist/SocialProof/hooks/useSocialProofCount.cjs +1 -0
  198. package/dist/packages/components-v3/dist/SocialProof/hooks/useSocialProofCount.js +3 -0
  199. package/dist/packages/components-v3/dist/SocialProof/index.cjs +4 -0
  200. package/dist/packages/components-v3/dist/SocialProof/index.js +6 -0
  201. package/dist/packages/components-v3/dist/SocialProof/types/types.cjs +11 -0
  202. package/dist/packages/components-v3/dist/SocialProof/types/types.js +10 -0
  203. package/dist/packages/components-v3/dist/SocialProof/utils/functions.cjs +1 -0
  204. package/dist/packages/components-v3/dist/SocialProof/utils/functions.js +3 -0
  205. package/dist/packages/components-v3/dist/Title/Title.cjs +11 -0
  206. package/dist/packages/components-v3/dist/Title/Title.js +12 -0
  207. package/dist/packages/components-v3/dist/Title/components/Image.cjs +2 -0
  208. package/dist/packages/components-v3/dist/Title/components/Image.js +4 -0
  209. package/dist/packages/components-v3/dist/Title/components/Label.cjs +3 -0
  210. package/dist/packages/components-v3/dist/Title/components/Label.js +5 -0
  211. package/dist/packages/components-v3/dist/Title/components/Layout.cjs +11 -0
  212. package/dist/packages/components-v3/dist/Title/components/Layout.js +12 -0
  213. package/dist/packages/components-v3/dist/Title/components/index.cjs +3 -0
  214. package/dist/packages/components-v3/dist/Title/components/index.js +5 -0
  215. package/dist/packages/components-v3/dist/Title/index.cjs +1 -0
  216. package/dist/packages/components-v3/dist/Title/index.js +3 -0
  217. package/dist/packages/components-v3/dist/Tokens/index.cjs +11 -11
  218. package/dist/packages/components-v3/dist/Tokens/index.js +11 -11
  219. package/dist/packages/components-v3/dist/Typography/Typography.cjs +35 -7
  220. package/dist/packages/components-v3/dist/Typography/Typography.js +35 -8
  221. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.cjs +30 -0
  222. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.js +28 -1
  223. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.cjs +19 -0
  224. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.js +17 -1
  225. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.cjs +20 -0
  226. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.js +18 -1
  227. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.cjs +12 -0
  228. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.js +10 -1
  229. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.cjs +21 -0
  230. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.js +19 -1
  231. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.cjs +61 -0
  232. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.js +59 -1
  233. package/dist/packages/components-v3/dist/Typography/index.cjs +2 -1
  234. package/dist/packages/components-v3/dist/Typography/index.js +2 -1
  235. package/dist/packages/components-v3/dist/Typography/types/index.cjs +47 -0
  236. package/dist/packages/components-v3/dist/Typography/types/index.js +44 -0
  237. package/dist/packages/components-v3/dist/Typography/utils/utils.cjs +12 -0
  238. package/dist/packages/components-v3/dist/Typography/utils/utils.js +10 -0
  239. package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.cjs +1 -1
  240. package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.js +1 -1
  241. package/dist/packages/components-v3/dist/WelcomeMessage/types/types.cjs +2 -2
  242. package/dist/packages/components-v3/dist/WelcomeMessage/types/types.js +2 -2
  243. package/dist/packages/components-v3/dist/WidgetTextField/WidgetTextField.cjs +2 -0
  244. package/dist/packages/components-v3/dist/WidgetTextField/WidgetTextField.js +4 -0
  245. package/dist/packages/components-v3/dist/WidgetTextField/components/Container.cjs +14 -0
  246. package/dist/packages/components-v3/dist/WidgetTextField/components/Container.js +15 -0
  247. package/dist/packages/components-v3/dist/WidgetTextField/components/FakeTextInput.cjs +3 -0
  248. package/dist/packages/components-v3/dist/WidgetTextField/components/FakeTextInput.js +5 -0
  249. package/dist/packages/components-v3/dist/WidgetTextField/components/Icon.cjs +7 -0
  250. package/dist/packages/components-v3/dist/WidgetTextField/components/Icon.js +9 -0
  251. package/dist/packages/components-v3/dist/WidgetTextField/components/Skeleton.cjs +10 -0
  252. package/dist/packages/components-v3/dist/WidgetTextField/components/Skeleton.js +11 -0
  253. package/dist/packages/components-v3/dist/WidgetTextField/components/index.cjs +4 -0
  254. package/dist/packages/components-v3/dist/WidgetTextField/components/index.js +6 -0
  255. package/dist/packages/components-v3/dist/WidgetTextField/hooks/useGetContainerProperties.cjs +1 -0
  256. package/dist/packages/components-v3/dist/WidgetTextField/hooks/useGetContainerProperties.js +3 -0
  257. package/dist/packages/components-v3/dist/WidgetTextField/index.cjs +1 -0
  258. package/dist/packages/components-v3/dist/WidgetTextField/index.js +3 -0
  259. package/dist/packages/components-v3/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.cjs +8 -0
  260. package/dist/packages/components-v3/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.js +10 -0
  261. package/dist/packages/components-v3/dist/packages/components-v3/src/models/colorsConfig.cjs +26 -0
  262. package/dist/packages/components-v3/dist/packages/components-v3/src/models/colorsConfig.js +25 -0
  263. package/dist/packages/components-v3/dist/packages/components-v3/tokens/aspectRatio/aspectRatio.cjs +16 -0
  264. package/dist/packages/components-v3/dist/packages/components-v3/tokens/aspectRatio/aspectRatio.js +17 -0
  265. package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.cjs +25 -0
  266. package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.js +23 -0
  267. package/dist/packages/components-v3/dist/packages/components-v3/tokens/colors/colors.cjs +51 -0
  268. package/dist/packages/components-v3/dist/packages/components-v3/tokens/colors/colors.js +51 -0
  269. package/dist/packages/components-v3/dist/packages/components-v3/tokens/radius/radius.cjs +64 -0
  270. package/dist/packages/components-v3/dist/packages/components-v3/tokens/radius/radius.js +65 -0
  271. package/dist/packages/components-v3/dist/packages/components-v3/tokens/theme/theme.cjs +18 -0
  272. package/dist/packages/components-v3/dist/packages/components-v3/tokens/theme/theme.js +16 -0
  273. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontFamily.cjs +25 -0
  274. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontFamily.js +25 -0
  275. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontSize.cjs +37 -0
  276. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontSize.js +38 -0
  277. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontWeight.cjs +17 -0
  278. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontWeight.js +18 -0
  279. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/letterSpacing.cjs +15 -0
  280. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/letterSpacing.js +16 -0
  281. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/lineHeight.cjs +31 -0
  282. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/lineHeight.js +32 -0
  283. package/dist/packages/components-v3/dist/packages/components-v3/tokens/utils.cjs +7 -0
  284. package/dist/packages/components-v3/dist/packages/components-v3/tokens/utils.js +6 -0
  285. package/dist/packages/components-v3/dist/utils/resolveTheme.cjs +13 -0
  286. package/dist/packages/components-v3/dist/utils/resolveTheme.js +13 -0
  287. package/dist/packages/components-v3/dist/utils/useGetContentSize.cjs +1 -0
  288. package/dist/packages/components-v3/dist/utils/useGetContentSize.js +3 -0
  289. package/dist/packages/components-v3/dist/utils/useResponsiveValue.cjs +2 -2
  290. package/dist/packages/components-v3/dist/utils/useResponsiveValue.js +2 -2
  291. package/dist/packages/icons/dist/FourPointStar.cjs +16 -1
  292. package/dist/packages/icons/dist/FourPointStar.js +16 -2
  293. package/dist/packages/icons/dist/MagnifyingGlass.cjs +8 -0
  294. package/dist/packages/icons/dist/MagnifyingGlass.js +9 -0
  295. package/dist/packages/icons/dist/MagnifyingThin.cjs +8 -0
  296. package/dist/packages/icons/dist/MagnifyingThin.js +9 -0
  297. package/dist/packages/icons/dist/SendMinimalist.cjs +8 -0
  298. package/dist/packages/icons/dist/SendMinimalist.js +9 -0
  299. package/dist/packages/icons/dist/SendModern.cjs +8 -0
  300. package/dist/packages/icons/dist/SendModern.js +9 -0
  301. package/dist/packages/icons/dist/SendStandard.cjs +8 -0
  302. package/dist/packages/icons/dist/SendStandard.js +9 -0
  303. package/dist/services/amplitudeService/amplitudeService.cjs +37 -12
  304. package/dist/services/amplitudeService/amplitudeService.d.cts +11 -3
  305. package/dist/services/amplitudeService/amplitudeService.d.ts +11 -3
  306. package/dist/services/amplitudeService/amplitudeService.js +37 -12
  307. package/dist/services/userIdentityService/index.cjs +3 -0
  308. package/dist/services/userIdentityService/index.d.cts +2 -0
  309. package/dist/services/userIdentityService/index.d.ts +2 -0
  310. package/dist/services/userIdentityService/index.js +3 -0
  311. package/dist/services/userIdentityService/userIdentityService.cjs +49 -0
  312. package/dist/services/userIdentityService/userIdentityService.d.cts +19 -0
  313. package/dist/services/userIdentityService/userIdentityService.d.ts +19 -0
  314. package/dist/services/userIdentityService/userIdentityService.js +48 -0
  315. package/package.json +18 -5
  316. package/src/application/models/chatElementDisplayLocationV3.ts +2 -0
  317. package/src/application/models/frontendConfigV3.ts +1 -1
  318. package/src/application/utils/widgetTextRequestToApiRequest.ts +5 -5
  319. package/src/atoms/app/index.ts +9 -7
  320. package/src/atoms/chat/replies.ts +56 -0
  321. package/src/contexts/amplitudeContext/__tests__/amplitudeContext.test.tsx +47 -66
  322. package/src/contexts/amplitudeContext/amplitudeContext.tsx +4 -1
  323. package/src/contexts/enviveContext/enviveContext.tsx +47 -6
  324. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +101 -2
  325. package/src/contexts/graphqlContext/graphqlContext.tsx +11 -2
  326. package/src/contexts/graphqlContext/mockV3Config.ts +15 -4
  327. package/src/contexts/hardcopyContext/hardcopyContext.tsx +29 -0
  328. package/src/contexts/salesAgentContext/chatAPI.ts +36 -7
  329. package/src/contexts/salesAgentContext/formSubmittedUtils.ts +57 -0
  330. package/src/contexts/salesAgentContext/salesAgentContext.tsx +63 -2
  331. package/src/contexts/salesAgentContext/salesAgentService.ts +15 -9
  332. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +3 -1
  333. package/src/contexts/typesV3.ts +13 -10
  334. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +18 -131
  335. package/src/contexts/userIdentityContext/userIdentityContext.tsx +47 -41
  336. package/src/hooks/ElementObserver/useElementObserver.ts +2 -1
  337. package/src/hooks/Search/__tests__/useSearch.test.tsx +11 -1
  338. package/src/mocks/index.ts +1 -0
  339. package/src/mocks/salesAgentMockData.ts +247 -0
  340. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +17 -0
  341. package/src/services/amplitudeService/amplitudeService.ts +50 -11
  342. package/src/services/userIdentityService/index.ts +1 -0
  343. package/src/services/userIdentityService/userIdentityService.ts +64 -0
  344. package/dist/contexts/featureFlagContext/featureFlagContext.cjs +0 -105
  345. package/dist/contexts/featureFlagContext/featureFlagContext.d.cts +0 -19
  346. package/dist/contexts/featureFlagContext/featureFlagContext.d.ts +0 -19
  347. package/dist/contexts/featureFlagContext/featureFlagContext.js +0 -102
  348. package/dist/contexts/featureFlagContext/index.cjs +0 -4
  349. package/dist/contexts/featureFlagContext/index.d.cts +0 -2
  350. package/dist/contexts/featureFlagContext/index.d.ts +0 -2
  351. package/dist/contexts/featureFlagContext/index.js +0 -3
  352. package/dist/packages/components-v3/dist/src/models/colorsConfig.cjs +0 -26
  353. package/dist/packages/components-v3/dist/src/models/colorsConfig.js +0 -25
  354. package/dist/packages/components-v3/dist/tokens/aspectRatio/aspectRatio.cjs +0 -16
  355. package/dist/packages/components-v3/dist/tokens/aspectRatio/aspectRatio.js +0 -17
  356. package/dist/packages/components-v3/dist/tokens/breakpoints/breakpoints.cjs +0 -25
  357. package/dist/packages/components-v3/dist/tokens/breakpoints/breakpoints.js +0 -23
  358. package/dist/packages/components-v3/dist/tokens/colors/colors.cjs +0 -51
  359. package/dist/packages/components-v3/dist/tokens/colors/colors.js +0 -51
  360. package/dist/packages/components-v3/dist/tokens/radius/radius.cjs +0 -64
  361. package/dist/packages/components-v3/dist/tokens/radius/radius.js +0 -65
  362. package/dist/packages/components-v3/dist/tokens/theme/theme.cjs +0 -13
  363. package/dist/packages/components-v3/dist/tokens/theme/theme.js +0 -12
  364. package/dist/packages/components-v3/dist/tokens/typography/fontFamily.cjs +0 -25
  365. package/dist/packages/components-v3/dist/tokens/typography/fontFamily.js +0 -25
  366. package/dist/packages/components-v3/dist/tokens/typography/fontSize.cjs +0 -37
  367. package/dist/packages/components-v3/dist/tokens/typography/fontSize.js +0 -38
  368. package/dist/packages/components-v3/dist/tokens/typography/fontWeight.cjs +0 -17
  369. package/dist/packages/components-v3/dist/tokens/typography/fontWeight.js +0 -18
  370. package/dist/packages/components-v3/dist/tokens/typography/letterSpacing.cjs +0 -15
  371. package/dist/packages/components-v3/dist/tokens/typography/letterSpacing.js +0 -16
  372. package/dist/packages/components-v3/dist/tokens/typography/lineHeight.cjs +0 -31
  373. package/dist/packages/components-v3/dist/tokens/typography/lineHeight.js +0 -32
  374. package/dist/packages/components-v3/dist/tokens/utils.cjs +0 -7
  375. package/dist/packages/components-v3/dist/tokens/utils.js +0 -6
  376. package/src/contexts/featureFlagContext/featureFlagContext.tsx +0 -180
  377. package/src/contexts/featureFlagContext/index.ts +0 -1
  378. /package/dist/packages/components-v3/dist/{tokens → packages/components-v3/tokens}/typography/typography.cjs +0 -0
  379. /package/dist/packages/components-v3/dist/{tokens → packages/components-v3/tokens}/typography/typography.js +0 -0
@@ -1,3 +1,4 @@
1
+ import { WidgetTypeV3 } from "../../contexts/typesV3.js";
1
2
  import { SpiffyEvent } from "../../events/event-types.js";
2
3
  import { EventsDispatcher } from "../../events/index.js";
3
4
  import logger_default from "../../application/logging/logger.js";
@@ -8,6 +9,7 @@ import { createInstance } from "@amplitude/analytics-browser";
8
9
  //#region src/services/amplitudeService/amplitudeService.ts
9
10
  let SpiffyMetricsEventName = /* @__PURE__ */ function(SpiffyMetricsEventName$1) {
10
11
  SpiffyMetricsEventName$1["BundleLoaded"] = "Bundle Loaded";
12
+ SpiffyMetricsEventName$1["EnvironmentInitialized"] = "Environment Initialized";
11
13
  SpiffyMetricsEventName$1["ChatLiveAgentBtnClick"] = "Chat Live Agent Btn Click";
12
14
  SpiffyMetricsEventName$1["ChatFloatingButtonVisible"] = "Chat Floating Button Visible";
13
15
  SpiffyMetricsEventName$1["ChatComponentVisible"] = "Chat Component Visible";
@@ -37,7 +39,7 @@ let SpiffyMetricsEventName = /* @__PURE__ */ function(SpiffyMetricsEventName$1)
37
39
  SpiffyMetricsEventName$1["SearchSortClicked"] = "Search Sort Clicked";
38
40
  return SpiffyMetricsEventName$1;
39
41
  }({});
40
- var AmplitudeService = class {
42
+ var AmplitudeService = class AmplitudeService {
41
43
  constructor(config) {
42
44
  this.supplementalDefaultProps = {};
43
45
  this.config = config;
@@ -69,6 +71,7 @@ var AmplitudeService = class {
69
71
  chat_id: this.getLocalStorageItem(LocalStorageKeys.ChatId),
70
72
  env: this.config.env || "unknown",
71
73
  app_source: this.config.contextSource,
74
+ org_id: this.config.orgId,
72
75
  "org.short_name": this.config.orgShortName,
73
76
  "user.id": this.config.userId,
74
77
  "cdp.user_id": null,
@@ -98,8 +101,8 @@ var AmplitudeService = class {
98
101
  if (["[Amplitude] Page Viewed", `[Spiffy] ${SpiffyMetricsEventName.BundleLoaded}`].includes(event.event_type)) {
99
102
  const globalProperties = {};
100
103
  if (this.config.show != null) globalProperties["globalProperties.show"] = String(this.config.show);
101
- const enabledFeatures = this.config.featureFlagService.getFeatureFlags();
102
- const enabledFeaturesProperties = Object.entries(enabledFeatures).reduce((acc, [key, value]) => ({
104
+ globalProperties["globalProperties.env"] = String(this.config.env);
105
+ const enabledFeaturesProperties = Object.entries(this.config?.enabledFeatures ?? {}).reduce((acc, [key, value]) => ({
103
106
  ...acc,
104
107
  [`enabledFeatures.${key}`]: `${value}`
105
108
  }), {});
@@ -150,6 +153,27 @@ var AmplitudeService = class {
150
153
  this.amplitudeClient = currentAmplitudeInstance;
151
154
  }
152
155
  }
156
+ static mapWidgetTypeToChatComponent(widgetType) {
157
+ switch (widgetType) {
158
+ case WidgetTypeV3.FloatingButtonV3: return "floating_button";
159
+ case WidgetTypeV3.ChatPreviewV3:
160
+ case WidgetTypeV3.SocialProofV3: return "embedded_widget";
161
+ case WidgetTypeV3.TitledPromptCarouselV3:
162
+ case WidgetTypeV3.PromptCarouselV3: return "suggestion_bar";
163
+ default: return "unknown";
164
+ }
165
+ }
166
+ static mapEventProps({ eventName, eventProps }) {
167
+ if (eventName === SpiffyMetricsEventName.ChatComponentVisible) {
168
+ const mappedWidgetType = AmplitudeService.mapWidgetTypeToChatComponent(eventProps?.widget_type);
169
+ return {
170
+ ...eventProps,
171
+ chat_component: mappedWidgetType,
172
+ "chat.component_visible": true
173
+ };
174
+ }
175
+ return eventProps ?? {};
176
+ }
153
177
  async trackEvent({ eventName, eventProps, eventGroups, alsoSendToGoogleAnalytics = false }) {
154
178
  logger_default.logDebug("Submitting event", eventName);
155
179
  try {
@@ -158,9 +182,13 @@ var AmplitudeService = class {
158
182
  logger_default.logWarn("amplitude client undefined", void 0, { event_name: decoratedEventName });
159
183
  return;
160
184
  }
185
+ const mappedEventProps = AmplitudeService.mapEventProps({
186
+ eventName,
187
+ eventProps
188
+ });
161
189
  const eventData = JSON.stringify({
162
190
  eventName,
163
- eventProps,
191
+ eventProps: mappedEventProps,
164
192
  created_at: (/* @__PURE__ */ new Date()).toISOString()
165
193
  });
166
194
  const data = new TextEncoder().encode(eventData);
@@ -168,12 +196,12 @@ var AmplitudeService = class {
168
196
  const currentInsertId = Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, "0")).join("");
169
197
  logger_default.logDebug(`amplitude tracking ${decoratedEventName}`, null, {
170
198
  event_name: decoratedEventName,
171
- props: eventProps
199
+ props: mappedEventProps
172
200
  });
173
201
  this.amplitudeClient.track(decoratedEventName, {
174
202
  ...this.getDefaultTrackingProps(),
175
- ...eventProps,
176
- ...eventProps ? this.eventPropsToPrefixedEventProps(eventName, eventProps) : {}
203
+ ...mappedEventProps,
204
+ ...mappedEventProps ? this.eventPropsToPrefixedEventProps(eventName, mappedEventProps) : {}
177
205
  }, {
178
206
  ...eventGroups,
179
207
  insert_id: currentInsertId
@@ -193,13 +221,10 @@ var AmplitudeService = class {
193
221
  }
194
222
  }
195
223
  setSupplementalDefaultProps(props) {
196
- this.supplementalDefaultProps = {
197
- ...this.supplementalDefaultProps,
198
- ...props
199
- };
224
+ this.supplementalDefaultProps = props;
200
225
  }
201
226
  };
202
227
 
203
228
  //#endregion
204
229
  export { AmplitudeService, SpiffyMetricsEventName };
205
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbImVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4iLCJlbnJpY2hlZEV2ZW50OiBFdmVudCIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtYnJvd3Nlcic7XG5pbXBvcnQgeyBFdmVudHNEaXNwYXRjaGVyLCBTcGlmZnlFdmVudCB9IGZyb20gJ3NyYy9ldmVudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5cyB9IGZyb20gJ3NyYy9jb250ZXh0cy9sb2NhbFN0b3JhZ2VDb250ZXh0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB0eXBlIHtcbiAgQnJvd3NlckNsaWVudCxcbiAgRW5yaWNobWVudFBsdWdpbixcbiAgRXZlbnQsXG4gIFNlcnZlclpvbmVUeXBlLFxufSBmcm9tICdAYW1wbGl0dWRlL2FuYWx5dGljcy10eXBlcyc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcblxuZXhwb3J0IGVudW0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB7XG4gIEJ1bmRsZUxvYWRlZCA9ICdCdW5kbGUgTG9hZGVkJyxcbiAgQ2hhdExpdmVBZ2VudEJ0bkNsaWNrID0gJ0NoYXQgTGl2ZSBBZ2VudCBCdG4gQ2xpY2snLFxuICBDaGF0RmxvYXRpbmdCdXR0b25WaXNpYmxlID0gJ0NoYXQgRmxvYXRpbmcgQnV0dG9uIFZpc2libGUnLFxuICBDaGF0Q29tcG9uZW50VmlzaWJsZSA9ICdDaGF0IENvbXBvbmVudCBWaXNpYmxlJyxcbiAgQ2hhdENvbXBvbmVudEV4cGFuZGVkID0gJ0NoYXQgQ29tcG9uZW50IEV4cGFuZGVkJyxcbiAgQ2hhdENvbXBvbmVudENvbGxhcHNlZCA9ICdDaGF0IENvbXBvbmVudCBDb2xsYXBzZWQnLFxuICBDaGF0VXNlck1lc3NhZ2VJbnB1dCA9ICdDaGF0IFVzZXIgTWVzc2FnZSBJbnB1dCcsXG4gIENoYXRTdWdnZXN0aW9uQ2xpY2tlZCA9ICdDaGF0IFN1Z2dlc3Rpb24gQ2xpY2tlZCcsXG4gIENoYXRBc3Npc3RhbnRSZXNwb25zZSA9ICdDaGF0IEFzc2lzdGFudCBSZXNwb25zZScsXG4gIFByb2R1Y3RDYXJkQ2xpY2tlZCA9ICdQcm9kdWN0IENhcmQgQ2xpY2tlZCcsXG4gIFByb2R1Y3RSZXZpZXdDYXJkQ2xpY2tlZCA9ICdQcm9kdWN0IFJldmlldyBDYXJkIENsaWNrZWQnLFxuICBBZGRUb0NhcnRDbGlja2VkID0gJ0FkZCBUbyBDYXJ0IENsaWNrZWQnLFxuICBQcm9tcHRDYXJkQ2xpY2tlZCA9ICdQcm9tcHQgQ2FyZCBDbGlja2VkJyxcbiAgU3VwcG9ydGVkRXZlbnQgPSAnU3VwcG9ydGVkIEV2ZW50JyxcbiAgU2VhcmNoQmFja1RvUmVzcG9uc2VDbGlja2VkID0gJ1NlYXJjaCBCYWNrIHRvIFJlc3BvbnNlIENsaWNrZWQnLFxuICBQZXJmb3JtYW5jZU1ldHJpY3MgPSAnUGVyZm9ybWFuY2UgTWV0cmljcycsXG4gIFNlYXJjaEJhckNsaWNrZWQgPSAnU2VhcmNoIEJhciBDbGlja2VkJyxcbiAgT3JkZXJMb29rdXBTdGFydGVkID0gJ09yZGVyIExvb2t1cCBTdGFydGVkJyxcbiAgT3JkZXJMb29rdXBGb3JtU3VibWl0dGVkID0gJ09yZGVyIExvb2t1cCBGb3JtIFN1Ym1pdHRlZCcsXG4gIFNlYXJjaENvbXBvbmVudFZpc2libGUgPSAnU2VhcmNoIENvbXBvbmVudCBWaXNpYmxlJyxcbiAgU2VhcmNoWmVyb1N0YXRlU3VnZ2VzdGlvbkNsaWNrZWQgPSAnU2VhcmNoIFplcm8gU3RhdGUgU3VnZ2VzdGlvbiBDbGlja2VkJywgLy8gVGhpcyBpcyB0aGUgc2Nyb2xsaW5nIGxpc3Qgb2Ygc3VnZ2VzdGlvbiBidXR0b25zIGluIGdsb2JhbCBzZWFyY2hcbiAgU2VhcmNoSW5wdXRTdGFydGVkID0gJ1NlYXJjaCBJbnB1dCBTdGFydGVkJyxcbiAgU2VhcmNoUXVlcnlTdWJtaXR0ZWQgPSAnU2VhcmNoIFF1ZXJ5IFN1Ym1pdHRlZCcsXG4gIC8vIFNlYXJjaEF1dG9jb21wbGV0ZVZpZXdlZCA9ICdTZWFyY2ggQXV0b2NvbXBsZXRlIFZpZXdlZCcsIC8vIFRPRE86IGFkZCB0aGlzIHdoZW4gYXV0b2NvbXBsZXRlIGlzIGFkZGVkXG4gIC8vIFNlYXJjaEF1dG9jb21wbGV0ZUNsaWNrZWQgPSAnU2VhcmNoIEF1dG9jb21wbGV0ZSBDbGlja2VkJywgLy8gVE9ETzogYWRkIHRoaXMgd2hlbiBhdXRvY29tcGxldGUgaXMgYWRkZWRcbiAgU2VhcmNoUmVzdWx0c1ZpZXdlZCA9ICdTZWFyY2ggUmVzdWx0cyBWaWV3ZWQnLFxuICBTZWFyY2hUaW1lVG9GaXJzdENsaWNrID0gJ1NlYXJjaCBUaW1lIHRvIEZpcnN0IENsaWNrJyxcbiAgU2VhcmNoWmVyb1Jlc3VsdHNSYXRlID0gJ1NlYXJjaCBaZXJvIFJlc3VsdHMgUmF0ZScsXG4gIFNlYXJjaEZpbHRlckNsaWNrZWQgPSAnU2VhcmNoIEZpbHRlciBDbGlja2VkJyxcbiAgU2VhcmNoU29ydENsaWNrZWQgPSAnU2VhcmNoIFNvcnQgQ2xpY2tlZCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tFdmVudFBhcmFtcyB7XG4gIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZTtcbiAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmVudEdyb3Vwcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnIHtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGFtcGxpdHVkZUFwaUtleTogc3RyaW5nO1xuICBkYXRhUmVzaWRlbmN5OiBzdHJpbmc7XG4gIGVudjogc3RyaW5nO1xuICBjb250ZXh0U291cmNlOiBzdHJpbmc7XG4gIG9yZ1Nob3J0TmFtZTogc3RyaW5nO1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgb3JnR2FDb25maWc/OiB1bmtub3duO1xuICBzaG93PzogYm9vbGVhbjtcbiAgZ2V0TG9jYWxTdG9yYWdlSXRlbT86IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNsYXNzIEFtcGxpdHVkZVNlcnZpY2Uge1xuICBwcml2YXRlIGFtcGxpdHVkZUNsaWVudDogQnJvd3NlckNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJlxuICAgICAgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmXG4gICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgJiZcbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUl0ZW0oa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0oa2V5KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRUcmFja2luZ1Byb3BzKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdzKCkpO1xuICAgIGNvbnN0IGdhdGVzUHJvcHMgPVxuICAgICAgZmVhdHVyZUdhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBmZWF0dXJlR2F0ZXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigoYWNjLCBbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBleHBlcmltZW50UHJvcHMgPSB7fTsgLy8gTm8gZGlyZWN0IGVxdWl2YWxlbnQgZm9yIGV4cGVyaW1lbnRzIGluIEVudml2ZUNvbmZpZyB5ZXRcblxuICAgIGNvbnN0IG9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyA9IHtcbiAgICAgIC4uLmdhdGVzUHJvcHMsXG4gICAgICAuLi5leHBlcmltZW50UHJvcHMsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyxcbiAgICAgIC8vIFRPRE86IG9yZ19pZCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxlIGluIEVudml2ZUNvbmZpZy4gTmVlZCB0byBmaW5kIGEgbmV3IHNvdXJjZSBvciBkZXJpdmUgaXQuXG4gICAgICAvLyBvcmdfaWQ6IG9yZ0NvbmZpZz8ub3JnPy5vcmc/LmlkLFxuICAgICAgYXBwX2lkOiAnY29tbWVyY2UtY2hhdC1yZWFjdC1jb21wb25lbnQnLFxuICAgICAgY2hhdF9pZDogdGhpcy5nZXRMb2NhbFN0b3JhZ2VJdGVtKExvY2FsU3RvcmFnZUtleXMuQ2hhdElkKSxcbiAgICAgIGVudjogdGhpcy5jb25maWcuZW52IHx8ICd1bmtub3duJyxcbiAgICAgIGFwcF9zb3VyY2U6IHRoaXMuY29uZmlnLmNvbnRleHRTb3VyY2UsXG4gICAgICAnb3JnLnNob3J0X25hbWUnOiB0aGlzLmNvbmZpZy5vcmdTaG9ydE5hbWUsXG4gICAgICAndXNlci5pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdjZHAudXNlcl9pZCc6IG51bGwsXG4gICAgICAnY2RwLnByb3ZpZGVyJzogbnVsbCxcbiAgICAgICdldmVudC5zb3VyY2UnOiAnd2ViLWJyb3dzZXInLFxuICAgICAgJ2V2ZW50LnR5cGUnOiAndXNlci1hY3Rpdml0eScsXG4gICAgICAnZXZlbnQuaWQnOiBudWxsLFxuICAgICAgJ2V2ZW50LmNoYW5uZWwnOiAnd2ViJyxcbiAgICAgICdldmVudC50aW1lc3RhbXAnOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcml2YXRlIGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwcmVmaXggPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGV2ZW50UHJvcHMpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCk6IEVucmljaG1lbnRQbHVnaW4ge1xuICAgIGlmICh0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogJ3BhZ2Utdmlldy10cmFja2luZy1lbnJpY2htZW50JyxcbiAgICAgIHR5cGU6ICdlbnJpY2htZW50JyxcbiAgICAgIHNldHVwOiBhc3luYyAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxFdmVudD4gPT4ge1xuICAgICAgICBsZXQgZW5yaWNoZWRFdmVudDogRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbnJpY2ggPSBbXG4gICAgICAgICAgJ1tBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkJyxcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuc2hvdyddID0gU3RyaW5nKHRoaXMuY29uZmlnLnNob3cpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVuYWJsZWRGZWF0dXJlcyA9IHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ3MoKTtcbiAgICAgICAgICBjb25zdCBlbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoZW5hYmxlZEZlYXR1cmVzKS5yZWR1Y2U8XG4gICAgICAgICAgICBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgICAgICAgPihcbiAgICAgICAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICBbYGVuYWJsZWRGZWF0dXJlcy4ke2tleX1gXTogYCR7dmFsdWV9YCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IHRpbWluZ1Byb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAndGltaW5nLmVucmljaGVkX2F0X21zJzpcbiAgICAgICAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cucGVyZm9ybWFuY2U/Lm5vdygpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbnJpY2hlZEV2ZW50ID0ge1xuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBldmVudF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmV2ZW50LmV2ZW50X3Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoKSxcbiAgICAgICAgICAgICAgLi4uZ2xvYmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4uZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4udGltaW5nUHJvcGVydGllcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnJpY2hlZEV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBFdmVudHNEaXNwYXRjaGVyLmRpc3BhdGNoKFNwaWZmeUV2ZW50LkFNUExJVFVERV9FVkVOVCwgZW5yaWNoZWRFdmVudCk7XG5cbiAgICAgICAgcmV0dXJuIGVucmljaGVkRXZlbnQ7XG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50ID0gZW5yaWNobWVudDtcbiAgICByZXR1cm4gZW5yaWNobWVudDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc1JlYWR5ID0gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJiB0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UgJiYgdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LFxuICAgICk7XG5cbiAgICBpZiAoIWlzUmVhZHkpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZygnQW1wbGl0dWRlU2VydmljZSBpcyBub3QgcmVhZHknLCB7XG4gICAgICAgIGlzUmVhZHksXG4gICAgICAgIHVzZXJJZDogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgICBoYXNGZWF0dXJlRmxhZ1NlcnZpY2U6ICEhdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLFxuICAgICAgICBoYXNBbXBsaXR1ZGVBcGlLZXk6ICEhdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFtcGxpdHVkZUNsaWVudCkge1xuICAgICAgY29uc3QgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50ID0gY3JlYXRlSW5zdGFuY2UoKTtcblxuICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmFkZCh0aGlzLmdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCkpO1xuICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmluaXQodGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LCB0aGlzLmNvbmZpZy51c2VySWQsIHtcbiAgICAgICAgc2VydmVyWm9uZTogdGhpcy5jb25maWcuZGF0YVJlc2lkZW5jeSBhcyBTZXJ2ZXJab25lVHlwZSxcbiAgICAgICAgdHJhY2tpbmdPcHRpb25zOiB7XG4gICAgICAgICAgaXBBZGRyZXNzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBhdXRvY2FwdHVyZToge1xuICAgICAgICAgIGF0dHJpYnV0aW9uOiB0cnVlLFxuICAgICAgICAgIHBhZ2VWaWV3czoge1xuICAgICAgICAgICAgdHJhY2tIaXN0b3J5Q2hhbmdlczogJ3BhdGhPbmx5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlc3Npb25zOiBmYWxzZSxcbiAgICAgICAgICBmb3JtSW50ZXJhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICBmaWxlRG93bmxvYWRzOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQgPSBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJhY2tFdmVudCh7XG4gICAgZXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHMsXG4gICAgZXZlbnRHcm91cHMsXG4gICAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyA9IGZhbHNlLFxuICB9OiBUcmFja0V2ZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdTdWJtaXR0aW5nIGV2ZW50JywgZXZlbnROYW1lKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb3JhdGVkRXZlbnROYW1lID0gYFtTcGlmZnldICR7ZXZlbnROYW1lfWA7XG5cbiAgICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ2FtcGxpdHVkZSBjbGllbnQgdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUoZXZlbnREYXRhKTtcbiAgICAgIC8vIGNhbGN1bGF0ZSBhIGhhc2ggb2YgdGhlIGV2ZW50IHByb3BlcnRpZXMgdG8gdXNlIGFzIHRoZSBpbnNlcnRfaWQgc28gdGhhdCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAvLyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIGJ5IEFtcGxpdHVkZVxuICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgZGF0YSk7XG4gICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnNlcnRJZCA9IGhhc2hBcnJheS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcblxuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKGBhbXBsaXR1ZGUgdHJhY2tpbmcgJHtkZWNvcmF0ZWRFdmVudE5hbWV9YCwgbnVsbCwge1xuICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHByb3BzOiBldmVudFByb3BzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LnRyYWNrKFxuICAgICAgICBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKCksXG4gICAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgICAuLi4oZXZlbnRQcm9wcyA/IHRoaXMuZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKGV2ZW50TmFtZSwgZXZlbnRQcm9wcykgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ldmVudEdyb3VwcyxcbiAgICAgICAgICBpbnNlcnRfaWQ6IGN1cnJlbnRJbnNlcnRJZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzICYmIHRoaXMuY29uZmlnLm9yZ0dhQ29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IEFkZCBpbiB3aW5kb3dEYXRhTGF5ZXJTZXJ2aWNlIG9yIGNvbnRleHQgYWx0ZXJuYXRpdmUgYW5kIGhvb2sgaXQgdXAgaGVyZVxuICAgICAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIEdBIHRyYWNraW5nJywgZGVjb3JhdGVkRXZlbnROYW1lKTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kYXRhTGF5ZXIpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICh3aW5kb3cuZGF0YUxheWVyIGFzIGFueVtdKS5wdXNoKHtcbiAgICAgICAgICAgIGV2ZW50OiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFByb3BzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIEVycm9yIHRyYWNraW5nIGV2ZW50JywgZXJyLCB7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuc3VyZSB0aGF0IHN1cHBsZW1lbnRhbCBkZWZhdWx0IHByb3BzIGFyZSBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgcHJvcHNcbiAgc2V0U3VwcGxlbWVudGFsRGVmYXVsdFByb3BzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzID0geyAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcywgLi4ucHJvcHMgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVlBLElBQVksNEVBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtB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
230
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbImVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4iLCJlbnJpY2hlZEV2ZW50OiBFdmVudCIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtYnJvd3Nlcic7XG5pbXBvcnQgeyBFdmVudHNEaXNwYXRjaGVyLCBTcGlmZnlFdmVudCB9IGZyb20gJ3NyYy9ldmVudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5cyB9IGZyb20gJ3NyYy9jb250ZXh0cy9sb2NhbFN0b3JhZ2VDb250ZXh0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB0eXBlIHtcbiAgQnJvd3NlckNsaWVudCxcbiAgRW5yaWNobWVudFBsdWdpbixcbiAgRXZlbnQsXG4gIFNlcnZlclpvbmVUeXBlLFxufSBmcm9tICdAYW1wbGl0dWRlL2FuYWx5dGljcy10eXBlcyc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCB7IFdpZGdldFR5cGVWMyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlc1YzJztcblxuZXhwb3J0IGVudW0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB7XG4gIEJ1bmRsZUxvYWRlZCA9ICdCdW5kbGUgTG9hZGVkJyxcbiAgRW52aXJvbm1lbnRJbml0aWFsaXplZCA9ICdFbnZpcm9ubWVudCBJbml0aWFsaXplZCcsXG4gIENoYXRMaXZlQWdlbnRCdG5DbGljayA9ICdDaGF0IExpdmUgQWdlbnQgQnRuIENsaWNrJyxcbiAgQ2hhdEZsb2F0aW5nQnV0dG9uVmlzaWJsZSA9ICdDaGF0IEZsb2F0aW5nIEJ1dHRvbiBWaXNpYmxlJyxcbiAgQ2hhdENvbXBvbmVudFZpc2libGUgPSAnQ2hhdCBDb21wb25lbnQgVmlzaWJsZScsXG4gIENoYXRDb21wb25lbnRFeHBhbmRlZCA9ICdDaGF0IENvbXBvbmVudCBFeHBhbmRlZCcsXG4gIENoYXRDb21wb25lbnRDb2xsYXBzZWQgPSAnQ2hhdCBDb21wb25lbnQgQ29sbGFwc2VkJyxcbiAgQ2hhdFVzZXJNZXNzYWdlSW5wdXQgPSAnQ2hhdCBVc2VyIE1lc3NhZ2UgSW5wdXQnLFxuICBDaGF0U3VnZ2VzdGlvbkNsaWNrZWQgPSAnQ2hhdCBTdWdnZXN0aW9uIENsaWNrZWQnLFxuICBDaGF0QXNzaXN0YW50UmVzcG9uc2UgPSAnQ2hhdCBBc3Npc3RhbnQgUmVzcG9uc2UnLFxuICBQcm9kdWN0Q2FyZENsaWNrZWQgPSAnUHJvZHVjdCBDYXJkIENsaWNrZWQnLFxuICBQcm9kdWN0UmV2aWV3Q2FyZENsaWNrZWQgPSAnUHJvZHVjdCBSZXZpZXcgQ2FyZCBDbGlja2VkJyxcbiAgQWRkVG9DYXJ0Q2xpY2tlZCA9ICdBZGQgVG8gQ2FydCBDbGlja2VkJyxcbiAgUHJvbXB0Q2FyZENsaWNrZWQgPSAnUHJvbXB0IENhcmQgQ2xpY2tlZCcsXG4gIFN1cHBvcnRlZEV2ZW50ID0gJ1N1cHBvcnRlZCBFdmVudCcsXG4gIFNlYXJjaEJhY2tUb1Jlc3BvbnNlQ2xpY2tlZCA9ICdTZWFyY2ggQmFjayB0byBSZXNwb25zZSBDbGlja2VkJyxcbiAgUGVyZm9ybWFuY2VNZXRyaWNzID0gJ1BlcmZvcm1hbmNlIE1ldHJpY3MnLFxuICBTZWFyY2hCYXJDbGlja2VkID0gJ1NlYXJjaCBCYXIgQ2xpY2tlZCcsXG4gIE9yZGVyTG9va3VwU3RhcnRlZCA9ICdPcmRlciBMb29rdXAgU3RhcnRlZCcsXG4gIE9yZGVyTG9va3VwRm9ybVN1Ym1pdHRlZCA9ICdPcmRlciBMb29rdXAgRm9ybSBTdWJtaXR0ZWQnLFxuICBTZWFyY2hDb21wb25lbnRWaXNpYmxlID0gJ1NlYXJjaCBDb21wb25lbnQgVmlzaWJsZScsXG4gIFNlYXJjaFplcm9TdGF0ZVN1Z2dlc3Rpb25DbGlja2VkID0gJ1NlYXJjaCBaZXJvIFN0YXRlIFN1Z2dlc3Rpb24gQ2xpY2tlZCcsIC8vIFRoaXMgaXMgdGhlIHNjcm9sbGluZyBsaXN0IG9mIHN1Z2dlc3Rpb24gYnV0dG9ucyBpbiBnbG9iYWwgc2VhcmNoXG4gIFNlYXJjaElucHV0U3RhcnRlZCA9ICdTZWFyY2ggSW5wdXQgU3RhcnRlZCcsXG4gIFNlYXJjaFF1ZXJ5U3VibWl0dGVkID0gJ1NlYXJjaCBRdWVyeSBTdWJtaXR0ZWQnLFxuICAvLyBTZWFyY2hBdXRvY29tcGxldGVWaWV3ZWQgPSAnU2VhcmNoIEF1dG9jb21wbGV0ZSBWaWV3ZWQnLCAvLyBUT0RPOiBhZGQgdGhpcyB3aGVuIGF1dG9jb21wbGV0ZSBpcyBhZGRlZFxuICAvLyBTZWFyY2hBdXRvY29tcGxldGVDbGlja2VkID0gJ1NlYXJjaCBBdXRvY29tcGxldGUgQ2xpY2tlZCcsIC8vIFRPRE86IGFkZCB0aGlzIHdoZW4gYXV0b2NvbXBsZXRlIGlzIGFkZGVkXG4gIFNlYXJjaFJlc3VsdHNWaWV3ZWQgPSAnU2VhcmNoIFJlc3VsdHMgVmlld2VkJyxcbiAgU2VhcmNoVGltZVRvRmlyc3RDbGljayA9ICdTZWFyY2ggVGltZSB0byBGaXJzdCBDbGljaycsXG4gIFNlYXJjaFplcm9SZXN1bHRzUmF0ZSA9ICdTZWFyY2ggWmVybyBSZXN1bHRzIFJhdGUnLFxuICBTZWFyY2hGaWx0ZXJDbGlja2VkID0gJ1NlYXJjaCBGaWx0ZXIgQ2xpY2tlZCcsXG4gIFNlYXJjaFNvcnRDbGlja2VkID0gJ1NlYXJjaCBTb3J0IENsaWNrZWQnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrRXZlbnRQYXJhbXMge1xuICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWU7XG4gIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZlbnRHcm91cHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1wbGl0dWRlU2VydmljZUNvbmZpZyB7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBhbXBsaXR1ZGVBcGlLZXk6IHN0cmluZztcbiAgZGF0YVJlc2lkZW5jeTogc3RyaW5nO1xuICBlbnY6IHN0cmluZztcbiAgY29udGV4dFNvdXJjZTogc3RyaW5nO1xuICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIG9yZ0dhQ29uZmlnPzogdW5rbm93bjtcbiAgc2hvdzogYm9vbGVhbjtcbiAgZW5hYmxlZEZlYXR1cmVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIGdldExvY2FsU3RvcmFnZUl0ZW06IG51bGwgfCAoKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsKTtcbn1cblxuZXhwb3J0IGNsYXNzIEFtcGxpdHVkZVNlcnZpY2Uge1xuICBwcml2YXRlIGFtcGxpdHVkZUNsaWVudDogQnJvd3NlckNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJlxuICAgICAgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmXG4gICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgJiZcbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUl0ZW0oa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0oa2V5KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRUcmFja2luZ1Byb3BzKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdzKCkpO1xuICAgIGNvbnN0IGdhdGVzUHJvcHMgPVxuICAgICAgZmVhdHVyZUdhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBmZWF0dXJlR2F0ZXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigoYWNjLCBbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBleHBlcmltZW50UHJvcHMgPSB7fTsgLy8gTm8gZGlyZWN0IGVxdWl2YWxlbnQgZm9yIGV4cGVyaW1lbnRzIGluIEVudml2ZUNvbmZpZyB5ZXRcblxuICAgIGNvbnN0IG9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyA9IHtcbiAgICAgIC4uLmdhdGVzUHJvcHMsXG4gICAgICAuLi5leHBlcmltZW50UHJvcHMsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyxcbiAgICAgIC8vIFRPRE86IG9yZ19pZCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxlIGluIEVudml2ZUNvbmZpZy4gTmVlZCB0byBmaW5kIGEgbmV3IHNvdXJjZSBvciBkZXJpdmUgaXQuXG4gICAgICAvLyBvcmdfaWQ6IG9yZ0NvbmZpZz8ub3JnPy5vcmc/LmlkLFxuICAgICAgYXBwX2lkOiAnY29tbWVyY2UtY2hhdC1yZWFjdC1jb21wb25lbnQnLFxuICAgICAgY2hhdF9pZDogdGhpcy5nZXRMb2NhbFN0b3JhZ2VJdGVtKExvY2FsU3RvcmFnZUtleXMuQ2hhdElkKSxcbiAgICAgIGVudjogdGhpcy5jb25maWcuZW52IHx8ICd1bmtub3duJyxcbiAgICAgIGFwcF9zb3VyY2U6IHRoaXMuY29uZmlnLmNvbnRleHRTb3VyY2UsXG4gICAgICBvcmdfaWQ6IHRoaXMuY29uZmlnLm9yZ0lkLFxuICAgICAgJ29yZy5zaG9ydF9uYW1lJzogdGhpcy5jb25maWcub3JnU2hvcnROYW1lLFxuICAgICAgJ3VzZXIuaWQnOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAnY2RwLnVzZXJfaWQnOiBudWxsLFxuICAgICAgJ2NkcC5wcm92aWRlcic6IG51bGwsXG4gICAgICAnZXZlbnQuc291cmNlJzogJ3dlYi1icm93c2VyJyxcbiAgICAgICdldmVudC50eXBlJzogJ3VzZXItYWN0aXZpdHknLFxuICAgICAgJ2V2ZW50LmlkJzogbnVsbCxcbiAgICAgICdldmVudC5jaGFubmVsJzogJ3dlYicsXG4gICAgICAnZXZlbnQudGltZXN0YW1wJzogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgcHJpdmF0ZSBldmVudFByb3BzVG9QcmVmaXhlZEV2ZW50UHJvcHMoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcHJlZml4ID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhldmVudFByb3BzKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWNjW2Ake3ByZWZpeH0uJHtrZXl9YF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpOiBFbnJpY2htZW50UGx1Z2luIHtcbiAgICBpZiAodGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiA9IHtcbiAgICAgIG5hbWU6ICdwYWdlLXZpZXctdHJhY2tpbmctZW5yaWNobWVudCcsXG4gICAgICB0eXBlOiAnZW5yaWNobWVudCcsXG4gICAgICBzZXR1cDogYXN5bmMgKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGV2ZW50OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+ID0+IHtcbiAgICAgICAgbGV0IGVucmljaGVkRXZlbnQ6IEV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGV2ZW50c1RvRW5yaWNoID0gW1xuICAgICAgICAgICdbQW1wbGl0dWRlXSBQYWdlIFZpZXdlZCcsXG4gICAgICAgICAgYFtTcGlmZnldICR7U3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5CdW5kbGVMb2FkZWR9YCxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZXZlbnRzVG9FbnJpY2guaW5jbHVkZXMoZXZlbnQuZXZlbnRfdHlwZSkpIHtcbiAgICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuc2hvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLnNob3cnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5zaG93KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1snZ2xvYmFsUHJvcGVydGllcy5lbnYnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5lbnYpO1xuXG4gICAgICAgICAgY29uc3QgZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgdGhpcy5jb25maWc/LmVuYWJsZWRGZWF0dXJlcyA/PyAoe30gYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pLFxuICAgICAgICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuICAgICAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgIFtgZW5hYmxlZEZlYXR1cmVzLiR7a2V5fWBdOiBgJHt2YWx1ZX1gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdGltaW5nUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICd0aW1pbmcuZW5yaWNoZWRfYXRfbXMnOlxuICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5wZXJmb3JtYW5jZT8ubm93KCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSB7XG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uZXZlbnQuZXZlbnRfcHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcygpLFxuICAgICAgICAgICAgICAuLi5nbG9iYWxQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi5lbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aW1pbmdQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIEV2ZW50c0Rpc3BhdGNoZXIuZGlzcGF0Y2goU3BpZmZ5RXZlbnQuQU1QTElUVURFX0VWRU5ULCBlbnJpY2hlZEV2ZW50KTtcblxuICAgICAgICByZXR1cm4gZW5yaWNoZWRFdmVudDtcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgPSBlbnJpY2htZW50O1xuICAgIHJldHVybiBlbnJpY2htZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzUmVhZHkgPSBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmIHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSAmJiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgKTtcblxuICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKCdBbXBsaXR1ZGVTZXJ2aWNlIGlzIG5vdCByZWFkeScsIHtcbiAgICAgICAgaXNSZWFkeSxcbiAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAgIGhhc0ZlYXR1cmVGbGFnU2VydmljZTogISF0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UsXG4gICAgICAgIGhhc0FtcGxpdHVkZUFwaUtleTogISF0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICBjb25zdCBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQgPSBjcmVhdGVJbnN0YW5jZSgpO1xuXG4gICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuYWRkKHRoaXMuZ2V0RXZlbnRUcmFja2luZ0VucmljaG1lbnQoKSk7XG4gICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuaW5pdCh0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksIHRoaXMuY29uZmlnLnVzZXJJZCwge1xuICAgICAgICBzZXJ2ZXJab25lOiB0aGlzLmNvbmZpZy5kYXRhUmVzaWRlbmN5IGFzIFNlcnZlclpvbmVUeXBlLFxuICAgICAgICB0cmFja2luZ09wdGlvbnM6IHtcbiAgICAgICAgICBpcEFkZHJlc3M6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9jYXB0dXJlOiB7XG4gICAgICAgICAgYXR0cmlidXRpb246IHRydWUsXG4gICAgICAgICAgcGFnZVZpZXdzOiB7XG4gICAgICAgICAgICB0cmFja0hpc3RvcnlDaGFuZ2VzOiAncGF0aE9ubHknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2Vzc2lvbnM6IGZhbHNlLFxuICAgICAgICAgIGZvcm1JbnRlcmFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgIGZpbGVEb3dubG9hZHM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudCA9IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudCh3aWRnZXRUeXBlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHdpZGdldFR5cGUpIHtcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLkZsb2F0aW5nQnV0dG9uVjM6XG4gICAgICAgIHJldHVybiAnZmxvYXRpbmdfYnV0dG9uJztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzOlxuICAgICAgICByZXR1cm4gJ2VtYmVkZGVkX3dpZGdldCc7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgICAgcmV0dXJuICdzdWdnZXN0aW9uX2Jhcic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG1hcCB0aGUgZXZlbnQgcHJvcHMgdG8gdGhlIGNvcnJlY3QgZm9ybWF0IGZvciB0aGUgbGVnYWN5IGFtcGxpdHVkZSBldmVudHNcbiAgc3RhdGljIG1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfTogVHJhY2tFdmVudFBhcmFtcyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRWaXNpYmxlKSB7XG4gICAgICBjb25zdCBtYXBwZWRXaWRnZXRUeXBlID0gQW1wbGl0dWRlU2VydmljZS5tYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KFxuICAgICAgICBldmVudFByb3BzPy53aWRnZXRfdHlwZSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBjaGF0X2NvbXBvbmVudDogbWFwcGVkV2lkZ2V0VHlwZSxcbiAgICAgICAgJ2NoYXQuY29tcG9uZW50X3Zpc2libGUnOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50UHJvcHMgPz8ge307XG4gIH1cblxuICBhc3luYyB0cmFja0V2ZW50KHtcbiAgICBldmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcyxcbiAgICBldmVudEdyb3VwcyxcbiAgICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzID0gZmFsc2UsXG4gIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1N1Ym1pdHRpbmcgZXZlbnQnLCBldmVudE5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvcmF0ZWRFdmVudE5hbWUgPSBgW1NwaWZmeV0gJHtldmVudE5hbWV9YDtcblxuICAgICAgaWYgKCF0aGlzLmFtcGxpdHVkZUNsaWVudCkge1xuICAgICAgICBMb2dnZXIubG9nV2FybignYW1wbGl0dWRlIGNsaWVudCB1bmRlZmluZWQnLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcHBlZEV2ZW50UHJvcHMgPSBBbXBsaXR1ZGVTZXJ2aWNlLm1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfSk7XG5cbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzOiBtYXBwZWRFdmVudFByb3BzLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZShldmVudERhdGEpO1xuICAgICAgLy8gY2FsY3VsYXRlIGEgaGFzaCBvZiB0aGUgZXZlbnQgcHJvcGVydGllcyB0byB1c2UgYXMgdGhlIGluc2VydF9pZCBzbyB0aGF0IGR1cGxpY2F0ZSBldmVudHNcbiAgICAgIC8vIGFyZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgYnkgQW1wbGl0dWRlXG4gICAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKTtcbiAgICAgIGNvbnN0IGhhc2hBcnJheSA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpO1xuICAgICAgY29uc3QgY3VycmVudEluc2VydElkID0gaGFzaEFycmF5Lm1hcChiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuXG4gICAgICBMb2dnZXIubG9nRGVidWcoYGFtcGxpdHVkZSB0cmFja2luZyAke2RlY29yYXRlZEV2ZW50TmFtZX1gLCBudWxsLCB7XG4gICAgICAgIGV2ZW50X25hbWU6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgcHJvcHM6IG1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQudHJhY2soXG4gICAgICAgIGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoKSxcbiAgICAgICAgICAuLi5tYXBwZWRFdmVudFByb3BzLFxuICAgICAgICAgIC4uLihtYXBwZWRFdmVudFByb3BzXG4gICAgICAgICAgICA/IHRoaXMuZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKGV2ZW50TmFtZSwgbWFwcGVkRXZlbnRQcm9wcylcbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZXZlbnRHcm91cHMsXG4gICAgICAgICAgaW5zZXJ0X2lkOiBjdXJyZW50SW5zZXJ0SWQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyAmJiB0aGlzLmNvbmZpZy5vcmdHYUNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBBZGQgaW4gd2luZG93RGF0YUxheWVyU2VydmljZSBvciBjb250ZXh0IGFsdGVybmF0aXZlIGFuZCBob29rIGl0IHVwIGhlcmVcbiAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBHQSB0cmFja2luZycsIGRlY29yYXRlZEV2ZW50TmFtZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAod2luZG93LmRhdGFMYXllciBhcyBhbnlbXSkucHVzaCh7XG4gICAgICAgICAgICBldmVudDogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdbc3BpZmZ5LWFpXSBFcnJvciB0cmFja2luZyBldmVudCcsIGVyciwge1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgdGhhdCBzdXBwbGVtZW50YWwgZGVmYXVsdCBwcm9wcyBhcmUgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHByb3BzXG4gIHNldFN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyA9IHByb3BzO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWFBLElBQVksNEVBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUF5QkYsSUFBYSxtQkFBYixNQUFhLGlCQUFpQjtDQVM1QixZQUFZLFFBQWdDO2tDQUpnQixFQUFFO0FBSzVELE9BQUssU0FBUztBQUNkLE9BQUssWUFBWTs7Q0FHbkIsSUFBSSxVQUFtQjtBQUNyQixTQUFPLFFBQ0wsS0FBSyxPQUFPLFVBQ1osS0FBSyxPQUFPLHNCQUNaLEtBQUssT0FBTyxtQkFDWixLQUFLLGdCQUNOOztDQUdILEFBQVEsb0JBQW9CLEtBQTRCO0FBQ3RELE1BQUksS0FBSyxPQUFPLG9CQUNkLFFBQU8sS0FBSyxPQUFPLG9CQUFvQixJQUFJ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
@@ -0,0 +1,3 @@
1
+ const require_userIdentityService = require('./userIdentityService.cjs');
2
+
3
+ exports.UserIdentityService = require_userIdentityService.UserIdentityService;
@@ -0,0 +1,2 @@
1
+ import { UserIdentityService } from "./userIdentityService.cjs";
2
+ export { UserIdentityService };
@@ -0,0 +1,2 @@
1
+ import { UserIdentityService } from "./userIdentityService.js";
2
+ export { UserIdentityService };
@@ -0,0 +1,3 @@
1
+ import { UserIdentityService } from "./userIdentityService.js";
2
+
3
+ export { UserIdentityService };
@@ -0,0 +1,49 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_logger = require('../../application/logging/logger.cjs');
3
+ const require_atomStore = require('../../atoms/atomStore/atomStore.cjs');
4
+ require('../../atoms/atomStore/index.cjs');
5
+ const require_atoms_app_index = require('../../atoms/app/index.cjs');
6
+ let __envive_ai_analytics = require("@envive-ai/analytics");
7
+ let __envive_ai_analytics_dist_analytics_EnviveAnalytics = require("@envive-ai/analytics/dist/analytics/EnviveAnalytics");
8
+
9
+ //#region src/services/userIdentityService/userIdentityService.ts
10
+ var UserIdentityService = class {
11
+ constructor({ apiKey }) {
12
+ this.USER_ID_OVERRIDE_KEY = "v1-spiffy-user-id-override";
13
+ this.apiKey = apiKey;
14
+ }
15
+ getUserIdOverrideFromLocalStorage() {
16
+ require_logger.default.logDebug("[spiffy-ai] Getting userID from localStorage");
17
+ return localStorage.getItem(this.USER_ID_OVERRIDE_KEY) ?? void 0;
18
+ }
19
+ async getUserIdOrDefault() {
20
+ const userIdOverride = this.getUserIdOverrideFromLocalStorage();
21
+ if (userIdOverride) return userIdOverride;
22
+ try {
23
+ require_logger.default.logDebug("Getting userID via EnviveAnalytics in UserIdentityService");
24
+ const enviveUserId = await new __envive_ai_analytics.EnviveAnalytics({
25
+ apiKey: this.apiKey,
26
+ environmentInfo: { executionContext: __envive_ai_analytics_dist_analytics_EnviveAnalytics.ExecutionContext.EnviveReactComponentsV3 }
27
+ }).resolveEnviveUserId();
28
+ if (!enviveUserId) throw new Error("[spiffy-ai] EnviveAnalytics.resolveEnviveUserId() returned null/undefined");
29
+ return enviveUserId;
30
+ } catch (error) {
31
+ require_logger.default.logError("[spiffy-ai] CRITICAL: Failed to get user ID:", error);
32
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
33
+ throw new Error(`[spiffy-ai] CRITICAL: User ID resolution failed: ${errorMessage}`);
34
+ }
35
+ }
36
+ async initializeUser(atomStore) {
37
+ try {
38
+ const userId = await this.getUserIdOrDefault();
39
+ (atomStore || require_atomStore.getAtomStore()).set(require_atoms_app_index.userIdAtom, userId);
40
+ } catch (error) {
41
+ require_logger.default.logError("[spiffy-ai] CRITICAL: Failed to initialize user ID:", error);
42
+ throw error;
43
+ }
44
+ }
45
+ };
46
+
47
+ //#endregion
48
+ exports.UserIdentityService = UserIdentityService;
49
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcklkZW50aXR5U2VydmljZS5janMiLCJuYW1lcyI6WyJFbnZpdmVBbmFseXRpY3MiLCJFeGVjdXRpb25Db250ZXh0IiwiZXJyb3I6IHVua25vd24iLCJnZXRBdG9tU3RvcmUiLCJ1c2VySWRBdG9tIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VzZXJJZGVudGl0eVNlcnZpY2UvdXNlcklkZW50aXR5U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpdmVBbmFseXRpY3MgfSBmcm9tICdAZW52aXZlLWFpL2FuYWx5dGljcyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlJztcbmltcG9ydCB7IHVzZXJJZEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICdAZW52aXZlLWFpL2FuYWx5dGljcy9kaXN0L2FuYWx5dGljcy9FbnZpdmVBbmFseXRpY3MnO1xuXG50eXBlIFVzZXJJZGVudGl0eVNlcnZpY2VQcm9wcyA9IHtcbiAgYXBpS2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgVXNlcklkZW50aXR5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpS2V5OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBVU0VSX0lEX09WRVJSSURFX0tFWSA9ICd2MS1zcGlmZnktdXNlci1pZC1vdmVycmlkZSc7XG5cbiAgY29uc3RydWN0b3IoeyBhcGlLZXkgfTogVXNlcklkZW50aXR5U2VydmljZVByb3BzKSB7XG4gICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gIH1cblxuICBnZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIEdldHRpbmcgdXNlcklEIGZyb20gbG9jYWxTdG9yYWdlJyk7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JRF9PVkVSUklERV9LRVkpID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJJZE9yRGVmYXVsdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHVzZXJJZE92ZXJyaWRlID0gdGhpcy5nZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICBpZiAodXNlcklkT3ZlcnJpZGUpIHtcbiAgICAgIHJldHVybiB1c2VySWRPdmVycmlkZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKCdHZXR0aW5nIHVzZXJJRCB2aWEgRW52aXZlQW5hbHl0aWNzIGluIFVzZXJJZGVudGl0eVNlcnZpY2UnKTtcbiAgICAgIGNvbnN0IGVudml2ZUFuYWx5dGljcyA9IG5ldyBFbnZpdmVBbmFseXRpY3Moe1xuICAgICAgICBhcGlLZXk6IHRoaXMuYXBpS2V5LFxuICAgICAgICBlbnZpcm9ubWVudEluZm86IHsgZXhlY3V0aW9uQ29udGV4dDogRXhlY3V0aW9uQ29udGV4dC5FbnZpdmVSZWFjdENvbXBvbmVudHNWMyB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbnZpdmVVc2VySWQgPSBhd2FpdCBlbnZpdmVBbmFseXRpY3MucmVzb2x2ZUVudml2ZVVzZXJJZCgpO1xuXG4gICAgICBpZiAoIWVudml2ZVVzZXJJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1tzcGlmZnktYWldIEVudml2ZUFuYWx5dGljcy5yZXNvbHZlRW52aXZlVXNlcklkKCkgcmV0dXJuZWQgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW52aXZlVXNlcklkO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIENSSVRJQ0FMOiBGYWlsZWQgdG8gZ2V0IHVzZXIgSUQ6JywgZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFtzcGlmZnktYWldIENSSVRJQ0FMOiBVc2VyIElEIHJlc29sdXRpb24gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplVXNlcihhdG9tU3RvcmU/OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBdG9tU3RvcmU+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9IGF3YWl0IHRoaXMuZ2V0VXNlcklkT3JEZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHN0b3JlID0gYXRvbVN0b3JlIHx8IGdldEF0b21TdG9yZSgpO1xuICAgICAgc3RvcmUuc2V0KHVzZXJJZEF0b20sIHVzZXJJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignW3NwaWZmeS1haV0gQ1JJVElDQUw6IEZhaWxlZCB0byBpbml0aWFsaXplIHVzZXIgSUQ6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVVBLElBQWEsc0JBQWIsTUFBaUM7Q0FLL0IsWUFBWSxFQUFFLFVBQW9DOzhCQUZWO0FBR3RDLE9BQUssU0FBUzs7Q0FHaEIsb0NBQXdEO0FBQ3RELHlCQUFPLFNBQVMsK0NBQStDO0FBQy9ELFNBQU8sYUFBYSxRQUFRLEtBQUsscUJBQXFCLElBQUk7O0NBRzVELE1BQU0scUJBQXNDO0VBQzFDLE1BQU0saUJBQWlCLEtBQUssbUNBQW1DO0FBQy9ELE1BQUksZUFDRixRQUFPO0FBR1QsTUFBSTtBQUNGLDBCQUFPLFNBQVMsNERBQTREO0dBSzVFLE1BQU0sZUFBZSxNQUpHLElBQUlBLHNDQUFnQjtJQUMxQyxRQUFRLEtBQUs7SUFDYixpQkFBaUIsRUFBRSxrQkFBa0JDLHNFQUFpQix5QkFBeUI7SUFDaEYsQ0FBQyxDQUN5QyxxQkFBcUI7QUFFaEUsT0FBSSxDQUFDLGFBQ0gsT0FBTSxJQUFJLE1BQ1IsNEVBQ0Q7QUFHSCxVQUFPO1dBQ0FDLE9BQWdCO0FBQ3ZCLDBCQUFPLFNBQVMsZ0RBQWdELE1BQU07R0FDdEUsTUFBTSxlQUFlLGlCQUFpQixRQUFRLE1BQU0sVUFBVTtBQUM5RCxTQUFNLElBQUksTUFBTSxvREFBb0QsZUFBZTs7O0NBSXZGLE1BQU0sZUFBZSxXQUE0RDtBQUMvRSxNQUFJO0dBQ0YsTUFBTSxTQUFTLE1BQU0sS0FBSyxvQkFBb0I7QUFHOUMsSUFEYyxhQUFhQyxnQ0FBYyxFQUNuQyxJQUFJQyxvQ0FBWSxPQUFPO1dBQ3RCLE9BQU87QUFDZCwwQkFBTyxTQUFTLHVEQUF1RCxNQUFNO0FBQzdFLFNBQU0ifQ==
@@ -0,0 +1,19 @@
1
+ import { getAtomStore } from "../../atoms/atomStore/atomStore.cjs";
2
+
3
+ //#region src/services/userIdentityService/userIdentityService.d.ts
4
+ type UserIdentityServiceProps = {
5
+ apiKey: string;
6
+ };
7
+ declare class UserIdentityService {
8
+ private readonly apiKey;
9
+ private readonly USER_ID_OVERRIDE_KEY;
10
+ constructor({
11
+ apiKey
12
+ }: UserIdentityServiceProps);
13
+ getUserIdOverrideFromLocalStorage(): string | undefined;
14
+ getUserIdOrDefault(): Promise<string>;
15
+ initializeUser(atomStore?: ReturnType<typeof getAtomStore>): Promise<void>;
16
+ }
17
+ //#endregion
18
+ export { UserIdentityService };
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcklkZW50aXR5U2VydmljZS5kLmN0cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdXNlcklkZW50aXR5U2VydmljZS91c2VySWRlbnRpdHlTZXJ2aWNlLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QXRvbVN0b3JlIH0gZnJvbSAnc3JjL2F0b21zL2F0b21TdG9yZSc7XG50eXBlIFVzZXJJZGVudGl0eVNlcnZpY2VQcm9wcyA9IHtcbiAgICBhcGlLZXk6IHN0cmluZztcbn07XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBVc2VySWRlbnRpdHlTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaUtleTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFVTRVJfSURfT1ZFUlJJREVfS0VZO1xuICAgIGNvbnN0cnVjdG9yKHsgYXBpS2V5IH06IFVzZXJJZGVudGl0eVNlcnZpY2VQcm9wcyk7XG4gICAgZ2V0VXNlcklkT3ZlcnJpZGVGcm9tTG9jYWxTdG9yYWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBnZXRVc2VySWRPckRlZmF1bHQoKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIGluaXRpYWxpemVVc2VyKGF0b21TdG9yZT86IFJldHVyblR5cGU8dHlwZW9mIGdldEF0b21TdG9yZT4pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IHt9O1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFJLDJCQUEyQixDQUFDLElBQUE7QUFDaEMsSUFBVyxzQkFBTztDQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUEifQ==
@@ -0,0 +1,19 @@
1
+ import { getAtomStore } from "../../atoms/atomStore/atomStore.js";
2
+
3
+ //#region src/services/userIdentityService/userIdentityService.d.ts
4
+ type UserIdentityServiceProps = {
5
+ apiKey: string;
6
+ };
7
+ declare class UserIdentityService {
8
+ private readonly apiKey;
9
+ private readonly USER_ID_OVERRIDE_KEY;
10
+ constructor({
11
+ apiKey
12
+ }: UserIdentityServiceProps);
13
+ getUserIdOverrideFromLocalStorage(): string | undefined;
14
+ getUserIdOrDefault(): Promise<string>;
15
+ initializeUser(atomStore?: ReturnType<typeof getAtomStore>): Promise<void>;
16
+ }
17
+ //#endregion
18
+ export { UserIdentityService };
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcklkZW50aXR5U2VydmljZS5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy91c2VySWRlbnRpdHlTZXJ2aWNlL3VzZXJJZGVudGl0eVNlcnZpY2UuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlJztcbnR5cGUgVXNlcklkZW50aXR5U2VydmljZVByb3BzID0ge1xuICAgIGFwaUtleTogc3RyaW5nO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFVzZXJJZGVudGl0eVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBpS2V5O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVVNFUl9JRF9PVkVSUklERV9LRVk7XG4gICAgY29uc3RydWN0b3IoeyBhcGlLZXkgfTogVXNlcklkZW50aXR5U2VydmljZVByb3BzKTtcbiAgICBnZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGdldFVzZXJJZE9yRGVmYXVsdCgpOiBQcm9taXNlPHN0cmluZz47XG4gICAgaW5pdGlhbGl6ZVVzZXIoYXRvbVN0b3JlPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QXRvbVN0b3JlPik6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQge307XG4iXSwibWFwcGluZ3MiOiI7OztBQUNBLElBQUksMkJBQTJCLENBQUMsSUFBQTtBQUNoQyxJQUFXLHNCQUFPO0NBQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQSJ9
@@ -0,0 +1,48 @@
1
+ import logger_default from "../../application/logging/logger.js";
2
+ import { getAtomStore } from "../../atoms/atomStore/atomStore.js";
3
+ import "../../atoms/atomStore/index.js";
4
+ import { userIdAtom } from "../../atoms/app/index.js";
5
+ import { EnviveAnalytics } from "@envive-ai/analytics";
6
+ import { ExecutionContext } from "@envive-ai/analytics/dist/analytics/EnviveAnalytics";
7
+
8
+ //#region src/services/userIdentityService/userIdentityService.ts
9
+ var UserIdentityService = class {
10
+ constructor({ apiKey }) {
11
+ this.USER_ID_OVERRIDE_KEY = "v1-spiffy-user-id-override";
12
+ this.apiKey = apiKey;
13
+ }
14
+ getUserIdOverrideFromLocalStorage() {
15
+ logger_default.logDebug("[spiffy-ai] Getting userID from localStorage");
16
+ return localStorage.getItem(this.USER_ID_OVERRIDE_KEY) ?? void 0;
17
+ }
18
+ async getUserIdOrDefault() {
19
+ const userIdOverride = this.getUserIdOverrideFromLocalStorage();
20
+ if (userIdOverride) return userIdOverride;
21
+ try {
22
+ logger_default.logDebug("Getting userID via EnviveAnalytics in UserIdentityService");
23
+ const enviveUserId = await new EnviveAnalytics({
24
+ apiKey: this.apiKey,
25
+ environmentInfo: { executionContext: ExecutionContext.EnviveReactComponentsV3 }
26
+ }).resolveEnviveUserId();
27
+ if (!enviveUserId) throw new Error("[spiffy-ai] EnviveAnalytics.resolveEnviveUserId() returned null/undefined");
28
+ return enviveUserId;
29
+ } catch (error) {
30
+ logger_default.logError("[spiffy-ai] CRITICAL: Failed to get user ID:", error);
31
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
32
+ throw new Error(`[spiffy-ai] CRITICAL: User ID resolution failed: ${errorMessage}`);
33
+ }
34
+ }
35
+ async initializeUser(atomStore) {
36
+ try {
37
+ const userId = await this.getUserIdOrDefault();
38
+ (atomStore || getAtomStore()).set(userIdAtom, userId);
39
+ } catch (error) {
40
+ logger_default.logError("[spiffy-ai] CRITICAL: Failed to initialize user ID:", error);
41
+ throw error;
42
+ }
43
+ }
44
+ };
45
+
46
+ //#endregion
47
+ export { UserIdentityService };
48
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcklkZW50aXR5U2VydmljZS5qcyIsIm5hbWVzIjpbImVycm9yOiB1bmtub3duIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VzZXJJZGVudGl0eVNlcnZpY2UvdXNlcklkZW50aXR5U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpdmVBbmFseXRpY3MgfSBmcm9tICdAZW52aXZlLWFpL2FuYWx5dGljcyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlJztcbmltcG9ydCB7IHVzZXJJZEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICdAZW52aXZlLWFpL2FuYWx5dGljcy9kaXN0L2FuYWx5dGljcy9FbnZpdmVBbmFseXRpY3MnO1xuXG50eXBlIFVzZXJJZGVudGl0eVNlcnZpY2VQcm9wcyA9IHtcbiAgYXBpS2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgVXNlcklkZW50aXR5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpS2V5OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBVU0VSX0lEX09WRVJSSURFX0tFWSA9ICd2MS1zcGlmZnktdXNlci1pZC1vdmVycmlkZSc7XG5cbiAgY29uc3RydWN0b3IoeyBhcGlLZXkgfTogVXNlcklkZW50aXR5U2VydmljZVByb3BzKSB7XG4gICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gIH1cblxuICBnZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIEdldHRpbmcgdXNlcklEIGZyb20gbG9jYWxTdG9yYWdlJyk7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JRF9PVkVSUklERV9LRVkpID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJJZE9yRGVmYXVsdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHVzZXJJZE92ZXJyaWRlID0gdGhpcy5nZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICBpZiAodXNlcklkT3ZlcnJpZGUpIHtcbiAgICAgIHJldHVybiB1c2VySWRPdmVycmlkZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKCdHZXR0aW5nIHVzZXJJRCB2aWEgRW52aXZlQW5hbHl0aWNzIGluIFVzZXJJZGVudGl0eVNlcnZpY2UnKTtcbiAgICAgIGNvbnN0IGVudml2ZUFuYWx5dGljcyA9IG5ldyBFbnZpdmVBbmFseXRpY3Moe1xuICAgICAgICBhcGlLZXk6IHRoaXMuYXBpS2V5LFxuICAgICAgICBlbnZpcm9ubWVudEluZm86IHsgZXhlY3V0aW9uQ29udGV4dDogRXhlY3V0aW9uQ29udGV4dC5FbnZpdmVSZWFjdENvbXBvbmVudHNWMyB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbnZpdmVVc2VySWQgPSBhd2FpdCBlbnZpdmVBbmFseXRpY3MucmVzb2x2ZUVudml2ZVVzZXJJZCgpO1xuXG4gICAgICBpZiAoIWVudml2ZVVzZXJJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1tzcGlmZnktYWldIEVudml2ZUFuYWx5dGljcy5yZXNvbHZlRW52aXZlVXNlcklkKCkgcmV0dXJuZWQgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW52aXZlVXNlcklkO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIENSSVRJQ0FMOiBGYWlsZWQgdG8gZ2V0IHVzZXIgSUQ6JywgZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFtzcGlmZnktYWldIENSSVRJQ0FMOiBVc2VyIElEIHJlc29sdXRpb24gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplVXNlcihhdG9tU3RvcmU/OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBdG9tU3RvcmU+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9IGF3YWl0IHRoaXMuZ2V0VXNlcklkT3JEZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHN0b3JlID0gYXRvbVN0b3JlIHx8IGdldEF0b21TdG9yZSgpO1xuICAgICAgc3RvcmUuc2V0KHVzZXJJZEF0b20sIHVzZXJJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignW3NwaWZmeS1haV0gQ1JJVElDQUw6IEZhaWxlZCB0byBpbml0aWFsaXplIHVzZXIgSUQ6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBVUEsSUFBYSxzQkFBYixNQUFpQztDQUsvQixZQUFZLEVBQUUsVUFBb0M7OEJBRlY7QUFHdEMsT0FBSyxTQUFTOztDQUdoQixvQ0FBd0Q7QUFDdEQsaUJBQU8sU0FBUywrQ0FBK0M7QUFDL0QsU0FBTyxhQUFhLFFBQVEsS0FBSyxxQkFBcUIsSUFBSTs7Q0FHNUQsTUFBTSxxQkFBc0M7RUFDMUMsTUFBTSxpQkFBaUIsS0FBSyxtQ0FBbUM7QUFDL0QsTUFBSSxlQUNGLFFBQU87QUFHVCxNQUFJO0FBQ0Ysa0JBQU8sU0FBUyw0REFBNEQ7R0FLNUUsTUFBTSxlQUFlLE1BSkcsSUFBSSxnQkFBZ0I7SUFDMUMsUUFBUSxLQUFLO0lBQ2IsaUJBQWlCLEVBQUUsa0JBQWtCLGlCQUFpQix5QkFBeUI7SUFDaEYsQ0FBQyxDQUN5QyxxQkFBcUI7QUFFaEUsT0FBSSxDQUFDLGFBQ0gsT0FBTSxJQUFJLE1BQ1IsNEVBQ0Q7QUFHSCxVQUFPO1dBQ0FBLE9BQWdCO0FBQ3ZCLGtCQUFPLFNBQVMsZ0RBQWdELE1BQU07R0FDdEUsTUFBTSxlQUFlLGlCQUFpQixRQUFRLE1BQU0sVUFBVTtBQUM5RCxTQUFNLElBQUksTUFBTSxvREFBb0QsZUFBZTs7O0NBSXZGLE1BQU0sZUFBZSxXQUE0RDtBQUMvRSxNQUFJO0dBQ0YsTUFBTSxTQUFTLE1BQU0sS0FBSyxvQkFBb0I7QUFHOUMsSUFEYyxhQUFhLGNBQWMsRUFDbkMsSUFBSSxZQUFZLE9BQU87V0FDdEIsT0FBTztBQUNkLGtCQUFPLFNBQVMsdURBQXVELE1BQU07QUFDN0UsU0FBTSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-hooks",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "description": "React hooks for connecting to Envive AI services.",
5
5
  "keywords": [
6
6
  "react",
@@ -39,6 +39,7 @@
39
39
  "dependencies": {
40
40
  "@amplitude/analytics-browser": "2.23.7",
41
41
  "@spiffy-ai/commerce-api-client": "1.1.0-SNAPSHOT.202601131458",
42
+ "@envive-ai/analytics": "1.0.28",
42
43
  "fuse.js": "^7.1.0",
43
44
  "jotai": "^2.14.0",
44
45
  "ua-parser-js": "^1.0.39",
@@ -114,6 +115,10 @@
114
115
  "import": "./dist/atoms/chat/chatState.js",
115
116
  "require": "./dist/atoms/chat/chatState.cjs"
116
117
  },
118
+ "./atoms/chat/replies": {
119
+ "import": "./dist/atoms/chat/replies.js",
120
+ "require": "./dist/atoms/chat/replies.cjs"
121
+ },
117
122
  "./atoms/globalSearch": {
118
123
  "import": "./dist/atoms/globalSearch/index.js",
119
124
  "require": "./dist/atoms/globalSearch/index.cjs"
@@ -190,10 +195,6 @@
190
195
  "import": "./dist/contexts/enviveCssContext/index.js",
191
196
  "require": "./dist/contexts/enviveCssContext/index.cjs"
192
197
  },
193
- "./contexts/featureFlagContext": {
194
- "import": "./dist/contexts/featureFlagContext/index.js",
195
- "require": "./dist/contexts/featureFlagContext/index.cjs"
196
- },
197
198
  "./contexts/featureFlagServiceContext": {
198
199
  "import": "./dist/contexts/featureFlagServiceContext/index.js",
199
200
  "require": "./dist/contexts/featureFlagServiceContext/index.cjs"
@@ -382,6 +383,10 @@
382
383
  "import": "./dist/interceptors/types.js",
383
384
  "require": "./dist/interceptors/types.cjs"
384
385
  },
386
+ "./mocks": {
387
+ "import": "./dist/mocks/index.js",
388
+ "require": "./dist/mocks/index.cjs"
389
+ },
385
390
  "./services/amplitudeService": {
386
391
  "import": "./dist/services/amplitudeService/index.js",
387
392
  "require": "./dist/services/amplitudeService/index.cjs"
@@ -390,6 +395,10 @@
390
395
  "import": "./dist/services/enviveConfigService/index.js",
391
396
  "require": "./dist/services/enviveConfigService/index.cjs"
392
397
  },
398
+ "./services/userIdentityService": {
399
+ "import": "./dist/services/userIdentityService/index.js",
400
+ "require": "./dist/services/userIdentityService/index.cjs"
401
+ },
393
402
  "./types": {
394
403
  "import": "./dist/types/index.js",
395
404
  "require": "./dist/types/index.cjs"
@@ -490,6 +499,10 @@
490
499
  "import": "./dist/interceptors/index.js",
491
500
  "require": "./dist/interceptors/index.cjs"
492
501
  },
502
+ "./mocks": {
503
+ "import": "./dist/mocks/index.js",
504
+ "require": "./dist/mocks/index.cjs"
505
+ },
493
506
  "./types": {
494
507
  "import": "./dist/types/index.js",
495
508
  "require": "./dist/types/index.cjs"
@@ -15,4 +15,6 @@ export enum ChatElementDisplayLocationV3 {
15
15
  FLOATING_BUTTON = 'floating_button',
16
16
  FLOATING_CHAT_OVERLAY = 'floating_chat_overlay',
17
17
  FLOATING_CHAT_CLOSE_BUTTON = 'floating_chat_close_button',
18
+ PRODUCT_CARD_PROMPT_BUTTON = 'product_card_prompt_button',
19
+ PRODUCT_CARD_TEXT_FIELD = 'product_card_text_field',
18
20
  }
@@ -6,5 +6,5 @@ export interface FrontendConfigV3 {
6
6
  pageVariants?: PageVariantConfig[];
7
7
  mountingConfigs?: Record<string, WidgetMountingConfig>;
8
8
  widgetConfigs?: Record<string, WidgetConfigV3>;
9
- uiConfigs?: Omit<OrgUIConfigV3, 'merchantOverrideCss'>;
9
+ uiConfigs?: OrgUIConfigV3;
10
10
  }
@@ -19,16 +19,16 @@ export const coreWidgetTypeToApiWidgetType = (coreWidgetType: WidgetTypeV3): Wid
19
19
  case WidgetTypeV3.TitledPromptCarouselV3:
20
20
  return WidgetType.TitledPromptCarouselV3;
21
21
  case WidgetTypeV3.ImagePromptCardV3:
22
+ case WidgetTypeV3.ProductCardV3:
22
23
  return WidgetType.ImagePromptCardV3;
23
24
  case WidgetTypeV3.ImageBannerV3:
24
25
  return WidgetType.ImageBannerV3;
25
26
  case WidgetTypeV3.SingleImagePromptV3:
26
27
  return WidgetType.SingleImagePromptV3;
27
- // TODO: Add support for these widget types
28
- // case WidgetTypeV3.ChatPreviewComparisonV3:
29
- // return WidgetType.ChatPreviewComparisonV3;
30
- // case WidgetTypeV3.ChatPreviewLoadingV3:
31
- // return WidgetType.ChatPreviewLoadingV3;
28
+ case WidgetTypeV3.FloatingChatV3:
29
+ return WidgetType.FloatingChatV3;
30
+ case WidgetTypeV3.FloatingButtonV3:
31
+ return WidgetType.FloatingButtonV3;
32
32
  default:
33
33
  throw new Error(`Unsupported widget type: ${coreWidgetType}`);
34
34
  }
@@ -26,21 +26,23 @@ export {
26
26
  supportedEventAtom,
27
27
  } from './variant';
28
28
 
29
+ // Internal storage for the user ID
30
+ // Caches the result from UserIdentityService
29
31
  const internalUserIdAtom = atom<string | undefined>(undefined);
30
32
 
33
+ // Main user ID atom
34
+ // Reads from cache or calls UserIdentityService
31
35
  export const userIdAtom = atom(
32
36
  get => {
33
- const maybeUserId = get(internalUserIdAtom);
37
+ const cachedUserId = get(internalUserIdAtom);
34
38
 
35
- if (maybeUserId) {
36
- return maybeUserId;
39
+ if (cachedUserId) {
40
+ return cachedUserId;
37
41
  }
38
42
 
39
- throw new Error(
40
- 'userIdAtom is not set. Ensure that all use of userIdAtom is under UserIdentityProvider',
41
- );
43
+ throw new Error('UserId is referenced before it is set - call initializeUser() first');
42
44
  },
43
- (_, set, value: string | undefined) => {
45
+ (_, set, value: string) => {
44
46
  set(internalUserIdAtom, value);
45
47
  },
46
48
  );
@@ -0,0 +1,56 @@
1
+ import { atom } from 'jotai';
2
+ import { Message, MessageType } from 'src/application/models';
3
+ import {
4
+ messagesAtom,
5
+ replyEventCategoryAtom,
6
+ userHasRepliedAtom,
7
+ userQueryAtom,
8
+ } from 'src/atoms/chat';
9
+ import { UserEventCategory } from '@spiffy-ai/commerce-api-client';
10
+ import { SpiffyMetricsEventName } from 'src/contexts/amplitudeContext/amplitudeContext';
11
+ import { amplitudeTrackEventAtom } from 'src/atoms/amplitude/amplitudeTrackEventAtom';
12
+ import { queueUserEventAtom } from './messageQueue';
13
+
14
+ type HandleReplyParams = {
15
+ message: Message;
16
+ userTyped: boolean;
17
+ };
18
+
19
+ export const handleReplyAtom = atom(null, (get, set, { message, userTyped }: HandleReplyParams) => {
20
+ if (message.type !== MessageType.QueryTyped) {
21
+ return;
22
+ }
23
+
24
+ const trackEvent = get(amplitudeTrackEventAtom);
25
+ const queryTyped = message.metadata.content;
26
+
27
+ set(replyEventCategoryAtom, UserEventCategory.QueryTyped);
28
+ set(userQueryAtom, queryTyped);
29
+ set(messagesAtom, [...get(messagesAtom), [message]]);
30
+ set(userHasRepliedAtom, true);
31
+ set(queueUserEventAtom, {
32
+ eventId: message.id,
33
+ createdAt: message.createdAt,
34
+ category: UserEventCategory.QueryTyped,
35
+ attributes: {
36
+ query: queryTyped,
37
+ },
38
+ });
39
+
40
+ if (trackEvent) {
41
+ trackEvent({
42
+ eventName: SpiffyMetricsEventName.ChatUserMessageInput,
43
+ eventProps: {
44
+ message_id: message.id,
45
+ message_role: message.role,
46
+ message_type: message.type,
47
+ message_metadata: {
48
+ content: message?.metadata?.content, // Removed amplitudeSafeString
49
+ created_at: message.createdAt,
50
+ user_typed: userTyped,
51
+ },
52
+ },
53
+ alsoSendToGoogleAnalytics: true,
54
+ });
55
+ }
56
+ });