@envive-ai/react-hooks 0.1.5 → 0.1.6

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