@envive-ai/react-hooks 0.3.45 → 0.3.47
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/application/commerce-api.cjs +73 -3
- package/dist/application/commerce-api.d.cts +16 -1
- package/dist/application/commerce-api.d.ts +16 -1
- package/dist/application/commerce-api.js +73 -3
- package/dist/application/models/api/userEvent.d.cts +9 -2
- package/dist/application/models/api/userEvent.d.ts +9 -2
- package/dist/application/models/api/widgetText.d.cts +2 -1
- package/dist/application/models/api/widgetText.d.ts +2 -1
- package/dist/application/models/featureGates.cjs +2 -1
- package/dist/application/models/featureGates.d.cts +2 -1
- package/dist/application/models/featureGates.d.ts +2 -1
- package/dist/application/models/featureGates.js +2 -1
- package/dist/application/models/graphql/queries/getProductOptionsQuery.cjs +33 -0
- package/dist/application/models/graphql/queries/getProductOptionsQuery.d.cts +28 -0
- package/dist/application/models/graphql/queries/getProductOptionsQuery.d.ts +28 -0
- package/dist/application/models/graphql/queries/getProductOptionsQuery.js +32 -0
- package/dist/application/models/index.cjs +1 -1
- package/dist/application/models/index.js +1 -1
- package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +1 -1
- package/dist/application/models/validators/validateGraphQLFrontendConfig.js +1 -1
- package/dist/application/models/validators/validateResponse.cjs +2 -1
- package/dist/application/models/validators/validateResponse.js +2 -1
- package/dist/application/models/validators/validateUserEvent.cjs +3 -3
- package/dist/application/models/validators/validateUserEvent.js +3 -3
- package/dist/application/utils/elementObserver.d.cts +2 -2
- package/dist/application/utils/elementObserver.d.ts +2 -2
- package/dist/application/utils/index.cjs +2 -0
- package/dist/application/utils/index.d.cts +2 -1
- package/dist/application/utils/index.d.ts +2 -1
- package/dist/application/utils/index.js +2 -1
- package/dist/application/utils/messageFromAddToCartEvent.cjs +32 -0
- package/dist/application/utils/messageFromAddToCartEvent.d.cts +19 -0
- package/dist/application/utils/messageFromAddToCartEvent.d.ts +19 -0
- package/dist/application/utils/messageFromAddToCartEvent.js +31 -0
- package/dist/application/utils/widgetTextFromApiWidgetTextResponse.cjs +3 -2
- package/dist/application/utils/widgetTextFromApiWidgetTextResponse.js +3 -2
- package/dist/atoms/app/index.cjs +1 -1
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/app/index.js +1 -1
- package/dist/atoms/app/variant.cjs +2 -2
- package/dist/atoms/app/variant.d.cts +7 -7
- package/dist/atoms/app/variant.d.ts +7 -7
- package/dist/atoms/app/variant.js +2 -2
- package/dist/atoms/chat/chatState.d.cts +19 -19
- package/dist/atoms/chat/chatState.d.ts +19 -19
- package/dist/atoms/chat/form.d.cts +2 -2
- package/dist/atoms/chat/form.d.ts +2 -2
- package/dist/atoms/chat/index.cjs +1 -1
- package/dist/atoms/chat/index.d.cts +2 -2
- package/dist/atoms/chat/index.d.ts +2 -2
- package/dist/atoms/chat/index.js +1 -1
- package/dist/atoms/chat/lastMessage.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.ts +2 -2
- package/dist/atoms/chat/messageQueue.d.cts +6 -6
- package/dist/atoms/chat/messageQueue.d.ts +6 -6
- 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 +3 -3
- package/dist/atoms/chat/replies.d.ts +2 -2
- package/dist/atoms/chat/suggestions.d.cts +2 -2
- package/dist/atoms/chat/suggestions.d.ts +2 -2
- package/dist/atoms/envive/enviveConfig.cjs +7 -4
- package/dist/atoms/envive/enviveConfig.d.cts +16 -14
- package/dist/atoms/envive/enviveConfig.d.ts +16 -14
- package/dist/atoms/envive/enviveConfig.js +6 -4
- 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.cjs +1 -1
- package/dist/atoms/org/graphqlConfig.d.cts +6 -6
- package/dist/atoms/org/graphqlConfig.d.ts +6 -6
- package/dist/atoms/org/graphqlConfig.js +1 -1
- package/dist/atoms/org/index.cjs +1 -1
- package/dist/atoms/org/index.js +1 -1
- 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 +4 -4
- package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
- 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/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +6 -4
- package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +3 -1
- package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +3 -1
- package/dist/contexts/enviveConfigContext/enviveConfigContext.js +6 -4
- package/dist/contexts/enviveContext/enviveContext.cjs +7 -3
- package/dist/contexts/enviveContext/enviveContext.d.cts +5 -1
- package/dist/contexts/enviveContext/enviveContext.d.ts +5 -1
- package/dist/contexts/enviveContext/enviveContext.js +7 -3
- package/dist/contexts/enviveContext/types.d.cts +1 -1
- package/dist/contexts/enviveContext/types.d.ts +1 -1
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +2 -97
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +3 -25
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +3 -25
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +3 -97
- package/dist/contexts/featureFlagServiceContext/index.cjs +2 -1
- package/dist/contexts/featureFlagServiceContext/index.d.cts +2 -1
- package/dist/contexts/featureFlagServiceContext/index.d.ts +2 -1
- package/dist/contexts/featureFlagServiceContext/index.js +2 -1
- package/dist/contexts/graphqlContext/mockV3Config.cjs +1 -1
- package/dist/contexts/graphqlContext/mockV3Config.js +1 -1
- package/dist/contexts/localStorageContext/index.cjs +2 -1
- package/dist/contexts/localStorageContext/index.d.cts +2 -1
- package/dist/contexts/localStorageContext/index.d.ts +2 -1
- package/dist/contexts/localStorageContext/index.js +2 -1
- package/dist/contexts/localStorageContext/localStorageContext.cjs +5 -11
- package/dist/contexts/localStorageContext/localStorageContext.d.cts +3 -7
- package/dist/contexts/localStorageContext/localStorageContext.d.ts +3 -7
- package/dist/contexts/localStorageContext/localStorageContext.js +3 -8
- package/dist/contexts/localStorageContext/localStorageKeys.cjs +12 -0
- package/dist/contexts/localStorageContext/localStorageKeys.d.cts +9 -0
- package/dist/contexts/localStorageContext/localStorageKeys.d.ts +9 -0
- package/dist/contexts/localStorageContext/localStorageKeys.js +11 -0
- package/dist/contexts/pageContext/pageContext.cjs +2 -2
- package/dist/contexts/pageContext/pageContext.js +2 -2
- package/dist/contexts/salesAgentContext/chatAPI.cjs +15 -4
- package/dist/contexts/salesAgentContext/chatAPI.d.cts +4 -1
- package/dist/contexts/salesAgentContext/chatAPI.d.ts +4 -1
- package/dist/contexts/salesAgentContext/chatAPI.js +16 -5
- package/dist/contexts/salesAgentContext/salesAgentContext.cjs +15 -4
- package/dist/contexts/salesAgentContext/salesAgentContext.d.cts +2 -1
- package/dist/contexts/salesAgentContext/salesAgentContext.d.ts +2 -1
- package/dist/contexts/salesAgentContext/salesAgentContext.js +16 -5
- package/dist/contexts/salesAgentContext/salesAgentService.cjs +12 -4
- package/dist/contexts/salesAgentContext/salesAgentService.js +12 -4
- 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/systemSettingsContext/systemSettingsContext.d.ts +2 -2
- package/dist/contexts/types.cjs +1 -1
- package/dist/contexts/types.d.cts +3 -1
- package/dist/contexts/types.d.ts +3 -1
- package/dist/contexts/types.js +1 -1
- package/dist/contexts/typesV3.cjs +1 -1
- package/dist/contexts/typesV3.d.cts +11 -2
- package/dist/contexts/typesV3.d.ts +12 -3
- package/dist/contexts/typesV3.js +1 -1
- package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +1 -1
- package/dist/contexts/widgetConfigContext/widgetConfigContext.js +1 -1
- package/dist/hooks/AddToCart/addToCartErrorMessage.cjs +7 -0
- package/dist/hooks/AddToCart/addToCartErrorMessage.d.cts +5 -0
- package/dist/hooks/AddToCart/addToCartErrorMessage.d.ts +5 -0
- package/dist/hooks/AddToCart/addToCartErrorMessage.js +6 -0
- package/dist/hooks/AddToCart/createAddToCartUserEvent.cjs +20 -0
- package/dist/hooks/AddToCart/createAddToCartUserEvent.d.cts +17 -0
- package/dist/hooks/AddToCart/createAddToCartUserEvent.d.ts +17 -0
- package/dist/hooks/AddToCart/createAddToCartUserEvent.js +19 -0
- package/dist/hooks/AddToCart/index.cjs +9 -0
- package/dist/hooks/AddToCart/index.d.cts +5 -0
- package/dist/hooks/AddToCart/index.d.ts +5 -0
- package/dist/hooks/AddToCart/index.js +6 -0
- package/dist/hooks/AddToCart/parseAddToCartFunction.cjs +27 -0
- package/dist/hooks/AddToCart/parseAddToCartFunction.d.cts +13 -0
- package/dist/hooks/AddToCart/parseAddToCartFunction.d.ts +13 -0
- package/dist/hooks/AddToCart/parseAddToCartFunction.js +27 -0
- package/dist/hooks/AddToCart/useAddToCart.cjs +24 -0
- package/dist/hooks/AddToCart/useAddToCart.d.cts +14 -0
- package/dist/hooks/AddToCart/useAddToCart.d.ts +14 -0
- package/dist/hooks/AddToCart/useAddToCart.js +23 -0
- package/dist/hooks/ChatToggle/useChatToggle.cjs +1 -1
- package/dist/hooks/ChatToggle/useChatToggle.js +1 -1
- package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.cjs +6 -5
- package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.js +3 -2
- package/dist/hooks/PageViewedEvent/usePageViewedEvent.cjs +6 -3
- package/dist/hooks/PageViewedEvent/usePageViewedEvent.js +6 -3
- package/dist/hooks/ProductDetails/index.cjs +9 -0
- package/dist/hooks/ProductDetails/index.d.cts +4 -0
- package/dist/hooks/ProductDetails/index.d.ts +4 -0
- package/dist/hooks/ProductDetails/index.js +4 -0
- package/dist/hooks/ProductDetails/useProductDetails.cjs +53 -0
- package/dist/hooks/ProductDetails/useProductDetails.d.cts +20 -0
- package/dist/hooks/ProductDetails/useProductDetails.d.ts +20 -0
- package/dist/hooks/ProductDetails/useProductDetails.js +52 -0
- package/dist/hooks/ProductDetails/variantSelection.cjs +42 -0
- package/dist/hooks/ProductDetails/variantSelection.d.cts +35 -0
- package/dist/hooks/ProductDetails/variantSelection.d.ts +35 -0
- package/dist/hooks/ProductDetails/variantSelection.js +38 -0
- package/dist/hooks/Search/useSearch.cjs +3 -3
- package/dist/hooks/Search/useSearch.d.cts +1 -1
- package/dist/hooks/Search/useSearch.d.ts +1 -1
- package/dist/hooks/Search/useSearch.js +3 -3
- package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +11 -2
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.cts +1 -10
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts +1 -10
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +11 -2
- package/dist/hooks/WidgetInteraction/types.cjs +13 -3
- package/dist/hooks/WidgetInteraction/types.d.cts +29 -4
- package/dist/hooks/WidgetInteraction/types.d.ts +29 -4
- package/dist/hooks/WidgetInteraction/types.js +13 -3
- package/dist/hooks/WidgetInteraction/utils.cjs +2 -2
- package/dist/hooks/WidgetInteraction/utils.js +2 -2
- package/dist/hooks/utils.d.cts +1 -1
- package/dist/hooks/utils.d.ts +1 -1
- package/dist/services/amplitudeService/amplitudeService.cjs +18 -11
- package/dist/services/amplitudeService/amplitudeService.d.cts +5 -2
- package/dist/services/amplitudeService/amplitudeService.d.ts +5 -2
- package/dist/services/amplitudeService/amplitudeService.js +16 -8
- package/dist/services/enviveConfigService/enviveConfigService.cjs +36 -4
- package/dist/services/enviveConfigService/enviveConfigService.d.cts +4 -1
- package/dist/services/enviveConfigService/enviveConfigService.d.ts +4 -1
- package/dist/services/enviveConfigService/enviveConfigService.js +35 -3
- package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +9 -8
- package/dist/services/enviveConfigService/fetchGraphQLConfig.js +9 -7
- package/dist/services/featureFlagService/index.cjs +101 -0
- package/dist/services/featureFlagService/index.d.cts +28 -0
- package/dist/services/featureFlagService/index.d.ts +28 -0
- package/dist/services/featureFlagService/index.js +101 -0
- package/dist/services/ga4ProjectionService/ga4EventSchema.cjs +8 -2
- package/dist/services/ga4ProjectionService/ga4EventSchema.js +8 -2
- package/dist/services/hardcopyService/hardcopyService.cjs +4 -3
- package/dist/services/hardcopyService/hardcopyService.d.cts +1 -1
- package/dist/services/hardcopyService/hardcopyService.d.ts +1 -1
- package/dist/services/hardcopyService/hardcopyService.js +4 -3
- package/dist/services/urlResolverWarmupService/index.cjs +54 -0
- package/dist/services/urlResolverWarmupService/index.d.cts +40 -0
- package/dist/services/urlResolverWarmupService/index.d.ts +40 -0
- package/dist/services/urlResolverWarmupService/index.js +54 -0
- package/dist/types/enviveConfig.d.cts +6 -2
- package/dist/types/enviveConfig.d.ts +6 -2
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/package.json +18 -2
- package/src/application/__tests__/commerceApiAddToCartRehydration.test.ts +126 -0
- package/src/application/commerce-api.ts +142 -23
- package/src/application/models/api/userEvent.ts +8 -1
- package/src/application/models/api/widgetText.ts +3 -0
- package/src/application/models/featureGates.ts +5 -0
- package/src/application/models/graphql/queries/getProductOptionsQuery.ts +59 -0
- package/src/application/models/validators/__tests__/validateUserEvent.test.ts +41 -0
- package/src/application/models/validators/validateResponse.ts +1 -0
- package/src/application/models/validators/validateUserEvent.ts +7 -2
- package/src/application/utils/__tests__/messageFromAddToCartEvent.test.ts +109 -0
- package/src/application/utils/index.ts +1 -0
- package/src/application/utils/messageFromAddToCartEvent.ts +32 -0
- package/src/application/utils/widgetTextFromApiWidgetTextResponse.ts +1 -0
- package/src/atoms/app/index.ts +1 -1
- package/src/atoms/app/variant.ts +1 -1
- package/src/atoms/envive/enviveConfig.ts +6 -1
- package/src/atoms/org/graphqlConfig.ts +1 -1
- package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +5 -0
- package/src/contexts/enviveContext/enviveContext.tsx +10 -0
- package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +6 -173
- package/src/contexts/localStorageContext/localStorageContext.tsx +2 -5
- package/src/contexts/localStorageContext/localStorageKeys.ts +8 -0
- package/src/contexts/pageContext/pageContext.tsx +1 -1
- package/src/contexts/salesAgentContext/__tests__/chatAPI.test.tsx +63 -0
- package/src/contexts/salesAgentContext/chatAPI.ts +20 -1
- package/src/contexts/salesAgentContext/salesAgentContext.tsx +17 -0
- package/src/contexts/salesAgentContext/salesAgentService.ts +12 -3
- package/src/contexts/types.ts +2 -0
- package/src/contexts/typesV3.ts +14 -0
- package/src/hooks/AddToCart/__tests__/parseAddToCartFunction.test.ts +31 -0
- package/src/hooks/AddToCart/__tests__/useAddToCart.test.tsx +204 -0
- package/src/hooks/AddToCart/addToCartErrorMessage.ts +2 -0
- package/src/hooks/AddToCart/createAddToCartUserEvent.ts +25 -0
- package/src/hooks/AddToCart/index.ts +4 -0
- package/src/hooks/AddToCart/parseAddToCartFunction.ts +31 -0
- package/src/hooks/AddToCart/useAddToCart.ts +35 -0
- package/src/hooks/PageViewedEvent/__tests__/usePageViewedEvent.test.ts +4 -4
- package/src/hooks/PageViewedEvent/usePageViewedEvent.ts +5 -1
- package/src/hooks/ProductDetails/__tests__/useProductDetails.test.tsx +129 -0
- package/src/hooks/ProductDetails/__tests__/variantSelection.test.ts +145 -0
- package/src/hooks/ProductDetails/index.ts +2 -0
- package/src/hooks/ProductDetails/useProductDetails.ts +62 -0
- package/src/hooks/ProductDetails/variantSelection.ts +61 -0
- package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +15 -0
- package/src/hooks/WidgetInteraction/types.ts +43 -2
- package/src/hooks/WidgetInteraction/utils.ts +1 -1
- package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +8 -8
- package/src/services/amplitudeService/amplitudeService.ts +43 -23
- package/src/services/enviveConfigService/__tests__/enviveConfigService.test.ts +208 -0
- package/src/services/enviveConfigService/enviveConfigService.ts +62 -2
- package/src/services/enviveConfigService/fetchGraphQLConfig.ts +17 -6
- package/src/services/featureFlagService/index.ts +176 -0
- package/src/services/ga4ProjectionService/__tests__/ga4ProjectionService.test.ts +36 -0
- package/src/services/ga4ProjectionService/ga4EventSchema.ts +7 -0
- package/src/services/hardcopyService/__tests__/hardcopyService.test.ts +47 -1
- package/src/services/hardcopyService/hardcopyService.ts +5 -0
- package/src/services/urlResolverWarmupService/__tests__/urlResolverWarmupService.test.ts +85 -0
- package/src/services/urlResolverWarmupService/index.ts +89 -0
- package/src/types/enviveConfig.ts +3 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { WidgetTypeV3 } from "../../contexts/typesV3.js";
|
|
2
1
|
import logger_default from "../../application/logging/logger.js";
|
|
3
2
|
import { getQueryParam } from "../../application/utils/urlsParser.js";
|
|
4
3
|
import { toCamelCase } from "../../application/models/utils/snakeToCamelTransformer.js";
|
|
4
|
+
import { WidgetTypeV3 } from "../../contexts/typesV3.js";
|
|
5
5
|
import { EnviveMetricsEventName } from "../amplitudeService/eventNames.js";
|
|
6
6
|
import "../../application/utils/index.js";
|
|
7
7
|
import { getAtomStore } from "../../atoms/atomStore/atomStore.js";
|
|
@@ -198,7 +198,8 @@ var HardcopyService = class {
|
|
|
198
198
|
widget_type: request.widgetType,
|
|
199
199
|
response_id: response.responseId,
|
|
200
200
|
widget_text: response.values,
|
|
201
|
-
request_id: widgetTextRequest.requestId
|
|
201
|
+
request_id: widgetTextRequest.requestId,
|
|
202
|
+
...response.aiSuggestionsAttributionBySlot ? { ai_suggestions_attribution_by_slot: response.aiSuggestionsAttributionBySlot } : {}
|
|
202
203
|
}
|
|
203
204
|
});
|
|
204
205
|
return convertedResponse;
|
|
@@ -228,4 +229,4 @@ var MockHardcopyService = class {
|
|
|
228
229
|
|
|
229
230
|
//#endregion
|
|
230
231
|
export { HardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService };
|
|
231
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlTZXJ2aWNlLmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iLCJ1dWlkIiwiY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWciLCJ3aWRnZXRUZXh0UmVxdWVzdDogV2lkZ2V0VGV4dFJlcXVlc3QiLCJDb21tZXJjZUFwaUNsaWVudCIsIm92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvaGFyZGNvcHlTZXJ2aWNlL2hhcmRjb3B5U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgeyBXaWRnZXRTdHJpbmcsIFdpZGdldFRleHQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS93aWRnZXRUZXh0JztcbmltcG9ydCB7IFdpZGdldFRleHRSZXF1ZXN0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dFJlcXVlc3QnO1xuaW1wb3J0IHsgdG9DYW1lbENhc2UgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBBcHBEZXRhaWxzIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlL2F0b21TdG9yZSc7XG5pbXBvcnQgeyByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbic7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBUcmFja0V2ZW50UGFyYW1zIH0gZnJvbSAnLi4vYW1wbGl0dWRlU2VydmljZSc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2hhcmRjb3B5U2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhcmRjb3B5UmVxdWVzdCB7XG4gIHdpZGdldFR5cGU6IFdpZGdldFR5cGVWMztcbiAgdXNlckV2ZW50OiBVc2VyRXZlbnQ7XG59XG5cbmV4cG9ydCB0eXBlIEhhcmRjb3B5UmVzcG9uc2UgPSB7XG4gIHJlc3BvbnNlSWQ6IHN0cmluZztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcmF3VmFsdWVzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0U3RyaW5nIHwgV2lkZ2V0U3RyaW5nW10+O1xuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhhcmRjb3B5U2VydmljZSB7XG4gIGdldEhhcmRjb3B5KHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFyZGNvcHlTZXJ2aWNlQ29uZmlnIHtcbiAgZ2V0QXBwRGV0YWlsczogKCkgPT4gQXBwRGV0YWlscztcbiAgZ2V0RmVhdHVyZUZsYWdzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgdHJhY2tFdmVudD86IChwYXJhbXM6IFRyYWNrRXZlbnRQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8vIFNhbXBsZSByZXNwb25zZXMgdXNlZCBib3RoIGFzIGZhbGxiYWNrIHdoZW4gdGhlIGJhY2tlbmQgZmFpbHMgYW5kIGJ5IE1vY2tIYXJkY29weVNlcnZpY2UuXG5leHBvcnQgY29uc3QgTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4gPSB7XG4gIFtXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWM106IHtcbiAgICByZXNwb25zZUlkOiB1dWlkKCksXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdOZWVkIHNvbWUgaGVscD8nLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIG51bWJlck9mQ3VzdG9tZXJzVGV4dDogJzEyMyBjdXN0b21lcnMnLFxuICAgICAgY3VzdG9tZXJRdWVyeVRleHQ6ICdmb3VuZCB3aGF0IHRoZXkgd2VyZSBsb29raW5nIGZvci4uLicsXG4gICAgICBwcmltYXJ5QnV0dG9uVGV4dDogJ1N0YXJ0IHNob3BwaW5nJyxcbiAgICAgIHNlY29uZGFyeUJ1dHRvblRpdGxlVGV4dDogJ1BvcHVsYXIgc2VhcmNoZXMnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doeSBzaG91bGQgSSBidXkgZnJvbSB5b3U/JyxcbiAgICAgICAgJ0hvdyBkbyBJIHJldHVybiBhbiBpdGVtPycsXG4gICAgICAgICdOZXcgYXJyaXZhbHMnLFxuICAgICAgICAnU2FsZSBpdGVtcycsXG4gICAgICAgICdQb3B1bGFyIGl0ZW1zJyxcbiAgICAgIF0sXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICBoZWFkbGluZVRleHQ6ICdOZWVkIGhlbHAgZmluZGluZycsXG4gICAgICBhbmltYXRlZFRleHRTZXF1ZW5jZTogW1xuICAgICAgICAndGhlIHBlcmZlY3QgZ2lmdCBmb3IgeW91ciBsb3ZlZCBvbmVzPycsXG4gICAgICAgICdzb21ldGhpbmcgc3BlY2lhbCBmb3IgdGhlIGhvbGlkYXlzPycsXG4gICAgICAgICd0aGUgaWRlYWwgcHJlc2VudCBmb3Igc29tZW9uZSBzcGVjaWFsPycsXG4gICAgICBdLFxuICAgICAgaGludFRleHQ6ICdBc2sgbWUgYW55dGhpbmcnLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgXSxcbiAgICAgIHRleHRGaWVsZEFyaWFMYWJlbDogJ0FzayBtZSBhbnl0aGluZycsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0NvbXBhcmlzb25WM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIGhlYWRsaW5lVGV4dDogJ05lZWQgaGVscCBjb21wYXJpbmc/JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0xvYWRpbmdWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ05lZWQgc29tZSBoZWxwPycsXG4gICAgICBwcm9tcHRCdXR0b25zVGV4dHM6IFsnSGVscCBtZSBmaW5kIGEgcHJvZHVjdCcsIFwiV2hhdCdzIG9uIHlvdXIgbWluZD9cIiwgJ1RhbGsgdG8gYSBodW1hbiddLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgaGVhZGxpbmU6ICdEaXNjb3ZlciBZb3VyIFBlcmZlY3QgU3R5bGUnLFxuICAgICAgYW5pbWF0ZWRUZXh0OiBbXG4gICAgICAgICd0aGUgcGVyZmVjdCBvdXRmaXQgZm9yIGFueSBvY2Nhc2lvbicsXG4gICAgICAgICd0cmVuZGluZyBmYXNoaW9uIHRoYXQgZml0cyB5b3VyIGxpZmVzdHlsZScsXG4gICAgICAgICdxdWFsaXR5IHBpZWNlcyB0aGF0IGxhc3QnLFxuICAgICAgXSxcbiAgICAgIHByb21wdHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgICAgcGxhY2Vob2xkZXI6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRmxvYXRpbmdDaGF0VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgICAgbGVmdFRvZ2dsZUxhYmVsOiAnU2hvcCB3aXRoIEFJJyxcbiAgICAgIHJpZ2h0VG9nZ2xlTGFiZWw6ICdMaXZlIHN1cHBvcnQnLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRnVsbFBhZ2VTYWxlc0FnZW50VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgIH0sXG4gIH0sXG59O1xuXG5jb25zdCBjb252ZXJ0VG9IYXJkY29weVJlc3BvbnNlID0gKHJlc3BvbnNlOiBXaWRnZXRUZXh0KTogSGFyZGNvcHlSZXNwb25zZSA9PiAoe1xuICByZXNwb25zZUlkOiByZXNwb25zZS5yZXNwb25zZUlkLFxuICBsYW5ndWFnZTogcmVzcG9uc2UubGFuZ3VhZ2UsXG4gIHJhd1ZhbHVlczogcmVzcG9uc2UudmFsdWVzLFxuICB2YWx1ZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZS52YWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICB0b0NhbWVsQ2FzZShrZXkpLFxuICAgICAgdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0udmFsdWUgOiB2YWx1ZS5tYXAodiA9PiB2LnZhbHVlKSxcbiAgICBdKSxcbiAgKSxcbn0pO1xuXG5leHBvcnQgY2xhc3MgSGFyZGNvcHlTZXJ2aWNlIGltcGxlbWVudHMgSUhhcmRjb3B5U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWcpIHt9XG5cbiAgYXN5bmMgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiB7XG4gICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgZ2V0QXRvbVN0b3JlKCkuZ2V0KHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tKSB8fFxuICAgICAgdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgd2lkZ2V0VGV4dFJlcXVlc3Q6IFdpZGdldFRleHRSZXF1ZXN0ID0ge1xuICAgICAgcmVxdWVzdElkOiB1dWlkKCksXG4gICAgICB3aWRnZXRUeXBlOiByZXF1ZXN0LndpZGdldFR5cGUsXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbmZpZy5nZXRBcHBEZXRhaWxzKCksXG4gICAgICBmZWF0dXJlRmxhZ3M6IHRoaXMuY29uZmlnLmdldEZlYXR1cmVGbGFncygpLFxuICAgICAgbGFuZ3VhZ2U6IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgJ2VuJyxcbiAgICAgIG92ZXJyaWRlQ29uZmlnVmVyc2lvbixcbiAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnRyYWNrRXZlbnQ/Lih7XG4gICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlcXVlc3QsXG4gICAgICBldmVudFByb3BzOiB7XG4gICAgICAgIHdpZGdldF90eXBlOiByZXF1ZXN0LndpZGdldFR5cGUsXG4gICAgICAgIHJlcXVlc3RfaWQ6IHdpZGdldFRleHRSZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRIYXJkY29weSh3aWRnZXRUZXh0UmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUmVzcG9uc2UgPSBjb252ZXJ0VG9IYXJkY29weVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdjb252ZXJ0ZWQgcmVzcG9uc2UnLCBjb252ZXJ0ZWRSZXNwb25zZSk7XG4gICAgICAgIHRoaXMuY29uZmlnLnRyYWNrRXZlbnQ/Lih7XG4gICAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgICAgcmVzcG9uc2VfaWQ6IHJlc3BvbnNlLnJlc3BvbnNlSWQsXG4gICAgICAgICAgICB3aWRnZXRfdGV4dDogcmVzcG9uc2UudmFsdWVzLFxuICAgICAgICAgICAgcmVxdWVzdF9pZDogd2lkZ2V0VGV4dFJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udmVydGVkUmVzcG9uc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignZXJyb3IgZ2V0dGluZyBoYXJkY29weSBmcm9tIGJhY2tlbmQnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgY29uc3QgbW9ja1Jlc3BvbnNlID0gTU9DS19IQVJEQ09QWV9SRVNQT05TRVtyZXF1ZXN0LndpZGdldFR5cGVdO1xuICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnbm8gcmVhbCByZXNwb25zZSwgdXNpbmcgbW9jaycsIG1vY2tSZXNwb25zZSk7XG4gICAgICByZXR1cm4gbW9ja1Jlc3BvbnNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tIYXJkY29weVNlcnZpY2UgaW1wbGVtZW50cyBJSGFyZGNvcHlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvdmVycmlkZXM6IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+ID0ge30pIHt9XG5cbiAgYXN5bmMgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZmFsbGJhY2tXaWRnZXRUeXBlID1cbiAgICAgIHJlcXVlc3Qud2lkZ2V0VHlwZSA9PT0gV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNcbiAgICAgICAgPyBXaWRnZXRUeXBlVjMuSW1hZ2VQcm9tcHRDYXJkVjNcbiAgICAgICAgOiByZXF1ZXN0LndpZGdldFR5cGU7XG5cbiAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICB0aGlzLm92ZXJyaWRlc1tyZXF1ZXN0LndpZGdldFR5cGVdID8/XG4gICAgICB0aGlzLm92ZXJyaWRlc1tmYWxsYmFja1dpZGdldFR5cGVdID8/XG4gICAgICBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFW3JlcXVlc3Qud2lkZ2V0VHlwZV07XG5cbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBY0EsTUFBTSxTQUFTLElBQUlBLGVBQU8sa0JBQWtCO0FBeUI1QyxNQUFhQyx5QkFBMEU7RUFDcEYsYUFBYSxtQkFBbUI7RUFDL0IsWUFBWUMsSUFBTTtFQUNsQixVQUFVO0VBQ1YsUUFBUSxFQUNOLG1CQUFtQjtHQUNqQjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0QsRUFDRjtFQUNGO0VBQ0EsYUFBYSx5QkFBeUI7RUFDckMsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNaLG1CQUFtQjtJQUNqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7R0FDRjtFQUNGO0VBQ0EsYUFBYSxnQkFBZ0I7RUFDNUIsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNaLHVCQUF1QjtHQUN2QixtQkFBbUI7R0FDbkIsbUJBQW1CO0dBQ25CLDBCQUEwQjtHQUMxQixzQkFBc0I7SUFDcEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBQ0QsMEJBQTBCO0dBQzNCO0VBQ0Y7RUFDQSxhQUFhLG9CQUFvQjtFQUNoQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osY0FBYztHQUNkLHNCQUFzQjtJQUNwQjtJQUNBO0lBQ0E7SUFDRDtHQUNELFVBQVU7R0FDVixtQkFBbUI7SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNELG9CQUFvQjtHQUNyQjtFQUNGO0VBQ0EsYUFBYSwwQkFBMEI7RUFDdEMsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNaLGNBQWM7R0FDZCwwQkFBMEI7R0FDM0I7RUFDRjtFQUNBLGFBQWEsdUJBQXVCO0VBQ25DLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWiwwQkFBMEI7R0FDM0I7RUFDRjtFQUNBLGFBQWEsZ0JBQWdCO0VBQzVCLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWiwwQkFBMEI7R0FDM0I7RUFDRjtFQUNBLGFBQWEsa0NBQWtDO0VBQzlDLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWixvQkFBb0I7SUFBQztJQUEwQjtJQUF3QjtJQUFrQjtHQUN6RiwwQkFBMEI7R0FDM0I7RUFDRjtFQUNBLGFBQWEsZ0JBQWdCO0VBQzVCLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFVBQVU7R0FDVixjQUFjO0lBQ1o7SUFDQTtJQUNBO0lBQ0Q7R0FDRCxTQUFTO0lBQ1A7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBQ0QsYUFBYTtHQUNkO0VBQ0Y7RUFDQSxhQUFhLGlCQUFpQjtFQUM3QixZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixxQkFBcUI7R0FDckIsb0JBQ0U7R0FDRixvQ0FBb0M7R0FDcEMsZ0JBQWdCO0dBQ2hCLGlCQUFpQjtHQUNqQixrQkFBa0I7R0FDbkI7RUFDRjtFQUNBLGFBQWEsdUJBQXVCO0VBQ25DLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLHFCQUFxQjtHQUNyQixvQkFDRTtHQUNGLG9DQUFvQztHQUNwQyxnQkFBZ0I7R0FDakI7RUFDRjtDQUNGO0FBRUQsTUFBTSw2QkFBNkIsY0FBNEM7Q0FDN0UsWUFBWSxTQUFTO0NBQ3JCLFVBQVUsU0FBUztDQUNuQixXQUFXLFNBQVM7Q0FDcEIsUUFBUSxPQUFPLFlBQ2IsT0FBTyxRQUFRLFNBQVMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsQ0FDcEQsWUFBWSxJQUFJLEVBQ2hCLE1BQU0sV0FBVyxJQUFJLE1BQU0sR0FBRyxRQUFRLE1BQU0sS0FBSSxNQUFLLEVBQUUsTUFBTSxDQUM5RCxDQUFDLENBQ0g7Q0FDRjtBQUVELElBQWEsa0JBQWIsTUFBeUQ7Q0FDdkQsWUFBWSxBQUFRQyxRQUErQjtFQUEvQjs7Q0FFcEIsTUFBTSxZQUFZLFNBQXFEO0VBQ3JFLE1BQU0sd0JBQ0osY0FBYyx3QkFBd0IsSUFDdEMsY0FBYyx3QkFBd0IsSUFDdEMsY0FBYyxDQUFDLElBQUksOEJBQThCLElBQ2pEO0VBRUYsTUFBTUMsb0JBQXVDO0dBQzNDLFdBQVdGLElBQU07R0FDakIsWUFBWSxRQUFRO0dBQ3BCLFNBQVMsS0FBSyxPQUFPLGVBQWU7R0FDcEMsY0FBYyxLQUFLLE9BQU8saUJBQWlCO0dBQzNDLFVBQVUsVUFBVSxVQUFVLE1BQU07R0FDcEM7R0FDQSxLQUFLLE9BQU8sU0FBUztHQUN0QjtBQUVELE9BQUssT0FBTyxhQUFhO0dBQ3ZCLFdBQVcsdUJBQXVCO0dBQ2xDLFlBQVk7SUFDVixhQUFhLFFBQVE7SUFDckIsWUFBWSxrQkFBa0I7SUFDL0I7R0FDRixDQUFDO0FBRUYsTUFBSTtHQUNGLE1BQU0sV0FBVyxNQUFNRyxxQkFBa0IsWUFBWSxrQkFBa0I7QUFDdkUsT0FBSSxVQUFVO0lBQ1osTUFBTSxvQkFBb0IsMEJBQTBCLFNBQVM7QUFDN0QsV0FBTyxTQUFTLHNCQUFzQixrQkFBa0I7QUFDeEQsU0FBSyxPQUFPLGFBQWE7S0FDdkIsV0FBVyx1QkFBdUI7S0FDbEMsWUFBWTtNQUNWLGFBQWEsUUFBUTtNQUNyQixhQUFhLFNBQVM7TUFDdEIsYUFBYSxTQUFTO01BQ3RCLFlBQVksa0JBQWtCO01BQy9CO0tBQ0YsQ0FBQztBQUNGLFdBQU87O1dBRUYsT0FBTztBQUNkLFVBQU8sU0FBUyx1Q0FBdUMsTUFBTTs7RUFHL0QsTUFBTSxlQUFlLHVCQUF1QixRQUFRO0FBQ3BELE1BQUksY0FBYztBQUNoQixVQUFPLFNBQVMsZ0NBQWdDLGFBQWE7QUFDN0QsVUFBTzs7QUFFVCxRQUFNLElBQUksTUFBTSwrQ0FBK0MsUUFBUSxhQUFhOzs7QUFJeEYsSUFBYSxzQkFBYixNQUE2RDtDQUMzRCxZQUFZLEFBQVFDLFlBQTZELEVBQUUsRUFBRTtFQUFqRTs7Q0FFcEIsTUFBTSxZQUFZLFNBQXFEO0VBQ3JFLE1BQU0scUJBQ0osUUFBUSxlQUFlLGFBQWEsZ0JBQ2hDLGFBQWEsb0JBQ2IsUUFBUTtFQUVkLE1BQU0sV0FDSixLQUFLLFVBQVUsUUFBUSxlQUN2QixLQUFLLFVBQVUsdUJBQ2YsdUJBQXVCLFFBQVE7QUFFakMsTUFBSSxDQUFDLFNBQ0gsT0FBTSxJQUFJLE1BQU0sK0NBQStDLFFBQVEsYUFBYTtBQUV0RixTQUFPIn0=
|
|
232
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlTZXJ2aWNlLmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iLCJ1dWlkIiwiY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWciLCJ3aWRnZXRUZXh0UmVxdWVzdDogV2lkZ2V0VGV4dFJlcXVlc3QiLCJDb21tZXJjZUFwaUNsaWVudCIsIm92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvaGFyZGNvcHlTZXJ2aWNlL2hhcmRjb3B5U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgeyBXaWRnZXRTdHJpbmcsIFdpZGdldFRleHQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS93aWRnZXRUZXh0JztcbmltcG9ydCB7IFdpZGdldFRleHRSZXF1ZXN0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dFJlcXVlc3QnO1xuaW1wb3J0IHsgdG9DYW1lbENhc2UgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBBcHBEZXRhaWxzIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlL2F0b21TdG9yZSc7XG5pbXBvcnQgeyByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbic7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBUcmFja0V2ZW50UGFyYW1zIH0gZnJvbSAnLi4vYW1wbGl0dWRlU2VydmljZSc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2hhcmRjb3B5U2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhcmRjb3B5UmVxdWVzdCB7XG4gIHdpZGdldFR5cGU6IFdpZGdldFR5cGVWMztcbiAgdXNlckV2ZW50OiBVc2VyRXZlbnQ7XG59XG5cbmV4cG9ydCB0eXBlIEhhcmRjb3B5UmVzcG9uc2UgPSB7XG4gIHJlc3BvbnNlSWQ6IHN0cmluZztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcmF3VmFsdWVzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0U3RyaW5nIHwgV2lkZ2V0U3RyaW5nW10+O1xuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhhcmRjb3B5U2VydmljZSB7XG4gIGdldEhhcmRjb3B5KHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFyZGNvcHlTZXJ2aWNlQ29uZmlnIHtcbiAgZ2V0QXBwRGV0YWlsczogKCkgPT4gQXBwRGV0YWlscztcbiAgZ2V0RmVhdHVyZUZsYWdzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgdHJhY2tFdmVudD86IChwYXJhbXM6IFRyYWNrRXZlbnRQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8vIFNhbXBsZSByZXNwb25zZXMgdXNlZCBib3RoIGFzIGZhbGxiYWNrIHdoZW4gdGhlIGJhY2tlbmQgZmFpbHMgYW5kIGJ5IE1vY2tIYXJkY29weVNlcnZpY2UuXG5leHBvcnQgY29uc3QgTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4gPSB7XG4gIFtXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWM106IHtcbiAgICByZXNwb25zZUlkOiB1dWlkKCksXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdOZWVkIHNvbWUgaGVscD8nLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIG51bWJlck9mQ3VzdG9tZXJzVGV4dDogJzEyMyBjdXN0b21lcnMnLFxuICAgICAgY3VzdG9tZXJRdWVyeVRleHQ6ICdmb3VuZCB3aGF0IHRoZXkgd2VyZSBsb29raW5nIGZvci4uLicsXG4gICAgICBwcmltYXJ5QnV0dG9uVGV4dDogJ1N0YXJ0IHNob3BwaW5nJyxcbiAgICAgIHNlY29uZGFyeUJ1dHRvblRpdGxlVGV4dDogJ1BvcHVsYXIgc2VhcmNoZXMnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doeSBzaG91bGQgSSBidXkgZnJvbSB5b3U/JyxcbiAgICAgICAgJ0hvdyBkbyBJIHJldHVybiBhbiBpdGVtPycsXG4gICAgICAgICdOZXcgYXJyaXZhbHMnLFxuICAgICAgICAnU2FsZSBpdGVtcycsXG4gICAgICAgICdQb3B1bGFyIGl0ZW1zJyxcbiAgICAgIF0sXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICBoZWFkbGluZVRleHQ6ICdOZWVkIGhlbHAgZmluZGluZycsXG4gICAgICBhbmltYXRlZFRleHRTZXF1ZW5jZTogW1xuICAgICAgICAndGhlIHBlcmZlY3QgZ2lmdCBmb3IgeW91ciBsb3ZlZCBvbmVzPycsXG4gICAgICAgICdzb21ldGhpbmcgc3BlY2lhbCBmb3IgdGhlIGhvbGlkYXlzPycsXG4gICAgICAgICd0aGUgaWRlYWwgcHJlc2VudCBmb3Igc29tZW9uZSBzcGVjaWFsPycsXG4gICAgICBdLFxuICAgICAgaGludFRleHQ6ICdBc2sgbWUgYW55dGhpbmcnLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgXSxcbiAgICAgIHRleHRGaWVsZEFyaWFMYWJlbDogJ0FzayBtZSBhbnl0aGluZycsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0NvbXBhcmlzb25WM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIGhlYWRsaW5lVGV4dDogJ05lZWQgaGVscCBjb21wYXJpbmc/JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0xvYWRpbmdWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ05lZWQgc29tZSBoZWxwPycsXG4gICAgICBwcm9tcHRCdXR0b25zVGV4dHM6IFsnSGVscCBtZSBmaW5kIGEgcHJvZHVjdCcsIFwiV2hhdCdzIG9uIHlvdXIgbWluZD9cIiwgJ1RhbGsgdG8gYSBodW1hbiddLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgaGVhZGxpbmU6ICdEaXNjb3ZlciBZb3VyIFBlcmZlY3QgU3R5bGUnLFxuICAgICAgYW5pbWF0ZWRUZXh0OiBbXG4gICAgICAgICd0aGUgcGVyZmVjdCBvdXRmaXQgZm9yIGFueSBvY2Nhc2lvbicsXG4gICAgICAgICd0cmVuZGluZyBmYXNoaW9uIHRoYXQgZml0cyB5b3VyIGxpZmVzdHlsZScsXG4gICAgICAgICdxdWFsaXR5IHBpZWNlcyB0aGF0IGxhc3QnLFxuICAgICAgXSxcbiAgICAgIHByb21wdHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgICAgcGxhY2Vob2xkZXI6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRmxvYXRpbmdDaGF0VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgICAgbGVmdFRvZ2dsZUxhYmVsOiAnU2hvcCB3aXRoIEFJJyxcbiAgICAgIHJpZ2h0VG9nZ2xlTGFiZWw6ICdMaXZlIHN1cHBvcnQnLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRnVsbFBhZ2VTYWxlc0FnZW50VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgIH0sXG4gIH0sXG59O1xuXG5jb25zdCBjb252ZXJ0VG9IYXJkY29weVJlc3BvbnNlID0gKHJlc3BvbnNlOiBXaWRnZXRUZXh0KTogSGFyZGNvcHlSZXNwb25zZSA9PiAoe1xuICByZXNwb25zZUlkOiByZXNwb25zZS5yZXNwb25zZUlkLFxuICBsYW5ndWFnZTogcmVzcG9uc2UubGFuZ3VhZ2UsXG4gIHJhd1ZhbHVlczogcmVzcG9uc2UudmFsdWVzLFxuICB2YWx1ZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZS52YWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICB0b0NhbWVsQ2FzZShrZXkpLFxuICAgICAgdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0udmFsdWUgOiB2YWx1ZS5tYXAodiA9PiB2LnZhbHVlKSxcbiAgICBdKSxcbiAgKSxcbn0pO1xuXG5leHBvcnQgY2xhc3MgSGFyZGNvcHlTZXJ2aWNlIGltcGxlbWVudHMgSUhhcmRjb3B5U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWcpIHt9XG5cbiAgYXN5bmMgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiB7XG4gICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgZ2V0QXRvbVN0b3JlKCkuZ2V0KHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tKSB8fFxuICAgICAgdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgd2lkZ2V0VGV4dFJlcXVlc3Q6IFdpZGdldFRleHRSZXF1ZXN0ID0ge1xuICAgICAgcmVxdWVzdElkOiB1dWlkKCksXG4gICAgICB3aWRnZXRUeXBlOiByZXF1ZXN0LndpZGdldFR5cGUsXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbmZpZy5nZXRBcHBEZXRhaWxzKCksXG4gICAgICBmZWF0dXJlRmxhZ3M6IHRoaXMuY29uZmlnLmdldEZlYXR1cmVGbGFncygpLFxuICAgICAgbGFuZ3VhZ2U6IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgJ2VuJyxcbiAgICAgIG92ZXJyaWRlQ29uZmlnVmVyc2lvbixcbiAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnRyYWNrRXZlbnQ/Lih7XG4gICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlcXVlc3QsXG4gICAgICBldmVudFByb3BzOiB7XG4gICAgICAgIHdpZGdldF90eXBlOiByZXF1ZXN0LndpZGdldFR5cGUsXG4gICAgICAgIHJlcXVlc3RfaWQ6IHdpZGdldFRleHRSZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRIYXJkY29weSh3aWRnZXRUZXh0UmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUmVzcG9uc2UgPSBjb252ZXJ0VG9IYXJkY29weVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdjb252ZXJ0ZWQgcmVzcG9uc2UnLCBjb252ZXJ0ZWRSZXNwb25zZSk7XG4gICAgICAgIHRoaXMuY29uZmlnLnRyYWNrRXZlbnQ/Lih7XG4gICAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgICAgcmVzcG9uc2VfaWQ6IHJlc3BvbnNlLnJlc3BvbnNlSWQsXG4gICAgICAgICAgICB3aWRnZXRfdGV4dDogcmVzcG9uc2UudmFsdWVzLFxuICAgICAgICAgICAgcmVxdWVzdF9pZDogd2lkZ2V0VGV4dFJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgLy8gV2hpY2ggbWV0aG9kIHNlcnZlZCBlYWNoIG92ZXJyaWRkZW4gc2xvdCDigJQgdHJhaW5pbmcvYXR0cmlidXRpb25cbiAgICAgICAgICAgIC8vIHJlYWRzIHRoaXMgZnJvbSB0aGUgYW5hbHl0aWNzIGV2ZW50OyBwYXNzZWQgdGhyb3VnaCB2ZXJiYXRpbS5cbiAgICAgICAgICAgIC4uLihyZXNwb25zZS5haVN1Z2dlc3Rpb25zQXR0cmlidXRpb25CeVNsb3RcbiAgICAgICAgICAgICAgPyB7IGFpX3N1Z2dlc3Rpb25zX2F0dHJpYnV0aW9uX2J5X3Nsb3Q6IHJlc3BvbnNlLmFpU3VnZ2VzdGlvbnNBdHRyaWJ1dGlvbkJ5U2xvdCB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udmVydGVkUmVzcG9uc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignZXJyb3IgZ2V0dGluZyBoYXJkY29weSBmcm9tIGJhY2tlbmQnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgY29uc3QgbW9ja1Jlc3BvbnNlID0gTU9DS19IQVJEQ09QWV9SRVNQT05TRVtyZXF1ZXN0LndpZGdldFR5cGVdO1xuICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnbm8gcmVhbCByZXNwb25zZSwgdXNpbmcgbW9jaycsIG1vY2tSZXNwb25zZSk7XG4gICAgICByZXR1cm4gbW9ja1Jlc3BvbnNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tIYXJkY29weVNlcnZpY2UgaW1wbGVtZW50cyBJSGFyZGNvcHlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvdmVycmlkZXM6IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+ID0ge30pIHt9XG5cbiAgYXN5bmMgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZmFsbGJhY2tXaWRnZXRUeXBlID1cbiAgICAgIHJlcXVlc3Qud2lkZ2V0VHlwZSA9PT0gV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNcbiAgICAgICAgPyBXaWRnZXRUeXBlVjMuSW1hZ2VQcm9tcHRDYXJkVjNcbiAgICAgICAgOiByZXF1ZXN0LndpZGdldFR5cGU7XG5cbiAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICB0aGlzLm92ZXJyaWRlc1tyZXF1ZXN0LndpZGdldFR5cGVdID8/XG4gICAgICB0aGlzLm92ZXJyaWRlc1tmYWxsYmFja1dpZGdldFR5cGVdID8/XG4gICAgICBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFW3JlcXVlc3Qud2lkZ2V0VHlwZV07XG5cbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBY0EsTUFBTSxTQUFTLElBQUlBLGVBQU8sa0JBQWtCO0FBeUI1QyxNQUFhQyx5QkFBMEU7RUFDcEYsYUFBYSxtQkFBbUI7RUFDL0IsWUFBWUMsSUFBTTtFQUNsQixVQUFVO0VBQ1YsUUFBUSxFQUNOLG1CQUFtQjtHQUNqQjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0QsRUFDRjtFQUNGO0VBQ0EsYUFBYSx5QkFBeUI7RUFDckMsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNaLG1CQUFtQjtJQUNqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7R0FDRjtFQUNGO0VBQ0EsYUFBYSxnQkFBZ0I7RUFDNUIsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNaLHVCQUF1QjtHQUN2QixtQkFBbUI7R0FDbkIsbUJBQW1CO0dBQ25CLDBCQUEwQjtHQUMxQixzQkFBc0I7SUFDcEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBQ0QsMEJBQTBCO0dBQzNCO0VBQ0Y7RUFDQSxhQUFhLG9CQUFvQjtFQUNoQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osY0FBYztHQUNkLHNCQUFzQjtJQUNwQjtJQUNBO0lBQ0E7SUFDRDtHQUNELFVBQVU7R0FDVixtQkFBbUI7SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNELG9CQUFvQjtHQUNyQjtFQUNGO0VBQ0EsYUFBYSwwQkFBMEI7RUFDdEMsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dB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
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const require_logger = require('../../application/logging/logger.cjs');
|
|
2
|
+
const require_atoms_envive_enviveConfig = require('../../atoms/envive/enviveConfig.cjs');
|
|
3
|
+
const require_atomStore = require('../../atoms/atomStore/atomStore.cjs');
|
|
4
|
+
const require_variant = require('../../atoms/app/variant.cjs');
|
|
5
|
+
const require_resolvedBaseConfigVersion = require('../../atoms/envive/resolvedBaseConfigVersion.cjs');
|
|
6
|
+
const require_graphqlConfig = require('../../atoms/org/graphqlConfig.cjs');
|
|
7
|
+
const require_application_commerce_api = require('../../application/commerce-api.cjs');
|
|
8
|
+
|
|
9
|
+
//#region src/services/urlResolverWarmupService/index.ts
|
|
10
|
+
const logger = new require_logger.default("urlResolverWarmupService");
|
|
11
|
+
/**
|
|
12
|
+
* Fires the /v1/url_resolving request as soon as the org config is available,
|
|
13
|
+
* instead of waiting for the React tree to mount and PageProvider's effect to
|
|
14
|
+
* run — that removes a full network round trip from the first-widget-paint
|
|
15
|
+
* critical path.
|
|
16
|
+
*
|
|
17
|
+
* Seeds the same atoms EnviveProvider/EnviveConfigProvider populate later
|
|
18
|
+
* (with identical values) so the request context matches the one
|
|
19
|
+
* PageProvider would send, then stores the response in the
|
|
20
|
+
* sessionStorage-backed urlResolverAtom that PageProvider consults before
|
|
21
|
+
* fetching. Concurrent calls for the same URL are deduped inside
|
|
22
|
+
* CommerceApiClient.resolveUrl.
|
|
23
|
+
*/
|
|
24
|
+
const warmUrlResolver = async ({ baseUrl, apiKey, enviveServiceConfig, show, enviveOn, env, contextSource, featureFlagService }) => {
|
|
25
|
+
try {
|
|
26
|
+
const store = require_atomStore.getAtomStore();
|
|
27
|
+
const cleansedUrl = window.location.href.toLowerCase().trim();
|
|
28
|
+
if (store.get(require_variant.urlResolverAtom)[cleansedUrl]) return;
|
|
29
|
+
if (store.get(require_atoms_envive_enviveConfig.enviveConfigAtom) === void 0) store.set(require_atoms_envive_enviveConfig.enviveConfigAtom, {
|
|
30
|
+
baseUrl,
|
|
31
|
+
orgLevelApiKey: apiKey,
|
|
32
|
+
orgShortName: enviveServiceConfig.org.org.short_name,
|
|
33
|
+
orgId: enviveServiceConfig.org.org.id,
|
|
34
|
+
show,
|
|
35
|
+
enviveOn,
|
|
36
|
+
env,
|
|
37
|
+
contextSource
|
|
38
|
+
});
|
|
39
|
+
if (featureFlagService && store.get(require_graphqlConfig.featureFlagServiceAtom) === void 0) store.set(require_graphqlConfig.featureFlagServiceAtom, { featureFlagService });
|
|
40
|
+
const { baseVersion, baseVersionSource } = enviveServiceConfig.orgConfig?.resolution ?? {};
|
|
41
|
+
if (baseVersion && baseVersionSource && baseVersionSource !== "deployed") store.set(require_resolvedBaseConfigVersion.resolvedBaseConfigVersionAtom, baseVersion);
|
|
42
|
+
const response = await require_application_commerce_api.default.resolveUrl(cleansedUrl);
|
|
43
|
+
store.set(require_variant.urlResolverAtom, {
|
|
44
|
+
url: cleansedUrl,
|
|
45
|
+
response
|
|
46
|
+
});
|
|
47
|
+
} catch (err) {
|
|
48
|
+
logger.logDebug("URL resolver warm-up failed", err);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
exports.warmUrlResolver = warmUrlResolver;
|
|
54
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiZ2V0QXRvbVN0b3JlIiwidXJsUmVzb2x2ZXJBdG9tIiwiZW52aXZlQ29uZmlnQXRvbSIsImZlYXR1cmVGbGFnU2VydmljZUF0b20iLCJyZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSIsIkNvbW1lcmNlQXBpQ2xpZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VybFJlc29sdmVyV2FybXVwU2VydmljZS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBVcmxSZXNvbHZlclJlc3BvbnNlLCB1cmxSZXNvbHZlckF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuaW1wb3J0IHsgZ2V0QXRvbVN0b3JlIH0gZnJvbSAnc3JjL2F0b21zL2F0b21TdG9yZS9hdG9tU3RvcmUnO1xuaW1wb3J0IHsgZW52aXZlQ29uZmlnQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvZW52aXZlQ29uZmlnJztcbmltcG9ydCB7IHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tIH0gZnJvbSAnc3JjL2F0b21zL2Vudml2ZS9yZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uJztcbmltcG9ydCB7IGZlYXR1cmVGbGFnU2VydmljZUF0b20gfSBmcm9tICdzcmMvYXRvbXMvb3JnL2dyYXBocWxDb25maWcnO1xuaW1wb3J0IHsgRW52aXZlU2VydmljZUNvbmZpZyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9lbnZpdmVDb25maWdTZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL3NlcnZpY2VzL2ZlYXR1cmVGbGFnU2VydmljZSc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ3VybFJlc29sdmVyV2FybXVwU2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdhcm1VcmxSZXNvbHZlclBhcmFtcyB7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIGVudml2ZVNlcnZpY2VDb25maWc6IEVudml2ZVNlcnZpY2VDb25maWc7XG4gIHNob3c/OiBib29sZWFuO1xuICBlbnZpdmVPbj86IGJvb2xlYW47XG4gIGVudj86IHN0cmluZztcbiAgY29udGV4dFNvdXJjZT86IHN0cmluZztcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlPzogRmVhdHVyZUZsYWdTZXJ2aWNlO1xufVxuXG4vKipcbiAqIEZpcmVzIHRoZSAvdjEvdXJsX3Jlc29sdmluZyByZXF1ZXN0IGFzIHNvb24gYXMgdGhlIG9yZyBjb25maWcgaXMgYXZhaWxhYmxlLFxuICogaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgUmVhY3QgdHJlZSB0byBtb3VudCBhbmQgUGFnZVByb3ZpZGVyJ3MgZWZmZWN0IHRvXG4gKiBydW4g4oCUIHRoYXQgcmVtb3ZlcyBhIGZ1bGwgbmV0d29yayByb3VuZCB0cmlwIGZyb20gdGhlIGZpcnN0LXdpZGdldC1wYWludFxuICogY3JpdGljYWwgcGF0aC5cbiAqXG4gKiBTZWVkcyB0aGUgc2FtZSBhdG9tcyBFbnZpdmVQcm92aWRlci9FbnZpdmVDb25maWdQcm92aWRlciBwb3B1bGF0ZSBsYXRlclxuICogKHdpdGggaWRlbnRpY2FsIHZhbHVlcykgc28gdGhlIHJlcXVlc3QgY29udGV4dCBtYXRjaGVzIHRoZSBvbmVcbiAqIFBhZ2VQcm92aWRlciB3b3VsZCBzZW5kLCB0aGVuIHN0b3JlcyB0aGUgcmVzcG9uc2UgaW4gdGhlXG4gKiBzZXNzaW9uU3RvcmFnZS1iYWNrZWQgdXJsUmVzb2x2ZXJBdG9tIHRoYXQgUGFnZVByb3ZpZGVyIGNvbnN1bHRzIGJlZm9yZVxuICogZmV0Y2hpbmcuIENvbmN1cnJlbnQgY2FsbHMgZm9yIHRoZSBzYW1lIFVSTCBhcmUgZGVkdXBlZCBpbnNpZGVcbiAqIENvbW1lcmNlQXBpQ2xpZW50LnJlc29sdmVVcmwuXG4gKi9cbmV4cG9ydCBjb25zdCB3YXJtVXJsUmVzb2x2ZXIgPSBhc3luYyAoe1xuICBiYXNlVXJsLFxuICBhcGlLZXksXG4gIGVudml2ZVNlcnZpY2VDb25maWcsXG4gIHNob3csXG4gIGVudml2ZU9uLFxuICBlbnYsXG4gIGNvbnRleHRTb3VyY2UsXG4gIGZlYXR1cmVGbGFnU2VydmljZSxcbn06IFdhcm1VcmxSZXNvbHZlclBhcmFtcyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0b3JlID0gZ2V0QXRvbVN0b3JlKCk7XG4gICAgLy8gTXVzdCBtYXRjaCBQYWdlUHJvdmlkZXIncyBVUkwgY2xlYW5zaW5nIHNvIHRoZSBjYWNoZSBrZXkgbGluZXMgdXAuXG4gICAgY29uc3QgY2xlYW5zZWRVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoc3RvcmUuZ2V0KHVybFJlc29sdmVyQXRvbSlbY2xlYW5zZWRVcmxdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIENvbW1lcmNlQXBpQ2xpZW50IHNpbmdsZXRvbiBjYXB0dXJlcyBiYXNlVXJsL2FwaUtleSBhdCBmaXJzdFxuICAgIC8vIGluc3RhbnRpYXRpb24sIHNvIHRoZXNlIGF0b21zIG11c3QgYmUgc2VlZGVkIGJlZm9yZSBhbnkgQVBJIGNhbGwuXG4gICAgLy8gT25seSBzZWVkIHdoZW4gdW5zZXQg4oCUIHByb3ZpZGVycyBvd24gdGhpcyBhdG9tIG9uY2UgUmVhY3QgbW91bnRzLlxuICAgIGlmIChzdG9yZS5nZXQoZW52aXZlQ29uZmlnQXRvbSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RvcmUuc2V0KGVudml2ZUNvbmZpZ0F0b20sIHtcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgb3JnTGV2ZWxBcGlLZXk6IGFwaUtleSxcbiAgICAgICAgb3JnU2hvcnROYW1lOiBlbnZpdmVTZXJ2aWNlQ29uZmlnLm9yZy5vcmcuc2hvcnRfbmFtZSxcbiAgICAgICAgb3JnSWQ6IGVudml2ZVNlcnZpY2VDb25maWcub3JnLm9yZy5pZCxcbiAgICAgICAgc2hvdyxcbiAgICAgICAgZW52aXZlT24sXG4gICAgICAgIGVudixcbiAgICAgICAgY29udGV4dFNvdXJjZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyByZXNvbHZlVXJsIHJlYWRzIGZlYXR1cmUgZ2F0ZXMgdGhyb3VnaCBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tOyB3aXRob3V0XG4gICAgLy8gdGhpcyBzZWVkIHRoZSB3YXJtLXVwIHJlcXVlc3QgaXMgY29tcHV0ZWQgd2l0aCBmZWF0dXJlX2dhdGVzPXt9IGFuZFxuICAgIC8vIHRoYXQgcmVzcG9uc2UgaXMgd2hhdCBnZXRzIGNhY2hlZCBmb3IgUGFnZVByb3ZpZGVyLlxuICAgIGlmIChmZWF0dXJlRmxhZ1NlcnZpY2UgJiYgc3RvcmUuZ2V0KGZlYXR1cmVGbGFnU2VydmljZUF0b20pID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0b3JlLnNldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tLCB7IGZlYXR1cmVGbGFnU2VydmljZSB9KTtcbiAgICB9XG4gICAgLy8gTWlycm9ycyBFbnZpdmVQcm92aWRlcjogXCJkZXBsb3llZFwiIGlzIHRoZSBuby1waW4gc2VudGluZWwuXG4gICAgY29uc3QgeyBiYXNlVmVyc2lvbiwgYmFzZVZlcnNpb25Tb3VyY2UgfSA9IGVudml2ZVNlcnZpY2VDb25maWcub3JnQ29uZmlnPy5yZXNvbHV0aW9uID8/IHt9O1xuICAgIGlmIChiYXNlVmVyc2lvbiAmJiBiYXNlVmVyc2lvblNvdXJjZSAmJiBiYXNlVmVyc2lvblNvdXJjZSAhPT0gJ2RlcGxveWVkJykge1xuICAgICAgc3RvcmUuc2V0KHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tLCBiYXNlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQucmVzb2x2ZVVybChjbGVhbnNlZFVybCkpIGFzIFVybFJlc29sdmVyUmVzcG9uc2U7XG4gICAgc3RvcmUuc2V0KHVybFJlc29sdmVyQXRvbSwgeyB1cmw6IGNsZWFuc2VkVXJsLCByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRmFpbCBvcGVuOiBQYWdlUHJvdmlkZXIgaXNzdWVzIGl0cyBvd24gcmVzb2x2ZVVybCBjYWxsIHdoZW4gdGhlIGNhY2hlXG4gICAgLy8gaXMgZW1wdHksIHNvIGEgd2FybS11cCBmYWlsdXJlIG5ldmVyIGJsb2NrcyByZW5kZXJpbmcuXG4gICAgbG9nZ2VyLmxvZ0RlYnVnKCdVUkwgcmVzb2x2ZXIgd2FybS11cCBmYWlsZWQnLCBlcnIpO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVQSxNQUFNLFNBQVMsSUFBSUEsdUJBQU8sMkJBQTJCOzs7Ozs7Ozs7Ozs7OztBQTBCckQsTUFBYSxrQkFBa0IsT0FBTyxFQUNwQyxTQUNBLFFBQ0EscUJBQ0EsTUFDQSxVQUNBLEtBQ0EsZUFDQSx5QkFDMEM7QUFDMUMsS0FBSTtFQUNGLE1BQU0sUUFBUUMsZ0NBQWM7RUFFNUIsTUFBTSxjQUFjLE9BQU8sU0FBUyxLQUFLLGFBQWEsQ0FBQyxNQUFNO0FBQzdELE1BQUksTUFBTSxJQUFJQyxnQ0FBZ0IsQ0FBQyxhQUM3QjtBQU1GLE1BQUksTUFBTSxJQUFJQyxtREFBaUIsS0FBSyxPQUNsQyxPQUFNLElBQUlBLG9EQUFrQjtHQUMxQjtHQUNBLGdCQUFnQjtHQUNoQixjQUFjLG9CQUFvQixJQUFJLElBQUk7R0FDMUMsT0FBTyxvQkFBb0IsSUFBSSxJQUFJO0dBQ25DO0dBQ0E7R0FDQTtHQUNBO0dBQ0QsQ0FBQztBQUtKLE1BQUksc0JBQXNCLE1BQU0sSUFBSUMsNkNBQXVCLEtBQUssT0FDOUQsT0FBTSxJQUFJQSw4Q0FBd0IsRUFBRSxvQkFBb0IsQ0FBQztFQUczRCxNQUFNLEVBQUUsYUFBYSxzQkFBc0Isb0JBQW9CLFdBQVcsY0FBYyxFQUFFO0FBQzFGLE1BQUksZUFBZSxxQkFBcUIsc0JBQXNCLFdBQzVELE9BQU0sSUFBSUMsaUVBQStCLFlBQVk7RUFHdkQsTUFBTSxXQUFZLE1BQU1DLHlDQUFrQixXQUFXLFlBQVk7QUFDakUsUUFBTSxJQUFJSixpQ0FBaUI7R0FBRSxLQUFLO0dBQWE7R0FBVSxDQUFDO1VBQ25ELEtBQUs7QUFHWixTQUFPLFNBQVMsK0JBQStCLElBQUkifQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { FeatureFlagService } from "../featureFlagService/index.cjs";
|
|
2
|
+
import { EnviveServiceConfig } from "../enviveConfigService/enviveConfigService.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/services/urlResolverWarmupService/index.d.ts
|
|
5
|
+
interface WarmUrlResolverParams {
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
apiKey: string;
|
|
8
|
+
enviveServiceConfig: EnviveServiceConfig;
|
|
9
|
+
show?: boolean;
|
|
10
|
+
enviveOn?: boolean;
|
|
11
|
+
env?: string;
|
|
12
|
+
contextSource?: string;
|
|
13
|
+
featureFlagService?: FeatureFlagService;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Fires the /v1/url_resolving request as soon as the org config is available,
|
|
17
|
+
* instead of waiting for the React tree to mount and PageProvider's effect to
|
|
18
|
+
* run — that removes a full network round trip from the first-widget-paint
|
|
19
|
+
* critical path.
|
|
20
|
+
*
|
|
21
|
+
* Seeds the same atoms EnviveProvider/EnviveConfigProvider populate later
|
|
22
|
+
* (with identical values) so the request context matches the one
|
|
23
|
+
* PageProvider would send, then stores the response in the
|
|
24
|
+
* sessionStorage-backed urlResolverAtom that PageProvider consults before
|
|
25
|
+
* fetching. Concurrent calls for the same URL are deduped inside
|
|
26
|
+
* CommerceApiClient.resolveUrl.
|
|
27
|
+
*/
|
|
28
|
+
declare const warmUrlResolver: ({
|
|
29
|
+
baseUrl,
|
|
30
|
+
apiKey,
|
|
31
|
+
enviveServiceConfig,
|
|
32
|
+
show,
|
|
33
|
+
enviveOn,
|
|
34
|
+
env,
|
|
35
|
+
contextSource,
|
|
36
|
+
featureFlagService
|
|
37
|
+
}: WarmUrlResolverParams) => Promise<void>;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { WarmUrlResolverParams, warmUrlResolver };
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VybFJlc29sdmVyV2FybXVwU2VydmljZS9pbmRleC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudml2ZVNlcnZpY2VDb25maWcgfSBmcm9tICdzcmMvc2VydmljZXMvZW52aXZlQ29uZmlnU2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9mZWF0dXJlRmxhZ1NlcnZpY2UnO1xuZXhwb3J0IGludGVyZmFjZSBXYXJtVXJsUmVzb2x2ZXJQYXJhbXMge1xuICAgIGJhc2VVcmw6IHN0cmluZztcbiAgICBhcGlLZXk6IHN0cmluZztcbiAgICBlbnZpdmVTZXJ2aWNlQ29uZmlnOiBFbnZpdmVTZXJ2aWNlQ29uZmlnO1xuICAgIHNob3c/OiBib29sZWFuO1xuICAgIGVudml2ZU9uPzogYm9vbGVhbjtcbiAgICBlbnY/OiBzdHJpbmc7XG4gICAgY29udGV4dFNvdXJjZT86IHN0cmluZztcbiAgICBmZWF0dXJlRmxhZ1NlcnZpY2U/OiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG59XG4vKipcbiAqIEZpcmVzIHRoZSAvdjEvdXJsX3Jlc29sdmluZyByZXF1ZXN0IGFzIHNvb24gYXMgdGhlIG9yZyBjb25maWcgaXMgYXZhaWxhYmxlLFxuICogaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgUmVhY3QgdHJlZSB0byBtb3VudCBhbmQgUGFnZVByb3ZpZGVyJ3MgZWZmZWN0IHRvXG4gKiBydW4g4oCUIHRoYXQgcmVtb3ZlcyBhIGZ1bGwgbmV0d29yayByb3VuZCB0cmlwIGZyb20gdGhlIGZpcnN0LXdpZGdldC1wYWludFxuICogY3JpdGljYWwgcGF0aC5cbiAqXG4gKiBTZWVkcyB0aGUgc2FtZSBhdG9tcyBFbnZpdmVQcm92aWRlci9FbnZpdmVDb25maWdQcm92aWRlciBwb3B1bGF0ZSBsYXRlclxuICogKHdpdGggaWRlbnRpY2FsIHZhbHVlcykgc28gdGhlIHJlcXVlc3QgY29udGV4dCBtYXRjaGVzIHRoZSBvbmVcbiAqIFBhZ2VQcm92aWRlciB3b3VsZCBzZW5kLCB0aGVuIHN0b3JlcyB0aGUgcmVzcG9uc2UgaW4gdGhlXG4gKiBzZXNzaW9uU3RvcmFnZS1iYWNrZWQgdXJsUmVzb2x2ZXJBdG9tIHRoYXQgUGFnZVByb3ZpZGVyIGNvbnN1bHRzIGJlZm9yZVxuICogZmV0Y2hpbmcuIENvbmN1cnJlbnQgY2FsbHMgZm9yIHRoZSBzYW1lIFVSTCBhcmUgZGVkdXBlZCBpbnNpZGVcbiAqIENvbW1lcmNlQXBpQ2xpZW50LnJlc29sdmVVcmwuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHdhcm1VcmxSZXNvbHZlcjogKHsgYmFzZVVybCwgYXBpS2V5LCBlbnZpdmVTZXJ2aWNlQ29uZmlnLCBzaG93LCBlbnZpdmVPbiwgZW52LCBjb250ZXh0U291cmNlLCBmZWF0dXJlRmxhZ1NlcnZpY2UsIH06IFdhcm1VcmxSZXNvbHZlclBhcmFtcykgPT4gUHJvbWlzZTx2b2lkPjtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLElBQVcsd0JBQXdCO0NBQUM7T0FBRztPQUFBO0NBQUE7QUFDdkMsSUFBVyxrQkFBUTtDQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQSJ9
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { FeatureFlagService } from "../featureFlagService/index.js";
|
|
2
|
+
import { EnviveServiceConfig } from "../enviveConfigService/enviveConfigService.js";
|
|
3
|
+
|
|
4
|
+
//#region src/services/urlResolverWarmupService/index.d.ts
|
|
5
|
+
interface WarmUrlResolverParams {
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
apiKey: string;
|
|
8
|
+
enviveServiceConfig: EnviveServiceConfig;
|
|
9
|
+
show?: boolean;
|
|
10
|
+
enviveOn?: boolean;
|
|
11
|
+
env?: string;
|
|
12
|
+
contextSource?: string;
|
|
13
|
+
featureFlagService?: FeatureFlagService;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Fires the /v1/url_resolving request as soon as the org config is available,
|
|
17
|
+
* instead of waiting for the React tree to mount and PageProvider's effect to
|
|
18
|
+
* run — that removes a full network round trip from the first-widget-paint
|
|
19
|
+
* critical path.
|
|
20
|
+
*
|
|
21
|
+
* Seeds the same atoms EnviveProvider/EnviveConfigProvider populate later
|
|
22
|
+
* (with identical values) so the request context matches the one
|
|
23
|
+
* PageProvider would send, then stores the response in the
|
|
24
|
+
* sessionStorage-backed urlResolverAtom that PageProvider consults before
|
|
25
|
+
* fetching. Concurrent calls for the same URL are deduped inside
|
|
26
|
+
* CommerceApiClient.resolveUrl.
|
|
27
|
+
*/
|
|
28
|
+
declare const warmUrlResolver: ({
|
|
29
|
+
baseUrl,
|
|
30
|
+
apiKey,
|
|
31
|
+
enviveServiceConfig,
|
|
32
|
+
show,
|
|
33
|
+
enviveOn,
|
|
34
|
+
env,
|
|
35
|
+
contextSource,
|
|
36
|
+
featureFlagService
|
|
37
|
+
}: WarmUrlResolverParams) => Promise<void>;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { WarmUrlResolverParams, warmUrlResolver };
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdXJsUmVzb2x2ZXJXYXJtdXBTZXJ2aWNlL2luZGV4LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXZlU2VydmljZUNvbmZpZyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9lbnZpdmVDb25maWdTZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL3NlcnZpY2VzL2ZlYXR1cmVGbGFnU2VydmljZSc7XG5leHBvcnQgaW50ZXJmYWNlIFdhcm1VcmxSZXNvbHZlclBhcmFtcyB7XG4gICAgYmFzZVVybDogc3RyaW5nO1xuICAgIGFwaUtleTogc3RyaW5nO1xuICAgIGVudml2ZVNlcnZpY2VDb25maWc6IEVudml2ZVNlcnZpY2VDb25maWc7XG4gICAgc2hvdz86IGJvb2xlYW47XG4gICAgZW52aXZlT24/OiBib29sZWFuO1xuICAgIGVudj86IHN0cmluZztcbiAgICBjb250ZXh0U291cmNlPzogc3RyaW5nO1xuICAgIGZlYXR1cmVGbGFnU2VydmljZT86IEZlYXR1cmVGbGFnU2VydmljZTtcbn1cbi8qKlxuICogRmlyZXMgdGhlIC92MS91cmxfcmVzb2x2aW5nIHJlcXVlc3QgYXMgc29vbiBhcyB0aGUgb3JnIGNvbmZpZyBpcyBhdmFpbGFibGUsXG4gKiBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBSZWFjdCB0cmVlIHRvIG1vdW50IGFuZCBQYWdlUHJvdmlkZXIncyBlZmZlY3QgdG9cbiAqIHJ1biDigJQgdGhhdCByZW1vdmVzIGEgZnVsbCBuZXR3b3JrIHJvdW5kIHRyaXAgZnJvbSB0aGUgZmlyc3Qtd2lkZ2V0LXBhaW50XG4gKiBjcml0aWNhbCBwYXRoLlxuICpcbiAqIFNlZWRzIHRoZSBzYW1lIGF0b21zIEVudml2ZVByb3ZpZGVyL0Vudml2ZUNvbmZpZ1Byb3ZpZGVyIHBvcHVsYXRlIGxhdGVyXG4gKiAod2l0aCBpZGVudGljYWwgdmFsdWVzKSBzbyB0aGUgcmVxdWVzdCBjb250ZXh0IG1hdGNoZXMgdGhlIG9uZVxuICogUGFnZVByb3ZpZGVyIHdvdWxkIHNlbmQsIHRoZW4gc3RvcmVzIHRoZSByZXNwb25zZSBpbiB0aGVcbiAqIHNlc3Npb25TdG9yYWdlLWJhY2tlZCB1cmxSZXNvbHZlckF0b20gdGhhdCBQYWdlUHJvdmlkZXIgY29uc3VsdHMgYmVmb3JlXG4gKiBmZXRjaGluZy4gQ29uY3VycmVudCBjYWxscyBmb3IgdGhlIHNhbWUgVVJMIGFyZSBkZWR1cGVkIGluc2lkZVxuICogQ29tbWVyY2VBcGlDbGllbnQucmVzb2x2ZVVybC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3Qgd2FybVVybFJlc29sdmVyOiAoeyBiYXNlVXJsLCBhcGlLZXksIGVudml2ZVNlcnZpY2VDb25maWcsIHNob3csIGVudml2ZU9uLCBlbnYsIGNvbnRleHRTb3VyY2UsIGZlYXR1cmVGbGFnU2VydmljZSwgfTogV2FybVVybFJlc29sdmVyUGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBRUEsSUFBVyx3QkFBd0I7Q0FBQztPQUFHO09BQUE7Q0FBQTtBQUN2QyxJQUFXLGtCQUFRO0NBQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBIn0=
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import logger_default from "../../application/logging/logger.js";
|
|
2
|
+
import { enviveConfigAtom } from "../../atoms/envive/enviveConfig.js";
|
|
3
|
+
import { getAtomStore } from "../../atoms/atomStore/atomStore.js";
|
|
4
|
+
import { urlResolverAtom } from "../../atoms/app/variant.js";
|
|
5
|
+
import { resolvedBaseConfigVersionAtom } from "../../atoms/envive/resolvedBaseConfigVersion.js";
|
|
6
|
+
import { featureFlagServiceAtom } from "../../atoms/org/graphqlConfig.js";
|
|
7
|
+
import commerce_api_default from "../../application/commerce-api.js";
|
|
8
|
+
|
|
9
|
+
//#region src/services/urlResolverWarmupService/index.ts
|
|
10
|
+
const logger = new logger_default("urlResolverWarmupService");
|
|
11
|
+
/**
|
|
12
|
+
* Fires the /v1/url_resolving request as soon as the org config is available,
|
|
13
|
+
* instead of waiting for the React tree to mount and PageProvider's effect to
|
|
14
|
+
* run — that removes a full network round trip from the first-widget-paint
|
|
15
|
+
* critical path.
|
|
16
|
+
*
|
|
17
|
+
* Seeds the same atoms EnviveProvider/EnviveConfigProvider populate later
|
|
18
|
+
* (with identical values) so the request context matches the one
|
|
19
|
+
* PageProvider would send, then stores the response in the
|
|
20
|
+
* sessionStorage-backed urlResolverAtom that PageProvider consults before
|
|
21
|
+
* fetching. Concurrent calls for the same URL are deduped inside
|
|
22
|
+
* CommerceApiClient.resolveUrl.
|
|
23
|
+
*/
|
|
24
|
+
const warmUrlResolver = async ({ baseUrl, apiKey, enviveServiceConfig, show, enviveOn, env, contextSource, featureFlagService }) => {
|
|
25
|
+
try {
|
|
26
|
+
const store = getAtomStore();
|
|
27
|
+
const cleansedUrl = window.location.href.toLowerCase().trim();
|
|
28
|
+
if (store.get(urlResolverAtom)[cleansedUrl]) return;
|
|
29
|
+
if (store.get(enviveConfigAtom) === void 0) store.set(enviveConfigAtom, {
|
|
30
|
+
baseUrl,
|
|
31
|
+
orgLevelApiKey: apiKey,
|
|
32
|
+
orgShortName: enviveServiceConfig.org.org.short_name,
|
|
33
|
+
orgId: enviveServiceConfig.org.org.id,
|
|
34
|
+
show,
|
|
35
|
+
enviveOn,
|
|
36
|
+
env,
|
|
37
|
+
contextSource
|
|
38
|
+
});
|
|
39
|
+
if (featureFlagService && store.get(featureFlagServiceAtom) === void 0) store.set(featureFlagServiceAtom, { featureFlagService });
|
|
40
|
+
const { baseVersion, baseVersionSource } = enviveServiceConfig.orgConfig?.resolution ?? {};
|
|
41
|
+
if (baseVersion && baseVersionSource && baseVersionSource !== "deployed") store.set(resolvedBaseConfigVersionAtom, baseVersion);
|
|
42
|
+
const response = await commerce_api_default.resolveUrl(cleansedUrl);
|
|
43
|
+
store.set(urlResolverAtom, {
|
|
44
|
+
url: cleansedUrl,
|
|
45
|
+
response
|
|
46
|
+
});
|
|
47
|
+
} catch (err) {
|
|
48
|
+
logger.logDebug("URL resolver warm-up failed", err);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { warmUrlResolver };
|
|
54
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJDb21tZXJjZUFwaUNsaWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy91cmxSZXNvbHZlcldhcm11cFNlcnZpY2UvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgVXJsUmVzb2x2ZXJSZXNwb25zZSwgdXJsUmVzb2x2ZXJBdG9tIH0gZnJvbSAnc3JjL2F0b21zL2FwcC92YXJpYW50JztcbmltcG9ydCB7IGdldEF0b21TdG9yZSB9IGZyb20gJ3NyYy9hdG9tcy9hdG9tU3RvcmUvYXRvbVN0b3JlJztcbmltcG9ydCB7IGVudml2ZUNvbmZpZ0F0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbic7XG5pbXBvcnQgeyBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tIH0gZnJvbSAnc3JjL2F0b21zL29yZy9ncmFwaHFsQ29uZmlnJztcbmltcG9ydCB7IEVudml2ZVNlcnZpY2VDb25maWcgfSBmcm9tICdzcmMvc2VydmljZXMvZW52aXZlQ29uZmlnU2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9mZWF0dXJlRmxhZ1NlcnZpY2UnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCd1cmxSZXNvbHZlcldhcm11cFNlcnZpY2UnKTtcblxuZXhwb3J0IGludGVyZmFjZSBXYXJtVXJsUmVzb2x2ZXJQYXJhbXMge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICBlbnZpdmVTZXJ2aWNlQ29uZmlnOiBFbnZpdmVTZXJ2aWNlQ29uZmlnO1xuICBzaG93PzogYm9vbGVhbjtcbiAgZW52aXZlT24/OiBib29sZWFuO1xuICBlbnY/OiBzdHJpbmc7XG4gIGNvbnRleHRTb3VyY2U/OiBzdHJpbmc7XG4gIGZlYXR1cmVGbGFnU2VydmljZT86IEZlYXR1cmVGbGFnU2VydmljZTtcbn1cblxuLyoqXG4gKiBGaXJlcyB0aGUgL3YxL3VybF9yZXNvbHZpbmcgcmVxdWVzdCBhcyBzb29uIGFzIHRoZSBvcmcgY29uZmlnIGlzIGF2YWlsYWJsZSxcbiAqIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIFJlYWN0IHRyZWUgdG8gbW91bnQgYW5kIFBhZ2VQcm92aWRlcidzIGVmZmVjdCB0b1xuICogcnVuIOKAlCB0aGF0IHJlbW92ZXMgYSBmdWxsIG5ldHdvcmsgcm91bmQgdHJpcCBmcm9tIHRoZSBmaXJzdC13aWRnZXQtcGFpbnRcbiAqIGNyaXRpY2FsIHBhdGguXG4gKlxuICogU2VlZHMgdGhlIHNhbWUgYXRvbXMgRW52aXZlUHJvdmlkZXIvRW52aXZlQ29uZmlnUHJvdmlkZXIgcG9wdWxhdGUgbGF0ZXJcbiAqICh3aXRoIGlkZW50aWNhbCB2YWx1ZXMpIHNvIHRoZSByZXF1ZXN0IGNvbnRleHQgbWF0Y2hlcyB0aGUgb25lXG4gKiBQYWdlUHJvdmlkZXIgd291bGQgc2VuZCwgdGhlbiBzdG9yZXMgdGhlIHJlc3BvbnNlIGluIHRoZVxuICogc2Vzc2lvblN0b3JhZ2UtYmFja2VkIHVybFJlc29sdmVyQXRvbSB0aGF0IFBhZ2VQcm92aWRlciBjb25zdWx0cyBiZWZvcmVcbiAqIGZldGNoaW5nLiBDb25jdXJyZW50IGNhbGxzIGZvciB0aGUgc2FtZSBVUkwgYXJlIGRlZHVwZWQgaW5zaWRlXG4gKiBDb21tZXJjZUFwaUNsaWVudC5yZXNvbHZlVXJsLlxuICovXG5leHBvcnQgY29uc3Qgd2FybVVybFJlc29sdmVyID0gYXN5bmMgKHtcbiAgYmFzZVVybCxcbiAgYXBpS2V5LFxuICBlbnZpdmVTZXJ2aWNlQ29uZmlnLFxuICBzaG93LFxuICBlbnZpdmVPbixcbiAgZW52LFxuICBjb250ZXh0U291cmNlLFxuICBmZWF0dXJlRmxhZ1NlcnZpY2UsXG59OiBXYXJtVXJsUmVzb2x2ZXJQYXJhbXMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdG9yZSA9IGdldEF0b21TdG9yZSgpO1xuICAgIC8vIE11c3QgbWF0Y2ggUGFnZVByb3ZpZGVyJ3MgVVJMIGNsZWFuc2luZyBzbyB0aGUgY2FjaGUga2V5IGxpbmVzIHVwLlxuICAgIGNvbnN0IGNsZWFuc2VkVXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgaWYgKHN0b3JlLmdldCh1cmxSZXNvbHZlckF0b20pW2NsZWFuc2VkVXJsXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoZSBDb21tZXJjZUFwaUNsaWVudCBzaW5nbGV0b24gY2FwdHVyZXMgYmFzZVVybC9hcGlLZXkgYXQgZmlyc3RcbiAgICAvLyBpbnN0YW50aWF0aW9uLCBzbyB0aGVzZSBhdG9tcyBtdXN0IGJlIHNlZWRlZCBiZWZvcmUgYW55IEFQSSBjYWxsLlxuICAgIC8vIE9ubHkgc2VlZCB3aGVuIHVuc2V0IOKAlCBwcm92aWRlcnMgb3duIHRoaXMgYXRvbSBvbmNlIFJlYWN0IG1vdW50cy5cbiAgICBpZiAoc3RvcmUuZ2V0KGVudml2ZUNvbmZpZ0F0b20pID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0b3JlLnNldChlbnZpdmVDb25maWdBdG9tLCB7XG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIG9yZ0xldmVsQXBpS2V5OiBhcGlLZXksXG4gICAgICAgIG9yZ1Nob3J0TmFtZTogZW52aXZlU2VydmljZUNvbmZpZy5vcmcub3JnLnNob3J0X25hbWUsXG4gICAgICAgIG9yZ0lkOiBlbnZpdmVTZXJ2aWNlQ29uZmlnLm9yZy5vcmcuaWQsXG4gICAgICAgIHNob3csXG4gICAgICAgIGVudml2ZU9uLFxuICAgICAgICBlbnYsXG4gICAgICAgIGNvbnRleHRTb3VyY2UsXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gcmVzb2x2ZVVybCByZWFkcyBmZWF0dXJlIGdhdGVzIHRocm91Z2ggZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbTsgd2l0aG91dFxuICAgIC8vIHRoaXMgc2VlZCB0aGUgd2FybS11cCByZXF1ZXN0IGlzIGNvbXB1dGVkIHdpdGggZmVhdHVyZV9nYXRlcz17fSBhbmRcbiAgICAvLyB0aGF0IHJlc3BvbnNlIGlzIHdoYXQgZ2V0cyBjYWNoZWQgZm9yIFBhZ2VQcm92aWRlci5cbiAgICBpZiAoZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHN0b3JlLmdldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdG9yZS5zZXQoZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbSwgeyBmZWF0dXJlRmxhZ1NlcnZpY2UgfSk7XG4gICAgfVxuICAgIC8vIE1pcnJvcnMgRW52aXZlUHJvdmlkZXI6IFwiZGVwbG95ZWRcIiBpcyB0aGUgbm8tcGluIHNlbnRpbmVsLlxuICAgIGNvbnN0IHsgYmFzZVZlcnNpb24sIGJhc2VWZXJzaW9uU291cmNlIH0gPSBlbnZpdmVTZXJ2aWNlQ29uZmlnLm9yZ0NvbmZpZz8ucmVzb2x1dGlvbiA/PyB7fTtcbiAgICBpZiAoYmFzZVZlcnNpb24gJiYgYmFzZVZlcnNpb25Tb3VyY2UgJiYgYmFzZVZlcnNpb25Tb3VyY2UgIT09ICdkZXBsb3llZCcpIHtcbiAgICAgIHN0b3JlLnNldChyZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSwgYmFzZVZlcnNpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LnJlc29sdmVVcmwoY2xlYW5zZWRVcmwpKSBhcyBVcmxSZXNvbHZlclJlc3BvbnNlO1xuICAgIHN0b3JlLnNldCh1cmxSZXNvbHZlckF0b20sIHsgdXJsOiBjbGVhbnNlZFVybCwgcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIEZhaWwgb3BlbjogUGFnZVByb3ZpZGVyIGlzc3VlcyBpdHMgb3duIHJlc29sdmVVcmwgY2FsbCB3aGVuIHRoZSBjYWNoZVxuICAgIC8vIGlzIGVtcHR5LCBzbyBhIHdhcm0tdXAgZmFpbHVyZSBuZXZlciBibG9ja3MgcmVuZGVyaW5nLlxuICAgIGxvZ2dlci5sb2dEZWJ1ZygnVVJMIHJlc29sdmVyIHdhcm0tdXAgZmFpbGVkJywgZXJyKTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBVUEsTUFBTSxTQUFTLElBQUlBLGVBQU8sMkJBQTJCOzs7Ozs7Ozs7Ozs7OztBQTBCckQsTUFBYSxrQkFBa0IsT0FBTyxFQUNwQyxTQUNBLFFBQ0EscUJBQ0EsTUFDQSxVQUNBLEtBQ0EsZUFDQSx5QkFDMEM7QUFDMUMsS0FBSTtFQUNGLE1BQU0sUUFBUSxjQUFjO0VBRTVCLE1BQU0sY0FBYyxPQUFPLFNBQVMsS0FBSyxhQUFhLENBQUMsTUFBTTtBQUM3RCxNQUFJLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxhQUM3QjtBQU1GLE1BQUksTUFBTSxJQUFJLGlCQUFpQixLQUFLLE9BQ2xDLE9BQU0sSUFBSSxrQkFBa0I7R0FDMUI7R0FDQSxnQkFBZ0I7R0FDaEIsY0FBYyxvQkFBb0IsSUFBSSxJQUFJO0dBQzFDLE9BQU8sb0JBQW9CLElBQUksSUFBSTtHQUNuQztHQUNBO0dBQ0E7R0FDQTtHQUNELENBQUM7QUFLSixNQUFJLHNCQUFzQixNQUFNLElBQUksdUJBQXVCLEtBQUssT0FDOUQsT0FBTSxJQUFJLHdCQUF3QixFQUFFLG9CQUFvQixDQUFDO0VBRzNELE1BQU0sRUFBRSxhQUFhLHNCQUFzQixvQkFBb0IsV0FBVyxjQUFjLEVBQUU7QUFDMUYsTUFBSSxlQUFlLHFCQUFxQixzQkFBc0IsV0FDNUQsT0FBTSxJQUFJLCtCQUErQixZQUFZO0VBR3ZELE1BQU0sV0FBWSxNQUFNQyxxQkFBa0IsV0FBVyxZQUFZO0FBQ2pFLFFBQU0sSUFBSSxpQkFBaUI7R0FBRSxLQUFLO0dBQWE7R0FBVSxDQUFDO1VBQ25ELEtBQUs7QUFHWixTQUFPLFNBQVMsK0JBQStCLElBQUkifQ==
|
|
@@ -4,8 +4,12 @@ import { FrontendConfigOverrides } from "../application/models/frontendConfig.cj
|
|
|
4
4
|
import { VariantInfo } from "../application/models/variantInfo/variantInfo.cjs";
|
|
5
5
|
|
|
6
6
|
//#region src/types/enviveConfig.d.ts
|
|
7
|
+
type AddToCartCallback = (params: {
|
|
8
|
+
product_id: string;
|
|
9
|
+
}) => void | Promise<void>;
|
|
7
10
|
interface EnviveConfig {
|
|
8
11
|
publicKey?: string;
|
|
12
|
+
addToCart?: AddToCartCallback;
|
|
9
13
|
userID?: string;
|
|
10
14
|
env?: 'prod' | 'dev';
|
|
11
15
|
clientID?: string;
|
|
@@ -28,5 +32,5 @@ declare global {
|
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
34
|
//#endregion
|
|
31
|
-
export { EnviveConfig };
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
35
|
+
export { AddToCartCallback, EnviveConfig };
|
|
36
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29uZmlnLmQuY3RzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lbnZpdmVDb25maWcuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGcm9udGVuZENvbmZpZ092ZXJyaWRlcywgVmFyaWFudEluZm8gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB0eXBlIHsgSGFyZGNvcHlSZXNwb25zZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9oYXJkY29weUNvbnRleHQvaGFyZGNvcHlDb250ZXh0JztcbmltcG9ydCB0eXBlIHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuZXhwb3J0IHR5cGUgQWRkVG9DYXJ0Q2FsbGJhY2sgPSAocGFyYW1zOiB7XG4gICAgcHJvZHVjdF9pZDogc3RyaW5nO1xufSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5leHBvcnQgaW50ZXJmYWNlIEVudml2ZUNvbmZpZyB7XG4gICAgcHVibGljS2V5Pzogc3RyaW5nO1xuICAgIGFkZFRvQ2FydD86IEFkZFRvQ2FydENhbGxiYWNrO1xuICAgIHVzZXJJRD86IHN0cmluZztcbiAgICBlbnY/OiAncHJvZCcgfCAnZGV2JztcbiAgICBjbGllbnRJRD86IHN0cmluZztcbiAgICBzaG93PzogYm9vbGVhbjtcbiAgICBmZWF0dXJlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgdmFyaWFudEluZm9PdmVycmlkZT86IFZhcmlhbnRJbmZvO1xuICAgIHZhcmlhbnRVcmxPdmVycmlkZT86IHN0cmluZztcbiAgICBwYWdlVmFyaWFudElkT3ZlcnJpZGU/OiBzdHJpbmc7XG4gICAgc2VsZWN0ZWRDdXN0b21pemVPcHRpb24/OiBzdHJpbmc7XG4gICAgcmVkdWNlZE1vdGlvbk92ZXJyaWRlPzogYm9vbGVhbjtcbiAgICBpbml0aWFsT3BlblNlYXJjaE92ZXJsYXk/OiBib29sZWFuO1xuICAgIFdpZGdldE1vdW50aW5nT3ZlcnJpZGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gICAgY29uZmlnQ2hhbmdlcz86IEZyb250ZW5kQ29uZmlnT3ZlcnJpZGVzW107XG4gICAgaGFyZGNvcHlPdmVycmlkZT86IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+O1xufVxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBfc3BpZmZ5PzogRW52aXZlQ29uZmlnO1xuICAgICAgICBfZW52aXZlPzogRW52aXZlQ29uZmlnO1xuICAgIH1cbn1cbmV4cG9ydCB7fTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBVyxvQkFBb0IsQ0FBQyxXQUFTLFFBQUE7QUFDekMsSUFBVyxlQUFXO0NBQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUN0QixJQUFJLEtBQUs7Q0FBQztPQUFXO09BQUs7Q0FBQSxXQUFBLEdBQUE7Q0FBQSJ9
|
|
@@ -4,8 +4,12 @@ import { FrontendConfigOverrides } from "../application/models/frontendConfig.js
|
|
|
4
4
|
import { VariantInfo } from "../application/models/variantInfo/variantInfo.js";
|
|
5
5
|
|
|
6
6
|
//#region src/types/enviveConfig.d.ts
|
|
7
|
+
type AddToCartCallback = (params: {
|
|
8
|
+
product_id: string;
|
|
9
|
+
}) => void | Promise<void>;
|
|
7
10
|
interface EnviveConfig {
|
|
8
11
|
publicKey?: string;
|
|
12
|
+
addToCart?: AddToCartCallback;
|
|
9
13
|
userID?: string;
|
|
10
14
|
env?: 'prod' | 'dev';
|
|
11
15
|
clientID?: string;
|
|
@@ -28,5 +32,5 @@ declare global {
|
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
34
|
//#endregion
|
|
31
|
-
export { EnviveConfig };
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
35
|
+
export { AddToCartCallback, EnviveConfig };
|
|
36
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29uZmlnLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2Vudml2ZUNvbmZpZy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZyb250ZW5kQ29uZmlnT3ZlcnJpZGVzLCBWYXJpYW50SW5mbyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHR5cGUgeyBIYXJkY29weVJlc3BvbnNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2hhcmRjb3B5Q29udGV4dC9oYXJkY29weUNvbnRleHQnO1xuaW1wb3J0IHR5cGUgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5leHBvcnQgdHlwZSBBZGRUb0NhcnRDYWxsYmFjayA9IChwYXJhbXM6IHtcbiAgICBwcm9kdWN0X2lkOiBzdHJpbmc7XG59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBpbnRlcmZhY2UgRW52aXZlQ29uZmlnIHtcbiAgICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gICAgYWRkVG9DYXJ0PzogQWRkVG9DYXJ0Q2FsbGJhY2s7XG4gICAgdXNlcklEPzogc3RyaW5nO1xuICAgIGVudj86ICdwcm9kJyB8ICdkZXYnO1xuICAgIGNsaWVudElEPzogc3RyaW5nO1xuICAgIHNob3c/OiBib29sZWFuO1xuICAgIGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICB2YXJpYW50SW5mb092ZXJyaWRlPzogVmFyaWFudEluZm87XG4gICAgdmFyaWFudFVybE92ZXJyaWRlPzogc3RyaW5nO1xuICAgIHBhZ2VWYXJpYW50SWRPdmVycmlkZT86IHN0cmluZztcbiAgICBzZWxlY3RlZEN1c3RvbWl6ZU9wdGlvbj86IHN0cmluZztcbiAgICByZWR1Y2VkTW90aW9uT3ZlcnJpZGU/OiBib29sZWFuO1xuICAgIGluaXRpYWxPcGVuU2VhcmNoT3ZlcmxheT86IGJvb2xlYW47XG4gICAgV2lkZ2V0TW91bnRpbmdPdmVycmlkZT86IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgICBjb25maWdDaGFuZ2VzPzogRnJvbnRlbmRDb25maWdPdmVycmlkZXNbXTtcbiAgICBoYXJkY29weU92ZXJyaWRlPzogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj47XG59XG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIF9zcGlmZnk/OiBFbnZpdmVDb25maWc7XG4gICAgICAgIF9lbnZpdmU/OiBFbnZpdmVDb25maWc7XG4gICAgfVxufVxuZXhwb3J0IHt9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHQSxJQUFXLG9CQUFvQixDQUFDLFdBQVMsUUFBQTtBQUN6QyxJQUFXLGVBQVc7Q0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3RCLElBQUksS0FBSztDQUFDO09BQVc7T0FBSztDQUFBLFdBQUEsR0FBQTtDQUFBIn0=
|
package/dist/types/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChatState, CustomerServiceOverrides, Message, OutsideHoursFormData } from "./custservice-types.cjs";
|
|
2
2
|
import { SuggestionBarLocationForMetrics } from "./suggestionBarV2-types.cjs";
|
|
3
3
|
import { TestProps } from "./test-types.cjs";
|
|
4
|
+
import { AddToCartCallback, EnviveConfig } from "./enviveConfig.cjs";
|
|
4
5
|
import { CloseIconVariant, FilterFooterProps, FilterItemProps, FilterProps, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum } from "./search-filter-types.cjs";
|
|
5
6
|
import { OrgInfo } from "./OrgInfo.cjs";
|
|
6
|
-
|
|
7
|
-
export { ChatState, CloseIconVariant, CustomerServiceOverrides, EnviveConfig, FilterFooterProps, FilterItemProps, FilterProps, Message, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, OrgInfo, OutsideHoursFormData, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum, SuggestionBarLocationForMetrics, TestProps };
|
|
7
|
+
export { AddToCartCallback, ChatState, CloseIconVariant, CustomerServiceOverrides, EnviveConfig, FilterFooterProps, FilterItemProps, FilterProps, Message, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, OrgInfo, OutsideHoursFormData, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum, SuggestionBarLocationForMetrics, TestProps };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChatState, CustomerServiceOverrides, Message, OutsideHoursFormData } from "./custservice-types.js";
|
|
2
2
|
import { SuggestionBarLocationForMetrics } from "./suggestionBarV2-types.js";
|
|
3
3
|
import { TestProps } from "./test-types.js";
|
|
4
|
+
import { AddToCartCallback, EnviveConfig } from "./enviveConfig.js";
|
|
4
5
|
import { CloseIconVariant, FilterFooterProps, FilterItemProps, FilterProps, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum } from "./search-filter-types.js";
|
|
5
6
|
import { OrgInfo } from "./OrgInfo.js";
|
|
6
|
-
|
|
7
|
-
export { ChatState, CloseIconVariant, CustomerServiceOverrides, EnviveConfig, FilterFooterProps, FilterItemProps, FilterProps, Message, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, OrgInfo, OutsideHoursFormData, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum, SuggestionBarLocationForMetrics, TestProps };
|
|
7
|
+
export { AddToCartCallback, ChatState, CloseIconVariant, CustomerServiceOverrides, EnviveConfig, FilterFooterProps, FilterItemProps, FilterProps, Message, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, OrgInfo, OutsideHoursFormData, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum, SuggestionBarLocationForMetrics, TestProps };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@envive-ai/react-hooks",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.47",
|
|
4
4
|
"description": "React hooks for connecting to Envive AI services.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@amplitude/analytics-browser": "2.23.7",
|
|
41
|
-
"@spiffy-ai/commerce-api-client": "1.1.0-SNAPSHOT.
|
|
41
|
+
"@spiffy-ai/commerce-api-client": "1.1.0-SNAPSHOT.202607020921",
|
|
42
42
|
"@envive-ai/analytics": "1.0.28",
|
|
43
43
|
"fuse.js": "^7.1.0",
|
|
44
44
|
"jotai": "^2.14.0",
|
|
@@ -274,6 +274,10 @@
|
|
|
274
274
|
"import": "./dist/events/index.js",
|
|
275
275
|
"require": "./dist/events/index.cjs"
|
|
276
276
|
},
|
|
277
|
+
"./hooks/AddToCart": {
|
|
278
|
+
"import": "./dist/hooks/AddToCart/index.js",
|
|
279
|
+
"require": "./dist/hooks/AddToCart/index.cjs"
|
|
280
|
+
},
|
|
277
281
|
"./hooks/AmplitudeOperations": {
|
|
278
282
|
"import": "./dist/hooks/AmplitudeOperations/index.js",
|
|
279
283
|
"require": "./dist/hooks/AmplitudeOperations/index.cjs"
|
|
@@ -350,6 +354,10 @@
|
|
|
350
354
|
"import": "./dist/hooks/PageViewedEvent/index.js",
|
|
351
355
|
"require": "./dist/hooks/PageViewedEvent/index.cjs"
|
|
352
356
|
},
|
|
357
|
+
"./hooks/ProductDetails": {
|
|
358
|
+
"import": "./dist/hooks/ProductDetails/index.js",
|
|
359
|
+
"require": "./dist/hooks/ProductDetails/index.cjs"
|
|
360
|
+
},
|
|
353
361
|
"./hooks/ProductImageUrl": {
|
|
354
362
|
"import": "./dist/hooks/ProductImageUrl/index.js",
|
|
355
363
|
"require": "./dist/hooks/ProductImageUrl/index.cjs"
|
|
@@ -422,10 +430,18 @@
|
|
|
422
430
|
"import": "./dist/services/enviveConfigService/index.js",
|
|
423
431
|
"require": "./dist/services/enviveConfigService/index.cjs"
|
|
424
432
|
},
|
|
433
|
+
"./services/featureFlagService": {
|
|
434
|
+
"import": "./dist/services/featureFlagService/index.js",
|
|
435
|
+
"require": "./dist/services/featureFlagService/index.cjs"
|
|
436
|
+
},
|
|
425
437
|
"./services/hardcopyService": {
|
|
426
438
|
"import": "./dist/services/hardcopyService/index.js",
|
|
427
439
|
"require": "./dist/services/hardcopyService/index.cjs"
|
|
428
440
|
},
|
|
441
|
+
"./services/urlResolverWarmupService": {
|
|
442
|
+
"import": "./dist/services/urlResolverWarmupService/index.js",
|
|
443
|
+
"require": "./dist/services/urlResolverWarmupService/index.cjs"
|
|
444
|
+
},
|
|
429
445
|
"./services/userIdentityService": {
|
|
430
446
|
"import": "./dist/services/userIdentityService/index.js",
|
|
431
447
|
"require": "./dist/services/userIdentityService/index.cjs"
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { ResponseCategory, UserEventCategory } from '@spiffy-ai/commerce-api-client';
|
|
2
|
+
import { getAtomStore } from 'src/atoms/atomStore/atomStore';
|
|
3
|
+
import { enviveConfigAtom } from 'src/atoms/envive/enviveConfig';
|
|
4
|
+
import { MessageType } from 'src/application/models';
|
|
5
|
+
import CommerceApiClient from '../commerce-api';
|
|
6
|
+
|
|
7
|
+
const { mockV1GetSessionMessages } = vi.hoisted(() => ({
|
|
8
|
+
mockV1GetSessionMessages: vi.fn(),
|
|
9
|
+
}));
|
|
10
|
+
|
|
11
|
+
vi.mock('@spiffy-ai/commerce-api-client', async (importOriginal: () => Promise<unknown>) => {
|
|
12
|
+
const actual = (await importOriginal()) as typeof import('@spiffy-ai/commerce-api-client');
|
|
13
|
+
return {
|
|
14
|
+
...actual,
|
|
15
|
+
DefaultApi: vi.fn().mockImplementation(function DefaultApi() {
|
|
16
|
+
return { v1GetSessionMessages: mockV1GetSessionMessages };
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const makeSessionResponse = (overrides: Record<string, unknown> = {}) => ({
|
|
22
|
+
responses: [],
|
|
23
|
+
suggestions: [],
|
|
24
|
+
user_events: [],
|
|
25
|
+
...overrides,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const productResponse = (id: string, title: string) => ({
|
|
29
|
+
id: `resp-${id}`,
|
|
30
|
+
created_at: '2026-07-20T00:00:00.000Z',
|
|
31
|
+
category: ResponseCategory.Product,
|
|
32
|
+
attributes: {
|
|
33
|
+
id,
|
|
34
|
+
title,
|
|
35
|
+
url: `https://example.com/${id}`,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const addToCartEvent = (eventId: string, productId: string) => ({
|
|
40
|
+
event_id: eventId,
|
|
41
|
+
created_at: '2026-07-20T00:00:01.000Z',
|
|
42
|
+
category: UserEventCategory.AddToCart,
|
|
43
|
+
attributes: {
|
|
44
|
+
product_id: productId,
|
|
45
|
+
parent_product_id: '',
|
|
46
|
+
url: '',
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
beforeEach(() => {
|
|
51
|
+
vi.clearAllMocks();
|
|
52
|
+
getAtomStore().set(enviveConfigAtom, {
|
|
53
|
+
baseUrl: 'https://commerce-api.test',
|
|
54
|
+
orgLevelApiKey: 'test-key',
|
|
55
|
+
orgId: 'org-1',
|
|
56
|
+
orgShortName: 'test-org',
|
|
57
|
+
env: 'dev',
|
|
58
|
+
contextSource: 'app',
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe('CommerceApiClient.getResponses — AddToCart title resolution on rehydration', () => {
|
|
63
|
+
it('resolves the title for free from a matching Product response, without a fallback fetch', async () => {
|
|
64
|
+
mockV1GetSessionMessages.mockResolvedValueOnce(
|
|
65
|
+
makeSessionResponse({
|
|
66
|
+
responses: [[productResponse('sku-tier1', 'Tier One Sweater')]],
|
|
67
|
+
user_events: [addToCartEvent('evt-tier1', 'sku-tier1')],
|
|
68
|
+
}),
|
|
69
|
+
);
|
|
70
|
+
const fetchSpy = vi.spyOn(global, 'fetch');
|
|
71
|
+
|
|
72
|
+
const { messages } = await CommerceApiClient.getResponses('org-1', 'chat-1', 'user-1');
|
|
73
|
+
|
|
74
|
+
const addToCartMessage = messages.flat().find(m => m.id === 'evt-tier1');
|
|
75
|
+
expect(addToCartMessage?.type).toBe(MessageType.QueryTyped);
|
|
76
|
+
if (addToCartMessage?.type === MessageType.QueryTyped) {
|
|
77
|
+
expect(addToCartMessage.metadata.content).toBe('Add Tier One Sweater to my cart');
|
|
78
|
+
}
|
|
79
|
+
expect(fetchSpy).not.toHaveBeenCalled();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('falls back to a cached product-details fetch when no matching response exists', async () => {
|
|
83
|
+
mockV1GetSessionMessages.mockResolvedValueOnce(
|
|
84
|
+
makeSessionResponse({
|
|
85
|
+
user_events: [addToCartEvent('evt-tier2', 'sku-tier2')],
|
|
86
|
+
}),
|
|
87
|
+
);
|
|
88
|
+
const fetchMock = vi.fn().mockResolvedValue({
|
|
89
|
+
ok: true,
|
|
90
|
+
json: async () => ({ data: { me: { productOptions: { title: 'Tier Two Boots' } } } }),
|
|
91
|
+
});
|
|
92
|
+
vi.stubGlobal('fetch', fetchMock);
|
|
93
|
+
|
|
94
|
+
const { messages } = await CommerceApiClient.getResponses('org-1', 'chat-1', 'user-1');
|
|
95
|
+
|
|
96
|
+
const addToCartMessage = messages.flat().find(m => m.id === 'evt-tier2');
|
|
97
|
+
expect(addToCartMessage?.type).toBe(MessageType.QueryTyped);
|
|
98
|
+
if (addToCartMessage?.type === MessageType.QueryTyped) {
|
|
99
|
+
expect(addToCartMessage.metadata.content).toBe('Add Tier Two Boots to my cart');
|
|
100
|
+
}
|
|
101
|
+
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it('degrades to the raw productId when neither tier resolves a title', async () => {
|
|
105
|
+
mockV1GetSessionMessages.mockResolvedValueOnce(
|
|
106
|
+
makeSessionResponse({
|
|
107
|
+
user_events: [addToCartEvent('evt-tier3', 'sku-tier3-unresolvable')],
|
|
108
|
+
}),
|
|
109
|
+
);
|
|
110
|
+
vi.stubGlobal(
|
|
111
|
+
'fetch',
|
|
112
|
+
vi.fn().mockResolvedValue({
|
|
113
|
+
ok: true,
|
|
114
|
+
json: async () => ({ data: { me: { productOptions: null } } }),
|
|
115
|
+
}),
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
const { messages } = await CommerceApiClient.getResponses('org-1', 'chat-1', 'user-1');
|
|
119
|
+
|
|
120
|
+
const addToCartMessage = messages.flat().find(m => m.id === 'evt-tier3');
|
|
121
|
+
expect(addToCartMessage?.type).toBe(MessageType.QueryTyped);
|
|
122
|
+
if (addToCartMessage?.type === MessageType.QueryTyped) {
|
|
123
|
+
expect(addToCartMessage.metadata.content).toBe('Add sku-tier3-unresolvable to my cart');
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
});
|