@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
@@ -1,147 +0,0 @@
1
- import {
2
- Configuration,
3
- ResponseCategory,
4
- ResponseError,
5
- SearchApi,
6
- } from "@spiffy-ai/commerce-api-client";
7
- import { getAtomStore } from "src/atoms/atomStore/atomStore";
8
- import { apiKeyAtom } from "src/atoms/org/org";
9
- import { appDetailsAtom } from "src/atoms/app";
10
- import Logger from "src/application/logging/logger";
11
- import { SessionRestartRequired } from "src/adapters/spiffy/commerce/exceptions/sessionExceptions";
12
- import { UnsupportedProductException } from "src/adapters/spiffy/commerce/exceptions/unsupportedProductExceptions";
13
- import { SearchResult, SearchParams } from "../models/api/search";
14
- import { baseUrlAtom } from "src/atoms/envive/enviveConfig";
15
-
16
- const transformProductResponses = (products: SearchResult["products"]) =>
17
- products.map((data) => ({
18
- id: data.id,
19
- responseId: data.response_id,
20
- category: ResponseCategory.Product,
21
- description: data.description,
22
- imageUrl: data.image_url,
23
- imageUrls: data.image_urls,
24
- title: data.title,
25
- url: data.url,
26
- originalPrice: data.original_price,
27
- salePrice: data.sale_price,
28
- averageRating: data.average_rating,
29
- numberReviews: data.number_reviews,
30
- metadata: data.metadata,
31
- isForGrid: data.is_for_grid,
32
- colors: data.colors,
33
- sizes: data.sizes,
34
- filters: data.filters,
35
- }));
36
-
37
- async function errorResponseBody(error: ResponseError) {
38
- try {
39
- return await error.response.json();
40
- } catch {
41
- return {};
42
- }
43
- }
44
-
45
- async function throwSessionRestartRequiredIf(errorMsg: string, error: unknown) {
46
- if (!(error instanceof ResponseError)) {
47
- Logger.logInfo(errorMsg, error);
48
- throw error;
49
- }
50
-
51
- const errorResponse = await errorResponseBody(error);
52
- if (
53
- errorResponse?.message?.toLowerCase() === "unsupported product" ||
54
- errorResponse?.app_code?.toUpperCase() === "PRODUCT_NOT_FOUND"
55
- ) {
56
- throw new UnsupportedProductException();
57
- } else if (
58
- errorResponse?.app_code?.toUpperCase() === "RESTART_SESSION" ||
59
- errorResponse?.sub_code?.toUpperCase() === "NOT_FOUND"
60
- ) {
61
- Logger.logInfo(
62
- "Session does not exist. Re-start session",
63
- error,
64
- error.response,
65
- errorResponse
66
- );
67
- throw new SessionRestartRequired();
68
- }
69
-
70
- Logger.logInfo(errorMsg, error);
71
- throw error;
72
- }
73
-
74
- class SearchService {
75
- private readonly searchApi: SearchApi;
76
-
77
- private static instance: SearchService | undefined;
78
-
79
- private static getInstance = (): SearchService => {
80
- if (!SearchService.instance) {
81
- const atomStore = getAtomStore();
82
- const apiKey = atomStore.get(apiKeyAtom);
83
- if (!apiKey) {
84
- throw new Error(
85
- "[spiffy-ai] SearchService requires apiKey to be available"
86
- );
87
- }
88
- SearchService.instance = new SearchService(apiKey);
89
- }
90
- return SearchService.instance;
91
- };
92
-
93
- private constructor(apiKey: string, basePath?: string) {
94
- const atomStore = getAtomStore();
95
-
96
- const baseUrl = atomStore.get(baseUrlAtom);
97
- const path = basePath || baseUrl;
98
- const config: Configuration = new Configuration({
99
- accessToken: apiKey,
100
- basePath: path,
101
- headers: {
102
- "Content-Type": "application/json",
103
- Accept: "application/json",
104
- },
105
- });
106
- this.searchApi = new SearchApi(config);
107
- }
108
-
109
- private async _searchProducts(params: SearchParams): Promise<SearchResult> {
110
- const atomStore = getAtomStore();
111
- const appDetails = atomStore.get(appDetailsAtom);
112
- try {
113
- const response = await this.searchApi.v1SearchQueryGet({
114
- query: params.query,
115
- limit: params.limit,
116
- org_id: appDetails.orgId,
117
- user_id: appDetails.userId,
118
- });
119
- const {
120
- products,
121
- filters,
122
- search_response_id: searchResponseId,
123
- } = response;
124
-
125
- return {
126
- products: transformProductResponses(products) || [],
127
- filters: filters || [],
128
- totalProductCount: products?.length || 0,
129
- searchResponseId: searchResponseId || "",
130
- };
131
- } catch (error) {
132
- await throwSessionRestartRequiredIf("Failed to search products", error);
133
- // This part will not be reached if an exception is thrown, but it's required for type safety
134
- return {
135
- products: [],
136
- filters: [],
137
- totalProductCount: 0,
138
- searchResponseId: "",
139
- };
140
- }
141
- }
142
-
143
- static searchProducts = (params: SearchParams): Promise<SearchResult> =>
144
- SearchService.getInstance()._searchProducts(params);
145
- }
146
-
147
- export default SearchService;
@@ -1,27 +0,0 @@
1
- import Logger from '../logging/logger';
2
-
3
- class SessionStorageService {
4
- static setItem(key: string, value: string): void {
5
- sessionStorage.setItem(key, value);
6
- window.dispatchEvent(
7
- new StorageEvent('storage', {
8
- key,
9
- newValue: value,
10
- }),
11
- );
12
- }
13
-
14
- static getItem(key: string): string | null {
15
- return sessionStorage.getItem(key);
16
- }
17
-
18
- static getSessionStorage() {
19
- const ls = window?.sessionStorage;
20
- if (!ls) {
21
- Logger.logError('sessionStorage is not available', undefined);
22
- }
23
- return ls;
24
- }
25
- }
26
-
27
- export { SessionStorageService };
@@ -1,63 +0,0 @@
1
- import { IdExtractor } from 'src/contexts/types';
2
- import { parseHref } from 'src/application/utils/urlsParser';
3
-
4
- class ShopifyUrlService {
5
- static getTrimmedPathName(): string | null {
6
- let { pathname } = window.location;
7
- // strip out the proxy path so local dev still works
8
- pathname = pathname.replace('/proxy', '');
9
- // remove trailing hash if it exists
10
- pathname = pathname.replace(/#.*$/, '');
11
- // remove trailing /, ie. some URLs can end with '/' like /collections/cast-iron/
12
- pathname = pathname.replace(/\/$/, '');
13
-
14
- if (pathname === undefined || pathname === null || pathname.length === 0) {
15
- return null;
16
- }
17
-
18
- return pathname;
19
- }
20
-
21
- /**
22
- * Parses the URL to determine the PLP or PDP ID.
23
- *
24
- * @param extractor the type of extractor to parse segments of the page URL
25
- *
26
- * @returns the PLP or PDP ID if found, otherwise null
27
- */
28
- static getPlpOrPdpId(extractor: IdExtractor): string | null {
29
- if (extractor === 'shopify-product-variant-id') {
30
- const parsedHref = parseHref(window.location.href);
31
- // TODO: this extractor is unique to Spanx who uses the "variant" query param to identify the product.
32
- // variant. It should be flexible enough to support params defined in the page config
33
- const variantId = parsedHref?.urlSearchParams?.get('variant');
34
- // Allow the "shopify-product-variant-id" extractor to fallback to the "shopify-product-id" extractor
35
- if (!variantId) {
36
- return ShopifyUrlService.getPlpOrPdpId('shopify-product-id');
37
- }
38
- return variantId;
39
- }
40
-
41
- const pathSegment = extractor === 'shopify-product-id' ? 'products' : 'collections';
42
- const tokens = ShopifyUrlService.getTrimmedPathName()?.split('/');
43
- const idIndex = tokens?.findIndex((token) => token === pathSegment);
44
- if (idIndex !== undefined && idIndex >= 0 && tokens) {
45
- return decodeURIComponent(tokens[idIndex + 1]);
46
- }
47
- return null;
48
- }
49
-
50
- static isOnPdpPage(): boolean {
51
- return ShopifyUrlService.getTrimmedPathName()?.includes('/products') ?? false;
52
- }
53
-
54
- static isOnPlpPage(): boolean {
55
- return (
56
- (ShopifyUrlService.getTrimmedPathName()?.includes('/collections') &&
57
- !ShopifyUrlService.getTrimmedPathName()?.includes('/products')) ??
58
- false
59
- );
60
- }
61
- }
62
-
63
- export { ShopifyUrlService };
@@ -1,114 +0,0 @@
1
- import UAParser from 'ua-parser-js';
2
- import Logger from 'src/application/logging/logger';
3
- import CommerceApiClient from 'src/adapters/spiffy/commerce/api';
4
- import { v4 as uuid } from 'uuid';
5
- import { ClientDetails } from 'src/application/models/clientDetails';
6
- import { LocalStorageService } from 'src/application/service/localStorageService';
7
- import { WindowDataLayerService } from 'src/application/service/windowDataLayerService';
8
-
9
- const getUserAgentDetails = (): ClientDetails => {
10
- const uaParser = new UAParser();
11
- const result = uaParser.getResult();
12
-
13
- return {
14
- os: result?.os?.name, // Operating system name (e.g., "Windows", "iOS")
15
- osVersion: result?.os?.version, // Operating system version (e.g., "10", "14.1")
16
- deviceBrand: result?.device?.vendor, // Device brand (e.g., "Apple", "Samsung")
17
- deviceManufacturer: result?.device?.vendor, // Device manufacturer (e.g., "Apple", "Samsung")
18
- deviceModel: result?.device?.model, // Device model (e.g., "iPhone", "Galaxy S10")
19
- browser: result?.browser?.name, // Browser name (e.g., "Chrome", "Safari")
20
- browserVersion: result?.browser?.version, // Browser version
21
- userAgent: result?.ua, // User agent string
22
- };
23
- };
24
-
25
- class UserIdentityService {
26
- static USER_ID_OVERRIDE_KEY = 'v1-spiffy-user-id-override';
27
-
28
- static USER_ID_DEFAULT_KEY = 'v1-spiffy-user-id-default';
29
-
30
- static async identifyUser(): Promise<void> {
31
- try {
32
- const cdpUserId = WindowDataLayerService.getGoogleAnalyticsClientId();
33
- const userId = UserIdentityService.getUserIdOrDefault();
34
- const userAgentDetails = getUserAgentDetails();
35
-
36
- if (!cdpUserId) {
37
- Logger.logWarn('[spiffy-ai] No GA Client ID found, skipping identifyUser', undefined);
38
- return;
39
- }
40
-
41
- await CommerceApiClient.identifyUser(userId, cdpUserId, userAgentDetails);
42
- } catch (error) {
43
- Logger.logError('[spiffy-ai] Error identifying user', error);
44
- }
45
- }
46
-
47
- static getUserIdOrDefault(): string {
48
- const userIdOverride = UserIdentityService.getUserIdOverrideFromLocalStorage();
49
- if (userIdOverride) {
50
- return userIdOverride;
51
- }
52
-
53
- const defaultUserId = UserIdentityService.getUserIdDefaultFromLocalStorage();
54
- if (defaultUserId) {
55
- return defaultUserId;
56
- }
57
-
58
- return this.setUserIdDefaultInLocalStorage(`spiffy-user-id-${uuid()}`);
59
- }
60
-
61
- static getUserIdOverrideFromLocalStorage(): string | undefined {
62
- return (
63
- LocalStorageService.getLocalStorage()?.getItem(UserIdentityService.USER_ID_OVERRIDE_KEY) ??
64
- undefined
65
- );
66
- }
67
-
68
- static getUserIdDefaultFromLocalStorage(): string | undefined {
69
- return (
70
- LocalStorageService.getLocalStorage()?.getItem(UserIdentityService.USER_ID_DEFAULT_KEY) ??
71
- undefined
72
- );
73
- }
74
-
75
- static setUserIdDefaultInLocalStorage(userId: string): string {
76
- Logger.logInfo(`setUserIdDefaultInLocalStorage - Setting user_id=${userId}`);
77
- LocalStorageService.getLocalStorage()?.setItem(UserIdentityService.USER_ID_DEFAULT_KEY, userId);
78
- window.dispatchEvent(
79
- new StorageEvent('storage', {
80
- key: UserIdentityService.USER_ID_DEFAULT_KEY,
81
- newValue: userId,
82
- }),
83
- );
84
- return userId;
85
- }
86
-
87
- static setUserIdOverrideInLocalStorage(userId: string): string {
88
- Logger.logInfo(`setUserIdOverrideInLocalStorage - Setting user_id=${userId}`);
89
- LocalStorageService.getLocalStorage()?.setItem(
90
- UserIdentityService.USER_ID_OVERRIDE_KEY,
91
- userId,
92
- );
93
- window.dispatchEvent(
94
- new StorageEvent('storage', {
95
- key: UserIdentityService.USER_ID_OVERRIDE_KEY,
96
- newValue: userId,
97
- }),
98
- );
99
- return userId;
100
- }
101
-
102
- static clearUserIdOverrideInLocalStorage() {
103
- Logger.logInfo(`clearUserIdOverrideInLocalStorage - Clearing user_id`);
104
- LocalStorageService.getLocalStorage()?.removeItem(UserIdentityService.USER_ID_OVERRIDE_KEY);
105
- window.dispatchEvent(
106
- new StorageEvent('storage', {
107
- key: UserIdentityService.USER_ID_OVERRIDE_KEY,
108
- newValue: undefined,
109
- }),
110
- );
111
- }
112
- }
113
-
114
- export { UserIdentityService };
@@ -1,80 +0,0 @@
1
- import { useSetAtom } from "jotai";
2
- import { useEffect, useRef } from "react";
3
- import { Message, MessageRole, MessageType } from "src/application/models";
4
- import { handleReplyAtom } from "src/atoms/chat";
5
- import { useChatToggle } from "src/hooks";
6
- import { v4 as uuid } from "uuid";
7
- import Logger from "../logging/logger";
8
- import { ChatElementDisplayLocation } from "../models/chatElementDisplayLocation";
9
- import { getAtomStore } from "src/atoms/atomStore";
10
- import { identifyingPrefixAtom } from "src/atoms/envive/enviveConfig";
11
-
12
- let hasAttachedEnviveChatToggle = false;
13
-
14
- export const WindowChatToggleBinder = () => {
15
- const triggerLocation = ChatElementDisplayLocation.WINDOW_API_CALL;
16
- const hook = useChatToggle();
17
- const setReply = useSetAtom(handleReplyAtom);
18
-
19
- // Refs to hold latest implementations
20
- const openChatRef = useRef<(triggerId?: string) => void>();
21
- const closeChatRef = useRef<(triggerId?: string) => void>();
22
- const toggleChatRef = useRef<(triggerId?: string) => void>();
23
- const isOpenRef = useRef<boolean>(hook.isOpen);
24
- const openChatWithPromptRef =
25
- useRef<(prompt: string, triggerId?: string) => void>();
26
-
27
- // Keep refs up to date with latest hook/state
28
- useEffect(() => {
29
- openChatRef.current = (triggerId?: string) =>
30
- hook.openChat(triggerLocation, triggerId);
31
- closeChatRef.current = (triggerId?: string) =>
32
- hook.closeChat(triggerLocation, triggerId);
33
- toggleChatRef.current = (triggerId?: string) =>
34
- hook.toggle(triggerLocation, triggerId);
35
- isOpenRef.current = hook.isOpen;
36
- openChatWithPromptRef.current = (prompt: string, triggerId?: string) => {
37
- const message: Message = {
38
- id: uuid(),
39
- createdAt: new Date().toISOString(),
40
- role: MessageRole.User,
41
- type: MessageType.QueryTyped,
42
- metadata: {
43
- content: prompt,
44
- },
45
- };
46
- setReply({ message, userTyped: false });
47
- hook.openChat(triggerLocation, triggerId);
48
- };
49
- }, [hook, setReply, triggerLocation, hook.isOpen]);
50
-
51
- // Attach once; wrapper functions call through to refs
52
- useEffect(() => {
53
- if (hasAttachedEnviveChatToggle) return;
54
- const atomStore = getAtomStore();
55
- const identifyingPrefix = atomStore.get(identifyingPrefixAtom);
56
- try {
57
- if (!window[identifyingPrefix]) {
58
- window[identifyingPrefix] = {} as Window[typeof identifyingPrefix];
59
- }
60
- window[identifyingPrefix].openChat = (triggerId?: string) =>
61
- openChatRef.current?.(triggerId);
62
- window[identifyingPrefix].closeChat = (triggerId?: string) =>
63
- closeChatRef.current?.(triggerId);
64
- window[identifyingPrefix].toggleChat = (triggerId?: string) =>
65
- toggleChatRef.current?.(triggerId);
66
- window[identifyingPrefix].getChatIsOpen = () => !!isOpenRef.current;
67
- window[identifyingPrefix].openChatWithPrompt = (
68
- prompt: string,
69
- triggerId?: string
70
- ) => openChatWithPromptRef.current?.(prompt, triggerId);
71
-
72
- Logger.logDebug("[spiffy-ai] Chat toggle functions attached");
73
- hasAttachedEnviveChatToggle = true;
74
- } catch (e) {
75
- Logger.logError("[spiffy-ai] Failed to attach Chat toggle functions", e);
76
- }
77
- }, []);
78
-
79
- return null;
80
- };
@@ -1,181 +0,0 @@
1
- import Logger from 'src/application/logging/logger';
2
- import { OrgAnalyticsGoogleAnalyticsConfig } from 'src/application/models/api/orgAnalyticsConfig';
3
-
4
- declare global {
5
- interface Window {
6
- dataLayer: any;
7
- }
8
- }
9
-
10
- class WindowDataLayerService {
11
- private readonly dataLayer: any;
12
-
13
- private readonly originalDataLayerPush: any;
14
-
15
- private static instance: WindowDataLayerService | undefined;
16
-
17
- private readonly merchantGoogleMeasurementId: string;
18
-
19
- private constructor(private readonly gaConfig: OrgAnalyticsGoogleAnalyticsConfig) {
20
- this.dataLayer = window.dataLayer;
21
- this.originalDataLayerPush = this.dataLayer?.push;
22
- this.merchantGoogleMeasurementId = this.gaConfig.measurementId || 'default';
23
- }
24
-
25
- /**
26
- * Pushes data to the dataLayer
27
- * @param data
28
- * data has the shape: { event: 'event_name', ... }
29
- * Example:
30
- * {
31
- * "event": "add_to_cart",
32
- * "currency": "USD",
33
- * "value": 30.03,
34
- * "items": [
35
- * {
36
- * "item_id": "SKU_12345",
37
- * "item_name": "Stan and Friends Tee",
38
- * "affiliation": "Google Merchandise Store",
39
- * "coupon": "SUMMER_FUN",
40
- * "discount": 2.22,
41
- * "index": 0,
42
- * "item_brand": "Google",
43
- * "item_category": "Apparel",
44
- * "item_category2": "Adult",
45
- * "item_category3": "Shirts",
46
- * "item_category4": "Crew",
47
- * "item_category5": "Short sleeve",
48
- * "item_list_id": "related_products",
49
- * "item_list_name": "Related Products",
50
- * "item_variant": "green",
51
- * "location_id": "ChIJIQBpAG2ahYAR_6128GcTUEo",
52
- * "price": 10.01,
53
- * "quantity": 3
54
- * }
55
- * ]
56
- * }
57
- */
58
- push(data: any) {
59
- this.dataLayer?.push(data);
60
- }
61
-
62
- static isDataLayerAvailable(): boolean {
63
- const windowDataLayer = window.dataLayer;
64
- if (windowDataLayer && windowDataLayer.push) {
65
- return true;
66
- }
67
- Logger.logDebug('[spiffy-ai] DataLayerEventsListener dataLayer not available');
68
- return false;
69
- }
70
-
71
- static tryFlattenArguments(args: any): any {
72
- function isArguments(obj: any) {
73
- return obj !== undefined && Object.prototype.toString.call(obj) === '[object Arguments]';
74
- }
75
-
76
- try {
77
- const all_arguments = [];
78
- if (args.length > 0) {
79
- for (let i = 0; i < args.length; i++) {
80
- const arg = args[i];
81
- if (isArguments(arg)) {
82
- const flattened = WindowDataLayerService.tryFlattenArguments(arg);
83
- all_arguments.push(...flattened);
84
- } else {
85
- all_arguments.push(arguments[i]);
86
- }
87
- }
88
- }
89
- return all_arguments;
90
- } catch {
91
- return args;
92
- }
93
- }
94
-
95
- wrapWithProxyMethod(methodName: string, callback: Function) {
96
- if (!this.dataLayer) {
97
- Logger.logWarn('DataLayerEventsListener dataLayer not available', undefined);
98
- return;
99
- }
100
-
101
- const originalMethod = this.dataLayer[methodName];
102
- this.dataLayer[methodName] = function () {
103
- try {
104
- callback.apply(this, arguments);
105
- } catch (e) {
106
- Logger.logError(`Error in dataLayer.${methodName}: `, e);
107
- } finally {
108
- originalMethod.apply(this, arguments);
109
- }
110
- };
111
- }
112
-
113
- static getSingletonInstanceOf(
114
- gaConfig: OrgAnalyticsGoogleAnalyticsConfig,
115
- ): WindowDataLayerService {
116
- if (!WindowDataLayerService.instance) {
117
- WindowDataLayerService.instance = new WindowDataLayerService(gaConfig);
118
- }
119
-
120
- return WindowDataLayerService.instance;
121
- }
122
-
123
- sendToGoogleAnalyticsCircularEventsSafe(
124
- eventName: string,
125
- eventProps: Record<string, unknown> | undefined,
126
- ) {
127
- // To avoid circular events, we need only send the event to Google Analytics if it is not already in the dataLayer!
128
- // Example of a circular event:
129
- // 1. User clicks add to cart button
130
- // 2. dataLayer is updated with the add to cart event
131
- // 3. DataLayerEventsListener intercepts the add to cart event and sends it to Amplitude via MetricsService/MetricsContext
132
- // 4. MetricsService/MetricsContext calls this method to send the event to Google Analytics! <--- Circular event!!!
133
-
134
- const This = this;
135
-
136
- function doesEventExistInDataLayer(eventName: string) {
137
- return This.dataLayer?.find((event: any) => event.event === eventName);
138
- }
139
-
140
- if (doesEventExistInDataLayer(eventName)) {
141
- Logger.logDebug(
142
- `[spiffy-ai] Event ${eventName} already exists in dataLayer. Skipping Google Analytics event.`,
143
- );
144
- return;
145
- }
146
-
147
- function gtag() {
148
- if (This.originalDataLayerPush) {
149
- This.originalDataLayerPush(arguments);
150
- } else {
151
- Logger.logDebug('No originalDataLayerPush found - no metrics being logged');
152
- }
153
- }
154
-
155
- // @ts-ignore
156
- gtag('event', eventName, {
157
- event: eventName,
158
- send_to: this.merchantGoogleMeasurementId,
159
- ...eventProps,
160
- });
161
- }
162
-
163
- static getGoogleAnalyticsClientId = (): string | undefined => {
164
- try {
165
- // ga cookie has the format _ga=GA1.1.xxxxxxxxxx.yyyyyyyyyy
166
- const gaCookie = document.cookie.split(';').find((c) => c.trim().startsWith('_ga='));
167
-
168
- if (!gaCookie) {
169
- Logger.logWarn('[spiffy-ai] No GA cookie found', undefined);
170
- return undefined;
171
- }
172
-
173
- return gaCookie.split('.').slice(2).join('.');
174
- } catch (error) {
175
- Logger.logError('Error getting GA client ID:', error);
176
- return undefined;
177
- }
178
- };
179
- }
180
-
181
- export { WindowDataLayerService };