@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.
Files changed (488) hide show
  1. package/dist/amplitudeContext-CHzas7Cf.d.cts +52 -0
  2. package/dist/amplitudeContext-D-7fmVh1.cjs +356 -0
  3. package/dist/amplitudeContext-hY3caPC6.js +322 -0
  4. package/dist/amplitudeContext-tJ4y-SzX.d.ts +52 -0
  5. package/dist/api-DjeZXxl_.js +207 -0
  6. package/dist/api-_JaUnIUj.cjs +292 -0
  7. package/dist/app-CjsQ2_n-.js +132 -0
  8. package/dist/app-CnKRZ9RW.cjs +178 -0
  9. package/dist/application/models/graphql/index.cjs +3 -12
  10. package/dist/application/models/graphql/index.d.cts +1 -1
  11. package/dist/application/models/graphql/index.d.ts +1 -1
  12. package/dist/application/models/graphql/index.js +1 -10
  13. package/dist/application/models/guards/api/index.cjs +1 -2
  14. package/dist/application/models/guards/api/index.d.cts +2 -2
  15. package/dist/application/models/guards/api/index.d.ts +2 -2
  16. package/dist/application/models/guards/api/index.js +1 -2
  17. package/dist/application/models/index.cjs +48 -54
  18. package/dist/application/models/index.d.cts +7 -9
  19. package/dist/application/models/index.d.ts +7 -9
  20. package/dist/application/models/index.js +7 -11
  21. package/dist/application/models/utilityTypes/index.cjs +1 -1
  22. package/dist/application/models/utilityTypes/index.d.cts +1 -1
  23. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  24. package/dist/application/models/utilityTypes/index.js +1 -1
  25. package/dist/application/models/variantInfo/index.cjs +1 -1
  26. package/dist/application/models/variantInfo/index.d.cts +1 -1
  27. package/dist/application/models/variantInfo/index.d.ts +1 -1
  28. package/dist/application/models/variantInfo/index.js +1 -1
  29. package/dist/application/utils/index.cjs +40 -37
  30. package/dist/application/utils/index.d.cts +18 -14
  31. package/dist/application/utils/index.d.ts +17 -13
  32. package/dist/application/utils/index.js +13 -10
  33. package/dist/{atomStore-JwGb7pcy.cjs → atomStore-B4jIaDPd.cjs} +1 -1
  34. package/dist/{atomStore-B1cgmbP0.js → atomStore-D8pjE1vL.js} +1 -1
  35. package/dist/atoms/app/index.cjs +14 -16
  36. package/dist/atoms/app/index.d.cts +20 -19
  37. package/dist/atoms/app/index.d.ts +20 -19
  38. package/dist/atoms/app/index.js +10 -11
  39. package/dist/atoms/atomStore/index.cjs +2 -1
  40. package/dist/atoms/atomStore/index.d.cts +1 -1
  41. package/dist/atoms/atomStore/index.js +2 -1
  42. package/dist/atoms/chat/index.cjs +44 -40
  43. package/dist/atoms/chat/index.d.cts +35 -36
  44. package/dist/atoms/chat/index.d.ts +35 -36
  45. package/dist/atoms/chat/index.js +14 -10
  46. package/dist/atoms/globalSearch/index.cjs +1 -1
  47. package/dist/atoms/globalSearch/index.d.cts +5 -5
  48. package/dist/atoms/globalSearch/index.d.ts +5 -5
  49. package/dist/atoms/globalSearch/index.js +1 -1
  50. package/dist/atoms/org/index.cjs +26 -37
  51. package/dist/atoms/org/index.d.cts +37 -47
  52. package/dist/atoms/org/index.d.ts +37 -47
  53. package/dist/atoms/org/index.js +11 -11
  54. package/dist/atoms/search/index.cjs +47 -41
  55. package/dist/atoms/search/index.d.cts +7 -9
  56. package/dist/atoms/search/index.d.ts +7 -9
  57. package/dist/atoms/search/index.js +16 -10
  58. package/dist/bandolier-DYEz4-8C.js +1229 -0
  59. package/dist/bandolier-o_-xrbOV.cjs +1229 -0
  60. package/dist/carpe-CsG5jCcl.cjs +607 -0
  61. package/dist/carpe-DONk00bZ.js +605 -0
  62. package/dist/cdnUtils-32v8bDX9.cjs +16 -0
  63. package/dist/cdnUtils-E4tLBt2g.js +11 -0
  64. package/dist/{chat-BgONoYU7.cjs → chat-BubCW1as.cjs} +1 -1
  65. package/dist/chat-CO7cRkaq.cjs +506 -0
  66. package/dist/{chat-CLJ4NWcN.js → chat-CV6MXeID.js} +1 -1
  67. package/dist/chat-hcRc4RRd.js +285 -0
  68. package/dist/{components-CV1fhAkj.js → components-B4T3Uzth.js} +1 -1
  69. package/dist/{components-BKZbet67.cjs → components-Cw9WjA6g.cjs} +1 -1
  70. package/dist/config/locators/components/chat/index.cjs +1 -1
  71. package/dist/config/locators/components/chat/index.d.cts +1 -1
  72. package/dist/config/locators/components/chat/index.d.ts +1 -1
  73. package/dist/config/locators/components/chat/index.js +1 -1
  74. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  75. package/dist/config/locators/components/index.cjs +1 -1
  76. package/dist/config/locators/components/index.d.cts +1 -1
  77. package/dist/config/locators/components/index.d.ts +1 -1
  78. package/dist/config/locators/components/index.js +1 -1
  79. package/dist/config/locators/index.cjs +4 -4
  80. package/dist/config/locators/index.d.cts +2 -2
  81. package/dist/config/locators/index.d.ts +3 -3
  82. package/dist/config/locators/index.js +4 -4
  83. package/dist/contexts/index.cjs +45 -14
  84. package/dist/contexts/index.d.cts +10 -78
  85. package/dist/contexts/index.d.ts +10 -78
  86. package/dist/contexts/index.js +22 -11
  87. package/dist/contexts-B4ihTBsV.cjs +2980 -0
  88. package/dist/contexts-DGlr7M1o.js +2596 -0
  89. package/dist/coterie-CKB93qfz.cjs +239 -0
  90. package/dist/{coterie-yQ-_JXSw.cjs → coterie-DHcj2fRE.js} +64 -65
  91. package/dist/{custservice-types-C83itZmy.cjs → custservice-types-Dy0kc9TW.cjs} +1 -1
  92. package/dist/{custservice-types-DPQ-4TI6.js → custservice-types-mnIunabv.js} +1 -1
  93. package/dist/default-BnB4p0Se.cjs +234 -0
  94. package/dist/default-D6f5Dyt7.js +199 -0
  95. package/dist/default-ZKkE5zT4.cjs +4 -0
  96. package/dist/default-legGZJwI.js +4 -0
  97. package/dist/{divIds-DEL_-qU0.cjs → divIds-2dJlU3z8.cjs} +1 -15
  98. package/dist/{divIds-CWkntTsx.js → divIds-BUrN2vY-.js} +2 -4
  99. package/dist/dreamlandBaby-BiRYYFav.js +346 -0
  100. package/dist/dreamlandBaby-zuvmfzfD.cjs +346 -0
  101. package/dist/{embedded-C5uJqmuD.js → embedded-BJLWIriJ.js} +1 -1
  102. package/dist/{embedded--2L0F4b5.cjs → embedded-Dl79TJLC.cjs} +1 -1
  103. package/dist/{entrypoints-CNUvSgnk.js → entrypoints-Bs3pn6EV.js} +1 -1
  104. package/dist/{entrypoints-DM9Sm18O.cjs → entrypoints-Dqi5pzWH.cjs} +1 -1
  105. package/dist/enviveConfig-BccuzS2a.cjs +240 -0
  106. package/dist/enviveConfig-CzhTz8Aa.js +152 -0
  107. package/dist/events/index.cjs +1 -1
  108. package/dist/events/index.d.cts +1 -1
  109. package/dist/events/index.js +1 -1
  110. package/dist/{events-ClCDFK7t.js → events-BrLpaNxh.js} +1 -1
  111. package/dist/{events-Da7gpmGv.cjs → events-DwT6cEwI.cjs} +1 -1
  112. package/dist/fiveCbd-DwTTwC2j.cjs +613 -0
  113. package/dist/fiveCbd-Dz2NouOF.js +613 -0
  114. package/dist/forLoveAndLemons-DqSdyD6S.js +665 -0
  115. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +667 -0
  116. package/dist/{globalSearch-b0wC7ZEO.js → globalSearch-B6THR7Jx.js} +1 -1
  117. package/dist/{globalSearch-BTeZxvk1.cjs → globalSearch-BFvEg53C.cjs} +1 -1
  118. package/dist/graphql-BNW60InJ.cjs +128 -0
  119. package/dist/graphql-CjB8wHzm.js +74 -0
  120. package/dist/graphqlConfig-CYt6tWII.js +30 -0
  121. package/dist/graphqlConfig-DicykC-o.cjs +61 -0
  122. package/dist/greenpan-B_EbPkSP.js +397 -0
  123. package/dist/greenpan-kPE4fJgd.cjs +397 -0
  124. package/dist/grooveLife-Ckuir319.js +342 -0
  125. package/dist/grooveLife-DKSEQp1F.cjs +342 -0
  126. package/dist/homegrownCannabis-BVPa2pqe.js +410 -0
  127. package/dist/homegrownCannabis-BwIAkxuA.cjs +410 -0
  128. package/dist/hooks/index.cjs +40 -16
  129. package/dist/hooks/index.d.cts +122 -95
  130. package/dist/hooks/index.d.ts +122 -95
  131. package/dist/hooks/index.js +22 -11
  132. package/dist/{index-D46Rd0io.d.cts → index-B0NW9KTj.d.cts} +1 -1
  133. package/dist/{index-jBATkcc_.d.cts → index-BDPWBU3h.d.cts} +1 -1
  134. package/dist/index-BMPtlgac.d.ts +191 -0
  135. package/dist/{index-BTK5uzs6.d.cts → index-Bmub8e38.d.cts} +1 -1
  136. package/dist/{index-C62lPpy4.d.cts → index-Byb45OPg.d.cts} +1 -1
  137. package/dist/{index-DPx8s5YH.d.ts → index-C6KdON7d.d.ts} +1 -1
  138. package/dist/index-C7pGDl1A.d.ts +1609 -0
  139. package/dist/{index-CYtsPztZ.d.cts → index-C9lgsCWp.d.cts} +32 -32
  140. package/dist/{index-BzgkfbNO.d.cts → index-CESxqFso.d.cts} +1 -1
  141. package/dist/{index-C_C0tLeD.d.ts → index-Cc-wBCn6.d.ts} +32 -32
  142. package/dist/{index-Cx9e-fRi.d.ts → index-CcIG01PJ.d.ts} +2 -2
  143. package/dist/{index-ClJ0nMsR.d.cts → index-CiWEYzXl.d.cts} +2 -2
  144. package/dist/{index-CKKkTsms.d.ts → index-Cqg6ltII.d.ts} +1 -1
  145. package/dist/{index-CExtydIH.d.ts → index-DOii3C6b.d.ts} +1 -1
  146. package/dist/index-DTu2X-YS.d.cts +1609 -0
  147. package/dist/index-OEifcBsm.d.cts +191 -0
  148. package/dist/{index-Dxpscrvz.d.ts → index-PGF8BvxQ.d.ts} +1 -1
  149. package/dist/{index-D2VaMPA3.d.ts → index-ylUiJvnr.d.ts} +1 -1
  150. package/dist/interceptors/index.cjs +2 -12
  151. package/dist/interceptors/index.d.cts +8 -13
  152. package/dist/interceptors/index.d.ts +8 -13
  153. package/dist/interceptors/index.js +2 -11
  154. package/dist/jackArcher-B39OEIj6.cjs +727 -0
  155. package/dist/{jackArcher-CXf_IAmC.js → jackArcher-BwkWGybC.js} +24 -25
  156. package/dist/jordanCraig-CxRH_jLi.js +1786 -0
  157. package/dist/jordanCraig-RwmWw-jM.cjs +1786 -0
  158. package/dist/kindredBravely-D78VwL20.cjs +490 -0
  159. package/dist/kindredBravely-DQDpAzdl.js +490 -0
  160. package/dist/kutFromTheKloth-TcXQkIti.js +369 -0
  161. package/dist/kutFromTheKloth-dXRrNti0.cjs +369 -0
  162. package/dist/larryAndSerges-Bh5XEXsZ.js +262 -0
  163. package/dist/larryAndSerges-COdBzOzu.cjs +262 -0
  164. package/dist/leapsAndRebounds-BbXnqkl5.cjs +360 -0
  165. package/dist/leapsAndRebounds-mjCaH1k-.js +360 -0
  166. package/dist/longevityrx-DdV3v26F.cjs +320 -0
  167. package/dist/longevityrx-DfPDfvAt.js +320 -0
  168. package/dist/lookOptic-DgXFGBPP.cjs +282 -0
  169. package/dist/{lookOptic-BGhU4910.js → lookOptic-FgVW1afF.js} +19 -20
  170. package/dist/mantraBrand-C5gVm3rk.cjs +750 -0
  171. package/dist/{mantraBrand-DrqG9uqO.js → mantraBrand-uV8HCDR8.js} +22 -23
  172. package/dist/medterra-BtDpr1Hw.cjs +583 -0
  173. package/dist/medterra-DgzE7-mj.js +583 -0
  174. package/dist/modells-CJjsxOIR.js +484 -0
  175. package/dist/modells-Ck5KbRFj.cjs +484 -0
  176. package/dist/models-BkXg5eIP.cjs +1534 -0
  177. package/dist/models-UZ6HszfZ.js +1281 -0
  178. package/dist/{nodeSelector-BiCDowlK.d.ts → nodeSelector-BxrS2S_k.d.ts} +1 -1
  179. package/dist/{nodeSelector-B3bPtEjX.d.cts → nodeSelector-Dm4S-10n.d.cts} +1 -1
  180. package/dist/org-C2RrBVQR.cjs +81 -0
  181. package/dist/org-xMytX--e.js +38 -0
  182. package/dist/orgAnalyticsConfig-BJ2A1RZ-.cjs +39 -0
  183. package/dist/orgAnalyticsConfig-ClrFy2qH.js +14 -0
  184. package/dist/pressedFloral-Bteoboms.js +661 -0
  185. package/dist/pressedFloral-CexgV-xy.cjs +661 -0
  186. package/dist/search-BMOAmrmY.js +459 -0
  187. package/dist/search-Df0Ifneg.cjs +672 -0
  188. package/dist/{search-filter-types-BNTLVXqQ.d.cts → search-filter-types-DosbseF3.d.cts} +1 -1
  189. package/dist/{search-filter-types-DkmH1TxJ.d.ts → search-filter-types-fZf91Pdw.d.ts} +1 -1
  190. package/dist/skinPerfection-BGzq9lq-.cjs +334 -0
  191. package/dist/skinPerfection-BlvcEcUE.js +334 -0
  192. package/dist/snapSupplements-CbbGzAgO.cjs +285 -0
  193. package/dist/snapSupplements-kcsPAOm9.js +285 -0
  194. package/dist/{socialProofClasses-ky69yppk.cjs → socialProofClasses-Db8gzsfi.cjs} +1 -1
  195. package/dist/{socialProofClasses-DdzG1tZy.js → socialProofClasses-kwDvwLOZ.js} +1 -1
  196. package/dist/spanx-B4WFA_rI.js +661 -0
  197. package/dist/spanx-BWoE4F8b.cjs +663 -0
  198. package/dist/spanxStaging-BOrOjhXn.js +845 -0
  199. package/dist/spanxStaging-BfdfIug4.cjs +848 -0
  200. package/dist/{suggestionBarV2-types-CwOXzIKq.js → suggestionBarV2-types-IMMOmCir.js} +1 -1
  201. package/dist/{suggestionBarV2-types-Dc4-zJlV.cjs → suggestionBarV2-types-nnGNgFvR.cjs} +1 -1
  202. package/dist/supergoop-22dd5_BS.js +323 -0
  203. package/dist/supergoop-B-a4cku2.cjs +323 -0
  204. package/dist/{test-types-CXVJxTeu.d.ts → test-types-C9b_OdfO.d.ts} +1 -1
  205. package/dist/{test-types-CuOq25VT.d.cts → test-types-CgVJtwUr.d.cts} +1 -1
  206. package/dist/types/index.cjs +2 -2
  207. package/dist/types/index.d.cts +2 -2
  208. package/dist/types/index.d.ts +2 -2
  209. package/dist/types/index.js +2 -2
  210. package/dist/types--pr1GQQx.js +154 -0
  211. package/dist/types-BVSyY3Hk.cjs +196 -0
  212. package/dist/{uniqueVintage-Cui74mlJ.js → uniqueVintage-CJXiNNe7.js} +19 -20
  213. package/dist/uniqueVintage-D0jzJWlo.cjs +1213 -0
  214. package/dist/useMessageInterceptor-B87e3yu3.cjs +33 -0
  215. package/dist/useMessageInterceptor-Bb7YRaWk.js +25 -0
  216. package/dist/userIdentityContext-BPqvVIg0.d.cts +20 -0
  217. package/dist/userIdentityContext-wbCRmlzp.d.ts +20 -0
  218. package/dist/utils-C9ZSCx12.js +888 -0
  219. package/dist/utils-D5HO61hG.cjs +1016 -0
  220. package/dist/variantInfo-DbVxA1yE.js +1 -0
  221. package/dist/variantInfo-orXoPBCU.cjs +0 -0
  222. package/dist/venaCbd-Bhhu_qUf.cjs +365 -0
  223. package/dist/venaCbd-CanovPS_.js +365 -0
  224. package/dist/westonJonBoucher-BC0x1ktI.cjs +422 -0
  225. package/dist/{westonJonBoucher-C95EuCl-.js → westonJonBoucher-BUu1_wP1.js} +19 -20
  226. package/dist/wineEnthusiast-BlCryfil.cjs +940 -0
  227. package/dist/{wineEnthusiast-DeTFY8Gm.js → wineEnthusiast-Ck1x5iJq.js} +19 -20
  228. package/dist/wolfMattress-D9Mjq-HP.js +372 -0
  229. package/dist/wolfMattress-JssghhC-.cjs +372 -0
  230. package/dist/wolfTactical-C6exYhL7.cjs +349 -0
  231. package/dist/wolfTactical-CnV3KQdI.js +349 -0
  232. package/package.json +101 -19
  233. package/src/{adapters/spiffy/commerce/api.ts → application/commerce-api.ts} +31 -23
  234. package/src/application/models/colorsConfig.ts +18 -18
  235. package/src/application/models/frontendConfig.ts +3 -3
  236. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +1 -1
  237. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +1 -1
  238. package/src/application/models/index.ts +0 -2
  239. package/src/application/models/localStorageEventListener.ts +2 -2
  240. package/src/application/models/supportedOrgs.ts +1 -1
  241. package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
  242. package/src/application/models/validators/validateGraphQLColorsConfig.ts +0 -21
  243. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +2 -2
  244. package/src/application/utils/analyticsUtils.ts +53 -22
  245. package/src/application/utils/cdnUtils.ts +11 -0
  246. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +15 -0
  247. package/src/atoms/app/index.ts +7 -17
  248. package/src/atoms/app/variant.ts +13 -4
  249. package/src/atoms/chat/chatState.ts +28 -18
  250. package/src/atoms/chat/messageQueue.ts +36 -5
  251. package/src/atoms/chat/replies.ts +45 -37
  252. package/src/atoms/envive/enviveConfig.ts +10 -6
  253. package/src/atoms/org/graphqlConfig.ts +21 -4
  254. package/src/atoms/org/index.ts +7 -7
  255. package/src/atoms/org/newOrgConfigAtom.ts +8 -0
  256. package/src/atoms/org/orgPageConfig.ts +6 -5
  257. package/src/atoms/search/chatSearch.ts +11 -5
  258. package/src/atoms/search/searchAPI.ts +68 -48
  259. package/src/atoms/search/searchServiceAdapter.ts +25 -0
  260. package/src/contexts/amplitudeContext.tsx +466 -0
  261. package/src/contexts/cdnContext.tsx +48 -0
  262. package/src/contexts/chatContext.tsx +15 -12
  263. package/src/contexts/enviveConfigContext.tsx +22 -17
  264. package/src/contexts/enviveCssContext.tsx +34 -5
  265. package/src/contexts/featureFlagContext.tsx +193 -0
  266. package/src/contexts/featureFlagServiceContext.tsx +87 -0
  267. package/src/contexts/graphqlContext.tsx +165 -0
  268. package/src/contexts/index.ts +13 -3
  269. package/src/contexts/localStorageContext.tsx +159 -0
  270. package/src/contexts/newOrgConfigContext.tsx +104 -0
  271. package/src/contexts/orgConfigContext.tsx +92 -92
  272. package/src/contexts/searchContext.tsx +187 -0
  273. package/src/contexts/sessionStorageContext.tsx +80 -0
  274. package/src/contexts/shopifyUrlContext.tsx +97 -0
  275. package/src/contexts/types.ts +12 -8
  276. package/src/contexts/userIdentityContext.tsx +197 -0
  277. package/src/events/registerAnalyticsListeners.ts +32 -38
  278. package/src/hooks/index.ts +10 -6
  279. package/src/hooks/useAmplitudeOperations.ts +35 -0
  280. package/src/hooks/useAppDetails.ts +49 -0
  281. package/src/hooks/useCdnOperations.ts +16 -0
  282. package/src/hooks/useChatToggle.ts +5 -4
  283. package/src/hooks/useChatToggleAnalytics.ts +15 -0
  284. package/src/hooks/useGraphQLConfig.ts +63 -0
  285. package/src/hooks/useIdentifyUser.ts +33 -0
  286. package/src/hooks/useImageResolver.ts +18 -10
  287. package/src/hooks/useLocalStorageOperations.ts +92 -0
  288. package/src/hooks/useNewOrgConfig.ts +7 -0
  289. package/src/hooks/useSearch.tsx +21 -18
  290. package/src/hooks/useSearchOperations.ts +97 -0
  291. package/src/hooks/useSessionStorageOperations.ts +28 -0
  292. package/src/hooks/useShopifyUrlOperations.ts +45 -0
  293. package/src/hooks/useTrackComponentVisibleEvent.ts +12 -8
  294. package/src/hooks/useUpdateAnalyticsProps.ts +28 -17
  295. package/src/interceptors/index.ts +0 -1
  296. package/src/interceptors/useMessageInterceptor.ts +5 -8
  297. package/src/merchants/bandolier/bandolier.ts +10 -28
  298. package/src/merchants/carpe/carpe.ts +5 -8
  299. package/src/merchants/coterie/coterie.ts +3 -6
  300. package/src/merchants/default.ts +73 -70
  301. package/src/merchants/domInsertion.ts +30 -0
  302. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +12 -6
  303. package/src/merchants/fiveCbd/fiveCbd.ts +7 -13
  304. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +44 -14
  305. package/src/merchants/greenpan/greenpan.ts +6 -12
  306. package/src/merchants/gridInsertion.ts +19 -0
  307. package/src/merchants/grooveLife/grooveLife.ts +13 -7
  308. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +12 -6
  309. package/src/merchants/jackArcher/jackArcher.ts +26 -11
  310. package/src/merchants/jordanCraig/jordanCraig.ts +5 -5
  311. package/src/merchants/kindredBravely/kindredBravely.ts +16 -7
  312. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +9 -6
  313. package/src/merchants/larryAndSerges/larryAndSerges.ts +6 -2
  314. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +7 -7
  315. package/src/merchants/longevityrx/longevityrx.ts +14 -8
  316. package/src/merchants/lookOptic/lookOptic.ts +6 -6
  317. package/src/merchants/mantraBrand/mantraBrand.ts +14 -8
  318. package/src/merchants/medterra/medterra.ts +14 -11
  319. package/src/merchants/modells/modells.ts +6 -9
  320. package/src/merchants/pressedFloral/pressedFloral.ts +7 -13
  321. package/src/merchants/skinPerfection/skinPerfection.ts +13 -7
  322. package/src/merchants/snapSupplements/snapSupplements.ts +13 -10
  323. package/src/merchants/spanx/spanx.ts +6 -6
  324. package/src/merchants/spanx/spanxStaging.ts +6 -12
  325. package/src/merchants/supergoop/supergoop.ts +11 -12
  326. package/src/merchants/uniqueVintage/uniqueVintage.ts +6 -6
  327. package/src/merchants/venaCbd/venaCbd.ts +6 -9
  328. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +6 -6
  329. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +6 -6
  330. package/src/merchants/wolfMattress/wolfMattress.ts +3 -3
  331. package/src/merchants/wolfTactical/wolfTactical.ts +5 -11
  332. package/src/types/config-versions.ts +6 -0
  333. package/src/types.ts +0 -53
  334. package/dist/adapters/amplitude/index.cjs +0 -14
  335. package/dist/adapters/amplitude/index.d.cts +0 -6
  336. package/dist/adapters/amplitude/index.d.ts +0 -6
  337. package/dist/adapters/amplitude/index.js +0 -12
  338. package/dist/api-B2euFL-5.cjs +0 -269
  339. package/dist/api-XRr_lAG6.js +0 -190
  340. package/dist/application/config/index.cjs +0 -43
  341. package/dist/application/config/index.d.cts +0 -15
  342. package/dist/application/config/index.d.ts +0 -15
  343. package/dist/application/config/index.js +0 -41
  344. package/dist/application/service/customerService/index.cjs +0 -4
  345. package/dist/application/service/customerService/index.d.cts +0 -3
  346. package/dist/application/service/customerService/index.d.ts +0 -3
  347. package/dist/application/service/customerService/index.js +0 -4
  348. package/dist/application/service/index.cjs +0 -41
  349. package/dist/application/service/index.d.cts +0 -399
  350. package/dist/application/service/index.d.ts +0 -399
  351. package/dist/application/service/index.js +0 -12
  352. package/dist/bandolier-B76-OE75.cjs +0 -1230
  353. package/dist/bandolier-DRn_x1g1.js +0 -1230
  354. package/dist/carpe-kHi4RLB5.cjs +0 -608
  355. package/dist/carpe-qrSU99gq.js +0 -606
  356. package/dist/contexts-CQDwe3rK.cjs +0 -14333
  357. package/dist/contexts-e2sM-B9g.js +0 -12919
  358. package/dist/coterie-mMirPcHP.js +0 -240
  359. package/dist/customerService-BG1uNZZ1.cjs +0 -36
  360. package/dist/customerService-BHQRnLhC.js +0 -23
  361. package/dist/default-8Jfv8ehQ.cjs +0 -199
  362. package/dist/default-C8PQf-38.js +0 -176
  363. package/dist/default-LukSiCz1.js +0 -4
  364. package/dist/default-rJSJ887P.cjs +0 -4
  365. package/dist/dreamlandBaby-DHltv12Z.cjs +0 -347
  366. package/dist/dreamlandBaby-cG0HM9bt.js +0 -347
  367. package/dist/featureFlagService-5wdmW02z.d.ts +0 -18
  368. package/dist/featureFlagService-DaelrXEk.d.cts +0 -18
  369. package/dist/fiveCbd-Cvnwh03g.cjs +0 -614
  370. package/dist/fiveCbd-DhYMlsf9.js +0 -614
  371. package/dist/forLoveAndLemons-C8DuUexW.js +0 -666
  372. package/dist/forLoveAndLemons-DR6a1zjJ.cjs +0 -668
  373. package/dist/greenpan-B4Pu65kV.js +0 -398
  374. package/dist/greenpan-BL5p6j7f.cjs +0 -398
  375. package/dist/grooveLife-DjKWHoN3.cjs +0 -343
  376. package/dist/grooveLife-JK0TyaPz.js +0 -343
  377. package/dist/homegrownCannabis-DxqSDkmS.js +0 -411
  378. package/dist/homegrownCannabis-ZnfCqW-m.cjs +0 -411
  379. package/dist/index-BfuO9b0Q.d.ts +0 -749
  380. package/dist/index-CNsGWfS6.d.cts +0 -749
  381. package/dist/index-DFL1dIT_.d.ts +0 -7
  382. package/dist/index-MFbPQ8Ji.d.ts +0 -95
  383. package/dist/index-VSFakgAI.d.cts +0 -95
  384. package/dist/index-zZjcds15.d.cts +0 -7
  385. package/dist/jackArcher-mGkojXek.cjs +0 -728
  386. package/dist/jordanCraig-BvCvPRoR.js +0 -1787
  387. package/dist/jordanCraig-Dv8pVCiS.cjs +0 -1787
  388. package/dist/kindredBravely-UQP7wiNu.cjs +0 -491
  389. package/dist/kindredBravely-X8F_LNph.js +0 -491
  390. package/dist/kutFromTheKloth-BhYKk3CN.cjs +0 -370
  391. package/dist/kutFromTheKloth-D1xsTSJr.js +0 -370
  392. package/dist/larryAndSerges-1411NuZa.cjs +0 -262
  393. package/dist/larryAndSerges-DVIRLItu.js +0 -262
  394. package/dist/leapsAndRebounds-BJ8mwr33.js +0 -361
  395. package/dist/leapsAndRebounds-UcP9EJVO.cjs +0 -361
  396. package/dist/logger-Dln20ans.cjs +0 -26
  397. package/dist/logger-pdEEY8T2.js +0 -20
  398. package/dist/longevityrx-BFSv9GF5.cjs +0 -321
  399. package/dist/longevityrx-Cp6wleWr.js +0 -321
  400. package/dist/lookOptic-KieSqskd.cjs +0 -283
  401. package/dist/mantraBrand-CHQw-0nw.cjs +0 -751
  402. package/dist/medterra-CLG6Co1C.cjs +0 -584
  403. package/dist/medterra-D8ZX9NZC.js +0 -584
  404. package/dist/modells-BzyPwN2m.cjs +0 -485
  405. package/dist/modells-CAfqOCW4.js +0 -485
  406. package/dist/orgConfigResults--dAwtw3W.d.ts +0 -881
  407. package/dist/orgConfigResults-BL0XBA6x.d.cts +0 -881
  408. package/dist/pressedFloral-DULBuQwR.cjs +0 -662
  409. package/dist/pressedFloral-Dp-7Fk3S.js +0 -662
  410. package/dist/skinPerfection-BxuYCeJX.js +0 -335
  411. package/dist/skinPerfection-Cd3XZ6By.cjs +0 -335
  412. package/dist/snapSupplements-Bf6htPM0.js +0 -286
  413. package/dist/snapSupplements-ZFnXyMuZ.cjs +0 -286
  414. package/dist/spanx-CwDPQaGj.js +0 -662
  415. package/dist/spanx-Cyd4qDlK.cjs +0 -664
  416. package/dist/spanxStaging-D43nyAGy.js +0 -846
  417. package/dist/spanxStaging-ijbYnHzr.cjs +0 -849
  418. package/dist/supergoop-BnbFG7hm.cjs +0 -338
  419. package/dist/supergoop-CY043wIg.js +0 -336
  420. package/dist/types-BF_CJeck.js +0 -177
  421. package/dist/types-CD4LFta-.d.cts +0 -33
  422. package/dist/types-CNH4sfF-.cjs +0 -231
  423. package/dist/types-DBdI0j89.d.ts +0 -33
  424. package/dist/uniqueVintage-R2Jcu1y1.cjs +0 -1214
  425. package/dist/variant-CKVRF2-W.d.ts +0 -13
  426. package/dist/variant-raYuOP4L.d.cts +0 -13
  427. package/dist/venaCbd-o5_vOp4e.js +0 -366
  428. package/dist/venaCbd-r-IxEVc1.cjs +0 -366
  429. package/dist/westonJonBoucher-DjGEW3ZB.cjs +0 -423
  430. package/dist/wineEnthusiast-DvfcV5B3.cjs +0 -941
  431. package/dist/wolfMattress-6xPfOJt3.js +0 -373
  432. package/dist/wolfMattress-BjGnGKjP.cjs +0 -373
  433. package/dist/wolfTactical-Bi3WZu0m.cjs +0 -350
  434. package/dist/wolfTactical-C_F9-oPX.js +0 -350
  435. package/src/adapters/amplitude/amplitudeAdapter.ts +0 -477
  436. package/src/adapters/amplitude/index.ts +0 -2
  437. package/src/adapters/amplitude/stubAmplitudeAdapter.ts +0 -34
  438. package/src/adapters/spiffy/commerce/graphql.ts +0 -219
  439. package/src/application/config/generalStaticConfig.ts +0 -40
  440. package/src/application/config/index.ts +0 -1
  441. package/src/application/models/domMutationContinuation.ts +0 -7
  442. package/src/application/models/domObservationStrategy.ts +0 -9
  443. package/src/application/service/cachingService.ts +0 -84
  444. package/src/application/service/cdnService.ts +0 -20
  445. package/src/application/service/customerService/index.ts +0 -8
  446. package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +0 -15
  447. package/src/application/service/domMutationObserver.ts +0 -320
  448. package/src/application/service/domMutations/GridInsertionService.ts +0 -123
  449. package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +0 -99
  450. package/src/application/service/domMutations/domInsertionService.ts +0 -90
  451. package/src/application/service/domMutations/domMutationListener.ts +0 -15
  452. package/src/application/service/domMutations/domMutationListenerState.ts +0 -52
  453. package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +0 -41
  454. package/src/application/service/domMutations/gladly/gladlyListener.ts +0 -61
  455. package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +0 -41
  456. package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +0 -119
  457. package/src/application/service/featureFlagService.ts +0 -130
  458. package/src/application/service/index.ts +0 -31
  459. package/src/application/service/kustomerIntegrationService.ts +0 -111
  460. package/src/application/service/localStorageService.ts +0 -77
  461. package/src/application/service/pageVariantService.ts +0 -866
  462. package/src/application/service/searchService.ts +0 -147
  463. package/src/application/service/sessionStorageService.ts +0 -27
  464. package/src/application/service/shopifyUrlService.ts +0 -63
  465. package/src/application/service/userIdentityService.ts +0 -114
  466. package/src/application/service/windowChatToggleService.ts +0 -80
  467. package/src/application/service/windowDataLayerService.ts +0 -181
  468. package/src/application/service/windowFrontendConfigService.ts +0 -129
  469. package/src/atoms/org/merchantCss.ts +0 -158
  470. package/src/atoms/org/org.ts +0 -291
  471. package/src/atoms/org/orgUIConfig.ts +0 -142
  472. package/src/enabled-features.ts +0 -83
  473. package/src/hooks/useDynamicVariants.ts +0 -210
  474. package/src/hooks/useFileUpload.ts +0 -63
  475. package/src/hooks/useHideElements.ts +0 -82
  476. package/src/hooks/useHorizontalScrollAnimation.ts +0 -115
  477. package/src/hooks/useReducedMotionWithOverride.ts +0 -15
  478. package/src/hooks/useSnapControl.ts +0 -155
  479. package/src/interceptors/useFormEscalation.ts +0 -57
  480. /package/dist/{variantInfo-CzhR5W6h.js → atomStore-CZnUUsrr.js} +0 -0
  481. /package/dist/{variantInfo-CNRTY0gH.cjs → atomStore-KSoFS3Jj.cjs} +0 -0
  482. /package/dist/{utilityTypes-C4h2wgAK.cjs → locators-0YYZu9n4.cjs} +0 -0
  483. /package/dist/{utilityTypes-BVikejDo.js → locators-fBXS_pxP.js} +0 -0
  484. /package/dist/{locators-Dc5ZT0aF.js → utilityTypes-8sETsYPk.js} +0 -0
  485. /package/dist/{locators-lQMJj830.cjs → utilityTypes-COShxVir.cjs} +0 -0
  486. /package/src/{application/service/customerService/types.ts → types/customerService.ts} +0 -0
  487. /package/src/{adapters/spiffy/commerce → types}/exceptions/sessionExceptions.ts +0 -0
  488. /package/src/{adapters/spiffy/commerce → types}/exceptions/unsupportedProductExceptions.ts +0 -0
