@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
@@ -0,0 +1,466 @@
1
+ import React, {
2
+ createContext,
3
+ useContext,
4
+ useCallback,
5
+ useMemo,
6
+ useEffect,
7
+ } from "react";
8
+ import { useAtomValue } from "jotai";
9
+ import { createInstance } from "@amplitude/analytics-browser";
10
+ import { FeatureGates } from "src/application/models/featureGates";
11
+ import { OrgShortName } from "src/application/models";
12
+ import { EventsDispatcher, SpiffyEvent } from "src/events";
13
+ import {
14
+ amplitudeApiKeyAtom,
15
+ contextSourceAtom,
16
+ dataResidencyAtom,
17
+ identifyingPrefixAtom,
18
+ } from "src/atoms/envive/enviveConfig";
19
+ import {
20
+ LocalStorageKeys,
21
+ useLocalStorage,
22
+ } from "src/contexts/localStorageContext";
23
+ import { orgAnalyticsGoogleAnalyticsConfigAtom } from "src/atoms/org/orgAnalyticsConfig";
24
+ import { userIdAtom } from "src/atoms/app";
25
+ import { envAtom } from "src/atoms/envive/enviveConfig";
26
+ import Logger from "src/application/logging/logger";
27
+ import type {
28
+ BrowserClient,
29
+ EnrichmentPlugin,
30
+ Event,
31
+ ServerZoneType,
32
+ } from "@amplitude/analytics-types";
33
+ import { useEnviveConfig } from "src/contexts/enviveConfigContext";
34
+ import { OrgConfigFeatureGate } from "src/application/models/api/orgConfigResults";
35
+
36
+ export enum SpiffyMetricsEventName {
37
+ BundleLoaded = "Bundle Loaded",
38
+ ChatLiveAgentBtnClick = "Chat Live Agent Btn Click",
39
+ ChatFloatingButtonVisible = "Chat Floating Button Visible",
40
+ ChatComponentVisible = "Chat Component Visible",
41
+ ChatComponentExpanded = "Chat Component Expanded",
42
+ ChatComponentCollapsed = "Chat Component Collapsed",
43
+ ChatUserMessageInput = "Chat User Message Input",
44
+ ChatSuggestionClicked = "Chat Suggestion Clicked",
45
+ ChatAssistantResponse = "Chat Assistant Response",
46
+ ProductCardClicked = "Product Card Clicked",
47
+ ProductReviewCardClicked = "Product Review Card Clicked",
48
+ AddToCartClicked = "Add to Cart Clicked",
49
+ PromptCardClicked = "Prompt Card Clicked",
50
+ SupportedEvent = "Supported Event",
51
+ SearchBackToResponseClicked = "Search Back to Response Clicked",
52
+ PerformanceMetrics = "Performance Metrics",
53
+ SearchBarClicked = "Search Bar Clicked",
54
+ OrderLookupStarted = "Order Lookup Started",
55
+ OrderLookupFormSubmitted = "Order Lookup Form Submitted",
56
+ SearchComponentVisible = "Search Component Visible",
57
+ SearchZeroStateSuggestionClicked = "Search Zero State Suggestion Clicked", // This is the scrolling list of suggestion buttons in global search
58
+ SearchInputStarted = "Search Input Started",
59
+ SearchQuerySubmitted = "Search Query Submitted",
60
+ // SearchAutocompleteViewed = 'Search Autocomplete Viewed', // TODO: add this when autocomplete is added
61
+ // SearchAutocompleteClicked = 'Search Autocomplete Clicked', // TODO: add this when autocomplete is added
62
+ SearchResultsViewed = "Search Results Viewed",
63
+ SearchTimeToFirstClick = "Search Time to First Click",
64
+ SearchZeroResultsRate = "Search Zero Results Rate",
65
+ SearchFilterClicked = "Search Filter Clicked",
66
+ SearchSortClicked = "Search Sort Clicked",
67
+ }
68
+
69
+ interface TrackEventParams {
70
+ eventName: SpiffyMetricsEventName;
71
+ eventProps?: Record<string, unknown>;
72
+ eventGroups?: Record<string, unknown>;
73
+ alsoSendToGoogleAnalytics?: boolean;
74
+ }
75
+
76
+ interface AmplitudeContextType {
77
+ trackEvent: (params: TrackEventParams) => Promise<void>;
78
+ isReady: boolean;
79
+ setSupplementalDefaultProps: (props: Record<string, unknown>) => void;
80
+ }
81
+
82
+ const AmplitudeContext = createContext<AmplitudeContextType | null>(null);
83
+
84
+ export const AmplitudeProvider: React.FC<{ children: React.ReactNode }> = ({
85
+ children,
86
+ }) => {
87
+ const userId = useAtomValue(userIdAtom);
88
+ const amplitudeApiKey = useAtomValue(amplitudeApiKeyAtom);
89
+ const dataResidency = useAtomValue(dataResidencyAtom);
90
+ const orgGaConfig = useAtomValue(orgAnalyticsGoogleAnalyticsConfigAtom);
91
+ const env = useAtomValue(envAtom);
92
+ const contextSource = useAtomValue(contextSourceAtom);
93
+ const identifyingPrefix = useAtomValue(identifyingPrefixAtom);
94
+ const { getItem } = useLocalStorage();
95
+ const {
96
+ publicKey,
97
+ featureOverrides,
98
+ variantUrlOverride,
99
+ variantInfoOverride,
100
+ show,
101
+ orgShortName,
102
+ featureGates,
103
+ } = useEnviveConfig();
104
+
105
+ const useFeatureFlagService = () => {
106
+ const isFeatureGateEnabled = useCallback(
107
+ (gate: string) => {
108
+ const override = featureOverrides?.[gate];
109
+ if (override !== undefined) {
110
+ return override;
111
+ }
112
+ return (
113
+ featureGates?.some((fg) => fg.name === gate && fg.value) || false
114
+ );
115
+ },
116
+ [featureOverrides, featureGates]
117
+ );
118
+
119
+ const isClientSessionEnabled = useCallback(() => {
120
+ // Assuming this is a feature gate, or needs to be explicitly passed
121
+ return isFeatureGateEnabled(FeatureGates.IsClientSessionEnabled);
122
+ }, [isFeatureGateEnabled]);
123
+
124
+ const getFeatureFlags = useCallback(() => {
125
+ const flags: Record<string, boolean> = {};
126
+ if (featureOverrides) {
127
+ Object.entries(featureOverrides).forEach(([key, value]) => {
128
+ flags[key] = value;
129
+ });
130
+ }
131
+ if (featureGates) {
132
+ featureGates.forEach((fg) => {
133
+ if (fg.name) {
134
+ flags[fg.name] = Boolean(fg.value);
135
+ }
136
+ });
137
+ }
138
+ return flags;
139
+ }, [featureOverrides, featureGates]);
140
+
141
+ return {
142
+ isFeatureGateEnabled,
143
+ isClientSessionEnabled,
144
+ getFeatureFlags,
145
+ };
146
+ };
147
+
148
+ const featureFlagService = useFeatureFlagService();
149
+
150
+ const [amplitudeClient, setAmplitudeClient] = React.useState<
151
+ BrowserClient | undefined
152
+ >(undefined);
153
+ const [internalEventTrackingEnrichment, setInternalEventTrackingEnrichment] =
154
+ React.useState<EnrichmentPlugin | undefined>(undefined);
155
+ const [supplementalDefaultProps, setSupplementalDefaultProps] =
156
+ React.useState<Record<string, unknown>>({});
157
+
158
+ const isReady = Boolean(userId && featureFlagService && amplitudeApiKey);
159
+
160
+ const getDefaultTrackingProps = useCallback((): Record<string, unknown> => {
161
+ const gatesProps = featureGates
162
+ ? featureGates.reduce<Record<string, boolean>>((acc, curr) => {
163
+ if (curr.name && curr.value != null) {
164
+ return { ...acc, [`feature_gate.${curr.name}`]: curr.value };
165
+ }
166
+ return acc;
167
+ }, {})
168
+ : {};
169
+ const experimentProps = {}; // No direct equivalent for experiments in EnviveConfig yet
170
+
171
+ const orgLevelAmplitudeTrackingProps = {
172
+ ...gatesProps,
173
+ ...experimentProps,
174
+ };
175
+
176
+ return {
177
+ ...orgLevelAmplitudeTrackingProps,
178
+ ...supplementalDefaultProps,
179
+ // TODO: org_id is not directly available in EnviveConfig. Need to find a new source or derive it.
180
+ // org_id: orgConfig?.org?.org?.id,
181
+ app_id: "commerce-chat-react-component",
182
+ chat_id: getItem(LocalStorageKeys.ChatId),
183
+ env: env || "unknown",
184
+ app_source: contextSource,
185
+ "org.short_name": orgShortName,
186
+ "user.id": userId,
187
+ "cdp.user_id": null,
188
+ "cdp.provider": null,
189
+ "event.source": "web-browser",
190
+ "event.type": "user-activity",
191
+ "event.id": null,
192
+ "event.channel": "web",
193
+ "event.timestamp": null,
194
+ };
195
+ }, [
196
+ featureGates,
197
+ supplementalDefaultProps,
198
+ env,
199
+ contextSource,
200
+ orgShortName,
201
+ userId,
202
+ ]);
203
+
204
+ const eventPropsToPrefixedEventProps = useCallback(
205
+ (
206
+ eventName: SpiffyMetricsEventName,
207
+ eventProps: Record<string, unknown>
208
+ ): Record<string, unknown> => {
209
+ const prefix = eventName.toLowerCase().replace(/\s+/g, "_");
210
+ return Object.entries(eventProps).reduce((acc, [key, value]) => {
211
+ acc[`${prefix}.${key}`] = value;
212
+ return acc;
213
+ }, {} as Record<string, unknown>);
214
+ },
215
+ []
216
+ );
217
+
218
+ const amplitudeSessionReplayInit = useCallback((): boolean => {
219
+ const isEnabled = Boolean(
220
+ orgShortName === OrgShortName.UniqueVintage &&
221
+ featureFlagService?.isClientSessionEnabled() &&
222
+ featureFlagService?.isFeatureGateEnabled(
223
+ FeatureGates.IsNewFeatureEnabled
224
+ )
225
+ );
226
+ const sampleRate = 1;
227
+
228
+ try {
229
+ Logger.logDebug(
230
+ `[spiffy-ai] amplitude session-replay initializing isEnabled=${isEnabled} sampleRate=${sampleRate}`
231
+ );
232
+
233
+ if (!isEnabled) {
234
+ return isEnabled;
235
+ }
236
+
237
+ // amplitudeInstance.add(sessionReplayPlugin({ sampleRate }));
238
+
239
+ return isEnabled;
240
+ } catch (e) {
241
+ Logger.logError(
242
+ "[spiffy-ai] Error initializing amplitude session-replay",
243
+ e
244
+ );
245
+ return false;
246
+ }
247
+ }, [orgShortName, featureFlagService]);
248
+
249
+ const getEventTrackingEnrichment = useCallback((): EnrichmentPlugin => {
250
+ if (internalEventTrackingEnrichment !== undefined) {
251
+ return internalEventTrackingEnrichment;
252
+ }
253
+
254
+ const enrichment: EnrichmentPlugin = {
255
+ name: "page-view-tracking-enrichment",
256
+ type: "enrichment",
257
+ setup: async () => undefined,
258
+ execute: async (event: Event): Promise<Event> => {
259
+ let enrichedEvent: Event;
260
+
261
+ const eventsToEnrich = [
262
+ "[Amplitude] Page Viewed",
263
+ `[Spiffy] ${SpiffyMetricsEventName.BundleLoaded}`,
264
+ ];
265
+
266
+ if (eventsToEnrich.includes(event.event_type)) {
267
+ const globalProperties: Record<string, string> = {};
268
+
269
+ if (publicKey) {
270
+ globalProperties["globalProperties.publicKey"] = publicKey;
271
+ }
272
+ if (featureOverrides) {
273
+ Object.entries(featureOverrides).forEach(([key, value]) => {
274
+ globalProperties[`globalProperties.featureOverrides.${key}`] =
275
+ String(value);
276
+ });
277
+ }
278
+ if (variantUrlOverride) {
279
+ globalProperties["globalProperties.variantUrlOverride"] =
280
+ variantUrlOverride;
281
+ }
282
+ if (variantInfoOverride) {
283
+ globalProperties["globalProperties.variantInfoOverride"] =
284
+ JSON.stringify(variantInfoOverride);
285
+ }
286
+ if (show != null) {
287
+ globalProperties["globalProperties.show"] = String(show);
288
+ }
289
+
290
+ const enabledFeatures = featureFlagService!.getFeatureFlags();
291
+ const enabledFeaturesProperties = Object.entries(
292
+ enabledFeatures
293
+ ).reduce<Record<string, string>>(
294
+ (acc, [key, value]) => ({
295
+ ...acc,
296
+ [`enabledFeatures.${key}`]: `${value}`,
297
+ }),
298
+ {}
299
+ );
300
+
301
+ const timingProperties = {
302
+ "timing.enriched_at_ms": window.performance?.now(),
303
+ };
304
+
305
+ enrichedEvent = {
306
+ ...event,
307
+ event_properties: {
308
+ ...event.event_properties,
309
+ ...getDefaultTrackingProps(),
310
+ ...globalProperties,
311
+ ...enabledFeaturesProperties,
312
+ ...timingProperties,
313
+ },
314
+ };
315
+ } else {
316
+ enrichedEvent = event;
317
+ }
318
+
319
+ EventsDispatcher.dispatch(SpiffyEvent.AMPLITUDE_EVENT, enrichedEvent);
320
+
321
+ return enrichedEvent;
322
+ },
323
+ };
324
+ setInternalEventTrackingEnrichment(enrichment);
325
+ return enrichment;
326
+ }, [
327
+ internalEventTrackingEnrichment,
328
+ getDefaultTrackingProps,
329
+ featureFlagService,
330
+ publicKey,
331
+ featureOverrides,
332
+ variantUrlOverride,
333
+ variantInfoOverride,
334
+ show,
335
+ ]);
336
+
337
+ useEffect(() => {
338
+ if (isReady && !amplitudeClient) {
339
+ const currentAmplitudeInstance: BrowserClient = createInstance();
340
+ const isSessionsEnabled = amplitudeSessionReplayInit();
341
+ currentAmplitudeInstance.add(getEventTrackingEnrichment());
342
+ currentAmplitudeInstance.init(amplitudeApiKey!, userId!, {
343
+ serverZone: dataResidency as ServerZoneType,
344
+ trackingOptions: {
345
+ ipAddress: true,
346
+ },
347
+ autocapture: {
348
+ attribution: true,
349
+ pageViews: {
350
+ trackHistoryChanges: "pathOnly",
351
+ },
352
+ sessions: isSessionsEnabled,
353
+ formInteractions: false,
354
+ fileDownloads: false,
355
+ },
356
+ });
357
+ setAmplitudeClient(currentAmplitudeInstance);
358
+ }
359
+ }, [
360
+ isReady,
361
+ amplitudeClient,
362
+ amplitudeApiKey,
363
+ userId,
364
+ dataResidency,
365
+ amplitudeSessionReplayInit,
366
+ getEventTrackingEnrichment,
367
+ ]);
368
+
369
+ const trackEvent = useCallback(
370
+ async ({
371
+ eventName,
372
+ eventProps,
373
+ eventGroups,
374
+ alsoSendToGoogleAnalytics = false,
375
+ }: TrackEventParams): Promise<void> => {
376
+ try {
377
+ const decoratedEventName = `[Spiffy] ${eventName}`;
378
+
379
+ if (!amplitudeClient) {
380
+ Logger.logWarn("amplitude client undefined", undefined, {
381
+ event_name: decoratedEventName,
382
+ });
383
+ return;
384
+ }
385
+
386
+ const eventData = JSON.stringify({
387
+ eventName,
388
+ eventProps,
389
+ created_at: new Date().toISOString(),
390
+ });
391
+ const encoder = new TextEncoder();
392
+ const data = encoder.encode(eventData);
393
+ const hashBuffer = await crypto.subtle.digest("SHA-256", data);
394
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
395
+ const currentInsertId = hashArray
396
+ .map((b) => b.toString(16).padStart(2, "0"))
397
+ .join("");
398
+
399
+ Logger.logDebug(`amplitude tracking ${decoratedEventName}`, null, {
400
+ event_name: decoratedEventName,
401
+ props: eventProps,
402
+ });
403
+
404
+ amplitudeClient.track(
405
+ decoratedEventName,
406
+ {
407
+ ...getDefaultTrackingProps(),
408
+ ...eventProps,
409
+ ...(eventProps
410
+ ? eventPropsToPrefixedEventProps(eventName, eventProps)
411
+ : {}),
412
+ },
413
+ {
414
+ ...eventGroups,
415
+ insert_id: currentInsertId,
416
+ }
417
+ );
418
+
419
+ if (alsoSendToGoogleAnalytics && orgGaConfig) {
420
+ Logger.logDebug("[spiffy-ai] GA tracking", decoratedEventName);
421
+ if (window.dataLayer) {
422
+ (window.dataLayer as any[]).push({
423
+ event: decoratedEventName,
424
+ eventProps: eventProps,
425
+ });
426
+ }
427
+ }
428
+ } catch (err) {
429
+ Logger.logError("[spiffy-ai] Error tracking event", err, {
430
+ eventName,
431
+ eventProps,
432
+ });
433
+ }
434
+ },
435
+ [
436
+ amplitudeClient,
437
+ getDefaultTrackingProps,
438
+ eventPropsToPrefixedEventProps,
439
+ orgGaConfig,
440
+ ]
441
+ );
442
+
443
+ const value = useMemo(
444
+ () => ({
445
+ trackEvent,
446
+ isReady,
447
+ setSupplementalDefaultProps: (props: Record<string, unknown>) =>
448
+ setSupplementalDefaultProps(props),
449
+ }),
450
+ [trackEvent, isReady, setSupplementalDefaultProps]
451
+ );
452
+
453
+ return (
454
+ <AmplitudeContext.Provider value={value}>
455
+ {children}
456
+ </AmplitudeContext.Provider>
457
+ );
458
+ };
459
+
460
+ export const useAmplitude = () => {
461
+ const context = useContext(AmplitudeContext);
462
+ if (!context) {
463
+ throw new Error("useAmplitude must be used within AmplitudeProvider");
464
+ }
465
+ return context;
466
+ };
@@ -0,0 +1,48 @@
1
+ import React, { createContext, useContext, useCallback, useMemo } from "react";
2
+ import { useAtomValue } from "jotai";
3
+ import { cdnUrlAtom } from "../atoms/envive/enviveConfig";
4
+
5
+ interface CdnContextType {
6
+ cdnUrl: string;
7
+ getCdnBasePath: () => string;
8
+ getAssetURL: (assetName: string, orgShortName: string) => string;
9
+ }
10
+
11
+ const CdnContext = createContext<CdnContextType | null>(null);
12
+
13
+ export const CdnProvider: React.FC<{ children: React.ReactNode }> = ({
14
+ children,
15
+ }) => {
16
+ const cdnUrlAtomValue = useAtomValue(cdnUrlAtom);
17
+ const cdnUrl = cdnUrlAtomValue || "https://cdn.spiffy.ai/other";
18
+
19
+ const getCdnBasePath = useCallback(() => {
20
+ return cdnUrl;
21
+ }, [cdnUrl]);
22
+
23
+ const getAssetURL = useCallback(
24
+ (assetName: string, orgShortName: string) => {
25
+ return `${getCdnBasePath()}/assets/${orgShortName}/${assetName}`;
26
+ },
27
+ [getCdnBasePath]
28
+ );
29
+
30
+ const value = useMemo(
31
+ () => ({
32
+ cdnUrl,
33
+ getCdnBasePath,
34
+ getAssetURL,
35
+ }),
36
+ [cdnUrl, getCdnBasePath, getAssetURL]
37
+ );
38
+
39
+ return <CdnContext.Provider value={value}>{children}</CdnContext.Provider>;
40
+ };
41
+
42
+ export const useCdn = () => {
43
+ const context = useContext(CdnContext);
44
+ if (!context) {
45
+ throw new Error("useCdn must be used within a CdnProvider");
46
+ }
47
+ return context;
48
+ };
@@ -8,9 +8,9 @@ import {
8
8
  useCallback,
9
9
  useMemo,
10
10
  } from "react";
