@envive-ai/react-hooks 0.2.6-alpha.13 → 0.2.7-arthur-1

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 (376) hide show
  1. package/dist/{NewOrgConfig-DJm6_abA.cjs → NewOrgConfig-Bo1seKr6.cjs} +2 -2
  2. package/dist/{NewOrgConfig-BfbTlFg1.js → NewOrgConfig-yptI2imS.js} +2 -2
  3. package/dist/{SystemSettingsContext-BbTKNBvJ.js → SystemSettingsContext-BY1BFgAQ.js} +2 -2
  4. package/dist/{SystemSettingsContext-6ZHzQkCE.cjs → SystemSettingsContext-EDpRMMt2.cjs} +2 -2
  5. package/dist/{TrackComponentVisibleEvent-BJgNOypY.js → TrackComponentVisibleEvent-CXhKOwKQ.js} +3 -3
  6. package/dist/{TrackComponentVisibleEvent-BRC2FTp-.cjs → TrackComponentVisibleEvent-CgxCqrIt.cjs} +7 -7
  7. package/dist/amplitudeContext-C8tT74Mi.cjs +286 -0
  8. package/dist/{amplitudeContext-B73xamNe.d.cts → amplitudeContext-CCVyp5RU.d.cts} +1 -1
  9. package/dist/amplitudeContext-DCk6Va-j.js +264 -0
  10. package/dist/{amplitudeContext-CZUzMXHl.d.ts → amplitudeContext-DcRur97Z.d.ts} +1 -1
  11. package/dist/app-BbPSHefQ.cjs +156 -0
  12. package/dist/app-CflxT_xI.js +110 -0
  13. package/dist/application/models/graphql/index.cjs +3 -2
  14. package/dist/application/models/graphql/index.d.cts +2 -2
  15. package/dist/application/models/graphql/index.d.ts +2 -2
  16. package/dist/application/models/graphql/index.js +2 -2
  17. package/dist/application/models/guards/api/index.d.cts +2 -1
  18. package/dist/application/models/guards/api/index.d.ts +3 -2
  19. package/dist/application/models/guards/utils.d.cts +1 -1
  20. package/dist/application/models/guards/utils.d.ts +1 -1
  21. package/dist/application/models/index.cjs +3 -3
  22. package/dist/application/models/index.d.cts +11 -10
  23. package/dist/application/models/index.d.ts +12 -11
  24. package/dist/application/models/index.js +2 -2
  25. package/dist/application/models/utilityTypes/index.d.ts +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/utils/index.cjs +8 -6
  29. package/dist/application/utils/index.d.cts +14 -13
  30. package/dist/application/utils/index.d.ts +17 -16
  31. package/dist/application/utils/index.js +8 -6
  32. package/dist/{atomStore-DNji91Im.cjs → atomStore-CmZbgQHc.cjs} +1 -1
  33. package/dist/{atomStore-DXTVqiKc.js → atomStore-DEcDhiLp.js} +1 -1
  34. package/dist/atoms/app/index.cjs +9 -14
  35. package/dist/atoms/app/index.d.cts +19 -18
  36. package/dist/atoms/app/index.d.ts +20 -19
  37. package/dist/atoms/app/index.js +4 -9
  38. package/dist/atoms/atomStore/index.cjs +1 -1
  39. package/dist/atoms/atomStore/index.js +1 -1
  40. package/dist/atoms/chat/index.cjs +9 -8
  41. package/dist/atoms/chat/index.d.cts +39 -38
  42. package/dist/atoms/chat/index.d.ts +40 -39
  43. package/dist/atoms/chat/index.js +9 -8
  44. package/dist/atoms/globalSearch/index.cjs +1 -2
  45. package/dist/atoms/globalSearch/index.d.cts +5 -5
  46. package/dist/atoms/globalSearch/index.d.ts +6 -6
  47. package/dist/atoms/globalSearch/index.js +1 -2
  48. package/dist/atoms/org/index.cjs +8 -7
  49. package/dist/atoms/org/index.d.cts +30 -29
  50. package/dist/atoms/org/index.d.ts +31 -30
  51. package/dist/atoms/org/index.js +4 -3
  52. package/dist/atoms/search/index.cjs +16 -15
  53. package/dist/atoms/search/index.d.cts +13 -12
  54. package/dist/atoms/search/index.d.ts +14 -13
  55. package/dist/atoms/search/index.js +16 -15
  56. package/dist/atoms/search/types.cjs +1 -1
  57. package/dist/atoms/search/types.d.cts +4 -2
  58. package/dist/atoms/search/types.d.ts +4 -2
  59. package/dist/atoms/search/types.js +1 -1
  60. package/dist/atoms/search/utils.cjs +1 -1
  61. package/dist/atoms/search/utils.d.ts +1 -1
  62. package/dist/atoms/search/utils.js +1 -1
  63. package/dist/{cdnContext-DOSIofl8.cjs → cdnContext-CaDyQ_5p.cjs} +1 -1
  64. package/dist/{cdnContext-CEGBVVBU.js → cdnContext-CtrIlAqX.js} +1 -1
  65. package/dist/{chat-DH70QqJp.js → chat-BjhQCyW_.js} +8 -7
  66. package/dist/{chat-CqPuT9_V.cjs → chat-BkPax29G.cjs} +16 -9
  67. package/dist/{chatElementDisplayLocation-DWmfNX_u.d.cts → chatElementDisplayLocation-B7vr33eG.d.cts} +1 -1
  68. package/dist/{chatElementDisplayLocation-CpgV2wR1.d.ts → chatElementDisplayLocation-D4XF0UfI.d.ts} +1 -1
  69. package/dist/{chatSearch-C7Y-hb-6.js → chatSearch-BsYlFvpv.js} +7 -7
  70. package/dist/{chatSearch-DLV4BUGA.cjs → chatSearch-C3N3iIxu.cjs} +7 -7
  71. package/dist/{chatState-CcFtSqJT.cjs → chatState-CJ52Ag_7.cjs} +5 -5
  72. package/dist/{chatState-DKnNHmwe.js → chatState-CXA1vF16.js} +3 -3
  73. package/dist/commerce-api-DA1QGGMK.cjs +319 -0
  74. package/dist/commerce-api-rgj30eEp.js +312 -0
  75. package/dist/config/index.d.cts +4 -4
  76. package/dist/config/index.d.ts +4 -4
  77. package/dist/config/locators/components/chat/index.d.cts +1 -1
  78. package/dist/config/locators/components/chat/index.d.ts +1 -1
  79. package/dist/config/locators/components/common/index.d.cts +1 -1
  80. package/dist/config/locators/components/common/index.d.ts +1 -1
  81. package/dist/config/locators/components/index.d.cts +1 -1
  82. package/dist/config/locators/components/index.d.ts +1 -1
  83. package/dist/config/locators/index.d.cts +4 -4
  84. package/dist/config/locators/index.d.ts +4 -4
  85. package/dist/contexts/amplitudeContext/index.cjs +10 -9
  86. package/dist/contexts/amplitudeContext/index.d.cts +1 -1
  87. package/dist/contexts/amplitudeContext/index.d.ts +1 -1
  88. package/dist/contexts/amplitudeContext/index.js +7 -6
  89. package/dist/contexts/cdnContext/index.cjs +1 -1
  90. package/dist/contexts/cdnContext/index.js +1 -1
  91. package/dist/contexts/chatContext/index.cjs +32 -27
  92. package/dist/contexts/chatContext/index.d.cts +2 -2
  93. package/dist/contexts/chatContext/index.d.ts +4 -4
  94. package/dist/contexts/chatContext/index.js +22 -17
  95. package/dist/contexts/enviveConfigContext/index.d.cts +3 -3
  96. package/dist/contexts/enviveConfigContext/index.d.ts +3 -3
  97. package/dist/contexts/enviveCssContext/index.cjs +7 -7
  98. package/dist/contexts/enviveCssContext/index.js +7 -7
  99. package/dist/contexts/featureFlagContext/index.cjs +1 -1
  100. package/dist/contexts/featureFlagContext/index.d.cts +3 -3
  101. package/dist/contexts/featureFlagContext/index.d.ts +3 -3
  102. package/dist/contexts/featureFlagContext/index.js +1 -1
  103. package/dist/contexts/featureFlagServiceContext/index.d.cts +4 -4
  104. package/dist/contexts/featureFlagServiceContext/index.d.ts +4 -4
  105. package/dist/contexts/graphqlContext/index.cjs +3 -3
  106. package/dist/contexts/graphqlContext/index.d.cts +13 -12
  107. package/dist/contexts/graphqlContext/index.d.ts +14 -13
  108. package/dist/contexts/graphqlContext/index.js +3 -3
  109. package/dist/contexts/newOrgConfigContext/index.cjs +6 -6
  110. package/dist/contexts/newOrgConfigContext/index.d.cts +14 -13
  111. package/dist/contexts/newOrgConfigContext/index.d.ts +15 -14
  112. package/dist/contexts/newOrgConfigContext/index.js +6 -6
  113. package/dist/contexts/searchContext/index.cjs +10 -13
  114. package/dist/contexts/searchContext/index.d.cts +1 -1
  115. package/dist/contexts/searchContext/index.d.ts +2 -2
  116. package/dist/contexts/searchContext/index.js +10 -13
  117. package/dist/contexts/sessionStorageContext/index.cjs +1 -1
  118. package/dist/contexts/sessionStorageContext/index.js +1 -1
  119. package/dist/contexts/shopifyUrlContext/index.cjs +1 -1
  120. package/dist/contexts/shopifyUrlContext/index.d.cts +3 -3
  121. package/dist/contexts/shopifyUrlContext/index.d.ts +3 -3
  122. package/dist/contexts/shopifyUrlContext/index.js +1 -1
  123. package/dist/contexts/systemSettingsContext/index.cjs +1 -1
  124. package/dist/contexts/systemSettingsContext/index.d.cts +14 -13
  125. package/dist/contexts/systemSettingsContext/index.d.ts +15 -14
  126. package/dist/contexts/systemSettingsContext/index.js +1 -1
  127. package/dist/contexts/types.d.cts +3 -3
  128. package/dist/contexts/types.d.ts +3 -3
  129. package/dist/contexts/userIdentityContext/index.cjs +14 -8
  130. package/dist/contexts/userIdentityContext/index.d.cts +1 -1
  131. package/dist/contexts/userIdentityContext/index.d.ts +1 -1
  132. package/dist/contexts/userIdentityContext/index.js +12 -6
  133. package/dist/{domObserver-Bqf3ooj8.cjs → domObserver-COKvTfZV.cjs} +1 -1
  134. package/dist/{domObserver-v9ODTyfT.js → domObserver-DEiUh0qg.js} +1 -1
  135. package/dist/{featureFlagServiceContext-V0J-69ty.d.ts → featureFlagServiceContext-CpxlOkI9.d.ts} +2 -2
  136. package/dist/{featureFlagServiceContext-Be_LUbFf.d.cts → featureFlagServiceContext-p5UBwPM3.d.cts} +2 -2
  137. package/dist/frontendConfig-Cawh5iqv.d.ts +859 -0
  138. package/dist/frontendConfig-iZipB5FG.d.cts +859 -0
  139. package/dist/{globalSearch-FBk2epe8.cjs → globalSearch-BOG3wmck.cjs} +1 -1
  140. package/dist/{globalSearch-Ccxq8hNF.js → globalSearch-BQEX-2Ml.js} +1 -1
  141. package/dist/graphql-CkxgqsXP.js +48 -0
  142. package/dist/graphql-i3dtpVTl.cjs +71 -0
  143. package/dist/graphqlConfig-BnfE0ql5.cjs +39 -0
  144. package/dist/graphqlConfig-CZGjJ8hP.js +14 -0
  145. package/dist/{graphqlContext-D67VEQg3.d.cts → graphqlContext-BeyKU1Dr.d.cts} +2 -2
  146. package/dist/{graphqlContext-BQA6gnpH.d.ts → graphqlContext-CXQl0hq2.d.ts} +3 -3
  147. package/dist/{graphqlContext-W0cZNBf1.cjs → graphqlContext-DP8T3-Kd.cjs} +4 -4
  148. package/dist/{graphqlContext-Ci5GRAdH.js → graphqlContext-czH0kIZg.js} +3 -3
  149. package/dist/hooks/AmplitudeOperations/index.cjs +8 -8
  150. package/dist/hooks/AmplitudeOperations/index.d.cts +1 -1
  151. package/dist/hooks/AmplitudeOperations/index.d.ts +1 -1
  152. package/dist/hooks/AmplitudeOperations/index.js +8 -8
  153. package/dist/hooks/AppDetails/index.cjs +7 -12
  154. package/dist/hooks/AppDetails/index.d.cts +12 -11
  155. package/dist/hooks/AppDetails/index.d.ts +13 -12
  156. package/dist/hooks/AppDetails/index.js +7 -12
  157. package/dist/hooks/CdnOperations/index.cjs +1 -1
  158. package/dist/hooks/CdnOperations/index.js +1 -1
  159. package/dist/hooks/ChatToggle/index.cjs +13 -12
  160. package/dist/hooks/ChatToggle/index.d.cts +1 -1
  161. package/dist/hooks/ChatToggle/index.d.ts +1 -1
  162. package/dist/hooks/ChatToggle/index.js +10 -9
  163. package/dist/hooks/ChatToggleAnalytics/index.cjs +9 -9
  164. package/dist/hooks/ChatToggleAnalytics/index.d.cts +1 -1
  165. package/dist/hooks/ChatToggleAnalytics/index.d.ts +1 -1
  166. package/dist/hooks/ChatToggleAnalytics/index.js +9 -9
  167. package/dist/hooks/Debounce/index.cjs +20 -2
  168. package/dist/hooks/Debounce/index.js +18 -2
  169. package/dist/hooks/ElementObserver/index.cjs +1 -1
  170. package/dist/hooks/ElementObserver/index.d.cts +1 -1
  171. package/dist/hooks/ElementObserver/index.d.ts +1 -1
  172. package/dist/hooks/ElementObserver/index.js +1 -1
  173. package/dist/hooks/GrabAndScroll/index.d.cts +2 -2
  174. package/dist/hooks/GrabAndScroll/index.d.ts +2 -2
  175. package/dist/hooks/GraphQLConfig/index.cjs +4 -4
  176. package/dist/hooks/GraphQLConfig/index.d.cts +13 -12
  177. package/dist/hooks/GraphQLConfig/index.d.ts +14 -13
  178. package/dist/hooks/GraphQLConfig/index.js +4 -4
  179. package/dist/hooks/IdentifyUser/index.cjs +14 -8
  180. package/dist/hooks/IdentifyUser/index.js +13 -7
  181. package/dist/hooks/ImageResolver/index.cjs +2 -2
  182. package/dist/hooks/ImageResolver/index.js +2 -2
  183. package/dist/hooks/Intersection/index.cjs +1 -1
  184. package/dist/hooks/Intersection/index.js +1 -1
  185. package/dist/hooks/MessageFilter/index.cjs +2 -2
  186. package/dist/hooks/MessageFilter/index.d.cts +12 -11
  187. package/dist/hooks/MessageFilter/index.d.ts +13 -12
  188. package/dist/hooks/MessageFilter/index.js +2 -2
  189. package/dist/hooks/NewOrgConfig/index.cjs +7 -7
  190. package/dist/hooks/NewOrgConfig/index.d.cts +14 -13
  191. package/dist/hooks/NewOrgConfig/index.d.ts +15 -14
  192. package/dist/hooks/NewOrgConfig/index.js +7 -7
  193. package/dist/hooks/Search/index.cjs +1469 -159
  194. package/dist/hooks/Search/index.d.cts +21 -17
  195. package/dist/hooks/Search/index.d.ts +22 -18
  196. package/dist/hooks/Search/index.js +1464 -154
  197. package/dist/hooks/SearchOperations/index.cjs +11 -14
  198. package/dist/hooks/SearchOperations/index.d.cts +1 -1
  199. package/dist/hooks/SearchOperations/index.d.ts +2 -2
  200. package/dist/hooks/SearchOperations/index.js +11 -14
  201. package/dist/hooks/SessionStorageOperations/index.cjs +1 -1
  202. package/dist/hooks/SessionStorageOperations/index.js +1 -1
  203. package/dist/hooks/ShopifyUrlOperations/index.cjs +1 -1
  204. package/dist/hooks/ShopifyUrlOperations/index.d.cts +5 -5
  205. package/dist/hooks/ShopifyUrlOperations/index.d.ts +5 -5
  206. package/dist/hooks/ShopifyUrlOperations/index.js +1 -1
  207. package/dist/hooks/SystemSettingsContext/index.cjs +2 -2
  208. package/dist/hooks/SystemSettingsContext/index.d.cts +14 -13
  209. package/dist/hooks/SystemSettingsContext/index.d.ts +15 -14
  210. package/dist/hooks/SystemSettingsContext/index.js +2 -2
  211. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +8 -8
  212. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +2 -2
  213. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +2 -2
  214. package/dist/hooks/TrackComponentVisibleEvent/index.js +8 -8
  215. package/dist/hooks/UpdateAnalyticsProps/index.cjs +11 -11
  216. package/dist/hooks/UpdateAnalyticsProps/index.js +6 -6
  217. package/dist/hooks/utils.d.cts +12 -11
  218. package/dist/hooks/utils.d.ts +13 -12
  219. package/dist/{index-BeYfyZ6k.d.ts → index--9_c4tze.d.ts} +1 -1
  220. package/dist/index-BEpDGqnz.d.cts +41 -0
  221. package/dist/{index-xHVrsrbz.d.ts → index-BKvFVPUX.d.ts} +1 -1
  222. package/dist/{index-DJTrxIFJ.d.ts → index-BNHIIgYk.d.ts} +1 -1
  223. package/dist/{index-BeGt0Aw3.d.cts → index-BSd8767K.d.cts} +5 -5
  224. package/dist/index-BUDrAxnl.d.ts +673 -0
  225. package/dist/{index-DzbkQtaK.d.cts → index-CCboEuTO.d.cts} +1 -1
  226. package/dist/{index-FQjyuD3D.d.cts → index-COXkY78t.d.cts} +1 -1
  227. package/dist/{index-xhBQ1HBx.d.ts → index-CUO68KG3.d.ts} +34 -34
  228. package/dist/{index-DazMsEy_.d.ts → index-D7htGSQC.d.ts} +1 -1
  229. package/dist/index-DM_5fh8c.d.ts +101 -0
  230. package/dist/index-DU7uw0ba.d.cts +101 -0
  231. package/dist/{index-Da1s8h5C.d.cts → index-DZtnHhlr.d.cts} +1 -1
  232. package/dist/{index-h809JLbL.d.ts → index-Dtw-hJdt.d.ts} +1 -1
  233. package/dist/{index-Dfwnna1j.d.ts → index-Dxpscrvz.d.ts} +1 -1
  234. package/dist/index-Dy3TTIOm.d.cts +673 -0
  235. package/dist/index-ErVcwUnR.d.ts +41 -0
  236. package/dist/{index-Cyq5HiC0.d.cts → index-OkKEOL6H.d.cts} +1 -1
  237. package/dist/{index-9NE86em3.d.cts → index-hAqp0oYb.d.cts} +1 -1
  238. package/dist/interceptors/index.d.cts +13 -12
  239. package/dist/interceptors/index.d.ts +14 -13
  240. package/dist/interceptors/types.d.cts +12 -11
  241. package/dist/interceptors/types.d.ts +13 -12
  242. package/dist/models-CWOgrLCm.js +1284 -0
  243. package/dist/models-DqdLOi2I.cjs +1519 -0
  244. package/dist/{newOrgConfigAtom-DxILMn2I.cjs → newOrgConfigAtom-CPA6Gp6n.cjs} +1 -1
  245. package/dist/{newOrgConfigAtom-sqve6LZU.js → newOrgConfigAtom-DEUj6H-p.js} +1 -1
  246. package/dist/{newOrgConfigContext-Cl4H9c3q.cjs → newOrgConfigContext-Bet9CgKP.cjs} +3 -3
  247. package/dist/{newOrgConfigContext-DQiuf8nd.js → newOrgConfigContext-Bi_dBNe5.js} +3 -3
  248. package/dist/{newOrgConfigContext-5Bw7RwT-.d.cts → newOrgConfigContext-CJI3tsVV.d.cts} +2 -2
  249. package/dist/{newOrgConfigContext-CS8IA5Eg.d.ts → newOrgConfigContext-I2qceBB4.d.ts} +2 -2
  250. package/dist/{nodeSelector-BiCDowlK.d.ts → nodeSelector-B5NfnUHv.d.ts} +1 -1
  251. package/dist/{nodeSelector-B3bPtEjX.d.cts → nodeSelector-vKB44CDB.d.cts} +1 -1
  252. package/dist/{org-DlAesvQ_.cjs → org-B_cWn2bt.cjs} +1 -1
  253. package/dist/{org-vi0njpBh.js → org-h32_LSEb.js} +1 -1
  254. package/dist/orgAnalyticsConfig-Bm23fw4s.cjs +39 -0
  255. package/dist/orgAnalyticsConfig-CpBmga08.js +14 -0
  256. package/dist/responseGenerics-D9bS-Dd6.d.ts +148 -0
  257. package/dist/{index-CCa4tZuO.d.ts → responseGenerics-DWLV09cQ.d.cts} +4 -40
  258. package/dist/{search-y-ioX5Mz.d.cts → search-6RrxBXD6.d.cts} +1 -1
  259. package/dist/{search-CXXslzAO.cjs → search-Csh2n66W.cjs} +5 -5
  260. package/dist/{search-DBSMrXWv.js → search-DkiqkogN.js} +5 -5
  261. package/dist/{search-1NQLQD9d.d.ts → search-DrJiCT7d.d.ts} +2 -2
  262. package/dist/{search-filter-types-BxaNSLs_.d.cts → search-filter-types-BItKtezf.d.cts} +1 -1
  263. package/dist/{search-filter-types-DPgeG8FS.d.ts → search-filter-types-CGFhksO3.d.ts} +1 -1
  264. package/dist/{searchContext-mvwUJncR.js → searchContext-BmgoAFMF.js} +4 -4
  265. package/dist/{searchContext-DXW6xvXv.cjs → searchContext-DksJfC1s.cjs} +6 -6
  266. package/dist/{searchServiceAdapter-DEv1tTn0.cjs → searchServiceAdapter-BGlvoZFE.cjs} +1 -1
  267. package/dist/{searchServiceAdapter-WyCU55NV.js → searchServiceAdapter-Db6jEcJs.js} +1 -1
  268. package/dist/{sessionStorageContext-1Ks_d4Z0.cjs → sessionStorageContext-B6FsNKjj.cjs} +1 -1
  269. package/dist/{sessionStorageContext-CDcl7NVl.js → sessionStorageContext-CLYCm83p.js} +1 -1
  270. package/dist/{shopifyUrlContext-CejRZfj7.js → shopifyUrlContext-C-PkSgNC.js} +1 -1
  271. package/dist/{shopifyUrlContext-lnHoAOEf.cjs → shopifyUrlContext-ZOcARiMR.cjs} +1 -1
  272. package/dist/{spiffyWidgets-B1uc84_g.d.ts → spiffyWidgets-CR6F7FRE.d.ts} +1 -1
  273. package/dist/{spiffyWidgets-BuS00VaQ.d.cts → spiffyWidgets-eNbU1gMc.d.cts} +1 -1
  274. package/dist/{systemSettingsContext-CVUxEcsU.js → systemSettingsContext-DF0jSq9m.js} +1 -1
  275. package/dist/{systemSettingsContext-B0Kyq7nA.cjs → systemSettingsContext-dmE1v6w8.cjs} +1 -1
  276. package/dist/{test-types-y6kp-tiw.d.ts → test-types-BEml_bm3.d.ts} +1 -1
  277. package/dist/{test-types-ThQiO_cc.d.cts → test-types-Dsu8RJZu.d.cts} +1 -1
  278. package/dist/types/index.cjs +1 -16
  279. package/dist/types/index.d.cts +3 -17
  280. package/dist/types/index.d.ts +3 -17
  281. package/dist/types/index.js +2 -16
  282. package/dist/{types-Db5Eux6K.d.ts → types-4LQ7LUCk.d.ts} +2 -2
  283. package/dist/types-BegmH0S1.d.ts +60 -0
  284. package/dist/types-BuvXXGxE.cjs +48 -0
  285. package/dist/types-CtUb63bt.js +1 -1
  286. package/dist/{types-zQGBI-Yo.d.cts → types-DFsSqmWx.d.cts} +2 -2
  287. package/dist/types-DWorwfS-.d.cts +60 -0
  288. package/dist/types-DXnG1tV0.js +30 -0
  289. package/dist/types-UUvB6h05.cjs +1 -1
  290. package/dist/types.d.cts +4 -23
  291. package/dist/types.d.ts +4 -23
  292. package/dist/unsupportedProductExceptions-DGENUnEA.cjs +32 -0
  293. package/dist/unsupportedProductExceptions-uQuuelOs.js +20 -0
  294. package/dist/{useAmplitudeOperations-jqa7K9dH.cjs → useAmplitudeOperations-Bo6YNbTV.cjs} +3 -3
  295. package/dist/{useAmplitudeOperations-DYs1h8a_.js → useAmplitudeOperations-zIRSqmMW.js} +2 -2
  296. package/dist/{useAppDetails-BRUqZEyt.js → useAppDetails-B584gkCs.js} +3 -3
  297. package/dist/{useAppDetails-C71k0brz.cjs → useAppDetails-DczgqeLG.cjs} +6 -6
  298. package/dist/{useGraphQLConfig-5VwS9Q_Z.js → useGraphQLConfig-7UxACM4n.js} +2 -2
  299. package/dist/{useGraphQLConfig-Cj26_J9I.cjs → useGraphQLConfig-D_rF2Sun.cjs} +2 -2
  300. package/dist/{useIntersection-Cncgxdmy.js → useIntersection-CZSEBUbv.js} +1 -1
  301. package/dist/{useIntersection-m4PEpvG7.cjs → useIntersection-DSDREfj6.cjs} +1 -1
  302. package/dist/userIdentityContext-BqbNu7xu.cjs +132 -0
  303. package/dist/userIdentityContext-BxFH9FNQ.js +115 -0
  304. package/dist/{userIdentityContext-BVODeTlN.d.ts → userIdentityContext-C6kApbuk.d.ts} +1 -1
  305. package/dist/{userIdentityContext-D2oFVFzo.d.cts → userIdentityContext-kU1PIo8K.d.cts} +1 -1
  306. package/dist/{utils-DpneNSJf.d.ts → utils-BRkGP1eb.d.ts} +1 -1
  307. package/dist/utils-C1ErYSoW.js +606 -0
  308. package/dist/{utils-BxPPugeP.d.cts → utils-CBD4g2Nc.d.cts} +4 -4
  309. package/dist/{utils-2SWrJ12w.cjs → utils-CvLmSsUj.cjs} +1 -1
  310. package/dist/{utils-CqBxIpEV.js → utils-D82gfbgU.js} +1 -1
  311. package/dist/{utils-B3x_9JTY.d.cts → utils-DCrwX6FT.d.cts} +1 -1
  312. package/dist/{utils-Covisryh.d.ts → utils-QKFAbPT6.d.ts} +4 -4
  313. package/dist/utils-mqfncrhI.cjs +715 -0
  314. package/package.json +18 -13
  315. package/src/application/commerce-api.ts +2 -0
  316. package/src/application/models/graphql/index.ts +1 -0
  317. package/src/application/utils/__tests__/divideArrays.test.ts +12 -13
  318. package/src/atoms/app/index.ts +1 -2
  319. package/src/atoms/search/productRetrievalAPI.ts +70 -0
  320. package/src/atoms/search/productRetrievalAdapter.ts +25 -0
  321. package/src/atoms/search/types.ts +13 -0
  322. package/src/contexts/enviveConfigContext/__tests__/enviveConfigContext.test.tsx +411 -0
  323. package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +790 -0
  324. package/src/contexts/localStorageContext/__tests__/localStorageContext.test.tsx +775 -0
  325. package/src/contexts/newOrgConfigContext/__tests__/newOrgConfigContext.test.tsx +495 -0
  326. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +806 -0
  327. package/src/contexts/systemSettingsContext/__tests__/systemSettingsContext.test.tsx +506 -0
  328. package/src/contexts/types.ts +16 -14
  329. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +663 -0
  330. package/src/contexts/userIdentityContext/userIdentityContext.tsx +6 -0
  331. package/src/hooks/Search/useRecommendedProducts.ts +48 -0
  332. package/src/hooks/Search/useSearch.tsx +89 -182
  333. package/src/hooks/Search/useSearchInput.ts +263 -0
  334. package/src/types/FilterAttribute.ts +35 -0
  335. package/src/types/index.ts +0 -1
  336. package/src/types.ts +0 -16
  337. package/dist/frontendConfig-CeWhVevA.d.ts +0 -857
  338. package/dist/frontendConfig-OWWJmuPc.d.cts +0 -857
  339. package/dist/graphql-3PxNRFOc.js +0 -36
  340. package/dist/graphql-DGYfelZp.cjs +0 -53
  341. package/dist/graphqlConfig-GHZ1UgCw.cjs +0 -73
  342. package/dist/graphqlConfig-mDg6J44N.js +0 -24
  343. package/dist/hooks/FloatingButtonVisibility/index.cjs +0 -73
  344. package/dist/hooks/FloatingButtonVisibility/index.d.cts +0 -7
  345. package/dist/hooks/FloatingButtonVisibility/index.d.ts +0 -7
  346. package/dist/hooks/FloatingButtonVisibility/index.js +0 -69
  347. package/dist/hooks/LastInteraction/index.cjs +0 -34
  348. package/dist/hooks/LastInteraction/index.d.cts +0 -17
  349. package/dist/hooks/LastInteraction/index.d.ts +0 -17
  350. package/dist/hooks/LastInteraction/index.js +0 -32
  351. package/dist/index-Bmub8e38.d.cts +0 -98
  352. package/dist/index-CiWEYzXl.d.cts +0 -184
  353. package/dist/index-D4c-port.d.ts +0 -676
  354. package/dist/index-O33GSSRr.d.cts +0 -676
  355. package/dist/index-bjMvkcBF.d.ts +0 -98
  356. package/dist/models-D-4db7XW.cjs +0 -1537
  357. package/dist/models-c86hYW-F.js +0 -1296
  358. package/dist/types-BCz-hOvv.d.ts +0 -51
  359. package/dist/types-CKMMb_gX.d.cts +0 -51
  360. package/dist/types-CS0Hrzja.js +0 -30
  361. package/dist/types-CxObxLKs.cjs +0 -48
  362. package/dist/useDebounce-DZ8Cgiwc.cjs +0 -26
  363. package/dist/useDebounce-v9cezyjn.js +0 -19
  364. package/dist/utils-CLGXsOwE.cjs +0 -1591
  365. package/dist/utils-jYtD3hmA.js +0 -1385
  366. package/src/hooks/FloatingButtonVisibility/index.ts +0 -1
  367. package/src/hooks/FloatingButtonVisibility/useFloatingButtonVisibility.ts +0 -99
  368. package/src/hooks/LastInteraction/index.ts +0 -1
  369. package/src/hooks/LastInteraction/useLastInteraction.ts +0 -42
  370. package/src/types/floatingbuttonoverrides-types.ts +0 -10
  371. /package/dist/{AmplitudeOperations-ni7wVevx.js → AmplitudeOperations-ChZWcSsc.js} +0 -0
  372. /package/dist/{AmplitudeOperations-DxQnurSG.cjs → AmplitudeOperations-JggIc1zD.cjs} +0 -0
  373. /package/dist/{globalSearch-BpGfkuXz.js → amplitudeContext-BItT9HmT.js} +0 -0
  374. /package/dist/{globalSearch-B9DRBxSM.cjs → amplitudeContext-DPtyVv3Q.cjs} +0 -0
  375. /package/dist/{index-CgAfoNpB.d.ts → index-A0HvA68Y.d.cts} +0 -0
  376. /package/dist/{index-RcVcRKH7.d.cts → index-DNVvRcKu.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-hooks",
3
- "version": "0.2.6-alpha.13",
3
+ "version": "0.2.7-arthur-1",
4
4
  "description": "React hooks for connecting to Envive AI services.",
5
5
  "keywords": [
6
6
  "react",
@@ -31,7 +31,10 @@
31
31
  "build:watch": "tsdown --watch",
32
32
  "prepublish": "npm run build",
33
33
  "typecheck": "tsc",
34
- "prepare-version": "node scripts/prepare-version.js"
34
+ "prepare-version": "node scripts/prepare-version.js",
35
+ "test": "vitest",
36
+ "test:run": "vitest run",
37
+ "test:watch": "vitest --watch"
35
38
  },
36
39
  "dependencies": {
37
40
  "@amplitude/analytics-browser": "^2.23.7",
@@ -43,16 +46,22 @@
43
46
  "uuid": "^13.0.0"
44
47
  },
45
48
  "devDependencies": {
49
+ "@testing-library/jest-dom": "^6.9.1",
50
+ "@testing-library/react": "^16.3.0",
51
+ "@testing-library/user-event": "^14.6.1",
46
52
  "@types/jest": "^30.0.0",
47
53
  "@types/node": "^20.11.30",
48
54
  "@types/react": "^18.2.66",
49
55
  "@types/react-dom": "^18.2.22",
50
56
  "@types/ua-parser-js": "^0.7.39",
57
+ "@vitejs/plugin-react": "^5.1.0",
58
+ "jsdom": "^27.1.0",
59
+ "patch-package": "^8.0.1",
51
60
  "tsdown": "^0.14.2",
52
- "typescript": "~5.8.3"
61
+ "typescript": "~5.8.3",
62
+ "vitest": "^4.0.8"
53
63
  },
54
64
  "peerDependencies": {
55
- "framer-motion": ">=12.23.24",
56
65
  "react": "^18.3.1",
57
66
  "react-dom": "^18.3.1"
58
67
  },
@@ -250,10 +259,6 @@
250
259
  "import": "./dist/hooks/ElementObserver/index.js",
251
260
  "require": "./dist/hooks/ElementObserver/index.cjs"
252
261
  },