@@ -8,9 +8,9 @@ import { FeatureGates } from "src/application/models/featureGates";
8
8
  import {
9
9
  CustomerServiceIntegrationMode,
10
10
  CustomerServiceType,
11
- } from "src/application/service/customerService/types";
12
- import { GridInsertionType } from "src/application/service/domMutations/GridInsertionService";
13
- import { DOMInsertionType } from "src/application/service/domMutations/domInsertionService";
11
+ } from "src/types/customerService";
12
+ import { GridInsertionType } from "src/merchants/gridInsertion";
13
+ import { DOMInsertionType } from "src/merchants/domInsertion";
14
14
 
15
15
  import type {
16
16
  PageVisitCategory,
@@ -19,6 +19,7 @@ import type {
19
19
  import { ChatState } from "src/types/custservice-types";
20
20
  import { SuggestionBarLocationForMetrics } from "src/types/suggestionBarV2-types";
21
21
  import { TestProps } from "src/types/test-types";
22
+ import { OrgConfigFeatureGate } from "src/application/models/api/orgConfigResults";
22
23
 
23
24
  type ShowFloatingButtonOptions =
24
25
  | "always"
@@ -174,6 +175,7 @@ type SimpleCustomerServiceIntegration = {
174
175
  integrationMode: CustomerServiceIntegrationMode;
175
176
  provider: CustomerServiceType;
176
177
  useUnifiedButton?: boolean;
178
+ maxfileUploadSize?: number;
177
179
  };
178
180
 
179
181
  type FullCustomerServiceIntegration = {
@@ -196,6 +198,7 @@ type FullCustomerServiceIntegration = {
196
198
  outsideBusinessHoursFormMessage?: string;
197
199
  suggestedAIQuestions?: string[];
198
200
  businessHoursPolling?: number;
201
+ maxfileUploadSize?: number;
199
202
 
200
203
  /**
201
204
  * @deprecated This is handled by the BE.
@@ -959,10 +962,6 @@ export type OrgPageConfig = {
959
962
  mountingConfigs: Record<string, WidgetMountingConfig>;
960
963
  };
961
964
 
962
- interface OrgConfigContextType {
963
- orgUIConfig: OrgUIConfig;
964
- }
965
-
966
965
  export type OrgConfig = OrgUIConfig;
967
966
 
968
967
  export {
@@ -984,6 +983,12 @@ export interface EnviveConfig {
984
983
  orgLevelApiKey?: string;
985
984
  orgShortName?: string;
986
985
  identifyingPrefix?: string;
986
+ featureOverrides?: Record<string, boolean>;
987
+ variantUrlOverride?: string;
988
+ variantInfoOverride?: any;
989
+ show?: boolean;
990
+ publicKey?: string;
991
+ featureGates?: OrgConfigFeatureGate[];
987
992
  }
988
993
 
989
994
  export type {
@@ -1011,7 +1016,6 @@ export type {
1011
1016
  ImagePromptWidgetConfig,
1012
1017
  InsertionPoint,
1013
1018
  MultiImageConfig,
1014
- OrgConfigContextType,
1015
1019
  OrgUIConfig,
1016
1020
  PageCardConfig,
1017
1021
  PageCardVariant,
@@ -0,0 +1,197 @@
1
+ import React, {
2
+ createContext,
3
+ useCallback,
4
+ useContext,
5
+ useMemo,
6
+ useState,
7
+ useEffect,
8
+ } from "react";
9
+ import UAParser from "ua-parser-js";
10
+ import Logger from "src/application/logging/logger";
11
+ import CommerceApiClient from "src/application/commerce-api";
12
+ import { v4 as uuid } from "uuid";
13
+ import { ClientDetails } from "src/application/models/clientDetails";
14
+ import { useLocalStorage } from "src/contexts/localStorageContext";
15
+
16
+ // Helper function from the original service
17
+ const getUserAgentDetails = (): ClientDetails => {
18
+ const uaParser = new UAParser();
19
+ const result = uaParser.getResult();
20
+
21
+ return {
22
+ os: result?.os?.name,
23
+ osVersion: result?.os?.version,
24
+ deviceBrand: result?.device?.vendor,
25
+ deviceManufacturer: result?.device?.vendor,
26
+ deviceModel: result?.device?.model,
27
+ browser: result?.browser?.name,
28
+ browserVersion: result?.browser?.version,
29
+ userAgent: result?.ua,
30
+ };
31
+ };
32
+
33
+ export interface UserIdentityContextType {
34
+ identifyUser: () => Promise<void>;
35
+ getUserIdOrDefault: () => string;
36
+ getUserIdOverrideFromLocalStorage: () => string | undefined;
37
+ getUserIdDefaultFromLocalStorage: () => string | undefined;
38
+ setUserIdDefaultInLocalStorage: (userId: string) => string;
39
+ setUserIdOverrideInLocalStorage: (userId: string) => string;
40
+ clearUserIdOverrideInLocalStorage: () => void;
41
+ isReady: boolean;
42
+ }
43
+
44
+ const UserIdentityContext = createContext<UserIdentityContextType | undefined>(
45
+ undefined
46
+ );
47
+
48
+ export const UserIdentityProvider: React.FC<{ children: React.ReactNode }> = ({
49
+ children,
50
+ }) => {
51
+ const {
52
+ getItem,
53
+ setItem,
54
+ isAvailable: localStorageIsReady,
55
+ } = useLocalStorage();
56
+
57
+ const [isReady, setIsReady] = useState(false);
58
+
59
+ useEffect(() => {
60
+ // Assuming CommerceApiClient and other dependencies are ready if localStorage is.
61
+ // In a more complex scenario, you might have more checks here.
62
+ setIsReady(localStorageIsReady);
63
+ }, [localStorageIsReady]);
64
+
65
+ const USER_ID_OVERRIDE_KEY = "v1-spiffy-user-id-override";
66
+ const USER_ID_DEFAULT_KEY = "v1-spiffy-user-id-default";
67
+
68
+ const getUserIdOverrideFromLocalStorage = useCallback(():
69
+ | string
70
+ | undefined => {
71
+ return getItem(USER_ID_OVERRIDE_KEY) ?? undefined;
72
+ }, [getItem]);
73
+
74
+ const getUserIdDefaultFromLocalStorage = useCallback(():
75
+ | string
76
+ | undefined => {
77
+ return getItem(USER_ID_DEFAULT_KEY) ?? undefined;
78
+ }, [getItem]);
79
+
80
+ const setUserIdDefaultInLocalStorage = useCallback(
81
+ (userId: string): string => {
82
+ Logger.logInfo(
83
+ `setUserIdDefaultInLocalStorage - Setting user_id=${userId}`
84
+ );
85
+ setItem(USER_ID_DEFAULT_KEY, userId);
86
+ // window.dispatchEvent is handled by useLocalStorage now
87
+ return userId;
88
+ },
89
+ [setItem, USER_ID_DEFAULT_KEY]
90
+ );
91
+
92
+ const setUserIdOverrideInLocalStorage = useCallback(
93
+ (userId: string): string => {
94
+ Logger.logInfo(
95
+ `setUserIdOverrideInLocalStorage - Setting user_id=${userId}`
96
+ );
97
+ setItem(USER_ID_OVERRIDE_KEY, userId);
98
+ // window.dispatchEvent is handled by useLocalStorage now
99
+ return userId;
100
+ },
101
+ [setItem, USER_ID_OVERRIDE_KEY]
102
+ );
103
+
104
+ const clearUserIdOverrideInLocalStorage = useCallback(() => {
105
+ Logger.logInfo(`clearUserIdOverrideInLocalStorage - Clearing user_id`);
106
+ // LocalStorageService.getLocalStorage()?.removeItem(USER_ID_OVERRIDE_KEY);
107
+ // window.dispatchEvent is handled by useLocalStorage now
108
+ setItem(USER_ID_OVERRIDE_KEY, ""); // Set to empty string to clear
109
+ }, [setItem, USER_ID_OVERRIDE_KEY]);
110
+
111
+ const getUserIdOrDefault = useCallback((): string => {
112
+ const userIdOverride = getUserIdOverrideFromLocalStorage();
113
+ if (userIdOverride) {
114
+ return userIdOverride;
115
+ }
116
+
117
+ const defaultUserId = getUserIdDefaultFromLocalStorage();
118
+ if (defaultUserId) {
119
+ return defaultUserId;
120
+ }
121
+
122
+ return setUserIdDefaultInLocalStorage(`spiffy-user-id-${uuid()}`);
123
+ }, [
124
+ getUserIdOverrideFromLocalStorage,
125
+ getUserIdDefaultFromLocalStorage,
126
+ setUserIdDefaultInLocalStorage,
127
+ ]);
128
+
129
+ const identifyUser = useCallback(async (): Promise<void> => {
130
+ if (!isReady) {
131
+ Logger.logWarn(
132
+ "[UserIdentityContext] Context not ready, skipping identifyUser",
133
+ undefined
134
+ );
135
+ return;
136
+ }
137
+
138
+ try {
139
+ // Temporarily commented out until WindowDataLayerService is resolved
140
+ // const cdpUserId = WindowDataLayerService.getGoogleAnalyticsClientId();
141
+ const cdpUserId = "UNKNOWN_CDP_USER_ID"; // Placeholder
142
+ const userId = getUserIdOrDefault();
143
+ const userAgentDetails = getUserAgentDetails();
144
+
145
+ if (!cdpUserId) {
146
+ Logger.logWarn(
147
+ "[spiffy-ai] No GA Client ID found, skipping identifyUser",
148
+ undefined
149
+ );
150
+ return;
151
+ }
152
+
153
+ await CommerceApiClient.identifyUser(userId, cdpUserId, userAgentDetails);
154
+ } catch (error) {
155
+ Logger.logError("[spiffy-ai] Error identifying user", error);
156
+ }
157
+ }, [isReady, getUserIdOrDefault]);
158
+
159
+ const value = useMemo(
160
+ () => ({
161
+ identifyUser,
162
+ getUserIdOrDefault,
163
+ getUserIdOverrideFromLocalStorage,
164
+ getUserIdDefaultFromLocalStorage,
165
+ setUserIdDefaultInLocalStorage,
166
+ setUserIdOverrideInLocalStorage,
167
+ clearUserIdOverrideInLocalStorage,
168
+ isReady,
169
+ }),
170
+ [
171
+ identifyUser,
172
+ getUserIdOrDefault,
173
+ getUserIdOverrideFromLocalStorage,
174
+ getUserIdDefaultFromLocalStorage,
175
+ setUserIdDefaultInLocalStorage,
176
+ setUserIdOverrideInLocalStorage,
177
+ clearUserIdOverrideInLocalStorage,
178
+ isReady,
179
+ ]
180
+ );
181
+
182
+ return (
183
+ <UserIdentityContext.Provider value={value}>
184
+ {children}
185
+ </UserIdentityContext.Provider>
186
+ );
187
+ };
188
+
189
+ export const useUserIdentity = () => {
190
+ const context = useContext(UserIdentityContext);
191
+ if (!context) {
192
+ throw new Error(
193
+ "useUserIdentity must be used within a UserIdentityProvider"
194
+ );
195
+ }
196
+ return context;
197
+ };
@@ -1,53 +1,47 @@
1
- import {
2
- AmplitudeAdapter,
3
- SpiffyMetricsEventName,
4
- } from "src/adapters/amplitude";
5
1
  import { getAtomStore } from "src/atoms/atomStore/atomStore";
6
2
  import {
7
3
  pageLoadOffsetTimeAtom,
8
4
  performanceMetricsAtom,
9
5
  resetPerformanceMetricsAtom,
10
6
  } from "src/atoms/chat";
7
+ import { SpiffyMetricsEventName } from "src/contexts/amplitudeContext";
8
+ import { useAmplitudeTracking } from "src/hooks/useAmplitudeOperations";
9
+ import { useEffect } from "react";
11
10
 
12
- const registerPerformanceMetricsListener = () => {
11
+ export const useRegisterAnalyticsListeners = () => {
12
+ const { track } = useAmplitudeTracking();
13
13
  const atomStore = getAtomStore();
14
- const performanceMetrics = atomStore.get(performanceMetricsAtom);
15
- const pageLoadOffsetTime = atomStore.get(pageLoadOffsetTimeAtom);
16
14
 
17
- const handleVisibilityChange = () => {
18
- if (document.visibilityState === "hidden" && performanceMetrics.size > 0) {
19
- const perfMetricsProperties = Object.fromEntries(
20
- Array.from(performanceMetrics.entries()).map(([key, value]) => [
21
- `performanceMetrics.${key}`,
22
- value,
23
- ])
24
- );
15
+ useEffect(() => {
16
+ const performanceMetrics = atomStore.get(performanceMetricsAtom);
17
+ const pageLoadOffsetTime = atomStore.get(pageLoadOffsetTimeAtom);
18
+
19
+ const handleVisibilityChange = () => {
20
+ if (
21
+ document.visibilityState === "hidden" &&
22
+ performanceMetrics.size > 0
23
+ ) {
24
+ const perfMetricsProperties = Object.fromEntries(
25
+ Array.from(performanceMetrics.entries()).map(([key, value]) => [
26
+ `performanceMetrics.${key}`,
27
+ value,
28
+ ])
29
+ );
25
30
 
26
- AmplitudeAdapter.trackEvent({
27
- eventName: SpiffyMetricsEventName.PerformanceMetrics,
28
- eventProps: {
31
+ track(SpiffyMetricsEventName.PerformanceMetrics, {
29
32
  ...perfMetricsProperties,
30
33
  "performance_metrics.page_load_offset_ms": pageLoadOffsetTime,
31
- },
32
- });
33
- resetPerformanceMetricsAtom();
34
- }
35
- };
36
-
37
- // do not use anything other than visibilitychange to detect when a page or
38
- // session has ended as other events may not fire in all browsers/devices
39
- window.addEventListener("visibilitychange", handleVisibilityChange);
40
-
41
- return () => {
42
- window.removeEventListener("visibilitychange", handleVisibilityChange);
43
- };
44
- };
34
+ });
35
+ resetPerformanceMetricsAtom();
36
+ }
37
+ };
45
38
 
46
- export const registerAnalyticsListeners = () => {
47
- const cleanupPerformanceMetricsListener =
48
- registerPerformanceMetricsListener();
39
+ // do not use anything other than visibilitychange to detect when a page or
40
+ // session has ended as other events may not fire in all browsers/devices
41
+ window.addEventListener("visibilitychange", handleVisibilityChange);
49
42
 
50
- return () => {
51
- cleanupPerformanceMetricsListener();
52
- };
43
+ return () => {
44
+ window.removeEventListener("visibilitychange", handleVisibilityChange);
45
+ };
46
+ }, [track]);
53
47
  };
@@ -1,22 +1,26 @@
1
+ export * from "./useAmplitudeOperations";
1
2
  export * from "./useBlockBackButton";
3
+ export * from "./useCdnOperations";
2
4
  export * from "./useChatToggle";
5
+ export * from "./useChatToggleAnalytics";
3
6
  export * from "./useCustomerSupportHandoff";
4
7
  export * from "./useDebounce";
5
- export * from "./useDynamicVariants";
6
8
  export * from "./useElementObserver";
7
- export * from "./useFileUpload";
8
9
  export * from "./useGrabAndScroll";
9
- export * from "./useHideElements";
10
- export * from "./useHorizontalScrollAnimation";
10
+ export * from "./useGraphQLConfig";
11
+ export * from "./useIdentifyUser";
11
12
  export * from "./useImageResolver";
12
13
  export * from "./useIntersection";
13
14
  export * from "./useIsSmallScreen";
15
+ export * from "./useLocalStorageOperations";
14
16
  export * from "./useMessageFilter";
15
17
  export * from "./useMessageScrollObserver";
16
- export * from "./useReducedMotionWithOverride";
18
+ export * from "./useNewOrgConfig";
17
19
  export * from "./useSearch";
20
+ export * from "./useSearchOperations";
21
+ export * from "./useSessionStorageOperations";
22
+ export * from "./useShopifyUrlOperations";
18
23
  export * from "./useSnapCalculator";
19
- export * from "./useSnapControl";
20
24
  export * from "./useSystemSettingsContext";
21
25
  export * from "./useTrackComponentVisibleEvent";
22
26
  export * from "./useUpdateAnalyticsProps";
@@ -0,0 +1,35 @@
1
+ import { useState, useCallback } from "react";
2
+ import {
3
+ SpiffyMetricsEventName,
4
+ useAmplitude,
5
+ } from "src/contexts/amplitudeContext";
6
+
7
+ export const useAmplitudeTracking = () => {
8
+ const { trackEvent, isReady } = useAmplitude();
9
+ const [loading, setLoading] = useState(false);
10
+ const [error, setError] = useState<Error | null>(null);
11
+
12
+ const track = useCallback(
13
+ async (
14
+ eventName: SpiffyMetricsEventName,
15
+ eventProps?: Record<string, unknown>
16
+ ) => {
17
+ if (!isReady) return;
18
+
19
+ setLoading(true);
20
+ setError(null);
21
+
22
+ try {
23
+ await trackEvent({ eventName, eventProps });
24
+ } catch (err) {
25
+ setError(err instanceof Error ? err : new Error("Tracking failed"));
26
+ throw err;
27
+ } finally {
28
+ setLoading(false);
29
+ }
30
+ },
31
+ [trackEvent, isReady]
32
+ );
33
+
34
+ return { track, loading, error, isReady };
35
+ };
@@ -0,0 +1,49 @@
1
+ import { useAtomValue } from "jotai";
2
+ import {
3
+ ContextEnvEnum,
4
+ ContextSourceEnum,
5
+ } from "@spiffy-ai/commerce-api-client";
6
+ import { VariantInfo } from "src/application/models";
7
+ import { UserIdentityContextType } from "src/contexts/userIdentityContext";
8
+ import { variantInfoAtom } from "src/atoms/app/variant";
9
+ import {
10
+ contextSourceAtom,
11
+ envAtom as enviveEnvAtom,
12
+ orgShortNameAtom as enviveOrgShortNameAtom,
13
+ } from "src/atoms/envive/enviveConfig";
14
+ import { chatIdAtom, userIdAtom } from "src/atoms/app/index";
15
+ import { useNewOrgConfigContext } from "src/contexts/newOrgConfigContext";
16
+ import { useOrgId } from "src/hooks/useGraphQLConfig"; // Import useOrgId
17
+
18
+ export interface AppDetails {
19
+ orgId: string;
20
+ orgShortName: string;
21
+ chatId: string;
22
+ userId: string;
23
+ source: ContextSourceEnum;
24
+ env: ContextEnvEnum;
25
+ variantInfo: VariantInfo;
26
+ }
27
+
28
+ export const useAppDetails = (): AppDetails => {
29
+ const { orgId: fetchedOrgId } = useOrgId(); // Get orgId from useOrgId hook
30
+ const orgId = fetchedOrgId ?? ""; // Provide a default empty string if undefined
31
+
32
+ const orgShortName = useAtomValue(enviveOrgShortNameAtom) ?? "spiffy-ai";
33
+ const chatId = useAtomValue(chatIdAtom);
34
+ const userId = useAtomValue(userIdAtom);
35
+ const source = useAtomValue(contextSourceAtom) ?? ContextSourceEnum.App;
36
+ const env =
37
+ (useAtomValue(enviveEnvAtom) as ContextEnvEnum) ?? ContextEnvEnum.Dev; // Cast to ContextEnvEnum
38
+ const variantInfo = useAtomValue(variantInfoAtom);
39
+
40
+ return {
41
+ orgId,
42
+ orgShortName,
43
+ chatId,
44
+ userId,
45
+ source,
46
+ env,
47
+ variantInfo,
48
+ };
49
+ };
@@ -0,0 +1,16 @@
1
+ import { useCdn } from "../contexts/cdnContext";
2
+
3
+ export const useCdnUrl = () => {
4
+ const { cdnUrl } = useCdn();
5
+ return cdnUrl;
6
+ };
7
+
8
+ export const useCdnBasePath = () => {
9
+ const { getCdnBasePath } = useCdn();
10
+ return getCdnBasePath();
11
+ };
12
+
13
+ export const useAssetUrl = (assetName: string, orgShortName: string) => {
14
+ const { getAssetURL } = useCdn();
15
+ return getAssetURL(assetName, orgShortName);
16
+ };
@@ -2,20 +2,21 @@ import { useAtomValue, useSetAtom } from "jotai";
2
2
  import { ChatElementDisplayLocation } from "src/application/models/chatElementDisplayLocation";
3
3
  import { chatAtom, chatOnToggleAtom } from "src/atoms/chat";
4
4
  import {
5
- AmplitudeAdapter,
6
5
  SpiffyMetricsEventName,
7
- } from "src/adapters/amplitude";
6
+ useAmplitude,
7
+ } from "src/contexts/amplitudeContext";
8
8
 
9
9
  export const useChatToggle = () => {
10
10
  const onToggle = useSetAtom(chatOnToggleAtom);
11
11
  const { isOpen } = useAtomValue(chatAtom);
12
+ const { trackEvent } = useAmplitude();
12
13
 
13
14
  const toggle = (
14
15
  triggerLocation: ChatElementDisplayLocation,
15
16
  triggerId?: string
16
17
  ) => {
17
18
  if (!isOpen) {
18
- AmplitudeAdapter.trackEvent({
19
+ trackEvent({
19
20
  eventName: SpiffyMetricsEventName.ChatComponentExpanded,
20
21
  eventProps: {
21
22
  message_metadata: {
@@ -25,7 +26,7 @@ export const useChatToggle = () => {
25
26
  },
26
27
  });
27
28
  } else {
28
- AmplitudeAdapter.trackEvent({
29
+ trackEvent({
29
30
  eventName: SpiffyMetricsEventName.ChatComponentCollapsed,
30
31
  eventProps: {
31
32
  message_metadata: {
@@ -0,0 +1,15 @@
1
+ import { useSetAtom } from "jotai";
2
+ import { chatOnToggleAtom } from "src/atoms/chat/chatState";
3
+ import { ChatElementDisplayLocation } from "src/application/models/chatElementDisplayLocation";
4
+ import { useAmplitudeTracking } from "./useAmplitudeOperations";
5
+
6
+ export const useChatToggleAnalytics = () => {
7
+ const setChatOnToggle = useSetAtom(chatOnToggleAtom);
8
+ const { track } = useAmplitudeTracking();
9
+
10
+ const toggleChat = (triggerLocation?: ChatElementDisplayLocation) => {
11
+ setChatOnToggle(triggerLocation, track);
12
+ };
13
+
14
+ return { toggleChat };
15
+ };
@@ -0,0 +1,63 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ import { useGraphQLClient } from "src/contexts/graphqlContext";
3
+ import { ColorMapping } from "src/application/models/colorsConfig";
4
+ import { FrontendConfig } from "src/application/models/frontendConfig";
5
+ import { transformSnakeToCamel } from "src/application/models";
6
+
7
+ export const useColorsAndFrontendConfig = () => {
8
+ const { getColorsAndFrontendConfig, isReady } = useGraphQLClient();
9
+ const [data, setData] = useState({});
10
+ const [loading, setLoading] = useState(false);
11
+ const [error, setError] = useState<Error | null>(null);
12
+
13
+ const fetchConfig = useCallback(async () => {
14
+ if (!isReady) return;
15
+
16
+ setLoading(true);
17
+ setError(null);
18
+
19
+ try {
20
+ const result = await getColorsAndFrontendConfig();
21
+ setData(result);
22
+ } catch (err) {
23
+ setError(err instanceof Error ? err : new Error("Unknown error"));
24
+ } finally {
25
+ setLoading(false);
26
+ }
27
+ }, [getColorsAndFrontendConfig, isReady]);
28
+
29
+ useEffect(() => {
30
+ fetchConfig();
31
+ }, [fetchConfig]);
32
+
33
+ return { data, loading, error, refetch: fetchConfig };
34
+ };
35
+
36
+ export const useOrgId = () => {
37
+ const { getOrgId, isReady } = useGraphQLClient();
38
+ const [orgId, setOrgId] = useState<string | undefined>();
39
+ const [loading, setLoading] = useState(false);
40
+ const [error, setError] = useState<Error | null>(null);
41
+
42
+ useEffect(() => {
43
+ if (!isReady) return;
44
+
45
+ const fetchOrgId = async () => {
46
+ setLoading(true);
47
+ setError(null);
48
+
49
+ try {
50
+ const id = await getOrgId();
51
+ setOrgId(id);
52
+ } catch (err) {
53
+ setError(err instanceof Error ? err : new Error("Unknown error"));
54
+ } finally {
55
+ setLoading(false);
56
+ }
57
+ };
58
+
59
+ fetchOrgId();
60
+ }, [getOrgId, isReady]);
61
+
62
+ return { orgId, loading, error };
63
+ };
@@ -0,0 +1,33 @@
1
+ import { useState, useCallback } from "react";
2
+ import { useUserIdentity } from "src/contexts/userIdentityContext";
3
+
4
+ export const useIdentifyUser = () => {
5
+ const { identifyUser, isReady } = useUserIdentity();
6
+ const [loading, setLoading] = useState(false);
7
+ const [error, setError] = useState<Error | null>(null);
8
+
9
+ const executeIdentifyUser = useCallback(async () => {
10
+ if (!isReady) {
11
+ setError(new Error("UserIdentityContext not ready."));
12
+ return;
13
+ }
14
+
15
+ setLoading(true);
16
+ setError(null);
17
+
18
+ try {
19
+ await identifyUser();
20
+ } catch (err) {
21
+ setError(
22
+ err instanceof Error
23
+ ? err
24
+ : new Error("Unknown error during user identification.")
25
+ );
26
+ throw err;
27
+ } finally {
28
+ setLoading(false);
29
+ }
30
+ }, [identifyUser, isReady]);
31
+
32
+ return { loading, error, executeIdentifyUser, isReady };
33
+ };
@@ -1,7 +1,6 @@
1
- import { useAtomValue } from 'jotai';
2
- import { OrgShortName } from 'src/application/models';
3
- import { orgUIConfigAtom } from 'src/atoms/org/orgUIConfig';
4
-
1
+ import { useAtomValue } from "jotai";
2
+ import { OrgShortName } from "src/application/models";
3
+ import { orgShortNameAtom } from "src/atoms/envive/enviveConfig";
5
4
  abstract class ImageResolver {
6
5
  abstract resolve(url: string, size: number): string;
7
6
  }
@@ -12,8 +11,14 @@ class MerchantImageResolver {
12
11
  private static loadMapping() {
13
12
  if (this.imageResolverMap.size === 0) {
14
13
  this.imageResolverMap.set(OrgShortName.Spanx, new ShopifyImageResolver());
15
- this.imageResolverMap.set(OrgShortName.SpanxStaging, new ShopifyImageResolver());
16
- this.imageResolverMap.set(OrgShortName.UniqueVintage, new ShopifyImageResolver());
14
+ this.imageResolverMap.set(
15
+ OrgShortName.SpanxStaging,
16
+ new ShopifyImageResolver()
17
+ );
18
+ this.imageResolverMap.set(
19
+ OrgShortName.UniqueVintage,
20
+ new ShopifyImageResolver()
21
+ );
17
22
  }
18
23
  return this.imageResolverMap;
19
24
  }
@@ -31,15 +36,18 @@ class ShopifyImageResolver extends ImageResolver {
31
36
  if (urlHasPrefix) {
32
37
  return url.replace(pattern, newSizePrefix);
33
38
  }
34
- return url.replace('.jpg', newSizePrefix);
39
+ return url.replace(".jpg", newSizePrefix);
35
40
  }
36
41
  }
37
42
 
38
43
  export const useImageResolver = () => {
39
- const orgUIConfig = useAtomValue(orgUIConfigAtom);
44
+ const orgShortName = useAtomValue(orgShortNameAtom);
40
45
  const resolve = (image?: string, size?: number) => {
41
- if (image && size) {
42
- const newImagePath = MerchantImageResolver.get(orgUIConfig.shortName)?.resolve(image, size);
46
+ if (image && size && orgShortName) {
47
+ const newImagePath = MerchantImageResolver.get(orgShortName)?.resolve(
48
+ image,
49
+ size
50
+ );
43
51
  return newImagePath || image;
44
52
  }
45
53
  return image;