@envive-ai/react-hooks 0.1.5 → 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 (491) 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 +19 -15
  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 +24 -2
  41. package/dist/atoms/atomStore/index.d.ts +24 -2
  42. package/dist/atoms/atomStore/index.js +2 -1
  43. package/dist/atoms/chat/index.cjs +44 -40
  44. package/dist/atoms/chat/index.d.cts +35 -36
  45. package/dist/atoms/chat/index.d.ts +35 -36
  46. package/dist/atoms/chat/index.js +14 -10
  47. package/dist/atoms/globalSearch/index.cjs +1 -1
  48. package/dist/atoms/globalSearch/index.d.cts +5 -5
  49. package/dist/atoms/globalSearch/index.d.ts +6 -6
  50. package/dist/atoms/globalSearch/index.js +1 -1
  51. package/dist/atoms/org/index.cjs +26 -38
  52. package/dist/atoms/org/index.d.cts +35 -48
  53. package/dist/atoms/org/index.d.ts +35 -48
  54. package/dist/atoms/org/index.js +11 -11
  55. package/dist/atoms/search/index.cjs +47 -41
  56. package/dist/atoms/search/index.d.cts +7 -9
  57. package/dist/atoms/search/index.d.ts +7 -9
  58. package/dist/atoms/search/index.js +16 -10
  59. package/dist/bandolier-DYEz4-8C.js +1229 -0
  60. package/dist/bandolier-o_-xrbOV.cjs +1229 -0
  61. package/dist/carpe-CsG5jCcl.cjs +607 -0
  62. package/dist/carpe-DONk00bZ.js +605 -0
  63. package/dist/cdnUtils-32v8bDX9.cjs +16 -0
  64. package/dist/cdnUtils-E4tLBt2g.js +11 -0
  65. package/dist/{chat-_NzpO_Hn.cjs → chat-BubCW1as.cjs} +1 -1
  66. package/dist/chat-CO7cRkaq.cjs +506 -0
  67. package/dist/{chat-CHmD79E1.js → chat-CV6MXeID.js} +1 -1
  68. package/dist/chat-hcRc4RRd.js +285 -0
  69. package/dist/{components-Dl-TMD9k.js → components-B4T3Uzth.js} +1 -1
  70. package/dist/{components-D0XDRcaN.cjs → components-Cw9WjA6g.cjs} +1 -1
  71. package/dist/config/locators/components/chat/index.cjs +1 -1
  72. package/dist/config/locators/components/chat/index.d.cts +1 -1
  73. package/dist/config/locators/components/chat/index.d.ts +1 -1
  74. package/dist/config/locators/components/chat/index.js +1 -1
  75. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  76. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  77. package/dist/config/locators/components/index.cjs +1 -1
  78. package/dist/config/locators/components/index.d.cts +1 -1
  79. package/dist/config/locators/components/index.d.ts +1 -1
  80. package/dist/config/locators/components/index.js +1 -1
  81. package/dist/config/locators/components/search/index.d.ts +1 -1
  82. package/dist/config/locators/index.cjs +4 -4
  83. package/dist/config/locators/index.d.cts +2 -2
  84. package/dist/config/locators/index.d.ts +2 -2
  85. package/dist/config/locators/index.js +4 -4
  86. package/dist/contexts/index.cjs +45 -14
  87. package/dist/contexts/index.d.cts +10 -10
  88. package/dist/contexts/index.d.ts +10 -10
  89. package/dist/contexts/index.js +22 -11
  90. package/dist/contexts-B4ihTBsV.cjs +2980 -0
  91. package/dist/contexts-DGlr7M1o.js +2596 -0
  92. package/dist/coterie-CKB93qfz.cjs +239 -0
  93. package/dist/{coterie--MGvWeVh.cjs → coterie-DHcj2fRE.js} +64 -65
  94. package/dist/{custservice-types-C8-9vKWb.cjs → custservice-types-Dy0kc9TW.cjs} +1 -1
  95. package/dist/{custservice-types-CamCiXjq.js → custservice-types-mnIunabv.js} +1 -1
  96. package/dist/default-BnB4p0Se.cjs +234 -0
  97. package/dist/default-D6f5Dyt7.js +199 -0
  98. package/dist/default-ZKkE5zT4.cjs +4 -0
  99. package/dist/default-legGZJwI.js +4 -0
  100. package/dist/{divIds-CjceLRD9.cjs → divIds-2dJlU3z8.cjs} +1 -15
  101. package/dist/{divIds-0Vj9g-fM.js → divIds-BUrN2vY-.js} +2 -4
  102. package/dist/dreamlandBaby-BiRYYFav.js +346 -0
  103. package/dist/dreamlandBaby-zuvmfzfD.cjs +346 -0
  104. package/dist/{embedded-_cLpd6FK.js → embedded-BJLWIriJ.js} +1 -1
  105. package/dist/{embedded-B5Wi9g0T.cjs → embedded-Dl79TJLC.cjs} +1 -1
  106. package/dist/{entrypoints-CNUvSgnk.js → entrypoints-Bs3pn6EV.js} +1 -1
  107. package/dist/{entrypoints-DM9Sm18O.cjs → entrypoints-Dqi5pzWH.cjs} +1 -1
  108. package/dist/enviveConfig-BccuzS2a.cjs +240 -0
  109. package/dist/enviveConfig-CzhTz8Aa.js +152 -0
  110. package/dist/events/index.cjs +1 -1
  111. package/dist/events/index.js +1 -1
  112. package/dist/{events-ClCDFK7t.js → events-BrLpaNxh.js} +1 -1
  113. package/dist/{events-Da7gpmGv.cjs → events-DwT6cEwI.cjs} +1 -1
  114. package/dist/fiveCbd-DwTTwC2j.cjs +613 -0
  115. package/dist/fiveCbd-Dz2NouOF.js +613 -0
  116. package/dist/forLoveAndLemons-DqSdyD6S.js +665 -0
  117. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +667 -0
  118. package/dist/{globalSearch-b0wC7ZEO.js → globalSearch-B6THR7Jx.js} +1 -1
  119. package/dist/{globalSearch-BTeZxvk1.cjs → globalSearch-BFvEg53C.cjs} +1 -1
  120. package/dist/graphql-BNW60InJ.cjs +128 -0
  121. package/dist/graphql-CjB8wHzm.js +74 -0
  122. package/dist/graphqlConfig-CYt6tWII.js +30 -0
  123. package/dist/graphqlConfig-DicykC-o.cjs +61 -0
  124. package/dist/greenpan-B_EbPkSP.js +397 -0
  125. package/dist/greenpan-kPE4fJgd.cjs +397 -0
  126. package/dist/grooveLife-Ckuir319.js +342 -0
  127. package/dist/grooveLife-DKSEQp1F.cjs +342 -0
  128. package/dist/homegrownCannabis-BVPa2pqe.js +410 -0
  129. package/dist/homegrownCannabis-BwIAkxuA.cjs +410 -0
  130. package/dist/hooks/index.cjs +39 -13
  131. package/dist/hooks/index.d.cts +127 -45
  132. package/dist/hooks/index.d.ts +124 -42
  133. package/dist/hooks/index.js +22 -11
  134. package/dist/{index-D46Rd0io.d.cts → index-B0NW9KTj.d.cts} +1 -1
  135. package/dist/{index-BdNKc2ix.d.cts → index-BDPWBU3h.d.cts} +1 -1
  136. package/dist/index-BMPtlgac.d.ts +191 -0
  137. package/dist/{index-BTK5uzs6.d.cts → index-Bmub8e38.d.cts} +1 -1
  138. package/dist/{index-BrXuc_Ck.d.cts → index-Byb45OPg.d.cts} +1 -1
  139. package/dist/{index-CSIOQD-A.d.ts → index-C6KdON7d.d.ts} +1 -1
  140. package/dist/index-C7pGDl1A.d.ts +1609 -0
  141. package/dist/{index-K2kNsOTw.d.cts → index-C9lgsCWp.d.cts} +32 -32
  142. package/dist/{index-BzgkfbNO.d.cts → index-CESxqFso.d.cts} +1 -1
  143. package/dist/{index-CbJZOEU4.d.ts → index-Cc-wBCn6.d.ts} +32 -32
  144. package/dist/{index-Cx9e-fRi.d.ts → index-CcIG01PJ.d.ts} +2 -2
  145. package/dist/{index-ClJ0nMsR.d.cts → index-CiWEYzXl.d.cts} +2 -2
  146. package/dist/{index-CKKkTsms.d.ts → index-Cqg6ltII.d.ts} +1 -1
  147. package/dist/{index-Cr2y08f1.d.ts → index-DOii3C6b.d.ts} +1 -1
  148. package/dist/index-DTu2X-YS.d.cts +1609 -0
  149. package/dist/index-OEifcBsm.d.cts +191 -0
  150. package/dist/{index-Dxpscrvz.d.ts → index-PGF8BvxQ.d.ts} +1 -1
  151. package/dist/{index-D2VaMPA3.d.ts → index-ylUiJvnr.d.ts} +1 -1
  152. package/dist/interceptors/index.cjs +2 -12
  153. package/dist/interceptors/index.d.cts +8 -13
  154. package/dist/interceptors/index.d.ts +8 -13
  155. package/dist/interceptors/index.js +2 -11
  156. package/dist/jackArcher-B39OEIj6.cjs +727 -0
  157. package/dist/{jackArcher-sO9EbgrZ.js → jackArcher-BwkWGybC.js} +24 -25
  158. package/dist/jordanCraig-CxRH_jLi.js +1786 -0
  159. package/dist/jordanCraig-RwmWw-jM.cjs +1786 -0
  160. package/dist/kindredBravely-D78VwL20.cjs +490 -0
  161. package/dist/kindredBravely-DQDpAzdl.js +490 -0
  162. package/dist/kutFromTheKloth-TcXQkIti.js +369 -0
  163. package/dist/kutFromTheKloth-dXRrNti0.cjs +369 -0
  164. package/dist/larryAndSerges-Bh5XEXsZ.js +262 -0
  165. package/dist/larryAndSerges-COdBzOzu.cjs +262 -0
  166. package/dist/leapsAndRebounds-BbXnqkl5.cjs +360 -0
  167. package/dist/leapsAndRebounds-mjCaH1k-.js +360 -0
  168. package/dist/longevityrx-DdV3v26F.cjs +320 -0
  169. package/dist/longevityrx-DfPDfvAt.js +320 -0
  170. package/dist/lookOptic-DgXFGBPP.cjs +282 -0
  171. package/dist/{lookOptic-Jwf7EAU8.js → lookOptic-FgVW1afF.js} +19 -20
  172. package/dist/mantraBrand-C5gVm3rk.cjs +750 -0
  173. package/dist/{mantraBrand-DoaVj837.js → mantraBrand-uV8HCDR8.js} +22 -23
  174. package/dist/medterra-BtDpr1Hw.cjs +583 -0
  175. package/dist/medterra-DgzE7-mj.js +583 -0
  176. package/dist/modells-CJjsxOIR.js +484 -0
  177. package/dist/modells-Ck5KbRFj.cjs +484 -0
  178. package/dist/models-BkXg5eIP.cjs +1534 -0
  179. package/dist/models-UZ6HszfZ.js +1281 -0
  180. package/dist/{nodeSelector-DybpVr-i.d.ts → nodeSelector-BxrS2S_k.d.ts} +1 -1
  181. package/dist/{nodeSelector-vKB44CDB.d.cts → nodeSelector-Dm4S-10n.d.cts} +1 -1
  182. package/dist/org-C2RrBVQR.cjs +81 -0
  183. package/dist/org-xMytX--e.js +38 -0
  184. package/dist/orgAnalyticsConfig-BJ2A1RZ-.cjs +39 -0
  185. package/dist/orgAnalyticsConfig-ClrFy2qH.js +14 -0
  186. package/dist/pressedFloral-Bteoboms.js +661 -0
  187. package/dist/pressedFloral-CexgV-xy.cjs +661 -0
  188. package/dist/search-BMOAmrmY.js +459 -0
  189. package/dist/search-Df0Ifneg.cjs +672 -0
  190. package/dist/{search-filter-types-9rTb3jMj.d.cts → search-filter-types-DosbseF3.d.cts} +1 -1
  191. package/dist/{search-filter-types-C-zZSpGo.d.ts → search-filter-types-fZf91Pdw.d.ts} +1 -1
  192. package/dist/skinPerfection-BGzq9lq-.cjs +334 -0
  193. package/dist/skinPerfection-BlvcEcUE.js +334 -0
  194. package/dist/snapSupplements-CbbGzAgO.cjs +285 -0
  195. package/dist/snapSupplements-kcsPAOm9.js +285 -0
  196. package/dist/{socialProofClasses-ky69yppk.cjs → socialProofClasses-Db8gzsfi.cjs} +1 -1
  197. package/dist/{socialProofClasses-DdzG1tZy.js → socialProofClasses-kwDvwLOZ.js} +1 -1
  198. package/dist/spanx-B4WFA_rI.js +661 -0
  199. package/dist/spanx-BWoE4F8b.cjs +663 -0
  200. package/dist/spanxStaging-BOrOjhXn.js +845 -0
  201. package/dist/spanxStaging-BfdfIug4.cjs +848 -0
  202. package/dist/{suggestionBarV2-types-Penx3Y67.js → suggestionBarV2-types-IMMOmCir.js} +1 -1
  203. package/dist/{suggestionBarV2-types-B3lwrENK.cjs → suggestionBarV2-types-nnGNgFvR.cjs} +1 -1
  204. package/dist/supergoop-22dd5_BS.js +323 -0
  205. package/dist/supergoop-B-a4cku2.cjs +323 -0
  206. package/dist/{test-types-CXVJxTeu.d.ts → test-types-C9b_OdfO.d.ts} +1 -1
  207. package/dist/{test-types-CuOq25VT.d.cts → test-types-CgVJtwUr.d.cts} +1 -1
  208. package/dist/types/index.cjs +2 -2
  209. package/dist/types/index.d.cts +2 -2
  210. package/dist/types/index.d.ts +2 -2
  211. package/dist/types/index.js +2 -2
  212. package/dist/types--pr1GQQx.js +154 -0
  213. package/dist/types-BVSyY3Hk.cjs +196 -0
  214. package/dist/{uniqueVintage-BWkDgt1z.js → uniqueVintage-CJXiNNe7.js} +19 -20
  215. package/dist/uniqueVintage-D0jzJWlo.cjs +1213 -0
  216. package/dist/useMessageInterceptor-B87e3yu3.cjs +33 -0
  217. package/dist/useMessageInterceptor-Bb7YRaWk.js +25 -0
  218. package/dist/userIdentityContext-BPqvVIg0.d.cts +20 -0
  219. package/dist/userIdentityContext-wbCRmlzp.d.ts +20 -0
  220. package/dist/utils-C9ZSCx12.js +888 -0
  221. package/dist/utils-D5HO61hG.cjs +1016 -0
  222. package/dist/variantInfo-DbVxA1yE.js +1 -0
  223. package/dist/variantInfo-orXoPBCU.cjs +0 -0
  224. package/dist/venaCbd-Bhhu_qUf.cjs +365 -0
  225. package/dist/venaCbd-CanovPS_.js +365 -0
  226. package/dist/westonJonBoucher-BC0x1ktI.cjs +422 -0
  227. package/dist/{westonJonBoucher-BAGXegsX.js → westonJonBoucher-BUu1_wP1.js} +19 -20
  228. package/dist/wineEnthusiast-BlCryfil.cjs +940 -0
  229. package/dist/{wineEnthusiast-EJbhMeKQ.js → wineEnthusiast-Ck1x5iJq.js} +19 -20
  230. package/dist/wolfMattress-D9Mjq-HP.js +372 -0
  231. package/dist/wolfMattress-JssghhC-.cjs +372 -0
  232. package/dist/wolfTactical-C6exYhL7.cjs +349 -0
  233. package/dist/wolfTactical-CnV3KQdI.js +349 -0
  234. package/package.json +100 -19
  235. package/src/{adapters/spiffy/commerce/api.ts → application/commerce-api.ts} +31 -23
  236. package/src/application/models/colorsConfig.ts +18 -18
  237. package/src/application/models/frontendConfig.ts +3 -3
  238. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +1 -1
  239. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +1 -1
  240. package/src/application/models/index.ts +0 -2
  241. package/src/application/models/localStorageEventListener.ts +2 -2
  242. package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
  243. package/src/application/models/validators/validateGraphQLColorsConfig.ts +0 -21
  244. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +2 -2
  245. package/src/application/utils/analyticsUtils.ts +53 -22
  246. package/src/application/utils/cdnUtils.ts +11 -0
  247. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +15 -0
  248. package/src/atoms/app/index.ts +7 -17
  249. package/src/atoms/app/variant.ts +13 -4
  250. package/src/atoms/chat/chatState.ts +28 -18
  251. package/src/atoms/chat/messageQueue.ts +36 -5
  252. package/src/atoms/chat/replies.ts +45 -37
  253. package/src/atoms/envive/enviveConfig.ts +10 -6
  254. package/src/atoms/org/graphqlConfig.ts +7 -1
  255. package/src/atoms/org/index.ts +3 -3
  256. package/src/atoms/org/newOrgConfigAtom.ts +8 -0
  257. package/src/atoms/org/orgPageConfig.ts +6 -5
  258. package/src/atoms/search/chatSearch.ts +11 -5
  259. package/src/atoms/search/searchAPI.ts +22 -12
  260. package/src/atoms/search/searchServiceAdapter.ts +25 -0
  261. package/src/contexts/amplitudeContext.tsx +466 -0
  262. package/src/contexts/cdnContext.tsx +48 -0
  263. package/src/contexts/chatContext.tsx +15 -12
  264. package/src/contexts/enviveConfigContext.tsx +22 -17
  265. package/src/contexts/enviveCssContext.tsx +34 -5
  266. package/src/contexts/featureFlagContext.tsx +193 -0
  267. package/src/contexts/featureFlagServiceContext.tsx +87 -0
  268. package/src/contexts/graphqlContext.tsx +165 -0
  269. package/src/contexts/index.ts +13 -3
  270. package/src/contexts/localStorageContext.tsx +159 -0
  271. package/src/contexts/newOrgConfigContext.tsx +104 -0
  272. package/src/contexts/orgConfigContext.tsx +92 -92
  273. package/src/contexts/searchContext.tsx +187 -0
  274. package/src/contexts/sessionStorageContext.tsx +80 -0
  275. package/src/contexts/shopifyUrlContext.tsx +97 -0
  276. package/src/contexts/types.ts +12 -8
  277. package/src/contexts/userIdentityContext.tsx +197 -0
  278. package/src/events/registerAnalyticsListeners.ts +32 -38
  279. package/src/hooks/index.ts +10 -4
  280. package/src/hooks/useAmplitudeOperations.ts +35 -0
  281. package/src/hooks/useAppDetails.ts +49 -0
  282. package/src/hooks/useCdnOperations.ts +16 -0
  283. package/src/hooks/useChatToggle.ts +5 -4
  284. package/src/hooks/useChatToggleAnalytics.ts +15 -0
  285. package/src/hooks/useGraphQLConfig.ts +63 -0
  286. package/src/hooks/useIdentifyUser.ts +33 -0
  287. package/src/hooks/useImageResolver.ts +7 -7
  288. package/src/hooks/useLocalStorageOperations.ts +92 -0
  289. package/src/hooks/useNewOrgConfig.ts +3 -76
  290. package/src/hooks/useSearch.tsx +21 -18
  291. package/src/hooks/useSearchOperations.ts +97 -0
  292. package/src/hooks/useSessionStorageOperations.ts +28 -0
  293. package/src/hooks/useShopifyUrlOperations.ts +45 -0
  294. package/src/hooks/useTrackComponentVisibleEvent.ts +12 -8
  295. package/src/hooks/useUpdateAnalyticsProps.ts +28 -17
  296. package/src/interceptors/index.ts +0 -1
  297. package/src/interceptors/useMessageInterceptor.ts +5 -8
  298. package/src/merchants/bandolier/bandolier.ts +10 -28
  299. package/src/merchants/carpe/carpe.ts +5 -8
  300. package/src/merchants/coterie/coterie.ts +3 -6
  301. package/src/merchants/default.ts +73 -70
  302. package/src/merchants/domInsertion.ts +30 -0
  303. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +12 -6
  304. package/src/merchants/fiveCbd/fiveCbd.ts +7 -13
  305. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +44 -14
  306. package/src/merchants/greenpan/greenpan.ts +6 -12
  307. package/src/merchants/gridInsertion.ts +19 -0
  308. package/src/merchants/grooveLife/grooveLife.ts +13 -7
  309. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +12 -6
  310. package/src/merchants/jackArcher/jackArcher.ts +26 -11
  311. package/src/merchants/jordanCraig/jordanCraig.ts +5 -5
  312. package/src/merchants/kindredBravely/kindredBravely.ts +16 -7
  313. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +9 -6
  314. package/src/merchants/larryAndSerges/larryAndSerges.ts +6 -2
  315. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +7 -7
  316. package/src/merchants/longevityrx/longevityrx.ts +14 -8
  317. package/src/merchants/lookOptic/lookOptic.ts +6 -6
  318. package/src/merchants/mantraBrand/mantraBrand.ts +14 -8
  319. package/src/merchants/medterra/medterra.ts +14 -11
  320. package/src/merchants/modells/modells.ts +6 -9
  321. package/src/merchants/pressedFloral/pressedFloral.ts +7 -13
  322. package/src/merchants/skinPerfection/skinPerfection.ts +13 -7
  323. package/src/merchants/snapSupplements/snapSupplements.ts +13 -10
  324. package/src/merchants/spanx/spanx.ts +6 -6
  325. package/src/merchants/spanx/spanxStaging.ts +6 -12
  326. package/src/merchants/supergoop/supergoop.ts +11 -12
  327. package/src/merchants/uniqueVintage/uniqueVintage.ts +6 -6
  328. package/src/merchants/venaCbd/venaCbd.ts +6 -9
  329. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +6 -6
  330. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +6 -6
  331. package/src/merchants/wolfMattress/wolfMattress.ts +3 -3
  332. package/src/merchants/wolfTactical/wolfTactical.ts +5 -11
  333. package/src/types/config-versions.ts +6 -0
  334. package/src/types.ts +0 -53
  335. package/dist/adapters/amplitude/index.cjs +0 -14
  336. package/dist/adapters/amplitude/index.d.cts +0 -6
  337. package/dist/adapters/amplitude/index.d.ts +0 -6
  338. package/dist/adapters/amplitude/index.js +0 -12
  339. package/dist/api-B2euFL-5.cjs +0 -269
  340. package/dist/api-XRr_lAG6.js +0 -190
  341. package/dist/application/config/index.cjs +0 -43
  342. package/dist/application/config/index.d.cts +0 -15
  343. package/dist/application/config/index.d.ts +0 -15
  344. package/dist/application/config/index.js +0 -41
  345. package/dist/application/service/customerService/index.cjs +0 -4
  346. package/dist/application/service/customerService/index.d.cts +0 -3
  347. package/dist/application/service/customerService/index.d.ts +0 -3
  348. package/dist/application/service/customerService/index.js +0 -4
  349. package/dist/application/service/index.cjs +0 -42
  350. package/dist/application/service/index.d.cts +0 -413
  351. package/dist/application/service/index.d.ts +0 -413
  352. package/dist/application/service/index.js +0 -12
  353. package/dist/atomStore-ONYy0XuA.d.cts +0 -24
  354. package/dist/atomStore-kOKiEcNl.d.ts +0 -24
  355. package/dist/bandolier-Da4wt6sm.cjs +0 -1230
  356. package/dist/bandolier-DzEmYWcz.js +0 -1230
  357. package/dist/carpe-AXipz0Xl.cjs +0 -608
  358. package/dist/carpe-CaUKwcEa.js +0 -606
  359. package/dist/contexts-CtRlNXaS.js +0 -7674
  360. package/dist/contexts-CtgmnYNn.cjs +0 -9088
  361. package/dist/coterie-oKHAT0lx.js +0 -240
  362. package/dist/customerService-BG1uNZZ1.cjs +0 -36
  363. package/dist/customerService-BHQRnLhC.js +0 -23
  364. package/dist/default-B4fINY5_.cjs +0 -4
  365. package/dist/default-BrTQxA0c.js +0 -4
  366. package/dist/default-C3LrcbZB.cjs +0 -199
  367. package/dist/default-CXkYrLEr.js +0 -176
  368. package/dist/dreamlandBaby-BEqt0eKF.js +0 -347
  369. package/dist/dreamlandBaby-DBDjEJCc.cjs +0 -347
  370. package/dist/featureFlagService-5wdmW02z.d.ts +0 -18
  371. package/dist/featureFlagService-DaelrXEk.d.cts +0 -18
  372. package/dist/fiveCbd-CdqNt16h.cjs +0 -614
  373. package/dist/fiveCbd-D6B-sgnX.js +0 -614
  374. package/dist/forLoveAndLemons-C7GsJG7f.cjs +0 -668
  375. package/dist/forLoveAndLemons-gNDlMtPR.js +0 -666
  376. package/dist/greenpan-B5AaW4M_.js +0 -398
  377. package/dist/greenpan-DrORpYms.cjs +0 -398
  378. package/dist/grooveLife-BJqsfH2H.cjs +0 -343
  379. package/dist/grooveLife-xIUmDM8s.js +0 -343
  380. package/dist/homegrownCannabis-8TZ21u6L.cjs +0 -411
  381. package/dist/homegrownCannabis-BtMuEvbZ.js +0 -411
  382. package/dist/index-CKUpnyJQ.d.ts +0 -72
  383. package/dist/index-DFL1dIT_.d.ts +0 -7
  384. package/dist/index-DXpgMVpp.d.ts +0 -749
  385. package/dist/index-MFbPQ8Ji.d.ts +0 -95
  386. package/dist/index-VHFMGkO-.d.cts +0 -72
  387. package/dist/index-VSFakgAI.d.cts +0 -95
  388. package/dist/index-aNW5V9fh.d.cts +0 -749
  389. package/dist/index-zZjcds15.d.cts +0 -7
  390. package/dist/jackArcher-WtkbLBZj.cjs +0 -728
  391. package/dist/jordanCraig-471FcgqF.cjs +0 -1787
  392. package/dist/jordanCraig-DNOncplU.js +0 -1787
  393. package/dist/kindredBravely-BlLyHGMX.cjs +0 -491
  394. package/dist/kindredBravely-cqZ4OvXp.js +0 -491
  395. package/dist/kutFromTheKloth-3mOIryvt.cjs +0 -370
  396. package/dist/kutFromTheKloth-DtVNCMKa.js +0 -370
  397. package/dist/larryAndSerges-88Bvq-Us.cjs +0 -262
  398. package/dist/larryAndSerges-cvak6May.js +0 -262
  399. package/dist/leapsAndRebounds-Dmf8eUPq.js +0 -361
  400. package/dist/leapsAndRebounds-iWKc923H.cjs +0 -361
  401. package/dist/logger-Dln20ans.cjs +0 -26
  402. package/dist/logger-pdEEY8T2.js +0 -20
  403. package/dist/longevityrx-BTMI9vn-.js +0 -321
  404. package/dist/longevityrx-CobPyigd.cjs +0 -321
  405. package/dist/lookOptic-C4H_c0JZ.cjs +0 -283
  406. package/dist/mantraBrand-CySGqbn6.cjs +0 -751
  407. package/dist/medterra-BnZ5p27n.cjs +0 -584
  408. package/dist/medterra-DaICcPPp.js +0 -584
  409. package/dist/modells-CZ1L6dD_.js +0 -485
  410. package/dist/modells-DF0SndHr.cjs +0 -485
  411. package/dist/orgConfigResults--dAwtw3W.d.ts +0 -881
  412. package/dist/orgConfigResults-BL0XBA6x.d.cts +0 -881
  413. package/dist/pressedFloral-B3t2cYzs.cjs +0 -662
  414. package/dist/pressedFloral-Dsws2Kfb.js +0 -662
  415. package/dist/skinPerfection-CILQM2bR.cjs +0 -335
  416. package/dist/skinPerfection-DmQCntRf.js +0 -335
  417. package/dist/snapSupplements--X_v0KRM.js +0 -286
  418. package/dist/snapSupplements-Djuzl0Ed.cjs +0 -286
  419. package/dist/spanx-Bo81yXSF.cjs +0 -664
  420. package/dist/spanx-DauxB8KE.js +0 -662
  421. package/dist/spanxStaging-BucYQvR1.cjs +0 -849
  422. package/dist/spanxStaging-CfXUukdP.js +0 -846
  423. package/dist/supergoop-8qa_NV3F.cjs +0 -338
  424. package/dist/supergoop-DOaui-A6.js +0 -336
  425. package/dist/types-CD4LFta-.d.cts +0 -33
  426. package/dist/types-CGC6Oozp.cjs +0 -231
  427. package/dist/types-CnTCkyvK.js +0 -177
  428. package/dist/types-DBdI0j89.d.ts +0 -33
  429. package/dist/uniqueVintage-DAne8XcL.cjs +0 -1214
  430. package/dist/variant-CC1nrywd.d.ts +0 -13
  431. package/dist/variant-CQTuQQSq.d.cts +0 -13
  432. package/dist/venaCbd-B1HO_Pkr.cjs +0 -366
  433. package/dist/venaCbd-CnByO-5R.js +0 -366
  434. package/dist/westonJonBoucher-BRfHWMbs.cjs +0 -423
  435. package/dist/wineEnthusiast-DW8JVwV8.cjs +0 -941
  436. package/dist/wolfMattress-B6INZNRJ.cjs +0 -373
  437. package/dist/wolfMattress-D9P7ErH_.js +0 -373
  438. package/dist/wolfTactical-C5Pupi3J.js +0 -350
  439. package/dist/wolfTactical-TMthZM93.cjs +0 -350
  440. package/src/adapters/amplitude/amplitudeAdapter.ts +0 -477
  441. package/src/adapters/amplitude/index.ts +0 -2
  442. package/src/adapters/amplitude/stubAmplitudeAdapter.ts +0 -34
  443. package/src/adapters/spiffy/commerce/graphql.ts +0 -219
  444. package/src/application/config/generalStaticConfig.ts +0 -40
  445. package/src/application/config/index.ts +0 -1
  446. package/src/application/models/domMutationContinuation.ts +0 -7
  447. package/src/application/models/domObservationStrategy.ts +0 -9
  448. package/src/application/service/cachingService.ts +0 -84
  449. package/src/application/service/cdnService.ts +0 -20
  450. package/src/application/service/customerService/index.ts +0 -8
  451. package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +0 -15
  452. package/src/application/service/domMutationObserver.ts +0 -320
  453. package/src/application/service/domMutations/GridInsertionService.ts +0 -123
  454. package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +0 -99
  455. package/src/application/service/domMutations/domInsertionService.ts +0 -90
  456. package/src/application/service/domMutations/domMutationListener.ts +0 -15
  457. package/src/application/service/domMutations/domMutationListenerState.ts +0 -52
  458. package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +0 -41
  459. package/src/application/service/domMutations/gladly/gladlyListener.ts +0 -61
  460. package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +0 -41
  461. package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +0 -119
  462. package/src/application/service/featureFlagService.ts +0 -130
  463. package/src/application/service/graphqlConfigService.ts +0 -59
  464. package/src/application/service/index.ts +0 -32
  465. package/src/application/service/kustomerIntegrationService.ts +0 -111
  466. package/src/application/service/localStorageService.ts +0 -77
  467. package/src/application/service/pageVariantService.ts +0 -866
  468. package/src/application/service/searchService.ts +0 -147
  469. package/src/application/service/sessionStorageService.ts +0 -27
  470. package/src/application/service/shopifyUrlService.ts +0 -63
  471. package/src/application/service/userIdentityService.ts +0 -114
  472. package/src/application/service/windowChatToggleService.ts +0 -80
  473. package/src/application/service/windowDataLayerService.ts +0 -181
  474. package/src/application/service/windowFrontendConfigService.ts +0 -129
  475. package/src/atoms/org/merchantCss.ts +0 -161
  476. package/src/atoms/org/org.ts +0 -251
  477. package/src/atoms/org/orgUIConfig.ts +0 -142
  478. package/src/enabled-features.ts +0 -83
  479. package/src/hooks/useDynamicVariants.ts +0 -226
  480. package/src/hooks/useFileUpload.ts +0 -63
  481. package/src/hooks/useHideElements.ts +0 -85
  482. package/src/interceptors/useFormEscalation.ts +0 -57
  483. /package/dist/{locators-DnKpajbY.js → atomStore-CZnUUsrr.js} +0 -0
  484. /package/dist/{locators-CugndTUM.cjs → atomStore-KSoFS3Jj.cjs} +0 -0
  485. /package/dist/{utilityTypes-C4h2wgAK.cjs → locators-0YYZu9n4.cjs} +0 -0
  486. /package/dist/{utilityTypes-BVikejDo.js → locators-fBXS_pxP.js} +0 -0
  487. /package/dist/{variantInfo-CzhR5W6h.js → utilityTypes-8sETsYPk.js} +0 -0
  488. /package/dist/{variantInfo-CNRTY0gH.cjs → utilityTypes-COShxVir.cjs} +0 -0
  489. /package/src/{application/service/customerService/types.ts → types/customerService.ts} +0 -0
  490. /package/src/{adapters/spiffy/commerce → types}/exceptions/sessionExceptions.ts +0 -0
  491. /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,21 +1,27 @@
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 "./useGraphQLConfig";
11
+ export * from "./useIdentifyUser";
10
12
  export * from "./useImageResolver";
