@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,52 +0,0 @@
1
- import { DomMutationListener } from './domMutationListener';
2
- import { DomMutationObserverContinuation } from '../../models/domMutationContinuation';
3
-
4
- class DomMutationListenerState {
5
-
6
- private readonly listener: DomMutationListener;
7
-
8
- private currentState: DomMutationObserverContinuation;
9
-
10
- private attached: boolean;
11
-
12
- private currentTryCount: number;
13
-
14
- constructor(listener: DomMutationListener) {
15
- this.listener = listener;
16
- this.currentState = DomMutationObserverContinuation.CONTINUE;
17
- this.attached = false;
18
- this.currentTryCount = 0;
19
- }
20
-
21
- getListener(): DomMutationListener {
22
- return this.listener;
23
- }
24
-
25
- setCurrentState(state: DomMutationObserverContinuation): void {
26
- this.currentState = state;
27
- }
28
-
29
- getCurrentState(): DomMutationObserverContinuation {
30
- return this.currentState;
31
- }
32
-
33
- getIsAttached(): boolean {
34
- return this.attached;
35
- }
36
-
37
- setIsAttached(attached: boolean): void {
38
- this.attached = attached;
39
- }
40
-
41
- getCurrentTryCount(): number {
42
- return this.currentTryCount;
43
- }
44
-
45
- incrementCurrentTryCount(): void {
46
- this.currentTryCount++;
47
- }
48
- }
49
-
50
- export {
51
- DomMutationListenerState
52
- }
@@ -1,41 +0,0 @@
1
- import { DomMutationListener } from '../domMutationListener';
2
- import { DomMutationObserverContinuation } from '../../../models/domMutationContinuation';
3
- import Logger from '../../../logging/logger';
4
-
5
- class EmbeddedChatsPlacementsListener implements DomMutationListener {
6
-
7
- private readonly findPlacementNodes: () => DomMutationObserverContinuation;
8
-
9
- constructor(
10
- findPlacementNodes: () => DomMutationObserverContinuation
11
- ) {
12
- Logger.logDebug('[spiffy-ai] EmbeddedChatsPlacementsListener created', undefined);
13
- this.findPlacementNodes = findPlacementNodes;
14
- }
15
-
16
- runOnceImmediately(): boolean {
17
- return true;
18
- }
19
-
20
- onDomChange(): DomMutationObserverContinuation {
21
- // Too verbose - Logger.logDebug('[spiffy-ai] EmbeddedChatsPlacementsListener onDomChange', undefined);
22
- const continuation = this.findPlacementNodes();
23
- if (continuation === DomMutationObserverContinuation.STOP) {
24
- Logger.logDebug('[spiffy-ai] EmbeddedChatsPlacementsListener [STOP requested]', undefined);
25
- }
26
- return continuation;
27
- }
28
-
29
- getName(): string {
30
- return 'EmbeddedChatsPlacementsListener';
31
- }
32
-
33
- triesMax(): number {
34
- return -1;
35
- }
36
- }
37
-
38
-
39
- export {
40
- EmbeddedChatsPlacementsListener,
41
- };
@@ -1,61 +0,0 @@
1
- import Logger from '../../../logging/logger';
2
- import { DomMutationObserverContinuation } from '../../../models/domMutationContinuation';
3
- import { DomMutationListener } from '../domMutationListener';
4
-
5
- declare global {
6
- interface Window {
7
- Gladly: {
8
- show: () => void;
9
- getUser: () => { identity: string } | undefined;
10
- getAvailability: () => string;
11
- on: (eventName: string, callback: () => void) => void;
12
- };
13
- }
14
- }
15
-
16
- class GladlyListener implements DomMutationListener {
17
- private readonly onGladlyAvailable: () => void;
18
-
19
- private static readonly GLADLY_RETRIES_MAX = 25;
20
-
21
- private static readonly GLADLY_CONVERSATION_STARTED_EVENT_NAME = 'conversation:started';
22
-
23
- constructor(onGladlyAvailable: () => void) {
24
- Logger.logDebug('[spiffy-ai] GladlyListener created', undefined);
25
- this.onGladlyAvailable = onGladlyAvailable;
26
- }
27
-
28
- runOnceImmediately(): boolean {
29
- return false;
30
- }
31
-
32
- triesMax(): number {
33
- return GladlyListener.GLADLY_RETRIES_MAX;
34
- }
35
-
36
- onDomChange(): DomMutationObserverContinuation {
37
- if (
38
- window.Gladly &&
39
- window.Gladly.getUser != null &&
40
- window.Gladly.on != null &&
41
- window.Gladly.show != null
42
- ) {
43
- Logger.logDebug(
44
- `[spiffy-ai] subscribing to Gladly ${GladlyListener.GLADLY_CONVERSATION_STARTED_EVENT_NAME} event`,
45
- );
46
- window.Gladly.on(
47
- GladlyListener.GLADLY_CONVERSATION_STARTED_EVENT_NAME,
48
- this.onGladlyAvailable,
49
- );
50
- return DomMutationObserverContinuation.STOP;
51
- }
52
-
53
- return DomMutationObserverContinuation.CONTINUE;
54
- }
55
-
56
- getName(): string {
57
- return 'GladlyListener';
58
- }
59
- }
60
-
61
- export { GladlyListener };
@@ -1,41 +0,0 @@
1
- import Logger from 'src/application/logging/logger';
2
- import { DomMutationObserverContinuation } from 'src/application/models/domMutationContinuation';
3
- import { DomMutationListener } from 'src/application/service/domMutations/domMutationListener';
4
- import { KustomerIntegrationService } from 'src/application/service/kustomerIntegrationService';
5
-
6
- class KustomerVisibilityListener implements DomMutationListener {
7
- kustomerIntegrationService: KustomerIntegrationService;
8
-
9
- constructor() {
10
- Logger.logDebug('[spiffy-ai] KustomerVisibilityListener created');
11
- this.kustomerIntegrationService = new KustomerIntegrationService();
12
- }
13
-
14
- runOnceImmediately(): boolean {
15
- return true;
16
- }
17
-
18
- triesMax(): number {
19
- return -1;
20
- }
21
-
22
- disconnect(): void {
23
- this.kustomerIntegrationService.disconnect();
24
- }
25
-
26
- onDomChange(): DomMutationObserverContinuation {
27
- this.kustomerIntegrationService.initOnce();
28
-
29
- if (this.kustomerIntegrationService.updateVisibility()) {
30
- return DomMutationObserverContinuation.STOP;
31
- }
32
-
33
- return DomMutationObserverContinuation.CONTINUE;
34
- }
35
-
36
- getName(): string {
37
- return 'KustomerVisibilityListener';
38
- }
39
- }
40
-
41
- export { KustomerVisibilityListener };
@@ -1,119 +0,0 @@
1
- import Logger from 'src/application/logging/logger';
2
- import { OrgAnalyticsConfig } from 'src/application/models/api/orgAnalyticsConfig';
3
- import { DataLayerEventsListener } from 'src/application/service/domMutations/dataLayer/dataLayerEventsListener';
4
- import { ChatElementDisplayLocation } from 'src/application/models/chatElementDisplayLocation';
5
- import { GoogleAnalyticsEvents } from 'src/application/models/googleAnalyticsEvents';
6
- import { AmplitudeAdapter, SpiffyMetricsEventName } from 'src/adapters/amplitude';
7
-
8
- /*
9
- Event Example:
10
- {
11
- "event":"add_to_cart",
12
- "ecommerce":{
13
- "currency":"USD",
14
- "value":196,
15
- "items":[
16
- {
17
- "item_name":"OnCore Open-Bust Mid-Thigh Bodysuit",
18
- "price":98,
19
- "item_brand":"Spanx",
20
- "item_variant":"Very Black / Regular / M",
21
- "index":0,
22
- "item_id":39773564534995,
23
- "quantity":2,
24
- "item_category":"Shapewear",
25
- "item_list_name":"Shapewear",
26
- "item_list_id":"",
27
- "item_colors":"Very Black",
28
- "item_inseam_length":"",
29
- "item_size":"M",
30
- "item_band_size":"",
31
- "item_cup_size":""
32
- }
33
- ]
34
- },
35
- "gtm.uniqueEventId":379
36
- }
37
- */
38
- class OrgsCommonDataLayerListener {
39
- private static dataLayerCache: { [p: string]: DataLayerEventsListener } = {};
40
-
41
- static resetDataLayerCache() {
42
- OrgsCommonDataLayerListener.dataLayerCache = {};
43
- }
44
-
45
- static getSingletonDataLayerListenerCallbackCombo(
46
- orgShortName: string,
47
- orgAnalyticsConfig: OrgAnalyticsConfig,
48
- ) {
49
- // dataLayer event listener and the onMetricsContextInit are tightly coupled to each other. So
50
- // repeated calls to this function MUST return the same instance of the listener and the callback
51
- // combo. PM 01/27/2024
52
-
53
- if (!orgAnalyticsConfig.googleAnalytics) {
54
- Logger.logError(
55
- `[spiffy-ai] Google Analytics config is required for dataLayer event listener`,
56
- orgAnalyticsConfig,
57
- );
58
- return undefined;
59
- }
60
-
61
- const allCachedDataLayerListeners = Object.keys(
62
- OrgsCommonDataLayerListener.dataLayerCache,
63
- )?.length;
64
- if (allCachedDataLayerListeners > 1) {
65
- // This is expected to be always == 1 max. If it is more than 1, then there is a bug in the code.
66
- Logger.logError(
67
- `[spiffy-ai] dataLayer listeners cache size: ${allCachedDataLayerListeners}`,
68
- OrgsCommonDataLayerListener.dataLayerCache,
69
- );
70
- }
71
-
72
- if (OrgsCommonDataLayerListener.dataLayerCache[orgShortName]) {
73
- const dataLayerListener = OrgsCommonDataLayerListener.dataLayerCache[orgShortName];
74
- return { dataLayerListener };
75
- }
76
-
77
- const callback = (event: object) => {
78
- Logger.logDebug(`[spiffy-ai] dataLayer event:`, event);
79
- if (
80
- // @ts-expect-error: event is not typed
81
- event?.event !== GoogleAnalyticsEvents.ADD_TO_CART_v1 &&
82
- // @ts-expect-error: event is not typed
83
- event?.event !== GoogleAnalyticsEvents.ADD_TO_CART_v2
84
- ) {
85
- Logger.logDebug(`[spiffy-ai] dataLayer [pass-through] event. event_not_captured=`, event);
86
- return;
87
- }
88
-
89
- // @ts-expect-error: event is not typed
90
- const items = event?.ecommerce?.items || event?.items;
91
- const itemIdList = items?.map((item: any) => item?.item_id).filter((id: any) => id);
92
- const itemCategoryList = items
93
- ?.map((item: any) => item?.item_category)
94
- .filter((category: any) => category);
95
- const eventProps = {
96
- 'ecommerce.item_id_list': itemIdList,
97
- 'ecommerce.item_category_list': itemCategoryList,
98
- display_location: ChatElementDisplayLocation.UNSPECIFIED,
99
- };
100
- AmplitudeAdapter.trackEvent({
101
- eventName: SpiffyMetricsEventName.AddToCartClicked,
102
- eventProps,
103
- alsoSendToGoogleAnalytics: true,
104
- });
105
- };
106
-
107
- const dataLayerListener = new DataLayerEventsListener(
108
- callback,
109
- [GoogleAnalyticsEvents.ADD_TO_CART_v1, GoogleAnalyticsEvents.ADD_TO_CART_v2],
110
- orgAnalyticsConfig.googleAnalytics,
111
- );
112
-
113
- OrgsCommonDataLayerListener.dataLayerCache[orgShortName] = dataLayerListener;
114
-
115
- return { dataLayerListener };
116
- }
117
- }
118
-
119
- export { OrgsCommonDataLayerListener };
@@ -1,130 +0,0 @@
1
- import Logger from 'src/application/logging/logger';
2
- import { StatsigFeatureGate } from '@spiffy-ai/commerce-api-client';
3
- import { FeatureGates } from 'src/application/models/featureGates';
4
- import { SessionStorageService } from 'src/application/service/sessionStorageService';
5
- import { OrgConfigFeatureGate } from 'src/application/models/api/orgConfigResults';
6
-
7
- const FEATURE_FLAGS_STORAGE_KEY = 'spiffy-feature-flags';
8
-
9
- class FeatureFlagService {
10
- constructor(private readonly featureGates: OrgConfigFeatureGate[]) {}
11
-
12
- private getQueryParamFeatureGateOverrides = (featureGate: FeatureGates): boolean | undefined => {
13
- const urlObj = new URL(window.location.href);
14
- const params = new URLSearchParams(urlObj.search);
15
- const paramsObj = Object.fromEntries(params.entries());
16
- const value = paramsObj[featureGate];
17
-
18
- if (value != null) {
19
- return value === 'true';
20
- }
21
-
22
- return undefined;
23
- };
24
-
25
- private getWindowFeatureGateOverrides = (featureGate: FeatureGates): boolean | undefined => {
26
- const value = window._spiffy?.featureOverrides?.[String(featureGate)];
27
- if (value != null) {
28
- return value;
29
- }
30
-
31
- return undefined;
32
- };
33
-
34
- private getStoredFeatureGateOverrides = (featureGate: FeatureGates): boolean | undefined => {
35
- const featureFlags = SessionStorageService.getItem(FEATURE_FLAGS_STORAGE_KEY);
36
-
37
- if (featureFlags) {
38
- try {
39
- const featureFlagsObj = JSON.parse(featureFlags);
40
- return featureFlagsObj[featureGate];
41
- } catch (err) {
42
- Logger.logError(
43
- '[spiffy-ai] getStoredFeatureGateOverrides: error parsing feature flags',
44
- err,
45
- );
46
- }
47
- }
48
-
49
- return undefined;
50
- };
51
-
52
- public persistFeatureGateOverrides() {
53
- const featureFlags = Object.values(FeatureGates)
54
- .map((featureGate) => ({
55
- [featureGate]: this.getFeatureFlagOverride(featureGate),
56
- }))
57
- .filter((_, val) => val !== undefined)
58
- .reduce((acc, curr) => ({ ...acc, ...curr }), {});
59
- SessionStorageService.setItem(FEATURE_FLAGS_STORAGE_KEY, JSON.stringify(featureFlags));
60
- }
61
-
62
- private getFeatureFlagOverride(featureGate: FeatureGates): boolean | undefined {
63
- const queryOverride = this.getQueryParamFeatureGateOverrides(featureGate);
64
- if (queryOverride != null) {
65
- Logger.logDebug(
66
- `[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by URL param. New value: ${queryOverride}`,
67
- );
68
- return queryOverride;
69
- }
70
-
71
- const windowOverride = this.getWindowFeatureGateOverrides(featureGate);
72
- if (windowOverride != null) {
73
- Logger.logDebug(
74
- `[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by window param. New value: ${windowOverride}`,
75
- );
76
- return windowOverride;
77
- }
78
-
79
- const storedOverride = this.getStoredFeatureGateOverrides(featureGate);
80
- if (storedOverride != null) {
81
- Logger.logDebug(
82
- `[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by stored value. New value: ${storedOverride}`,
83
- );
84
- return storedOverride;
85
- }
86
-
87
- return undefined;
88
- }
89
-
90
- public isFeatureGateEnabled(featureGate: FeatureGates): boolean {
91
- const gateValue = this.featureGates.find((gate) => gate.name === featureGate);
92
-
93
- const featureFlagOverride = this.getFeatureFlagOverride(featureGate);
94
- if (featureFlagOverride !== undefined) {
95
- return featureFlagOverride;
96
- }
97
-
98
- if (gateValue == null || gateValue.value == null) {
99
- Logger.logDebug(
100
- `[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} value is undefined - returning false`,
101
- );
102
-
103
- return false;
104
- }
105
-
106
- return gateValue.value;
107
- }
108
-
109
- public isClientSessionEnabled(): boolean {
110
- const gates: Array<StatsigFeatureGate> | undefined = this.featureGates;
111
- const isEnabled =
112
- gates == null ||
113
- gates?.filter(
114
- (gate) => gate.name === FeatureGates.IsClientSessionEnabled && gate.value === true,
115
- ).length > 0;
116
-
117
- return isEnabled;
118
- }
119
-
120
- public getFeatureFlags(): Record<string, boolean> {
121
- return Object.fromEntries(
122
- Object.values(FeatureGates).map((featureGate: FeatureGates) => [
123
- featureGate,
124
- this.isFeatureGateEnabled(featureGate),
125
- ]),
126
- );
127
- }
128
- }
129
-
130
- export { FeatureFlagService };
@@ -1,31 +0,0 @@
1
- // services
2
- export * from "./cachingService";
3
- export * from "./cdnService";
4
- export * from "./domMutationObserver";
5
- export * from "./featureFlagService";
6
- export * from "./kustomerIntegrationService";
7
- export * from "./localStorageService";
8
- export * from "./pageVariantService";
9
- export * from "./searchService";
10
- export * from "./sessionStorageService";
11
- export * from "./shopifyUrlService";
12
- export * from "./userIdentityService";
13
- export * from "./windowChatToggleService";
14
- export * from "./windowDataLayerService";
15
- export * from "./windowFrontendConfigService";
16
-
17
- // customerService
18
- export * from "./customerService";
19
- export * from "./customerService/types";
20
- export * from "./customerService/providers/UnsupportedCustomerService";
21
-
22
- // domMutations
23
- export * from "./domMutations/domInsertionService";
24
- export * from "./domMutations/domMutationListener";
25
- export * from "./domMutations/domMutationListenerState";
26
- export * from "./domMutations/GridInsertionService";
27
- export * from "./domMutations/dataLayer/dataLayerEventsListener";
28
- export * from "./domMutations/floatingChat/embeddedChatsPlacementsListener";
29
- export * from "./domMutations/gladly/gladlyListener";
30
- export * from "./domMutations/spiffy/orgs/common/kustomerVisibilityListener";
31
- export * from "./domMutations/spiffy/orgs/common/orgsCommonDataLayerListener";
@@ -1,111 +0,0 @@
1
- import { LocalStorageService } from './localStorageService';
2
- import Logger from '../logging/logger';
3
-
4
- interface KustomerState {
5
- wasWidgetOpen: boolean;
6
- }
7
-
8
- class KustomerIntegrationService {
9
- static KUSTOMER_LOCAL_STORAGE_KEY = 'kustomerState';
10
-
11
- static KUSTOMER_IFRAME_ID = 'kustomer-ui-sdk-iframe';
12
-
13
- initialized: boolean;
14
-
15
- constructor() {
16
- Logger.logDebug('[spiffy-ai] KustomerIntegrationService created', undefined);
17
- this.initialized = false;
18
- }
19
-
20
- initOnce(): void {
21
- if (this.initialized) {
22
- return;
23
- }
24
- const This = this;
25
- LocalStorageService.attachListener({
26
- storageKey: KustomerIntegrationService.KUSTOMER_LOCAL_STORAGE_KEY,
27
- listener: (event) => This.onCustomerStateChange(event),
28
- });
29
- this.initialized = true;
30
- }
31
-
32
- disconnect(): void {
33
- Logger.logDebug('[spiffy-ai] Disconnecting KustomerIntegrationService');
34
- const This = this;
35
- LocalStorageService.detachListener({
36
- storageKey: KustomerIntegrationService.KUSTOMER_LOCAL_STORAGE_KEY,
37
- listener: (event) => This.onCustomerStateChange(event),
38
- });
39
- const elementRef = this.findKustomerButton();
40
- if (elementRef == null) {
41
- Logger.logDebug('[spiffy-ai] Kustomer iFrame element not found');
42
- return;
43
- }
44
- elementRef.style.visibility = 'visible';
45
- }
46
-
47
- /**
48
- * Updates the visibility of the Kustomer chat icon.
49
- */
50
- updateVisibility(): boolean {
51
- const elementRef = this.findKustomerButton();
52
- if (elementRef == null) {
53
- Logger.logDebug('[spiffy-ai] Kustomer iFrame element not found');
54
- return false;
55
- }
56
-
57
- let kustomerStateStorageItem = LocalStorageService.getItem(
58
- KustomerIntegrationService.KUSTOMER_LOCAL_STORAGE_KEY,
59
- );
60
- if (kustomerStateStorageItem == null) {
61
- Logger.logDebug('[spiffy-ai] Kustomer state not found in local storage (defaulting)');
62
- kustomerStateStorageItem = JSON.stringify({ wasWidgetOpen: false });
63
- }
64
-
65
- const kustomerState: KustomerState = JSON.parse(kustomerStateStorageItem);
66
- const visibility = kustomerState.wasWidgetOpen ? 'visible' : 'hidden';
67
- elementRef.style.visibility = visibility;
68
- Logger.logDebug(
69
- `[spiffy-ai] Kustomer widget was ${kustomerState.wasWidgetOpen ? 'open' : 'closed'}, setting visibility to ${visibility}`,
70
- );
71
- return true;
72
- }
73
-
74
- /**
75
- * Queries the document body for the Kustomer SDK iframe. This function is to be run in a
76
- * MutationObserver.
77
- * @returns the iframe element if it exists, else undefine.
78
- */
79
- findKustomerButton(): HTMLIFrameElement | undefined {
80
- Logger.logDebug('[spiffy-ai] Finding Kustomer button');
81
- const parentDocument = window.document;
82
- const kustomerElement =
83
- parentDocument.getElementById(KustomerIntegrationService.KUSTOMER_IFRAME_ID) ?? undefined;
84
-
85
- if (kustomerElement != null && kustomerElement instanceof HTMLIFrameElement) {
86
- return kustomerElement;
87
- }
88
-
89
- Logger.logDebug('[spiffy-ai] Kustomer iFrame element not found');
90
- return undefined;
91
- }
92
-
93
- /**
94
- * Updates the Kustomer chat icon visibility when the kustomerState localStorage item changes.
95
- * @param event The event that triggered the event listener.
96
- */
97
- onCustomerStateChange(event: StorageEvent): void {
98
- if (
99
- event.key === KustomerIntegrationService.KUSTOMER_LOCAL_STORAGE_KEY &&
100
- event.newValue != null
101
- ) {
102
- Logger.logDebug(
103
- `[spiffy-ai] Storage change key=${event.key}, updating widget visibility`,
104
- event.newValue,
105
- );
106
- this.updateVisibility();
107
- }
108
- }
109
- }
110
-
111
- export { KustomerIntegrationService };
@@ -1,77 +0,0 @@
1
- import Logger from '../logging/logger';
2
-
3
- export enum LocalStorageKeys {
4
- ChatId = 'v1-spiffy-chat-session-id',
5
- SpiffyOnOverride = 'spiffy_on',
6
- EnviveOnOverride = 'envive_on',
7
- }
8
-
9
- class LocalStorageService {
10
- static setItem(key: string, value: string): void {
11
- localStorage.setItem(key, value);
12
- window.dispatchEvent(
13
- new StorageEvent('storage', {
14
- key,
15
- newValue: value,
16
- }),
17
- );
18
- }
19
-
20
- static getItem(key: string): string | null {
21
- return localStorage.getItem(key);
22
- }
23
-
24
- static setSpiffyOnFeatureFlag(value: boolean | null): void {
25
- if (value === true) {
26
- localStorage.setItem(LocalStorageKeys.SpiffyOnOverride, 'true');
27
- } else if (value === false) {
28
- localStorage.setItem(LocalStorageKeys.SpiffyOnOverride, 'false');
29
- }
30
- }
31
-
32
- // TODO: LocalStorage service is not the proper use case for this method
33
- // Should be moved to a more appropriate service or utility class (FeatureFlagService for ex)
34
- // which may use LocalStorageService (or something else) under the hood
35
- static getSpiffyOnFeatureFlag(): string | null {
36
- return localStorage.getItem(LocalStorageKeys.SpiffyOnOverride);
37
- }
38
-
39
- static getLocalStorage() {
40
- const ls = window?.localStorage;
41
- if (!ls) {
42
- Logger.logError('localStorage is not available', undefined);
43
- }
44
- return ls;
45
- }
46
-
47
- private static listenersCache: Record<string, (event: StorageEvent) => void> = {};
48
- private static listenerForKey(
49
- listener: LocalStorageEventListener,
50
- ): (event: StorageEvent) => void {
51
- if (!this.listenersCache[listener.storageKey]) {
52
- this.listenersCache[listener.storageKey] = (event: StorageEvent) => {
53
- if (event.key !== listener.storageKey) {
54
- return;
55
- }
56
- Logger.logDebug(`[spiffy-ai] Storage event key=${event.key}, value=`, event.newValue);
57
- listener.listener(event);
58
- };
59
- }
60
-
61
- return this.listenersCache[listener.storageKey];
62
- }
63
-
64
- /**
65
- * Attach a listener to the window's storage event. Safe to call multiple times.
66
- * @param listener
67
- */
68
- static attachListener(listener: LocalStorageEventListener): void {
69
- window.addEventListener('storage', this.listenerForKey(listener));
70
- }
71
-
72
- static detachListener(listener: LocalStorageEventListener): void {
73
- window.removeEventListener('storage', this.listenerForKey(listener));
74
- }
75
- }
76
-
77
- export { LocalStorageService };