@envive-ai/react-hooks 0.3.46 → 0.3.48

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 (243) hide show
  1. package/dist/application/commerce-api.cjs +73 -3
  2. package/dist/application/commerce-api.d.cts +16 -1
  3. package/dist/application/commerce-api.d.ts +16 -1
  4. package/dist/application/commerce-api.js +73 -3
  5. package/dist/application/models/api/userEvent.d.cts +9 -2
  6. package/dist/application/models/api/userEvent.d.ts +9 -2
  7. package/dist/application/models/featureGates.cjs +2 -1
  8. package/dist/application/models/featureGates.d.cts +2 -1
  9. package/dist/application/models/featureGates.d.ts +2 -1
  10. package/dist/application/models/featureGates.js +2 -1
  11. package/dist/application/models/graphql/queries/getProductOptionsQuery.cjs +33 -0
  12. package/dist/application/models/graphql/queries/getProductOptionsQuery.d.cts +28 -0
  13. package/dist/application/models/graphql/queries/getProductOptionsQuery.d.ts +28 -0
  14. package/dist/application/models/graphql/queries/getProductOptionsQuery.js +32 -0
  15. package/dist/application/models/validators/validateResponse.cjs +2 -1
  16. package/dist/application/models/validators/validateResponse.js +2 -1
  17. package/dist/application/models/validators/validateUserEvent.cjs +3 -3
  18. package/dist/application/models/validators/validateUserEvent.js +3 -3
  19. package/dist/application/utils/index.cjs +2 -0
  20. package/dist/application/utils/index.d.cts +2 -1
  21. package/dist/application/utils/index.d.ts +2 -1
  22. package/dist/application/utils/index.js +2 -1
  23. package/dist/application/utils/messageFromAddToCartEvent.cjs +32 -0
  24. package/dist/application/utils/messageFromAddToCartEvent.d.cts +19 -0
  25. package/dist/application/utils/messageFromAddToCartEvent.d.ts +19 -0
  26. package/dist/application/utils/messageFromAddToCartEvent.js +31 -0
  27. package/dist/atoms/app/index.cjs +1 -1
  28. package/dist/atoms/app/index.d.cts +7 -7
  29. package/dist/atoms/app/index.d.ts +7 -7
  30. package/dist/atoms/app/index.js +1 -1
  31. package/dist/atoms/app/variant.d.cts +6 -6
  32. package/dist/atoms/app/variant.d.ts +6 -6
  33. package/dist/atoms/chat/chatState.d.cts +19 -19
  34. package/dist/atoms/chat/chatState.d.ts +19 -19
  35. package/dist/atoms/chat/form.d.cts +2 -2
  36. package/dist/atoms/chat/form.d.ts +3 -3
  37. package/dist/atoms/chat/index.d.cts +2 -2
  38. package/dist/atoms/chat/index.d.ts +3 -3
  39. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  40. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  41. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  42. package/dist/atoms/chat/messageQueue.d.ts +7 -7
  43. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  44. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  45. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  46. package/dist/atoms/chat/renderedWidgetRefs.d.ts +3 -3
  47. package/dist/atoms/chat/replies.d.cts +1 -1
  48. package/dist/atoms/chat/replies.d.ts +3 -3
  49. package/dist/atoms/chat/suggestions.d.cts +2 -2
  50. package/dist/atoms/chat/suggestions.d.ts +3 -3
  51. package/dist/atoms/envive/enviveConfig.cjs +7 -4
  52. package/dist/atoms/envive/enviveConfig.d.cts +16 -14
  53. package/dist/atoms/envive/enviveConfig.d.ts +16 -14
  54. package/dist/atoms/envive/enviveConfig.js +6 -4
  55. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  56. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  57. package/dist/atoms/org/customerService.d.cts +6 -6
  58. package/dist/atoms/org/customerService.d.ts +6 -6
  59. package/dist/atoms/org/graphqlConfig.cjs +1 -1
  60. package/dist/atoms/org/graphqlConfig.d.cts +6 -6
  61. package/dist/atoms/org/graphqlConfig.d.ts +6 -6
  62. package/dist/atoms/org/graphqlConfig.js +1 -1
  63. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  64. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  65. package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
  66. package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
  67. package/dist/atoms/search/chatSearch.d.cts +17 -17
  68. package/dist/atoms/search/chatSearch.d.ts +17 -17
  69. package/dist/atoms/search/searchAPI.d.cts +13 -13
  70. package/dist/atoms/search/searchAPI.d.ts +13 -13
  71. package/dist/atoms/search/types.d.ts +1 -1
  72. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  73. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  74. package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +6 -4
  75. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +3 -1
  76. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +3 -1
  77. package/dist/contexts/enviveConfigContext/enviveConfigContext.js +6 -4
  78. package/dist/contexts/enviveContext/enviveContext.cjs +7 -3
  79. package/dist/contexts/enviveContext/enviveContext.d.cts +5 -1
  80. package/dist/contexts/enviveContext/enviveContext.d.ts +5 -1
  81. package/dist/contexts/enviveContext/enviveContext.js +7 -3
  82. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +2 -97
  83. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +3 -25
  84. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +3 -25
  85. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +3 -97
  86. package/dist/contexts/featureFlagServiceContext/index.cjs +2 -1
  87. package/dist/contexts/featureFlagServiceContext/index.d.cts +2 -1
  88. package/dist/contexts/featureFlagServiceContext/index.d.ts +2 -1
  89. package/dist/contexts/featureFlagServiceContext/index.js +2 -1
  90. package/dist/contexts/graphqlContext/mockV3Config.cjs +1 -1
  91. package/dist/contexts/graphqlContext/mockV3Config.js +1 -1
  92. package/dist/contexts/localStorageContext/index.cjs +2 -1
  93. package/dist/contexts/localStorageContext/index.d.cts +2 -1
  94. package/dist/contexts/localStorageContext/index.d.ts +2 -1
  95. package/dist/contexts/localStorageContext/index.js +2 -1
  96. package/dist/contexts/localStorageContext/localStorageContext.cjs +5 -11
  97. package/dist/contexts/localStorageContext/localStorageContext.d.cts +3 -7
  98. package/dist/contexts/localStorageContext/localStorageContext.d.ts +3 -7
  99. package/dist/contexts/localStorageContext/localStorageContext.js +3 -8
  100. package/dist/contexts/localStorageContext/localStorageKeys.cjs +12 -0
  101. package/dist/contexts/localStorageContext/localStorageKeys.d.cts +9 -0
  102. package/dist/contexts/localStorageContext/localStorageKeys.d.ts +9 -0
  103. package/dist/contexts/localStorageContext/localStorageKeys.js +11 -0
  104. package/dist/contexts/salesAgentContext/chatAPI.cjs +13 -2
  105. package/dist/contexts/salesAgentContext/chatAPI.d.cts +4 -1
  106. package/dist/contexts/salesAgentContext/chatAPI.d.ts +4 -1
  107. package/dist/contexts/salesAgentContext/chatAPI.js +14 -3
  108. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +12 -4
  109. package/dist/contexts/salesAgentContext/salesAgentContext.js +12 -4
  110. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  111. package/dist/contexts/types.cjs +1 -1
  112. package/dist/contexts/types.d.cts +3 -1
  113. package/dist/contexts/types.d.ts +3 -1
  114. package/dist/contexts/types.js +1 -1
  115. package/dist/contexts/typesV3.cjs +1 -1
  116. package/dist/contexts/typesV3.d.cts +11 -2
  117. package/dist/contexts/typesV3.d.ts +12 -3
  118. package/dist/contexts/typesV3.js +1 -1
  119. package/dist/hooks/AddToCart/addToCartErrorMessage.cjs +7 -0
  120. package/dist/hooks/AddToCart/addToCartErrorMessage.d.cts +5 -0
  121. package/dist/hooks/AddToCart/addToCartErrorMessage.d.ts +5 -0
  122. package/dist/hooks/AddToCart/addToCartErrorMessage.js +6 -0
  123. package/dist/hooks/AddToCart/createAddToCartUserEvent.cjs +20 -0
  124. package/dist/hooks/AddToCart/createAddToCartUserEvent.d.cts +17 -0
  125. package/dist/hooks/AddToCart/createAddToCartUserEvent.d.ts +17 -0
  126. package/dist/hooks/AddToCart/createAddToCartUserEvent.js +19 -0
  127. package/dist/hooks/AddToCart/index.cjs +9 -0
  128. package/dist/hooks/AddToCart/index.d.cts +5 -0
  129. package/dist/hooks/AddToCart/index.d.ts +5 -0
  130. package/dist/hooks/AddToCart/index.js +6 -0
  131. package/dist/hooks/AddToCart/parseAddToCartFunction.cjs +27 -0
  132. package/dist/hooks/AddToCart/parseAddToCartFunction.d.cts +13 -0
  133. package/dist/hooks/AddToCart/parseAddToCartFunction.d.ts +13 -0
  134. package/dist/hooks/AddToCart/parseAddToCartFunction.js +27 -0
  135. package/dist/hooks/AddToCart/useAddToCart.cjs +24 -0
  136. package/dist/hooks/AddToCart/useAddToCart.d.cts +14 -0
  137. package/dist/hooks/AddToCart/useAddToCart.d.ts +14 -0
  138. package/dist/hooks/AddToCart/useAddToCart.js +23 -0
  139. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  140. package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.cjs +6 -5
  141. package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.js +3 -2
  142. package/dist/hooks/PageViewedEvent/usePageViewedEvent.cjs +5 -2
  143. package/dist/hooks/PageViewedEvent/usePageViewedEvent.js +5 -2
  144. package/dist/hooks/ProductDetails/index.cjs +9 -0
  145. package/dist/hooks/ProductDetails/index.d.cts +4 -0
  146. package/dist/hooks/ProductDetails/index.d.ts +4 -0
  147. package/dist/hooks/ProductDetails/index.js +4 -0
  148. package/dist/hooks/ProductDetails/useProductDetails.cjs +53 -0
  149. package/dist/hooks/ProductDetails/useProductDetails.d.cts +20 -0
  150. package/dist/hooks/ProductDetails/useProductDetails.d.ts +20 -0
  151. package/dist/hooks/ProductDetails/useProductDetails.js +52 -0
  152. package/dist/hooks/ProductDetails/variantSelection.cjs +42 -0
  153. package/dist/hooks/ProductDetails/variantSelection.d.cts +35 -0
  154. package/dist/hooks/ProductDetails/variantSelection.d.ts +35 -0
  155. package/dist/hooks/ProductDetails/variantSelection.js +38 -0
  156. package/dist/hooks/Search/useSearch.d.cts +1 -1
  157. package/dist/hooks/Search/useSearch.d.ts +1 -1
  158. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +11 -2
  159. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.cts +1 -10
  160. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts +1 -10
  161. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +11 -2
  162. package/dist/hooks/WidgetInteraction/types.cjs +12 -2
  163. package/dist/hooks/WidgetInteraction/types.d.cts +28 -3
  164. package/dist/hooks/WidgetInteraction/types.d.ts +28 -3
  165. package/dist/hooks/WidgetInteraction/types.js +12 -2
  166. package/dist/hooks/utils.d.cts +1 -1
  167. package/dist/hooks/utils.d.ts +1 -1
  168. package/dist/services/amplitudeService/amplitudeService.cjs +16 -10
  169. package/dist/services/amplitudeService/amplitudeService.d.cts +5 -2
  170. package/dist/services/amplitudeService/amplitudeService.d.ts +5 -2
  171. package/dist/services/amplitudeService/amplitudeService.js +14 -7
  172. package/dist/services/enviveConfigService/enviveConfigService.cjs +3 -4
  173. package/dist/services/enviveConfigService/enviveConfigService.d.cts +1 -1
  174. package/dist/services/enviveConfigService/enviveConfigService.d.ts +1 -1
  175. package/dist/services/enviveConfigService/enviveConfigService.js +2 -3
  176. package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +8 -7
  177. package/dist/services/enviveConfigService/fetchGraphQLConfig.js +8 -6
  178. package/dist/services/featureFlagService/index.cjs +101 -0
  179. package/dist/services/featureFlagService/index.d.cts +28 -0
  180. package/dist/services/featureFlagService/index.d.ts +28 -0
  181. package/dist/services/featureFlagService/index.js +101 -0
  182. package/dist/services/ga4ProjectionService/ga4EventSchema.cjs +8 -2
  183. package/dist/services/ga4ProjectionService/ga4EventSchema.js +8 -2
  184. package/dist/services/hardcopyService/hardcopyService.d.cts +1 -1
  185. package/dist/services/hardcopyService/hardcopyService.d.ts +1 -1
  186. package/dist/services/urlResolverWarmupService/index.cjs +54 -0
  187. package/dist/services/urlResolverWarmupService/index.d.cts +40 -0
  188. package/dist/services/urlResolverWarmupService/index.d.ts +40 -0
  189. package/dist/services/urlResolverWarmupService/index.js +54 -0
  190. package/dist/types/enviveConfig.d.cts +6 -2
  191. package/dist/types/enviveConfig.d.ts +6 -2
  192. package/dist/types/index.d.cts +2 -2
  193. package/dist/types/index.d.ts +2 -2
  194. package/package.json +17 -1
  195. package/src/application/__tests__/commerceApiAddToCartRehydration.test.ts +126 -0
  196. package/src/application/commerce-api.ts +142 -23
  197. package/src/application/models/api/userEvent.ts +8 -1
  198. package/src/application/models/featureGates.ts +5 -0
  199. package/src/application/models/graphql/queries/getProductOptionsQuery.ts +59 -0
  200. package/src/application/models/validators/__tests__/validateUserEvent.test.ts +41 -0
  201. package/src/application/models/validators/validateResponse.ts +1 -0
  202. package/src/application/models/validators/validateUserEvent.ts +7 -2
  203. package/src/application/utils/__tests__/messageFromAddToCartEvent.test.ts +109 -0
  204. package/src/application/utils/index.ts +1 -0
  205. package/src/application/utils/messageFromAddToCartEvent.ts +32 -0
  206. package/src/atoms/app/index.ts +1 -1
  207. package/src/atoms/envive/enviveConfig.ts +6 -1
  208. package/src/atoms/org/graphqlConfig.ts +1 -1
  209. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +5 -0
  210. package/src/contexts/enviveContext/enviveContext.tsx +10 -0
  211. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +6 -173
  212. package/src/contexts/localStorageContext/localStorageContext.tsx +2 -5
  213. package/src/contexts/localStorageContext/localStorageKeys.ts +8 -0
  214. package/src/contexts/salesAgentContext/__tests__/chatAPI.test.tsx +63 -0
  215. package/src/contexts/salesAgentContext/chatAPI.ts +20 -1
  216. package/src/contexts/salesAgentContext/salesAgentContext.tsx +10 -0
  217. package/src/contexts/types.ts +2 -0
  218. package/src/contexts/typesV3.ts +14 -0
  219. package/src/hooks/AddToCart/__tests__/parseAddToCartFunction.test.ts +31 -0
  220. package/src/hooks/AddToCart/__tests__/useAddToCart.test.tsx +204 -0
  221. package/src/hooks/AddToCart/addToCartErrorMessage.ts +2 -0
  222. package/src/hooks/AddToCart/createAddToCartUserEvent.ts +25 -0
  223. package/src/hooks/AddToCart/index.ts +4 -0
  224. package/src/hooks/AddToCart/parseAddToCartFunction.ts +31 -0
  225. package/src/hooks/AddToCart/useAddToCart.ts +35 -0
  226. package/src/hooks/PageViewedEvent/usePageViewedEvent.ts +4 -0
  227. package/src/hooks/ProductDetails/__tests__/useProductDetails.test.tsx +129 -0
  228. package/src/hooks/ProductDetails/__tests__/variantSelection.test.ts +145 -0
  229. package/src/hooks/ProductDetails/index.ts +2 -0
  230. package/src/hooks/ProductDetails/useProductDetails.ts +62 -0
  231. package/src/hooks/ProductDetails/variantSelection.ts +61 -0
  232. package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +15 -0
  233. package/src/hooks/WidgetInteraction/types.ts +42 -1
  234. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +8 -8
  235. package/src/services/amplitudeService/amplitudeService.ts +42 -23
  236. package/src/services/enviveConfigService/enviveConfigService.ts +2 -2
  237. package/src/services/enviveConfigService/fetchGraphQLConfig.ts +17 -6
  238. package/src/services/featureFlagService/index.ts +176 -0
  239. package/src/services/ga4ProjectionService/__tests__/ga4ProjectionService.test.ts +36 -0
  240. package/src/services/ga4ProjectionService/ga4EventSchema.ts +7 -0
  241. package/src/services/urlResolverWarmupService/__tests__/urlResolverWarmupService.test.ts +85 -0
  242. package/src/services/urlResolverWarmupService/index.ts +89 -0
  243. package/src/types/enviveConfig.ts +3 -0