253
- "./hooks/FloatingButtonVisibility": {
254
- "import": "./dist/hooks/FloatingButtonVisibility/index.js",
255
- "require": "./dist/hooks/FloatingButtonVisibility/index.cjs"
256
- },
257
262
  "./hooks/GrabAndScroll": {
258
263
  "import": "./dist/hooks/GrabAndScroll/index.js",
259
264
  "require": "./dist/hooks/GrabAndScroll/index.cjs"
@@ -278,10 +283,6 @@
278
283
  "import": "./dist/hooks/IsSmallScreen/index.js",
279
284
  "require": "./dist/hooks/IsSmallScreen/index.cjs"
280
285
  },
281
- "./hooks/LastInteraction": {
282
- "import": "./dist/hooks/LastInteraction/index.js",
283
- "require": "./dist/hooks/LastInteraction/index.cjs"
284
- },
285
286
  "./hooks/LocalStorageOperations": {
286
287
  "import": "./dist/hooks/LocalStorageOperations/index.js",
287
288
  "require": "./dist/hooks/LocalStorageOperations/index.cjs"
@@ -430,6 +431,10 @@
430
431
  "import": "./dist/events/index.js",
431
432
  "require": "./dist/events/index.cjs"
432
433
  },
434
+ "./exceptions": {
435
+ "import": "./dist/exceptions/index.js",
436
+ "require": "./dist/exceptions/index.cjs"
437
+ },
433
438
  "./hooks": {
434
439
  "import": "./dist/hooks/index.js",
435
440
  "require": "./dist/hooks/index.cjs"
@@ -445,4 +450,4 @@
445
450
  "./package.json": "./package.json"
446
451
  }
