@envive-ai/react-hooks 0.3.8 → 0.3.10
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.
- package/dist/_virtual/rolldown_runtime.cjs +0 -2
- package/dist/application/commerce-api.cjs +1 -1
- package/dist/application/commerce-api.js +1 -1
- package/dist/application/models/chatElementDisplayLocationV3.cjs +3 -1
- package/dist/application/models/chatElementDisplayLocationV3.d.cts +3 -1
- package/dist/application/models/chatElementDisplayLocationV3.d.ts +3 -1
- package/dist/application/models/chatElementDisplayLocationV3.js +3 -1
- package/dist/application/models/variantInfo/variantInfo.cjs +2 -2
- package/dist/application/models/variantInfo/variantInfo.d.cts +2 -2
- package/dist/application/models/variantInfo/variantInfo.d.ts +2 -2
- package/dist/application/models/variantInfo/variantInfo.js +2 -2
- package/dist/application/utils/widgetTextRequestToApiRequest.cjs +2 -1
- package/dist/application/utils/widgetTextRequestToApiRequest.js +2 -1
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/app/variant.d.cts +6 -6
- package/dist/atoms/app/variant.d.ts +6 -6
- package/dist/atoms/chat/chatState.d.cts +17 -17
- package/dist/atoms/chat/chatState.d.ts +18 -18
- package/dist/atoms/chat/form.d.cts +2 -2
- package/dist/atoms/chat/form.d.ts +2 -2
- package/dist/atoms/chat/index.cjs +7 -1
- package/dist/atoms/chat/index.d.cts +5 -4
- package/dist/atoms/chat/index.d.ts +5 -4
- package/dist/atoms/chat/index.js +3 -2
- package/dist/atoms/chat/lastMessage.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.ts +2 -2
- package/dist/atoms/chat/messageQueue.cjs +1 -0
- package/dist/atoms/chat/messageQueue.d.cts +31 -0
- package/dist/atoms/chat/messageQueue.d.ts +31 -0
- package/dist/atoms/chat/messageQueue.js +1 -1
- package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
- package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
- package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
- package/dist/atoms/chat/replies.d.cts +2 -2
- package/dist/atoms/chat/replies.d.ts +3 -3
- package/dist/atoms/chat/suggestions.d.cts +2 -2
- package/dist/atoms/chat/suggestions.d.ts +2 -2
- package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
- package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
- package/dist/atoms/org/customerService.d.cts +6 -6
- package/dist/atoms/org/customerService.d.ts +6 -6
- package/dist/atoms/org/graphqlConfig.d.cts +4 -4
- package/dist/atoms/org/graphqlConfig.d.ts +4 -4
- package/dist/atoms/org/index.cjs +2 -2
- package/dist/atoms/org/index.js +2 -2
- package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
- package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
- package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
- package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
- package/dist/atoms/search/chatSearch.cjs +1 -1
- package/dist/atoms/search/chatSearch.d.cts +17 -17
- package/dist/atoms/search/chatSearch.d.ts +17 -17
- package/dist/atoms/search/chatSearch.js +1 -1
- package/dist/atoms/search/searchAPI.cjs +1 -1
- package/dist/atoms/search/searchAPI.d.cts +13 -13
- package/dist/atoms/search/searchAPI.d.ts +13 -13
- package/dist/atoms/search/searchAPI.js +1 -1
- package/dist/atoms/search/types.d.ts +1 -1
- package/dist/atoms/search/utils.d.cts +1 -1
- package/dist/atoms/search/utils.d.ts +1 -1
- package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/contexts/enviveContext/WindowChatToggleBinder.cjs +66 -0
- package/dist/contexts/enviveContext/WindowChatToggleBinder.js +65 -0
- package/dist/contexts/enviveContext/enviveContext.cjs +5 -4
- package/dist/contexts/enviveContext/enviveContext.js +6 -5
- package/dist/contexts/enviveContext/types.d.cts +1 -1
- package/dist/contexts/enviveContext/types.d.ts +1 -1
- package/dist/contexts/graphqlContext/graphqlContext.cjs +6 -7
- package/dist/contexts/graphqlContext/graphqlContext.js +2 -3
- package/dist/contexts/graphqlContext/mockV3Config.cjs +57 -61
- package/dist/contexts/graphqlContext/mockV3Config.js +14 -19
- package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +1 -1
- package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +1 -1
- package/dist/contexts/pageContext/mapping.cjs +9 -1
- package/dist/contexts/pageContext/mapping.js +9 -1
- package/dist/contexts/pageContext/pageContext.cjs +8 -3
- package/dist/contexts/pageContext/pageContext.d.cts +2 -1
- package/dist/contexts/pageContext/pageContext.d.ts +2 -1
- package/dist/contexts/pageContext/pageContext.js +8 -3
- package/dist/contexts/pageContext/types.d.cts +11 -3
- package/dist/contexts/pageContext/types.d.ts +11 -3
- package/dist/contexts/salesAgentContext/chatAPI.cjs +13 -5
- package/dist/contexts/salesAgentContext/chatAPI.d.cts +4 -3
- package/dist/contexts/salesAgentContext/chatAPI.d.ts +4 -3
- package/dist/contexts/salesAgentContext/chatAPI.js +13 -5
- package/dist/contexts/salesAgentContext/salesAgentContext.cjs +7 -3
- package/dist/contexts/salesAgentContext/salesAgentContext.js +8 -4
- package/dist/contexts/salesAgentContext/salesAgentService.cjs +1 -1
- package/dist/contexts/salesAgentContext/salesAgentService.js +1 -1
- package/dist/contexts/searchContext/searchContext.cjs +1 -1
- package/dist/contexts/searchContext/searchContext.js +1 -1
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
- package/dist/contexts/types.d.cts +1 -1
- package/dist/contexts/types.d.ts +1 -1
- package/dist/contexts/typesV3.cjs +1 -1
- package/dist/contexts/typesV3.d.cts +9 -4
- package/dist/contexts/typesV3.d.ts +11 -6
- package/dist/contexts/typesV3.js +1 -1
- package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +2 -1
- package/dist/contexts/widgetConfigContext/widgetConfigContext.js +2 -1
- package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
- package/dist/hooks/Search/useSearch.cjs +2 -2
- package/dist/hooks/Search/useSearch.js +2 -2
- package/dist/hooks/Search/useSearchInput.cjs +1 -1
- package/dist/hooks/Search/useSearchInput.js +1 -1
- package/dist/hooks/utils.d.cts +1 -1
- package/dist/services/amplitudeService/amplitudeService.cjs +41 -1
- package/dist/services/amplitudeService/amplitudeService.d.cts +2 -1
- package/dist/services/amplitudeService/amplitudeService.d.ts +2 -1
- package/dist/services/amplitudeService/amplitudeService.js +41 -1
- package/package.json +1 -1
- package/src/application/models/chatElementDisplayLocationV3.ts +2 -0
- package/src/application/models/variantInfo/variantInfo.ts +1 -1
- package/src/application/utils/widgetTextRequestToApiRequest.ts +2 -0
- package/src/atoms/chat/index.ts +1 -0
- package/src/contexts/enviveContext/WindowChatToggleBinder.tsx +66 -0
- package/src/contexts/enviveContext/enviveContext.tsx +3 -1
- package/src/contexts/graphqlContext/mockV3Config.ts +4 -0
- package/src/contexts/pageContext/mapping.ts +16 -1
- package/src/contexts/pageContext/pageContext.tsx +12 -3
- package/src/contexts/pageContext/types.ts +16 -1
- package/src/contexts/salesAgentContext/chatAPI.ts +16 -4
- package/src/contexts/salesAgentContext/salesAgentContext.tsx +8 -3
- package/src/contexts/typesV3.ts +9 -2
- package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +4 -0
- package/src/services/amplitudeService/amplitudeService.ts +56 -0
- package/dist/_virtual/rolldown_runtime.js +0 -29
- package/dist/node_modules/classnames/index.cjs +0 -52
- package/dist/node_modules/classnames/index.js +0 -49
- package/dist/packages/components-v3/dist/ChatHeader/ChatHeader.cjs +0 -2
- package/dist/packages/components-v3/dist/ChatHeader/ChatHeader.js +0 -4
- package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.cjs +0 -16
- package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.js +0 -17
- package/dist/packages/components-v3/dist/ChatHeader/components/Handle.cjs +0 -6
- package/dist/packages/components-v3/dist/ChatHeader/components/Handle.js +0 -8
- package/dist/packages/components-v3/dist/ChatHeader/components/Layout.cjs +0 -4
- package/dist/packages/components-v3/dist/ChatHeader/components/Layout.js +0 -6
- package/dist/packages/components-v3/dist/ChatHeader/components/Logo.cjs +0 -3
- package/dist/packages/components-v3/dist/ChatHeader/components/Logo.js +0 -5
- package/dist/packages/components-v3/dist/ChatHeader/components/Toggle.cjs +0 -7
- package/dist/packages/components-v3/dist/ChatHeader/components/Toggle.js +0 -9
- package/dist/packages/components-v3/dist/ChatHeader/components/ToggleItem.cjs +0 -6
- package/dist/packages/components-v3/dist/ChatHeader/components/ToggleItem.js +0 -8
- package/dist/packages/components-v3/dist/ChatHeader/components/index.cjs +0 -6
- package/dist/packages/components-v3/dist/ChatHeader/components/index.js +0 -8
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.cjs +0 -22
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.js +0 -23
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.cjs +0 -58
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.js +0 -59
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.cjs +0 -8
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.js +0 -9
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleOptionProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleOptionProperties.js +0 -3
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.cjs +0 -12
- package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.js +0 -13
- package/dist/packages/components-v3/dist/ChatHeader/index.cjs +0 -2
- package/dist/packages/components-v3/dist/ChatHeader/index.js +0 -4
- package/dist/packages/components-v3/dist/ChatHeader/types/index.cjs +0 -11
- package/dist/packages/components-v3/dist/ChatHeader/types/index.js +0 -10
- package/dist/packages/components-v3/dist/ChatPreviewLoading/components/Skeleton.cjs +0 -1
- package/dist/packages/components-v3/dist/ChatPreviewLoading/components/Skeleton.js +0 -3
- package/dist/packages/components-v3/dist/Container/Container.cjs +0 -27
- package/dist/packages/components-v3/dist/Container/Container.js +0 -27
- package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.cjs +0 -14
- package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.js +0 -13
- package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.cjs +0 -14
- package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.js +0 -13
- package/dist/packages/components-v3/dist/Container/index.cjs +0 -1
- package/dist/packages/components-v3/dist/Container/index.js +0 -3
- package/dist/packages/components-v3/dist/DesignTokens/components/utils.cjs +0 -16
- package/dist/packages/components-v3/dist/DesignTokens/components/utils.js +0 -15
- package/dist/packages/components-v3/dist/FloatingButton/FloatingButton.cjs +0 -2
- package/dist/packages/components-v3/dist/FloatingButton/FloatingButton.js +0 -4
- package/dist/packages/components-v3/dist/FloatingButton/components/Button.cjs +0 -9
- package/dist/packages/components-v3/dist/FloatingButton/components/Button.js +0 -10
- package/dist/packages/components-v3/dist/FloatingButton/components/Container.cjs +0 -9
- package/dist/packages/components-v3/dist/FloatingButton/components/Container.js +0 -10
- package/dist/packages/components-v3/dist/FloatingButton/components/Icon.cjs +0 -3
- package/dist/packages/components-v3/dist/FloatingButton/components/Icon.js +0 -5
- package/dist/packages/components-v3/dist/FloatingButton/components/Wrapper.cjs +0 -9
- package/dist/packages/components-v3/dist/FloatingButton/components/Wrapper.js +0 -10
- package/dist/packages/components-v3/dist/FloatingButton/components/index.cjs +0 -4
- package/dist/packages/components-v3/dist/FloatingButton/components/index.js +0 -6
- package/dist/packages/components-v3/dist/FloatingButton/index.cjs +0 -2
- package/dist/packages/components-v3/dist/FloatingButton/index.js +0 -4
- package/dist/packages/components-v3/dist/FloatingButton/types/types.cjs +0 -17
- package/dist/packages/components-v3/dist/FloatingButton/types/types.js +0 -16
- package/dist/packages/components-v3/dist/Image/Image.cjs +0 -16
- package/dist/packages/components-v3/dist/Image/Image.js +0 -17
- package/dist/packages/components-v3/dist/Image/hooks/useGetAccessibilityProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/Image/hooks/useGetAccessibilityProperties.js +0 -3
- package/dist/packages/components-v3/dist/Image/hooks/useGetAspectRatioProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/Image/hooks/useGetAspectRatioProperties.js +0 -3
- package/dist/packages/components-v3/dist/Image/hooks/useGetObjectFitProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/Image/hooks/useGetObjectFitProperties.js +0 -3
- package/dist/packages/components-v3/dist/Image/hooks/useGetRoundedProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/Image/hooks/useGetRoundedProperties.js +0 -3
- package/dist/packages/components-v3/dist/Image/hooks/useGetSkeletonProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/Image/hooks/useGetSkeletonProperties.js +0 -3
- package/dist/packages/components-v3/dist/Image/hooks/useGetWidthProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/Image/hooks/useGetWidthProperties.js +0 -3
- package/dist/packages/components-v3/dist/Image/hooks/useHandleImageLoading.cjs +0 -1
- package/dist/packages/components-v3/dist/Image/hooks/useHandleImageLoading.js +0 -3
- package/dist/packages/components-v3/dist/ImageGallery/ImageGallery.cjs +0 -2
- package/dist/packages/components-v3/dist/ImageGallery/ImageGallery.js +0 -4
- package/dist/packages/components-v3/dist/ImageGallery/components/ImageItem.cjs +0 -2
- package/dist/packages/components-v3/dist/ImageGallery/components/ImageItem.js +0 -4
- package/dist/packages/components-v3/dist/ImageGallery/components/Layout.cjs +0 -15
- package/dist/packages/components-v3/dist/ImageGallery/components/Layout.js +0 -16
- package/dist/packages/components-v3/dist/ImageGallery/components/NormalLayout.cjs +0 -4
- package/dist/packages/components-v3/dist/ImageGallery/components/NormalLayout.js +0 -4
- package/dist/packages/components-v3/dist/ImageGallery/components/OverlappedLayout.cjs +0 -1
- package/dist/packages/components-v3/dist/ImageGallery/components/OverlappedLayout.js +0 -3
- package/dist/packages/components-v3/dist/ImageGallery/components/index.cjs +0 -4
- package/dist/packages/components-v3/dist/ImageGallery/components/index.js +0 -6
- package/dist/packages/components-v3/dist/ImageGallery/hooks/useGetContainerProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/ImageGallery/hooks/useGetContainerProperties.js +0 -3
- package/dist/packages/components-v3/dist/ImageGallery/index.cjs +0 -2
- package/dist/packages/components-v3/dist/ImageGallery/index.js +0 -4
- package/dist/packages/components-v3/dist/ImageGallery/types/types.cjs +0 -13
- package/dist/packages/components-v3/dist/ImageGallery/types/types.js +0 -12
- package/dist/packages/components-v3/dist/PromptButton/PromptButton.cjs +0 -48
- package/dist/packages/components-v3/dist/PromptButton/PromptButton.js +0 -48
- package/dist/packages/components-v3/dist/PromptButton/components/Icon.cjs +0 -11
- package/dist/packages/components-v3/dist/PromptButton/components/Icon.js +0 -10
- package/dist/packages/components-v3/dist/PromptButton/components/Label.cjs +0 -20
- package/dist/packages/components-v3/dist/PromptButton/components/Label.js +0 -19
- package/dist/packages/components-v3/dist/PromptButton/components/Layout.cjs +0 -40
- package/dist/packages/components-v3/dist/PromptButton/components/Layout.js +0 -40
- package/dist/packages/components-v3/dist/PromptButton/components/Loading.cjs +0 -13
- package/dist/packages/components-v3/dist/PromptButton/components/Loading.js +0 -13
- package/dist/packages/components-v3/dist/PromptButton/components/index.cjs +0 -16
- package/dist/packages/components-v3/dist/PromptButton/components/index.js +0 -16
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBackgroundColorsProperties.cjs +0 -18
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBackgroundColorsProperties.js +0 -18
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.cjs +0 -13
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.js +0 -12
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBorderColorsProperties.cjs +0 -18
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBorderColorsProperties.js +0 -18
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetIconColorsProperties.cjs +0 -32
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetIconColorsProperties.js +0 -32
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.cjs +0 -16
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.js +0 -16
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetTextColorsProperties.cjs +0 -19
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetTextColorsProperties.js +0 -19
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetVariantColorsProperties.cjs +0 -29
- package/dist/packages/components-v3/dist/PromptButton/hooks/useGetVariantColorsProperties.js +0 -29
- package/dist/packages/components-v3/dist/PromptButton/index.cjs +0 -2
- package/dist/packages/components-v3/dist/PromptButton/index.js +0 -4
- package/dist/packages/components-v3/dist/PromptButton/types/index.cjs +0 -13
- package/dist/packages/components-v3/dist/PromptButton/types/index.js +0 -12
- package/dist/packages/components-v3/dist/PromptButton/utils/functions.cjs +0 -10
- package/dist/packages/components-v3/dist/PromptButton/utils/functions.js +0 -10
- package/dist/packages/components-v3/dist/PromptCarousel/PromptCarousel.cjs +0 -12
- package/dist/packages/components-v3/dist/PromptCarousel/PromptCarousel.js +0 -14
- package/dist/packages/components-v3/dist/PromptCarousel/components/BlockScrollContainer.cjs +0 -9
- package/dist/packages/components-v3/dist/PromptCarousel/components/BlockScrollContainer.js +0 -10
- package/dist/packages/components-v3/dist/PromptCarousel/components/ButtonContainerRow.cjs +0 -11
- package/dist/packages/components-v3/dist/PromptCarousel/components/ButtonContainerRow.js +0 -12
- package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithBlockScroll.cjs +0 -4
- package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithBlockScroll.js +0 -6
- package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithRowScroll.cjs +0 -4
- package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithRowScroll.js +0 -6
- package/dist/packages/components-v3/dist/PromptCarousel/components/index.cjs +0 -3
- package/dist/packages/components-v3/dist/PromptCarousel/components/index.js +0 -5
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/index.cjs +0 -5
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/index.js +0 -7
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useButtonScrollPosition.cjs +0 -1
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useButtonScrollPosition.js +0 -3
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselAnimation.cjs +0 -3
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselAnimation.js +0 -5
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselButtons.cjs +0 -1
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselButtons.js +0 -3
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.cjs +0 -1
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.js +0 -3
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.cjs +0 -1
- package/dist/packages/components-v3/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.js +0 -3
- package/dist/packages/components-v3/dist/PromptCarousel/index.cjs +0 -2
- package/dist/packages/components-v3/dist/PromptCarousel/index.js +0 -4
- package/dist/packages/components-v3/dist/PromptCarousel/types/types.cjs +0 -19
- package/dist/packages/components-v3/dist/PromptCarousel/types/types.js +0 -17
- package/dist/packages/components-v3/dist/SocialProof/SocialProof.cjs +0 -10
- package/dist/packages/components-v3/dist/SocialProof/SocialProof.js +0 -12
- package/dist/packages/components-v3/dist/SocialProof/components/Headline.cjs +0 -53
- package/dist/packages/components-v3/dist/SocialProof/components/Headline.js +0 -54
- package/dist/packages/components-v3/dist/SocialProof/components/ImageGallery.cjs +0 -5
- package/dist/packages/components-v3/dist/SocialProof/components/ImageGallery.js +0 -7
- package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourGrid.cjs +0 -6
- package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourGrid.js +0 -8
- package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourHorizontal.cjs +0 -16
- package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourHorizontal.js +0 -17
- package/dist/packages/components-v3/dist/SocialProof/components/LayoutSingle.cjs +0 -8
- package/dist/packages/components-v3/dist/SocialProof/components/LayoutSingle.js +0 -10
- package/dist/packages/components-v3/dist/SocialProof/components/Skeleton.cjs +0 -1
- package/dist/packages/components-v3/dist/SocialProof/components/Skeleton.js +0 -3
- package/dist/packages/components-v3/dist/SocialProof/components/Subheadline.cjs +0 -8
- package/dist/packages/components-v3/dist/SocialProof/components/Subheadline.js +0 -10
- package/dist/packages/components-v3/dist/SocialProof/components/Textfield.cjs +0 -3
- package/dist/packages/components-v3/dist/SocialProof/components/Textfield.js +0 -5
- package/dist/packages/components-v3/dist/SocialProof/components/index.cjs +0 -8
- package/dist/packages/components-v3/dist/SocialProof/components/index.js +0 -10
- package/dist/packages/components-v3/dist/SocialProof/hooks/index.cjs +0 -1
- package/dist/packages/components-v3/dist/SocialProof/hooks/index.js +0 -3
- package/dist/packages/components-v3/dist/SocialProof/hooks/useSocialProofCount.cjs +0 -1
- package/dist/packages/components-v3/dist/SocialProof/hooks/useSocialProofCount.js +0 -3
- package/dist/packages/components-v3/dist/SocialProof/index.cjs +0 -4
- package/dist/packages/components-v3/dist/SocialProof/index.js +0 -6
- package/dist/packages/components-v3/dist/SocialProof/types/types.cjs +0 -11
- package/dist/packages/components-v3/dist/SocialProof/types/types.js +0 -10
- package/dist/packages/components-v3/dist/SocialProof/utils/functions.cjs +0 -1
- package/dist/packages/components-v3/dist/SocialProof/utils/functions.js +0 -3
- package/dist/packages/components-v3/dist/Stack/Stack.cjs +0 -36
- package/dist/packages/components-v3/dist/Stack/Stack.js +0 -36
- package/dist/packages/components-v3/dist/Stack/hooks/useFormatStackChildren.cjs +0 -27
- package/dist/packages/components-v3/dist/Stack/hooks/useFormatStackChildren.js +0 -26
- package/dist/packages/components-v3/dist/Stack/hooks/useGetAlignProperties.cjs +0 -20
- package/dist/packages/components-v3/dist/Stack/hooks/useGetAlignProperties.js +0 -19
- package/dist/packages/components-v3/dist/Stack/hooks/useGetDirectionProperties.cjs +0 -19
- package/dist/packages/components-v3/dist/Stack/hooks/useGetDirectionProperties.js +0 -18
- package/dist/packages/components-v3/dist/Stack/hooks/useGetGapProperties.cjs +0 -16
- package/dist/packages/components-v3/dist/Stack/hooks/useGetGapProperties.js +0 -15
- package/dist/packages/components-v3/dist/Stack/hooks/useGetJustifyProperties.cjs +0 -21
- package/dist/packages/components-v3/dist/Stack/hooks/useGetJustifyProperties.js +0 -20
- package/dist/packages/components-v3/dist/Stack/hooks/useGetStyleProperties.cjs +0 -38
- package/dist/packages/components-v3/dist/Stack/hooks/useGetStyleProperties.js +0 -38
- package/dist/packages/components-v3/dist/Stack/hooks/useGetWrapProperties.cjs +0 -13
- package/dist/packages/components-v3/dist/Stack/hooks/useGetWrapProperties.js +0 -12
- package/dist/packages/components-v3/dist/Stack/index.cjs +0 -1
- package/dist/packages/components-v3/dist/Stack/index.js +0 -3
- package/dist/packages/components-v3/dist/Stack/utils/constants.cjs +0 -42
- package/dist/packages/components-v3/dist/Stack/utils/constants.js +0 -41
- package/dist/packages/components-v3/dist/Title/Title.cjs +0 -11
- package/dist/packages/components-v3/dist/Title/Title.js +0 -12
- package/dist/packages/components-v3/dist/Title/components/Image.cjs +0 -2
- package/dist/packages/components-v3/dist/Title/components/Image.js +0 -4
- package/dist/packages/components-v3/dist/Title/components/Label.cjs +0 -3
- package/dist/packages/components-v3/dist/Title/components/Label.js +0 -5
- package/dist/packages/components-v3/dist/Title/components/Layout.cjs +0 -11
- package/dist/packages/components-v3/dist/Title/components/Layout.js +0 -12
- package/dist/packages/components-v3/dist/Title/components/index.cjs +0 -3
- package/dist/packages/components-v3/dist/Title/components/index.js +0 -5
- package/dist/packages/components-v3/dist/Title/index.cjs +0 -1
- package/dist/packages/components-v3/dist/Title/index.js +0 -3
- package/dist/packages/components-v3/dist/Tokens/index.cjs +0 -11
- package/dist/packages/components-v3/dist/Tokens/index.js +0 -13
- package/dist/packages/components-v3/dist/Typography/Typography.cjs +0 -43
- package/dist/packages/components-v3/dist/Typography/Typography.js +0 -43
- package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.cjs +0 -31
- package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.js +0 -30
- package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.cjs +0 -20
- package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.js +0 -19
- package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.cjs +0 -21
- package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.js +0 -20
- package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.cjs +0 -13
- package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.js +0 -12
- package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.cjs +0 -22
- package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.js +0 -21
- package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.cjs +0 -62
- package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.js +0 -61
- package/dist/packages/components-v3/dist/Typography/index.cjs +0 -2
- package/dist/packages/components-v3/dist/Typography/index.js +0 -4
- package/dist/packages/components-v3/dist/Typography/types/index.cjs +0 -47
- package/dist/packages/components-v3/dist/Typography/types/index.js +0 -44
- package/dist/packages/components-v3/dist/Typography/utils/utils.cjs +0 -12
- package/dist/packages/components-v3/dist/Typography/utils/utils.js +0 -10
- package/dist/packages/components-v3/dist/WelcomeMessage/WelcomeMessage.cjs +0 -2
- package/dist/packages/components-v3/dist/WelcomeMessage/WelcomeMessage.js +0 -4
- package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.cjs +0 -14
- package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.js +0 -15
- package/dist/packages/components-v3/dist/WelcomeMessage/components/SparkleIcon.cjs +0 -3
- package/dist/packages/components-v3/dist/WelcomeMessage/components/SparkleIcon.js +0 -5
- package/dist/packages/components-v3/dist/WelcomeMessage/components/Text.cjs +0 -3
- package/dist/packages/components-v3/dist/WelcomeMessage/components/Text.js +0 -5
- package/dist/packages/components-v3/dist/WelcomeMessage/components/Title.cjs +0 -3
- package/dist/packages/components-v3/dist/WelcomeMessage/components/Title.js +0 -5
- package/dist/packages/components-v3/dist/WelcomeMessage/components/index.cjs +0 -4
- package/dist/packages/components-v3/dist/WelcomeMessage/components/index.js +0 -6
- package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetContainerProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetContainerProperties.js +0 -3
- package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetSparkleIconProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetSparkleIconProperties.js +0 -3
- package/dist/packages/components-v3/dist/WelcomeMessage/index.cjs +0 -2
- package/dist/packages/components-v3/dist/WelcomeMessage/index.js +0 -4
- package/dist/packages/components-v3/dist/WelcomeMessage/types/types.cjs +0 -14
- package/dist/packages/components-v3/dist/WelcomeMessage/types/types.js +0 -14
- package/dist/packages/components-v3/dist/WidgetTextField/WidgetTextField.cjs +0 -2
- package/dist/packages/components-v3/dist/WidgetTextField/WidgetTextField.js +0 -4
- package/dist/packages/components-v3/dist/WidgetTextField/components/Container.cjs +0 -14
- package/dist/packages/components-v3/dist/WidgetTextField/components/Container.js +0 -15
- package/dist/packages/components-v3/dist/WidgetTextField/components/FakeTextInput.cjs +0 -3
- package/dist/packages/components-v3/dist/WidgetTextField/components/FakeTextInput.js +0 -5
- package/dist/packages/components-v3/dist/WidgetTextField/components/Icon.cjs +0 -7
- package/dist/packages/components-v3/dist/WidgetTextField/components/Icon.js +0 -9
- package/dist/packages/components-v3/dist/WidgetTextField/components/Skeleton.cjs +0 -10
- package/dist/packages/components-v3/dist/WidgetTextField/components/Skeleton.js +0 -11
- package/dist/packages/components-v3/dist/WidgetTextField/components/index.cjs +0 -4
- package/dist/packages/components-v3/dist/WidgetTextField/components/index.js +0 -6
- package/dist/packages/components-v3/dist/WidgetTextField/hooks/useGetContainerProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/WidgetTextField/hooks/useGetContainerProperties.js +0 -3
- package/dist/packages/components-v3/dist/WidgetTextField/index.cjs +0 -1
- package/dist/packages/components-v3/dist/WidgetTextField/index.js +0 -3
- package/dist/packages/components-v3/dist/WidgetWrapper/WidgetWrapper.cjs +0 -12
- package/dist/packages/components-v3/dist/WidgetWrapper/WidgetWrapper.js +0 -13
- package/dist/packages/components-v3/dist/WidgetWrapper/hooks/useGetWrapperProperties.cjs +0 -1
- package/dist/packages/components-v3/dist/WidgetWrapper/hooks/useGetWrapperProperties.js +0 -3
- package/dist/packages/components-v3/dist/WidgetWrapper/index.cjs +0 -2
- package/dist/packages/components-v3/dist/WidgetWrapper/index.js +0 -4
- package/dist/packages/components-v3/dist/WidgetWrapper/types/types.cjs +0 -13
- package/dist/packages/components-v3/dist/WidgetWrapper/types/types.js +0 -12
- package/dist/packages/components-v3/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.cjs +0 -8
- package/dist/packages/components-v3/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.js +0 -10
- package/dist/packages/components-v3/dist/packages/components-v3/src/models/colorsConfig.cjs +0 -26
- package/dist/packages/components-v3/dist/packages/components-v3/src/models/colorsConfig.js +0 -25
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/aspectRatio/aspectRatio.cjs +0 -16
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/aspectRatio/aspectRatio.js +0 -17
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.cjs +0 -25
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.js +0 -23
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/colors/colors.cjs +0 -51
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/colors/colors.js +0 -51
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/radius/radius.cjs +0 -64
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/radius/radius.js +0 -65
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/theme/theme.cjs +0 -18
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/theme/theme.js +0 -16
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontFamily.cjs +0 -25
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontFamily.js +0 -25
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontSize.cjs +0 -37
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontSize.js +0 -38
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontWeight.cjs +0 -17
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontWeight.js +0 -18
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/letterSpacing.cjs +0 -15
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/letterSpacing.js +0 -16
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/lineHeight.cjs +0 -31
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/lineHeight.js +0 -32
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/typography.cjs +0 -5
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/typography.js +0 -7
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/utils.cjs +0 -7
- package/dist/packages/components-v3/dist/packages/components-v3/tokens/utils.js +0 -6
- package/dist/packages/components-v3/dist/utils/CustomIcon.cjs +0 -2
- package/dist/packages/components-v3/dist/utils/CustomIcon.js +0 -4
- package/dist/packages/components-v3/dist/utils/resolveTheme.cjs +0 -13
- package/dist/packages/components-v3/dist/utils/resolveTheme.js +0 -13
- package/dist/packages/components-v3/dist/utils/useCheckIsMobile.cjs +0 -1
- package/dist/packages/components-v3/dist/utils/useCheckIsMobile.js +0 -3
- package/dist/packages/components-v3/dist/utils/useGetContentSize.cjs +0 -1
- package/dist/packages/components-v3/dist/utils/useGetContentSize.js +0 -3
- package/dist/packages/components-v3/dist/utils/useResponsiveValue.cjs +0 -57
- package/dist/packages/components-v3/dist/utils/useResponsiveValue.js +0 -56
- package/dist/packages/icons/dist/FourPointStar.cjs +0 -23
- package/dist/packages/icons/dist/FourPointStar.js +0 -23
- package/dist/packages/icons/dist/IconCloseRounded.cjs +0 -22
- package/dist/packages/icons/dist/IconCloseRounded.js +0 -22
- package/dist/packages/icons/dist/IconCloseSharp.cjs +0 -31
- package/dist/packages/icons/dist/IconCloseSharp.js +0 -31
- package/dist/packages/icons/dist/IconCloseTransparent.cjs +0 -24
- package/dist/packages/icons/dist/IconCloseTransparent.js +0 -24
- package/dist/packages/icons/dist/MagnifyingGlass.cjs +0 -8
- package/dist/packages/icons/dist/MagnifyingGlass.js +0 -9
- package/dist/packages/icons/dist/MagnifyingThin.cjs +0 -8
- package/dist/packages/icons/dist/MagnifyingThin.js +0 -9
- package/dist/packages/icons/dist/SendMinimalist.cjs +0 -8
- package/dist/packages/icons/dist/SendMinimalist.js +0 -9
- package/dist/packages/icons/dist/SendModern.cjs +0 -8
- package/dist/packages/icons/dist/SendModern.js +0 -9
- package/dist/packages/icons/dist/SendStandard.cjs +0 -8
- package/dist/packages/icons/dist/SendStandard.js +0 -9
- package/dist/packages/icons/dist/Sparkles.cjs +0 -8
- package/dist/packages/icons/dist/Sparkles.js +0 -9
- package/dist/packages/icons/dist/_virtual/rolldown_runtime.cjs +0 -28
- package/dist/packages/icons/dist/_virtual/rolldown_runtime.js +0 -26
- package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs +0 -697
- package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.development.js +0 -697
- package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.production.min.cjs +0 -44
- package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js +0 -44
- package/dist/packages/icons/dist/node_modules/react/cjs/react.development.cjs +0 -1529
- package/dist/packages/icons/dist/node_modules/react/cjs/react.development.js +0 -1529
- package/dist/packages/icons/dist/node_modules/react/cjs/react.production.min.cjs +0 -330
- package/dist/packages/icons/dist/node_modules/react/cjs/react.production.min.js +0 -330
- package/dist/packages/icons/dist/node_modules/react/index.cjs +0 -14
- package/dist/packages/icons/dist/node_modules/react/index.js +0 -14
- package/dist/packages/icons/dist/node_modules/react/jsx-runtime.cjs +0 -14
- package/dist/packages/icons/dist/node_modules/react/jsx-runtime.js +0 -14
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { WidgetTypeV3 } from "../../contexts/typesV3.js";
|
|
2
2
|
import { SpiffyEvent } from "../../events/event-types.js";
|
|
3
3
|
import { EventsDispatcher } from "../../events/index.js";
|
|
4
|
+
import { ChatElementDisplayLocationV3 } from "../../application/models/chatElementDisplayLocationV3.js";
|
|
4
5
|
import logger_default from "../../application/logging/logger.js";
|
|
5
6
|
import { LocalStorageKeys } from "../../contexts/localStorageContext/localStorageContext.js";
|
|
6
7
|
import "../../contexts/localStorageContext/index.js";
|
|
@@ -160,14 +161,53 @@ var AmplitudeService = class AmplitudeService {
|
|
|
160
161
|
case WidgetTypeV3.SocialProofV3: return "embedded_widget";
|
|
161
162
|
case WidgetTypeV3.TitledPromptCarouselV3:
|
|
162
163
|
case WidgetTypeV3.PromptCarouselV3: return "suggestion_bar";
|
|
164
|
+
case WidgetTypeV3.ProductCardV3: return "image_prompt_card";
|
|
163
165
|
default: return "unknown";
|
|
164
166
|
}
|
|
165
167
|
}
|
|
168
|
+
static mapTriggerLocationToChatComponent(triggerLocation) {
|
|
169
|
+
switch (triggerLocation) {
|
|
170
|
+
case ChatElementDisplayLocationV3.PRODUCT_CARD_PROMPT_BUTTON:
|
|
171
|
+
case ChatElementDisplayLocationV3.PRODUCT_CARD_TEXT_FIELD: return "prompt_card";
|
|
172
|
+
case ChatElementDisplayLocationV3.PROMPT_CAROUSEL:
|
|
173
|
+
case ChatElementDisplayLocationV3.TITLED_PROMPT_CAROUSEL: return "top_reviews_snippet";
|
|
174
|
+
case ChatElementDisplayLocationV3.TYPING_ANIMATION:
|
|
175
|
+
case ChatElementDisplayLocationV3.SOCIAL_PROOF_PRIMARY_BUTTON:
|
|
176
|
+
case ChatElementDisplayLocationV3.SOCIAL_PROOF_SECONDARY_BUTTON:
|
|
177
|
+
case ChatElementDisplayLocationV3.SOCIAL_PROOF_TEXT_FIELD:
|
|
178
|
+
case ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_PROMPT_BUTTON:
|
|
179
|
+
case ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_TEXT_FIELD:
|
|
180
|
+
case ChatElementDisplayLocationV3.CHAT_PREVIEW_PROMPT_BUTTON:
|
|
181
|
+
case ChatElementDisplayLocationV3.CHAT_PREVIEW_TEXT_FIELD: return "chat_preview";
|
|
182
|
+
case ChatElementDisplayLocationV3.FLOATING_CHAT_OVERLAY:
|
|
183
|
+
case ChatElementDisplayLocationV3.FLOATING_CHAT_CLOSE_BUTTON: return "in_chat";
|
|
184
|
+
default: return triggerLocation;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
166
187
|
static mapEventProps({ eventName, eventProps }) {
|
|
188
|
+
const messageMetadata = eventProps?.message_metadata ?? {};
|
|
189
|
+
const triggerLocation = messageMetadata !== null && typeof messageMetadata === "object" && "trigger_location" in messageMetadata ? messageMetadata.trigger_location : void 0;
|
|
190
|
+
if (eventName === SpiffyMetricsEventName.ChatComponentExpanded) {
|
|
191
|
+
const mappedTriggerLoccation = AmplitudeService.mapTriggerLocationToChatComponent(triggerLocation);
|
|
192
|
+
return {
|
|
193
|
+
...eventProps,
|
|
194
|
+
message_metadata: {
|
|
195
|
+
...messageMetadata,
|
|
196
|
+
trigger_location: mappedTriggerLoccation,
|
|
197
|
+
full_trigger_location: triggerLocation
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
}
|
|
167
201
|
if (eventName === SpiffyMetricsEventName.ChatComponentVisible) {
|
|
168
202
|
const mappedWidgetType = AmplitudeService.mapWidgetTypeToChatComponent(eventProps?.widget_type);
|
|
203
|
+
const mappedTriggerLoccation = AmplitudeService.mapTriggerLocationToChatComponent(triggerLocation);
|
|
169
204
|
return {
|
|
170
205
|
...eventProps,
|
|
206
|
+
message_metadata: {
|
|
207
|
+
...messageMetadata,
|
|
208
|
+
trigger_location: mappedTriggerLoccation,
|
|
209
|
+
full_trigger_location: triggerLocation
|
|
210
|
+
},
|
|
171
211
|
chat_component: mappedWidgetType,
|
|
172
212
|
"chat.component_visible": true
|
|
173
213
|
};
|
|
@@ -227,4 +267,4 @@ var AmplitudeService = class AmplitudeService {
|
|
|
227
267
|
|
|
228
268
|
//#endregion
|
|
229
269
|
export { AmplitudeService, SpiffyMetricsEventName };
|
|
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/IHRoaXMuZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKGV2ZW50TmFtZSwgbWFwcGVkRXZlbnRQcm9wcylcbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZXZlbnRHcm91cHMsXG4gICAgICAgICAgaW5zZXJ0X2lkOiBjdXJyZW50SW5zZXJ0SWQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyAmJiB0aGlzLmNvbmZpZy5vcmdHYUNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBBZGQgaW4gd2luZG93RGF0YUxheWVyU2VydmljZSBvciBjb250ZXh0IGFsdGVybmF0aXZlIGFuZCBob29rIGl0IHVwIGhlcmVcbiAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBHQSB0cmFja2luZycsIGRlY29yYXRlZEV2ZW50TmFtZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAod2luZG93LmRhdGFMYXllciBhcyBhbnlbXSkucHVzaCh7XG4gICAgICAgICAgICBldmVudDogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdbc3BpZmZ5LWFpXSBFcnJvciB0cmFja2luZyBldmVudCcsIGVyciwge1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgdGhhdCBzdXBwbGVtZW50YWwgZGVmYXVsdCBwcm9wcyBhcmUgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHByb3BzXG4gIHNldFN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyA9IHByb3BzO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWFBLElBQVksNEVBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUF5QkYsSUFBYSxtQkFBYixNQUFhLGlCQUFpQjtDQVM1QixZQUFZLFFBQWdDO2tDQUpnQixFQUFFO0FBSzVELE9BQUssU0FBUztBQUNkLE9BQUssWUFBWTs7Q0FHbkIsSUFBSSxVQUFtQjtBQUNyQixTQUFPLFFBQ0wsS0FBSyxPQUFPLFVBQ1osS0FBSyxPQUFPLHNCQUNaLEtBQUssT0FBTyxtQkFDWixLQUFLLGdCQUNOOztDQUdILEFBQVEsb0JBQW9CLEtBQTRCO0FBQ3RELE1BQUksS0FBSyxPQUFPLG9CQUNkLFFBQU8sS0FBSyxPQUFPLG9CQUFvQixJQUFJO0FBRTdDLE1BQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxhQUMxQyxRQUFPLE9BQU8sYUFBYSxRQUFRLElBQUk7QUFFekMsU0FBTzs7Q0FHVCxBQUFRLDBCQUFtRDtFQUN6RCxNQUFNLGVBQWUsT0FBTyxRQUFRLEtBQUssT0FBTyxtQkFBbUIsaUJBQWlCLENBQUM7RUFDckYsTUFBTSxhQUNKLGFBQWEsU0FBUyxJQUNsQixhQUFhLFFBQWlDLEtBQUssQ0FBQyxNQUFNLFdBQVc7QUFDbkUsT0FBSSxRQUFRLFNBQVMsS0FDbkIsUUFBTztJQUFFLEdBQUc7S0FBTSxnQkFBZ0IsU0FBUztJQUFPO0FBRXBELFVBQU87S0FDTixFQUFFLENBQUMsR0FDTixFQUFFO0VBQ1IsTUFBTSxrQkFBa0IsRUFBRTtBQU8xQixTQUFPO0dBSkwsR0FBRztHQUNILEdBQUc7R0FLSCxHQUFHLEtBQUs7R0FHUixRQUFRO0dBQ1IsU0FBUyxLQUFLLG9CQUFvQixpQkFBaUIsT0FBTztHQUMxRCxLQUFLLEtBQUssT0FBTyxPQUFPO0dBQ3hCLFlBQVksS0FBSyxPQUFPO0dBQ3hCLFFBQVEsS0FBSyxPQUFPO0dBQ3BCLGtCQUFrQixLQUFLLE9BQU87R0FDOUIsV0FBVyxLQUFLLE9BQU87R0FDdkIsZUFBZTtHQUNmLGdCQUFnQjtHQUNoQixnQkFBZ0I7R0FDaEIsY0FBYztHQUNkLFlBQVk7R0FDWixpQkFBaUI7R0FDakIsbUJBQW1CO0dBQ3BCOztDQUlILEFBQVEsK0JBQ04sV0FDQSxZQUN5QjtFQUN6QixNQUFNLFNBQVMsVUFBVSxhQUFhLENBQUMsUUFBUSxRQUFRLElBQUk7QUFDM0QsU0FBTyxPQUFPLFFBQVEsV0FBVyxDQUFDLFFBQy9CLEtBQUssQ0FBQyxLQUFLLFdBQVc7QUFDckIsT0FBSSxHQUFHLE9BQU8sR0FBRyxTQUFTO0FBQzFCLFVBQU87S0FFVCxFQUFFLENBQ0g7O0NBR0gsQUFBUSw2QkFBK0M7QUFDckQsTUFBSSxLQUFLLG9DQUFvQyxPQUMzQyxRQUFPLEtBQUs7RUFHZCxNQUFNQSxhQUErQjtHQUNuQyxNQUFNO0dBQ04sTUFBTTtHQUNOLE9BQU8sWUFBWTtHQUNuQixTQUFTLE9BQU8sVUFBaUM7SUFDL0MsSUFBSUM7QUFPSixRQUx1QixDQUNyQiwyQkFDQSxZQUFZLHVCQUF1QixlQUNwQyxDQUVrQixTQUFTLE1BQU0sV0FBVyxFQUFFO0tBQzdDLE1BQU1DLG1CQUEyQyxFQUFFO0FBRW5ELFNBQUksS0FBSyxPQUFPLFFBQVEsS0FDdEIsa0JBQWlCLDJCQUEyQixPQUFPLEtBQUssT0FBTyxLQUFLO0FBRXRFLHNCQUFpQiwwQkFBMEIsT0FBTyxLQUFLLE9BQU8sSUFBSTtLQUVsRSxNQUFNLDRCQUE0QixPQUFPLFFBQ3ZDLEtBQUssUUFBUSxtQkFBb0IsRUFBRSxDQUNwQyxDQUFDLFFBQ0MsS0FBSyxDQUFDLEtBQUssWUFBWTtNQUN0QixHQUFHO09BQ0YsbUJBQW1CLFFBQVEsR0FBRztNQUNoQyxHQUNELEVBQUUsQ0FDSDtLQUVELE1BQU0sbUJBQW1CLEVBQ3ZCLHlCQUNFLE9BQU8sV0FBVyxjQUFjLE9BQU8sYUFBYSxLQUFLLEdBQUcsUUFDL0Q7QUFFRCxxQkFBZ0I7TUFDZCxHQUFHO01BQ0gsa0JBQWtCO09BQ2hCLEdBQUcsTUFBTTtPQUNULEdBQUcsS0FBSyx5QkFBeUI7T0FDakMsR0FBRztPQUNILEdBQUc7T0FDSCxHQUFHO09BQ0o7TUFDRjtVQUVELGlCQUFnQjtBQUdsQixxQkFBaUIsU0FBUyxZQUFZLGlCQUFpQixjQUFjO0FBRXJFLFdBQU87O0dBRVY7QUFDRCxPQUFLLGtDQUFrQztBQUN2QyxTQUFPOztDQUdULEFBQVEsYUFBbUI7RUFDekIsTUFBTSxVQUFVLFFBQ2QsS0FBSyxPQUFPLFVBQVUsS0FBSyxPQUFPLHNCQUFzQixLQUFLLE9BQU8sZ0JBQ3JFO0FBRUQsTUFBSSxDQUFDLFNBQVM7QUFDWixrQkFBTyxTQUFTLGlDQUFpQztJQUMvQztJQUNBLFFBQVEsS0FBSyxPQUFPO0lBQ3BCLHVCQUF1QixDQUFDLENBQUMsS0FBSyxPQUFPO0lBQ3JDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxPQUFPO0lBQ25DLENBQUM7QUFDRjs7QUFHRixNQUFJLENBQUMsS0FBSyxpQkFBaUI7R0FDekIsTUFBTUMsMkJBQTBDLGdCQUFnQjtBQUVoRSw0QkFBeUIsSUFBSSxLQUFLLDRCQUE0QixDQUFDO0FBQy9ELDRCQUF5QixLQUFLLEtBQUssT0FBTyxpQkFBaUIsS0FBSyxPQUFPLFFBQVE7SUFDN0UsWUFBWSxLQUFLLE9BQU87SUFDeEIsaUJBQWlCLEVBQ2YsV0FBVyxNQUNaO0lBQ0QsYUFBYTtLQUNYLGFBQWE7S0FDYixXQUFXLEVBQ1QscUJBQXFCLFlBQ3RCO0tBQ0QsVUFBVTtLQUNWLGtCQUFrQjtLQUNsQixlQUFlO0tBQ2hCO0lBQ0YsQ0FBQztBQUNGLFFBQUssa0JBQWtCOzs7Q0FJM0IsT0FBTyw2QkFBNkIsWUFBNkI7QUFDL0QsVUFBUSxZQUFSO0dBQ0UsS0FBSyxhQUFhLGlCQUNoQixRQUFPO0dBQ1QsS0FBSyxhQUFhO0dBQ2xCLEtBQUssYUFBYSxjQUNoQixRQUFPO0dBQ1QsS0FBSyxhQUFhO0dBQ2xCLEtBQUssYUFBYSxpQkFDaEIsUUFBTztHQUNULFFBQ0UsUUFBTzs7O0NBS2IsT0FBTyxjQUFjLEVBQUUsV0FBVyxjQUF5RDtBQUN6RixNQUFJLGNBQWMsdUJBQXVCLHNCQUFzQjtHQUM3RCxNQUFNLG1CQUFtQixpQkFBaUIsNkJBQ3hDLFlBQVksWUFDYjtBQUNELFVBQU87SUFDTCxHQUFHO0lBQ0gsZ0JBQWdCO0lBQ2hCLDBCQUEwQjtJQUMzQjs7QUFFSCxTQUFPLGNBQWMsRUFBRTs7Q0FHekIsTUFBTSxXQUFXLEVBQ2YsV0FDQSxZQUNBLGFBQ0EsNEJBQTRCLFNBQ007QUFDbEMsaUJBQU8sU0FBUyxvQkFBb0IsVUFBVTtBQUM5QyxNQUFJO0dBQ0YsTUFBTSxxQkFBcUIsWUFBWTtBQUV2QyxPQUFJLENBQUMsS0FBSyxpQkFBaUI7QUFDekIsbUJBQU8sUUFBUSw4QkFBOEIsUUFBVyxFQUN0RCxZQUFZLG9CQUNiLENBQUM7QUFDRjs7R0FHRixNQUFNLG1CQUFtQixpQkFBaUIsY0FBYztJQUFFO0lBQVc7SUFBWSxDQUFDO0dBRWxGLE1BQU0sWUFBWSxLQUFLLFVBQVU7SUFDL0I7SUFDQSxZQUFZO0lBQ1osNkJBQVksSUFBSSxNQUFNLEVBQUMsYUFBYTtJQUNyQyxDQUFDO0dBRUYsTUFBTSxPQURVLElBQUksYUFBYSxDQUNaLE9BQU8sVUFBVTtHQUd0QyxNQUFNLGFBQWEsTUFBTSxPQUFPLE9BQU8sT0FBTyxXQUFXLEtBQUs7R0FFOUQsTUFBTSxrQkFEWSxNQUFNLEtBQUssSUFBSSxXQUFXLFdBQVcsQ0FBQyxDQUN0QixLQUFJLE1BQUssRUFBRSxTQUFTLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHO0FBRXBGLGtCQUFPLFNBQVMsc0JBQXNCLHNCQUFzQixNQUFNO0lBQ2hFLFlBQVk7SUFDWixPQUFPO0lBQ1IsQ0FBQztBQUVGLFFBQUssZ0JBQWdCLE1BQ25CLG9CQUNBO0lBQ0UsR0FBRyxLQUFLLHlCQUF5QjtJQUNqQyxHQUFHO0lBQ0gsR0FBSSxtQkFDQSxLQUFLLCtCQUErQixXQUFXLGlCQUFpQixHQUNoRSxFQUFFO0lBQ1AsRUFDRDtJQUNFLEdBQUc7SUFDSCxXQUFXO0lBQ1osQ0FDRjtBQUVELE9BQUksNkJBQTZCLEtBQUssT0FBTyxhQUFhO0FBRXhELG1CQUFPLFNBQVMsMkJBQTJCLG1CQUFtQjtBQUM5RCxRQUFJLE9BQU8sV0FBVyxlQUFlLE9BQU8sVUFFMUMsQ0FBQyxPQUFPLFVBQW9CLEtBQUs7S0FDL0IsT0FBTztLQUNQO0tBQ0QsQ0FBQzs7V0FHQyxLQUFLO0FBQ1osa0JBQU8sU0FBUyxvQ0FBb0MsS0FBSztJQUN2RDtJQUNBO0lBQ0QsQ0FBQzs7O0NBS04sNEJBQTRCLE9BQXNDO0FBQ2hFLE9BQUssMkJBQTJCIn0=
|
|
270
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbImVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4iLCJlbnJpY2hlZEV2ZW50OiBFdmVudCIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtYnJvd3Nlcic7XG5pbXBvcnQgeyBFdmVudHNEaXNwYXRjaGVyLCBTcGlmZnlFdmVudCB9IGZyb20gJ3NyYy9ldmVudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5cyB9IGZyb20gJ3NyYy9jb250ZXh0cy9sb2NhbFN0b3JhZ2VDb250ZXh0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB0eXBlIHtcbiAgQnJvd3NlckNsaWVudCxcbiAgRW5yaWNobWVudFBsdWdpbixcbiAgRXZlbnQsXG4gIFNlcnZlclpvbmVUeXBlLFxufSBmcm9tICdAYW1wbGl0dWRlL2FuYWx5dGljcy10eXBlcyc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCB7IFdpZGdldFR5cGVWMyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlc1YzJztcbmltcG9ydCB7IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMnO1xuXG5leHBvcnQgZW51bSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHtcbiAgQnVuZGxlTG9hZGVkID0gJ0J1bmRsZSBMb2FkZWQnLFxuICBFbnZpcm9ubWVudEluaXRpYWxpemVkID0gJ0Vudmlyb25tZW50IEluaXRpYWxpemVkJyxcbiAgQ2hhdExpdmVBZ2VudEJ0bkNsaWNrID0gJ0NoYXQgTGl2ZSBBZ2VudCBCdG4gQ2xpY2snLFxuICBDaGF0RmxvYXRpbmdCdXR0b25WaXNpYmxlID0gJ0NoYXQgRmxvYXRpbmcgQnV0dG9uIFZpc2libGUnLFxuICBDaGF0Q29tcG9uZW50VmlzaWJsZSA9ICdDaGF0IENvbXBvbmVudCBWaXNpYmxlJyxcbiAgQ2hhdENvbXBvbmVudEV4cGFuZGVkID0gJ0NoYXQgQ29tcG9uZW50IEV4cGFuZGVkJyxcbiAgQ2hhdENvbXBvbmVudENvbGxhcHNlZCA9ICdDaGF0IENvbXBvbmVudCBDb2xsYXBzZWQnLFxuICBDaGF0VXNlck1lc3NhZ2VJbnB1dCA9ICdDaGF0IFVzZXIgTWVzc2FnZSBJbnB1dCcsXG4gIENoYXRTdWdnZXN0aW9uQ2xpY2tlZCA9ICdDaGF0IFN1Z2dlc3Rpb24gQ2xpY2tlZCcsXG4gIENoYXRBc3Npc3RhbnRSZXNwb25zZSA9ICdDaGF0IEFzc2lzdGFudCBSZXNwb25zZScsXG4gIFByb2R1Y3RDYXJkQ2xpY2tlZCA9ICdQcm9kdWN0IENhcmQgQ2xpY2tlZCcsXG4gIFByb2R1Y3RSZXZpZXdDYXJkQ2xpY2tlZCA9ICdQcm9kdWN0IFJldmlldyBDYXJkIENsaWNrZWQnLFxuICBBZGRUb0NhcnRDbGlja2VkID0gJ0FkZCBUbyBDYXJ0IENsaWNrZWQnLFxuICBQcm9tcHRDYXJkQ2xpY2tlZCA9ICdQcm9tcHQgQ2FyZCBDbGlja2VkJyxcbiAgU3VwcG9ydGVkRXZlbnQgPSAnU3VwcG9ydGVkIEV2ZW50JyxcbiAgU2VhcmNoQmFja1RvUmVzcG9uc2VDbGlja2VkID0gJ1NlYXJjaCBCYWNrIHRvIFJlc3BvbnNlIENsaWNrZWQnLFxuICBQZXJmb3JtYW5jZU1ldHJpY3MgPSAnUGVyZm9ybWFuY2UgTWV0cmljcycsXG4gIFNlYXJjaEJhckNsaWNrZWQgPSAnU2VhcmNoIEJhciBDbGlja2VkJyxcbiAgT3JkZXJMb29rdXBTdGFydGVkID0gJ09yZGVyIExvb2t1cCBTdGFydGVkJyxcbiAgT3JkZXJMb29rdXBGb3JtU3VibWl0dGVkID0gJ09yZGVyIExvb2t1cCBGb3JtIFN1Ym1pdHRlZCcsXG4gIFNlYXJjaENvbXBvbmVudFZpc2libGUgPSAnU2VhcmNoIENvbXBvbmVudCBWaXNpYmxlJyxcbiAgU2VhcmNoWmVyb1N0YXRlU3VnZ2VzdGlvbkNsaWNrZWQgPSAnU2VhcmNoIFplcm8gU3RhdGUgU3VnZ2VzdGlvbiBDbGlja2VkJywgLy8gVGhpcyBpcyB0aGUgc2Nyb2xsaW5nIGxpc3Qgb2Ygc3VnZ2VzdGlvbiBidXR0b25zIGluIGdsb2JhbCBzZWFyY2hcbiAgU2VhcmNoSW5wdXRTdGFydGVkID0gJ1NlYXJjaCBJbnB1dCBTdGFydGVkJyxcbiAgU2VhcmNoUXVlcnlTdWJtaXR0ZWQgPSAnU2VhcmNoIFF1ZXJ5IFN1Ym1pdHRlZCcsXG4gIC8vIFNlYXJjaEF1dG9jb21wbGV0ZVZpZXdlZCA9ICdTZWFyY2ggQXV0b2NvbXBsZXRlIFZpZXdlZCcsIC8vIFRPRE86IGFkZCB0aGlzIHdoZW4gYXV0b2NvbXBsZXRlIGlzIGFkZGVkXG4gIC8vIFNlYXJjaEF1dG9jb21wbGV0ZUNsaWNrZWQgPSAnU2VhcmNoIEF1dG9jb21wbGV0ZSBDbGlja2VkJywgLy8gVE9ETzogYWRkIHRoaXMgd2hlbiBhdXRvY29tcGxldGUgaXMgYWRkZWRcbiAgU2VhcmNoUmVzdWx0c1ZpZXdlZCA9ICdTZWFyY2ggUmVzdWx0cyBWaWV3ZWQnLFxuICBTZWFyY2hUaW1lVG9GaXJzdENsaWNrID0gJ1NlYXJjaCBUaW1lIHRvIEZpcnN0IENsaWNrJyxcbiAgU2VhcmNoWmVyb1Jlc3VsdHNSYXRlID0gJ1NlYXJjaCBaZXJvIFJlc3VsdHMgUmF0ZScsXG4gIFNlYXJjaEZpbHRlckNsaWNrZWQgPSAnU2VhcmNoIEZpbHRlciBDbGlja2VkJyxcbiAgU2VhcmNoU29ydENsaWNrZWQgPSAnU2VhcmNoIFNvcnQgQ2xpY2tlZCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tFdmVudFBhcmFtcyB7XG4gIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZTtcbiAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmVudEdyb3Vwcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnIHtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGFtcGxpdHVkZUFwaUtleTogc3RyaW5nO1xuICBkYXRhUmVzaWRlbmN5OiBzdHJpbmc7XG4gIGVudjogc3RyaW5nO1xuICBjb250ZXh0U291cmNlOiBzdHJpbmc7XG4gIG9yZ1Nob3J0TmFtZTogc3RyaW5nO1xuICBvcmdJZDogc3RyaW5nO1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgb3JnR2FDb25maWc/OiB1bmtub3duO1xuICBzaG93OiBib29sZWFuO1xuICBlbmFibGVkRmVhdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgZ2V0TG9jYWxTdG9yYWdlSXRlbTogbnVsbCB8ICgoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwpO1xufVxuXG5leHBvcnQgY2xhc3MgQW1wbGl0dWRlU2VydmljZSB7XG4gIHByaXZhdGUgYW1wbGl0dWRlQ2xpZW50OiBCcm93c2VyQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1cHBsZW1lbnRhbERlZmF1bHRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBwcml2YXRlIGNvbmZpZzogQW1wbGl0dWRlU2VydmljZUNvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmXG4gICAgICB0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UgJiZcbiAgICAgIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSAmJlxuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ3MoKSk7XG4gICAgY29uc3QgZ2F0ZXNQcm9wcyA9XG4gICAgICBmZWF0dXJlR2F0ZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGZlYXR1cmVHYXRlcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KChhY2MsIFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbYGZlYXR1cmVfZ2F0ZS4ke25hbWV9YF06IHZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IHt9O1xuICAgIGNvbnN0IGV4cGVyaW1lbnRQcm9wcyA9IHt9OyAvLyBObyBkaXJlY3QgZXF1aXZhbGVudCBmb3IgZXhwZXJpbWVudHMgaW4gRW52aXZlQ29uZmlnIHlldFxuXG4gICAgY29uc3Qgb3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzID0ge1xuICAgICAgLi4uZ2F0ZXNQcm9wcyxcbiAgICAgIC4uLmV4cGVyaW1lbnRQcm9wcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyxcbiAgICAgIC4uLnRoaXMuc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzLFxuICAgICAgLy8gVE9ETzogb3JnX2lkIGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgaW4gRW52aXZlQ29uZmlnLiBOZWVkIHRvIGZpbmQgYSBuZXcgc291cmNlIG9yIGRlcml2ZSBpdC5cbiAgICAgIC8vIG9yZ19pZDogb3JnQ29uZmlnPy5vcmc/Lm9yZz8uaWQsXG4gICAgICBhcHBfaWQ6ICdjb21tZXJjZS1jaGF0LXJlYWN0LWNvbXBvbmVudCcsXG4gICAgICBjaGF0X2lkOiB0aGlzLmdldExvY2FsU3RvcmFnZUl0ZW0oTG9jYWxTdG9yYWdlS2V5cy5DaGF0SWQpLFxuICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgYXBwX3NvdXJjZTogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgIG9yZ19pZDogdGhpcy5jb25maWcub3JnSWQsXG4gICAgICAnb3JnLnNob3J0X25hbWUnOiB0aGlzLmNvbmZpZy5vcmdTaG9ydE5hbWUsXG4gICAgICAndXNlci5pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdjZHAudXNlcl9pZCc6IG51bGwsXG4gICAgICAnY2RwLnByb3ZpZGVyJzogbnVsbCxcbiAgICAgICdldmVudC5zb3VyY2UnOiAnd2ViLWJyb3dzZXInLFxuICAgICAgJ2V2ZW50LnR5cGUnOiAndXNlci1hY3Rpdml0eScsXG4gICAgICAnZXZlbnQuaWQnOiBudWxsLFxuICAgICAgJ2V2ZW50LmNoYW5uZWwnOiAnd2ViJyxcbiAgICAgICdldmVudC50aW1lc3RhbXAnOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcml2YXRlIGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwcmVmaXggPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGV2ZW50UHJvcHMpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCk6IEVucmljaG1lbnRQbHVnaW4ge1xuICAgIGlmICh0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogJ3BhZ2Utdmlldy10cmFja2luZy1lbnJpY2htZW50JyxcbiAgICAgIHR5cGU6ICdlbnJpY2htZW50JyxcbiAgICAgIHNldHVwOiBhc3luYyAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxFdmVudD4gPT4ge1xuICAgICAgICBsZXQgZW5yaWNoZWRFdmVudDogRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbnJpY2ggPSBbXG4gICAgICAgICAgJ1tBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkJyxcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuc2hvdyddID0gU3RyaW5nKHRoaXMuY29uZmlnLnNob3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLmVudiddID0gU3RyaW5nKHRoaXMuY29uZmlnLmVudik7XG5cbiAgICAgICAgICBjb25zdCBlbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZz8uZW5hYmxlZEZlYXR1cmVzID8/ICh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiksXG4gICAgICAgICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2BlbmFibGVkRmVhdHVyZXMuJHtrZXl9YF06IGAke3ZhbHVlfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB0aW1pbmdQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgJ3RpbWluZy5lbnJpY2hlZF9hdF9tcyc6XG4gICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnBlcmZvcm1hbmNlPy5ub3coKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IHtcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgZXZlbnRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5ldmVudC5ldmVudF9wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKCksXG4gICAgICAgICAgICAgIC4uLmdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRpbWluZ1Byb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgRXZlbnRzRGlzcGF0Y2hlci5kaXNwYXRjaChTcGlmZnlFdmVudC5BTVBMSVRVREVfRVZFTlQsIGVucmljaGVkRXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBlbnJpY2hlZEV2ZW50O1xuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCA9IGVucmljaG1lbnQ7XG4gICAgcmV0dXJuIGVucmljaG1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgY29uc3QgaXNSZWFkeSA9IEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiYgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICApO1xuXG4gICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICBMb2dnZXIubG9nRGVidWcoJ0FtcGxpdHVkZVNlcnZpY2UgaXMgbm90IHJlYWR5Jywge1xuICAgICAgICBpc1JlYWR5LFxuICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICAgaGFzRmVhdHVyZUZsYWdTZXJ2aWNlOiAhIXRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSxcbiAgICAgICAgaGFzQW1wbGl0dWRlQXBpS2V5OiAhIXRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCA9IGNyZWF0ZUluc3RhbmNlKCk7XG5cbiAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5hZGQodGhpcy5nZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpKTtcbiAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5pbml0KHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSwgdGhpcy5jb25maWcudXNlcklkLCB7XG4gICAgICAgIHNlcnZlclpvbmU6IHRoaXMuY29uZmlnLmRhdGFSZXNpZGVuY3kgYXMgU2VydmVyWm9uZVR5cGUsXG4gICAgICAgIHRyYWNraW5nT3B0aW9uczoge1xuICAgICAgICAgIGlwQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b2NhcHR1cmU6IHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbjogdHJ1ZSxcbiAgICAgICAgICBwYWdlVmlld3M6IHtcbiAgICAgICAgICAgIHRyYWNrSGlzdG9yeUNoYW5nZXM6ICdwYXRoT25seScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uczogZmFsc2UsXG4gICAgICAgICAgZm9ybUludGVyYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgZmlsZURvd25sb2FkczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50ID0gY3VycmVudEFtcGxpdHVkZUluc3RhbmNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KHdpZGdldFR5cGU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAod2lkZ2V0VHlwZSkge1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuRmxvYXRpbmdCdXR0b25WMzpcbiAgICAgICAgcmV0dXJuICdmbG9hdGluZ19idXR0b24nO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuQ2hhdFByZXZpZXdWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlNvY2lhbFByb29mVjM6XG4gICAgICAgIHJldHVybiAnZW1iZWRkZWRfd2lkZ2V0JztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlRpdGxlZFByb21wdENhcm91c2VsVjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Qcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgICByZXR1cm4gJ3N1Z2dlc3Rpb25fYmFyJztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjM6XG4gICAgICAgIHJldHVybiAnaW1hZ2VfcHJvbXB0X2NhcmQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0cmlnZ2VyTG9jYXRpb24pIHtcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9EVUNUX0NBUkRfUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9EVUNUX0NBUkRfVEVYVF9GSUVMRDpcbiAgICAgICAgcmV0dXJuICdwcm9tcHRfY2FyZCc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPTVBUX0NBUk9VU0VMOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlRJVExFRF9QUk9NUFRfQ0FST1VTRUw6XG4gICAgICAgIHJldHVybiAndG9wX3Jldmlld3Nfc25pcHBldCc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVFlQSU5HX0FOSU1BVElPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfUFJJTUFSWV9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1NFQ09OREFSWV9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX0NPTVBBUklTT05fUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9URVhUX0ZJRUxEOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ2NoYXRfcHJldmlldyc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9PVkVSTEFZOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkZMT0FUSU5HX0NIQVRfQ0xPU0VfQlVUVE9OOlxuICAgICAgICByZXR1cm4gJ2luX2NoYXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJMb2NhdGlvbiBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWFwIHRoZSBldmVudCBwcm9wcyB0byB0aGUgY29ycmVjdCBmb3JtYXQgZm9yIHRoZSBsZWdhY3kgYW1wbGl0dWRlIGV2ZW50c1xuICBzdGF0aWMgbWFwRXZlbnRQcm9wcyh7IGV2ZW50TmFtZSwgZXZlbnRQcm9wcyB9OiBUcmFja0V2ZW50UGFyYW1zKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IG1lc3NhZ2VNZXRhZGF0YSA9IGV2ZW50UHJvcHM/Lm1lc3NhZ2VfbWV0YWRhdGEgPz8ge307XG4gICAgY29uc3QgdHJpZ2dlckxvY2F0aW9uID1cbiAgICAgIG1lc3NhZ2VNZXRhZGF0YSAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIG1lc3NhZ2VNZXRhZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICd0cmlnZ2VyX2xvY2F0aW9uJyBpbiBtZXNzYWdlTWV0YWRhdGFcbiAgICAgICAgPyBtZXNzYWdlTWV0YWRhdGEudHJpZ2dlcl9sb2NhdGlvblxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudEV4cGFuZGVkKSB7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50VmlzaWJsZSkge1xuICAgICAgY29uc3QgbWFwcGVkV2lkZ2V0VHlwZSA9IEFtcGxpdHVkZVNlcnZpY2UubWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudChcbiAgICAgICAgZXZlbnRQcm9wcz8ud2lkZ2V0X3R5cGUsXG4gICAgICApO1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGNoYXRfY29tcG9uZW50OiBtYXBwZWRXaWRnZXRUeXBlLFxuICAgICAgICAnY2hhdC5jb21wb25lbnRfdmlzaWJsZSc6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRQcm9wcyA/PyB7fTtcbiAgfVxuXG4gIGFzeW5jIHRyYWNrRXZlbnQoe1xuICAgIGV2ZW50TmFtZSxcbiAgICBldmVudFByb3BzLFxuICAgIGV2ZW50R3JvdXBzLFxuICAgIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgPSBmYWxzZSxcbiAgfTogVHJhY2tFdmVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnU3VibWl0dGluZyBldmVudCcsIGV2ZW50TmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29yYXRlZEV2ZW50TmFtZSA9IGBbU3BpZmZ5XSAke2V2ZW50TmFtZX1gO1xuXG4gICAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICAgIExvZ2dlci5sb2dXYXJuKCdhbXBsaXR1ZGUgY2xpZW50IHVuZGVmaW5lZCcsIHVuZGVmaW5lZCwge1xuICAgICAgICAgIGV2ZW50X25hbWU6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFwcGVkRXZlbnRQcm9wcyA9IEFtcGxpdHVkZVNlcnZpY2UubWFwRXZlbnRQcm9wcyh7IGV2ZW50TmFtZSwgZXZlbnRQcm9wcyB9KTtcblxuICAgICAgY29uc3QgZXZlbnREYXRhID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHM6IG1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKGV2ZW50RGF0YSk7XG4gICAgICAvLyBjYWxjdWxhdGUgYSBoYXNoIG9mIHRoZSBldmVudCBwcm9wZXJ0aWVzIHRvIHVzZSBhcyB0aGUgaW5zZXJ0X2lkIHNvIHRoYXQgZHVwbGljYXRlIGV2ZW50c1xuICAgICAgLy8gYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCBieSBBbXBsaXR1ZGVcbiAgICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGRhdGEpO1xuICAgICAgY29uc3QgaGFzaEFycmF5ID0gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShoYXNoQnVmZmVyKSk7XG4gICAgICBjb25zdCBjdXJyZW50SW5zZXJ0SWQgPSBoYXNoQXJyYXkubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG5cbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhgYW1wbGl0dWRlIHRyYWNraW5nICR7ZGVjb3JhdGVkRXZlbnROYW1lfWAsIG51bGwsIHtcbiAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICBwcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudC50cmFjayhcbiAgICAgICAgZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcygpLFxuICAgICAgICAgIC4uLm1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgICAgLi4uKG1hcHBlZEV2ZW50UHJvcHNcbiAgICAgICAgICAgID8gdGhpcy5ldmVudFByb3BzVG9QcmVmaXhlZEV2ZW50UHJvcHMoZXZlbnROYW1lLCBtYXBwZWRFdmVudFByb3BzKVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ldmVudEdyb3VwcyxcbiAgICAgICAgICBpbnNlcnRfaWQ6IGN1cnJlbnRJbnNlcnRJZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzICYmIHRoaXMuY29uZmlnLm9yZ0dhQ29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IEFkZCBpbiB3aW5kb3dEYXRhTGF5ZXJTZXJ2aWNlIG9yIGNvbnRleHQgYWx0ZXJuYXRpdmUgYW5kIGhvb2sgaXQgdXAgaGVyZVxuICAgICAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIEdBIHRyYWNraW5nJywgZGVjb3JhdGVkRXZlbnROYW1lKTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kYXRhTGF5ZXIpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICh3aW5kb3cuZGF0YUxheWVyIGFzIGFueVtdKS5wdXNoKHtcbiAgICAgICAgICAgIGV2ZW50OiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFByb3BzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIEVycm9yIHRyYWNraW5nIGV2ZW50JywgZXJyLCB7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuc3VyZSB0aGF0IHN1cHBsZW1lbnRhbCBkZWZhdWx0IHByb3BzIGFyZSBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgcHJvcHNcbiAgc2V0U3VwcGxlbWVudGFsRGVmYXVsdFByb3BzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzID0gcHJvcHM7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQWNBLElBQVksNEVBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUF5QkYsSUFBYSxtQkFBYixNQUFhLGlCQUFpQjtDQVM1QixZQUFZLFFBQWdDO2tDQUpnQixFQUFFO0FBSzVELE9BQUssU0FBUztBQUNkLE9BQUssWUFBWTs7Q0FHbkIsSUFBSSxVQUFtQjtBQUNyQixTQUFPLFFBQ0wsS0FBSyxPQUFPLFVBQ1osS0FBSyxPQUFPLHNCQUNaLEtBQUssT0FBTyxtQkFDWixLQUFLLGdCQUNOOztDQUdILEFBQVEsb0JBQW9CLEtBQTRCO0FBQ3RELE1BQUksS0FBSyxPQUFPLG9CQUNkLFFBQU8sS0FBSyxPQUFPLG9CQUFvQixJQUFJO0FBRTdDLE1BQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxhQUMxQyxRQUFPLE9BQU8sYUFBYSxRQUFRLElBQUk7QUFFekMsU0FBTzs7Q0FHVCxBQUFRLDBCQUFtRDtFQUN6RCxNQUFNLGVBQWUsT0FBTyxRQUFRLEtBQUssT0FBTyxtQkFBbUIsaUJBQWlCLENBQUM7RUFDckYsTUFBTSxhQUNKLGFBQWEsU0FBUyxJQUNsQixhQUFhLFFBQWlDLEtBQUssQ0FBQyxNQUFNLFdBQVc7QUFDbkUsT0FBSSxRQUFRLFNBQVMsS0FDbkIsUUFBTztJQUFFLEdBQUc7S0FB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
|
package/package.json
CHANGED
|
@@ -15,6 +15,8 @@ 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
|
+
FLOATING_CHAT_PROMPT_BUTTON = 'floating_chat_prompt_button',
|
|
18
19
|
PRODUCT_CARD_PROMPT_BUTTON = 'product_card_prompt_button',
|
|
19
20
|
PRODUCT_CARD_TEXT_FIELD = 'product_card_text_field',
|
|
21
|
+
WINDOW_API_CALL = 'window_api_call',
|
|
20
22
|
}
|
|
@@ -29,6 +29,8 @@ export const coreWidgetTypeToApiWidgetType = (coreWidgetType: WidgetTypeV3): Wid
|
|
|
29
29
|
return WidgetType.FloatingChatV3;
|
|
30
30
|
case WidgetTypeV3.FloatingButtonV3:
|
|
31
31
|
return WidgetType.FloatingButtonV3;
|
|
32
|
+
case WidgetTypeV3.PromptButtonCarouselWithImageV3:
|
|
33
|
+
return WidgetType.SingleImagePromptV3;
|
|
32
34
|
default:
|
|
33
35
|
throw new Error(`Unsupported widget type: ${coreWidgetType}`);
|
|
34
36
|
}
|
package/src/atoms/chat/index.ts
CHANGED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { ChatElementDisplayLocationV3 } from 'src/application/models/chatElementDisplayLocationV3';
|
|
3
|
+
import Logger from 'src/application/logging/logger';
|
|
4
|
+
import { useEnviveConfig } from 'src/contexts/enviveConfigContext/enviveConfigContext';
|
|
5
|
+
import { useSalesAgent } from 'src/contexts/salesAgentContext/salesAgentContext';
|
|
6
|
+
import { useChatToggle } from 'src/hooks/ChatToggle';
|
|
7
|
+
|
|
8
|
+
const attachedPrefixes = new Set<string>();
|
|
9
|
+
|
|
10
|
+
export const WindowChatToggleBinder = () => {
|
|
11
|
+
const triggerLocation = ChatElementDisplayLocationV3.WINDOW_API_CALL;
|
|
12
|
+
const hook = useChatToggle();
|
|
13
|
+
const { onTypedMessageSubmitted } = useSalesAgent();
|
|
14
|
+
const { identifyingPrefix } = useEnviveConfig();
|
|
15
|
+
|
|
16
|
+
const openChatRef = useRef<(triggerId?: string) => void>(() => {});
|
|
17
|
+
const closeChatRef = useRef<(triggerId?: string) => void>(() => {});
|
|
18
|
+
const toggleChatRef = useRef<(triggerId?: string) => void>(() => {});
|
|
19
|
+
const isOpenRef = useRef<boolean>(hook.isOpen);
|
|
20
|
+
const openChatWithPromptRef = useRef<(prompt: string, triggerId?: string) => void>(() => {});
|
|
21
|
+
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
openChatRef.current = (triggerId?: string) => hook.openChat(triggerLocation, triggerId);
|
|
24
|
+
closeChatRef.current = (triggerId?: string) => hook.closeChat(triggerLocation, triggerId);
|
|
25
|
+
toggleChatRef.current = (triggerId?: string) => hook.toggle(triggerLocation, triggerId);
|
|
26
|
+
isOpenRef.current = hook.isOpen;
|
|
27
|
+
openChatWithPromptRef.current = (prompt: string, triggerId?: string) => {
|
|
28
|
+
onTypedMessageSubmitted({ query: prompt, userTyped: false });
|
|
29
|
+
hook.openChat(triggerLocation, triggerId);
|
|
30
|
+
};
|
|
31
|
+
}, [hook, onTypedMessageSubmitted, triggerLocation]);
|
|
32
|
+
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (!identifyingPrefix || attachedPrefixes.has(identifyingPrefix)) return;
|
|
35
|
+
try {
|
|
36
|
+
const win = window as unknown as Window & Record<string, unknown>;
|
|
37
|
+
if (!win[identifyingPrefix]) {
|
|
38
|
+
win[identifyingPrefix] = {} as Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
const api = win[identifyingPrefix] as Record<string, unknown>;
|
|
41
|
+
api.openChat = (triggerId?: string) => openChatRef.current?.(triggerId);
|
|
42
|
+
api.closeChat = (triggerId?: string) => closeChatRef.current?.(triggerId);
|
|
43
|
+
api.toggleChat = (triggerId?: string) => toggleChatRef.current?.(triggerId);
|
|
44
|
+
api.getChatIsOpen = () => !!isOpenRef.current;
|
|
45
|
+
api.openChatWithPrompt = (prompt: string, triggerId?: string) =>
|
|
46
|
+
openChatWithPromptRef.current?.(prompt, triggerId);
|
|
47
|
+
|
|
48
|
+
attachedPrefixes.add(identifyingPrefix);
|
|
49
|
+
|
|
50
|
+
// Always expose the same API at window["spiffy"] so both work (e.g. injection-bundle + spiffy)
|
|
51
|
+
const spiffyAlias = 'spiffy';
|
|
52
|
+
if (!attachedPrefixes.has(spiffyAlias)) {
|
|
53
|
+
win[spiffyAlias] = api;
|
|
54
|
+
attachedPrefixes.add(spiffyAlias);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
Logger.logDebug(
|
|
58
|
+
`[envive-ai] Chat toggle attached at window["${identifyingPrefix}"] and window["${spiffyAlias}"]`,
|
|
59
|
+
);
|
|
60
|
+
} catch (e) {
|
|
61
|
+
Logger.logError('[envive-ai] Failed to attach Chat toggle functions', e);
|
|
62
|
+
}
|
|
63
|
+
}, [identifyingPrefix]);
|
|
64
|
+
|
|
65
|
+
return null;
|
|
66
|
+
};
|
|
@@ -9,7 +9,7 @@ import { AmplitudeProvider } from '../amplitudeContext';
|
|
|
9
9
|
import { EnviveConfigProvider } from '../enviveConfigContext';
|
|
10
10
|
import { EnviveCssProvider } from '../enviveCssContext';
|
|
11
11
|
import { FeatureFlagService, FeatureFlagServiceProvider } from '../featureFlagServiceContext';
|
|
12
|
-
import {
|
|
12
|
+
import { GraphQLProvider, GraphQlConfigValues } from '../graphqlContext';
|
|
13
13
|
import { LocalStorageProvider } from '../localStorageContext';
|
|
14
14
|
import { NewOrgConfigProvider } from '../newOrgConfigContext';
|
|
15
15
|
import { UserIdentityProvider } from '../userIdentityContext';
|
|
@@ -21,6 +21,7 @@ import { HardcopyProvider } from '../hardcopyContext';
|
|
|
21
21
|
import { WidgetConfigProvider } from '../widgetConfigContext';
|
|
22
22
|
import { PageProvider } from '../pageContext';
|
|
23
23
|
import { UiConfigProvider } from '../uiConfigContext';
|
|
24
|
+
import { WindowChatToggleBinder } from './WindowChatToggleBinder';
|
|
24
25
|
|
|
25
26
|
const EnviveContext = createContext<null>(null);
|
|
26
27
|
|
|
@@ -183,6 +184,7 @@ export const EnviveProvider: React.FC<EnviveProviderProps> = ({
|
|
|
183
184
|
<HardcopyProvider>
|
|
184
185
|
<EnviveCssProvider>
|
|
185
186
|
<SearchAgentWrapper enabledAgents={enabledAgents}>
|
|
187
|
+
<WindowChatToggleBinder />
|
|
186
188
|
<SalesAgentWrapper
|
|
187
189
|
enabledAgents={enabledAgents}
|
|
188
190
|
previewMode={previewMode}
|
|
@@ -139,6 +139,10 @@ export const mockV3FrontendConfig: FrontendConfigV3 = {
|
|
|
139
139
|
enabled: false,
|
|
140
140
|
suppressMerchantButton: false,
|
|
141
141
|
},
|
|
142
|
+
singlePageApplicationSettings: {
|
|
143
|
+
enabled: false,
|
|
144
|
+
refreshInterval: 1000,
|
|
145
|
+
},
|
|
142
146
|
},
|
|
143
147
|
pageVariants: [],
|
|
144
148
|
mountingConfigs: {},
|
|
@@ -15,7 +15,7 @@ import { isApiSearchAttributes } from 'src/application/models/guards/api/isApiSe
|
|
|
15
15
|
import { isApiSuggestionClickedAttributes } from 'src/application/models/guards/api/isApiSuggestionClickedEventAttributes';
|
|
16
16
|
import { isApiFormSubmittedResponseAttributes } from 'src/application/models/guards/api/isApiFormSubmittedResponseAttributes';
|
|
17
17
|
|
|
18
|
-
import { PageVariantInfo, VisitPageVariantInfo } from './types';
|
|
18
|
+
import { HomeVariantInfo, OtherVariantInfo, PageVariantInfo, VisitPageVariantInfo } from './types';
|
|
19
19
|
|
|
20
20
|
export const mapUrlResolverResponseToVariantInfo = (
|
|
21
21
|
url: string,
|
|
@@ -51,6 +51,21 @@ export const mapUrlResolverResponseToVariantInfo = (
|
|
|
51
51
|
url,
|
|
52
52
|
} as VisitPageVariantInfo;
|
|
53
53
|
}
|
|
54
|
+
|
|
55
|
+
if (response.variant_type === VariantTypeEnum.Home) {
|
|
56
|
+
return {
|
|
57
|
+
variantType: VariantTypeEnum.Home,
|
|
58
|
+
url,
|
|
59
|
+
} as HomeVariantInfo;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (response.variant_type === VariantTypeEnum.Other) {
|
|
63
|
+
return {
|
|
64
|
+
variantType: VariantTypeEnum.Other,
|
|
65
|
+
url,
|
|
66
|
+
} as OtherVariantInfo;
|
|
67
|
+
}
|
|
68
|
+
|
|
54
69
|
throw new Error('Invalid variant type');
|
|
55
70
|
};
|
|
56
71
|
|
|
@@ -22,7 +22,12 @@ import { mapApiUserEventToUserEvent, mapUrlResolverResponseToVariantInfo } from
|
|
|
22
22
|
import { PageDetails } from './types';
|
|
23
23
|
|
|
24
24
|
const PageContext = createContext<
|
|
25
|
-
(PageDetails & {
|
|
25
|
+
| (PageDetails & {
|
|
26
|
+
isLoading: boolean;
|
|
27
|
+
isSupported: boolean;
|
|
28
|
+
setPageUrl: (url: string) => void;
|
|
29
|
+
})
|
|
30
|
+
| undefined
|
|
26
31
|
>(undefined);
|
|
27
32
|
|
|
28
33
|
export const PageProvider: React.FC<{
|
|
@@ -36,7 +41,6 @@ export const PageProvider: React.FC<{
|
|
|
36
41
|
const [userEvent, setUserEvent] = useAtom(pageUserEventAtom);
|
|
37
42
|
const [isSupported, setIsSupported] = useState(false);
|
|
38
43
|
useEffect(() => {
|
|
39
|
-
// TODO: Add support for SPA's and other changes to the URL to ensure that the pageUrl is set correctly
|
|
40
44
|
setPageUrl(window.location.href);
|
|
41
45
|
}, []);
|
|
42
46
|
|
|
@@ -109,6 +113,10 @@ export const PageProvider: React.FC<{
|
|
|
109
113
|
previewMode,
|
|
110
114
|
]);
|
|
111
115
|
|
|
116
|
+
const setPageUrlStable = useCallback((url: string) => {
|
|
117
|
+
setPageUrl(url);
|
|
118
|
+
}, []);
|
|
119
|
+
|
|
112
120
|
const value = useMemo(
|
|
113
121
|
() => ({
|
|
114
122
|
pageUrl,
|
|
@@ -116,8 +124,9 @@ export const PageProvider: React.FC<{
|
|
|
116
124
|
userEvent,
|
|
117
125
|
isLoading,
|
|
118
126
|
isSupported,
|
|
127
|
+
setPageUrl: setPageUrlStable,
|
|
119
128
|
}),
|
|
120
|
-
[pageUrl, userEvent, variantInfo, isLoading, isSupported],
|
|
129
|
+
[pageUrl, userEvent, variantInfo, isLoading, isSupported, setPageUrlStable],
|
|
121
130
|
);
|
|
122
131
|
|
|
123
132
|
return <PageContext.Provider value={value}>{children}</PageContext.Provider>;
|
|
@@ -21,7 +21,22 @@ export type VisitPageVariantInfo = {
|
|
|
21
21
|
url: string;
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
export type
|
|
24
|
+
export type HomeVariantInfo = {
|
|
25
|
+
variantType: VariantTypeEnum.Home;
|
|
26
|
+
url: string;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export type OtherVariantInfo = {
|
|
30
|
+
variantType: VariantTypeEnum.Other;
|
|
31
|
+
url: string;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type PageVariantInfo =
|
|
35
|
+
| PDPPageVariantInfo
|
|
36
|
+
| PLPPageVariantInfo
|
|
37
|
+
| VisitPageVariantInfo
|
|
38
|
+
| HomeVariantInfo
|
|
39
|
+
| OtherVariantInfo;
|
|
25
40
|
|
|
26
41
|
export interface PageDetails {
|
|
27
42
|
pageUrl: string | undefined;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { PageVisitCategory, UserEventCategory } from '@spiffy-ai/commerce-api-client';
|
|
4
4
|
import {
|
|
5
|
+
ChatElementDisplayLocationV3,
|
|
5
6
|
FormSubmittedAttributes,
|
|
6
7
|
MessageRole,
|
|
7
8
|
MessageType,
|
|
@@ -18,7 +19,10 @@ import { SpiffyMetricsEventName, useAmplitude } from '../amplitudeContext';
|
|
|
18
19
|
export interface SalesAgentChatAPI {
|
|
19
20
|
logPageVisit: ({ pageVisitCategory }: { pageVisitCategory: PageVisitCategory }) => void;
|
|
20
21
|
logUserEvent: (event: UserEvent) => void;
|
|
21
|
-
onSuggestionClicked: (
|
|
22
|
+
onSuggestionClicked: (
|
|
23
|
+
suggestion: Suggestion,
|
|
24
|
+
displayLocation: ChatElementDisplayLocationV3,
|
|
25
|
+
) => void;
|
|
22
26
|
onTypedMessageSubmitted: ({ query, userTyped }: { query: string; userTyped: boolean }) => void;
|
|
23
27
|
onFormResponseSubmitted: (formResponse: FormSubmittedAttributes) => void;
|
|
24
28
|
}
|
|
@@ -54,12 +58,20 @@ export const useSalesAgentChatAPI = () => {
|
|
|
54
58
|
[queueUserEvent],
|
|
55
59
|
);
|
|
56
60
|
const onSuggestionClicked = useCallback(
|
|
57
|
-
(suggestion: Suggestion) => {
|
|
61
|
+
(suggestion: Suggestion, displayLocation: ChatElementDisplayLocationV3) => {
|
|
58
62
|
trackEvent({
|
|
59
63
|
eventName: SpiffyMetricsEventName.ChatSuggestionClicked,
|
|
60
64
|
eventProps: {
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
message_id: suggestion.id,
|
|
66
|
+
message_role: MessageRole.User,
|
|
67
|
+
message_type: MessageType.SuggestionClicked,
|
|
68
|
+
message_metadata: {
|
|
69
|
+
content: suggestion.content,
|
|
70
|
+
created_at: suggestion.createdAt,
|
|
71
|
+
category: suggestion.category,
|
|
72
|
+
is_answer: suggestion.isAnswer,
|
|
73
|
+
display_location: displayLocation,
|
|
74
|
+
},
|
|
63
75
|
},
|
|
64
76
|
});
|
|
65
77
|
const event: UserEvent = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useAtom, useAtomValue, useSetAtom } from 'jotai';
|
|
2
|
-
import { ReactNode, createContext, useCallback, useEffect, useMemo } from 'react';
|
|
2
|
+
import { ReactNode, createContext, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
3
3
|
import { UserEventCategory } from '@spiffy-ai/commerce-api-client';
|
|
4
4
|
import Logger from 'src/application/logging/logger';
|
|
5
5
|
import { Message, MessageRole, MessageType } from 'src/application/models/message';
|
|
@@ -68,6 +68,8 @@ export const SalesAgentProvider: React.FC<SalesAgentProviderProps> = ({
|
|
|
68
68
|
const { getStreamingResponses, createResponsePayload, getSuggestions, hydrateMessages } =
|
|
69
69
|
useSalesAgentService();
|
|
70
70
|
|
|
71
|
+
const isSendingRef = useRef(false);
|
|
72
|
+
|
|
71
73
|
// Initialize with mock data in preview mode
|
|
72
74
|
useEffect(() => {
|
|
73
75
|
if (previewMode && mockData) {
|
|
@@ -110,7 +112,8 @@ export const SalesAgentProvider: React.FC<SalesAgentProviderProps> = ({
|
|
|
110
112
|
return;
|
|
111
113
|
}
|
|
112
114
|
|
|
113
|
-
if (userQueueEventCount > 0) {
|
|
115
|
+
if (userQueueEventCount > 0 && !isSendingRef.current) {
|
|
116
|
+
isSendingRef.current = true;
|
|
114
117
|
const payloadEvents = userEvents.slice(0, userQueueEventCount);
|
|
115
118
|
|
|
116
119
|
payloadEvents.forEach(userEvent => {
|
|
@@ -162,7 +165,9 @@ export const SalesAgentProvider: React.FC<SalesAgentProviderProps> = ({
|
|
|
162
165
|
userEvents: payloadEvents,
|
|
163
166
|
generationParams: settingsContext.generationParams,
|
|
164
167
|
}),
|
|
165
|
-
)
|
|
168
|
+
).finally(() => {
|
|
169
|
+
isSendingRef.current = false;
|
|
170
|
+
});
|
|
166
171
|
} else if (isInitialized) {
|
|
167
172
|
getSuggestions(
|
|
168
173
|
createResponsePayload({
|
package/src/contexts/typesV3.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { SparkleIconColor } from '@envive-ai/react-toolkit-v3/WelcomeMessage';
|
|
|
8
8
|
import { FloatingButtonLocation } from '@envive-ai/react-toolkit-v3/FloatingButton';
|
|
9
9
|
import { ColorNames } from '../application/models/colorsConfigV3';
|
|
10
10
|
import { CustomerServiceType } from '../types/customerService';
|
|
11
|
-
import type {
|
|
11
|
+
import type { SearchConfig } from './types';
|
|
12
12
|
|
|
13
13
|
export enum LetterSpacingCSSVar {
|
|
14
14
|
Tight0 = 'envive-typography-letter-spacing-tight-0',
|
|
@@ -204,6 +204,11 @@ type CustomerServiceIntegration = {
|
|
|
204
204
|
suppressMerchantButton?: boolean;
|
|
205
205
|
};
|
|
206
206
|
|
|
207
|
+
type SPASettings = {
|
|
208
|
+
enabled: boolean;
|
|
209
|
+
refreshInterval?: number;
|
|
210
|
+
};
|
|
211
|
+
|
|
207
212
|
type OrgUIConfigV3 = {
|
|
208
213
|
id?: string;
|
|
209
214
|
|
|
@@ -221,7 +226,7 @@ type OrgUIConfigV3 = {
|
|
|
221
226
|
|
|
222
227
|
customerServiceIntegration?: CustomerServiceIntegration;
|
|
223
228
|
|
|
224
|
-
|
|
229
|
+
singlePageApplicationSettings?: SPASettings;
|
|
225
230
|
|
|
226
231
|
searchConfig?: SearchConfig;
|
|
227
232
|
};
|
|
@@ -307,6 +312,7 @@ interface PromptButtonCarouselWithImageWidgetV3Config extends BaseWidgetConfig<W
|
|
|
307
312
|
promptButtonType?: PromptButtonVariant;
|
|
308
313
|
image?: ImageGalleryImage;
|
|
309
314
|
hideTextField?: boolean;
|
|
315
|
+
isDynamic?: boolean;
|
|
310
316
|
}
|
|
311
317
|
|
|
312
318
|
interface FloatingChatWidgetV3Config extends BaseWidgetConfig<WidgetTypeV3.FloatingChatV3> {}
|
|
@@ -347,4 +353,5 @@ export type {
|
|
|
347
353
|
FloatingChatConfig,
|
|
348
354
|
FloatingButtonConfig,
|
|
349
355
|
CustomerServiceIntegration,
|
|
356
|
+
SPASettings,
|
|
350
357
|
};
|
|
@@ -35,6 +35,10 @@ export const WidgetConfigProvider: React.FC<{ children: ReactNode }> = ({ childr
|
|
|
35
35
|
const response = frontendConfig?.widgetConfigs?.[widgetConfigId];
|
|
36
36
|
Logger.logInfo('widgetConfigContext | returning widget config response', response);
|
|
37
37
|
|
|
38
|
+
if (widgetConfigId === 'fake-widget-config-id') {
|
|
39
|
+
return {} as WidgetConfigV3;
|
|
40
|
+
}
|
|
41
|
+
|
|
38
42
|
if (
|
|
39
43
|
[
|
|
40
44
|
WidgetTypeV3.SocialProofV3,
|
|
@@ -10,6 +10,7 @@ import type {
|
|
|
10
10
|
} from '@amplitude/analytics-types';
|
|
11
11
|
import { FeatureFlagService } from 'src/contexts/featureFlagServiceContext/featureFlagServiceContext';
|
|
12
12
|
import { WidgetTypeV3 } from 'src/contexts/typesV3';
|
|
13
|
+
import { ChatElementDisplayLocationV3 } from 'src/application/models/chatElementDisplayLocationV3';
|
|
13
14
|
|
|
14
15
|
export enum SpiffyMetricsEventName {
|
|
15
16
|
BundleLoaded = 'Bundle Loaded',
|
|
@@ -266,19 +267,74 @@ export class AmplitudeService {
|
|
|
266
267
|
case WidgetTypeV3.TitledPromptCarouselV3:
|
|
267
268
|
case WidgetTypeV3.PromptCarouselV3:
|
|
268
269
|
return 'suggestion_bar';
|
|
270
|
+
case WidgetTypeV3.ProductCardV3:
|
|
271
|
+
return 'image_prompt_card';
|
|
269
272
|
default:
|
|
270
273
|
return 'unknown';
|
|
271
274
|
}
|
|
272
275
|
}
|
|
273
276
|
|
|
277
|
+
static mapTriggerLocationToChatComponent(triggerLocation: unknown): string {
|
|
278
|
+
switch (triggerLocation) {
|
|
279
|
+
case ChatElementDisplayLocationV3.PRODUCT_CARD_PROMPT_BUTTON:
|
|
280
|
+
case ChatElementDisplayLocationV3.PRODUCT_CARD_TEXT_FIELD:
|
|
281
|
+
return 'prompt_card';
|
|
282
|
+
case ChatElementDisplayLocationV3.PROMPT_CAROUSEL:
|
|
283
|
+
case ChatElementDisplayLocationV3.TITLED_PROMPT_CAROUSEL:
|
|
284
|
+
return 'top_reviews_snippet';
|
|
285
|
+
case ChatElementDisplayLocationV3.TYPING_ANIMATION:
|
|
286
|
+
case ChatElementDisplayLocationV3.SOCIAL_PROOF_PRIMARY_BUTTON:
|
|
287
|
+
case ChatElementDisplayLocationV3.SOCIAL_PROOF_SECONDARY_BUTTON:
|
|
288
|
+
case ChatElementDisplayLocationV3.SOCIAL_PROOF_TEXT_FIELD:
|
|
289
|
+
case ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_PROMPT_BUTTON:
|
|
290
|
+
case ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_TEXT_FIELD:
|
|
291
|
+
case ChatElementDisplayLocationV3.CHAT_PREVIEW_PROMPT_BUTTON:
|
|
292
|
+
case ChatElementDisplayLocationV3.CHAT_PREVIEW_TEXT_FIELD:
|
|
293
|
+
return 'chat_preview';
|
|
294
|
+
case ChatElementDisplayLocationV3.FLOATING_CHAT_OVERLAY:
|
|
295
|
+
case ChatElementDisplayLocationV3.FLOATING_CHAT_CLOSE_BUTTON:
|
|
296
|
+
return 'in_chat';
|
|
297
|
+
default:
|
|
298
|
+
return triggerLocation as string;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
274
302
|
// This allows us to map the event props to the correct format for the legacy amplitude events
|
|
275
303
|
static mapEventProps({ eventName, eventProps }: TrackEventParams): Record<string, unknown> {
|
|
304
|
+
const messageMetadata = eventProps?.message_metadata ?? {};
|
|
305
|
+
const triggerLocation =
|
|
306
|
+
messageMetadata !== null &&
|
|
307
|
+
typeof messageMetadata === 'object' &&
|
|
308
|
+
'trigger_location' in messageMetadata
|
|
309
|
+
? messageMetadata.trigger_location
|
|
310
|
+
: undefined;
|
|
311
|
+
|
|
312
|
+
if (eventName === SpiffyMetricsEventName.ChatComponentExpanded) {
|
|
313
|
+
const mappedTriggerLoccation =
|
|
314
|
+
AmplitudeService.mapTriggerLocationToChatComponent(triggerLocation);
|
|
315
|
+
return {
|
|
316
|
+
...eventProps,
|
|
317
|
+
message_metadata: {
|
|
318
|
+
...messageMetadata,
|
|
319
|
+
trigger_location: mappedTriggerLoccation,
|
|
320
|
+
full_trigger_location: triggerLocation,
|
|
321
|
+
},
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
|
|
276
325
|
if (eventName === SpiffyMetricsEventName.ChatComponentVisible) {
|
|
277
326
|
const mappedWidgetType = AmplitudeService.mapWidgetTypeToChatComponent(
|
|
278
327
|
eventProps?.widget_type,
|
|
279
328
|
);
|
|
329
|
+
const mappedTriggerLoccation =
|
|
330
|
+
AmplitudeService.mapTriggerLocationToChatComponent(triggerLocation);
|
|
280
331
|
return {
|
|
281
332
|
...eventProps,
|
|
333
|
+
message_metadata: {
|
|
334
|
+
...messageMetadata,
|
|
335
|
+
trigger_location: mappedTriggerLoccation,
|
|
336
|
+
full_trigger_location: triggerLocation,
|
|
337
|
+
},
|
|
282
338
|
chat_component: mappedWidgetType,
|
|
283
339
|
'chat.component_visible': true,
|
|
284
340
|
};
|