@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,39 @@
|
|
|
1
|
+
import Logger from 'src/application/logging/logger';
|
|
2
|
+
import { Response, ResponseCategory } from '@spiffy-ai/commerce-api-client';
|
|
3
|
+
import { hasPropertyOfType } from 'src/application/models/guards/utils';
|
|
4
|
+
|
|
5
|
+
export const isApiResponse = (data: unknown): data is Response => {
|
|
6
|
+
if (data == null || typeof data !== 'object') {
|
|
7
|
+
Logger.logError('isApiResponse: data is null or not an object', undefined, { data });
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (!hasPropertyOfType(data, 'id', 'string')) {
|
|
12
|
+
Logger.logError('isApiResponse: id is not a string', undefined, { data });
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (
|
|
17
|
+
!hasPropertyOfType(data, 'category', 'string') ||
|
|
18
|
+
!Object.values(ResponseCategory).includes(data.category as ResponseCategory)
|
|
19
|
+
) {
|
|
20
|
+
Logger.logError(
|
|
21
|
+
'isApiResponse: category is not a string or not a valid response category',
|
|
22
|
+
undefined,
|
|
23
|
+
{ data },
|
|
24
|
+
);
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (!hasPropertyOfType(data, 'created_at', 'string')) {
|
|
29
|
+
Logger.logError('isApiResponse: created_at is not a string', undefined, { data });
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (!hasPropertyOfType(data, 'attributes', 'object', true)) {
|
|
34
|
+
Logger.logError('isApiResponse: attributes is not an object', undefined, { data });
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return true;
|
|
39
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ApiReviewResponseAttributes } from 'src/application/models/api/responseGenerics';
|
|
2
|
+
import { isApiReviewRichInformation } from './isApiReviewRichInformation';
|
|
3
|
+
|
|
4
|
+
export const isApiReviewResponseAttributes = (obj: unknown): obj is ApiReviewResponseAttributes => {
|
|
5
|
+
if (obj == null || typeof obj !== 'object') {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
if ('title' in obj && obj.title != null && typeof obj.title !== 'string') {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if ('review' in obj && typeof obj.review !== 'string') {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if ('reviewer' in obj && typeof obj.reviewer !== 'string') {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if ('stars' in obj && typeof obj.stars !== 'number') {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if ('rich_information' in obj && !isApiReviewRichInformation(obj.rich_information)) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return true;
|
|
30
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ApiReviewRichInformation } from 'src/application/models/api/responseGenerics';
|
|
2
|
+
|
|
3
|
+
export const isApiReviewRichInformation = (
|
|
4
|
+
richInfo: unknown,
|
|
5
|
+
): richInfo is ApiReviewRichInformation => {
|
|
6
|
+
if (richInfo == null || typeof richInfo !== 'object') {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (
|
|
11
|
+
'cons' in richInfo &&
|
|
12
|
+
(!Array.isArray(richInfo.cons) || richInfo.cons.some((con) => typeof con !== 'string'))
|
|
13
|
+
) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (
|
|
18
|
+
'pros' in richInfo &&
|
|
19
|
+
(!Array.isArray(richInfo.pros) || richInfo.pros.some((pro) => typeof pro !== 'string'))
|
|
20
|
+
) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if ('review_date' in richInfo && typeof richInfo.review_date !== 'string') {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if ('reviewer_title' in richInfo && typeof richInfo.reviewer_title !== 'string') {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if ('product_familiarity' in richInfo && typeof richInfo.product_familiarity !== 'string') {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return true;
|
|
37
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SearchAttributes } from '@spiffy-ai/commerce-api-client';
|
|
2
|
+
|
|
3
|
+
export const isApiSearchAttributes = (data: unknown): data is SearchAttributes => {
|
|
4
|
+
if (data == null || typeof data !== 'object') {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
if (!('search_term' in data) || typeof data.search_term !== 'string') {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
if ('selected_filters' in data && !Array.isArray(data.selected_filters)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (!!data.search_term) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (
|
|
20
|
+
!('search_results' in data) ||
|
|
21
|
+
!Array.isArray(data.search_results) ||
|
|
22
|
+
!data.search_results.every((v) => typeof v === 'string')
|
|
23
|
+
) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return true;
|
|
28
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Suggestion as CommerceSuggestion,
|
|
3
|
+
SuggestionCategory,
|
|
4
|
+
} from '@spiffy-ai/commerce-api-client';
|
|
5
|
+
|
|
6
|
+
export const isSuggestion = (data: unknown): data is CommerceSuggestion => {
|
|
7
|
+
if (data == null || typeof data !== 'object') {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (!('id' in data) || typeof data.id !== 'string') {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (
|
|
16
|
+
!('category' in data) ||
|
|
17
|
+
typeof data.category !== 'string' ||
|
|
18
|
+
!Object.values(SuggestionCategory).includes(data.category as SuggestionCategory)
|
|
19
|
+
) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!('created_at' in data) || typeof data.created_at !== 'string') {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (!('content' in data) || typeof data.content !== 'string') {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if ('is_answer' in data && data.is_answer != null && typeof data.is_answer !== 'boolean') {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return true;
|
|
36
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SuggestionClickedAttributes } from '@spiffy-ai/commerce-api-client';
|
|
2
|
+
|
|
3
|
+
export const isApiSuggestionClickedAttributes = (
|
|
4
|
+
data: unknown,
|
|
5
|
+
): data is SuggestionClickedAttributes =>
|
|
6
|
+
data != null &&
|
|
7
|
+
typeof data === 'object' &&
|
|
8
|
+
'suggestion_id' in data &&
|
|
9
|
+
typeof data.suggestion_id === 'string';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ApiTextResponseAttributes } from 'src/application/models/api/responseGenerics';
|
|
2
|
+
|
|
3
|
+
export const isApiTextResponseAttributes = (
|
|
4
|
+
attributes: unknown,
|
|
5
|
+
): attributes is ApiTextResponseAttributes =>
|
|
6
|
+
typeof attributes === 'object' &&
|
|
7
|
+
attributes != null &&
|
|
8
|
+
'content' in attributes &&
|
|
9
|
+
typeof attributes.content === 'string';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { UserEvent, UserEventCategory } from '@spiffy-ai/commerce-api-client';
|
|
2
|
+
|
|
3
|
+
export const isApiUserEvent = (data: unknown): data is UserEvent => {
|
|
4
|
+
if (data == null || typeof data !== 'object') {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
if (!('event_id' in data) || typeof data.event_id !== 'string') {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (!('created_at' in data) || typeof data.created_at !== 'string') {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (
|
|
17
|
+
!('category' in data) ||
|
|
18
|
+
typeof data.category !== 'string' ||
|
|
19
|
+
!Object.values(UserEventCategory).includes(data.category as UserEventCategory)
|
|
20
|
+
) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return true;
|
|
25
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import Logger from 'src/application/logging/logger';
|
|
2
|
+
import { GetMerchantColorsQueryData } from 'src/application/models/graphql';
|
|
3
|
+
|
|
4
|
+
const REQUIRED_COLOR_FIELDS = [
|
|
5
|
+
'accent_primary',
|
|
6
|
+
'accent_secondary',
|
|
7
|
+
'background_dark',
|
|
8
|
+
'background_light',
|
|
9
|
+
'background_primary',
|
|
10
|
+
'background_saturated',
|
|
11
|
+
'background_secondary',
|
|
12
|
+
'background_secondary_dark',
|
|
13
|
+
'background_tertiary',
|
|
14
|
+
'border_dark',
|
|
15
|
+
'border_light',
|
|
16
|
+
'border_medium',
|
|
17
|
+
'border_outline',
|
|
18
|
+
'text_accent',
|
|
19
|
+
'text_light',
|
|
20
|
+
'text_link',
|
|
21
|
+
'text_primary',
|
|
22
|
+
'text_secondary',
|
|
23
|
+
] as const;
|
|
24
|
+
|
|
25
|
+
export const isGraphQLColorsConfig = (data: unknown): data is GetMerchantColorsQueryData => {
|
|
26
|
+
if (typeof data !== 'object' || data === null) {
|
|
27
|
+
Logger.logError('Invalid graphql response for colors config', undefined, { data });
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Check each required field
|
|
32
|
+
const missingFields = REQUIRED_COLOR_FIELDS.filter(
|
|
33
|
+
(field) => !(field in data) || typeof (data as Record<string, unknown>)[field] !== 'string',
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
if (missingFields.length === REQUIRED_COLOR_FIELDS.length) {
|
|
37
|
+
Logger.logError('All color fields are missing or null', undefined);
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (missingFields.length > 0) {
|
|
42
|
+
Logger.logError('Missing or invalid color fields', undefined, {
|
|
43
|
+
data,
|
|
44
|
+
missingFields,
|
|
45
|
+
});
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return true;
|
|
50
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { BaseEcommerceEvent } from 'src/application/models';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Checks if an event is a base Google Analytics ecommerce event.
|
|
5
|
+
*
|
|
6
|
+
* @param data The event to check.
|
|
7
|
+
*
|
|
8
|
+
* @returns True if the event is a base ecommerce event, false otherwise.
|
|
9
|
+
*/
|
|
10
|
+
export const isBaseEcommerceEvent = (data: unknown): data is BaseEcommerceEvent =>
|
|
11
|
+
data != null &&
|
|
12
|
+
typeof data === 'object' &&
|
|
13
|
+
'ecommerce' in data &&
|
|
14
|
+
data.ecommerce != null &&
|
|
15
|
+
typeof data.ecommerce === 'object' &&
|
|
16
|
+
'event' in data &&
|
|
17
|
+
typeof data.event === 'string';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { GA4EcommerceEvent } from 'src/application/models';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Checks if an event is a Google Analytics 4 ecommerce event.
|
|
5
|
+
*
|
|
6
|
+
* @param data The event to check.
|
|
7
|
+
*
|
|
8
|
+
* @returns True if the event is a GA4 ecommerce event, false otherwise.
|
|
9
|
+
*/
|
|
10
|
+
export const isGA4EcommerceEvent = (data: unknown): data is GA4EcommerceEvent =>
|
|
11
|
+
typeof data === 'object' &&
|
|
12
|
+
data != null &&
|
|
13
|
+
'ecommerce' in data &&
|
|
14
|
+
data.ecommerce != null &&
|
|
15
|
+
typeof data.ecommerce === 'object' &&
|
|
16
|
+
'items' in data.ecommerce &&
|
|
17
|
+
Array.isArray(data.ecommerce.items);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { UAEcommerceEvent } from 'src/application/models';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Checks if an event is a legacy Universal Analytics ecommerce event.
|
|
5
|
+
*
|
|
6
|
+
* @param data The event to check.
|
|
7
|
+
*
|
|
8
|
+
* @returns True if the event is a legacy UA ecommerce event, false otherwise.
|
|
9
|
+
*/
|
|
10
|
+
export const isLegacyUAEcommerceEvent = (data: unknown): data is UAEcommerceEvent =>
|
|
11
|
+
data != null &&
|
|
12
|
+
typeof data === 'object' &&
|
|
13
|
+
'ecommerce' in data &&
|
|
14
|
+
data.ecommerce != null &&
|
|
15
|
+
typeof data.ecommerce === 'object' &&
|
|
16
|
+
'add' in data.ecommerce &&
|
|
17
|
+
typeof data.ecommerce.add === 'object';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface MobilePlpChatPlacementParameter {
|
|
2
|
+
row_index: number;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export const isMobilePLPChatPlacementParameter = (
|
|
6
|
+
value: unknown,
|
|
7
|
+
): value is MobilePlpChatPlacementParameter =>
|
|
8
|
+
value != null &&
|
|
9
|
+
typeof value === 'object' &&
|
|
10
|
+
'row_index' in value &&
|
|
11
|
+
typeof value.row_index === 'number';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { SpanxTakeAQuizCtaParameter } from '../spanxTakeAQuizCtaParameter';
|
|
2
|
+
|
|
3
|
+
export const isSpanxTakeAQuizCtaParameter = (value: unknown): value is SpanxTakeAQuizCtaParameter =>
|
|
4
|
+
value != null && typeof value === 'object' && 'text' in value && typeof value.text === 'string';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { PageVisitCategory } from '@spiffy-ai/commerce-api-client';
|
|
2
|
+
import { PDPVariantInfo, PLPVariantInfo, PageVisitVariantInfo, VariantInfo } from '../variantInfo';
|
|
3
|
+
|
|
4
|
+
const isPDPVariantInfo = (variantInfo: object): variantInfo is PDPVariantInfo =>
|
|
5
|
+
'variant' in variantInfo &&
|
|
6
|
+
variantInfo.variant === 'pdp' &&
|
|
7
|
+
'productId' in variantInfo &&
|
|
8
|
+
typeof variantInfo.productId === 'string';
|
|
9
|
+
|
|
10
|
+
const isPLPVariantInfo = (variantInfo: object): variantInfo is PLPVariantInfo =>
|
|
11
|
+
'variant' in variantInfo &&
|
|
12
|
+
variantInfo.variant === 'plp' &&
|
|
13
|
+
'plpId' in variantInfo &&
|
|
14
|
+
typeof variantInfo.plpId === 'string';
|
|
15
|
+
|
|
16
|
+
const isPageVisitVariantInfo = (variantInfo: object): variantInfo is PageVisitVariantInfo =>
|
|
17
|
+
'variant' in variantInfo &&
|
|
18
|
+
variantInfo.variant === 'page_visit' &&
|
|
19
|
+
'url' in variantInfo &&
|
|
20
|
+
typeof variantInfo.url === 'string' &&
|
|
21
|
+
'pageVisitCategory' in variantInfo &&
|
|
22
|
+
Object.values(PageVisitCategory).includes(variantInfo.pageVisitCategory as PageVisitCategory);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Type guard to check if an object is a valid VariantInfo.
|
|
26
|
+
*
|
|
27
|
+
* @param variantInfo - The unknown object to check.
|
|
28
|
+
*
|
|
29
|
+
* @returns True if the data is a valid VariantInfo object, false otherwise.
|
|
30
|
+
*/
|
|
31
|
+
export const isVariantInfo = (variantInfo: unknown): variantInfo is VariantInfo =>
|
|
32
|
+
variantInfo != null &&
|
|
33
|
+
typeof variantInfo === 'object' &&
|
|
34
|
+
'variantId' in variantInfo &&
|
|
35
|
+
(isPDPVariantInfo(variantInfo) ||
|
|
36
|
+
isPLPVariantInfo(variantInfo) ||
|
|
37
|
+
isPageVisitVariantInfo(variantInfo));
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if an object has a property of a specific type
|
|
3
|
+
*
|
|
4
|
+
* @param obj - The object to check
|
|
5
|
+
* @param prop - The property name to check
|
|
6
|
+
* @param type - The expected type of the property
|
|
7
|
+
* @param isOptional - Whether the property is optional (defaults to false)
|
|
8
|
+
*
|
|
9
|
+
* @returns boolean indicating if the object has the property of the specified type
|
|
10
|
+
*/
|
|
11
|
+
export const hasPropertyOfType = <T extends object>(
|
|
12
|
+
obj: unknown,
|
|
13
|
+
prop: keyof T,
|
|
14
|
+
type: 'string' | 'number' | 'boolean' | 'object' | 'array',
|
|
15
|
+
isOptional: boolean = false,
|
|
16
|
+
): obj is T => {
|
|
17
|
+
try {
|
|
18
|
+
if (obj == null || typeof obj !== 'object') {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// If property is not present, it's valid for an optional property
|
|
23
|
+
if (!(prop in obj)) {
|
|
24
|
+
return isOptional;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const value = (obj as T)[prop];
|
|
28
|
+
|
|
29
|
+
// For optional properties, null or undefined values are valid
|
|
30
|
+
if (isOptional && value == null) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (type === 'array') {
|
|
35
|
+
return Array.isArray(value);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return typeof value === type;
|
|
39
|
+
} catch (err) {
|
|
40
|
+
// swallow the error as it should be reported in more detail by the caller
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// models
|
|
2
|
+
export * from './api/userEvent';
|
|
3
|
+
export * from './api/response';
|
|
4
|
+
export * from './api/nextMessageRequest';
|
|
5
|
+
export * from './api/context';
|
|
6
|
+
export * from './api/suggestion';
|
|
7
|
+
export * from './api/generationParams';
|
|
8
|
+
export * from './api/supportedEventRequest';
|
|
9
|
+
export * from './message';
|
|
10
|
+
export * from './supportedOrgs';
|
|
11
|
+
export * from './mobilePLPChatPlacementParameter';
|
|
12
|
+
export * from './spanxTakeAQuizCtaParameter';
|
|
13
|
+
export * from './variantInfo';
|
|
14
|
+
export * from './dataLayer';
|
|
15
|
+
export * from './featureGates';
|
|
16
|
+
|
|
17
|
+
// type guards
|
|
18
|
+
export * from './guards/isLegacyUAEcommerceEvent';
|
|
19
|
+
export * from './guards/isGA4EcommerceEvent';
|
|
20
|
+
export * from './guards/isBaseEcommerceEvent';
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { CustServiceAttachment, FormType } from '@spiffy-ai/commerce-api-client';
|
|
2
|
+
import {
|
|
3
|
+
OrderResponseAttributes,
|
|
4
|
+
ProductResponseAttributes,
|
|
5
|
+
ReviewResponseAttributes,
|
|
6
|
+
PageResponseAttributes,
|
|
7
|
+
TextResponseAttributes,
|
|
8
|
+
SearchResponseAttributes,
|
|
9
|
+
SearchProductResponseAttributes,
|
|
10
|
+
AcceptableFormFieldType,
|
|
11
|
+
SearchProductFilterAttributes,
|
|
12
|
+
} from './api/response';
|
|
13
|
+
|
|
14
|
+
export enum MessageRole {
|
|
15
|
+
User = 'user',
|
|
16
|
+
Assistant = 'assistant',
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export enum MessageType {
|
|
20
|
+
Text = 'text',
|
|
21
|
+
SuggestionClicked = 'suggestion_clicked',
|
|
22
|
+
Product = 'product',
|
|
23
|
+
ProductSearch = 'product_search',
|
|
24
|
+
Review = 'review',
|
|
25
|
+
QueryTyped = 'query_typed',
|
|
26
|
+
Separator = 'separator',
|
|
27
|
+
Page = 'page',
|
|
28
|
+
Search = 'search',
|
|
29
|
+
Attachment = 'attachment',
|
|
30
|
+
CXAgentResponse = 'cx_agent_response',
|
|
31
|
+
Form = 'form',
|
|
32
|
+
Order = 'order',
|
|
33
|
+
ProductSearchFilter = 'product_search_filter',
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type Message = {
|
|
37
|
+
id: string;
|
|
38
|
+
role: MessageRole;
|
|
39
|
+
createdAt: string;
|
|
40
|
+
} & (
|
|
41
|
+
| TextMessageMetadata
|
|
42
|
+
| QueryTypedMetadata
|
|
43
|
+
| SuggestionMessageMetadata
|
|
44
|
+
| ProductMessageMetadata
|
|
45
|
+
| ProductSearchMessageMetadata
|
|
46
|
+
| ReviewMessageMetadata
|
|
47
|
+
| SeparatorMessageMetadata
|
|
48
|
+
| PageMessageMetadata
|
|
49
|
+
| SearchMessageMetadata
|
|
50
|
+
| AttachmentMetadata
|
|
51
|
+
| CXAgentResponseMetadata
|
|
52
|
+
| FormMessageMetadata
|
|
53
|
+
| OrderMessageMetadata
|
|
54
|
+
| ProductSearchFilterMetadata
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
type AttachmentMetadata = {
|
|
58
|
+
type: MessageType.Attachment;
|
|
59
|
+
metadata: {
|
|
60
|
+
message?: string;
|
|
61
|
+
attachment: CustServiceAttachment[];
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
type CXAgentResponseMetadata = {
|
|
66
|
+
type: MessageType.CXAgentResponse;
|
|
67
|
+
metadata: {
|
|
68
|
+
message: string;
|
|
69
|
+
agentName: string;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
type TextMessageMetadata = {
|
|
74
|
+
type: MessageType.Text;
|
|
75
|
+
metadata: TextResponseAttributes['attributes'];
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
type QueryTypedMetadata = {
|
|
79
|
+
type: MessageType.QueryTyped;
|
|
80
|
+
metadata: TextResponseAttributes['attributes'];
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
type SuggestionMessageMetadata = {
|
|
84
|
+
type: MessageType.SuggestionClicked;
|
|
85
|
+
metadata: {
|
|
86
|
+
suggestionId: string;
|
|
87
|
+
suggestionContent: string;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export type ProductMessageMetadata = {
|
|
92
|
+
type: MessageType.Product;
|
|
93
|
+
metadata: ProductResponseAttributes['attributes'];
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export type ProductSearchMessageMetadata = {
|
|
97
|
+
type: MessageType.ProductSearch;
|
|
98
|
+
metadata: SearchProductResponseAttributes['attributes'];
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
type ReviewMessageMetadata = {
|
|
102
|
+
type: MessageType.Review;
|
|
103
|
+
metadata: ReviewResponseAttributes['attributes'];
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
type SeparatorMessageMetadata = {
|
|
107
|
+
type: MessageType.Separator;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
type PageMessageMetadata = {
|
|
111
|
+
type: MessageType.Page;
|
|
112
|
+
metadata: PageResponseAttributes['attributes'];
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
type SearchMessageMetadata = {
|
|
116
|
+
type: MessageType.Search;
|
|
117
|
+
metadata: SearchResponseAttributes['attributes'];
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
type ProductSearchFilterMetadata = {
|
|
121
|
+
type: MessageType.ProductSearchFilter;
|
|
122
|
+
metadata: SearchProductFilterAttributes['attributes'];
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export type FormField = {
|
|
126
|
+
key: string;
|
|
127
|
+
title: string;
|
|
128
|
+
type: AcceptableFormFieldType;
|
|
129
|
+
required: boolean;
|
|
130
|
+
// this is the only format we currently support
|
|
131
|
+
format?: 'email';
|
|
132
|
+
value?: string;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
type FormMessageMetadata = {
|
|
136
|
+
type: MessageType.Form;
|
|
137
|
+
metadata: {
|
|
138
|
+
formType?: FormType;
|
|
139
|
+
fields: FormField[];
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
type OrderMessageMetadata = {
|
|
144
|
+
type: MessageType.Order;
|
|
145
|
+
metadata: OrderResponseAttributes['attributes'];
|
|
146
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const OrgShortName = {
|
|
2
|
+
Coterie: 'coterie',
|
|
3
|
+
ForLoveAndLemons: 'for-love-and-lemons',
|
|
4
|
+
Greenpan: 'greenpan',
|
|
5
|
+
JordanCraig: 'jordan-craig',
|
|
6
|
+
LarryAndSerges: 'larry_and_serges',
|
|
7
|
+
LeapsAndRebounds: 'leaps-and-rebounds',
|
|
8
|
+
MantraBrand: 'mantra-brand',
|
|
9
|
+
Spanx: 'spanx',
|
|
10
|
+
SpanxStaging: 'staging-spanx',
|
|
11
|
+
Supergoop: 'supergoop',
|
|
12
|
+
UniqueVintage: 'unique-vintage',
|
|
13
|
+
JackArcher: 'jack-archer',
|
|
14
|
+
/* -- Below items are generated by plop -- */
|
|
15
|
+
SkinPerfection: 'skin-perfection',
|
|
16
|
+
LookOptic: 'look-optic',
|
|
17
|
+
FiveCbd: 'five-cbd',
|
|
18
|
+
SnapSupplements: 'snap-supplements',
|
|
19
|
+
Longevityrx: 'longevityrx',
|
|
20
|
+
VenaCbd: 'vena-cbd',
|
|
21
|
+
Medterra: 'medterra',
|
|
22
|
+
Modells: 'modells',
|
|
23
|
+
PressedFloral: 'pressed-floral',
|
|
24
|
+
KindredBravely: 'kindred-bravely',
|
|
25
|
+
WineEnthusiast: 'wine-enthusiast',
|
|
26
|
+
HomegrownCannabis: 'homegrown-cannabis',
|
|
27
|
+
DreamlandBaby: 'dreamland-baby',
|
|
28
|
+
Bandolier: 'bandolier',
|
|
29
|
+
WestonJonBoucher: 'weston-jon-boucher',
|
|
30
|
+
KutFromTheKloth: 'kut-from-the-kloth',
|
|
31
|
+
GrooveLife: 'groove-life',
|
|
32
|
+
Carpe: 'carpe',
|
|
33
|
+
WolfTactical: 'wolf-tactical',
|
|
34
|
+
WolfMattress: 'wolfmattress',
|
|
35
|
+
Default: 'default',
|
|
36
|
+
} as const;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enum of all widget names. These are widgets that are rendered and integrated into
|
|
3
|
+
* a merchant's website.
|
|
4
|
+
*/
|
|
5
|
+
export enum SpiffyWidgets {
|
|
6
|
+
ImageBanner = 'image_banner',
|
|
7
|
+
ImagePromptCard = 'image_prompt_card',
|
|
8
|
+
SingleImagePrompt = 'single_image_prompt',
|
|
9
|
+
EmbeddedWidget = 'embedded_widget',
|
|
10
|
+
FloatingButton = 'floating_button',
|
|
11
|
+
SuggestionBar = 'suggestion_bar',
|
|
12
|
+
SearchPrompt = 'search_prompt',
|
|
13
|
+
GlobalSearch = 'global_search',
|
|
14
|
+
SearchResults = 'search_results',
|
|
15
|
+
GlobalSearchEntryPoint = 'global_search_entry_point',
|
|
16
|
+
}
|