447
452
  }
448
- }
453
+ }
@@ -544,6 +544,8 @@ class CommerceApiClient {
544
544
  return V1OrgConfigGetSourceEnum.App;
545
545
  case ContextSourceEnum.Test:
546
546
  return V1OrgConfigGetSourceEnum.Test;
547
+ case ContextSourceEnum.Eval:
548
+ return V1OrgConfigGetSourceEnum.Test;
547
549
  default: {
548
550
  // This ensures that if new values are added to ContextSourceEnum, we catch it
549
551
  const exhaustiveCheck: never = source;
@@ -1,2 +1,3 @@
1
1
  export * from './queries/getMerchantFrontendConfigQuery';
2
2
  export * from './queries/getMerchantColorsQuery';
3
+ export * from './queries/getMerchantOrgIdQuery';
@@ -1,14 +1,13 @@
1
- // import { expect } from 'vitest';
2
- // import { divideArray } from '../divideArray';
1
+ import { divideArray } from '../divideArray';
3
2
 
4
- // describe('divideArray', () => {
5
- // it('should divide an array into 3 rows', () => {
6
- // const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
7
- // const rows = divideArray(array, 3);
8
- // expect(rows).toEqual([
9
- // [1, 4, 7, 10],
10
- // [2, 5, 8],
11
- // [3, 6, 9],
12
- // ]);
13
- // });
14
- // });
3
+ describe('divideArray', () => {
4
+ it('should divide an array into 3 rows', () => {
5
+ const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
6
+ const rows = divideArray(array, 3);
7
+ expect(rows).toEqual([
8
+ [1, 4, 7, 10],
9
+ [2, 5, 8],
10
+ [3, 6, 9],
11
+ ]);
12
+ });
13
+ });
@@ -32,8 +32,7 @@ export const userIdAtom = atom(
32
32
  return maybeUserId;
33
33
  }
34
34
 
35
- const { getUserIdOrDefault } = useUserIdentity();
36
- return getUserIdOrDefault();
35
+ throw new Error('userIdAtom is not set. Ensure that all use of userIdAtom is under UserIdentityProvider');
37
36
  },
38
37
  (_, set, value: string | undefined) => {
39
38
  set(internalUserIdAtom, value);
@@ -0,0 +1,70 @@
1
+
2
+ import { atom } from "jotai";
3
+ import { getProductRetrievalFunction } from "./productRetrievalAdapter";
4
+ import { ProductRetrievalParams, ProductRetrievalResult } from "./types";
5
+
6
+ interface ProductRetrievalState {
7
+ data: ProductRetrievalResult | null;
8
+ loading: boolean;
9
+ error: string | null;
10
+ lastProductIds: string[] | null;
11
+ }
12
+
13
+ export const productRetrievalAtom = atom<ProductRetrievalState>({
14
+ data: null,
15
+ loading: false,
16
+ error: null,
17
+ lastProductIds: null,
18
+ });
19
+
20
+ export const performProductRetrievalAtom = atom(
21
+ null,
22
+ async (get, set, params: ProductRetrievalParams) => {
23
+ const currentState = get(productRetrievalAtom);
24
+
25
+ if (currentState.loading) {
26
+ return; // Prevent concurrent retrievals
27
+ }
28
+
29
+ set(productRetrievalAtom, {
30
+ data: null,
31
+ loading: true,
32
+ error: null,
33
+ lastProductIds: params.productIds,
34
+ });
35
+
36
+ try {
37
+ const retrieveProducts = getProductRetrievalFunction();
38
+ const result = await retrieveProducts(params);
39
+ set(productRetrievalAtom, {
40
+ data: result,
41
+ loading: false,
42
+ error: null,
43
+ lastProductIds: params.productIds,
44
+ });
45
+ } catch (error: unknown) {
46
+ const errorMessage =
47
+ error instanceof Error ? error.message : "An unknown error occurred";
48
+ set(productRetrievalAtom, {
49
+ data: null,
50
+ loading: false,
51
+ error: errorMessage,
52
+ lastProductIds: params.productIds,
53
+ });
54
+ }
55
+ }
56
+ );
57
+
58
+ // Get just the products array (already normalized by service)
59
+ export const retrievedProductsAtom = atom((get) => {
60
+ const retrievalData = get(productRetrievalAtom).data;
61
+ return retrievalData?.products || [];
62
+ });
63
+
64
+ export const productRetrievalLoadingAtom = atom((get) => {
65
+ return get(productRetrievalAtom).loading;
66
+ });
67
+
68
+ export const productRetrievalErrorAtom = atom((get) => {
69
+ return get(productRetrievalAtom).error;
70
+ });
@@ -0,0 +1,25 @@
1
+ import { ProductRetrievalParams, ProductRetrievalResult } from "./types";
2
+
3
+ // This will be set by the ProductRetrievalProvider when it initializes
4
+ let productRetrievalFunction:
5
+ | ((params: ProductRetrievalParams) => Promise<ProductRetrievalResult>)
6
+ | null = null;
7
+
8
+ export const setProductRetrievalFunction = (
9
+ fn: (params: ProductRetrievalParams) => Promise<ProductRetrievalResult>
10
+ ) => {
11
+ productRetrievalFunction = fn;
12
+ };
13
+
14
+ export const getProductRetrievalFunction = () => {
15
+ if (!productRetrievalFunction) {
16
+ throw new Error(
17
+ "Product retrieval function not initialized. Make sure ProductRetrievalProvider is mounted."
18
+ );
19
+ }
20
+ return productRetrievalFunction;
21
+ };
22
+
23
+ export const clearProductRetrievalFunction = () => {
24
+ productRetrievalFunction = null;
25
+ };
@@ -1,3 +1,5 @@
1
+ import { SearchResponseProductAttributes } from "src/application/models/api/response";
2
+
1
3
  export enum ProductSorting {
2
4
  FEATURED = 'featured',
3
5
  PRICE_ASC = 'price_asc',
@@ -53,3 +55,14 @@ export enum ChatSearchSortOverrides {
53
55
  MOBILE_FILTER_MODAL_OPTION_DESCRIPTION = 'spiffy-chat-search-filter-modal-option-desc',
54
56
  MOBILE_FILTER_MODAL_APPLY_BUTTON = 'spiffy-chat-search-filter-modal-apply-button',
55
57
  }
58
+
59
+ // Custom product retrieval result interface
60
+ export interface ProductRetrievalResult {
61
+ products: SearchResponseProductAttributes['attributes'][];
62
+ totalProductCount: number;
63
+ }
64
+
65
+ // Product retrieval parameters interface
66
+ export interface ProductRetrievalParams {
67
+ productIds: string[];
68
+ }
@@ -0,0 +1,411 @@
1
+ import React from "react";
2
+ import { render, screen, waitFor } from "@testing-library/react";
3
+ import { Provider } from "jotai";
4
+ import { useAtomValue } from "jotai";
5
+ import { EnviveConfigProvider, useEnviveConfig } from "../enviveConfigContext";
6
+ import { enviveConfigAtom } from "src/atoms/envive/enviveConfig";
7
+ import Logger from "src/application/logging/logger";
8
+
9
+ // Mock the Logger to avoid console output in tests
10
+ vi.spyOn(Logger, "logDebug").mockImplementation(() => {});
11
+
12
+ // Mock component that uses the useEnviveConfig hook
13
+ const MockComponent: React.FC = () => {
14
+ const config = useEnviveConfig();
15
+
16
+ return (
17
+ <div data-testid="mock-component">
18
+ <div data-testid="amplitude-api-key">{config?.amplitudeApiKey || "not-set"}</div>
19
+ <div data-testid="base-url">{config?.baseUrl || "not-set"}</div>
20
+ <div data-testid="org-short-name">{config?.orgShortName || "not-set"}</div>
21
+ <div data-testid="identifying-prefix">{config?.identifyingPrefix || "not-set"}</div>
22
+ <div data-testid="env">{config?.env || "not-set"}</div>
23
+ <div data-testid="cdn-url">{config?.cdnUrl || "not-set"}</div>
24
+ <div data-testid="data-residency">{config?.dataResidency || "not-set"}</div>
25
+ <div data-testid="react-app-name">{config?.reactAppName || "not-set"}</div>
26
+ <div data-testid="context-source">{config?.contextSource || "not-set"}</div>
27
+ <div data-testid="org-level-api-key">{config?.orgLevelApiKey || "not-set"}</div>
28
+ <div data-testid="public-key">{config?.publicKey || "not-set"}</div>
29
+ <div data-testid="show">{config?.show?.toString() || "not-set"}</div>
30
+ </div>
31
+ );
32
+ };
33
+
34
+ // Component that directly reads from the atom to verify it's set
35
+ const AtomReaderComponent: React.FC = () => {
36
+ const config = useAtomValue(enviveConfigAtom);
37
+
38
+ return (
39
+ <div data-testid="atom-reader">
40
+ <div data-testid="atom-amplitude-api-key">
41
+ {config?.amplitudeApiKey || "not-set"}
42
+ </div>
43
+ <div data-testid="atom-identifying-prefix">
44
+ {config?.identifyingPrefix || "not-set"}
45
+ </div>
46
+ </div>
47
+ );
48
+ };
49
+
50
+ describe("EnviveConfigProvider", () => {
51
+ beforeEach(() => {
52
+ vi.clearAllMocks();
53
+ });
54
+
55
+ describe("Provider Integration with Jotai Store", () => {
56
+ it("should set the enviveConfigAtom when provider is mounted", async () => {
57
+ const testConfig = {
58
+ amplitudeApiKey: "test-amplitude-key",
59
+ baseUrl: "https://test-api.example.com",
60
+ orgShortName: "test-org",
61
+ identifyingPrefix: "test-prefix",
62
+ env: "test",
63
+ cdnUrl: "https://test-cdn.example.com",
64
+ dataResidency: "us",
65
+ reactAppName: "test-app",
66
+ contextSource: "test-source",
67
+ orgLevelApiKey: "test-org-key",
68
+ publicKey: "test-public-key",
69
+ show: true,
70
+ };
71
+
72
+ render(
73
+ <Provider>
74
+ <EnviveConfigProvider
75
+ amplitudeApiKey={testConfig.amplitudeApiKey}
76
+ baseUrl={testConfig.baseUrl}
77
+ orgShortName={testConfig.orgShortName}
78
+ identifyingPrefix={testConfig.identifyingPrefix}
79
+ env={testConfig.env}
80
+ cdnUrl={testConfig.cdnUrl}
81
+ dataResidency={testConfig.dataResidency}
82
+ reactAppName={testConfig.reactAppName}
83
+ contextSource={testConfig.contextSource}
84
+ orgLevelApiKey={testConfig.orgLevelApiKey}
85
+ publicKey={testConfig.publicKey}
86
+ show={testConfig.show}
87
+ >
88
+ <AtomReaderComponent />
89
+ </EnviveConfigProvider>
90
+ </Provider>
91
+ );
92
+
93
+ // Wait for the atom to be set (useEffect runs after render)
94
+ await waitFor(() => {
95
+ expect(screen.getByTestId("atom-amplitude-api-key")).toHaveTextContent(
96
+ testConfig.amplitudeApiKey
97
+ );
98
+ });
99
+
100
+ expect(screen.getByTestId("atom-identifying-prefix")).toHaveTextContent(
101
+ testConfig.identifyingPrefix
102
+ );
103
+ });
104
+
105
+ it("should update the atom when provider props change", async () => {
106
+ const initialConfig = {
107
+ amplitudeApiKey: "initial-key",
108
+ identifyingPrefix: "initial-prefix",
109
+ };
110
+
111
+ const { rerender } = render(
112
+ <Provider>
113
+ <EnviveConfigProvider
114
+ amplitudeApiKey={initialConfig.amplitudeApiKey}
115
+ identifyingPrefix={initialConfig.identifyingPrefix}
116
+ >
117
+ <AtomReaderComponent />
118
+ </EnviveConfigProvider>
119
+ </Provider>
120
+ );
121
+
122
+ await waitFor(() => {
123
+ expect(screen.getByTestId("atom-amplitude-api-key")).toHaveTextContent(
124
+ initialConfig.amplitudeApiKey
125
+ );
126
+ });
127
+
128
+ const updatedConfig = {
129
+ amplitudeApiKey: "updated-key",
130
+ identifyingPrefix: "updated-prefix",
131
+ };
132
+
133
+ rerender(
134
+ <Provider>
135
+ <EnviveConfigProvider
136
+ amplitudeApiKey={updatedConfig.amplitudeApiKey}
137
+ identifyingPrefix={updatedConfig.identifyingPrefix}
138
+ >
139
+ <AtomReaderComponent />
140
+ </EnviveConfigProvider>
141
+ </Provider>
142
+ );
143
+
144
+ await waitFor(() => {
145
+ expect(screen.getByTestId("atom-amplitude-api-key")).toHaveTextContent(
146
+ updatedConfig.amplitudeApiKey
147
+ );
148
+ });
149
+
150
+ expect(screen.getByTestId("atom-identifying-prefix")).toHaveTextContent(
151
+ updatedConfig.identifyingPrefix
152
+ );
153
+ });
154
+ });
155
+
156
+ describe("useEnviveConfig Hook Integration", () => {
157
+ it("should allow components to access config via useEnviveConfig hook", async () => {
158
+ const testConfig = {
159
+ amplitudeApiKey: "hook-test-key",
160
+ baseUrl: "https://hook-test-api.example.com",
161
+ orgShortName: "hook-test-org",
162
+ identifyingPrefix: "hook-prefix",
163
+ env: "production",
164
+ cdnUrl: "https://hook-test-cdn.example.com",
165
+ dataResidency: "eu",
166
+ reactAppName: "hook-test-app",
167
+ contextSource: "hook-source",
168
+ orgLevelApiKey: "hook-org-key",
169
+ publicKey: "hook-public-key",
170
+ show: false,
171
+ };
172
+
173
+ render(
174
+ <Provider>
175
+ <EnviveConfigProvider
176
+ amplitudeApiKey={testConfig.amplitudeApiKey}
177
+ baseUrl={testConfig.baseUrl}
178
+ orgShortName={testConfig.orgShortName}
179
+ identifyingPrefix={testConfig.identifyingPrefix}
180
+ env={testConfig.env}
181
+ cdnUrl={testConfig.cdnUrl}
182
+ dataResidency={testConfig.dataResidency}
183
+ reactAppName={testConfig.reactAppName}
184
+ contextSource={testConfig.contextSource}
185
+ orgLevelApiKey={testConfig.orgLevelApiKey}
186
+ publicKey={testConfig.publicKey}
187
+ show={testConfig.show}
188
+ >
189
+ <MockComponent />
190
+ </EnviveConfigProvider>
191
+ </Provider>
192
+ );
193
+
194
+ // Wait for the config to be available
195
+ await waitFor(() => {
196
+ expect(screen.getByTestId("amplitude-api-key")).toHaveTextContent(
197
+ testConfig.amplitudeApiKey
198
+ );
199
+ });
200
+
201
+ // Verify all config values are accessible via the hook
202
+ expect(screen.getByTestId("amplitude-api-key")).toHaveTextContent(
203
+ testConfig.amplitudeApiKey
204
+ );
205
+ expect(screen.getByTestId("base-url")).toHaveTextContent(
206
+ testConfig.baseUrl
207
+ );
208
+ expect(screen.getByTestId("org-short-name")).toHaveTextContent(
209
+ testConfig.orgShortName
210
+ );
211
+ expect(screen.getByTestId("identifying-prefix")).toHaveTextContent(
212
+ testConfig.identifyingPrefix
213
+ );
214
+ expect(screen.getByTestId("env")).toHaveTextContent(testConfig.env);
215
+ expect(screen.getByTestId("cdn-url")).toHaveTextContent(
216
+ testConfig.cdnUrl
217
+ );
218
+ expect(screen.getByTestId("data-residency")).toHaveTextContent(
219
+ testConfig.dataResidency
220
+ );
221
+ expect(screen.getByTestId("react-app-name")).toHaveTextContent(
222
+ testConfig.reactAppName
223
+ );
224
+ expect(screen.getByTestId("context-source")).toHaveTextContent(
225
+ testConfig.contextSource
226
+ );
227
+ expect(screen.getByTestId("org-level-api-key")).toHaveTextContent(
228
+ testConfig.orgLevelApiKey
229
+ );
230
+ expect(screen.getByTestId("public-key")).toHaveTextContent(
231
+ testConfig.publicKey
232
+ );
233
+ expect(screen.getByTestId("show")).toHaveTextContent(
234
+ testConfig.show.toString()
235
+ );
236
+ });
237
+
238
+ it("should return empty object when config is not set", () => {
239
+ // Component that uses the hook without provider
240
+ const UnwrappedComponent: React.FC = () => {
241
+ const config = useEnviveConfig();
242
+ return (
243
+ <div data-testid="unwrapped">
244
+ {config && Object.keys(config).length === 0 ? "empty" : "not-empty"}
245
+ </div>
246
+ );
247
+ };
248
+
249
+ render(
250
+ <Provider>
251
+ <UnwrappedComponent />
252
+ </Provider>
253
+ );
254
+
255
+ // The hook should return an empty object when config is not set
256
+ expect(screen.getByTestId("unwrapped")).toHaveTextContent("empty");
257
+ });
258
+
259
+ it("should handle optional props correctly", async () => {
260
+ const minimalConfig = {
261
+ identifyingPrefix: "minimal-prefix",
262
+ };
263
+
264
+ render(
265
+ <Provider>
266
+ <EnviveConfigProvider identifyingPrefix={minimalConfig.identifyingPrefix}>
267
+ <MockComponent />
268
+ </EnviveConfigProvider>
269
+ </Provider>
270
+ );
271
+
272
+ await waitFor(() => {
273
+ expect(screen.getByTestId("identifying-prefix")).toHaveTextContent(
274
+ minimalConfig.identifyingPrefix
275
+ );
276
+ });
277
+
278
+ // Optional props should show "not-set" when not provided
279
+ expect(screen.getByTestId("amplitude-api-key")).toHaveTextContent("not-set");
280
+ expect(screen.getByTestId("base-url")).toHaveTextContent("not-set");
281
+ expect(screen.getByTestId("org-short-name")).toHaveTextContent("not-set");
282
+ });
283
+
284
+ it("should handle featureOverrides and featureGates", async () => {
285
+ const featureOverrides = {
286
+ feature1: true,
287
+ feature2: false,
288
+ };
289
+
290
+ const featureGates = [
291
+ {
292
+ featureName: "testFeature",
293
+ enabled: true,
294
+ },
295
+ ] as any[];
296
+
297
+ const FeatureConfigComponent: React.FC = () => {
298
+ const config = useEnviveConfig();
299
+ return (
300
+ <div data-testid="feature-config">
301
+ <div data-testid="feature-overrides">
302
+ {JSON.stringify(config?.featureOverrides || {})}
303
+ </div>
304
+ <div data-testid="feature-gates">
305
+ {JSON.stringify(config?.featureGates || [])}
306
+ </div>
307
+ </div>
308
+ );
309
+ };
310
+
311
+ render(
312
+ <Provider>
313
+ <EnviveConfigProvider
314
+ identifyingPrefix="test"
315
+ featureOverrides={featureOverrides}
316
+ featureGates={featureGates}
317
+ >
318
+ <FeatureConfigComponent />
319
+ </EnviveConfigProvider>
320
+ </Provider>
321
+ );
322
+
323
+ await waitFor(() => {
324
+ expect(screen.getByTestId("feature-overrides")).toHaveTextContent(
325
+ JSON.stringify(featureOverrides)
326
+ );
327
+ });
328
+
329
+ expect(screen.getByTestId("feature-gates")).toHaveTextContent(
330
+ JSON.stringify(featureGates)
331
+ );
332
+ });
333
+ });
334
+
335
+ describe("Provider Context Integration", () => {
336
+ it("should provide config through React Context", async () => {
337
+ const testConfig = {
338
+ identifyingPrefix: "context-prefix",
339
+ orgShortName: "context-org",
340
+ };
341
+
342
+ render(
343
+ <Provider>
344
+ <EnviveConfigProvider
345
+ identifyingPrefix={testConfig.identifyingPrefix}
346
+ orgShortName={testConfig.orgShortName}
347
+ >
348
+ <MockComponent />
349
+ </EnviveConfigProvider>
350
+ </Provider>
351
+ );
352
+
353
+ await waitFor(() => {
354
+ expect(screen.getByTestId("identifying-prefix")).toHaveTextContent(
355
+ testConfig.identifyingPrefix
356
+ );
357
+ });
358
+
359
+ expect(screen.getByTestId("org-short-name")).toHaveTextContent(
360
+ testConfig.orgShortName
361
+ );
362
+ });
363
+
364
+ it("should not render children when config is falsy", () => {
365
+ const TestChild: React.FC = () => <div data-testid="child">Child</div>;
366
+
367
+ // This shouldn't happen in practice, but testing the conditional render
368
+ const { container } = render(
369
+ <Provider>
370
+ <EnviveConfigProvider identifyingPrefix="" show={false}>
371
+ <TestChild />
372
+ </EnviveConfigProvider>
373
+ </Provider>
374
+ );
375
+
376
+ // Children should still render even if some props are falsy
377
+ // The condition `config ? children : null` checks if config object exists, not individual props
378
+ expect(screen.getByTestId("child")).toBeInTheDocument();
379
+ });
380
+ });
381
+
382
+ describe("Logger Integration", () => {
383
+ it("should log debug message when setting config", async () => {
384
+ const logSpy = vi.spyOn(Logger, "logDebug");
385
+
386
+ render(
387
+ <Provider>
388
+ <EnviveConfigProvider
389
+ identifyingPrefix="test"
390
+ amplitudeApiKey="test-key"
391
+ >
392
+ <div>Test</div>
393
+ </EnviveConfigProvider>
394
+ </Provider>
395
+ );
396
+
397
+ await waitFor(() => {
398
+ expect(logSpy).toHaveBeenCalledWith(
399
+ "EnviveConfigProvider: Setting EnviveConfig",
400
+ expect.objectContaining({
401
+ identifyingPrefix: "test",
402
+ amplitudeApiKey: "test-key",
403
+ })
404
+ );
405
+ });
406
+
407
+ logSpy.mockRestore();
408
+ });
409
+ });
410
+ });
411
+