11
13
  export * from "./useIntersection";
12
14
  export * from "./useIsSmallScreen";
15
+ export * from "./useLocalStorageOperations";
13
16
  export * from "./useMessageFilter";
14
17
  export * from "./useMessageScrollObserver";
18
+ export * from "./useNewOrgConfig";
15
19
  export * from "./useSearch";
20
+ export * from "./useSearchOperations";
21
+ export * from "./useSessionStorageOperations";
22
+ export * from "./useShopifyUrlOperations";
16
23
  export * from "./useSnapCalculator";
17
24
  export * from "./useSystemSettingsContext";
18
25
  export * from "./useTrackComponentVisibleEvent";
19
26
  export * from "./useUpdateAnalyticsProps";
20
- export * from "./useNewOrgConfig";
21
27
  export * from "./utils";
@@ -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
1
  import { useAtomValue } from "jotai";
2
2
  import { OrgShortName } from "src/application/models";
3
- import { orgUIConfigAtom } from "src/atoms/org/orgUIConfig";
4
-
3
+ import { orgShortNameAtom } from "src/atoms/envive/enviveConfig";
5
4
  abstract class ImageResolver {
6
5
  abstract resolve(url: string, size: number): string;
7
6
  }
@@ -42,12 +41,13 @@ class ShopifyImageResolver extends ImageResolver {
42
41
  }
43
42
 
44
43
  export const useImageResolver = () => {
45
- const orgUIConfig = useAtomValue(orgUIConfigAtom);
44
+ const orgShortName = useAtomValue(orgShortNameAtom);
46
45
  const resolve = (image?: string, size?: number) => {
47
- if (image && size && orgUIConfig?.shortName) {
48
- const newImagePath = MerchantImageResolver.get(
49
- orgUIConfig.shortName
50
- )?.resolve(image, size);
46
+ if (image && size && orgShortName) {
47
+ const newImagePath = MerchantImageResolver.get(orgShortName)?.resolve(
48
+ image,
49
+ size
50
+ );
51
51
  return newImagePath || image;
52
52
  }
53
53
  return image;