@@ -0,0 +1,85 @@
1
+ import { createStore } from 'jotai';
2
+ import { getAtomStore, setAtomStoreForTesting } from 'src/atoms/atomStore/atomStore';
3
+ import { contextSourceAtom, envAtom, enviveConfigAtom } from 'src/atoms/envive/enviveConfig';
4
+ import { featureFlagServiceAtom } from 'src/atoms/org/graphqlConfig';
5
+ import { FeatureFlagService } from 'src/services/featureFlagService';
6
+ import type { EnviveServiceConfig } from 'src/services/enviveConfigService';
7
+ import { warmUrlResolver } from '../index';
8
+
9
+ const { mockResolveUrl } = vi.hoisted(() => ({ mockResolveUrl: vi.fn() }));
10
+
11
+ vi.mock('src/application/commerce-api', () => ({
12
+ default: { resolveUrl: mockResolveUrl },
13
+ }));
14
+
15
+ const enviveServiceConfig = {
16
+ org: { org: { short_name: 'test-org', id: 'org-1' } },
17
+ } as EnviveServiceConfig;
18
+
19
+ const baseParams = {
20
+ baseUrl: 'https://commerce-api.spiffy.ai',
21
+ apiKey: 'test-key',
22
+ enviveServiceConfig,
23
+ show: true,
24
+ enviveOn: false,
25
+ };
26
+
27
+ describe('warmUrlResolver', () => {
28
+ beforeEach(() => {
29
+ setAtomStoreForTesting(createStore());
30
+ window.sessionStorage.clear();
31
+ vi.clearAllMocks();
32
+ mockResolveUrl.mockResolvedValue({ ready: true });
33
+ });
34
+
35
+ it('seeds env, contextSource, and the feature flag service before resolving', async () => {
36
+ const featureFlagService = new FeatureFlagService([]);
37
+
38
+ let envAtCallTime: string | undefined;
39
+ let contextSourceAtCallTime: string | undefined;
40
+ let flagServiceAtCallTime: FeatureFlagService | undefined;
41
+ mockResolveUrl.mockImplementation(async () => {
42
+ const store = getAtomStore();
43
+ envAtCallTime = store.get(envAtom);
44
+ contextSourceAtCallTime = store.get(contextSourceAtom);
45
+ flagServiceAtCallTime = store.get(featureFlagServiceAtom)?.featureFlagService;
46
+ return { ready: true };
47
+ });
48
+
49
+ await warmUrlResolver({
50
+ ...baseParams,
51
+ env: 'prod',
52
+ contextSource: 'app',
53
+ featureFlagService,
54
+ });
55
+
56
+ expect(mockResolveUrl).toHaveBeenCalledTimes(1);
57
+ expect(envAtCallTime).toBe('prod');
58
+ expect(contextSourceAtCallTime).toBe('app');
59
+ expect(flagServiceAtCallTime).toBe(featureFlagService);
60
+ });
61
+
62
+ it('does not overwrite atoms a provider has already seeded', async () => {
63
+ const store = getAtomStore();
64
+ const existingFlagService = new FeatureFlagService([]);
65
+ store.set(enviveConfigAtom, { identifyingPrefix: 'test', env: 'dev' });
66
+ store.set(featureFlagServiceAtom, { featureFlagService: existingFlagService });
67
+
68
+ await warmUrlResolver({
69
+ ...baseParams,
70
+ env: 'prod',
71
+ contextSource: 'playground',
72
+ featureFlagService: new FeatureFlagService([]),
73
+ });
74
+
75
+ expect(store.get(envAtom)).toBe('dev');
76
+ expect(store.get(featureFlagServiceAtom)?.featureFlagService).toBe(existingFlagService);
77
+ });
78
+
79
+ it('leaves the feature flag service atom unset when none is provided', async () => {
80
+ await warmUrlResolver(baseParams);
81
+
82
+ expect(getAtomStore().get(featureFlagServiceAtom)).toBeUndefined();
83
+ expect(mockResolveUrl).toHaveBeenCalledTimes(1);
84
+ });
85
+ });
@@ -0,0 +1,89 @@
1
+ import CommerceApiClient from 'src/application/commerce-api';
2
+ import Logger from 'src/application/logging/logger';
3
+ import { UrlResolverResponse, urlResolverAtom } from 'src/atoms/app/variant';
4
+ import { getAtomStore } from 'src/atoms/atomStore/atomStore';
5
+ import { enviveConfigAtom } from 'src/atoms/envive/enviveConfig';
6
+ import { resolvedBaseConfigVersionAtom } from 'src/atoms/envive/resolvedBaseConfigVersion';
7
+ import { featureFlagServiceAtom } from 'src/atoms/org/graphqlConfig';
8
+ import { EnviveServiceConfig } from 'src/services/enviveConfigService';
9
+ import type { FeatureFlagService } from 'src/services/featureFlagService';
10
+
11
+ const logger = new Logger('urlResolverWarmupService');
12
+
13
+ export interface WarmUrlResolverParams {
14
+ baseUrl: string;
15
+ apiKey: string;
16
+ enviveServiceConfig: EnviveServiceConfig;
17
+ show?: boolean;
18
+ enviveOn?: boolean;
19
+ env?: string;
20
+ contextSource?: string;
21
+ featureFlagService?: FeatureFlagService;
22
+ }
23
+
24
+ /**
25
+ * Fires the /v1/url_resolving request as soon as the org config is available,
26
+ * instead of waiting for the React tree to mount and PageProvider's effect to
27
+ * run — that removes a full network round trip from the first-widget-paint
28
+ * critical path.
29
+ *
30
+ * Seeds the same atoms EnviveProvider/EnviveConfigProvider populate later
31
+ * (with identical values) so the request context matches the one
32
+ * PageProvider would send, then stores the response in the
33
+ * sessionStorage-backed urlResolverAtom that PageProvider consults before
34
+ * fetching. Concurrent calls for the same URL are deduped inside
35
+ * CommerceApiClient.resolveUrl.
36
+ */
37
+ export const warmUrlResolver = async ({
38
+ baseUrl,
39
+ apiKey,
40
+ enviveServiceConfig,
41
+ show,
42
+ enviveOn,
43
+ env,
44
+ contextSource,
45
+ featureFlagService,
46
+ }: WarmUrlResolverParams): Promise<void> => {
47
+ try {
48
+ const store = getAtomStore();
49
+ // Must match PageProvider's URL cleansing so the cache key lines up.
50
+ const cleansedUrl = window.location.href.toLowerCase().trim();
51
+ if (store.get(urlResolverAtom)[cleansedUrl]) {
52
+ return;
53
+ }
54
+
55
+ // The CommerceApiClient singleton captures baseUrl/apiKey at first
56
+ // instantiation, so these atoms must be seeded before any API call.
57
+ // Only seed when unset — providers own this atom once React mounts.
58
+ if (store.get(enviveConfigAtom) === undefined) {
59
+ store.set(enviveConfigAtom, {
60
+ baseUrl,
61
+ orgLevelApiKey: apiKey,
62
+ orgShortName: enviveServiceConfig.org.org.short_name,
63
+ orgId: enviveServiceConfig.org.org.id,
64
+ show,
65
+ enviveOn,
66
+ env,
67
+ contextSource,
68
+ });
69
+ }
70
+ // resolveUrl reads feature gates through featureFlagServiceAtom; without
71
+ // this seed the warm-up request is computed with feature_gates={} and
72
+ // that response is what gets cached for PageProvider.
73
+ if (featureFlagService && store.get(featureFlagServiceAtom) === undefined) {
74
+ store.set(featureFlagServiceAtom, { featureFlagService });
75
+ }
76
+ // Mirrors EnviveProvider: "deployed" is the no-pin sentinel.
77
+ const { baseVersion, baseVersionSource } = enviveServiceConfig.orgConfig?.resolution ?? {};
78
+ if (baseVersion && baseVersionSource && baseVersionSource !== 'deployed') {
79
+ store.set(resolvedBaseConfigVersionAtom, baseVersion);
80
+ }
81
+
82
+ const response = (await CommerceApiClient.resolveUrl(cleansedUrl)) as UrlResolverResponse;
83
+ store.set(urlResolverAtom, { url: cleansedUrl, response });
84
+ } catch (err) {
85
+ // Fail open: PageProvider issues its own resolveUrl call when the cache
86
+ // is empty, so a warm-up failure never blocks rendering.
87
+ logger.logDebug('URL resolver warm-up failed', err);
88
+ }
89
+ };
@@ -2,8 +2,11 @@ import { FrontendConfigOverrides, VariantInfo } from 'src/application/models';
2
2
  import type { HardcopyResponse } from 'src/contexts/hardcopyContext/hardcopyContext';
3
3
  import type { WidgetTypeV3 } from 'src/contexts/typesV3';
4
4
 
5
+ export type AddToCartCallback = (params: { product_id: string }) => void | Promise<void>;
6
+
5
7
  export interface EnviveConfig {
6
8
  publicKey?: string;
9
+ addToCart?: AddToCartCallback;
7
10
  userID?: string;
8
11
  env?: 'prod' | 'dev';
9
12
  clientID?: string;