11
- import CommerceApiClient from "src/adapters/spiffy/commerce/api";
11
+ import CommerceApiClient from "src/application/commerce-api";
12
12
  import { v4 as uuid } from "uuid";
13
- import { SessionRestartRequired } from "src/adapters/spiffy/commerce/exceptions/sessionExceptions";
13
+ import { SessionRestartRequired } from "src/types/exceptions/sessionExceptions";
14
14
  import Logger from "src/application/logging/logger";
15
15
  import {
16
16
  Message,
@@ -19,10 +19,7 @@ import {
19
19
  NextMessageRequest,
20
20
  Response,
21
21
  } from "src/application/models";
22
- import {
23
- AmplitudeAdapter,
24
- SpiffyMetricsEventName,
25
- } from "src/adapters/amplitude";
22
+ import { SpiffyMetricsEventName } from "src/contexts/amplitudeContext";
26
23
  import { messageFromResponse } from "src/application/utils";
27
24
  import { chatIdAtom, userIdAtom, variantInfoAtom } from "src/atoms/app";
28
25
  import {
@@ -43,7 +40,6 @@ import {
43
40
  handleSearchResultsAtom,
44
41
  chatSearchIsLoadingAtom,
45
42
  } from "src/atoms/search/chatSearch";
46
- import { orgIdAtom } from "src/atoms/org/org";
47
43
  import { useSystemSettingsContext } from "src/hooks";
48
44
  import { createAppLoadedEvent, createVisitUserEvent } from "src/hooks/utils";
49
45
  import { useMessageInterceptor } from "src/interceptors/useMessageInterceptor";
@@ -57,6 +53,7 @@ import {
57
53
  userEventQueueAtom,
58
54
  userQueueEventCountAtom,
59
55
  } from "src/atoms/chat/messageQueue";
56
+ import { useAmplitudeTracking } from "src/hooks/useAmplitudeOperations";
60
57
 
61
58
  /**
62
59
  * Record the chat assistant response in Amplitude
@@ -66,7 +63,11 @@ import {
66
63
  */
67
64
  const recordAssistantResponse = (
68
65
  startTimeMs: number,
69
- payload: NextMessageRequest
66
+ payload: NextMessageRequest,
67
+ track: (
68
+ eventName: SpiffyMetricsEventName,
69
+ eventProps?: Record<string, unknown>
70
+ ) => void
70
71
  ) => {
71
72
  const atomStore = getAtomStore();
72
73
  const chatState = atomStore.get(chatAtom);
@@ -115,8 +116,7 @@ const recordAssistantResponse = (
115
116
  eventProps.search_products_sort_type = searchProductsSort;
116
117
  }
117
118
 
118
- AmplitudeAdapter.trackEvent({
119
- eventName: SpiffyMetricsEventName.ChatAssistantResponse,
119
+ track(SpiffyMetricsEventName.ChatAssistantResponse, {
120
120
  eventProps,
121
121
  });
122
122
  };
@@ -252,13 +252,15 @@ const ChatContextProvider = ({ children }: { children: ReactNode }) => {
252
252
  const userId = useAtomValue(userIdAtom);
253
253
  const chatId = useAtomValue(chatIdAtom);
254
254
  const supportedEvent = useAtomValue(supportedEventAtom);
255
- const orgId = useAtomValue(orgIdAtom);
255
+ // TODO: Replace with actual orgId from useEnviveConfig or NewOrgConfigContext when available
256
+ const orgId = "mock-org-id";
256
257
 
257
258
  const variantInfo = useAtomValue(variantInfoAtom);
258
259
  const settingsContext = useSystemSettingsContext();
259
260
  const messageInterceptor = useMessageInterceptor();
260
261
  const handleSearchResults = useSetAtom(handleSearchResultsAtom);
261
262
  const setSearchIsLoading = useSetAtom(chatSearchIsLoadingAtom);
263
+ const { track } = useAmplitudeTracking();
262
264
 
263
265
  const getStreamingResponses = useCallback(
264
266
  async (
@@ -340,7 +342,7 @@ const ChatContextProvider = ({ children }: { children: ReactNode }) => {
340
342
 
341
343
  await getStreamingResponses(requestPayload);
342
344
 
343
- recordAssistantResponse(startTimeMs, requestPayload);
345
+ recordAssistantResponse(startTimeMs, requestPayload, track);
344
346
  await getSuggestions();
345
347
  } catch (error) {
346
348
  Logger.logError("[spiffy-ai] getResponses error", error);
@@ -361,6 +363,7 @@ const ChatContextProvider = ({ children }: { children: ReactNode }) => {
361
363
  markUserEventsProcessed,
362
364
  getSuggestions,
363
365
  setUserHasReplied,
366
+ track,
364
367
  ]
365
368
  );
366
369
 
@@ -3,6 +3,7 @@ import { useSetAtom, useAtomValue } from "jotai";
3
3
  import type { EnviveConfig } from "./types";
4
4
  import { enviveConfigAtom } from "src/atoms/envive/enviveConfig";
5
5
  import Logger from "src/application/logging/logger";
6
+ import { OrgConfigFeatureGate } from "src/application/models/api/orgConfigResults";
6
7
 
7
8
  const EnviveConfigContext = createContext<EnviveConfig | undefined>(undefined);
8
9
 
@@ -18,6 +19,12 @@ interface EnviveConfigProviderProps {
18
19
  orgLevelApiKey?: string;
19
20
  orgShortName?: string;
20
21
  identifyingPrefix: string;
22
+ featureOverrides?: Record<string, boolean>;
23
+ variantUrlOverride?: string;
24
+ variantInfoOverride?: any;
25
+ show?: boolean;
26
+ publicKey?: string;
27
+ featureGates?: OrgConfigFeatureGate[]; // New prop for feature gates
21
28
  }
22
29
 
23
30
  export const EnviveConfigProvider: React.FC<EnviveConfigProviderProps> = ({
@@ -32,8 +39,15 @@ export const EnviveConfigProvider: React.FC<EnviveConfigProviderProps> = ({
32
39
  orgLevelApiKey,
33
40
  orgShortName,
34
41
  identifyingPrefix,
42
+ featureOverrides,
43
+ variantUrlOverride,
44
+ variantInfoOverride,
45
+ show,
46
+ publicKey,
47
+ featureGates, // Destructure new prop
35
48
  }) => {
36
49
  const setEnviveConfig = useSetAtom(enviveConfigAtom);
50
+
37
51
  const config: EnviveConfig = {
38
52
  amplitudeApiKey,
39
53
  dataResidency,
@@ -45,6 +59,12 @@ export const EnviveConfigProvider: React.FC<EnviveConfigProviderProps> = ({
45
59
  orgLevelApiKey,
46
60
  orgShortName,
47
61
  identifyingPrefix,
62
+ featureOverrides,
63
+ variantUrlOverride,
64
+ variantInfoOverride,
65
+ show,
66
+ publicKey,
67
+ featureGates, // Add to config
48
68
  };
49
69
 
50
70
  useEffect(() => {
@@ -54,28 +74,13 @@ export const EnviveConfigProvider: React.FC<EnviveConfigProviderProps> = ({
54
74
 
55
75
  return (
56
76
  <EnviveConfigContext.Provider value={config}>
57
- {children}
77
+ {config ? children : null}
58
78
  </EnviveConfigContext.Provider>
59
79
  );
60
80
  };
61
81
 
62
82
  export const useEnviveConfig = (): EnviveConfig => {
63
83
  const config = useAtomValue(enviveConfigAtom);
64
- Logger.logDebug("useEnviveConfig: Accessing EnviveConfig", config);
65
-
66
- // During initial render, the atom might not be set yet, so we need to be more patient
67
- // The EnviveConfigProvider will set it in its useEffect
68
- if (!config) {
69
- // Instead of throwing immediately, let's return a default/empty config
70
- // This prevents the error during initial render
71
- Logger.logWarn(
72
- "EnviveConfig not yet available, returning default config",
73
- undefined
74
- );
75
- return {
76
- identifyingPrefix: "spiffy", // This is required, so provide a default
77
- } as EnviveConfig;
78
- }
79
84
 
80
- return config;
85
+ return config ? config : {};
81
86
  };