@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,22 @@
|
|
|
1
|
+
// Chat element display location enum
|
|
2
|
+
export enum ChatElementDisplayLocation {
|
|
3
|
+
IN_CHAT = 'in_chat',
|
|
4
|
+
CHAT_PREVIEW = 'chat_preview',
|
|
5
|
+
FLOATING_BUTTON = 'floating_button',
|
|
6
|
+
HELP_ME_CHOOSE = 'help_me_choose',
|
|
7
|
+
PLP_IMAGE_BANNER = 'plp_image_banner',
|
|
8
|
+
TOP_REVIEWS_SNIPPET = 'top_reviews_snippet',
|
|
9
|
+
BOTTOM_REVIEWS_SNIPPET = 'bottom_reviews_snippet',
|
|
10
|
+
BLOCK_BACK_BUTTON = 'block_back_button',
|
|
11
|
+
SWITCH_TO_AGENT = 'switch_to_agent',
|
|
12
|
+
CONVERSATIONAL_SEARCH = 'conversational_search',
|
|
13
|
+
GLOBAL_SEARCH_ENTRYPOINT = 'global_search_entrypoint',
|
|
14
|
+
SEARCH_NAV_ENTRYPOINT = 'search_nav_entrypoint',
|
|
15
|
+
SEARCH_PROMPT = 'search_prompt',
|
|
16
|
+
SEARCH_PROMPT_BUTTON = 'search_prompt_button',
|
|
17
|
+
PRODUCT_GRID = 'product_grid',
|
|
18
|
+
UNSPECIFIED = 'unspecified',
|
|
19
|
+
FILTER_MODAL = 'filter_modal',
|
|
20
|
+
PROMPT_CARD = 'prompt_card',
|
|
21
|
+
WINDOW_API_CALL = 'window_api_call',
|
|
22
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface ClientDetails {
|
|
2
|
+
os?: string;
|
|
3
|
+
osVersion?: string;
|
|
4
|
+
deviceBrand?: string;
|
|
5
|
+
deviceManufacturer?: string;
|
|
6
|
+
deviceModel?: string;
|
|
7
|
+
carrier?: string;
|
|
8
|
+
country?: string;
|
|
9
|
+
region?: string;
|
|
10
|
+
browser?: string;
|
|
11
|
+
browserVersion?: string;
|
|
12
|
+
browserIpAddress?: string;
|
|
13
|
+
userAgent?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type {
|
|
17
|
+
ClientDetails,
|
|
18
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
enum ColorNames {
|
|
2
|
+
TextPrimary = 'text-primary',
|
|
3
|
+
TextSecondary = 'text-secondary',
|
|
4
|
+
TextAccent = 'text-accent',
|
|
5
|
+
TextLink = 'text-link',
|
|
6
|
+
TextLight = 'text-light',
|
|
7
|
+
BackgroundPrimary = 'background-primary',
|
|
8
|
+
BackgroundSecondary = 'background-secondary',
|
|
9
|
+
BackgroundSecondaryDark = 'background-secondary-dark',
|
|
10
|
+
BackgroundTertiary = 'background-tertiary',
|
|
11
|
+
BackgroundDark = 'background-dark',
|
|
12
|
+
BackgroundLight = 'background-light',
|
|
13
|
+
BackgroundSaturated = 'background-saturated',
|
|
14
|
+
BorderLight = 'border-light',
|
|
15
|
+
BorderMedium = 'border-medium',
|
|
16
|
+
BorderDark = 'border-dark',
|
|
17
|
+
BorderOutline = 'border-outline',
|
|
18
|
+
AccentPrimary = 'accent-primary',
|
|
19
|
+
AccentSecondary = 'accent-secondary',
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
type ColorMapping = {
|
|
23
|
+
[key in ColorNames]: string;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const colorVar = (color: ColorNames): string => `var(--spiffy-colors-${color})`;
|
|
27
|
+
export { ColorNames, colorVar };
|
|
28
|
+
export type { ColorMapping };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base interface for common properties across all ecommerce events
|
|
3
|
+
*/
|
|
4
|
+
export interface BaseEcommerceEvent {
|
|
5
|
+
event: string;
|
|
6
|
+
ecommerce: UAEcommerceData | GA4EcommerceData;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Legacy universal analytics data. The actual payload contains more fields, but we
|
|
11
|
+
* only need the ones listed below.
|
|
12
|
+
*/
|
|
13
|
+
interface UAEcommerceData {
|
|
14
|
+
add: {
|
|
15
|
+
products: {
|
|
16
|
+
name: string;
|
|
17
|
+
category: string;
|
|
18
|
+
price: string;
|
|
19
|
+
quantity: string;
|
|
20
|
+
}[];
|
|
21
|
+
currencyCode: string;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Google Analytics 4 data. The actual payload contains more fields, but we
|
|
27
|
+
* only need the ones listed below.
|
|
28
|
+
*/
|
|
29
|
+
interface GA4EcommerceData {
|
|
30
|
+
currency: string;
|
|
31
|
+
items: {
|
|
32
|
+
item_name: string;
|
|
33
|
+
item_category: string;
|
|
34
|
+
price: number;
|
|
35
|
+
quantity: number;
|
|
36
|
+
}[];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface UAEcommerceEvent extends BaseEcommerceEvent {
|
|
40
|
+
ecommerce: UAEcommerceData;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface GA4EcommerceEvent extends BaseEcommerceEvent {
|
|
44
|
+
ecommerce: GA4EcommerceData;
|
|
45
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export enum FeatureGates {
|
|
2
|
+
IsClientSessionEnabled = "is_client_session_enabled",
|
|
3
|
+
IsNewFeatureEnabled = "is_new_feature_enabled",
|
|
4
|
+
// IsFineTunedModel8b is defined here for the sole purpose of correlating events to a specific model in Amplitude
|
|
5
|
+
IsFineTunedModel8b = "is_fine_tuned_model_8b",
|
|
6
|
+
IsIntegratedCXEnabled = "is_integrated_cx_enabled",
|
|
7
|
+
// TODO: remove this once we've fully rolled out on non-shapewear pages
|
|
8
|
+
IsNonShapewearEnabled = "is_non_shapewear_enabled",
|
|
9
|
+
IsImageBannerEnabled = "is_image_banner_enabled",
|
|
10
|
+
IsOrderLookupEnabled = "is_order_lookup_enabled",
|
|
11
|
+
IsSummarizeReviewsEnabled = "is_summarize_reviews_enabled",
|
|
12
|
+
IsGlobalSearchEnabled = "is_global_search_enabled",
|
|
13
|
+
IsImagePromptEnabled = "is_image_prompt_enabled",
|
|
14
|
+
IsWatermarkEnabled = "is_watermark_enabled",
|
|
15
|
+
IsInferenceRegion0 = "is_inference_region_0",
|
|
16
|
+
IsGraphQLUIConfigsEnabled = "is_graphql_ui_configs_enabled",
|
|
17
|
+
IsGraphQLPageConfigsEnabled = "is_graphql_page_configs_enabled",
|
|
18
|
+
IsGraphQLComponentConfigsEnabled = "is_graphql_component_configs_enabled",
|
|
19
|
+
IsChatVariantEnabled = "is_chat_variant_enabled",
|
|
20
|
+
IsChatVariantAEnabled = "is_chat_variant_a_enabled",
|
|
21
|
+
IsChatVariantBEnabled = "is_chat_variant_b_enabled",
|
|
22
|
+
IsUserQueryAlwaysEnabled = "is_user_query_always_enabled",
|
|
23
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PageVariantConfig,
|
|
3
|
+
WidgetMountingConfig,
|
|
4
|
+
WidgetConfig,
|
|
5
|
+
OrgUIConfig,
|
|
6
|
+
} from 'src/contexts/types';
|
|
7
|
+
|
|
8
|
+
export interface FrontendConfig {
|
|
9
|
+
merchantOverrideCss?: string;
|
|
10
|
+
pageVariants?: PageVariantConfig[];
|
|
11
|
+
mountingConfigs?: Record<string, WidgetMountingConfig>;
|
|
12
|
+
widgetConfigs?: Record<string, WidgetConfig>;
|
|
13
|
+
uiConfigs?: Omit<OrgUIConfig, 'merchantOverrideCss'>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { configVersion } from 'src/adapters/spiffy/commerce/graphql';
|
|
2
|
+
|
|
3
|
+
const getMerchantColorsQuery = () => `
|
|
4
|
+
query ($version: "${configVersion()}") {
|
|
5
|
+
me {
|
|
6
|
+
getProductsConfigByVersion(version: $version) {
|
|
7
|
+
colors {
|
|
8
|
+
values
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
interface GetMerchantColorsQueryData {
|
|
16
|
+
accent_primary: string;
|
|
17
|
+
accent_secondary: string;
|
|
18
|
+
background_dark: string;
|
|
19
|
+
background_light: string;
|
|
20
|
+
background_primary: string;
|
|
21
|
+
background_saturated: string;
|
|
22
|
+
background_secondary: string;
|
|
23
|
+
background_secondary_dark: string;
|
|
24
|
+
background_tertiary: string;
|
|
25
|
+
border_dark: string;
|
|
26
|
+
border_light: string;
|
|
27
|
+
border_medium: string;
|
|
28
|
+
border_outline: string;
|
|
29
|
+
text_accent: string;
|
|
30
|
+
text_light: string;
|
|
31
|
+
text_link: string;
|
|
32
|
+
text_primary: string;
|
|
33
|
+
text_secondary: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { getMerchantColorsQuery };
|
|
37
|
+
export type { GetMerchantColorsQueryData };
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { configVersion } from 'src/adapters/spiffy/commerce/graphql';
|
|
2
|
+
|
|
3
|
+
const getMerchantFrontendConfigQuery = () => `
|
|
4
|
+
query ($version: "${configVersion()}") {
|
|
5
|
+
me {
|
|
6
|
+
getProductsConfigByVersion(version: $version) {
|
|
7
|
+
frontend {
|
|
8
|
+
values
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
type MountingConfigQueryData = {
|
|
16
|
+
mounting_config_id?: string;
|
|
17
|
+
container_id?: string;
|
|
18
|
+
check_id?: string;
|
|
19
|
+
parent_insertion_point?: {
|
|
20
|
+
selector?: string;
|
|
21
|
+
selection_index?: number;
|
|
22
|
+
insertion_type?: string;
|
|
23
|
+
};
|
|
24
|
+
insertion_point?: {
|
|
25
|
+
selector?: string;
|
|
26
|
+
selection_index?: number;
|
|
27
|
+
insertion_type?: string;
|
|
28
|
+
};
|
|
29
|
+
grid_insertion_type?: string;
|
|
30
|
+
wrapping_element?: {
|
|
31
|
+
class_name?: string;
|
|
32
|
+
element?: string;
|
|
33
|
+
insertion_type?: string;
|
|
34
|
+
};
|
|
35
|
+
div_check_selector?: string;
|
|
36
|
+
suppression_selector?: string;
|
|
37
|
+
style?: Record<string, string | number>;
|
|
38
|
+
class_name?: string;
|
|
39
|
+
data_attributes?: Record<string, string>;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
type WidgetConfigQueryData = {
|
|
43
|
+
widget_config_id: string;
|
|
44
|
+
type: string;
|
|
45
|
+
content_id?: string;
|
|
46
|
+
// Widget-specific configuration fields will be stored as generic Record
|
|
47
|
+
// since each widget type has different configuration structure
|
|
48
|
+
[key: string]: unknown;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
type PageVariantCheckQueryData = {
|
|
52
|
+
check_type: string;
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
type WidgetMountingQueryData = {
|
|
57
|
+
mounting_config_id: string;
|
|
58
|
+
widget_config_id?: string;
|
|
59
|
+
mounting_point_widgets?: Array<{
|
|
60
|
+
checks: PageVariantCheckQueryData[];
|
|
61
|
+
widget_config_id: string;
|
|
62
|
+
}>;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
type PageVariantQueryData = {
|
|
66
|
+
variant_id: string;
|
|
67
|
+
variant_type: string;
|
|
68
|
+
variant_checks: PageVariantCheckQueryData[];
|
|
69
|
+
widget_mounting: WidgetMountingQueryData[];
|
|
70
|
+
plp_id_extractor?: string;
|
|
71
|
+
product_id_extractor?: string;
|
|
72
|
+
parent_product_id_extractor?: string;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
type UIConfigQueryData = {
|
|
76
|
+
shortName: string;
|
|
77
|
+
[key: string]: unknown;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
interface GetMerchantFrontendConfigQueryData {
|
|
81
|
+
merchant_override_css?: string;
|
|
82
|
+
page_variants?: PageVariantQueryData[];
|
|
83
|
+
mounting_configs?: {
|
|
84
|
+
key: string;
|
|
85
|
+
config: MountingConfigQueryData;
|
|
86
|
+
}[];
|
|
87
|
+
widget_configs?: {
|
|
88
|
+
key: string;
|
|
89
|
+
config: WidgetConfigQueryData;
|
|
90
|
+
}[];
|
|
91
|
+
ui_configs?: UIConfigQueryData;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export { getMerchantFrontendConfigQuery };
|
|
95
|
+
export type {
|
|
96
|
+
GetMerchantFrontendConfigQueryData,
|
|
97
|
+
MountingConfigQueryData,
|
|
98
|
+
WidgetConfigQueryData,
|
|
99
|
+
PageVariantQueryData,
|
|
100
|
+
PageVariantCheckQueryData,
|
|
101
|
+
WidgetMountingQueryData,
|
|
102
|
+
UIConfigQueryData,
|
|
103
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './isApiPDPEventAttributes';
|
|
2
|
+
export * from './isApiQueryTypedEventAttributes';
|
|
3
|
+
export * from './isApiResponse';
|
|
4
|
+
export * from './isApiProductResponseAttributes';
|
|
5
|
+
export * from './isApiReviewResponseAttributes';
|
|
6
|
+
export * from './isApiReviewRichInformation';
|
|
7
|
+
export * from './isApiSearchEventAttributes';
|
|
8
|
+
export * from './isApiSuggestion';
|
|
9
|
+
export * from './isApiSuggestionClickedEventAttributes';
|
|
10
|
+
export * from './isApiTextResponseAttributes';
|
|
11
|
+
export * from './isApiUserEvent';
|
|
12
|
+
export * from './isApiProductSearchAttributes';
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import Logger from 'src/application/logging/logger';
|
|
2
|
+
import { FormType } from '@spiffy-ai/commerce-api-client';
|
|
3
|
+
import { ApiFormResponseAttributes } from 'src/application/models/api/responseGenerics';
|
|
4
|
+
import { hasPropertyOfType } from 'src/application/models/guards/utils';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Type guard to check if the provided data has the all of the properties (with the correct types) of
|
|
8
|
+
* a FormResponseAttribute
|
|
9
|
+
*
|
|
10
|
+
* @param data - The data to check
|
|
11
|
+
*
|
|
12
|
+
* @returns true if the data has the correct properties, false otherwise
|
|
13
|
+
*/
|
|
14
|
+
export const isApiFormResponseAttributes = (data: unknown): data is ApiFormResponseAttributes => {
|
|
15
|
+
if (data == null || typeof data !== 'object') {
|
|
16
|
+
Logger.logError('isApiFormResponseAttributes: data is null or not an object', undefined, {
|
|
17
|
+
data,
|
|
18
|
+
});
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if ('form_category' in data && typeof data.form_category !== 'object') {
|
|
23
|
+
Logger.logError('isApiFormResponseAttributes: form_category is not an object', undefined, {
|
|
24
|
+
data,
|
|
25
|
+
});
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if ('form_category' in data && typeof data.form_category === 'object') {
|
|
30
|
+
if (
|
|
31
|
+
!hasPropertyOfType(data.form_category, 'form_type', 'string') ||
|
|
32
|
+
!Object.values(FormType).includes(data.form_category.form_type as FormType)
|
|
33
|
+
) {
|
|
34
|
+
Logger.logError(
|
|
35
|
+
'isApiFormResponseAttributes: form_type is missing or not a valid form type',
|
|
36
|
+
undefined,
|
|
37
|
+
{
|
|
38
|
+
data,
|
|
39
|
+
},
|
|
40
|
+
);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (!hasPropertyOfType(data, 'schema', 'object')) {
|
|
46
|
+
Logger.logError('isApiFormResponseAttributes: schema is missing or not an object', undefined, {
|
|
47
|
+
data,
|
|
48
|
+
});
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// TODO: also wanna validate the fields of data.schema.properties but might wanna change the schema
|
|
53
|
+
// to not have the property name as a key in the object
|
|
54
|
+
if (!hasPropertyOfType(data.schema, 'properties', 'object')) {
|
|
55
|
+
Logger.logError(
|
|
56
|
+
'isApiFormResponseAttributes: schema.properties is missing or not an object',
|
|
57
|
+
undefined,
|
|
58
|
+
{
|
|
59
|
+
data,
|
|
60
|
+
},
|
|
61
|
+
);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (!hasPropertyOfType(data.schema, 'required', 'array')) {
|
|
66
|
+
Logger.logError(
|
|
67
|
+
'isApiFormResponseAttributes: schema.required is missing or not an array',
|
|
68
|
+
undefined,
|
|
69
|
+
{ data },
|
|
70
|
+
);
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (
|
|
75
|
+
!data.schema.required.every(
|
|
76
|
+
(key: unknown) => typeof key === 'string' && key in data.schema.properties,
|
|
77
|
+
)
|
|
78
|
+
) {
|
|
79
|
+
Logger.logError(
|
|
80
|
+
'isApiFormResponseAttributes: schema.required contains invalid property keys',
|
|
81
|
+
undefined,
|
|
82
|
+
{
|
|
83
|
+
data,
|
|
84
|
+
},
|
|
85
|
+
);
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return true;
|
|
90
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import Logger from 'src/application/logging/logger';
|
|
2
|
+
import { FormSubmittedAttributes, FormType } from '@spiffy-ai/commerce-api-client';
|
|
3
|
+
import { hasPropertyOfType } from 'src/application/models/guards/utils';
|
|
4
|
+
|
|
5
|
+
export const isApiFormSubmittedResponseAttributes = (
|
|
6
|
+
data: unknown,
|
|
7
|
+
): data is FormSubmittedAttributes => {
|
|
8
|
+
if (data == null || typeof data !== 'object') {
|
|
9
|
+
Logger.logError('isApiFormSubmittedResponseAttributes', 'data is null or not an object', data);
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (!hasPropertyOfType(data, 'filled_schema', 'object')) {
|
|
14
|
+
Logger.logError('isApiFormSubmittedResponseAttributes', 'filled_schema is not an object', data);
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (!hasPropertyOfType(data, 'form_response_id', 'string')) {
|
|
19
|
+
Logger.logError(
|
|
20
|
+
'isApiFormSubmittedResponseAttributes',
|
|
21
|
+
'form_response_id is not a string',
|
|
22
|
+
data,
|
|
23
|
+
);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (!('form_type' in data) || !Object.values(FormType).includes(data.form_type as FormType)) {
|
|
28
|
+
Logger.logError(
|
|
29
|
+
'isApiFormSubmittedResponseAttributes',
|
|
30
|
+
'form_type is not a valid form type enum',
|
|
31
|
+
data,
|
|
32
|
+
);
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return true;
|
|
37
|
+
};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import Logger from 'src/application/logging/logger';
|
|
2
|
+
import { OrderItemInfo, OrderResponseAttributes } from '@spiffy-ai/commerce-api-client';
|
|
3
|
+
import { hasPropertyOfType } from 'src/application/models/guards/utils';
|
|
4
|
+
|
|
5
|
+
// the client SDK generates date-time format types as `Date` but the openapi typescript generator
|
|
6
|
+
// does not correctly deserialize date-time values so they are always `string` at runtime instead of
|
|
7
|
+
// `Date` objects. These interfaces override the SDK types so that we can validate against the actual
|
|
8
|
+
// `string` values. https://github.com/OpenAPITools/openapi-generator/issues/926
|
|
9
|
+
export interface ApiOrderItemInfo
|
|
10
|
+
extends Omit<OrderItemInfo, 'delivered_at' | 'estimated_delivery_at' | 'in_transit_at'> {
|
|
11
|
+
delivered_at?: string;
|
|
12
|
+
estimated_delivery_at?: string;
|
|
13
|
+
in_transit_at?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ApiOrderResponseAttributes
|
|
17
|
+
extends Omit<OrderResponseAttributes, 'created_at' | 'latest_event_date' | 'line_items'> {
|
|
18
|
+
created_at: string;
|
|
19
|
+
latest_event_date: string;
|
|
20
|
+
line_items: ApiOrderItemInfo[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const isApiOrderItemInfo = (data: unknown): data is ApiOrderItemInfo => {
|
|
24
|
+
if (data == null || typeof data !== 'object') {
|
|
25
|
+
Logger.logError('OrderItemInfo must be an object', undefined, { data });
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (!hasPropertyOfType(data, 'order_item_id', 'string')) {
|
|
30
|
+
Logger.logError('OrderItemInfo must have an order_item_id property', undefined, { data });
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (!hasPropertyOfType(data, 'item_title', 'string')) {
|
|
35
|
+
Logger.logError('OrderItemInfo must have an item_title property', undefined, { data });
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (!hasPropertyOfType(data, 'item_price', 'number')) {
|
|
40
|
+
Logger.logError('OrderItemInfo must have an item_price property', undefined, { data });
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (!hasPropertyOfType(data, 'item_quantity', 'number')) {
|
|
45
|
+
Logger.logError('OrderItemInfo must have an item_quantity property', undefined, { data });
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!hasPropertyOfType(data, 'image', 'string', true)) {
|
|
50
|
+
Logger.logError('OrderItemInfo.image must be a string or null', undefined, { data });
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (!hasPropertyOfType(data, 'fulfillment_display_status', 'string', true)) {
|
|
55
|
+
Logger.logError(
|
|
56
|
+
'OrderItemInfo.fulfillment_display_status must be a string or null',
|
|
57
|
+
undefined,
|
|
58
|
+
{
|
|
59
|
+
data,
|
|
60
|
+
},
|
|
61
|
+
);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (!hasPropertyOfType(data, 'tracking_url', 'string', true)) {
|
|
66
|
+
Logger.logError('OrderItemInfo.tracking_url must be a string or null', undefined, { data });
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (!hasPropertyOfType(data, 'delivered_at', 'string', true)) {
|
|
71
|
+
Logger.logError('OrderItemInfo.delivered_at must be a string or null', undefined, { data });
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!hasPropertyOfType(data, 'estimated_delivery_at', 'string', true)) {
|
|
76
|
+
Logger.logError('OrderItemInfo.estimated_delivery_at must be a string or null', undefined, {
|
|
77
|
+
data,
|
|
78
|
+
});
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (!hasPropertyOfType(data, 'in_transit_at', 'string', true)) {
|
|
83
|
+
Logger.logError('OrderItemInfo.in_transit_at must be a string or null', undefined, { data });
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return true;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const isApiOrderResponseAttributes = (data: unknown): data is ApiOrderResponseAttributes => {
|
|
91
|
+
if (data == null || typeof data !== 'object') {
|
|
92
|
+
Logger.logError('Order response attributes must be an object', undefined, { data });
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (!hasPropertyOfType(data, 'created_at', 'string')) {
|
|
97
|
+
Logger.logError(
|
|
98
|
+
'Order response attributes must have a created_at property and have type string',
|
|
99
|
+
undefined,
|
|
100
|
+
{
|
|
101
|
+
data,
|
|
102
|
+
},
|
|
103
|
+
);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!hasPropertyOfType(data, 'latest_event_date', 'string')) {
|
|
108
|
+
Logger.logError(
|
|
109
|
+
'Order response attributes must have a latest_event_date property and have type string',
|
|
110
|
+
undefined,
|
|
111
|
+
{
|
|
112
|
+
data,
|
|
113
|
+
},
|
|
114
|
+
);
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (
|
|
119
|
+
!hasPropertyOfType(data, 'line_items', 'array') ||
|
|
120
|
+
!data.line_items.every((item: unknown) => isApiOrderItemInfo(item))
|
|
121
|
+
) {
|
|
122
|
+
Logger.logError(
|
|
123
|
+
'Order response attributes must have a line_items property with at least one order item',
|
|
124
|
+
undefined,
|
|
125
|
+
{
|
|
126
|
+
data,
|
|
127
|
+
},
|
|
128
|
+
);
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (!hasPropertyOfType(data, 'order_id', 'string')) {
|
|
133
|
+
Logger.logError(
|
|
134
|
+
'Order response attributes must have an order_id property and have type string',
|
|
135
|
+
undefined,
|
|
136
|
+
{
|
|
137
|
+
data,
|
|
138
|
+
},
|
|
139
|
+
);
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (!hasPropertyOfType(data, 'order_number', 'string')) {
|
|
144
|
+
Logger.logError(
|
|
145
|
+
'Order response attributes must have an order_number property and have type string',
|
|
146
|
+
undefined,
|
|
147
|
+
{
|
|
148
|
+
data,
|
|
149
|
+
},
|
|
150
|
+
);
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return true;
|
|
155
|
+
};
|