@envive-ai/react-hooks 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/amplitudeContext-CHzas7Cf.d.cts +52 -0
- package/dist/amplitudeContext-D-7fmVh1.cjs +356 -0
- package/dist/amplitudeContext-hY3caPC6.js +322 -0
- package/dist/amplitudeContext-tJ4y-SzX.d.ts +52 -0
- package/dist/api-DjeZXxl_.js +207 -0
- package/dist/api-_JaUnIUj.cjs +292 -0
- package/dist/app-CjsQ2_n-.js +132 -0
- package/dist/app-CnKRZ9RW.cjs +178 -0
- package/dist/application/models/graphql/index.cjs +3 -12
- package/dist/application/models/graphql/index.d.cts +1 -1
- package/dist/application/models/graphql/index.d.ts +1 -1
- package/dist/application/models/graphql/index.js +1 -10
- package/dist/application/models/guards/api/index.cjs +1 -2
- package/dist/application/models/guards/api/index.d.cts +2 -2
- package/dist/application/models/guards/api/index.d.ts +2 -2
- package/dist/application/models/guards/api/index.js +1 -2
- package/dist/application/models/index.cjs +48 -54
- package/dist/application/models/index.d.cts +7 -9
- package/dist/application/models/index.d.ts +7 -9
- package/dist/application/models/index.js +7 -11
- package/dist/application/models/utilityTypes/index.cjs +1 -1
- package/dist/application/models/utilityTypes/index.d.cts +1 -1
- package/dist/application/models/utilityTypes/index.d.ts +1 -1
- package/dist/application/models/utilityTypes/index.js +1 -1
- package/dist/application/models/variantInfo/index.cjs +1 -1
- package/dist/application/models/variantInfo/index.d.cts +1 -1
- package/dist/application/models/variantInfo/index.d.ts +1 -1
- package/dist/application/models/variantInfo/index.js +1 -1
- package/dist/application/utils/index.cjs +40 -37
- package/dist/application/utils/index.d.cts +18 -14
- package/dist/application/utils/index.d.ts +17 -13
- package/dist/application/utils/index.js +13 -10
- package/dist/{atomStore-JwGb7pcy.cjs → atomStore-B4jIaDPd.cjs} +1 -1
- package/dist/{atomStore-B1cgmbP0.js → atomStore-D8pjE1vL.js} +1 -1
- package/dist/atoms/app/index.cjs +14 -16
- package/dist/atoms/app/index.d.cts +20 -19
- package/dist/atoms/app/index.d.ts +20 -19
- package/dist/atoms/app/index.js +10 -11
- package/dist/atoms/atomStore/index.cjs +2 -1
- package/dist/atoms/atomStore/index.d.cts +1 -1
- package/dist/atoms/atomStore/index.js +2 -1
- package/dist/atoms/chat/index.cjs +44 -40
- package/dist/atoms/chat/index.d.cts +35 -36
- package/dist/atoms/chat/index.d.ts +35 -36
- package/dist/atoms/chat/index.js +14 -10
- package/dist/atoms/globalSearch/index.cjs +1 -1
- package/dist/atoms/globalSearch/index.d.cts +5 -5
- package/dist/atoms/globalSearch/index.d.ts +5 -5
- package/dist/atoms/globalSearch/index.js +1 -1
- package/dist/atoms/org/index.cjs +26 -37
- package/dist/atoms/org/index.d.cts +37 -47
- package/dist/atoms/org/index.d.ts +37 -47
- package/dist/atoms/org/index.js +11 -11
- package/dist/atoms/search/index.cjs +47 -41
- package/dist/atoms/search/index.d.cts +7 -9
- package/dist/atoms/search/index.d.ts +7 -9
- package/dist/atoms/search/index.js +16 -10
- package/dist/bandolier-DYEz4-8C.js +1229 -0
- package/dist/bandolier-o_-xrbOV.cjs +1229 -0
- package/dist/carpe-CsG5jCcl.cjs +607 -0
- package/dist/carpe-DONk00bZ.js +605 -0
- package/dist/cdnUtils-32v8bDX9.cjs +16 -0
- package/dist/cdnUtils-E4tLBt2g.js +11 -0
- package/dist/{chat-BgONoYU7.cjs → chat-BubCW1as.cjs} +1 -1
- package/dist/chat-CO7cRkaq.cjs +506 -0
- package/dist/{chat-CLJ4NWcN.js → chat-CV6MXeID.js} +1 -1
- package/dist/chat-hcRc4RRd.js +285 -0
- package/dist/{components-CV1fhAkj.js → components-B4T3Uzth.js} +1 -1
- package/dist/{components-BKZbet67.cjs → components-Cw9WjA6g.cjs} +1 -1
- package/dist/config/locators/components/chat/index.cjs +1 -1
- package/dist/config/locators/components/chat/index.d.cts +1 -1
- package/dist/config/locators/components/chat/index.d.ts +1 -1
- package/dist/config/locators/components/chat/index.js +1 -1
- package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
- package/dist/config/locators/components/index.cjs +1 -1
- package/dist/config/locators/components/index.d.cts +1 -1
- package/dist/config/locators/components/index.d.ts +1 -1
- package/dist/config/locators/components/index.js +1 -1
- package/dist/config/locators/index.cjs +4 -4
- package/dist/config/locators/index.d.cts +2 -2
- package/dist/config/locators/index.d.ts +3 -3
- package/dist/config/locators/index.js +4 -4
- package/dist/contexts/index.cjs +45 -14
- package/dist/contexts/index.d.cts +10 -78
- package/dist/contexts/index.d.ts +10 -78
- package/dist/contexts/index.js +22 -11
- package/dist/contexts-B4ihTBsV.cjs +2980 -0
- package/dist/contexts-DGlr7M1o.js +2596 -0
- package/dist/coterie-CKB93qfz.cjs +239 -0
- package/dist/{coterie-yQ-_JXSw.cjs → coterie-DHcj2fRE.js} +64 -65
- package/dist/{custservice-types-C83itZmy.cjs → custservice-types-Dy0kc9TW.cjs} +1 -1
- package/dist/{custservice-types-DPQ-4TI6.js → custservice-types-mnIunabv.js} +1 -1
- package/dist/default-BnB4p0Se.cjs +234 -0
- package/dist/default-D6f5Dyt7.js +199 -0
- package/dist/default-ZKkE5zT4.cjs +4 -0
- package/dist/default-legGZJwI.js +4 -0
- package/dist/{divIds-DEL_-qU0.cjs → divIds-2dJlU3z8.cjs} +1 -15
- package/dist/{divIds-CWkntTsx.js → divIds-BUrN2vY-.js} +2 -4
- package/dist/dreamlandBaby-BiRYYFav.js +346 -0
- package/dist/dreamlandBaby-zuvmfzfD.cjs +346 -0
- package/dist/{embedded-C5uJqmuD.js → embedded-BJLWIriJ.js} +1 -1
- package/dist/{embedded--2L0F4b5.cjs → embedded-Dl79TJLC.cjs} +1 -1
- package/dist/{entrypoints-CNUvSgnk.js → entrypoints-Bs3pn6EV.js} +1 -1
- package/dist/{entrypoints-DM9Sm18O.cjs → entrypoints-Dqi5pzWH.cjs} +1 -1
- package/dist/enviveConfig-BccuzS2a.cjs +240 -0
- package/dist/enviveConfig-CzhTz8Aa.js +152 -0
- package/dist/events/index.cjs +1 -1
- package/dist/events/index.d.cts +1 -1
- package/dist/events/index.js +1 -1
- package/dist/{events-ClCDFK7t.js → events-BrLpaNxh.js} +1 -1
- package/dist/{events-Da7gpmGv.cjs → events-DwT6cEwI.cjs} +1 -1
- package/dist/fiveCbd-DwTTwC2j.cjs +613 -0
- package/dist/fiveCbd-Dz2NouOF.js +613 -0
- package/dist/forLoveAndLemons-DqSdyD6S.js +665 -0
- package/dist/forLoveAndLemons-Ud6mPrV3.cjs +667 -0
- package/dist/{globalSearch-b0wC7ZEO.js → globalSearch-B6THR7Jx.js} +1 -1
- package/dist/{globalSearch-BTeZxvk1.cjs → globalSearch-BFvEg53C.cjs} +1 -1
- package/dist/graphql-BNW60InJ.cjs +128 -0
- package/dist/graphql-CjB8wHzm.js +74 -0
- package/dist/graphqlConfig-CYt6tWII.js +30 -0
- package/dist/graphqlConfig-DicykC-o.cjs +61 -0
- package/dist/greenpan-B_EbPkSP.js +397 -0
- package/dist/greenpan-kPE4fJgd.cjs +397 -0
- package/dist/grooveLife-Ckuir319.js +342 -0
- package/dist/grooveLife-DKSEQp1F.cjs +342 -0
- package/dist/homegrownCannabis-BVPa2pqe.js +410 -0
- package/dist/homegrownCannabis-BwIAkxuA.cjs +410 -0
- package/dist/hooks/index.cjs +40 -16
- package/dist/hooks/index.d.cts +122 -95
- package/dist/hooks/index.d.ts +122 -95
- package/dist/hooks/index.js +22 -11
- package/dist/{index-D46Rd0io.d.cts → index-B0NW9KTj.d.cts} +1 -1
- package/dist/{index-jBATkcc_.d.cts → index-BDPWBU3h.d.cts} +1 -1
- package/dist/index-BMPtlgac.d.ts +191 -0
- package/dist/{index-BTK5uzs6.d.cts → index-Bmub8e38.d.cts} +1 -1
- package/dist/{index-C62lPpy4.d.cts → index-Byb45OPg.d.cts} +1 -1
- package/dist/{index-DPx8s5YH.d.ts → index-C6KdON7d.d.ts} +1 -1
- package/dist/index-C7pGDl1A.d.ts +1609 -0
- package/dist/{index-CYtsPztZ.d.cts → index-C9lgsCWp.d.cts} +32 -32
- package/dist/{index-BzgkfbNO.d.cts → index-CESxqFso.d.cts} +1 -1
- package/dist/{index-C_C0tLeD.d.ts → index-Cc-wBCn6.d.ts} +32 -32
- package/dist/{index-Cx9e-fRi.d.ts → index-CcIG01PJ.d.ts} +2 -2
- package/dist/{index-ClJ0nMsR.d.cts → index-CiWEYzXl.d.cts} +2 -2
- package/dist/{index-CKKkTsms.d.ts → index-Cqg6ltII.d.ts} +1 -1
- package/dist/{index-CExtydIH.d.ts → index-DOii3C6b.d.ts} +1 -1
- package/dist/index-DTu2X-YS.d.cts +1609 -0
- package/dist/index-OEifcBsm.d.cts +191 -0
- package/dist/{index-Dxpscrvz.d.ts → index-PGF8BvxQ.d.ts} +1 -1
- package/dist/{index-D2VaMPA3.d.ts → index-ylUiJvnr.d.ts} +1 -1
- package/dist/interceptors/index.cjs +2 -12
- package/dist/interceptors/index.d.cts +8 -13
- package/dist/interceptors/index.d.ts +8 -13
- package/dist/interceptors/index.js +2 -11
- package/dist/jackArcher-B39OEIj6.cjs +727 -0
- package/dist/{jackArcher-CXf_IAmC.js → jackArcher-BwkWGybC.js} +24 -25
- package/dist/jordanCraig-CxRH_jLi.js +1786 -0
- package/dist/jordanCraig-RwmWw-jM.cjs +1786 -0
- package/dist/kindredBravely-D78VwL20.cjs +490 -0
- package/dist/kindredBravely-DQDpAzdl.js +490 -0
- package/dist/kutFromTheKloth-TcXQkIti.js +369 -0
- package/dist/kutFromTheKloth-dXRrNti0.cjs +369 -0
- package/dist/larryAndSerges-Bh5XEXsZ.js +262 -0
- package/dist/larryAndSerges-COdBzOzu.cjs +262 -0
- package/dist/leapsAndRebounds-BbXnqkl5.cjs +360 -0
- package/dist/leapsAndRebounds-mjCaH1k-.js +360 -0
- package/dist/longevityrx-DdV3v26F.cjs +320 -0
- package/dist/longevityrx-DfPDfvAt.js +320 -0
- package/dist/lookOptic-DgXFGBPP.cjs +282 -0
- package/dist/{lookOptic-BGhU4910.js → lookOptic-FgVW1afF.js} +19 -20
- package/dist/mantraBrand-C5gVm3rk.cjs +750 -0
- package/dist/{mantraBrand-DrqG9uqO.js → mantraBrand-uV8HCDR8.js} +22 -23
- package/dist/medterra-BtDpr1Hw.cjs +583 -0
- package/dist/medterra-DgzE7-mj.js +583 -0
- package/dist/modells-CJjsxOIR.js +484 -0
- package/dist/modells-Ck5KbRFj.cjs +484 -0
- package/dist/models-BkXg5eIP.cjs +1534 -0
- package/dist/models-UZ6HszfZ.js +1281 -0
- package/dist/{nodeSelector-BiCDowlK.d.ts → nodeSelector-BxrS2S_k.d.ts} +1 -1
- package/dist/{nodeSelector-B3bPtEjX.d.cts → nodeSelector-Dm4S-10n.d.cts} +1 -1
- package/dist/org-C2RrBVQR.cjs +81 -0
- package/dist/org-xMytX--e.js +38 -0
- package/dist/orgAnalyticsConfig-BJ2A1RZ-.cjs +39 -0
- package/dist/orgAnalyticsConfig-ClrFy2qH.js +14 -0
- package/dist/pressedFloral-Bteoboms.js +661 -0
- package/dist/pressedFloral-CexgV-xy.cjs +661 -0
- package/dist/search-BMOAmrmY.js +459 -0
- package/dist/search-Df0Ifneg.cjs +672 -0
- package/dist/{search-filter-types-BNTLVXqQ.d.cts → search-filter-types-DosbseF3.d.cts} +1 -1
- package/dist/{search-filter-types-DkmH1TxJ.d.ts → search-filter-types-fZf91Pdw.d.ts} +1 -1
- package/dist/skinPerfection-BGzq9lq-.cjs +334 -0
- package/dist/skinPerfection-BlvcEcUE.js +334 -0
- package/dist/snapSupplements-CbbGzAgO.cjs +285 -0
- package/dist/snapSupplements-kcsPAOm9.js +285 -0
- package/dist/{socialProofClasses-ky69yppk.cjs → socialProofClasses-Db8gzsfi.cjs} +1 -1
- package/dist/{socialProofClasses-DdzG1tZy.js → socialProofClasses-kwDvwLOZ.js} +1 -1
- package/dist/spanx-B4WFA_rI.js +661 -0
- package/dist/spanx-BWoE4F8b.cjs +663 -0
- package/dist/spanxStaging-BOrOjhXn.js +845 -0
- package/dist/spanxStaging-BfdfIug4.cjs +848 -0
- package/dist/{suggestionBarV2-types-CwOXzIKq.js → suggestionBarV2-types-IMMOmCir.js} +1 -1
- package/dist/{suggestionBarV2-types-Dc4-zJlV.cjs → suggestionBarV2-types-nnGNgFvR.cjs} +1 -1
- package/dist/supergoop-22dd5_BS.js +323 -0
- package/dist/supergoop-B-a4cku2.cjs +323 -0
- package/dist/{test-types-CXVJxTeu.d.ts → test-types-C9b_OdfO.d.ts} +1 -1
- package/dist/{test-types-CuOq25VT.d.cts → test-types-CgVJtwUr.d.cts} +1 -1
- package/dist/types/index.cjs +2 -2
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +2 -2
- package/dist/types--pr1GQQx.js +154 -0
- package/dist/types-BVSyY3Hk.cjs +196 -0
- package/dist/{uniqueVintage-Cui74mlJ.js → uniqueVintage-CJXiNNe7.js} +19 -20
- package/dist/uniqueVintage-D0jzJWlo.cjs +1213 -0
- package/dist/useMessageInterceptor-B87e3yu3.cjs +33 -0
- package/dist/useMessageInterceptor-Bb7YRaWk.js +25 -0
- package/dist/userIdentityContext-BPqvVIg0.d.cts +20 -0
- package/dist/userIdentityContext-wbCRmlzp.d.ts +20 -0
- package/dist/utils-C9ZSCx12.js +888 -0
- package/dist/utils-D5HO61hG.cjs +1016 -0
- package/dist/variantInfo-DbVxA1yE.js +1 -0
- package/dist/variantInfo-orXoPBCU.cjs +0 -0
- package/dist/venaCbd-Bhhu_qUf.cjs +365 -0
- package/dist/venaCbd-CanovPS_.js +365 -0
- package/dist/westonJonBoucher-BC0x1ktI.cjs +422 -0
- package/dist/{westonJonBoucher-C95EuCl-.js → westonJonBoucher-BUu1_wP1.js} +19 -20
- package/dist/wineEnthusiast-BlCryfil.cjs +940 -0
- package/dist/{wineEnthusiast-DeTFY8Gm.js → wineEnthusiast-Ck1x5iJq.js} +19 -20
- package/dist/wolfMattress-D9Mjq-HP.js +372 -0
- package/dist/wolfMattress-JssghhC-.cjs +372 -0
- package/dist/wolfTactical-C6exYhL7.cjs +349 -0
- package/dist/wolfTactical-CnV3KQdI.js +349 -0
- package/package.json +101 -19
- package/src/{adapters/spiffy/commerce/api.ts → application/commerce-api.ts} +31 -23
- package/src/application/models/colorsConfig.ts +18 -18
- package/src/application/models/frontendConfig.ts +3 -3
- package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +1 -1
- package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +1 -1
- package/src/application/models/index.ts +0 -2
- package/src/application/models/localStorageEventListener.ts +2 -2
- package/src/application/models/supportedOrgs.ts +1 -1
- package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
- package/src/application/models/validators/validateGraphQLColorsConfig.ts +0 -21
- package/src/application/models/validators/validateGraphQLFrontendConfig.ts +2 -2
- package/src/application/utils/analyticsUtils.ts +53 -22
- package/src/application/utils/cdnUtils.ts +11 -0
- package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +15 -0
- package/src/atoms/app/index.ts +7 -17
- package/src/atoms/app/variant.ts +13 -4
- package/src/atoms/chat/chatState.ts +28 -18
- package/src/atoms/chat/messageQueue.ts +36 -5
- package/src/atoms/chat/replies.ts +45 -37
- package/src/atoms/envive/enviveConfig.ts +10 -6
- package/src/atoms/org/graphqlConfig.ts +21 -4
- package/src/atoms/org/index.ts +7 -7
- package/src/atoms/org/newOrgConfigAtom.ts +8 -0
- package/src/atoms/org/orgPageConfig.ts +6 -5
- package/src/atoms/search/chatSearch.ts +11 -5
- package/src/atoms/search/searchAPI.ts +68 -48
- package/src/atoms/search/searchServiceAdapter.ts +25 -0
- package/src/contexts/amplitudeContext.tsx +466 -0
- package/src/contexts/cdnContext.tsx +48 -0
- package/src/contexts/chatContext.tsx +15 -12
- package/src/contexts/enviveConfigContext.tsx +22 -17
- package/src/contexts/enviveCssContext.tsx +34 -5
- package/src/contexts/featureFlagContext.tsx +193 -0
- package/src/contexts/featureFlagServiceContext.tsx +87 -0
- package/src/contexts/graphqlContext.tsx +165 -0
- package/src/contexts/index.ts +13 -3
- package/src/contexts/localStorageContext.tsx +159 -0
- package/src/contexts/newOrgConfigContext.tsx +104 -0
- package/src/contexts/orgConfigContext.tsx +92 -92
- package/src/contexts/searchContext.tsx +187 -0
- package/src/contexts/sessionStorageContext.tsx +80 -0
- package/src/contexts/shopifyUrlContext.tsx +97 -0
- package/src/contexts/types.ts +12 -8
- package/src/contexts/userIdentityContext.tsx +197 -0
- package/src/events/registerAnalyticsListeners.ts +32 -38
- package/src/hooks/index.ts +10 -6
- package/src/hooks/useAmplitudeOperations.ts +35 -0
- package/src/hooks/useAppDetails.ts +49 -0
- package/src/hooks/useCdnOperations.ts +16 -0
- package/src/hooks/useChatToggle.ts +5 -4
- package/src/hooks/useChatToggleAnalytics.ts +15 -0
- package/src/hooks/useGraphQLConfig.ts +63 -0
- package/src/hooks/useIdentifyUser.ts +33 -0
- package/src/hooks/useImageResolver.ts +18 -10
- package/src/hooks/useLocalStorageOperations.ts +92 -0
- package/src/hooks/useNewOrgConfig.ts +7 -0
- package/src/hooks/useSearch.tsx +21 -18
- package/src/hooks/useSearchOperations.ts +97 -0
- package/src/hooks/useSessionStorageOperations.ts +28 -0
- package/src/hooks/useShopifyUrlOperations.ts +45 -0
- package/src/hooks/useTrackComponentVisibleEvent.ts +12 -8
- package/src/hooks/useUpdateAnalyticsProps.ts +28 -17
- package/src/interceptors/index.ts +0 -1
- package/src/interceptors/useMessageInterceptor.ts +5 -8
- package/src/merchants/bandolier/bandolier.ts +10 -28
- package/src/merchants/carpe/carpe.ts +5 -8
- package/src/merchants/coterie/coterie.ts +3 -6
- package/src/merchants/default.ts +73 -70
- package/src/merchants/domInsertion.ts +30 -0
- package/src/merchants/dreamlandBaby/dreamlandBaby.ts +12 -6
- package/src/merchants/fiveCbd/fiveCbd.ts +7 -13
- package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +44 -14
- package/src/merchants/greenpan/greenpan.ts +6 -12
- package/src/merchants/gridInsertion.ts +19 -0
- package/src/merchants/grooveLife/grooveLife.ts +13 -7
- package/src/merchants/homegrownCannabis/homegrownCannabis.ts +12 -6
- package/src/merchants/jackArcher/jackArcher.ts +26 -11
- package/src/merchants/jordanCraig/jordanCraig.ts +5 -5
- package/src/merchants/kindredBravely/kindredBravely.ts +16 -7
- package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +9 -6
- package/src/merchants/larryAndSerges/larryAndSerges.ts +6 -2
- package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +7 -7
- package/src/merchants/longevityrx/longevityrx.ts +14 -8
- package/src/merchants/lookOptic/lookOptic.ts +6 -6
- package/src/merchants/mantraBrand/mantraBrand.ts +14 -8
- package/src/merchants/medterra/medterra.ts +14 -11
- package/src/merchants/modells/modells.ts +6 -9
- package/src/merchants/pressedFloral/pressedFloral.ts +7 -13
- package/src/merchants/skinPerfection/skinPerfection.ts +13 -7
- package/src/merchants/snapSupplements/snapSupplements.ts +13 -10
- package/src/merchants/spanx/spanx.ts +6 -6
- package/src/merchants/spanx/spanxStaging.ts +6 -12
- package/src/merchants/supergoop/supergoop.ts +11 -12
- package/src/merchants/uniqueVintage/uniqueVintage.ts +6 -6
- package/src/merchants/venaCbd/venaCbd.ts +6 -9
- package/src/merchants/westonJonBoucher/westonJonBoucher.ts +6 -6
- package/src/merchants/wineEnthusiast/wineEnthusiast.ts +6 -6
- package/src/merchants/wolfMattress/wolfMattress.ts +3 -3
- package/src/merchants/wolfTactical/wolfTactical.ts +5 -11
- package/src/types/config-versions.ts +6 -0
- package/src/types.ts +0 -53
- package/dist/adapters/amplitude/index.cjs +0 -14
- package/dist/adapters/amplitude/index.d.cts +0 -6
- package/dist/adapters/amplitude/index.d.ts +0 -6
- package/dist/adapters/amplitude/index.js +0 -12
- package/dist/api-B2euFL-5.cjs +0 -269
- package/dist/api-XRr_lAG6.js +0 -190
- package/dist/application/config/index.cjs +0 -43
- package/dist/application/config/index.d.cts +0 -15
- package/dist/application/config/index.d.ts +0 -15
- package/dist/application/config/index.js +0 -41
- package/dist/application/service/customerService/index.cjs +0 -4
- package/dist/application/service/customerService/index.d.cts +0 -3
- package/dist/application/service/customerService/index.d.ts +0 -3
- package/dist/application/service/customerService/index.js +0 -4
- package/dist/application/service/index.cjs +0 -41
- package/dist/application/service/index.d.cts +0 -399
- package/dist/application/service/index.d.ts +0 -399
- package/dist/application/service/index.js +0 -12
- package/dist/bandolier-B76-OE75.cjs +0 -1230
- package/dist/bandolier-DRn_x1g1.js +0 -1230
- package/dist/carpe-kHi4RLB5.cjs +0 -608
- package/dist/carpe-qrSU99gq.js +0 -606
- package/dist/contexts-CQDwe3rK.cjs +0 -14333
- package/dist/contexts-e2sM-B9g.js +0 -12919
- package/dist/coterie-mMirPcHP.js +0 -240
- package/dist/customerService-BG1uNZZ1.cjs +0 -36
- package/dist/customerService-BHQRnLhC.js +0 -23
- package/dist/default-8Jfv8ehQ.cjs +0 -199
- package/dist/default-C8PQf-38.js +0 -176
- package/dist/default-LukSiCz1.js +0 -4
- package/dist/default-rJSJ887P.cjs +0 -4
- package/dist/dreamlandBaby-DHltv12Z.cjs +0 -347
- package/dist/dreamlandBaby-cG0HM9bt.js +0 -347
- package/dist/featureFlagService-5wdmW02z.d.ts +0 -18
- package/dist/featureFlagService-DaelrXEk.d.cts +0 -18
- package/dist/fiveCbd-Cvnwh03g.cjs +0 -614
- package/dist/fiveCbd-DhYMlsf9.js +0 -614
- package/dist/forLoveAndLemons-C8DuUexW.js +0 -666
- package/dist/forLoveAndLemons-DR6a1zjJ.cjs +0 -668
- package/dist/greenpan-B4Pu65kV.js +0 -398
- package/dist/greenpan-BL5p6j7f.cjs +0 -398
- package/dist/grooveLife-DjKWHoN3.cjs +0 -343
- package/dist/grooveLife-JK0TyaPz.js +0 -343
- package/dist/homegrownCannabis-DxqSDkmS.js +0 -411
- package/dist/homegrownCannabis-ZnfCqW-m.cjs +0 -411
- package/dist/index-BfuO9b0Q.d.ts +0 -749
- package/dist/index-CNsGWfS6.d.cts +0 -749
- package/dist/index-DFL1dIT_.d.ts +0 -7
- package/dist/index-MFbPQ8Ji.d.ts +0 -95
- package/dist/index-VSFakgAI.d.cts +0 -95
- package/dist/index-zZjcds15.d.cts +0 -7
- package/dist/jackArcher-mGkojXek.cjs +0 -728
- package/dist/jordanCraig-BvCvPRoR.js +0 -1787
- package/dist/jordanCraig-Dv8pVCiS.cjs +0 -1787
- package/dist/kindredBravely-UQP7wiNu.cjs +0 -491
- package/dist/kindredBravely-X8F_LNph.js +0 -491
- package/dist/kutFromTheKloth-BhYKk3CN.cjs +0 -370
- package/dist/kutFromTheKloth-D1xsTSJr.js +0 -370
- package/dist/larryAndSerges-1411NuZa.cjs +0 -262
- package/dist/larryAndSerges-DVIRLItu.js +0 -262
- package/dist/leapsAndRebounds-BJ8mwr33.js +0 -361
- package/dist/leapsAndRebounds-UcP9EJVO.cjs +0 -361
- package/dist/logger-Dln20ans.cjs +0 -26
- package/dist/logger-pdEEY8T2.js +0 -20
- package/dist/longevityrx-BFSv9GF5.cjs +0 -321
- package/dist/longevityrx-Cp6wleWr.js +0 -321
- package/dist/lookOptic-KieSqskd.cjs +0 -283
- package/dist/mantraBrand-CHQw-0nw.cjs +0 -751
- package/dist/medterra-CLG6Co1C.cjs +0 -584
- package/dist/medterra-D8ZX9NZC.js +0 -584
- package/dist/modells-BzyPwN2m.cjs +0 -485
- package/dist/modells-CAfqOCW4.js +0 -485
- package/dist/orgConfigResults--dAwtw3W.d.ts +0 -881
- package/dist/orgConfigResults-BL0XBA6x.d.cts +0 -881
- package/dist/pressedFloral-DULBuQwR.cjs +0 -662
- package/dist/pressedFloral-Dp-7Fk3S.js +0 -662
- package/dist/skinPerfection-BxuYCeJX.js +0 -335
- package/dist/skinPerfection-Cd3XZ6By.cjs +0 -335
- package/dist/snapSupplements-Bf6htPM0.js +0 -286
- package/dist/snapSupplements-ZFnXyMuZ.cjs +0 -286
- package/dist/spanx-CwDPQaGj.js +0 -662
- package/dist/spanx-Cyd4qDlK.cjs +0 -664
- package/dist/spanxStaging-D43nyAGy.js +0 -846
- package/dist/spanxStaging-ijbYnHzr.cjs +0 -849
- package/dist/supergoop-BnbFG7hm.cjs +0 -338
- package/dist/supergoop-CY043wIg.js +0 -336
- package/dist/types-BF_CJeck.js +0 -177
- package/dist/types-CD4LFta-.d.cts +0 -33
- package/dist/types-CNH4sfF-.cjs +0 -231
- package/dist/types-DBdI0j89.d.ts +0 -33
- package/dist/uniqueVintage-R2Jcu1y1.cjs +0 -1214
- package/dist/variant-CKVRF2-W.d.ts +0 -13
- package/dist/variant-raYuOP4L.d.cts +0 -13
- package/dist/venaCbd-o5_vOp4e.js +0 -366
- package/dist/venaCbd-r-IxEVc1.cjs +0 -366
- package/dist/westonJonBoucher-DjGEW3ZB.cjs +0 -423
- package/dist/wineEnthusiast-DvfcV5B3.cjs +0 -941
- package/dist/wolfMattress-6xPfOJt3.js +0 -373
- package/dist/wolfMattress-BjGnGKjP.cjs +0 -373
- package/dist/wolfTactical-Bi3WZu0m.cjs +0 -350
- package/dist/wolfTactical-C_F9-oPX.js +0 -350
- package/src/adapters/amplitude/amplitudeAdapter.ts +0 -477
- package/src/adapters/amplitude/index.ts +0 -2
- package/src/adapters/amplitude/stubAmplitudeAdapter.ts +0 -34
- package/src/adapters/spiffy/commerce/graphql.ts +0 -219
- package/src/application/config/generalStaticConfig.ts +0 -40
- package/src/application/config/index.ts +0 -1
- package/src/application/models/domMutationContinuation.ts +0 -7
- package/src/application/models/domObservationStrategy.ts +0 -9
- package/src/application/service/cachingService.ts +0 -84
- package/src/application/service/cdnService.ts +0 -20
- package/src/application/service/customerService/index.ts +0 -8
- package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +0 -15
- package/src/application/service/domMutationObserver.ts +0 -320
- package/src/application/service/domMutations/GridInsertionService.ts +0 -123
- package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +0 -99
- package/src/application/service/domMutations/domInsertionService.ts +0 -90
- package/src/application/service/domMutations/domMutationListener.ts +0 -15
- package/src/application/service/domMutations/domMutationListenerState.ts +0 -52
- package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +0 -41
- package/src/application/service/domMutations/gladly/gladlyListener.ts +0 -61
- package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +0 -41
- package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +0 -119
- package/src/application/service/featureFlagService.ts +0 -130
- package/src/application/service/index.ts +0 -31
- package/src/application/service/kustomerIntegrationService.ts +0 -111
- package/src/application/service/localStorageService.ts +0 -77
- package/src/application/service/pageVariantService.ts +0 -866
- package/src/application/service/searchService.ts +0 -147
- package/src/application/service/sessionStorageService.ts +0 -27
- package/src/application/service/shopifyUrlService.ts +0 -63
- package/src/application/service/userIdentityService.ts +0 -114
- package/src/application/service/windowChatToggleService.ts +0 -80
- package/src/application/service/windowDataLayerService.ts +0 -181
- package/src/application/service/windowFrontendConfigService.ts +0 -129
- package/src/atoms/org/merchantCss.ts +0 -158
- package/src/atoms/org/org.ts +0 -291
- package/src/atoms/org/orgUIConfig.ts +0 -142
- package/src/enabled-features.ts +0 -83
- package/src/hooks/useDynamicVariants.ts +0 -210
- package/src/hooks/useFileUpload.ts +0 -63
- package/src/hooks/useHideElements.ts +0 -82
- package/src/hooks/useHorizontalScrollAnimation.ts +0 -115
- package/src/hooks/useReducedMotionWithOverride.ts +0 -15
- package/src/hooks/useSnapControl.ts +0 -155
- package/src/interceptors/useFormEscalation.ts +0 -57
- /package/dist/{variantInfo-CzhR5W6h.js → atomStore-CZnUUsrr.js} +0 -0
- /package/dist/{variantInfo-CNRTY0gH.cjs → atomStore-KSoFS3Jj.cjs} +0 -0
- /package/dist/{utilityTypes-C4h2wgAK.cjs → locators-0YYZu9n4.cjs} +0 -0
- /package/dist/{utilityTypes-BVikejDo.js → locators-fBXS_pxP.js} +0 -0
- /package/dist/{locators-Dc5ZT0aF.js → utilityTypes-8sETsYPk.js} +0 -0
- /package/dist/{locators-lQMJj830.cjs → utilityTypes-COShxVir.cjs} +0 -0
- /package/src/{application/service/customerService/types.ts → types/customerService.ts} +0 -0
- /package/src/{adapters/spiffy/commerce → types}/exceptions/sessionExceptions.ts +0 -0
- /package/src/{adapters/spiffy/commerce → types}/exceptions/unsupportedProductExceptions.ts +0 -0
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Configuration,
|
|
3
|
-
ResponseCategory,
|
|
4
|
-
ResponseError,
|
|
5
|
-
SearchApi,
|
|
6
|
-
} from "@spiffy-ai/commerce-api-client";
|
|
7
|
-
import { getAtomStore } from "src/atoms/atomStore/atomStore";
|
|
8
|
-
import { apiKeyAtom } from "src/atoms/org/org";
|
|
9
|
-
import { appDetailsAtom } from "src/atoms/app";
|
|
10
|
-
import Logger from "src/application/logging/logger";
|
|
11
|
-
import { SessionRestartRequired } from "src/adapters/spiffy/commerce/exceptions/sessionExceptions";
|
|
12
|
-
import { UnsupportedProductException } from "src/adapters/spiffy/commerce/exceptions/unsupportedProductExceptions";
|
|
13
|
-
import { SearchResult, SearchParams } from "../models/api/search";
|
|
14
|
-
import { baseUrlAtom } from "src/atoms/envive/enviveConfig";
|
|
15
|
-
|
|
16
|
-
const transformProductResponses = (products: SearchResult["products"]) =>
|
|
17
|
-
products.map((data) => ({
|
|
18
|
-
id: data.id,
|
|
19
|
-
responseId: data.response_id,
|
|
20
|
-
category: ResponseCategory.Product,
|
|
21
|
-
description: data.description,
|
|
22
|
-
imageUrl: data.image_url,
|
|
23
|
-
imageUrls: data.image_urls,
|
|
24
|
-
title: data.title,
|
|
25
|
-
url: data.url,
|
|
26
|
-
originalPrice: data.original_price,
|
|
27
|
-
salePrice: data.sale_price,
|
|
28
|
-
averageRating: data.average_rating,
|
|
29
|
-
numberReviews: data.number_reviews,
|
|
30
|
-
metadata: data.metadata,
|
|
31
|
-
isForGrid: data.is_for_grid,
|
|
32
|
-
colors: data.colors,
|
|
33
|
-
sizes: data.sizes,
|
|
34
|
-
filters: data.filters,
|
|
35
|
-
}));
|
|
36
|
-
|
|
37
|
-
async function errorResponseBody(error: ResponseError) {
|
|
38
|
-
try {
|
|
39
|
-
return await error.response.json();
|
|
40
|
-
} catch {
|
|
41
|
-
return {};
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
async function throwSessionRestartRequiredIf(errorMsg: string, error: unknown) {
|
|
46
|
-
if (!(error instanceof ResponseError)) {
|
|
47
|
-
Logger.logInfo(errorMsg, error);
|
|
48
|
-
throw error;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const errorResponse = await errorResponseBody(error);
|
|
52
|
-
if (
|
|
53
|
-
errorResponse?.message?.toLowerCase() === "unsupported product" ||
|
|
54
|
-
errorResponse?.app_code?.toUpperCase() === "PRODUCT_NOT_FOUND"
|
|
55
|
-
) {
|
|
56
|
-
throw new UnsupportedProductException();
|
|
57
|
-
} else if (
|
|
58
|
-
errorResponse?.app_code?.toUpperCase() === "RESTART_SESSION" ||
|
|
59
|
-
errorResponse?.sub_code?.toUpperCase() === "NOT_FOUND"
|
|
60
|
-
) {
|
|
61
|
-
Logger.logInfo(
|
|
62
|
-
"Session does not exist. Re-start session",
|
|
63
|
-
error,
|
|
64
|
-
error.response,
|
|
65
|
-
errorResponse
|
|
66
|
-
);
|
|
67
|
-
throw new SessionRestartRequired();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
Logger.logInfo(errorMsg, error);
|
|
71
|
-
throw error;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
class SearchService {
|
|
75
|
-
private readonly searchApi: SearchApi;
|
|
76
|
-
|
|
77
|
-
private static instance: SearchService | undefined;
|
|
78
|
-
|
|
79
|
-
private static getInstance = (): SearchService => {
|
|
80
|
-
if (!SearchService.instance) {
|
|
81
|
-
const atomStore = getAtomStore();
|
|
82
|
-
const apiKey = atomStore.get(apiKeyAtom);
|
|
83
|
-
if (!apiKey) {
|
|
84
|
-
throw new Error(
|
|
85
|
-
"[spiffy-ai] SearchService requires apiKey to be available"
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
SearchService.instance = new SearchService(apiKey);
|
|
89
|
-
}
|
|
90
|
-
return SearchService.instance;
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
private constructor(apiKey: string, basePath?: string) {
|
|
94
|
-
const atomStore = getAtomStore();
|
|
95
|
-
|
|
96
|
-
const baseUrl = atomStore.get(baseUrlAtom);
|
|
97
|
-
const path = basePath || baseUrl;
|
|
98
|
-
const config: Configuration = new Configuration({
|
|
99
|
-
accessToken: apiKey,
|
|
100
|
-
basePath: path,
|
|
101
|
-
headers: {
|
|
102
|
-
"Content-Type": "application/json",
|
|
103
|
-
Accept: "application/json",
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
this.searchApi = new SearchApi(config);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
private async _searchProducts(params: SearchParams): Promise<SearchResult> {
|
|
110
|
-
const atomStore = getAtomStore();
|
|
111
|
-
const appDetails = atomStore.get(appDetailsAtom);
|
|
112
|
-
try {
|
|
113
|
-
const response = await this.searchApi.v1SearchQueryGet({
|
|
114
|
-
query: params.query,
|
|
115
|
-
limit: params.limit,
|
|
116
|
-
org_id: appDetails.orgId,
|
|
117
|
-
user_id: appDetails.userId,
|
|
118
|
-
});
|
|
119
|
-
const {
|
|
120
|
-
products,
|
|
121
|
-
filters,
|
|
122
|
-
search_response_id: searchResponseId,
|
|
123
|
-
} = response;
|
|
124
|
-
|
|
125
|
-
return {
|
|
126
|
-
products: transformProductResponses(products) || [],
|
|
127
|
-
filters: filters || [],
|
|
128
|
-
totalProductCount: products?.length || 0,
|
|
129
|
-
searchResponseId: searchResponseId || "",
|
|
130
|
-
};
|
|
131
|
-
} catch (error) {
|
|
132
|
-
await throwSessionRestartRequiredIf("Failed to search products", error);
|
|
133
|
-
// This part will not be reached if an exception is thrown, but it's required for type safety
|
|
134
|
-
return {
|
|
135
|
-
products: [],
|
|
136
|
-
filters: [],
|
|
137
|
-
totalProductCount: 0,
|
|
138
|
-
searchResponseId: "",
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
static searchProducts = (params: SearchParams): Promise<SearchResult> =>
|
|
144
|
-
SearchService.getInstance()._searchProducts(params);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
export default SearchService;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import Logger from '../logging/logger';
|
|
2
|
-
|
|
3
|
-
class SessionStorageService {
|
|
4
|
-
static setItem(key: string, value: string): void {
|
|
5
|
-
sessionStorage.setItem(key, value);
|
|
6
|
-
window.dispatchEvent(
|
|
7
|
-
new StorageEvent('storage', {
|
|
8
|
-
key,
|
|
9
|
-
newValue: value,
|
|
10
|
-
}),
|
|
11
|
-
);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
static getItem(key: string): string | null {
|
|
15
|
-
return sessionStorage.getItem(key);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
static getSessionStorage() {
|
|
19
|
-
const ls = window?.sessionStorage;
|
|
20
|
-
if (!ls) {
|
|
21
|
-
Logger.logError('sessionStorage is not available', undefined);
|
|
22
|
-
}
|
|
23
|
-
return ls;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export { SessionStorageService };
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { IdExtractor } from 'src/contexts/types';
|
|
2
|
-
import { parseHref } from 'src/application/utils/urlsParser';
|
|
3
|
-
|
|
4
|
-
class ShopifyUrlService {
|
|
5
|
-
static getTrimmedPathName(): string | null {
|
|
6
|
-
let { pathname } = window.location;
|
|
7
|
-
// strip out the proxy path so local dev still works
|
|
8
|
-
pathname = pathname.replace('/proxy', '');
|
|
9
|
-
// remove trailing hash if it exists
|
|
10
|
-
pathname = pathname.replace(/#.*$/, '');
|
|
11
|
-
// remove trailing /, ie. some URLs can end with '/' like /collections/cast-iron/
|
|
12
|
-
pathname = pathname.replace(/\/$/, '');
|
|
13
|
-
|
|
14
|
-
if (pathname === undefined || pathname === null || pathname.length === 0) {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return pathname;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Parses the URL to determine the PLP or PDP ID.
|
|
23
|
-
*
|
|
24
|
-
* @param extractor the type of extractor to parse segments of the page URL
|
|
25
|
-
*
|
|
26
|
-
* @returns the PLP or PDP ID if found, otherwise null
|
|
27
|
-
*/
|
|
28
|
-
static getPlpOrPdpId(extractor: IdExtractor): string | null {
|
|
29
|
-
if (extractor === 'shopify-product-variant-id') {
|
|
30
|
-
const parsedHref = parseHref(window.location.href);
|
|
31
|
-
// TODO: this extractor is unique to Spanx who uses the "variant" query param to identify the product.
|
|
32
|
-
// variant. It should be flexible enough to support params defined in the page config
|
|
33
|
-
const variantId = parsedHref?.urlSearchParams?.get('variant');
|
|
34
|
-
// Allow the "shopify-product-variant-id" extractor to fallback to the "shopify-product-id" extractor
|
|
35
|
-
if (!variantId) {
|
|
36
|
-
return ShopifyUrlService.getPlpOrPdpId('shopify-product-id');
|
|
37
|
-
}
|
|
38
|
-
return variantId;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const pathSegment = extractor === 'shopify-product-id' ? 'products' : 'collections';
|
|
42
|
-
const tokens = ShopifyUrlService.getTrimmedPathName()?.split('/');
|
|
43
|
-
const idIndex = tokens?.findIndex((token) => token === pathSegment);
|
|
44
|
-
if (idIndex !== undefined && idIndex >= 0 && tokens) {
|
|
45
|
-
return decodeURIComponent(tokens[idIndex + 1]);
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
static isOnPdpPage(): boolean {
|
|
51
|
-
return ShopifyUrlService.getTrimmedPathName()?.includes('/products') ?? false;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
static isOnPlpPage(): boolean {
|
|
55
|
-
return (
|
|
56
|
-
(ShopifyUrlService.getTrimmedPathName()?.includes('/collections') &&
|
|
57
|
-
!ShopifyUrlService.getTrimmedPathName()?.includes('/products')) ??
|
|
58
|
-
false
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export { ShopifyUrlService };
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import UAParser from 'ua-parser-js';
|
|
2
|
-
import Logger from 'src/application/logging/logger';
|
|
3
|
-
import CommerceApiClient from 'src/adapters/spiffy/commerce/api';
|
|
4
|
-
import { v4 as uuid } from 'uuid';
|
|
5
|
-
import { ClientDetails } from 'src/application/models/clientDetails';
|
|
6
|
-
import { LocalStorageService } from 'src/application/service/localStorageService';
|
|
7
|
-
import { WindowDataLayerService } from 'src/application/service/windowDataLayerService';
|
|
8
|
-
|
|
9
|
-
const getUserAgentDetails = (): ClientDetails => {
|
|
10
|
-
const uaParser = new UAParser();
|
|
11
|
-
const result = uaParser.getResult();
|
|
12
|
-
|
|
13
|
-
return {
|
|
14
|
-
os: result?.os?.name, // Operating system name (e.g., "Windows", "iOS")
|
|
15
|
-
osVersion: result?.os?.version, // Operating system version (e.g., "10", "14.1")
|
|
16
|
-
deviceBrand: result?.device?.vendor, // Device brand (e.g., "Apple", "Samsung")
|
|
17
|
-
deviceManufacturer: result?.device?.vendor, // Device manufacturer (e.g., "Apple", "Samsung")
|
|
18
|
-
deviceModel: result?.device?.model, // Device model (e.g., "iPhone", "Galaxy S10")
|
|
19
|
-
browser: result?.browser?.name, // Browser name (e.g., "Chrome", "Safari")
|
|
20
|
-
browserVersion: result?.browser?.version, // Browser version
|
|
21
|
-
userAgent: result?.ua, // User agent string
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
class UserIdentityService {
|
|
26
|
-
static USER_ID_OVERRIDE_KEY = 'v1-spiffy-user-id-override';
|
|
27
|
-
|
|
28
|
-
static USER_ID_DEFAULT_KEY = 'v1-spiffy-user-id-default';
|
|
29
|
-
|
|
30
|
-
static async identifyUser(): Promise<void> {
|
|
31
|
-
try {
|
|
32
|
-
const cdpUserId = WindowDataLayerService.getGoogleAnalyticsClientId();
|
|
33
|
-
const userId = UserIdentityService.getUserIdOrDefault();
|
|
34
|
-
const userAgentDetails = getUserAgentDetails();
|
|
35
|
-
|
|
36
|
-
if (!cdpUserId) {
|
|
37
|
-
Logger.logWarn('[spiffy-ai] No GA Client ID found, skipping identifyUser', undefined);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
await CommerceApiClient.identifyUser(userId, cdpUserId, userAgentDetails);
|
|
42
|
-
} catch (error) {
|
|
43
|
-
Logger.logError('[spiffy-ai] Error identifying user', error);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
static getUserIdOrDefault(): string {
|
|
48
|
-
const userIdOverride = UserIdentityService.getUserIdOverrideFromLocalStorage();
|
|
49
|
-
if (userIdOverride) {
|
|
50
|
-
return userIdOverride;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const defaultUserId = UserIdentityService.getUserIdDefaultFromLocalStorage();
|
|
54
|
-
if (defaultUserId) {
|
|
55
|
-
return defaultUserId;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return this.setUserIdDefaultInLocalStorage(`spiffy-user-id-${uuid()}`);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
static getUserIdOverrideFromLocalStorage(): string | undefined {
|
|
62
|
-
return (
|
|
63
|
-
LocalStorageService.getLocalStorage()?.getItem(UserIdentityService.USER_ID_OVERRIDE_KEY) ??
|
|
64
|
-
undefined
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
static getUserIdDefaultFromLocalStorage(): string | undefined {
|
|
69
|
-
return (
|
|
70
|
-
LocalStorageService.getLocalStorage()?.getItem(UserIdentityService.USER_ID_DEFAULT_KEY) ??
|
|
71
|
-
undefined
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
static setUserIdDefaultInLocalStorage(userId: string): string {
|
|
76
|
-
Logger.logInfo(`setUserIdDefaultInLocalStorage - Setting user_id=${userId}`);
|
|
77
|
-
LocalStorageService.getLocalStorage()?.setItem(UserIdentityService.USER_ID_DEFAULT_KEY, userId);
|
|
78
|
-
window.dispatchEvent(
|
|
79
|
-
new StorageEvent('storage', {
|
|
80
|
-
key: UserIdentityService.USER_ID_DEFAULT_KEY,
|
|
81
|
-
newValue: userId,
|
|
82
|
-
}),
|
|
83
|
-
);
|
|
84
|
-
return userId;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
static setUserIdOverrideInLocalStorage(userId: string): string {
|
|
88
|
-
Logger.logInfo(`setUserIdOverrideInLocalStorage - Setting user_id=${userId}`);
|
|
89
|
-
LocalStorageService.getLocalStorage()?.setItem(
|
|
90
|
-
UserIdentityService.USER_ID_OVERRIDE_KEY,
|
|
91
|
-
userId,
|
|
92
|
-
);
|
|
93
|
-
window.dispatchEvent(
|
|
94
|
-
new StorageEvent('storage', {
|
|
95
|
-
key: UserIdentityService.USER_ID_OVERRIDE_KEY,
|
|
96
|
-
newValue: userId,
|
|
97
|
-
}),
|
|
98
|
-
);
|
|
99
|
-
return userId;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
static clearUserIdOverrideInLocalStorage() {
|
|
103
|
-
Logger.logInfo(`clearUserIdOverrideInLocalStorage - Clearing user_id`);
|
|
104
|
-
LocalStorageService.getLocalStorage()?.removeItem(UserIdentityService.USER_ID_OVERRIDE_KEY);
|
|
105
|
-
window.dispatchEvent(
|
|
106
|
-
new StorageEvent('storage', {
|
|
107
|
-
key: UserIdentityService.USER_ID_OVERRIDE_KEY,
|
|
108
|
-
newValue: undefined,
|
|
109
|
-
}),
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export { UserIdentityService };
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { useSetAtom } from "jotai";
|
|
2
|
-
import { useEffect, useRef } from "react";
|
|
3
|
-
import { Message, MessageRole, MessageType } from "src/application/models";
|
|
4
|
-
import { handleReplyAtom } from "src/atoms/chat";
|
|
5
|
-
import { useChatToggle } from "src/hooks";
|
|
6
|
-
import { v4 as uuid } from "uuid";
|
|
7
|
-
import Logger from "../logging/logger";
|
|
8
|
-
import { ChatElementDisplayLocation } from "../models/chatElementDisplayLocation";
|
|
9
|
-
import { getAtomStore } from "src/atoms/atomStore";
|
|
10
|
-
import { identifyingPrefixAtom } from "src/atoms/envive/enviveConfig";
|
|
11
|
-
|
|
12
|
-
let hasAttachedEnviveChatToggle = false;
|
|
13
|
-
|
|
14
|
-
export const WindowChatToggleBinder = () => {
|
|
15
|
-
const triggerLocation = ChatElementDisplayLocation.WINDOW_API_CALL;
|
|
16
|
-
const hook = useChatToggle();
|
|
17
|
-
const setReply = useSetAtom(handleReplyAtom);
|
|
18
|
-
|
|
19
|
-
// Refs to hold latest implementations
|
|
20
|
-
const openChatRef = useRef<(triggerId?: string) => void>();
|
|
21
|
-
const closeChatRef = useRef<(triggerId?: string) => void>();
|
|
22
|
-
const toggleChatRef = useRef<(triggerId?: string) => void>();
|
|
23
|
-
const isOpenRef = useRef<boolean>(hook.isOpen);
|
|
24
|
-
const openChatWithPromptRef =
|
|
25
|
-
useRef<(prompt: string, triggerId?: string) => void>();
|
|
26
|
-
|
|
27
|
-
// Keep refs up to date with latest hook/state
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
openChatRef.current = (triggerId?: string) =>
|
|
30
|
-
hook.openChat(triggerLocation, triggerId);
|
|
31
|
-
closeChatRef.current = (triggerId?: string) =>
|
|
32
|
-
hook.closeChat(triggerLocation, triggerId);
|
|
33
|
-
toggleChatRef.current = (triggerId?: string) =>
|
|
34
|
-
hook.toggle(triggerLocation, triggerId);
|
|
35
|
-
isOpenRef.current = hook.isOpen;
|
|
36
|
-
openChatWithPromptRef.current = (prompt: string, triggerId?: string) => {
|
|
37
|
-
const message: Message = {
|
|
38
|
-
id: uuid(),
|
|
39
|
-
createdAt: new Date().toISOString(),
|
|
40
|
-
role: MessageRole.User,
|
|
41
|
-
type: MessageType.QueryTyped,
|
|
42
|
-
metadata: {
|
|
43
|
-
content: prompt,
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
setReply({ message, userTyped: false });
|
|
47
|
-
hook.openChat(triggerLocation, triggerId);
|
|
48
|
-
};
|
|
49
|
-
}, [hook, setReply, triggerLocation, hook.isOpen]);
|
|
50
|
-
|
|
51
|
-
// Attach once; wrapper functions call through to refs
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
if (hasAttachedEnviveChatToggle) return;
|
|
54
|
-
const atomStore = getAtomStore();
|
|
55
|
-
const identifyingPrefix = atomStore.get(identifyingPrefixAtom);
|
|
56
|
-
try {
|
|
57
|
-
if (!window[identifyingPrefix]) {
|
|
58
|
-
window[identifyingPrefix] = {} as Window[typeof identifyingPrefix];
|
|
59
|
-
}
|
|
60
|
-
window[identifyingPrefix].openChat = (triggerId?: string) =>
|
|
61
|
-
openChatRef.current?.(triggerId);
|
|
62
|
-
window[identifyingPrefix].closeChat = (triggerId?: string) =>
|
|
63
|
-
closeChatRef.current?.(triggerId);
|
|
64
|
-
window[identifyingPrefix].toggleChat = (triggerId?: string) =>
|
|
65
|
-
toggleChatRef.current?.(triggerId);
|
|
66
|
-
window[identifyingPrefix].getChatIsOpen = () => !!isOpenRef.current;
|
|
67
|
-
window[identifyingPrefix].openChatWithPrompt = (
|
|
68
|
-
prompt: string,
|
|
69
|
-
triggerId?: string
|
|
70
|
-
) => openChatWithPromptRef.current?.(prompt, triggerId);
|
|
71
|
-
|
|
72
|
-
Logger.logDebug("[spiffy-ai] Chat toggle functions attached");
|
|
73
|
-
hasAttachedEnviveChatToggle = true;
|
|
74
|
-
} catch (e) {
|
|
75
|
-
Logger.logError("[spiffy-ai] Failed to attach Chat toggle functions", e);
|
|
76
|
-
}
|
|
77
|
-
}, []);
|
|
78
|
-
|
|
79
|
-
return null;
|
|
80
|
-
};
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import Logger from 'src/application/logging/logger';
|
|
2
|
-
import { OrgAnalyticsGoogleAnalyticsConfig } from 'src/application/models/api/orgAnalyticsConfig';
|
|
3
|
-
|
|
4
|
-
declare global {
|
|
5
|
-
interface Window {
|
|
6
|
-
dataLayer: any;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
class WindowDataLayerService {
|
|
11
|
-
private readonly dataLayer: any;
|
|
12
|
-
|
|
13
|
-
private readonly originalDataLayerPush: any;
|
|
14
|
-
|
|
15
|
-
private static instance: WindowDataLayerService | undefined;
|
|
16
|
-
|
|
17
|
-
private readonly merchantGoogleMeasurementId: string;
|
|
18
|
-
|
|
19
|
-
private constructor(private readonly gaConfig: OrgAnalyticsGoogleAnalyticsConfig) {
|
|
20
|
-
this.dataLayer = window.dataLayer;
|
|
21
|
-
this.originalDataLayerPush = this.dataLayer?.push;
|
|
22
|
-
this.merchantGoogleMeasurementId = this.gaConfig.measurementId || 'default';
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Pushes data to the dataLayer
|
|
27
|
-
* @param data
|
|
28
|
-
* data has the shape: { event: 'event_name', ... }
|
|
29
|
-
* Example:
|
|
30
|
-
* {
|
|
31
|
-
* "event": "add_to_cart",
|
|
32
|
-
* "currency": "USD",
|
|
33
|
-
* "value": 30.03,
|
|
34
|
-
* "items": [
|
|
35
|
-
* {
|
|
36
|
-
* "item_id": "SKU_12345",
|
|
37
|
-
* "item_name": "Stan and Friends Tee",
|
|
38
|
-
* "affiliation": "Google Merchandise Store",
|
|
39
|
-
* "coupon": "SUMMER_FUN",
|
|
40
|
-
* "discount": 2.22,
|
|
41
|
-
* "index": 0,
|
|
42
|
-
* "item_brand": "Google",
|
|
43
|
-
* "item_category": "Apparel",
|
|
44
|
-
* "item_category2": "Adult",
|
|
45
|
-
* "item_category3": "Shirts",
|
|
46
|
-
* "item_category4": "Crew",
|
|
47
|
-
* "item_category5": "Short sleeve",
|
|
48
|
-
* "item_list_id": "related_products",
|
|
49
|
-
* "item_list_name": "Related Products",
|
|
50
|
-
* "item_variant": "green",
|
|
51
|
-
* "location_id": "ChIJIQBpAG2ahYAR_6128GcTUEo",
|
|
52
|
-
* "price": 10.01,
|
|
53
|
-
* "quantity": 3
|
|
54
|
-
* }
|
|
55
|
-
* ]
|
|
56
|
-
* }
|
|
57
|
-
*/
|
|
58
|
-
push(data: any) {
|
|
59
|
-
this.dataLayer?.push(data);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
static isDataLayerAvailable(): boolean {
|
|
63
|
-
const windowDataLayer = window.dataLayer;
|
|
64
|
-
if (windowDataLayer && windowDataLayer.push) {
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
67
|
-
Logger.logDebug('[spiffy-ai] DataLayerEventsListener dataLayer not available');
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
static tryFlattenArguments(args: any): any {
|
|
72
|
-
function isArguments(obj: any) {
|
|
73
|
-
return obj !== undefined && Object.prototype.toString.call(obj) === '[object Arguments]';
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
try {
|
|
77
|
-
const all_arguments = [];
|
|
78
|
-
if (args.length > 0) {
|
|
79
|
-
for (let i = 0; i < args.length; i++) {
|
|
80
|
-
const arg = args[i];
|
|
81
|
-
if (isArguments(arg)) {
|
|
82
|
-
const flattened = WindowDataLayerService.tryFlattenArguments(arg);
|
|
83
|
-
all_arguments.push(...flattened);
|
|
84
|
-
} else {
|
|
85
|
-
all_arguments.push(arguments[i]);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return all_arguments;
|
|
90
|
-
} catch {
|
|
91
|
-
return args;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
wrapWithProxyMethod(methodName: string, callback: Function) {
|
|
96
|
-
if (!this.dataLayer) {
|
|
97
|
-
Logger.logWarn('DataLayerEventsListener dataLayer not available', undefined);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const originalMethod = this.dataLayer[methodName];
|
|
102
|
-
this.dataLayer[methodName] = function () {
|
|
103
|
-
try {
|
|
104
|
-
callback.apply(this, arguments);
|
|
105
|
-
} catch (e) {
|
|
106
|
-
Logger.logError(`Error in dataLayer.${methodName}: `, e);
|
|
107
|
-
} finally {
|
|
108
|
-
originalMethod.apply(this, arguments);
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
static getSingletonInstanceOf(
|
|
114
|
-
gaConfig: OrgAnalyticsGoogleAnalyticsConfig,
|
|
115
|
-
): WindowDataLayerService {
|
|
116
|
-
if (!WindowDataLayerService.instance) {
|
|
117
|
-
WindowDataLayerService.instance = new WindowDataLayerService(gaConfig);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return WindowDataLayerService.instance;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
sendToGoogleAnalyticsCircularEventsSafe(
|
|
124
|
-
eventName: string,
|
|
125
|
-
eventProps: Record<string, unknown> | undefined,
|
|
126
|
-
) {
|
|
127
|
-
// To avoid circular events, we need only send the event to Google Analytics if it is not already in the dataLayer!
|
|
128
|
-
// Example of a circular event:
|
|
129
|
-
// 1. User clicks add to cart button
|
|
130
|
-
// 2. dataLayer is updated with the add to cart event
|
|
131
|
-
// 3. DataLayerEventsListener intercepts the add to cart event and sends it to Amplitude via MetricsService/MetricsContext
|
|
132
|
-
// 4. MetricsService/MetricsContext calls this method to send the event to Google Analytics! <--- Circular event!!!
|
|
133
|
-
|
|
134
|
-
const This = this;
|
|
135
|
-
|
|
136
|
-
function doesEventExistInDataLayer(eventName: string) {
|
|
137
|
-
return This.dataLayer?.find((event: any) => event.event === eventName);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (doesEventExistInDataLayer(eventName)) {
|
|
141
|
-
Logger.logDebug(
|
|
142
|
-
`[spiffy-ai] Event ${eventName} already exists in dataLayer. Skipping Google Analytics event.`,
|
|
143
|
-
);
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function gtag() {
|
|
148
|
-
if (This.originalDataLayerPush) {
|
|
149
|
-
This.originalDataLayerPush(arguments);
|
|
150
|
-
} else {
|
|
151
|
-
Logger.logDebug('No originalDataLayerPush found - no metrics being logged');
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// @ts-ignore
|
|
156
|
-
gtag('event', eventName, {
|
|
157
|
-
event: eventName,
|
|
158
|
-
send_to: this.merchantGoogleMeasurementId,
|
|
159
|
-
...eventProps,
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
static getGoogleAnalyticsClientId = (): string | undefined => {
|
|
164
|
-
try {
|
|
165
|
-
// ga cookie has the format _ga=GA1.1.xxxxxxxxxx.yyyyyyyyyy
|
|
166
|
-
const gaCookie = document.cookie.split(';').find((c) => c.trim().startsWith('_ga='));
|
|
167
|
-
|
|
168
|
-
if (!gaCookie) {
|
|
169
|
-
Logger.logWarn('[spiffy-ai] No GA cookie found', undefined);
|
|
170
|
-
return undefined;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
return gaCookie.split('.').slice(2).join('.');
|
|
174
|
-
} catch (error) {
|
|
175
|
-
Logger.logError('Error getting GA client ID:', error);
|
|
176
|
-
return undefined;
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export { WindowDataLayerService };
|