@envive-ai/react-hooks 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +2 -0
- package/README.md +2 -0
- package/dist/GridInsertionService-CEYo9pGj.js +22 -0
- package/dist/GridInsertionService-CS_bnPh0.cjs +28 -0
- package/dist/bandolier-Ble8jEa8.js +1221 -0
- package/dist/bandolier-Bm2xAt_j.cjs +1221 -0
- package/dist/carpe-Da7b-LCW.cjs +599 -0
- package/dist/carpe-W13mhRRP.js +597 -0
- package/dist/cdnService-CZ-aXcY6.cjs +23 -0
- package/dist/cdnService-zQfKk3Eb.js +18 -0
- package/dist/chatElementDisplayLocation-CX8fuNao.d.cts +239 -0
- package/dist/chatElementDisplayLocation-CwptS9tx.d.ts +239 -0
- package/dist/chunk-CUT6urMc.cjs +30 -0
- package/dist/contexts/index.cjs +13 -0
- package/dist/contexts/index.d.cts +65 -0
- package/dist/contexts/index.d.ts +66 -0
- package/dist/contexts/index.js +7 -0
- package/dist/contexts-BRjfVq_k.js +5064 -0
- package/dist/contexts-BYArqZtK.cjs +5164 -0
- package/dist/coterie-3y0D9ko4.cjs +229 -0
- package/dist/coterie-DOWcJAYv.js +229 -0
- package/dist/custservice-types-CFIFwZ-r.js +10 -0
- package/dist/custservice-types-CkfxZiHY.cjs +16 -0
- package/dist/default-C2fEZKXk.js +175 -0
- package/dist/default-CBUq6Q6G.cjs +4 -0
- package/dist/default-CGIFZK6m.js +4 -0
- package/dist/default-D_KPZdPJ.cjs +198 -0
- package/dist/divIds-Bss-btao.js +49 -0
- package/dist/divIds-DnZNd7rA.cjs +223 -0
- package/dist/dreamlandBaby-DCIsuU9R.cjs +338 -0
- package/dist/dreamlandBaby-DvSaZGrz.js +338 -0
- package/dist/entrypoints-D_JUvkgy.cjs +18 -0
- package/dist/entrypoints-YLQsbBRD.js +6 -0
- package/dist/enviveConfigContext-CUGLpPGU.js +34 -0
- package/dist/enviveConfigContext-Dfr2VH6u.cjs +48 -0
- package/dist/fiveCbd-B1SESMCO.js +605 -0
- package/dist/fiveCbd-CkOlVby_.cjs +605 -0
- package/dist/forLoveAndLemons-CfYPMnKS.cjs +660 -0
- package/dist/forLoveAndLemons-DmwYZIk0.js +658 -0
- package/dist/greenpan-Bsl3ir59.cjs +389 -0
- package/dist/greenpan-BtOi45lf.js +389 -0
- package/dist/grooveLife-6_dtYsRk.js +334 -0
- package/dist/grooveLife-Cmm1PSCL.cjs +334 -0
- package/dist/homegrownCannabis-C-kw-74X.js +400 -0
- package/dist/homegrownCannabis-CO0uY_mp.cjs +400 -0
- package/dist/hooks/index.cjs +16 -0
- package/dist/hooks/index.d.cts +357 -0
- package/dist/hooks/index.d.ts +357 -0
- package/dist/hooks/index.js +7 -0
- package/dist/jackArcher-CLVmwwpI.js +719 -0
- package/dist/jackArcher-DdYTIzAV.cjs +719 -0
- package/dist/jordanCraig-Am-Oor-O.js +1778 -0
- package/dist/jordanCraig-_u3-w4Hp.cjs +1778 -0
- package/dist/kindredBravely-CWovIDSc.cjs +482 -0
- package/dist/kindredBravely-eWp-ud_E.js +482 -0
- package/dist/kutFromTheKloth-BMV4BuGQ.js +361 -0
- package/dist/kutFromTheKloth-Q589bAOC.cjs +361 -0
- package/dist/larryAndSerges-BMUlTgI-.js +252 -0
- package/dist/larryAndSerges-CEau764j.cjs +252 -0
- package/dist/leapsAndRebounds-DGMzPO7T.js +352 -0
- package/dist/leapsAndRebounds-DHAtRTJD.cjs +352 -0
- package/dist/logger-Dln20ans.cjs +25 -0
- package/dist/logger-pdEEY8T2.js +19 -0
- package/dist/longevityrx-CZW8Hxzi.cjs +312 -0
- package/dist/longevityrx-jH2JLhNH.js +312 -0
- package/dist/lookOptic-BGXP5P_V.js +274 -0
- package/dist/lookOptic-CA6RwLbG.cjs +274 -0
- package/dist/mantraBrand-Cm9_PBCT.js +742 -0
- package/dist/mantraBrand-DByNqpnL.cjs +742 -0
- package/dist/medterra-B0wxj_PV.js +575 -0
- package/dist/medterra-DnPN2ksU.cjs +575 -0
- package/dist/modells-Bmz8Ag5M.js +476 -0
- package/dist/modells-CoYgkLSp.cjs +476 -0
- package/dist/models-DHdb7QWn.js +51 -0
- package/dist/models-ixxUsGL_.cjs +69 -0
- package/dist/pressedFloral-DSKs_oVG.js +653 -0
- package/dist/pressedFloral-DjBiSoUl.cjs +653 -0
- package/dist/skinPerfection-B_3xzVNS.cjs +326 -0
- package/dist/skinPerfection-IDrBuAPt.js +326 -0
- package/dist/snapSupplements-BJk5T5ba.js +277 -0
- package/dist/snapSupplements-BStTsdOZ.cjs +277 -0
- package/dist/socialProofClasses-Bhv2Vulz.js +9 -0
- package/dist/socialProofClasses-CrQBWdSA.cjs +39 -0
- package/dist/spanx-BYg0LE7R.js +653 -0
- package/dist/spanx-LwU1zSzq.cjs +655 -0
- package/dist/spanxStaging-CfSmuKYB.js +837 -0
- package/dist/spanxStaging-OZLV9qix.cjs +840 -0
- package/dist/suggestionBarV2-types-BllzwsBD.js +34 -0
- package/dist/suggestionBarV2-types-CaovchMP.cjs +46 -0
- package/dist/supergoop-BqPXDnKk.cjs +327 -0
- package/dist/supergoop-CIlrHND_.js +325 -0
- package/dist/types-C4T5UOIW.cjs +230 -0
- package/dist/types-CYNvLeSA.js +176 -0
- package/dist/uniqueVintage-B30mOqbH.cjs +1205 -0
- package/dist/uniqueVintage-CFueJOhO.js +1203 -0
- package/dist/venaCbd-DHGZy49P.cjs +357 -0
- package/dist/venaCbd-T0CqVD4k.js +357 -0
- package/dist/westonJonBoucher-BdMzs_Yg.cjs +414 -0
- package/dist/westonJonBoucher-b4TCQ4ev.js +414 -0
- package/dist/wineEnthusiast-BLGlOjgr.cjs +932 -0
- package/dist/wineEnthusiast-BqR0i_54.js +932 -0
- package/dist/wolfMattress-CyyO-LoC.js +362 -0
- package/dist/wolfMattress-DNGZOivg.cjs +362 -0
- package/dist/wolfTactical-3Mm2fvVF.js +341 -0
- package/dist/wolfTactical-BmXYlFjr.cjs +341 -0
- package/package.json +66 -0
- package/src/adapters/amplitude/amplitudeAdapter.ts +454 -0
- package/src/adapters/amplitude/index.ts +2 -0
- package/src/adapters/amplitude/stubAmplitudeAdapter.ts +34 -0
- package/src/adapters/spiffy/commerce/api.ts +596 -0
- package/src/adapters/spiffy/commerce/exceptions/sessionExceptions.ts +6 -0
- package/src/adapters/spiffy/commerce/exceptions/unsupportedProductExceptions.ts +6 -0
- package/src/adapters/spiffy/commerce/graphql.ts +184 -0
- package/src/application/config/generalStaticConfig.ts +37 -0
- package/src/application/logging/logger.ts +29 -0
- package/src/application/models/api/context.ts +4 -0
- package/src/application/models/api/generationParams.ts +4 -0
- package/src/application/models/api/nextMessageRequest.ts +11 -0
- package/src/application/models/api/orgAnalyticsConfig.ts +19 -0
- package/src/application/models/api/orgConfigResults.ts +40 -0
- package/src/application/models/api/organizationConfig.ts +12 -0
- package/src/application/models/api/response.ts +132 -0
- package/src/application/models/api/responseGenerics.ts +67 -0
- package/src/application/models/api/search.ts +26 -0
- package/src/application/models/api/suggestion.ts +4 -0
- package/src/application/models/api/supportedEventRequest.ts +8 -0
- package/src/application/models/api/userEvent.ts +101 -0
- package/src/application/models/cachedValue.ts +8 -0
- package/src/application/models/chatElementDisplayLocation.ts +22 -0
- package/src/application/models/clientDetails.ts +18 -0
- package/src/application/models/colorsConfig.ts +28 -0
- package/src/application/models/conversationalSearchIds.ts +5 -0
- package/src/application/models/dataLayer.ts +45 -0
- package/src/application/models/domMutationContinuation.ts +7 -0
- package/src/application/models/domObservationStrategy.ts +9 -0
- package/src/application/models/events.ts +5 -0
- package/src/application/models/featureGates.ts +23 -0
- package/src/application/models/frontendConfig.ts +14 -0
- package/src/application/models/googleAnalyticsEvents.ts +8 -0
- package/src/application/models/graphql/index.ts +2 -0
- package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +37 -0
- package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +103 -0
- package/src/application/models/graphql/queries/getMerchantOrgIdQuery.ts +11 -0
- package/src/application/models/guards/api/index.ts +12 -0
- package/src/application/models/guards/api/isApiFormResponse.ts +90 -0
- package/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts +37 -0
- package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +155 -0
- package/src/application/models/guards/api/isApiOrgConfigResults.ts +277 -0
- package/src/application/models/guards/api/isApiOrganizationConfig.ts +207 -0
- package/src/application/models/guards/api/isApiPDPEventAttributes.ts +21 -0
- package/src/application/models/guards/api/isApiPLPEventAttributes.ts +41 -0
- package/src/application/models/guards/api/isApiPageResponseAttributes.ts +21 -0
- package/src/application/models/guards/api/isApiProductResponseAttributes.ts +85 -0
- package/src/application/models/guards/api/isApiProductSearchAttributes.ts +23 -0
- package/src/application/models/guards/api/isApiProductSearchFilterAttributes.ts +15 -0
- package/src/application/models/guards/api/isApiQueryTypedEventAttributes.ts +4 -0
- package/src/application/models/guards/api/isApiResponse.ts +39 -0
- package/src/application/models/guards/api/isApiReviewResponseAttributes.ts +30 -0
- package/src/application/models/guards/api/isApiReviewRichInformation.ts +37 -0
- package/src/application/models/guards/api/isApiSearchEventAttributes.ts +28 -0
- package/src/application/models/guards/api/isApiSuggestion.ts +36 -0
- package/src/application/models/guards/api/isApiSuggestionClickedEventAttributes.ts +9 -0
- package/src/application/models/guards/api/isApiTextResponseAttributes.ts +9 -0
- package/src/application/models/guards/api/isApiUserEvent.ts +25 -0
- package/src/application/models/guards/graphQL/isGraphQLColorsConfig.ts +50 -0
- package/src/application/models/guards/isBaseEcommerceEvent.ts +17 -0
- package/src/application/models/guards/isGA4EcommerceEvent.ts +17 -0
- package/src/application/models/guards/isLegacyUAEcommerceEvent.ts +17 -0
- package/src/application/models/guards/isMobilePLPChatPlacementParameter.ts +11 -0
- package/src/application/models/guards/isSpanxTakeAQuizCtaParameter.ts +4 -0
- package/src/application/models/guards/isVariantInfo.ts +37 -0
- package/src/application/models/guards/utils.ts +43 -0
- package/src/application/models/index.ts +20 -0
- package/src/application/models/localStorageEventListener.ts +4 -0
- package/src/application/models/message.ts +146 -0
- package/src/application/models/mobilePLPChatPlacementParameter.ts +3 -0
- package/src/application/models/orgsEnum.ts +36 -0
- package/src/application/models/productExperiment.ts +5 -0
- package/src/application/models/spanxTakeAQuizCtaParameter.ts +4 -0
- package/src/application/models/spiffyWidgets.ts +16 -0
- package/src/application/models/supportedOrgs.ts +137 -0
- package/src/application/models/utilityTypes/camelCase.ts +87 -0
- package/src/application/models/utilityTypes/camelCasedPropertiesDeep.ts +80 -0
- package/src/application/models/utilityTypes/delimiterCase.ts +121 -0
- package/src/application/models/utilityTypes/delimiterCasedPropertiesDeep.ts +98 -0
- package/src/application/models/utilityTypes/index.ts +1 -0
- package/src/application/models/utilityTypes/internal.ts +93 -0
- package/src/application/models/utilityTypes/primitive.ts +8 -0
- package/src/application/models/utilityTypes/snakeCasedPropertiesDeep.ts +49 -0
- package/src/application/models/utilityTypes/splitWords.ts +76 -0
- package/src/application/models/utilityTypes/trim.ts +28 -0
- package/src/application/models/utilityTypes/unknownArray.ts +25 -0
- package/src/application/models/utils/snakeToCamelTransformer.ts +90 -0
- package/src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.ts +68 -0
- package/src/application/models/validators/validateGraphQLColorsConfig.ts +29 -0
- package/src/application/models/validators/validateGraphQLFrontendConfig.ts +594 -0
- package/src/application/models/validators/validateGraphQLOrgId.ts +7 -0
- package/src/application/models/validators/validateMobilePLPChatPlacementParameter.ts +14 -0
- package/src/application/models/validators/validateOrgConfigResults.ts +47 -0
- package/src/application/models/validators/validateOrganizationConfig.ts +37 -0
- package/src/application/models/validators/validateResponse.ts +187 -0
- package/src/application/models/validators/validateSuggestion.ts +16 -0
- package/src/application/models/validators/validateUserEvent.ts +110 -0
- package/src/application/models/variantInfo/index.ts +1 -0
- package/src/application/models/variantInfo/pageVisitInfo.ts +6 -0
- package/src/application/models/variantInfo/plpInfo.ts +3 -0
- package/src/application/models/variantInfo/productInfo.ts +5 -0
- package/src/application/models/variantInfo/variantInfo.ts +23 -0
- package/src/application/service/cachingService.ts +84 -0
- package/src/application/service/cdnService.ts +18 -0
- package/src/application/service/customerService/index.ts +8 -0
- package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +15 -0
- package/src/application/service/customerService/types.ts +31 -0
- package/src/application/service/domMutationObserver.ts +320 -0
- package/src/application/service/domMutations/GridInsertionService.ts +123 -0
- package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +99 -0
- package/src/application/service/domMutations/domInsertionService.ts +90 -0
- package/src/application/service/domMutations/domMutationListener.ts +15 -0
- package/src/application/service/domMutations/domMutationListenerState.ts +52 -0
- package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +41 -0
- package/src/application/service/domMutations/gladly/gladlyListener.ts +61 -0
- package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +41 -0
- package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +119 -0
- package/src/application/service/environmentService.ts +51 -0
- package/src/application/service/featureFlagService.ts +130 -0
- package/src/application/service/kustomerIntegrationService.ts +111 -0
- package/src/application/service/localStorageService.ts +77 -0
- package/src/application/service/pageVariantService.ts +779 -0
- package/src/application/service/searchService.ts +140 -0
- package/src/application/service/sessionStorageService.ts +27 -0
- package/src/application/service/shopifyUrlService.ts +63 -0
- package/src/application/service/userIdentityService.ts +114 -0
- package/src/application/service/windowChatToggleService.ts +71 -0
- package/src/application/service/windowDataLayerService.ts +181 -0
- package/src/application/service/windowFrontendConfigService.ts +104 -0
- package/src/application/utils/__tests__/divideArrays.test.ts +14 -0
- package/src/application/utils/analyticsUtils.ts +110 -0
- package/src/application/utils/coreContextToApiContext.ts +11 -0
- package/src/application/utils/coreUserEventToApiUserEvent.ts +106 -0
- package/src/application/utils/divideArray.ts +7 -0
- package/src/application/utils/domObserver.ts +96 -0
- package/src/application/utils/elementObserver.ts +246 -0
- package/src/application/utils/imageFilter.ts +12 -0
- package/src/application/utils/index.ts +3 -0
- package/src/application/utils/merchantUtils.ts +16 -0
- package/src/application/utils/messageFromFormSubmittedEvent.ts +31 -0
- package/src/application/utils/messageFromQueryEvent.ts +38 -0
- package/src/application/utils/messageFromResponse.ts +133 -0
- package/src/application/utils/messageFromSuggestionEvent.ts +32 -0
- package/src/application/utils/mouseEventTypes.ts +1 -0
- package/src/application/utils/mutationHelper.ts +51 -0
- package/src/application/utils/nextMessageRequestToApiRequest.ts +31 -0
- package/src/application/utils/nodeSelector.ts +133 -0
- package/src/application/utils/overrides.ts +196 -0
- package/src/application/utils/stringUtils.ts +55 -0
- package/src/application/utils/supportedEventRequestToApiRequest.ts +12 -0
- package/src/application/utils/urlsParser.ts +53 -0
- package/src/application/utils/validation.ts +5 -0
- package/src/atoms/app/index.ts +57 -0
- package/src/atoms/app/variant.ts +261 -0
- package/src/atoms/atomStore.ts +34 -0
- package/src/atoms/chat/chatState.ts +44 -0
- package/src/atoms/chat/form.ts +19 -0
- package/src/atoms/chat/index.ts +38 -0
- package/src/atoms/chat/lastMessage.ts +11 -0
- package/src/atoms/chat/messageQueue.ts +65 -0
- package/src/atoms/chat/performanceMetrics.ts +84 -0
- package/src/atoms/chat/renderedWidgetRefs.ts +28 -0
- package/src/atoms/chat/replies.ts +51 -0
- package/src/atoms/chat/suggestions.ts +36 -0
- package/src/atoms/globalSearch.ts +12 -0
- package/src/atoms/index.ts +5 -0
- package/src/atoms/org/customerService.ts +13 -0
- package/src/atoms/org/graphqlConfig.ts +27 -0
- package/src/atoms/org/index.ts +7 -0
- package/src/atoms/org/merchantCss.ts +44 -0
- package/src/atoms/org/org.ts +256 -0
- package/src/atoms/org/orgAnalyticsConfig.ts +28 -0
- package/src/atoms/org/orgPageConfig.ts +38 -0
- package/src/atoms/org/orgUIConfig.ts +122 -0
- package/src/atoms/search/chatSearch.ts +293 -0
- package/src/atoms/search/index.ts +2 -0
- package/src/atoms/search/productFilters.ts +207 -0
- package/src/atoms/search/productSorter.ts +23 -0
- package/src/atoms/search/searchAPI.ts +194 -0
- package/src/atoms/search/types.ts +55 -0
- package/src/atoms/search/utils.ts +18 -0
- package/src/config/divIds.ts +27 -0
- package/src/config/locators/components/chat/entrypoints.ts +13 -0
- package/src/config/locators/components/chat/index.ts +23 -0
- package/src/config/locators/components/chat/preview.ts +13 -0
- package/src/config/locators/components/chat/variants/index.ts +16 -0
- package/src/config/locators/components/common/buttons.ts +6 -0
- package/src/config/locators/components/common/cards.ts +18 -0
- package/src/config/locators/components/common/links.ts +1 -0
- package/src/config/locators/components/common/tables.ts +2 -0
- package/src/config/locators/components/floating-button.ts +2 -0
- package/src/config/locators/components/index.ts +3 -0
- package/src/config/locators/components/report-issue.ts +21 -0
- package/src/config/locators/components/search/index.ts +5 -0
- package/src/config/locators/components/shadow-dom.ts +1 -0
- package/src/config/locators/embedded.ts +21 -0
- package/src/config/locators/index.ts +3 -0
- package/src/config/socialProofClasses.ts +17 -0
- package/src/contexts/chatContext.tsx +451 -0
- package/src/contexts/enviveConfigContext.tsx +70 -0
- package/src/contexts/index.ts +4 -0
- package/src/contexts/systemSettingsContext.tsx +61 -0
- package/src/contexts/types.ts +1059 -0
- package/src/enabled-features.ts +83 -0
- package/src/events/event-types.ts +11 -0
- package/src/events/index.ts +52 -0
- package/src/events/registerAnalyticsListeners.ts +49 -0
- package/src/extension.ts +63 -0
- package/src/hooks/index.ts +22 -0
- package/src/hooks/useBlockBackButton.ts +29 -0
- package/src/hooks/useChatToggle.ts +66 -0
- package/src/hooks/useCustomerSupportHandoff.ts +39 -0
- package/src/hooks/useDebounce.ts +17 -0
- package/src/hooks/useDynamicVariants.ts +210 -0
- package/src/hooks/useElementObserver.ts +245 -0
- package/src/hooks/useFileUpload.ts +61 -0
- package/src/hooks/useGrabAndScroll.ts +133 -0
- package/src/hooks/useHideElements.ts +82 -0
- package/src/hooks/useHorizontalScrollAnimation.ts +115 -0
- package/src/hooks/useImageResolver.ts +51 -0
- package/src/hooks/useIntersection.ts +28 -0
- package/src/hooks/useIsSmallScreen.ts +23 -0
- package/src/hooks/useMessageFilter.ts +49 -0
- package/src/hooks/useMessageScrollObserver.ts +47 -0
- package/src/hooks/useReducedMotionWithOverride.ts +15 -0
- package/src/hooks/useSearch.tsx +433 -0
- package/src/hooks/useSnapCalculator.ts +38 -0
- package/src/hooks/useSnapControl.ts +155 -0
- package/src/hooks/useSystemSettingsContext.ts +12 -0
- package/src/hooks/useTrackComponentVisibleEvent.ts +52 -0
- package/src/hooks/useUpdateAnalyticsProps.ts +56 -0
- package/src/hooks/utils.ts +153 -0
- package/src/index.ts +31 -0
- package/src/initialize.ts +163 -0
- package/src/interceptors/types.ts +6 -0
- package/src/interceptors/useFormEscalation.ts +40 -0
- package/src/interceptors/useMessageInterceptor.ts +32 -0
- package/src/main.ts +85 -0
- package/src/main.tsx +123 -0
- package/src/merchants/bandolier/bandolier.ts +1389 -0
- package/src/merchants/carpe/carpe.ts +656 -0
- package/src/merchants/coterie/coterie.ts +280 -0
- package/src/merchants/default.ts +193 -0
- package/src/merchants/dreamlandBaby/dreamlandBaby.ts +375 -0
- package/src/merchants/fiveCbd/fiveCbd.ts +697 -0
- package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +721 -0
- package/src/merchants/greenpan/greenpan.ts +440 -0
- package/src/merchants/grooveLife/grooveLife.ts +386 -0
- package/src/merchants/homegrownCannabis/homegrownCannabis.ts +468 -0
- package/src/merchants/init-merchant.sh +53 -0
- package/src/merchants/jackArcher/jackArcher.ts +974 -0
- package/src/merchants/jordanCraig/jordanCraig.ts +1927 -0
- package/src/merchants/kindredBravely/kindredBravely.ts +529 -0
- package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +418 -0
- package/src/merchants/larryAndSerges/larryAndSerges.ts +314 -0
- package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +424 -0
- package/src/merchants/longevityrx/longevityrx.ts +368 -0
- package/src/merchants/lookOptic/lookOptic.ts +323 -0
- package/src/merchants/mantraBrand/mantraBrand.ts +838 -0
- package/src/merchants/medterra/medterra.ts +670 -0
- package/src/merchants/modells/modells.ts +546 -0
- package/src/merchants/pressedFloral/pressedFloral.ts +734 -0
- package/src/merchants/skinPerfection/skinPerfection.ts +379 -0
- package/src/merchants/snapSupplements/snapSupplements.ts +325 -0
- package/src/merchants/spanx/spanx.ts +810 -0
- package/src/merchants/spanx/spanxStaging.ts +942 -0
- package/src/merchants/supergoop/supergoop.ts +376 -0
- package/src/merchants/uniqueVintage/uniqueVintage.ts +1314 -0
- package/src/merchants/uniqueVintage/views/useUniqueVintageChatSearch.ts +147 -0
- package/src/merchants/venaCbd/venaCbd.ts +410 -0
- package/src/merchants/westonJonBoucher/westonJonBoucher.ts +473 -0
- package/src/merchants/wineEnthusiast/wineEnthusiast.ts +990 -0
- package/src/merchants/wolfMattress/wolfMattress.ts +411 -0
- package/src/merchants/wolfTactical/wolfTactical.ts +389 -0
- package/src/types/custservice-types.ts +28 -0
- package/src/types/search-filter-types.ts +111 -0
- package/src/types/suggestionBarV2-types.ts +4 -0
- package/src/types/test-types.ts +3 -0
- package/src/types.ts +66 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import Logger from 'src/application/logging/logger';
|
|
2
|
+
import { ColorMapping } from 'src/application/models/colorsConfig';
|
|
3
|
+
import { FrontendConfig } from 'src/application/models/frontendConfig';
|
|
4
|
+
import {
|
|
5
|
+
getMerchantColorsQuery,
|
|
6
|
+
GetMerchantColorsQueryData,
|
|
7
|
+
getMerchantFrontendConfigQuery,
|
|
8
|
+
GetMerchantFrontendConfigQueryData,
|
|
9
|
+
} from 'src/application/models/graphql';
|
|
10
|
+
import { getMerchantOrgIdQuery } from 'src/application/models/graphql/queries/getMerchantOrgIdQuery';
|
|
11
|
+
import { isGraphQLColorsConfig } from 'src/application/models/guards/graphQL/isGraphQLColorsConfig';
|
|
12
|
+
import { validateGraphQLColorsConfig } from 'src/application/models/validators/validateGraphQLColorsConfig';
|
|
13
|
+
import { validateGraphQLFrontendConfig } from 'src/application/models/validators/validateGraphQLFrontendConfig';
|
|
14
|
+
import { validateGraphQLOrgId } from 'src/application/models/validators/validateGraphQLOrgId';
|
|
15
|
+
import { EnvironmentService } from 'src/application/service/environmentService';
|
|
16
|
+
import { getQueryParam } from 'src/application/utils/urlsParser';
|
|
17
|
+
import { getAtomStore } from 'src/atoms/atomStore';
|
|
18
|
+
import { apiKeyAtom } from 'src/atoms/org/org';
|
|
19
|
+
|
|
20
|
+
export const configVersion = () =>
|
|
21
|
+
getQueryParam('spiffy_config_version') || getQueryParam('envive_config_version') || 'deployed';
|
|
22
|
+
|
|
23
|
+
const colorsAndFrontendConfigQuery = () => `
|
|
24
|
+
query ($version: String = "${configVersion()}") {
|
|
25
|
+
me {
|
|
26
|
+
getProductsConfigByVersion(version: $version) {
|
|
27
|
+
frontend { values }
|
|
28
|
+
colors { values }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
interface BaseMeConfigQueryResponse {
|
|
34
|
+
me: {
|
|
35
|
+
org?: {
|
|
36
|
+
id: string;
|
|
37
|
+
};
|
|
38
|
+
getProductsConfigByVersion?: {
|
|
39
|
+
frontend?: { values: GetMerchantFrontendConfigQueryData };
|
|
40
|
+
colors?: { values: GetMerchantColorsQueryData };
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
class GraphQLClient {
|
|
46
|
+
private static instance: GraphQLClient | undefined;
|
|
47
|
+
|
|
48
|
+
private readonly apiKey: string;
|
|
49
|
+
|
|
50
|
+
private readonly basePath: string;
|
|
51
|
+
|
|
52
|
+
static readonly setInstance = (apiKey: string, basePath: string) => {
|
|
53
|
+
GraphQLClient.instance = new GraphQLClient(apiKey, basePath);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
private static readonly getInstance = (): GraphQLClient => {
|
|
57
|
+
if (!GraphQLClient.instance) {
|
|
58
|
+
const atomStore = getAtomStore();
|
|
59
|
+
const apiKey = atomStore.get(apiKeyAtom);
|
|
60
|
+
GraphQLClient.instance = new GraphQLClient(apiKey, EnvironmentService.getApiEndpoint());
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return GraphQLClient.instance;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
private constructor(apiKey: string, basePath: string) {
|
|
67
|
+
this.apiKey = apiKey;
|
|
68
|
+
this.basePath = basePath;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private async executeQuery<T>(query: string, variables?: Record<string, unknown>): Promise<T> {
|
|
72
|
+
const response = await fetch(`${this.basePath}/v1/graphql`, {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: {
|
|
75
|
+
'Content-Type': 'application/json',
|
|
76
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
77
|
+
},
|
|
78
|
+
body: JSON.stringify({
|
|
79
|
+
query,
|
|
80
|
+
variables,
|
|
81
|
+
}),
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
if (!response.ok) {
|
|
85
|
+
throw new Error(`GraphQL request failed: ${response.statusText}`);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const result = await response.json();
|
|
89
|
+
|
|
90
|
+
if (result.errors) {
|
|
91
|
+
throw new Error(`GraphQL errors: ${JSON.stringify(result.errors)}`);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return result.data;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
static readonly getOrgId = async (): Promise<string | undefined> => {
|
|
98
|
+
const query = getMerchantOrgIdQuery;
|
|
99
|
+
if (!query) {
|
|
100
|
+
throw new Error('Org id query is not defined');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const response =
|
|
104
|
+
await GraphQLClient.getInstance().executeQuery<BaseMeConfigQueryResponse>(query);
|
|
105
|
+
|
|
106
|
+
return validateGraphQLOrgId(response.me.org?.id);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
static readonly getColorsAndFrontendConfig = async (): Promise<{
|
|
110
|
+
colorsConfig?: ColorMapping;
|
|
111
|
+
frontendConfig?: FrontendConfig;
|
|
112
|
+
}> => {
|
|
113
|
+
try {
|
|
114
|
+
const query = colorsAndFrontendConfigQuery();
|
|
115
|
+
if (!query) {
|
|
116
|
+
throw new Error('Colors and frontend config query is not defined');
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const response =
|
|
120
|
+
await GraphQLClient.getInstance().executeQuery<BaseMeConfigQueryResponse>(query);
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
colorsConfig: validateGraphQLColorsConfig(
|
|
124
|
+
response.me.getProductsConfigByVersion?.colors?.values,
|
|
125
|
+
),
|
|
126
|
+
frontendConfig: validateGraphQLFrontendConfig(
|
|
127
|
+
response.me.getProductsConfigByVersion?.frontend?.values,
|
|
128
|
+
),
|
|
129
|
+
};
|
|
130
|
+
} catch (err) {
|
|
131
|
+
Logger.logError('Error fetching graphql colors and frontend config', err);
|
|
132
|
+
return {
|
|
133
|
+
colorsConfig: undefined,
|
|
134
|
+
frontendConfig: undefined,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
static readonly getFrontendConfig = async (): Promise<FrontendConfig | undefined> => {
|
|
140
|
+
try {
|
|
141
|
+
const query = getMerchantFrontendConfigQuery();
|
|
142
|
+
if (!query) {
|
|
143
|
+
throw new Error('Frontend config query is not defined');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const response =
|
|
147
|
+
await GraphQLClient.getInstance().executeQuery<BaseMeConfigQueryResponse>(query);
|
|
148
|
+
|
|
149
|
+
if (!response.me.getProductsConfigByVersion?.frontend) {
|
|
150
|
+
throw new Error('No frontend config found');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return validateGraphQLFrontendConfig(response.me.getProductsConfigByVersion.frontend.values);
|
|
154
|
+
} catch (err) {
|
|
155
|
+
Logger.logError('Error fetching graphql frontend config', err);
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
static readonly getColors = async (): Promise<GetMerchantColorsQueryData | undefined> => {
|
|
161
|
+
try {
|
|
162
|
+
const query = getMerchantColorsQuery();
|
|
163
|
+
if (!query) {
|
|
164
|
+
throw new Error('Colors query is not defined');
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const response =
|
|
168
|
+
await GraphQLClient.getInstance().executeQuery<BaseMeConfigQueryResponse>(query);
|
|
169
|
+
|
|
170
|
+
if (!response.me.getProductsConfigByVersion?.colors) {
|
|
171
|
+
throw new Error('No colors config found');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return isGraphQLColorsConfig(response.me.getProductsConfigByVersion.colors.values)
|
|
175
|
+
? response.me.getProductsConfigByVersion.colors.values
|
|
176
|
+
: undefined;
|
|
177
|
+
} catch (err) {
|
|
178
|
+
Logger.logError('Error fetching graphql colors config', err);
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export { GraphQLClient };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ContextSourceEnum } from "@spiffy-ai/commerce-api-client";
|
|
2
|
+
import {
|
|
3
|
+
BOTTOM_REVIEWS_BAR_ID,
|
|
4
|
+
CHAT_PREVIEW_CONTAINER_ID,
|
|
5
|
+
CONTAINER_ID,
|
|
6
|
+
FLOATING_BUTTON_ID,
|
|
7
|
+
TOP_SUGGESTION_BAR_PDP_ID,
|
|
8
|
+
} from "src/config/divIds";
|
|
9
|
+
import { useEnviveConfig } from "src/contexts/enviveConfigContext";
|
|
10
|
+
|
|
11
|
+
class GeneralStaticConfig {
|
|
12
|
+
static readonly REVIEW_SUMMARY_ID: string = BOTTOM_REVIEWS_BAR_ID;
|
|
13
|
+
|
|
14
|
+
static readonly PDP_REVIEW_SUMMARY_ID: string = TOP_SUGGESTION_BAR_PDP_ID;
|
|
15
|
+
|
|
16
|
+
static readonly CHAT_PREVIEW_CONTAINER_ID = CHAT_PREVIEW_CONTAINER_ID;
|
|
17
|
+
|
|
18
|
+
static readonly FLOATING_BUTTON_ID = FLOATING_BUTTON_ID;
|
|
19
|
+
|
|
20
|
+
static readonly CONTAINER_ID = CONTAINER_ID;
|
|
21
|
+
|
|
22
|
+
static showDebugBar(appSource: ContextSourceEnum): boolean {
|
|
23
|
+
const { env } = useEnviveConfig();
|
|
24
|
+
const isProd = env === "prod";
|
|
25
|
+
return (
|
|
26
|
+
!isProd ||
|
|
27
|
+
appSource === ContextSourceEnum.Playground ||
|
|
28
|
+
appSource === ContextSourceEnum.Test
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static getFloatingChatButtonId(): string | undefined {
|
|
33
|
+
return "spiffy-floating-button";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { GeneralStaticConfig };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
|
|
3
|
+
class Logger {
|
|
4
|
+
static logInfo(message: string, ...args: unknown[]): void {
|
|
5
|
+
console.info(`INFO: ${message}`, ...args);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
static logDebug(message: string, ...args: unknown[]): void {
|
|
9
|
+
console.debug(`DEBUG: ${message}`, ...args);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
static logError(
|
|
13
|
+
message: string,
|
|
14
|
+
error: unknown | undefined,
|
|
15
|
+
...args: unknown[]
|
|
16
|
+
): void {
|
|
17
|
+
console.error(`ERROR: ${message} error=${error}`, args);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static logWarn(
|
|
21
|
+
message: string,
|
|
22
|
+
error: unknown | undefined,
|
|
23
|
+
...args: unknown[]
|
|
24
|
+
): void {
|
|
25
|
+
console.warn(`WARN: ${message} error=${error}`, args);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default Logger;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Context } from './context';
|
|
2
|
+
import { UserEvent } from './userEvent';
|
|
3
|
+
import { GenerationParams } from './generationParams';
|
|
4
|
+
|
|
5
|
+
export interface NextMessageRequest {
|
|
6
|
+
id: string;
|
|
7
|
+
context: Context;
|
|
8
|
+
userEvents?: UserEvent[];
|
|
9
|
+
featureFlags?: Record<string, boolean>;
|
|
10
|
+
generationParams?: GenerationParams;
|
|
11
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface OrgAnalyticsConfig {
|
|
2
|
+
amplitude?: OrgAnalyticsAmplitudeConfig;
|
|
3
|
+
customerService?: OrgAnalyticsCustomerServiceConfig;
|
|
4
|
+
googleAnalytics?: OrgAnalyticsGoogleAnalyticsConfig;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface OrgAnalyticsAmplitudeConfig {
|
|
8
|
+
sessionReplayEnabled: boolean;
|
|
9
|
+
sessionReplaySampleRate: number;
|
|
10
|
+
trackingEnabled: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface OrgAnalyticsCustomerServiceConfig {
|
|
14
|
+
provider: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface OrgAnalyticsGoogleAnalyticsConfig {
|
|
18
|
+
measurementId?: string;
|
|
19
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { OrganizationStatusEnum } from '@spiffy-ai/commerce-api-client';
|
|
2
|
+
import { OrganizationConfig } from 'src/application/models/api/organizationConfig';
|
|
3
|
+
|
|
4
|
+
export interface OrgConfigExperiment {
|
|
5
|
+
group?: string;
|
|
6
|
+
groupName?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
ruleId?: string;
|
|
9
|
+
value?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface OrgConfigFeatureGate {
|
|
13
|
+
groupName?: string;
|
|
14
|
+
name?: string;
|
|
15
|
+
ruleId?: string;
|
|
16
|
+
value?: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface Organization {
|
|
20
|
+
id: string;
|
|
21
|
+
displayName: string;
|
|
22
|
+
domain: string;
|
|
23
|
+
shortName: string;
|
|
24
|
+
status: OrganizationStatusEnum;
|
|
25
|
+
createdAt?: string;
|
|
26
|
+
updatedAt?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface OrganizationSettings {
|
|
30
|
+
org: Organization;
|
|
31
|
+
// this is currently not configured by the backend
|
|
32
|
+
settings: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface OrgConfig {
|
|
36
|
+
configs: OrganizationConfig[];
|
|
37
|
+
experiments: OrgConfigExperiment[];
|
|
38
|
+
gates: OrgConfigFeatureGate[];
|
|
39
|
+
org: OrganizationSettings;
|
|
40
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { OrgAnalyticsConfig } from './orgAnalyticsConfig';
|
|
2
|
+
|
|
3
|
+
export interface OrganizationConfig {
|
|
4
|
+
createdAt: string;
|
|
5
|
+
namespace: string;
|
|
6
|
+
isLatest: boolean;
|
|
7
|
+
version: string;
|
|
8
|
+
updatedAt: string;
|
|
9
|
+
config: OrgAnalyticsConfig;
|
|
10
|
+
organizationId?: string;
|
|
11
|
+
id?: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { ResponseCategory } from '@spiffy-ai/commerce-api-client';
|
|
2
|
+
import { CamelCasedPropertiesDeep } from 'src/application/models/utilityTypes';
|
|
3
|
+
|
|
4
|
+
import type {
|
|
5
|
+
ProductSearchResponseAttributes as ApiProductSearchResponseAttributes,
|
|
6
|
+
ResponseProductAttributes as ApiProductResponseAttributes,
|
|
7
|
+
SearchResponseProduct as ApiSearchResponseProduct,
|
|
8
|
+
FormType,
|
|
9
|
+
FulfillmentDisplayStatus,
|
|
10
|
+
} from '@spiffy-ai/commerce-api-client';
|
|
11
|
+
import {
|
|
12
|
+
ApiReviewResponseAttributes,
|
|
13
|
+
ApiReviewRichInformation,
|
|
14
|
+
ApiPageResponseAttributes,
|
|
15
|
+
ApiTextResponseAttributes,
|
|
16
|
+
ApiSearchResponseAttributes,
|
|
17
|
+
ApiProductSearchFilterResponseAttributes,
|
|
18
|
+
} from 'src/application/models/api/responseGenerics';
|
|
19
|
+
|
|
20
|
+
// Internal types
|
|
21
|
+
export interface ReviewRichInformation extends CamelCasedPropertiesDeep<ApiReviewRichInformation> {}
|
|
22
|
+
|
|
23
|
+
export type AcceptableFormFieldType = 'string' | 'number' | 'boolean' | 'object' | 'array';
|
|
24
|
+
|
|
25
|
+
export interface OrderItemInfo {
|
|
26
|
+
itemTitle: string;
|
|
27
|
+
itemPrice: number;
|
|
28
|
+
itemQuantity: number;
|
|
29
|
+
orderItemId: string;
|
|
30
|
+
image?: string;
|
|
31
|
+
inTransitAt?: string;
|
|
32
|
+
deliveredAt?: string;
|
|
33
|
+
estimatedDeliveryAt?: string;
|
|
34
|
+
fulfillmentDisplayStatus?: FulfillmentDisplayStatus;
|
|
35
|
+
trackingUrl?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface OrderResponseAttributes {
|
|
39
|
+
category: ResponseCategory.Order;
|
|
40
|
+
attributes: {
|
|
41
|
+
orderId: string;
|
|
42
|
+
orderNumber: string;
|
|
43
|
+
createdAt: string;
|
|
44
|
+
latestEventDate: string;
|
|
45
|
+
lineItems: OrderItemInfo[];
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface TextResponseAttributes {
|
|
50
|
+
category: ResponseCategory.Text;
|
|
51
|
+
attributes: CamelCasedPropertiesDeep<ApiTextResponseAttributes>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface ProductResponseAttributes {
|
|
55
|
+
category: ResponseCategory.Product;
|
|
56
|
+
attributes: CamelCasedPropertiesDeep<
|
|
57
|
+
ApiProductResponseAttributes & {
|
|
58
|
+
filters?: {
|
|
59
|
+
[key: string]: string[];
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface SearchResponseProductAttributes {
|
|
66
|
+
category: ResponseCategory.Product;
|
|
67
|
+
attributes: CamelCasedPropertiesDeep<ApiSearchResponseProduct>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface SearchResponseAttributes {
|
|
71
|
+
category: ResponseCategory.Text;
|
|
72
|
+
attributes: CamelCasedPropertiesDeep<ApiSearchResponseAttributes>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface SearchProductResponseAttributes {
|
|
76
|
+
category: ResponseCategory.ProductSearch;
|
|
77
|
+
attributes: CamelCasedPropertiesDeep<ApiProductSearchResponseAttributes>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface SearchProductFilterAttributes {
|
|
81
|
+
category: ResponseCategory.ProductSearchFilter;
|
|
82
|
+
attributes: CamelCasedPropertiesDeep<ApiProductSearchFilterResponseAttributes>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface ReviewResponseAttributes {
|
|
86
|
+
category: ResponseCategory.Review;
|
|
87
|
+
attributes: CamelCasedPropertiesDeep<ApiReviewResponseAttributes>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface SeparatorResponseAttributes {
|
|
91
|
+
category: ResponseCategory.Separator;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface PageResponseAttributes {
|
|
95
|
+
category: ResponseCategory.Page;
|
|
96
|
+
attributes: CamelCasedPropertiesDeep<ApiPageResponseAttributes>;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface FormResponseAttributes {
|
|
100
|
+
category: ResponseCategory.Form;
|
|
101
|
+
attributes: {
|
|
102
|
+
formCategory?: {
|
|
103
|
+
formType: FormType;
|
|
104
|
+
};
|
|
105
|
+
schema: {
|
|
106
|
+
properties: {
|
|
107
|
+
[key: string]: {
|
|
108
|
+
type: AcceptableFormFieldType;
|
|
109
|
+
title: string;
|
|
110
|
+
format?: 'email';
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
required: string[];
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export type Response = {
|
|
119
|
+
id: string;
|
|
120
|
+
createdAt: string;
|
|
121
|
+
category: ResponseCategory;
|
|
122
|
+
} & (
|
|
123
|
+
| TextResponseAttributes
|
|
124
|
+
| ProductResponseAttributes
|
|
125
|
+
| ReviewResponseAttributes
|
|
126
|
+
| SeparatorResponseAttributes
|
|
127
|
+
| PageResponseAttributes
|
|
128
|
+
| SearchProductResponseAttributes
|
|
129
|
+
| SearchProductFilterAttributes
|
|
130
|
+
| FormResponseAttributes
|
|
131
|
+
| OrderResponseAttributes
|
|
132
|
+
);
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { FormResponseAttributesFormCategory } from '@spiffy-ai/commerce-api-client';
|
|
2
|
+
import { AcceptableFormFieldType } from './response';
|
|
3
|
+
|
|
4
|
+
// Boundary types, these are generic objects not defined in the SDK but can be returned by the API
|
|
5
|
+
// as properties of the response attributes
|
|
6
|
+
export interface ApiReviewRichInformation {
|
|
7
|
+
cons?: string[];
|
|
8
|
+
pros?: string[];
|
|
9
|
+
review_date?: string;
|
|
10
|
+
reviewer_title?: string;
|
|
11
|
+
product_familiarity?: 'IVE_TESTED_IT' | 'I_OWN_IT';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface ApiTextResponseAttributes {
|
|
15
|
+
content: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface ApiSearchResponseAttributes {
|
|
19
|
+
search_term: string;
|
|
20
|
+
selected_filters?: string[];
|
|
21
|
+
filters?: {
|
|
22
|
+
[key: string]: string[];
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface ApiSearchResponseProductAttributes {
|
|
27
|
+
response_id?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface ApiProductSearchFilterResponseAttributes {
|
|
31
|
+
filter_name: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface ApiReviewResponseAttributes {
|
|
35
|
+
id?: string;
|
|
36
|
+
product_id?: string;
|
|
37
|
+
title?: string;
|
|
38
|
+
reviewer?: string;
|
|
39
|
+
review?: string;
|
|
40
|
+
stars?: number;
|
|
41
|
+
rich_information?: ApiReviewRichInformation;
|
|
42
|
+
|
|
43
|
+
onClick?: () => void;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface ApiPageResponseAttributes {
|
|
47
|
+
id?: string;
|
|
48
|
+
title?: string;
|
|
49
|
+
description?: string;
|
|
50
|
+
url?: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface ApiFormResponseSchemaAttributes {
|
|
54
|
+
properties: {
|
|
55
|
+
[key: string]: {
|
|
56
|
+
format?: 'email';
|
|
57
|
+
type: AcceptableFormFieldType;
|
|
58
|
+
title: string;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
required: Array<keyof ApiFormResponseSchemaAttributes['properties']>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface ApiFormResponseAttributes {
|
|
65
|
+
form_category?: FormResponseAttributesFormCategory;
|
|
66
|
+
schema: ApiFormResponseSchemaAttributes;
|
|
67
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ProductSearchResponse as ApiProductSearchResponse,
|
|
3
|
+
ProductSearchResponseAttributes as ApiProductSearchResponseAttributes,
|
|
4
|
+
SearchResponseProduct,
|
|
5
|
+
} from '@spiffy-ai/commerce-api-client';
|
|
6
|
+
import { CamelCasedPropertiesDeep } from 'src/application/models/utilityTypes';
|
|
7
|
+
|
|
8
|
+
// Transform API types using CamelCasedPropertiesDeep
|
|
9
|
+
export interface ProductSearchResponse extends CamelCasedPropertiesDeep<ApiProductSearchResponse> {}
|
|
10
|
+
export interface ProductSearchResponseAttributes
|
|
11
|
+
extends CamelCasedPropertiesDeep<ApiProductSearchResponseAttributes> {}
|
|
12
|
+
|
|
13
|
+
// Custom search result interface (flattened structure)
|
|
14
|
+
export interface SearchResult {
|
|
15
|
+
products: SearchResponseProduct[]; // Flattened from all responses
|
|
16
|
+
filters: string[]; // Combined from all responses
|
|
17
|
+
generatedQuery?: string;
|
|
18
|
+
totalProductCount: number;
|
|
19
|
+
searchResponseId: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Search parameters interface
|
|
23
|
+
export interface SearchParams {
|
|
24
|
+
query: string;
|
|
25
|
+
limit?: number;
|
|
26
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PDPAttributes as ApiPDPAttributes,
|
|
3
|
+
PLPAttributes as ApiPLPAttributes,
|
|
4
|
+
QueryTypedAttributes as ApiQueryTypedAttributes,
|
|
5
|
+
SearchAttributes as ApiSearchAttributes,
|
|
6
|
+
SuggestionClickedAttributes as ApiSuggestionClickedAttributes,
|
|
7
|
+
UserEvent as ApiUserEvent,
|
|
8
|
+
FormType,
|
|
9
|
+
PageVisitCategory,
|
|
10
|
+
UserEventCategory,
|
|
11
|
+
} from '@spiffy-ai/commerce-api-client';
|
|
12
|
+
import { CamelCasedPropertiesDeep } from 'src/application/models/utilityTypes';
|
|
13
|
+
|
|
14
|
+
// TODO flatten these out or explore new typescript openapi generator fork
|
|
15
|
+
export interface PDPAttributes extends CamelCasedPropertiesDeep<ApiPDPAttributes> {}
|
|
16
|
+
|
|
17
|
+
export interface PLPAttributes extends CamelCasedPropertiesDeep<ApiPLPAttributes> {}
|
|
18
|
+
|
|
19
|
+
export interface SearchAttributes extends CamelCasedPropertiesDeep<ApiSearchAttributes> {}
|
|
20
|
+
|
|
21
|
+
export interface QueryTypedAttributes extends CamelCasedPropertiesDeep<ApiQueryTypedAttributes> {}
|
|
22
|
+
|
|
23
|
+
export interface FormSubmittedAttributes {
|
|
24
|
+
filledSchema: Record<string, unknown>;
|
|
25
|
+
formResponseId: string;
|
|
26
|
+
formType: FormType;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface PageVisitAttributes {
|
|
30
|
+
url: string;
|
|
31
|
+
pageVisitCategory: PageVisitCategory;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface SuggestionClickedAttributes
|
|
35
|
+
extends CamelCasedPropertiesDeep<ApiSuggestionClickedAttributes> {}
|
|
36
|
+
|
|
37
|
+
export type UserEventAttributes =
|
|
38
|
+
| PDPAttributes
|
|
39
|
+
| PLPAttributes
|
|
40
|
+
| QueryTypedAttributes
|
|
41
|
+
| SearchAttributes
|
|
42
|
+
| SuggestionClickedAttributes
|
|
43
|
+
| PageVisitAttributes;
|
|
44
|
+
|
|
45
|
+
export interface PDPUserEvent {
|
|
46
|
+
category: UserEventCategory.PdpVisit | UserEventCategory.AddToCart;
|
|
47
|
+
attributes: PDPAttributes;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface PLPUserEvent {
|
|
51
|
+
category: UserEventCategory.PlpVisit;
|
|
52
|
+
attributes: PLPAttributes;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface QueryTypedUserEvent {
|
|
56
|
+
category: UserEventCategory.QueryTyped;
|
|
57
|
+
attributes: QueryTypedAttributes;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface SearchUserEvent {
|
|
61
|
+
category: UserEventCategory.Search;
|
|
62
|
+
attributes: SearchAttributes;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface SuggestionsClickedUserEvent {
|
|
66
|
+
category: UserEventCategory.SuggestionClicked;
|
|
67
|
+
attributes: SuggestionClickedAttributes;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface AppLoadedUserEvent {
|
|
71
|
+
category: UserEventCategory.AppLoaded;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface AppUnloadedEvent {
|
|
75
|
+
category: UserEventCategory.AppUnloaded;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface PageVisitEvent {
|
|
79
|
+
category: UserEventCategory.PageVisit;
|
|
80
|
+
attributes: PageVisitAttributes;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface FormSubmitted {
|
|
84
|
+
category: UserEventCategory.FormSubmitted;
|
|
85
|
+
attributes: FormSubmittedAttributes;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export type UserEvent = CamelCasedPropertiesDeep<
|
|
89
|
+
Pick<ApiUserEvent, 'event_id' | 'category' | 'created_at'>
|
|
90
|
+
> &
|
|
91
|
+
(
|
|
92
|
+
| SuggestionsClickedUserEvent
|
|
93
|
+
| AppLoadedUserEvent
|
|
94
|
+
| PDPUserEvent
|
|
95
|
+
| QueryTypedUserEvent
|
|
96
|
+
| SearchUserEvent
|
|
97
|
+
| AppUnloadedEvent
|
|
98
|
+
| PLPUserEvent
|
|
99
|
+
| PageVisitEvent
|
|
100
|
+
| FormSubmitted
|
|
101
|
+
);
|