@envive-ai/react-hooks 0.3.45 → 0.3.47

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 (293) 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/api/widgetText.d.cts +2 -1
  8. package/dist/application/models/api/widgetText.d.ts +2 -1
  9. package/dist/application/models/featureGates.cjs +2 -1
  10. package/dist/application/models/featureGates.d.cts +2 -1
  11. package/dist/application/models/featureGates.d.ts +2 -1
  12. package/dist/application/models/featureGates.js +2 -1
  13. package/dist/application/models/graphql/queries/getProductOptionsQuery.cjs +33 -0
  14. package/dist/application/models/graphql/queries/getProductOptionsQuery.d.cts +28 -0
  15. package/dist/application/models/graphql/queries/getProductOptionsQuery.d.ts +28 -0
  16. package/dist/application/models/graphql/queries/getProductOptionsQuery.js +32 -0
  17. package/dist/application/models/index.cjs +1 -1
  18. package/dist/application/models/index.js +1 -1
  19. package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +1 -1
  20. package/dist/application/models/validators/validateGraphQLFrontendConfig.js +1 -1
  21. package/dist/application/models/validators/validateResponse.cjs +2 -1
  22. package/dist/application/models/validators/validateResponse.js +2 -1
  23. package/dist/application/models/validators/validateUserEvent.cjs +3 -3
  24. package/dist/application/models/validators/validateUserEvent.js +3 -3
  25. package/dist/application/utils/elementObserver.d.cts +2 -2
  26. package/dist/application/utils/elementObserver.d.ts +2 -2
  27. package/dist/application/utils/index.cjs +2 -0
  28. package/dist/application/utils/index.d.cts +2 -1
  29. package/dist/application/utils/index.d.ts +2 -1
  30. package/dist/application/utils/index.js +2 -1
  31. package/dist/application/utils/messageFromAddToCartEvent.cjs +32 -0
  32. package/dist/application/utils/messageFromAddToCartEvent.d.cts +19 -0
  33. package/dist/application/utils/messageFromAddToCartEvent.d.ts +19 -0
  34. package/dist/application/utils/messageFromAddToCartEvent.js +31 -0
  35. package/dist/application/utils/widgetTextFromApiWidgetTextResponse.cjs +3 -2
  36. package/dist/application/utils/widgetTextFromApiWidgetTextResponse.js +3 -2
  37. package/dist/atoms/app/index.cjs +1 -1
  38. package/dist/atoms/app/index.d.cts +7 -7
  39. package/dist/atoms/app/index.d.ts +7 -7
  40. package/dist/atoms/app/index.js +1 -1
  41. package/dist/atoms/app/variant.cjs +2 -2
  42. package/dist/atoms/app/variant.d.cts +7 -7
  43. package/dist/atoms/app/variant.d.ts +7 -7
  44. package/dist/atoms/app/variant.js +2 -2
  45. package/dist/atoms/chat/chatState.d.cts +19 -19
  46. package/dist/atoms/chat/chatState.d.ts +19 -19
  47. package/dist/atoms/chat/form.d.cts +2 -2
  48. package/dist/atoms/chat/form.d.ts +2 -2
  49. package/dist/atoms/chat/index.cjs +1 -1
  50. package/dist/atoms/chat/index.d.cts +2 -2
  51. package/dist/atoms/chat/index.d.ts +2 -2
  52. package/dist/atoms/chat/index.js +1 -1
  53. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  54. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  55. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  56. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  57. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  58. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  59. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  60. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  61. package/dist/atoms/chat/replies.d.cts +3 -3
  62. package/dist/atoms/chat/replies.d.ts +2 -2
  63. package/dist/atoms/chat/suggestions.d.cts +2 -2
  64. package/dist/atoms/chat/suggestions.d.ts +2 -2
  65. package/dist/atoms/envive/enviveConfig.cjs +7 -4
  66. package/dist/atoms/envive/enviveConfig.d.cts +16 -14
  67. package/dist/atoms/envive/enviveConfig.d.ts +16 -14
  68. package/dist/atoms/envive/enviveConfig.js +6 -4
  69. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  70. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  71. package/dist/atoms/org/customerService.d.cts +6 -6
  72. package/dist/atoms/org/customerService.d.ts +6 -6
  73. package/dist/atoms/org/graphqlConfig.cjs +1 -1
  74. package/dist/atoms/org/graphqlConfig.d.cts +6 -6
  75. package/dist/atoms/org/graphqlConfig.d.ts +6 -6
  76. package/dist/atoms/org/graphqlConfig.js +1 -1
  77. package/dist/atoms/org/index.cjs +1 -1
  78. package/dist/atoms/org/index.js +1 -1
  79. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  80. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  81. package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
  82. package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
  83. package/dist/atoms/search/chatSearch.cjs +1 -1
  84. package/dist/atoms/search/chatSearch.d.cts +17 -17
  85. package/dist/atoms/search/chatSearch.d.ts +17 -17
  86. package/dist/atoms/search/chatSearch.js +1 -1
  87. package/dist/atoms/search/searchAPI.cjs +1 -1
  88. package/dist/atoms/search/searchAPI.d.cts +13 -13
  89. package/dist/atoms/search/searchAPI.d.ts +13 -13
  90. package/dist/atoms/search/searchAPI.js +1 -1
  91. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  92. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  93. package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +6 -4
  94. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +3 -1
  95. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +3 -1
  96. package/dist/contexts/enviveConfigContext/enviveConfigContext.js +6 -4
  97. package/dist/contexts/enviveContext/enviveContext.cjs +7 -3
  98. package/dist/contexts/enviveContext/enviveContext.d.cts +5 -1
  99. package/dist/contexts/enviveContext/enviveContext.d.ts +5 -1
  100. package/dist/contexts/enviveContext/enviveContext.js +7 -3
  101. package/dist/contexts/enviveContext/types.d.cts +1 -1
  102. package/dist/contexts/enviveContext/types.d.ts +1 -1
  103. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +2 -97
  104. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +3 -25
  105. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +3 -25
  106. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +3 -97
  107. package/dist/contexts/featureFlagServiceContext/index.cjs +2 -1
  108. package/dist/contexts/featureFlagServiceContext/index.d.cts +2 -1
  109. package/dist/contexts/featureFlagServiceContext/index.d.ts +2 -1
  110. package/dist/contexts/featureFlagServiceContext/index.js +2 -1
  111. package/dist/contexts/graphqlContext/mockV3Config.cjs +1 -1
  112. package/dist/contexts/graphqlContext/mockV3Config.js +1 -1
  113. package/dist/contexts/localStorageContext/index.cjs +2 -1
  114. package/dist/contexts/localStorageContext/index.d.cts +2 -1
  115. package/dist/contexts/localStorageContext/index.d.ts +2 -1
  116. package/dist/contexts/localStorageContext/index.js +2 -1
  117. package/dist/contexts/localStorageContext/localStorageContext.cjs +5 -11
  118. package/dist/contexts/localStorageContext/localStorageContext.d.cts +3 -7
  119. package/dist/contexts/localStorageContext/localStorageContext.d.ts +3 -7
  120. package/dist/contexts/localStorageContext/localStorageContext.js +3 -8
  121. package/dist/contexts/localStorageContext/localStorageKeys.cjs +12 -0
  122. package/dist/contexts/localStorageContext/localStorageKeys.d.cts +9 -0
  123. package/dist/contexts/localStorageContext/localStorageKeys.d.ts +9 -0
  124. package/dist/contexts/localStorageContext/localStorageKeys.js +11 -0
  125. package/dist/contexts/pageContext/pageContext.cjs +2 -2
  126. package/dist/contexts/pageContext/pageContext.js +2 -2
  127. package/dist/contexts/salesAgentContext/chatAPI.cjs +15 -4
  128. package/dist/contexts/salesAgentContext/chatAPI.d.cts +4 -1
  129. package/dist/contexts/salesAgentContext/chatAPI.d.ts +4 -1
  130. package/dist/contexts/salesAgentContext/chatAPI.js +16 -5
  131. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +15 -4
  132. package/dist/contexts/salesAgentContext/salesAgentContext.d.cts +2 -1
  133. package/dist/contexts/salesAgentContext/salesAgentContext.d.ts +2 -1
  134. package/dist/contexts/salesAgentContext/salesAgentContext.js +16 -5
  135. package/dist/contexts/salesAgentContext/salesAgentService.cjs +12 -4
  136. package/dist/contexts/salesAgentContext/salesAgentService.js +12 -4
  137. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  138. package/dist/contexts/searchContext/searchContext.js +1 -1
  139. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  140. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
  141. package/dist/contexts/types.cjs +1 -1
  142. package/dist/contexts/types.d.cts +3 -1
  143. package/dist/contexts/types.d.ts +3 -1
  144. package/dist/contexts/types.js +1 -1
  145. package/dist/contexts/typesV3.cjs +1 -1
  146. package/dist/contexts/typesV3.d.cts +11 -2
  147. package/dist/contexts/typesV3.d.ts +12 -3
  148. package/dist/contexts/typesV3.js +1 -1
  149. package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +1 -1
  150. package/dist/contexts/widgetConfigContext/widgetConfigContext.js +1 -1
  151. package/dist/hooks/AddToCart/addToCartErrorMessage.cjs +7 -0
  152. package/dist/hooks/AddToCart/addToCartErrorMessage.d.cts +5 -0
  153. package/dist/hooks/AddToCart/addToCartErrorMessage.d.ts +5 -0
  154. package/dist/hooks/AddToCart/addToCartErrorMessage.js +6 -0
  155. package/dist/hooks/AddToCart/createAddToCartUserEvent.cjs +20 -0
  156. package/dist/hooks/AddToCart/createAddToCartUserEvent.d.cts +17 -0
  157. package/dist/hooks/AddToCart/createAddToCartUserEvent.d.ts +17 -0
  158. package/dist/hooks/AddToCart/createAddToCartUserEvent.js +19 -0
  159. package/dist/hooks/AddToCart/index.cjs +9 -0
  160. package/dist/hooks/AddToCart/index.d.cts +5 -0
  161. package/dist/hooks/AddToCart/index.d.ts +5 -0
  162. package/dist/hooks/AddToCart/index.js +6 -0
  163. package/dist/hooks/AddToCart/parseAddToCartFunction.cjs +27 -0
  164. package/dist/hooks/AddToCart/parseAddToCartFunction.d.cts +13 -0
  165. package/dist/hooks/AddToCart/parseAddToCartFunction.d.ts +13 -0
  166. package/dist/hooks/AddToCart/parseAddToCartFunction.js +27 -0
  167. package/dist/hooks/AddToCart/useAddToCart.cjs +24 -0
  168. package/dist/hooks/AddToCart/useAddToCart.d.cts +14 -0
  169. package/dist/hooks/AddToCart/useAddToCart.d.ts +14 -0
  170. package/dist/hooks/AddToCart/useAddToCart.js +23 -0
  171. package/dist/hooks/ChatToggle/useChatToggle.cjs +1 -1
  172. package/dist/hooks/ChatToggle/useChatToggle.js +1 -1
  173. package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.cjs +6 -5
  174. package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.js +3 -2
  175. package/dist/hooks/PageViewedEvent/usePageViewedEvent.cjs +6 -3
  176. package/dist/hooks/PageViewedEvent/usePageViewedEvent.js +6 -3
  177. package/dist/hooks/ProductDetails/index.cjs +9 -0
  178. package/dist/hooks/ProductDetails/index.d.cts +4 -0
  179. package/dist/hooks/ProductDetails/index.d.ts +4 -0
  180. package/dist/hooks/ProductDetails/index.js +4 -0
  181. package/dist/hooks/ProductDetails/useProductDetails.cjs +53 -0
  182. package/dist/hooks/ProductDetails/useProductDetails.d.cts +20 -0
  183. package/dist/hooks/ProductDetails/useProductDetails.d.ts +20 -0
  184. package/dist/hooks/ProductDetails/useProductDetails.js +52 -0
  185. package/dist/hooks/ProductDetails/variantSelection.cjs +42 -0
  186. package/dist/hooks/ProductDetails/variantSelection.d.cts +35 -0
  187. package/dist/hooks/ProductDetails/variantSelection.d.ts +35 -0
  188. package/dist/hooks/ProductDetails/variantSelection.js +38 -0
  189. package/dist/hooks/Search/useSearch.cjs +3 -3
  190. package/dist/hooks/Search/useSearch.d.cts +1 -1
  191. package/dist/hooks/Search/useSearch.d.ts +1 -1
  192. package/dist/hooks/Search/useSearch.js +3 -3
  193. package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
  194. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +11 -2
  195. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.cts +1 -10
  196. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts +1 -10
  197. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +11 -2
  198. package/dist/hooks/WidgetInteraction/types.cjs +13 -3
  199. package/dist/hooks/WidgetInteraction/types.d.cts +29 -4
  200. package/dist/hooks/WidgetInteraction/types.d.ts +29 -4
  201. package/dist/hooks/WidgetInteraction/types.js +13 -3
  202. package/dist/hooks/WidgetInteraction/utils.cjs +2 -2
  203. package/dist/hooks/WidgetInteraction/utils.js +2 -2
  204. package/dist/hooks/utils.d.cts +1 -1
  205. package/dist/hooks/utils.d.ts +1 -1
  206. package/dist/services/amplitudeService/amplitudeService.cjs +18 -11
  207. package/dist/services/amplitudeService/amplitudeService.d.cts +5 -2
  208. package/dist/services/amplitudeService/amplitudeService.d.ts +5 -2
  209. package/dist/services/amplitudeService/amplitudeService.js +16 -8
  210. package/dist/services/enviveConfigService/enviveConfigService.cjs +36 -4
  211. package/dist/services/enviveConfigService/enviveConfigService.d.cts +4 -1
  212. package/dist/services/enviveConfigService/enviveConfigService.d.ts +4 -1
  213. package/dist/services/enviveConfigService/enviveConfigService.js +35 -3
  214. package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +9 -8
  215. package/dist/services/enviveConfigService/fetchGraphQLConfig.js +9 -7
  216. package/dist/services/featureFlagService/index.cjs +101 -0
  217. package/dist/services/featureFlagService/index.d.cts +28 -0
  218. package/dist/services/featureFlagService/index.d.ts +28 -0
  219. package/dist/services/featureFlagService/index.js +101 -0
  220. package/dist/services/ga4ProjectionService/ga4EventSchema.cjs +8 -2
  221. package/dist/services/ga4ProjectionService/ga4EventSchema.js +8 -2
  222. package/dist/services/hardcopyService/hardcopyService.cjs +4 -3
  223. package/dist/services/hardcopyService/hardcopyService.d.cts +1 -1
  224. package/dist/services/hardcopyService/hardcopyService.d.ts +1 -1
  225. package/dist/services/hardcopyService/hardcopyService.js +4 -3
  226. package/dist/services/urlResolverWarmupService/index.cjs +54 -0
  227. package/dist/services/urlResolverWarmupService/index.d.cts +40 -0
  228. package/dist/services/urlResolverWarmupService/index.d.ts +40 -0
  229. package/dist/services/urlResolverWarmupService/index.js +54 -0
  230. package/dist/types/enviveConfig.d.cts +6 -2
  231. package/dist/types/enviveConfig.d.ts +6 -2
  232. package/dist/types/index.d.cts +2 -2
  233. package/dist/types/index.d.ts +2 -2
  234. package/package.json +18 -2
  235. package/src/application/__tests__/commerceApiAddToCartRehydration.test.ts +126 -0
  236. package/src/application/commerce-api.ts +142 -23
  237. package/src/application/models/api/userEvent.ts +8 -1
  238. package/src/application/models/api/widgetText.ts +3 -0
  239. package/src/application/models/featureGates.ts +5 -0
  240. package/src/application/models/graphql/queries/getProductOptionsQuery.ts +59 -0
  241. package/src/application/models/validators/__tests__/validateUserEvent.test.ts +41 -0
  242. package/src/application/models/validators/validateResponse.ts +1 -0
  243. package/src/application/models/validators/validateUserEvent.ts +7 -2
  244. package/src/application/utils/__tests__/messageFromAddToCartEvent.test.ts +109 -0
  245. package/src/application/utils/index.ts +1 -0
  246. package/src/application/utils/messageFromAddToCartEvent.ts +32 -0
  247. package/src/application/utils/widgetTextFromApiWidgetTextResponse.ts +1 -0
  248. package/src/atoms/app/index.ts +1 -1
  249. package/src/atoms/app/variant.ts +1 -1
  250. package/src/atoms/envive/enviveConfig.ts +6 -1
  251. package/src/atoms/org/graphqlConfig.ts +1 -1
  252. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +5 -0
  253. package/src/contexts/enviveContext/enviveContext.tsx +10 -0
  254. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +6 -173
  255. package/src/contexts/localStorageContext/localStorageContext.tsx +2 -5
  256. package/src/contexts/localStorageContext/localStorageKeys.ts +8 -0
  257. package/src/contexts/pageContext/pageContext.tsx +1 -1
  258. package/src/contexts/salesAgentContext/__tests__/chatAPI.test.tsx +63 -0
  259. package/src/contexts/salesAgentContext/chatAPI.ts +20 -1
  260. package/src/contexts/salesAgentContext/salesAgentContext.tsx +17 -0
  261. package/src/contexts/salesAgentContext/salesAgentService.ts +12 -3
  262. package/src/contexts/types.ts +2 -0
  263. package/src/contexts/typesV3.ts +14 -0
  264. package/src/hooks/AddToCart/__tests__/parseAddToCartFunction.test.ts +31 -0
  265. package/src/hooks/AddToCart/__tests__/useAddToCart.test.tsx +204 -0
  266. package/src/hooks/AddToCart/addToCartErrorMessage.ts +2 -0
  267. package/src/hooks/AddToCart/createAddToCartUserEvent.ts +25 -0
  268. package/src/hooks/AddToCart/index.ts +4 -0
  269. package/src/hooks/AddToCart/parseAddToCartFunction.ts +31 -0
  270. package/src/hooks/AddToCart/useAddToCart.ts +35 -0
  271. package/src/hooks/PageViewedEvent/__tests__/usePageViewedEvent.test.ts +4 -4
  272. package/src/hooks/PageViewedEvent/usePageViewedEvent.ts +5 -1
  273. package/src/hooks/ProductDetails/__tests__/useProductDetails.test.tsx +129 -0
  274. package/src/hooks/ProductDetails/__tests__/variantSelection.test.ts +145 -0
  275. package/src/hooks/ProductDetails/index.ts +2 -0
  276. package/src/hooks/ProductDetails/useProductDetails.ts +62 -0
  277. package/src/hooks/ProductDetails/variantSelection.ts +61 -0
  278. package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +15 -0
  279. package/src/hooks/WidgetInteraction/types.ts +43 -2
  280. package/src/hooks/WidgetInteraction/utils.ts +1 -1
  281. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +8 -8
  282. package/src/services/amplitudeService/amplitudeService.ts +43 -23
  283. package/src/services/enviveConfigService/__tests__/enviveConfigService.test.ts +208 -0
  284. package/src/services/enviveConfigService/enviveConfigService.ts +62 -2
  285. package/src/services/enviveConfigService/fetchGraphQLConfig.ts +17 -6
  286. package/src/services/featureFlagService/index.ts +176 -0
  287. package/src/services/ga4ProjectionService/__tests__/ga4ProjectionService.test.ts +36 -0
  288. package/src/services/ga4ProjectionService/ga4EventSchema.ts +7 -0
  289. package/src/services/hardcopyService/__tests__/hardcopyService.test.ts +47 -1
  290. package/src/services/hardcopyService/hardcopyService.ts +5 -0
  291. package/src/services/urlResolverWarmupService/__tests__/urlResolverWarmupService.test.ts +85 -0
  292. package/src/services/urlResolverWarmupService/index.ts +89 -0
  293. package/src/types/enviveConfig.ts +3 -0
@@ -1,7 +1,7 @@
1
- import { WidgetTypeV3 } from "../../contexts/typesV3.js";
2
1
  import logger_default from "../../application/logging/logger.js";
3
2
  import { getQueryParam } from "../../application/utils/urlsParser.js";
4
3
  import { toCamelCase } from "../../application/models/utils/snakeToCamelTransformer.js";
4
+ import { WidgetTypeV3 } from "../../contexts/typesV3.js";
5
5
  import { EnviveMetricsEventName } from "../amplitudeService/eventNames.js";
6
6
  import "../../application/utils/index.js";
7
7
  import { getAtomStore } from "../../atoms/atomStore/atomStore.js";
@@ -198,7 +198,8 @@ var HardcopyService = class {
198
198
  widget_type: request.widgetType,
199
199
  response_id: response.responseId,
200
200
  widget_text: response.values,
201
- request_id: widgetTextRequest.requestId
201
+ request_id: widgetTextRequest.requestId,
202
+ ...response.aiSuggestionsAttributionBySlot ? { ai_suggestions_attribution_by_slot: response.aiSuggestionsAttributionBySlot } : {}
202
203
  }
203
204
  });
204
205
  return convertedResponse;
@@ -228,4 +229,4 @@ var MockHardcopyService = class {
228
229
 
229
230
  //#endregion
230
231
  export { HardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService };
231
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlTZXJ2aWNlLmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iLCJ1dWlkIiwiY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWciLCJ3aWRnZXRUZXh0UmVxdWVzdDogV2lkZ2V0VGV4dFJlcXVlc3QiLCJDb21tZXJjZUFwaUNsaWVudCIsIm92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvaGFyZGNvcHlTZXJ2aWNlL2hhcmRjb3B5U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgeyBXaWRnZXRTdHJpbmcsIFdpZGdldFRleHQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS93aWRnZXRUZXh0JztcbmltcG9ydCB7IFdpZGdldFRleHRSZXF1ZXN0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dFJlcXVlc3QnO1xuaW1wb3J0IHsgdG9DYW1lbENhc2UgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBBcHBEZXRhaWxzIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlL2F0b21TdG9yZSc7XG5pbXBvcnQgeyByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbic7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBUcmFja0V2ZW50UGFyYW1zIH0gZnJvbSAnLi4vYW1wbGl0dWRlU2VydmljZSc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2hhcmRjb3B5U2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhcmRjb3B5UmVxdWVzdCB7XG4gIHdpZGdldFR5cGU6IFdpZGdldFR5cGVWMztcbiAgdXNlckV2ZW50OiBVc2VyRXZlbnQ7XG59XG5cbmV4cG9ydCB0eXBlIEhhcmRjb3B5UmVzcG9uc2UgPSB7XG4gIHJlc3BvbnNlSWQ6IHN0cmluZztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcmF3VmFsdWVzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0U3RyaW5nIHwgV2lkZ2V0U3RyaW5nW10+O1xuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhhcmRjb3B5U2VydmljZSB7XG4gIGdldEhhcmRjb3B5KHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFyZGNvcHlTZXJ2aWNlQ29uZmlnIHtcbiAgZ2V0QXBwRGV0YWlsczogKCkgPT4gQXBwRGV0YWlscztcbiAgZ2V0RmVhdHVyZUZsYWdzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgdHJhY2tFdmVudD86IChwYXJhbXM6IFRyYWNrRXZlbnRQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8vIFNhbXBsZSByZXNwb25zZXMgdXNlZCBib3RoIGFzIGZhbGxiYWNrIHdoZW4gdGhlIGJhY2tlbmQgZmFpbHMgYW5kIGJ5IE1vY2tIYXJkY29weVNlcnZpY2UuXG5leHBvcnQgY29uc3QgTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4gPSB7XG4gIFtXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWM106IHtcbiAgICByZXNwb25zZUlkOiB1dWlkKCksXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdOZWVkIHNvbWUgaGVscD8nLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIG51bWJlck9mQ3VzdG9tZXJzVGV4dDogJzEyMyBjdXN0b21lcnMnLFxuICAgICAgY3VzdG9tZXJRdWVyeVRleHQ6ICdmb3VuZCB3aGF0IHRoZXkgd2VyZSBsb29raW5nIGZvci4uLicsXG4gICAgICBwcmltYXJ5QnV0dG9uVGV4dDogJ1N0YXJ0IHNob3BwaW5nJyxcbiAgICAgIHNlY29uZGFyeUJ1dHRvblRpdGxlVGV4dDogJ1BvcHVsYXIgc2VhcmNoZXMnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doeSBzaG91bGQgSSBidXkgZnJvbSB5b3U/JyxcbiAgICAgICAgJ0hvdyBkbyBJIHJldHVybiBhbiBpdGVtPycsXG4gICAgICAgICdOZXcgYXJyaXZhbHMnLFxuICAgICAgICAnU2FsZSBpdGVtcycsXG4gICAgICAgICdQb3B1bGFyIGl0ZW1zJyxcbiAgICAgIF0sXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICBoZWFkbGluZVRleHQ6ICdOZWVkIGhlbHAgZmluZGluZycsXG4gICAgICBhbmltYXRlZFRleHRTZXF1ZW5jZTogW1xuICAgICAgICAndGhlIHBlcmZlY3QgZ2lmdCBmb3IgeW91ciBsb3ZlZCBvbmVzPycsXG4gICAgICAgICdzb21ldGhpbmcgc3BlY2lhbCBmb3IgdGhlIGhvbGlkYXlzPycsXG4gICAgICAgICd0aGUgaWRlYWwgcHJlc2VudCBmb3Igc29tZW9uZSBzcGVjaWFsPycsXG4gICAgICBdLFxuICAgICAgaGludFRleHQ6ICdBc2sgbWUgYW55dGhpbmcnLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgXSxcbiAgICAgIHRleHRGaWVsZEFyaWFMYWJlbDogJ0FzayBtZSBhbnl0aGluZycsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0NvbXBhcmlzb25WM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIGhlYWRsaW5lVGV4dDogJ05lZWQgaGVscCBjb21wYXJpbmc/JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0xvYWRpbmdWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ05lZWQgc29tZSBoZWxwPycsXG4gICAgICBwcm9tcHRCdXR0b25zVGV4dHM6IFsnSGVscCBtZSBmaW5kIGEgcHJvZHVjdCcsIFwiV2hhdCdzIG9uIHlvdXIgbWluZD9cIiwgJ1RhbGsgdG8gYSBodW1hbiddLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgaGVhZGxpbmU6ICdEaXNjb3ZlciBZb3VyIFBlcmZlY3QgU3R5bGUnLFxuICAgICAgYW5pbWF0ZWRUZXh0OiBbXG4gICAgICAgICd0aGUgcGVyZmVjdCBvdXRmaXQgZm9yIGFueSBvY2Nhc2lvbicsXG4gICAgICAgICd0cmVuZGluZyBmYXNoaW9uIHRoYXQgZml0cyB5b3VyIGxpZmVzdHlsZScsXG4gICAgICAgICdxdWFsaXR5IHBpZWNlcyB0aGF0IGxhc3QnLFxuICAgICAgXSxcbiAgICAgIHByb21wdHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgICAgcGxhY2Vob2xkZXI6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRmxvYXRpbmdDaGF0VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgICAgbGVmdFRvZ2dsZUxhYmVsOiAnU2hvcCB3aXRoIEFJJyxcbiAgICAgIHJpZ2h0VG9nZ2xlTGFiZWw6ICdMaXZlIHN1cHBvcnQnLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRnVsbFBhZ2VTYWxlc0FnZW50VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgIH0sXG4gIH0sXG59O1xuXG5jb25zdCBjb252ZXJ0VG9IYXJkY29weVJlc3BvbnNlID0gKHJlc3BvbnNlOiBXaWRnZXRUZXh0KTogSGFyZGNvcHlSZXNwb25zZSA9PiAoe1xuICByZXNwb25zZUlkOiByZXNwb25zZS5yZXNwb25zZUlkLFxuICBsYW5ndWFnZTogcmVzcG9uc2UubGFuZ3VhZ2UsXG4gIHJhd1ZhbHVlczogcmVzcG9uc2UudmFsdWVzLFxuICB2YWx1ZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZS52YWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICB0b0NhbWVsQ2FzZShrZXkpLFxuICAgICAgdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0udmFsdWUgOiB2YWx1ZS5tYXAodiA9PiB2LnZhbHVlKSxcbiAgICBdKSxcbiAgKSxcbn0pO1xuXG5leHBvcnQgY2xhc3MgSGFyZGNvcHlTZXJ2aWNlIGltcGxlbWVudHMgSUhhcmRjb3B5U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWcpIHt9XG5cbiAgYXN5bmMgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiB7XG4gICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgZ2V0QXRvbVN0b3JlKCkuZ2V0KHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tKSB8fFxuICAgICAgdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgd2lkZ2V0VGV4dFJlcXVlc3Q6IFdpZGdldFRleHRSZXF1ZXN0ID0ge1xuICAgICAgcmVxdWVzdElkOiB1dWlkKCksXG4gICAgICB3aWRnZXRUeXBlOiByZXF1ZXN0LndpZGdldFR5cGUsXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbmZpZy5nZXRBcHBEZXRhaWxzKCksXG4gICAgICBmZWF0dXJlRmxhZ3M6IHRoaXMuY29uZmlnLmdldEZlYXR1cmVGbGFncygpLFxuICAgICAgbGFuZ3VhZ2U6IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgJ2VuJyxcbiAgICAgIG92ZXJyaWRlQ29uZmlnVmVyc2lvbixcbiAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnRyYWNrRXZlbnQ/Lih7XG4gICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlcXVlc3QsXG4gICAgICBldmVudFByb3BzOiB7XG4gICAgICAgIHdpZGdldF90eXBlOiByZXF1ZXN0LndpZGdldFR5cGUsXG4gICAgICAgIHJlcXVlc3RfaWQ6IHdpZGdldFRleHRSZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRIYXJkY29weSh3aWRnZXRUZXh0UmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUmVzcG9uc2UgPSBjb252ZXJ0VG9IYXJkY29weVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdjb252ZXJ0ZWQgcmVzcG9uc2UnLCBjb252ZXJ0ZWRSZXNwb25zZSk7XG4gICAgICAgIHRoaXMuY29uZmlnLnRyYWNrRXZlbnQ/Lih7XG4gICAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgICAgcmVzcG9uc2VfaWQ6IHJlc3BvbnNlLnJlc3BvbnNlSWQsXG4gICAgICAgICAgICB3aWRnZXRfdGV4dDogcmVzcG9uc2UudmFsdWVzLFxuICAgICAgICAgICAgcmVxdWVzdF9pZDogd2lkZ2V0VGV4dFJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udmVydGVkUmVzcG9uc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignZXJyb3IgZ2V0dGluZyBoYXJkY29weSBmcm9tIGJhY2tlbmQnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgY29uc3QgbW9ja1Jlc3BvbnNlID0gTU9DS19IQVJEQ09QWV9SRVNQT05TRVtyZXF1ZXN0LndpZGdldFR5cGVdO1xuICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnbm8gcmVhbCByZXNwb25zZSwgdXNpbmcgbW9jaycsIG1vY2tSZXNwb25zZSk7XG4gICAgICByZXR1cm4gbW9ja1Jlc3BvbnNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tIYXJkY29weVNlcnZpY2UgaW1wbGVtZW50cyBJSGFyZGNvcHlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvdmVycmlkZXM6IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+ID0ge30pIHt9XG5cbiAgYXN5bmMgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZmFsbGJhY2tXaWRnZXRUeXBlID1cbiAgICAgIHJlcXVlc3Qud2lkZ2V0VHlwZSA9PT0gV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNcbiAgICAgICAgPyBXaWRnZXRUeXBlVjMuSW1hZ2VQcm9tcHRDYXJkVjNcbiAgICAgICAgOiByZXF1ZXN0LndpZGdldFR5cGU7XG5cbiAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICB0aGlzLm92ZXJyaWRlc1tyZXF1ZXN0LndpZGdldFR5cGVdID8/XG4gICAgICB0aGlzLm92ZXJyaWRlc1tmYWxsYmFja1dpZGdldFR5cGVdID8/XG4gICAgICBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFW3JlcXVlc3Qud2lkZ2V0VHlwZV07XG5cbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBY0EsTUFBTSxTQUFTLElBQUlBLGVBQU8sa0JBQWtCO0FBeUI1QyxNQUFhQyx5QkFBMEU7RUFDcEYsYUFBYSxtQkFBbUI7RUFDL0IsWUFBWUMsSUFBTTtFQUNsQixVQUFVO0VBQ1YsUUFB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
232
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlTZXJ2aWNlLmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iLCJ1dWlkIiwiY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWciLCJ3aWRnZXRUZXh0UmVxdWVzdDogV2lkZ2V0VGV4dFJlcXVlc3QiLCJDb21tZXJjZUFwaUNsaWVudCIsIm92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvaGFyZGNvcHlTZXJ2aWNlL2hhcmRjb3B5U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgeyBXaWRnZXRTdHJpbmcsIFdpZGdldFRleHQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS93aWRnZXRUZXh0JztcbmltcG9ydCB7IFdpZGdldFRleHRSZXF1ZXN0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dFJlcXVlc3QnO1xuaW1wb3J0IHsgdG9DYW1lbENhc2UgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBBcHBEZXRhaWxzIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlL2F0b21TdG9yZSc7XG5pbXBvcnQgeyByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbic7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBUcmFja0V2ZW50UGFyYW1zIH0gZnJvbSAnLi4vYW1wbGl0dWRlU2VydmljZSc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2hhcmRjb3B5U2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhcmRjb3B5UmVxdWVzdCB7XG4gIHdpZGdldFR5cGU6IFdpZGdldFR5cGVWMztcbiAgdXNlckV2ZW50OiBVc2VyRXZlbnQ7XG59XG5cbmV4cG9ydCB0eXBlIEhhcmRjb3B5UmVzcG9uc2UgPSB7XG4gIHJlc3BvbnNlSWQ6IHN0cmluZztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcmF3VmFsdWVzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0U3RyaW5nIHwgV2lkZ2V0U3RyaW5nW10+O1xuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhhcmRjb3B5U2VydmljZSB7XG4gIGdldEhhcmRjb3B5KHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFyZGNvcHlTZXJ2aWNlQ29uZmlnIHtcbiAgZ2V0QXBwRGV0YWlsczogKCkgPT4gQXBwRGV0YWlscztcbiAgZ2V0RmVhdHVyZUZsYWdzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgdHJhY2tFdmVudD86IChwYXJhbXM6IFRyYWNrRXZlbnRQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8vIFNhbXBsZSByZXNwb25zZXMgdXNlZCBib3RoIGFzIGZhbGxiYWNrIHdoZW4gdGhlIGJhY2tlbmQgZmFpbHMgYW5kIGJ5IE1vY2tIYXJkY29weVNlcnZpY2UuXG5leHBvcnQgY29uc3QgTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4gPSB7XG4gIFtXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWM106IHtcbiAgICByZXNwb25zZUlkOiB1dWlkKCksXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdOZWVkIHNvbWUgaGVscD8nLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIG51bWJlck9mQ3VzdG9tZXJzVGV4dDogJzEyMyBjdXN0b21lcnMnLFxuICAgICAgY3VzdG9tZXJRdWVyeVRleHQ6ICdmb3VuZCB3aGF0IHRoZXkgd2VyZSBsb29raW5nIGZvci4uLicsXG4gICAgICBwcmltYXJ5QnV0dG9uVGV4dDogJ1N0YXJ0IHNob3BwaW5nJyxcbiAgICAgIHNlY29uZGFyeUJ1dHRvblRpdGxlVGV4dDogJ1BvcHVsYXIgc2VhcmNoZXMnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doeSBzaG91bGQgSSBidXkgZnJvbSB5b3U/JyxcbiAgICAgICAgJ0hvdyBkbyBJIHJldHVybiBhbiBpdGVtPycsXG4gICAgICAgICdOZXcgYXJyaXZhbHMnLFxuICAgICAgICAnU2FsZSBpdGVtcycsXG4gICAgICAgICdQb3B1bGFyIGl0ZW1zJyxcbiAgICAgIF0sXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICBoZWFkbGluZVRleHQ6ICdOZWVkIGhlbHAgZmluZGluZycsXG4gICAgICBhbmltYXRlZFRleHRTZXF1ZW5jZTogW1xuICAgICAgICAndGhlIHBlcmZlY3QgZ2lmdCBmb3IgeW91ciBsb3ZlZCBvbmVzPycsXG4gICAgICAgICdzb21ldGhpbmcgc3BlY2lhbCBmb3IgdGhlIGhvbGlkYXlzPycsXG4gICAgICAgICd0aGUgaWRlYWwgcHJlc2VudCBmb3Igc29tZW9uZSBzcGVjaWFsPycsXG4gICAgICBdLFxuICAgICAgaGludFRleHQ6ICdBc2sgbWUgYW55dGhpbmcnLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgXSxcbiAgICAgIHRleHRGaWVsZEFyaWFMYWJlbDogJ0FzayBtZSBhbnl0aGluZycsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0NvbXBhcmlzb25WM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIGhlYWRsaW5lVGV4dDogJ05lZWQgaGVscCBjb21wYXJpbmc/JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0xvYWRpbmdWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ05lZWQgc29tZSBoZWxwPycsXG4gICAgICBwcm9tcHRCdXR0b25zVGV4dHM6IFsnSGVscCBtZSBmaW5kIGEgcHJvZHVjdCcsIFwiV2hhdCdzIG9uIHlvdXIgbWluZD9cIiwgJ1RhbGsgdG8gYSBodW1hbiddLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgaGVhZGxpbmU6ICdEaXNjb3ZlciBZb3VyIFBlcmZlY3QgU3R5bGUnLFxuICAgICAgYW5pbWF0ZWRUZXh0OiBbXG4gICAgICAgICd0aGUgcGVyZmVjdCBvdXRmaXQgZm9yIGFueSBvY2Nhc2lvbicsXG4gICAgICAgICd0cmVuZGluZyBmYXNoaW9uIHRoYXQgZml0cyB5b3VyIGxpZmVzdHlsZScsXG4gICAgICAgICdxdWFsaXR5IHBpZWNlcyB0aGF0IGxhc3QnLFxuICAgICAgXSxcbiAgICAgIHByb21wdHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgICAgcGxhY2Vob2xkZXI6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRmxvYXRpbmdDaGF0VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgICAgbGVmdFRvZ2dsZUxhYmVsOiAnU2hvcCB3aXRoIEFJJyxcbiAgICAgIHJpZ2h0VG9nZ2xlTGFiZWw6ICdMaXZlIHN1cHBvcnQnLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRnVsbFBhZ2VTYWxlc0FnZW50VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgIH0sXG4gIH0sXG59O1xuXG5jb25zdCBjb252ZXJ0VG9IYXJkY29weVJlc3BvbnNlID0gKHJlc3BvbnNlOiBXaWRnZXRUZXh0KTogSGFyZGNvcHlSZXNwb25zZSA9PiAoe1xuICByZXNwb25zZUlkOiByZXNwb25zZS5yZXNwb25zZUlkLFxuICBsYW5ndWFnZTogcmVzcG9uc2UubGFuZ3VhZ2UsXG4gIHJhd1ZhbHVlczogcmVzcG9uc2UudmFsdWVzLFxuICB2YWx1ZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZS52YWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICB0b0NhbWVsQ2FzZShrZXkpLFxuICAgICAgdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0udmFsdWUgOiB2YWx1ZS5tYXAodiA9PiB2LnZhbHVlKSxcbiAgICBdKSxcbiAgKSxcbn0pO1xuXG5leHBvcnQgY2xhc3MgSGFyZGNvcHlTZXJ2aWNlIGltcGxlbWVudHMgSUhhcmRjb3B5U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWcpIHt9XG5cbiAgYXN5bmMgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiB7XG4gICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgZ2V0QXRvbVN0b3JlKCkuZ2V0KHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tKSB8fFxuICAgICAgdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgd2lkZ2V0VGV4dFJlcXVlc3Q6IFdpZGdldFRleHRSZXF1ZXN0ID0ge1xuICAgICAgcmVxdWVzdElkOiB1dWlkKCksXG4gICAgICB3aWRnZXRUeXBlOiByZXF1ZXN0LndpZGdldFR5cGUsXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbmZpZy5nZXRBcHBEZXRhaWxzKCksXG4gICAgICBmZWF0dXJlRmxhZ3M6IHRoaXMuY29uZmlnLmdldEZlYXR1cmVGbGFncygpLFxuICAgICAgbGFuZ3VhZ2U6IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgJ2VuJyxcbiAgICAgIG92ZXJyaWRlQ29uZmlnVmVyc2lvbixcbiAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnRyYWNrRXZlbnQ/Lih7XG4gICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlcXVlc3QsXG4gICAgICBldmVudFByb3BzOiB7XG4gICAgICAgIHdpZGdldF90eXBlOiByZXF1ZXN0LndpZGdldFR5cGUsXG4gICAgICAgIHJlcXVlc3RfaWQ6IHdpZGdldFRleHRSZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRIYXJkY29weSh3aWRnZXRUZXh0UmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUmVzcG9uc2UgPSBjb252ZXJ0VG9IYXJkY29weVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdjb252ZXJ0ZWQgcmVzcG9uc2UnLCBjb252ZXJ0ZWRSZXNwb25zZSk7XG4gICAgICAgIHRoaXMuY29uZmlnLnRyYWNrRXZlbnQ/Lih7XG4gICAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgICAgcmVzcG9uc2VfaWQ6IHJlc3BvbnNlLnJlc3BvbnNlSWQsXG4gICAgICAgICAgICB3aWRnZXRfdGV4dDogcmVzcG9uc2UudmFsdWVzLFxuICAgICAgICAgICAgcmVxdWVzdF9pZDogd2lkZ2V0VGV4dFJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgLy8gV2hpY2ggbWV0aG9kIHNlcnZlZCBlYWNoIG92ZXJyaWRkZW4gc2xvdCDigJQgdHJhaW5pbmcvYXR0cmlidXRpb25cbiAgICAgICAgICAgIC8vIHJlYWRzIHRoaXMgZnJvbSB0aGUgYW5hbHl0aWNzIGV2ZW50OyBwYXNzZWQgdGhyb3VnaCB2ZXJiYXRpbS5cbiAgICAgICAgICAgIC4uLihyZXNwb25zZS5haVN1Z2dlc3Rpb25zQXR0cmlidXRpb25CeVNsb3RcbiAgICAgICAgICAgICAgPyB7IGFpX3N1Z2dlc3Rpb25zX2F0dHJpYnV0aW9uX2J5X3Nsb3Q6IHJlc3BvbnNlLmFpU3VnZ2VzdGlvbnNBdHRyaWJ1dGlvbkJ5U2xvdCB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udmVydGVkUmVzcG9uc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignZXJyb3IgZ2V0dGluZyBoYXJkY29weSBmcm9tIGJhY2tlbmQnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgY29uc3QgbW9ja1Jlc3BvbnNlID0gTU9DS19IQVJEQ09QWV9SRVNQT05TRVtyZXF1ZXN0LndpZGdldFR5cGVdO1xuICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnbm8gcmVhbCByZXNwb25zZSwgdXNpbmcgbW9jaycsIG1vY2tSZXNwb25zZSk7XG4gICAgICByZXR1cm4gbW9ja1Jlc3BvbnNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tIYXJkY29weVNlcnZpY2UgaW1wbGVtZW50cyBJSGFyZGNvcHlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvdmVycmlkZXM6IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+ID0ge30pIHt9XG5cbiAgYXN5bmMgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZmFsbGJhY2tXaWRnZXRUeXBlID1cbiAgICAgIHJlcXVlc3Qud2lkZ2V0VHlwZSA9PT0gV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNcbiAgICAgICAgPyBXaWRnZXRUeXBlVjMuSW1hZ2VQcm9tcHRDYXJkVjNcbiAgICAgICAgOiByZXF1ZXN0LndpZGdldFR5cGU7XG5cbiAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICB0aGlzLm92ZXJyaWRlc1tyZXF1ZXN0LndpZGdldFR5cGVdID8/XG4gICAgICB0aGlzLm92ZXJyaWRlc1tmYWxsYmFja1dpZGdldFR5cGVdID8/XG4gICAgICBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFW3JlcXVlc3Qud2lkZ2V0VHlwZV07XG5cbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBY0EsTUFBTSxTQUFTLElBQUlBLGVBQU8sa0JBQWtCO0FBeUI1QyxNQUFhQyx5QkFBMEU7RUFDcEYsYUFBYSxtQkFBbUI7RUFDL0IsWUFBWUMsSUFBTTtFQUNsQixVQUFVO0VBQ1YsUUFBUSxFQUNOLG1CQUFtQjtHQUNqQjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0QsRUFDRjtFQUNGO0VBQ0EsYUFBYSx5QkFBeUI7RUFDckMsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNaLG1CQUFtQjtJQUNqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7R0FDRjtFQUNGO0VBQ0EsYUFBYSxnQkFBZ0I7RUFDNUIsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNaLHVCQUF1QjtHQUN2QixtQkFBbUI7R0FDbkIsbUJBQW1CO0dBQ25CLDBCQUEwQjtHQUMxQixzQkFBc0I7SUFDcEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBQ0QsMEJBQTBCO0dBQzNCO0VBQ0Y7RUFDQSxhQUFhLG9CQUFvQjtFQUNoQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osY0FBYztHQUNkLHNCQUFzQjtJQUNwQjtJQUNBO0lBQ0E7SUFDRDtHQUNELFVBQVU7R0FDVixtQkFBbUI7SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNELG9CQUFvQjtHQUNyQjtFQUNGO0VBQ0EsYUFBYSwwQkFBMEI7RUFDdEMsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dB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
@@ -0,0 +1,54 @@
1
+ const require_logger = require('../../application/logging/logger.cjs');
2
+ const require_atoms_envive_enviveConfig = require('../../atoms/envive/enviveConfig.cjs');
3
+ const require_atomStore = require('../../atoms/atomStore/atomStore.cjs');
4
+ const require_variant = require('../../atoms/app/variant.cjs');
5
+ const require_resolvedBaseConfigVersion = require('../../atoms/envive/resolvedBaseConfigVersion.cjs');
6
+ const require_graphqlConfig = require('../../atoms/org/graphqlConfig.cjs');
7
+ const require_application_commerce_api = require('../../application/commerce-api.cjs');
8
+
9
+ //#region src/services/urlResolverWarmupService/index.ts
10
+ const logger = new require_logger.default("urlResolverWarmupService");
11
+ /**
12
+ * Fires the /v1/url_resolving request as soon as the org config is available,
13
+ * instead of waiting for the React tree to mount and PageProvider's effect to
14
+ * run — that removes a full network round trip from the first-widget-paint
15
+ * critical path.
16
+ *
17
+ * Seeds the same atoms EnviveProvider/EnviveConfigProvider populate later
18
+ * (with identical values) so the request context matches the one
19
+ * PageProvider would send, then stores the response in the
20
+ * sessionStorage-backed urlResolverAtom that PageProvider consults before
21
+ * fetching. Concurrent calls for the same URL are deduped inside
22
+ * CommerceApiClient.resolveUrl.
23
+ */
24
+ const warmUrlResolver = async ({ baseUrl, apiKey, enviveServiceConfig, show, enviveOn, env, contextSource, featureFlagService }) => {
25
+ try {
26
+ const store = require_atomStore.getAtomStore();
27
+ const cleansedUrl = window.location.href.toLowerCase().trim();
28
+ if (store.get(require_variant.urlResolverAtom)[cleansedUrl]) return;
29
+ if (store.get(require_atoms_envive_enviveConfig.enviveConfigAtom) === void 0) store.set(require_atoms_envive_enviveConfig.enviveConfigAtom, {
30
+ baseUrl,
31
+ orgLevelApiKey: apiKey,
32
+ orgShortName: enviveServiceConfig.org.org.short_name,
33
+ orgId: enviveServiceConfig.org.org.id,
34
+ show,
35
+ enviveOn,
36
+ env,
37
+ contextSource
38
+ });
39
+ if (featureFlagService && store.get(require_graphqlConfig.featureFlagServiceAtom) === void 0) store.set(require_graphqlConfig.featureFlagServiceAtom, { featureFlagService });
40
+ const { baseVersion, baseVersionSource } = enviveServiceConfig.orgConfig?.resolution ?? {};
41
+ if (baseVersion && baseVersionSource && baseVersionSource !== "deployed") store.set(require_resolvedBaseConfigVersion.resolvedBaseConfigVersionAtom, baseVersion);
42
+ const response = await require_application_commerce_api.default.resolveUrl(cleansedUrl);
43
+ store.set(require_variant.urlResolverAtom, {
44
+ url: cleansedUrl,
45
+ response
46
+ });
47
+ } catch (err) {
48
+ logger.logDebug("URL resolver warm-up failed", err);
49
+ }
50
+ };
51
+
52
+ //#endregion
53
+ exports.warmUrlResolver = warmUrlResolver;
54
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwiZ2V0QXRvbVN0b3JlIiwidXJsUmVzb2x2ZXJBdG9tIiwiZW52aXZlQ29uZmlnQXRvbSIsImZlYXR1cmVGbGFnU2VydmljZUF0b20iLCJyZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSIsIkNvbW1lcmNlQXBpQ2xpZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VybFJlc29sdmVyV2FybXVwU2VydmljZS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBVcmxSZXNvbHZlclJlc3BvbnNlLCB1cmxSZXNvbHZlckF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuaW1wb3J0IHsgZ2V0QXRvbVN0b3JlIH0gZnJvbSAnc3JjL2F0b21zL2F0b21TdG9yZS9hdG9tU3RvcmUnO1xuaW1wb3J0IHsgZW52aXZlQ29uZmlnQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvZW52aXZlQ29uZmlnJztcbmltcG9ydCB7IHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tIH0gZnJvbSAnc3JjL2F0b21zL2Vudml2ZS9yZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uJztcbmltcG9ydCB7IGZlYXR1cmVGbGFnU2VydmljZUF0b20gfSBmcm9tICdzcmMvYXRvbXMvb3JnL2dyYXBocWxDb25maWcnO1xuaW1wb3J0IHsgRW52aXZlU2VydmljZUNvbmZpZyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9lbnZpdmVDb25maWdTZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL3NlcnZpY2VzL2ZlYXR1cmVGbGFnU2VydmljZSc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ3VybFJlc29sdmVyV2FybXVwU2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdhcm1VcmxSZXNvbHZlclBhcmFtcyB7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIGVudml2ZVNlcnZpY2VDb25maWc6IEVudml2ZVNlcnZpY2VDb25maWc7XG4gIHNob3c/OiBib29sZWFuO1xuICBlbnZpdmVPbj86IGJvb2xlYW47XG4gIGVudj86IHN0cmluZztcbiAgY29udGV4dFNvdXJjZT86IHN0cmluZztcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlPzogRmVhdHVyZUZsYWdTZXJ2aWNlO1xufVxuXG4vKipcbiAqIEZpcmVzIHRoZSAvdjEvdXJsX3Jlc29sdmluZyByZXF1ZXN0IGFzIHNvb24gYXMgdGhlIG9yZyBjb25maWcgaXMgYXZhaWxhYmxlLFxuICogaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgUmVhY3QgdHJlZSB0byBtb3VudCBhbmQgUGFnZVByb3ZpZGVyJ3MgZWZmZWN0IHRvXG4gKiBydW4g4oCUIHRoYXQgcmVtb3ZlcyBhIGZ1bGwgbmV0d29yayByb3VuZCB0cmlwIGZyb20gdGhlIGZpcnN0LXdpZGdldC1wYWludFxuICogY3JpdGljYWwgcGF0aC5cbiAqXG4gKiBTZWVkcyB0aGUgc2FtZSBhdG9tcyBFbnZpdmVQcm92aWRlci9FbnZpdmVDb25maWdQcm92aWRlciBwb3B1bGF0ZSBsYXRlclxuICogKHdpdGggaWRlbnRpY2FsIHZhbHVlcykgc28gdGhlIHJlcXVlc3QgY29udGV4dCBtYXRjaGVzIHRoZSBvbmVcbiAqIFBhZ2VQcm92aWRlciB3b3VsZCBzZW5kLCB0aGVuIHN0b3JlcyB0aGUgcmVzcG9uc2UgaW4gdGhlXG4gKiBzZXNzaW9uU3RvcmFnZS1iYWNrZWQgdXJsUmVzb2x2ZXJBdG9tIHRoYXQgUGFnZVByb3ZpZGVyIGNvbnN1bHRzIGJlZm9yZVxuICogZmV0Y2hpbmcuIENvbmN1cnJlbnQgY2FsbHMgZm9yIHRoZSBzYW1lIFVSTCBhcmUgZGVkdXBlZCBpbnNpZGVcbiAqIENvbW1lcmNlQXBpQ2xpZW50LnJlc29sdmVVcmwuXG4gKi9cbmV4cG9ydCBjb25zdCB3YXJtVXJsUmVzb2x2ZXIgPSBhc3luYyAoe1xuICBiYXNlVXJsLFxuICBhcGlLZXksXG4gIGVudml2ZVNlcnZpY2VDb25maWcsXG4gIHNob3csXG4gIGVudml2ZU9uLFxuICBlbnYsXG4gIGNvbnRleHRTb3VyY2UsXG4gIGZlYXR1cmVGbGFnU2VydmljZSxcbn06IFdhcm1VcmxSZXNvbHZlclBhcmFtcyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0b3JlID0gZ2V0QXRvbVN0b3JlKCk7XG4gICAgLy8gTXVzdCBtYXRjaCBQYWdlUHJvdmlkZXIncyBVUkwgY2xlYW5zaW5nIHNvIHRoZSBjYWNoZSBrZXkgbGluZXMgdXAuXG4gICAgY29uc3QgY2xlYW5zZWRVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoc3RvcmUuZ2V0KHVybFJlc29sdmVyQXRvbSlbY2xlYW5zZWRVcmxdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIENvbW1lcmNlQXBpQ2xpZW50IHNpbmdsZXRvbiBjYXB0dXJlcyBiYXNlVXJsL2FwaUtleSBhdCBmaXJzdFxuICAgIC8vIGluc3RhbnRpYXRpb24sIHNvIHRoZXNlIGF0b21zIG11c3QgYmUgc2VlZGVkIGJlZm9yZSBhbnkgQVBJIGNhbGwuXG4gICAgLy8gT25seSBzZWVkIHdoZW4gdW5zZXQg4oCUIHByb3ZpZGVycyBvd24gdGhpcyBhdG9tIG9uY2UgUmVhY3QgbW91bnRzLlxuICAgIGlmIChzdG9yZS5nZXQoZW52aXZlQ29uZmlnQXRvbSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RvcmUuc2V0KGVudml2ZUNvbmZpZ0F0b20sIHtcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgb3JnTGV2ZWxBcGlLZXk6IGFwaUtleSxcbiAgICAgICAgb3JnU2hvcnROYW1lOiBlbnZpdmVTZXJ2aWNlQ29uZmlnLm9yZy5vcmcuc2hvcnRfbmFtZSxcbiAgICAgICAgb3JnSWQ6IGVudml2ZVNlcnZpY2VDb25maWcub3JnLm9yZy5pZCxcbiAgICAgICAgc2hvdyxcbiAgICAgICAgZW52aXZlT24sXG4gICAgICAgIGVudixcbiAgICAgICAgY29udGV4dFNvdXJjZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyByZXNvbHZlVXJsIHJlYWRzIGZlYXR1cmUgZ2F0ZXMgdGhyb3VnaCBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tOyB3aXRob3V0XG4gICAgLy8gdGhpcyBzZWVkIHRoZSB3YXJtLXVwIHJlcXVlc3QgaXMgY29tcHV0ZWQgd2l0aCBmZWF0dXJlX2dhdGVzPXt9IGFuZFxuICAgIC8vIHRoYXQgcmVzcG9uc2UgaXMgd2hhdCBnZXRzIGNhY2hlZCBmb3IgUGFnZVByb3ZpZGVyLlxuICAgIGlmIChmZWF0dXJlRmxhZ1NlcnZpY2UgJiYgc3RvcmUuZ2V0KGZlYXR1cmVGbGFnU2VydmljZUF0b20pID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0b3JlLnNldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tLCB7IGZlYXR1cmVGbGFnU2VydmljZSB9KTtcbiAgICB9XG4gICAgLy8gTWlycm9ycyBFbnZpdmVQcm92aWRlcjogXCJkZXBsb3llZFwiIGlzIHRoZSBuby1waW4gc2VudGluZWwuXG4gICAgY29uc3QgeyBiYXNlVmVyc2lvbiwgYmFzZVZlcnNpb25Tb3VyY2UgfSA9IGVudml2ZVNlcnZpY2VDb25maWcub3JnQ29uZmlnPy5yZXNvbHV0aW9uID8/IHt9O1xuICAgIGlmIChiYXNlVmVyc2lvbiAmJiBiYXNlVmVyc2lvblNvdXJjZSAmJiBiYXNlVmVyc2lvblNvdXJjZSAhPT0gJ2RlcGxveWVkJykge1xuICAgICAgc3RvcmUuc2V0KHJlc29sdmVkQmFzZUNvbmZpZ1ZlcnNpb25BdG9tLCBiYXNlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQucmVzb2x2ZVVybChjbGVhbnNlZFVybCkpIGFzIFVybFJlc29sdmVyUmVzcG9uc2U7XG4gICAgc3RvcmUuc2V0KHVybFJlc29sdmVyQXRvbSwgeyB1cmw6IGNsZWFuc2VkVXJsLCByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRmFpbCBvcGVuOiBQYWdlUHJvdmlkZXIgaXNzdWVzIGl0cyBvd24gcmVzb2x2ZVVybCBjYWxsIHdoZW4gdGhlIGNhY2hlXG4gICAgLy8gaXMgZW1wdHksIHNvIGEgd2FybS11cCBmYWlsdXJlIG5ldmVyIGJsb2NrcyByZW5kZXJpbmcuXG4gICAgbG9nZ2VyLmxvZ0RlYnVnKCdVUkwgcmVzb2x2ZXIgd2FybS11cCBmYWlsZWQnLCBlcnIpO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVQSxNQUFNLFNBQVMsSUFBSUEsdUJBQU8sMkJBQTJCOzs7Ozs7Ozs7Ozs7OztBQTBCckQsTUFBYSxrQkFBa0IsT0FBTyxFQUNwQyxTQUNBLFFBQ0EscUJBQ0EsTUFDQSxVQUNBLEtBQ0EsZUFDQSx5QkFDMEM7QUFDMUMsS0FBSTtFQUNGLE1BQU0sUUFBUUMsZ0NBQWM7RUFFNUIsTUFBTSxjQUFjLE9BQU8sU0FBUyxLQUFLLGFBQWEsQ0FBQyxNQUFNO0FBQzdELE1BQUksTUFBTSxJQUFJQyxnQ0FBZ0IsQ0FBQyxhQUM3QjtBQU1GLE1BQUksTUFBTSxJQUFJQyxtREFBaUIsS0FBSyxPQUNsQyxPQUFNLElBQUlBLG9EQUFrQjtHQUMxQjtHQUNBLGdCQUFnQjtHQUNoQixjQUFjLG9CQUFvQixJQUFJLElBQUk7R0FDMUMsT0FBTyxvQkFBb0IsSUFBSSxJQUFJO0dBQ25DO0dBQ0E7R0FDQTtHQUNBO0dBQ0QsQ0FBQztBQUtKLE1BQUksc0JBQXNCLE1BQU0sSUFBSUMsNkNBQXVCLEtBQUssT0FDOUQsT0FBTSxJQUFJQSw4Q0FBd0IsRUFBRSxvQkFBb0IsQ0FBQztFQUczRCxNQUFNLEVBQUUsYUFBYSxzQkFBc0Isb0JBQW9CLFdBQVcsY0FBYyxFQUFFO0FBQzFGLE1BQUksZUFBZSxxQkFBcUIsc0JBQXNCLFdBQzVELE9BQU0sSUFBSUMsaUVBQStCLFlBQVk7RUFHdkQsTUFBTSxXQUFZLE1BQU1DLHlDQUFrQixXQUFXLFlBQVk7QUFDakUsUUFBTSxJQUFJSixpQ0FBaUI7R0FBRSxLQUFLO0dBQWE7R0FBVSxDQUFDO1VBQ25ELEtBQUs7QUFHWixTQUFPLFNBQVMsK0JBQStCLElBQUkifQ==
@@ -0,0 +1,40 @@
1
+ import { FeatureFlagService } from "../featureFlagService/index.cjs";
2
+ import { EnviveServiceConfig } from "../enviveConfigService/enviveConfigService.cjs";
3
+
4
+ //#region src/services/urlResolverWarmupService/index.d.ts
5
+ interface WarmUrlResolverParams {
6
+ baseUrl: string;
7
+ apiKey: string;
8
+ enviveServiceConfig: EnviveServiceConfig;
9
+ show?: boolean;
10
+ enviveOn?: boolean;
11
+ env?: string;
12
+ contextSource?: string;
13
+ featureFlagService?: FeatureFlagService;
14
+ }
15
+ /**
16
+ * Fires the /v1/url_resolving request as soon as the org config is available,
17
+ * instead of waiting for the React tree to mount and PageProvider's effect to
18
+ * run — that removes a full network round trip from the first-widget-paint
19
+ * critical path.
20
+ *
21
+ * Seeds the same atoms EnviveProvider/EnviveConfigProvider populate later
22
+ * (with identical values) so the request context matches the one
23
+ * PageProvider would send, then stores the response in the
24
+ * sessionStorage-backed urlResolverAtom that PageProvider consults before
25
+ * fetching. Concurrent calls for the same URL are deduped inside
26
+ * CommerceApiClient.resolveUrl.
27
+ */
28
+ declare const warmUrlResolver: ({
29
+ baseUrl,
30
+ apiKey,
31
+ enviveServiceConfig,
32
+ show,
33
+ enviveOn,
34
+ env,
35
+ contextSource,
36
+ featureFlagService
37
+ }: WarmUrlResolverParams) => Promise<void>;
38
+ //#endregion
39
+ export { WarmUrlResolverParams, warmUrlResolver };
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VybFJlc29sdmVyV2FybXVwU2VydmljZS9pbmRleC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudml2ZVNlcnZpY2VDb25maWcgfSBmcm9tICdzcmMvc2VydmljZXMvZW52aXZlQ29uZmlnU2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9mZWF0dXJlRmxhZ1NlcnZpY2UnO1xuZXhwb3J0IGludGVyZmFjZSBXYXJtVXJsUmVzb2x2ZXJQYXJhbXMge1xuICAgIGJhc2VVcmw6IHN0cmluZztcbiAgICBhcGlLZXk6IHN0cmluZztcbiAgICBlbnZpdmVTZXJ2aWNlQ29uZmlnOiBFbnZpdmVTZXJ2aWNlQ29uZmlnO1xuICAgIHNob3c/OiBib29sZWFuO1xuICAgIGVudml2ZU9uPzogYm9vbGVhbjtcbiAgICBlbnY/OiBzdHJpbmc7XG4gICAgY29udGV4dFNvdXJjZT86IHN0cmluZztcbiAgICBmZWF0dXJlRmxhZ1NlcnZpY2U/OiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG59XG4vKipcbiAqIEZpcmVzIHRoZSAvdjEvdXJsX3Jlc29sdmluZyByZXF1ZXN0IGFzIHNvb24gYXMgdGhlIG9yZyBjb25maWcgaXMgYXZhaWxhYmxlLFxuICogaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgUmVhY3QgdHJlZSB0byBtb3VudCBhbmQgUGFnZVByb3ZpZGVyJ3MgZWZmZWN0IHRvXG4gKiBydW4g4oCUIHRoYXQgcmVtb3ZlcyBhIGZ1bGwgbmV0d29yayByb3VuZCB0cmlwIGZyb20gdGhlIGZpcnN0LXdpZGdldC1wYWludFxuICogY3JpdGljYWwgcGF0aC5cbiAqXG4gKiBTZWVkcyB0aGUgc2FtZSBhdG9tcyBFbnZpdmVQcm92aWRlci9FbnZpdmVDb25maWdQcm92aWRlciBwb3B1bGF0ZSBsYXRlclxuICogKHdpdGggaWRlbnRpY2FsIHZhbHVlcykgc28gdGhlIHJlcXVlc3QgY29udGV4dCBtYXRjaGVzIHRoZSBvbmVcbiAqIFBhZ2VQcm92aWRlciB3b3VsZCBzZW5kLCB0aGVuIHN0b3JlcyB0aGUgcmVzcG9uc2UgaW4gdGhlXG4gKiBzZXNzaW9uU3RvcmFnZS1iYWNrZWQgdXJsUmVzb2x2ZXJBdG9tIHRoYXQgUGFnZVByb3ZpZGVyIGNvbnN1bHRzIGJlZm9yZVxuICogZmV0Y2hpbmcuIENvbmN1cnJlbnQgY2FsbHMgZm9yIHRoZSBzYW1lIFVSTCBhcmUgZGVkdXBlZCBpbnNpZGVcbiAqIENvbW1lcmNlQXBpQ2xpZW50LnJlc29sdmVVcmwuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHdhcm1VcmxSZXNvbHZlcjogKHsgYmFzZVVybCwgYXBpS2V5LCBlbnZpdmVTZXJ2aWNlQ29uZmlnLCBzaG93LCBlbnZpdmVPbiwgZW52LCBjb250ZXh0U291cmNlLCBmZWF0dXJlRmxhZ1NlcnZpY2UsIH06IFdhcm1VcmxSZXNvbHZlclBhcmFtcykgPT4gUHJvbWlzZTx2b2lkPjtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLElBQVcsd0JBQXdCO0NBQUM7T0FBRztPQUFBO0NBQUE7QUFDdkMsSUFBVyxrQkFBUTtDQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQSJ9
@@ -0,0 +1,40 @@
1
+ import { FeatureFlagService } from "../featureFlagService/index.js";
2
+ import { EnviveServiceConfig } from "../enviveConfigService/enviveConfigService.js";
3
+
4
+ //#region src/services/urlResolverWarmupService/index.d.ts
5
+ interface WarmUrlResolverParams {
6
+ baseUrl: string;
7
+ apiKey: string;
8
+ enviveServiceConfig: EnviveServiceConfig;
9
+ show?: boolean;
10
+ enviveOn?: boolean;
11
+ env?: string;
12
+ contextSource?: string;
13
+ featureFlagService?: FeatureFlagService;
14
+ }
15
+ /**
16
+ * Fires the /v1/url_resolving request as soon as the org config is available,
17
+ * instead of waiting for the React tree to mount and PageProvider's effect to
18
+ * run — that removes a full network round trip from the first-widget-paint
19
+ * critical path.
20
+ *
21
+ * Seeds the same atoms EnviveProvider/EnviveConfigProvider populate later
22
+ * (with identical values) so the request context matches the one
23
+ * PageProvider would send, then stores the response in the
24
+ * sessionStorage-backed urlResolverAtom that PageProvider consults before
25
+ * fetching. Concurrent calls for the same URL are deduped inside
26
+ * CommerceApiClient.resolveUrl.
27
+ */
28
+ declare const warmUrlResolver: ({
29
+ baseUrl,
30
+ apiKey,
31
+ enviveServiceConfig,
32
+ show,
33
+ enviveOn,
34
+ env,
35
+ contextSource,
36
+ featureFlagService
37
+ }: WarmUrlResolverParams) => Promise<void>;
38
+ //#endregion
39
+ export { WarmUrlResolverParams, warmUrlResolver };
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdXJsUmVzb2x2ZXJXYXJtdXBTZXJ2aWNlL2luZGV4LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXZlU2VydmljZUNvbmZpZyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9lbnZpdmVDb25maWdTZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL3NlcnZpY2VzL2ZlYXR1cmVGbGFnU2VydmljZSc7XG5leHBvcnQgaW50ZXJmYWNlIFdhcm1VcmxSZXNvbHZlclBhcmFtcyB7XG4gICAgYmFzZVVybDogc3RyaW5nO1xuICAgIGFwaUtleTogc3RyaW5nO1xuICAgIGVudml2ZVNlcnZpY2VDb25maWc6IEVudml2ZVNlcnZpY2VDb25maWc7XG4gICAgc2hvdz86IGJvb2xlYW47XG4gICAgZW52aXZlT24/OiBib29sZWFuO1xuICAgIGVudj86IHN0cmluZztcbiAgICBjb250ZXh0U291cmNlPzogc3RyaW5nO1xuICAgIGZlYXR1cmVGbGFnU2VydmljZT86IEZlYXR1cmVGbGFnU2VydmljZTtcbn1cbi8qKlxuICogRmlyZXMgdGhlIC92MS91cmxfcmVzb2x2aW5nIHJlcXVlc3QgYXMgc29vbiBhcyB0aGUgb3JnIGNvbmZpZyBpcyBhdmFpbGFibGUsXG4gKiBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBSZWFjdCB0cmVlIHRvIG1vdW50IGFuZCBQYWdlUHJvdmlkZXIncyBlZmZlY3QgdG9cbiAqIHJ1biDigJQgdGhhdCByZW1vdmVzIGEgZnVsbCBuZXR3b3JrIHJvdW5kIHRyaXAgZnJvbSB0aGUgZmlyc3Qtd2lkZ2V0LXBhaW50XG4gKiBjcml0aWNhbCBwYXRoLlxuICpcbiAqIFNlZWRzIHRoZSBzYW1lIGF0b21zIEVudml2ZVByb3ZpZGVyL0Vudml2ZUNvbmZpZ1Byb3ZpZGVyIHBvcHVsYXRlIGxhdGVyXG4gKiAod2l0aCBpZGVudGljYWwgdmFsdWVzKSBzbyB0aGUgcmVxdWVzdCBjb250ZXh0IG1hdGNoZXMgdGhlIG9uZVxuICogUGFnZVByb3ZpZGVyIHdvdWxkIHNlbmQsIHRoZW4gc3RvcmVzIHRoZSByZXNwb25zZSBpbiB0aGVcbiAqIHNlc3Npb25TdG9yYWdlLWJhY2tlZCB1cmxSZXNvbHZlckF0b20gdGhhdCBQYWdlUHJvdmlkZXIgY29uc3VsdHMgYmVmb3JlXG4gKiBmZXRjaGluZy4gQ29uY3VycmVudCBjYWxscyBmb3IgdGhlIHNhbWUgVVJMIGFyZSBkZWR1cGVkIGluc2lkZVxuICogQ29tbWVyY2VBcGlDbGllbnQucmVzb2x2ZVVybC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3Qgd2FybVVybFJlc29sdmVyOiAoeyBiYXNlVXJsLCBhcGlLZXksIGVudml2ZVNlcnZpY2VDb25maWcsIHNob3csIGVudml2ZU9uLCBlbnYsIGNvbnRleHRTb3VyY2UsIGZlYXR1cmVGbGFnU2VydmljZSwgfTogV2FybVVybFJlc29sdmVyUGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBRUEsSUFBVyx3QkFBd0I7Q0FBQztPQUFHO09BQUE7Q0FBQTtBQUN2QyxJQUFXLGtCQUFRO0NBQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBIn0=
@@ -0,0 +1,54 @@
1
+ import logger_default from "../../application/logging/logger.js";
2
+ import { enviveConfigAtom } from "../../atoms/envive/enviveConfig.js";
3
+ import { getAtomStore } from "../../atoms/atomStore/atomStore.js";
4
+ import { urlResolverAtom } from "../../atoms/app/variant.js";
5
+ import { resolvedBaseConfigVersionAtom } from "../../atoms/envive/resolvedBaseConfigVersion.js";
6
+ import { featureFlagServiceAtom } from "../../atoms/org/graphqlConfig.js";
7
+ import commerce_api_default from "../../application/commerce-api.js";
8
+
9
+ //#region src/services/urlResolverWarmupService/index.ts
10
+ const logger = new logger_default("urlResolverWarmupService");
11
+ /**
12
+ * Fires the /v1/url_resolving request as soon as the org config is available,
13
+ * instead of waiting for the React tree to mount and PageProvider's effect to
14
+ * run — that removes a full network round trip from the first-widget-paint
15
+ * critical path.
16
+ *
17
+ * Seeds the same atoms EnviveProvider/EnviveConfigProvider populate later
18
+ * (with identical values) so the request context matches the one
19
+ * PageProvider would send, then stores the response in the
20
+ * sessionStorage-backed urlResolverAtom that PageProvider consults before
21
+ * fetching. Concurrent calls for the same URL are deduped inside
22
+ * CommerceApiClient.resolveUrl.
23
+ */
24
+ const warmUrlResolver = async ({ baseUrl, apiKey, enviveServiceConfig, show, enviveOn, env, contextSource, featureFlagService }) => {
25
+ try {
26
+ const store = getAtomStore();
27
+ const cleansedUrl = window.location.href.toLowerCase().trim();
28
+ if (store.get(urlResolverAtom)[cleansedUrl]) return;
29
+ if (store.get(enviveConfigAtom) === void 0) store.set(enviveConfigAtom, {
30
+ baseUrl,
31
+ orgLevelApiKey: apiKey,
32
+ orgShortName: enviveServiceConfig.org.org.short_name,
33
+ orgId: enviveServiceConfig.org.org.id,
34
+ show,
35
+ enviveOn,
36
+ env,
37
+ contextSource
38
+ });
39
+ if (featureFlagService && store.get(featureFlagServiceAtom) === void 0) store.set(featureFlagServiceAtom, { featureFlagService });
40
+ const { baseVersion, baseVersionSource } = enviveServiceConfig.orgConfig?.resolution ?? {};
41
+ if (baseVersion && baseVersionSource && baseVersionSource !== "deployed") store.set(resolvedBaseConfigVersionAtom, baseVersion);
42
+ const response = await commerce_api_default.resolveUrl(cleansedUrl);
43
+ store.set(urlResolverAtom, {
44
+ url: cleansedUrl,
45
+ response
46
+ });
47
+ } catch (err) {
48
+ logger.logDebug("URL resolver warm-up failed", err);
49
+ }
50
+ };
51
+
52
+ //#endregion
53
+ export { warmUrlResolver };
54
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJDb21tZXJjZUFwaUNsaWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy91cmxSZXNvbHZlcldhcm11cFNlcnZpY2UvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgVXJsUmVzb2x2ZXJSZXNwb25zZSwgdXJsUmVzb2x2ZXJBdG9tIH0gZnJvbSAnc3JjL2F0b21zL2FwcC92YXJpYW50JztcbmltcG9ydCB7IGdldEF0b21TdG9yZSB9IGZyb20gJ3NyYy9hdG9tcy9hdG9tU3RvcmUvYXRvbVN0b3JlJztcbmltcG9ydCB7IGVudml2ZUNvbmZpZ0F0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyByZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvcmVzb2x2ZWRCYXNlQ29uZmlnVmVyc2lvbic7XG5pbXBvcnQgeyBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tIH0gZnJvbSAnc3JjL2F0b21zL29yZy9ncmFwaHFsQ29uZmlnJztcbmltcG9ydCB7IEVudml2ZVNlcnZpY2VDb25maWcgfSBmcm9tICdzcmMvc2VydmljZXMvZW52aXZlQ29uZmlnU2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9mZWF0dXJlRmxhZ1NlcnZpY2UnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCd1cmxSZXNvbHZlcldhcm11cFNlcnZpY2UnKTtcblxuZXhwb3J0IGludGVyZmFjZSBXYXJtVXJsUmVzb2x2ZXJQYXJhbXMge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICBlbnZpdmVTZXJ2aWNlQ29uZmlnOiBFbnZpdmVTZXJ2aWNlQ29uZmlnO1xuICBzaG93PzogYm9vbGVhbjtcbiAgZW52aXZlT24/OiBib29sZWFuO1xuICBlbnY/OiBzdHJpbmc7XG4gIGNvbnRleHRTb3VyY2U/OiBzdHJpbmc7XG4gIGZlYXR1cmVGbGFnU2VydmljZT86IEZlYXR1cmVGbGFnU2VydmljZTtcbn1cblxuLyoqXG4gKiBGaXJlcyB0aGUgL3YxL3VybF9yZXNvbHZpbmcgcmVxdWVzdCBhcyBzb29uIGFzIHRoZSBvcmcgY29uZmlnIGlzIGF2YWlsYWJsZSxcbiAqIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIFJlYWN0IHRyZWUgdG8gbW91bnQgYW5kIFBhZ2VQcm92aWRlcidzIGVmZmVjdCB0b1xuICogcnVuIOKAlCB0aGF0IHJlbW92ZXMgYSBmdWxsIG5ldHdvcmsgcm91bmQgdHJpcCBmcm9tIHRoZSBmaXJzdC13aWRnZXQtcGFpbnRcbiAqIGNyaXRpY2FsIHBhdGguXG4gKlxuICogU2VlZHMgdGhlIHNhbWUgYXRvbXMgRW52aXZlUHJvdmlkZXIvRW52aXZlQ29uZmlnUHJvdmlkZXIgcG9wdWxhdGUgbGF0ZXJcbiAqICh3aXRoIGlkZW50aWNhbCB2YWx1ZXMpIHNvIHRoZSByZXF1ZXN0IGNvbnRleHQgbWF0Y2hlcyB0aGUgb25lXG4gKiBQYWdlUHJvdmlkZXIgd291bGQgc2VuZCwgdGhlbiBzdG9yZXMgdGhlIHJlc3BvbnNlIGluIHRoZVxuICogc2Vzc2lvblN0b3JhZ2UtYmFja2VkIHVybFJlc29sdmVyQXRvbSB0aGF0IFBhZ2VQcm92aWRlciBjb25zdWx0cyBiZWZvcmVcbiAqIGZldGNoaW5nLiBDb25jdXJyZW50IGNhbGxzIGZvciB0aGUgc2FtZSBVUkwgYXJlIGRlZHVwZWQgaW5zaWRlXG4gKiBDb21tZXJjZUFwaUNsaWVudC5yZXNvbHZlVXJsLlxuICovXG5leHBvcnQgY29uc3Qgd2FybVVybFJlc29sdmVyID0gYXN5bmMgKHtcbiAgYmFzZVVybCxcbiAgYXBpS2V5LFxuICBlbnZpdmVTZXJ2aWNlQ29uZmlnLFxuICBzaG93LFxuICBlbnZpdmVPbixcbiAgZW52LFxuICBjb250ZXh0U291cmNlLFxuICBmZWF0dXJlRmxhZ1NlcnZpY2UsXG59OiBXYXJtVXJsUmVzb2x2ZXJQYXJhbXMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdG9yZSA9IGdldEF0b21TdG9yZSgpO1xuICAgIC8vIE11c3QgbWF0Y2ggUGFnZVByb3ZpZGVyJ3MgVVJMIGNsZWFuc2luZyBzbyB0aGUgY2FjaGUga2V5IGxpbmVzIHVwLlxuICAgIGNvbnN0IGNsZWFuc2VkVXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgaWYgKHN0b3JlLmdldCh1cmxSZXNvbHZlckF0b20pW2NsZWFuc2VkVXJsXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoZSBDb21tZXJjZUFwaUNsaWVudCBzaW5nbGV0b24gY2FwdHVyZXMgYmFzZVVybC9hcGlLZXkgYXQgZmlyc3RcbiAgICAvLyBpbnN0YW50aWF0aW9uLCBzbyB0aGVzZSBhdG9tcyBtdXN0IGJlIHNlZWRlZCBiZWZvcmUgYW55IEFQSSBjYWxsLlxuICAgIC8vIE9ubHkgc2VlZCB3aGVuIHVuc2V0IOKAlCBwcm92aWRlcnMgb3duIHRoaXMgYXRvbSBvbmNlIFJlYWN0IG1vdW50cy5cbiAgICBpZiAoc3RvcmUuZ2V0KGVudml2ZUNvbmZpZ0F0b20pID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0b3JlLnNldChlbnZpdmVDb25maWdBdG9tLCB7XG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIG9yZ0xldmVsQXBpS2V5OiBhcGlLZXksXG4gICAgICAgIG9yZ1Nob3J0TmFtZTogZW52aXZlU2VydmljZUNvbmZpZy5vcmcub3JnLnNob3J0X25hbWUsXG4gICAgICAgIG9yZ0lkOiBlbnZpdmVTZXJ2aWNlQ29uZmlnLm9yZy5vcmcuaWQsXG4gICAgICAgIHNob3csXG4gICAgICAgIGVudml2ZU9uLFxuICAgICAgICBlbnYsXG4gICAgICAgIGNvbnRleHRTb3VyY2UsXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gcmVzb2x2ZVVybCByZWFkcyBmZWF0dXJlIGdhdGVzIHRocm91Z2ggZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbTsgd2l0aG91dFxuICAgIC8vIHRoaXMgc2VlZCB0aGUgd2FybS11cCByZXF1ZXN0IGlzIGNvbXB1dGVkIHdpdGggZmVhdHVyZV9nYXRlcz17fSBhbmRcbiAgICAvLyB0aGF0IHJlc3BvbnNlIGlzIHdoYXQgZ2V0cyBjYWNoZWQgZm9yIFBhZ2VQcm92aWRlci5cbiAgICBpZiAoZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHN0b3JlLmdldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdG9yZS5zZXQoZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbSwgeyBmZWF0dXJlRmxhZ1NlcnZpY2UgfSk7XG4gICAgfVxuICAgIC8vIE1pcnJvcnMgRW52aXZlUHJvdmlkZXI6IFwiZGVwbG95ZWRcIiBpcyB0aGUgbm8tcGluIHNlbnRpbmVsLlxuICAgIGNvbnN0IHsgYmFzZVZlcnNpb24sIGJhc2VWZXJzaW9uU291cmNlIH0gPSBlbnZpdmVTZXJ2aWNlQ29uZmlnLm9yZ0NvbmZpZz8ucmVzb2x1dGlvbiA/PyB7fTtcbiAgICBpZiAoYmFzZVZlcnNpb24gJiYgYmFzZVZlcnNpb25Tb3VyY2UgJiYgYmFzZVZlcnNpb25Tb3VyY2UgIT09ICdkZXBsb3llZCcpIHtcbiAgICAgIHN0b3JlLnNldChyZXNvbHZlZEJhc2VDb25maWdWZXJzaW9uQXRvbSwgYmFzZVZlcnNpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LnJlc29sdmVVcmwoY2xlYW5zZWRVcmwpKSBhcyBVcmxSZXNvbHZlclJlc3BvbnNlO1xuICAgIHN0b3JlLnNldCh1cmxSZXNvbHZlckF0b20sIHsgdXJsOiBjbGVhbnNlZFVybCwgcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIEZhaWwgb3BlbjogUGFnZVByb3ZpZGVyIGlzc3VlcyBpdHMgb3duIHJlc29sdmVVcmwgY2FsbCB3aGVuIHRoZSBjYWNoZVxuICAgIC8vIGlzIGVtcHR5LCBzbyBhIHdhcm0tdXAgZmFpbHVyZSBuZXZlciBibG9ja3MgcmVuZGVyaW5nLlxuICAgIGxvZ2dlci5sb2dEZWJ1ZygnVVJMIHJlc29sdmVyIHdhcm0tdXAgZmFpbGVkJywgZXJyKTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBVUEsTUFBTSxTQUFTLElBQUlBLGVBQU8sMkJBQTJCOzs7Ozs7Ozs7Ozs7OztBQTBCckQsTUFBYSxrQkFBa0IsT0FBTyxFQUNwQyxTQUNBLFFBQ0EscUJBQ0EsTUFDQSxVQUNBLEtBQ0EsZUFDQSx5QkFDMEM7QUFDMUMsS0FBSTtFQUNGLE1BQU0sUUFBUSxjQUFjO0VBRTVCLE1BQU0sY0FBYyxPQUFPLFNBQVMsS0FBSyxhQUFhLENBQUMsTUFBTTtBQUM3RCxNQUFJLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxhQUM3QjtBQU1GLE1BQUksTUFBTSxJQUFJLGlCQUFpQixLQUFLLE9BQ2xDLE9BQU0sSUFBSSxrQkFBa0I7R0FDMUI7R0FDQSxnQkFBZ0I7R0FDaEIsY0FBYyxvQkFBb0IsSUFBSSxJQUFJO0dBQzFDLE9BQU8sb0JBQW9CLElBQUksSUFBSTtHQUNuQztHQUNBO0dBQ0E7R0FDQTtHQUNELENBQUM7QUFLSixNQUFJLHNCQUFzQixNQUFNLElBQUksdUJBQXVCLEtBQUssT0FDOUQsT0FBTSxJQUFJLHdCQUF3QixFQUFFLG9CQUFvQixDQUFDO0VBRzNELE1BQU0sRUFBRSxhQUFhLHNCQUFzQixvQkFBb0IsV0FBVyxjQUFjLEVBQUU7QUFDMUYsTUFBSSxlQUFlLHFCQUFxQixzQkFBc0IsV0FDNUQsT0FBTSxJQUFJLCtCQUErQixZQUFZO0VBR3ZELE1BQU0sV0FBWSxNQUFNQyxxQkFBa0IsV0FBVyxZQUFZO0FBQ2pFLFFBQU0sSUFBSSxpQkFBaUI7R0FBRSxLQUFLO0dBQWE7R0FBVSxDQUFDO1VBQ25ELEtBQUs7QUFHWixTQUFPLFNBQVMsK0JBQStCLElBQUkifQ==
@@ -4,8 +4,12 @@ import { FrontendConfigOverrides } from "../application/models/frontendConfig.cj
4
4
  import { VariantInfo } from "../application/models/variantInfo/variantInfo.cjs";
5
5
 
6
6
  //#region src/types/enviveConfig.d.ts
7
+ type AddToCartCallback = (params: {
8
+ product_id: string;
9
+ }) => void | Promise<void>;
7
10
  interface EnviveConfig {
8
11
  publicKey?: string;
12
+ addToCart?: AddToCartCallback;
9
13
  userID?: string;
10
14
  env?: 'prod' | 'dev';
11
15
  clientID?: string;
@@ -28,5 +32,5 @@ declare global {
28
32
  }
29
33
  }
30
34
  //#endregion
31
- export { EnviveConfig };
32
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29uZmlnLmQuY3RzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lbnZpdmVDb25maWcuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGcm9udGVuZENvbmZpZ092ZXJyaWRlcywgVmFyaWFudEluZm8gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB0eXBlIHsgSGFyZGNvcHlSZXNwb25zZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9oYXJkY29weUNvbnRleHQvaGFyZGNvcHlDb250ZXh0JztcbmltcG9ydCB0eXBlIHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuZXhwb3J0IGludGVyZmFjZSBFbnZpdmVDb25maWcge1xuICAgIHB1YmxpY0tleT86IHN0cmluZztcbiAgICB1c2VySUQ/OiBzdHJpbmc7XG4gICAgZW52PzogJ3Byb2QnIHwgJ2Rldic7XG4gICAgY2xpZW50SUQ/OiBzdHJpbmc7XG4gICAgc2hvdz86IGJvb2xlYW47XG4gICAgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIHZhcmlhbnRJbmZvT3ZlcnJpZGU/OiBWYXJpYW50SW5mbztcbiAgICB2YXJpYW50VXJsT3ZlcnJpZGU/OiBzdHJpbmc7XG4gICAgcGFnZVZhcmlhbnRJZE92ZXJyaWRlPzogc3RyaW5nO1xuICAgIHNlbGVjdGVkQ3VzdG9taXplT3B0aW9uPzogc3RyaW5nO1xuICAgIHJlZHVjZWRNb3Rpb25PdmVycmlkZT86IGJvb2xlYW47XG4gICAgaW5pdGlhbE9wZW5TZWFyY2hPdmVybGF5PzogYm9vbGVhbjtcbiAgICBXaWRnZXRNb3VudGluZ092ZXJyaWRlPzogUmVjb3JkPHN0cmluZywgYW55PltdO1xuICAgIGNvbmZpZ0NoYW5nZXM/OiBGcm9udGVuZENvbmZpZ092ZXJyaWRlc1tdO1xuICAgIGhhcmRjb3B5T3ZlcnJpZGU/OiBQYXJ0aWFsPFJlY29yZDxXaWRnZXRUeXBlVjMsIEhhcmRjb3B5UmVzcG9uc2U+Pjtcbn1cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgX3NwaWZmeT86IEVudml2ZUNvbmZpZztcbiAgICAgICAgX2Vudml2ZT86IEVudml2ZUNvbmZpZztcbiAgICB9XG59XG5leHBvcnQge307XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQVcsZUFBZTtDQUFDO09BQUc7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBQzlCLElBQUksS0FBSztDQUFDO09BQVc7T0FBQztDQUFBLFdBQUEsR0FBQTtDQUFBIn0=
35
+ export { AddToCartCallback, EnviveConfig };
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29uZmlnLmQuY3RzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lbnZpdmVDb25maWcuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGcm9udGVuZENvbmZpZ092ZXJyaWRlcywgVmFyaWFudEluZm8gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB0eXBlIHsgSGFyZGNvcHlSZXNwb25zZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9oYXJkY29weUNvbnRleHQvaGFyZGNvcHlDb250ZXh0JztcbmltcG9ydCB0eXBlIHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuZXhwb3J0IHR5cGUgQWRkVG9DYXJ0Q2FsbGJhY2sgPSAocGFyYW1zOiB7XG4gICAgcHJvZHVjdF9pZDogc3RyaW5nO1xufSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5leHBvcnQgaW50ZXJmYWNlIEVudml2ZUNvbmZpZyB7XG4gICAgcHVibGljS2V5Pzogc3RyaW5nO1xuICAgIGFkZFRvQ2FydD86IEFkZFRvQ2FydENhbGxiYWNrO1xuICAgIHVzZXJJRD86IHN0cmluZztcbiAgICBlbnY/OiAncHJvZCcgfCAnZGV2JztcbiAgICBjbGllbnRJRD86IHN0cmluZztcbiAgICBzaG93PzogYm9vbGVhbjtcbiAgICBmZWF0dXJlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgdmFyaWFudEluZm9PdmVycmlkZT86IFZhcmlhbnRJbmZvO1xuICAgIHZhcmlhbnRVcmxPdmVycmlkZT86IHN0cmluZztcbiAgICBwYWdlVmFyaWFudElkT3ZlcnJpZGU/OiBzdHJpbmc7XG4gICAgc2VsZWN0ZWRDdXN0b21pemVPcHRpb24/OiBzdHJpbmc7XG4gICAgcmVkdWNlZE1vdGlvbk92ZXJyaWRlPzogYm9vbGVhbjtcbiAgICBpbml0aWFsT3BlblNlYXJjaE92ZXJsYXk/OiBib29sZWFuO1xuICAgIFdpZGdldE1vdW50aW5nT3ZlcnJpZGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gICAgY29uZmlnQ2hhbmdlcz86IEZyb250ZW5kQ29uZmlnT3ZlcnJpZGVzW107XG4gICAgaGFyZGNvcHlPdmVycmlkZT86IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+O1xufVxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBfc3BpZmZ5PzogRW52aXZlQ29uZmlnO1xuICAgICAgICBfZW52aXZlPzogRW52aXZlQ29uZmlnO1xuICAgIH1cbn1cbmV4cG9ydCB7fTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBVyxvQkFBb0IsQ0FBQyxXQUFTLFFBQUE7QUFDekMsSUFBVyxlQUFXO0NBQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUN0QixJQUFJLEtBQUs7Q0FBQztPQUFXO09BQUs7Q0FBQSxXQUFBLEdBQUE7Q0FBQSJ9
@@ -4,8 +4,12 @@ import { FrontendConfigOverrides } from "../application/models/frontendConfig.js
4
4
  import { VariantInfo } from "../application/models/variantInfo/variantInfo.js";
5
5
 
6
6
  //#region src/types/enviveConfig.d.ts
7
+ type AddToCartCallback = (params: {
8
+ product_id: string;
9
+ }) => void | Promise<void>;
7
10
  interface EnviveConfig {
8
11
  publicKey?: string;
12
+ addToCart?: AddToCartCallback;
9
13
  userID?: string;
10
14
  env?: 'prod' | 'dev';
11
15
  clientID?: string;
@@ -28,5 +32,5 @@ declare global {
28
32
  }
29
33
  }
30
34
  //#endregion
31
- export { EnviveConfig };
32
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29uZmlnLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2Vudml2ZUNvbmZpZy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZyb250ZW5kQ29uZmlnT3ZlcnJpZGVzLCBWYXJpYW50SW5mbyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHR5cGUgeyBIYXJkY29weVJlc3BvbnNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2hhcmRjb3B5Q29udGV4dC9oYXJkY29weUNvbnRleHQnO1xuaW1wb3J0IHR5cGUgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5leHBvcnQgaW50ZXJmYWNlIEVudml2ZUNvbmZpZyB7XG4gICAgcHVibGljS2V5Pzogc3RyaW5nO1xuICAgIHVzZXJJRD86IHN0cmluZztcbiAgICBlbnY/OiAncHJvZCcgfCAnZGV2JztcbiAgICBjbGllbnRJRD86IHN0cmluZztcbiAgICBzaG93PzogYm9vbGVhbjtcbiAgICBmZWF0dXJlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgdmFyaWFudEluZm9PdmVycmlkZT86IFZhcmlhbnRJbmZvO1xuICAgIHZhcmlhbnRVcmxPdmVycmlkZT86IHN0cmluZztcbiAgICBwYWdlVmFyaWFudElkT3ZlcnJpZGU/OiBzdHJpbmc7XG4gICAgc2VsZWN0ZWRDdXN0b21pemVPcHRpb24/OiBzdHJpbmc7XG4gICAgcmVkdWNlZE1vdGlvbk92ZXJyaWRlPzogYm9vbGVhbjtcbiAgICBpbml0aWFsT3BlblNlYXJjaE92ZXJsYXk/OiBib29sZWFuO1xuICAgIFdpZGdldE1vdW50aW5nT3ZlcnJpZGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gICAgY29uZmlnQ2hhbmdlcz86IEZyb250ZW5kQ29uZmlnT3ZlcnJpZGVzW107XG4gICAgaGFyZGNvcHlPdmVycmlkZT86IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+O1xufVxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBfc3BpZmZ5PzogRW52aXZlQ29uZmlnO1xuICAgICAgICBfZW52aXZlPzogRW52aXZlQ29uZmlnO1xuICAgIH1cbn1cbmV4cG9ydCB7fTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBVyxlQUFlO0NBQUM7T0FBRztPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUE7QUFDOUIsSUFBSSxLQUFLO0NBQUM7T0FBVztPQUFDO0NBQUEsV0FBQSxHQUFBO0NBQUEifQ==
35
+ export { AddToCartCallback, EnviveConfig };
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXZlQ29uZmlnLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2Vudml2ZUNvbmZpZy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZyb250ZW5kQ29uZmlnT3ZlcnJpZGVzLCBWYXJpYW50SW5mbyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHR5cGUgeyBIYXJkY29weVJlc3BvbnNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2hhcmRjb3B5Q29udGV4dC9oYXJkY29weUNvbnRleHQnO1xuaW1wb3J0IHR5cGUgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5leHBvcnQgdHlwZSBBZGRUb0NhcnRDYWxsYmFjayA9IChwYXJhbXM6IHtcbiAgICBwcm9kdWN0X2lkOiBzdHJpbmc7XG59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBpbnRlcmZhY2UgRW52aXZlQ29uZmlnIHtcbiAgICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gICAgYWRkVG9DYXJ0PzogQWRkVG9DYXJ0Q2FsbGJhY2s7XG4gICAgdXNlcklEPzogc3RyaW5nO1xuICAgIGVudj86ICdwcm9kJyB8ICdkZXYnO1xuICAgIGNsaWVudElEPzogc3RyaW5nO1xuICAgIHNob3c/OiBib29sZWFuO1xuICAgIGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICB2YXJpYW50SW5mb092ZXJyaWRlPzogVmFyaWFudEluZm87XG4gICAgdmFyaWFudFVybE92ZXJyaWRlPzogc3RyaW5nO1xuICAgIHBhZ2VWYXJpYW50SWRPdmVycmlkZT86IHN0cmluZztcbiAgICBzZWxlY3RlZEN1c3RvbWl6ZU9wdGlvbj86IHN0cmluZztcbiAgICByZWR1Y2VkTW90aW9uT3ZlcnJpZGU/OiBib29sZWFuO1xuICAgIGluaXRpYWxPcGVuU2VhcmNoT3ZlcmxheT86IGJvb2xlYW47XG4gICAgV2lkZ2V0TW91bnRpbmdPdmVycmlkZT86IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgICBjb25maWdDaGFuZ2VzPzogRnJvbnRlbmRDb25maWdPdmVycmlkZXNbXTtcbiAgICBoYXJkY29weU92ZXJyaWRlPzogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj47XG59XG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIF9zcGlmZnk/OiBFbnZpdmVDb25maWc7XG4gICAgICAgIF9lbnZpdmU/OiBFbnZpdmVDb25maWc7XG4gICAgfVxufVxuZXhwb3J0IHt9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHQSxJQUFXLG9CQUFvQixDQUFDLFdBQVMsUUFBQTtBQUN6QyxJQUFXLGVBQVc7Q0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3RCLElBQUksS0FBSztDQUFDO09BQVc7T0FBSztDQUFBLFdBQUEsR0FBQTtDQUFBIn0=
@@ -1,7 +1,7 @@
1
1
  import { ChatState, CustomerServiceOverrides, Message, OutsideHoursFormData } from "./custservice-types.cjs";
2
2
  import { SuggestionBarLocationForMetrics } from "./suggestionBarV2-types.cjs";
3
3
  import { TestProps } from "./test-types.cjs";
4
+ import { AddToCartCallback, EnviveConfig } from "./enviveConfig.cjs";
4
5
  import { CloseIconVariant, FilterFooterProps, FilterItemProps, FilterProps, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum } from "./search-filter-types.cjs";
5
6
  import { OrgInfo } from "./OrgInfo.cjs";
6
- import { EnviveConfig } from "./enviveConfig.cjs";
7
- export { ChatState, CloseIconVariant, CustomerServiceOverrides, EnviveConfig, FilterFooterProps, FilterItemProps, FilterProps, Message, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, OrgInfo, OutsideHoursFormData, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum, SuggestionBarLocationForMetrics, TestProps };
7
+ export { AddToCartCallback, ChatState, CloseIconVariant, CustomerServiceOverrides, EnviveConfig, FilterFooterProps, FilterItemProps, FilterProps, Message, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, OrgInfo, OutsideHoursFormData, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum, SuggestionBarLocationForMetrics, TestProps };
@@ -1,7 +1,7 @@
1
1
  import { ChatState, CustomerServiceOverrides, Message, OutsideHoursFormData } from "./custservice-types.js";
2
2
  import { SuggestionBarLocationForMetrics } from "./suggestionBarV2-types.js";
3
3
  import { TestProps } from "./test-types.js";
4
+ import { AddToCartCallback, EnviveConfig } from "./enviveConfig.js";
4
5
  import { CloseIconVariant, FilterFooterProps, FilterItemProps, FilterProps, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum } from "./search-filter-types.js";
5
6
  import { OrgInfo } from "./OrgInfo.js";
6
- import { EnviveConfig } from "./enviveConfig.js";
7
- export { ChatState, CloseIconVariant, CustomerServiceOverrides, EnviveConfig, FilterFooterProps, FilterItemProps, FilterProps, Message, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, OrgInfo, OutsideHoursFormData, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum, SuggestionBarLocationForMetrics, TestProps };
7
+ export { AddToCartCallback, ChatState, CloseIconVariant, CustomerServiceOverrides, EnviveConfig, FilterFooterProps, FilterItemProps, FilterProps, Message, ModalSheetCloseIconProps, ModalSheetFooterProps, ModalSheetHeaderProps, ModalSheetHeaderVariant, ModalSheetProps, OrgInfo, OutsideHoursFormData, SearchFilterDatum, SearchFilterHeaderProps, SearchFilterItemDatum, SearchFilterProps, SelectFilterItem, SelectedFilterItemDatum, SuggestionBarLocationForMetrics, TestProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-hooks",
3
- "version": "0.3.45",
3
+ "version": "0.3.47",
4
4
  "description": "React hooks for connecting to Envive AI services.",
5
5
  "keywords": [
6
6
  "react",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@amplitude/analytics-browser": "2.23.7",
41
- "@spiffy-ai/commerce-api-client": "1.1.0-SNAPSHOT.202603181358",
41
+ "@spiffy-ai/commerce-api-client": "1.1.0-SNAPSHOT.202607020921",
42
42
  "@envive-ai/analytics": "1.0.28",
43
43
  "fuse.js": "^7.1.0",
44
44
  "jotai": "^2.14.0",
@@ -274,6 +274,10 @@
274
274
  "import": "./dist/events/index.js",
275
275
  "require": "./dist/events/index.cjs"
276
276
  },
277
+ "./hooks/AddToCart": {
278
+ "import": "./dist/hooks/AddToCart/index.js",
279
+ "require": "./dist/hooks/AddToCart/index.cjs"
280
+ },
277
281
  "./hooks/AmplitudeOperations": {
278
282
  "import": "./dist/hooks/AmplitudeOperations/index.js",
279
283
  "require": "./dist/hooks/AmplitudeOperations/index.cjs"
@@ -350,6 +354,10 @@
350
354
  "import": "./dist/hooks/PageViewedEvent/index.js",
351
355
  "require": "./dist/hooks/PageViewedEvent/index.cjs"
352
356
  },
357
+ "./hooks/ProductDetails": {
358
+ "import": "./dist/hooks/ProductDetails/index.js",
359
+ "require": "./dist/hooks/ProductDetails/index.cjs"
360
+ },
353
361
  "./hooks/ProductImageUrl": {
354
362
  "import": "./dist/hooks/ProductImageUrl/index.js",
355
363
  "require": "./dist/hooks/ProductImageUrl/index.cjs"
@@ -422,10 +430,18 @@
422
430
  "import": "./dist/services/enviveConfigService/index.js",
423
431
  "require": "./dist/services/enviveConfigService/index.cjs"
424
432
  },
433
+ "./services/featureFlagService": {
434
+ "import": "./dist/services/featureFlagService/index.js",
435
+ "require": "./dist/services/featureFlagService/index.cjs"
436
+ },
425
437
  "./services/hardcopyService": {
426
438
  "import": "./dist/services/hardcopyService/index.js",
427
439
  "require": "./dist/services/hardcopyService/index.cjs"
428
440
  },
441
+ "./services/urlResolverWarmupService": {
442
+ "import": "./dist/services/urlResolverWarmupService/index.js",
443
+ "require": "./dist/services/urlResolverWarmupService/index.cjs"
444
+ },
429
445
  "./services/userIdentityService": {
430
446
  "import": "./dist/services/userIdentityService/index.js",
431
447
  "require": "./dist/services/userIdentityService/index.cjs"
@@ -0,0 +1,126 @@
1
+ import { ResponseCategory, UserEventCategory } from '@spiffy-ai/commerce-api-client';
2
+ import { getAtomStore } from 'src/atoms/atomStore/atomStore';
3
+ import { enviveConfigAtom } from 'src/atoms/envive/enviveConfig';
4
+ import { MessageType } from 'src/application/models';
5
+ import CommerceApiClient from '../commerce-api';
6
+
7
+ const { mockV1GetSessionMessages } = vi.hoisted(() => ({
8
+ mockV1GetSessionMessages: vi.fn(),
9
+ }));
10
+
11
+ vi.mock('@spiffy-ai/commerce-api-client', async (importOriginal: () => Promise<unknown>) => {
12
+ const actual = (await importOriginal()) as typeof import('@spiffy-ai/commerce-api-client');
13
+ return {
14
+ ...actual,
15
+ DefaultApi: vi.fn().mockImplementation(function DefaultApi() {
16
+ return { v1GetSessionMessages: mockV1GetSessionMessages };
17
+ }),
18
+ };
19
+ });
20
+
21
+ const makeSessionResponse = (overrides: Record<string, unknown> = {}) => ({
22
+ responses: [],
23
+ suggestions: [],
24
+ user_events: [],
25
+ ...overrides,
26
+ });
27
+
28
+ const productResponse = (id: string, title: string) => ({
29
+ id: `resp-${id}`,
30
+ created_at: '2026-07-20T00:00:00.000Z',
31
+ category: ResponseCategory.Product,
32
+ attributes: {
33
+ id,
34
+ title,
35
+ url: `https://example.com/${id}`,
36
+ },
37
+ });
38
+
39
+ const addToCartEvent = (eventId: string, productId: string) => ({
40
+ event_id: eventId,
41
+ created_at: '2026-07-20T00:00:01.000Z',
42
+ category: UserEventCategory.AddToCart,
43
+ attributes: {
44
+ product_id: productId,
45
+ parent_product_id: '',
46
+ url: '',
47
+ },
48
+ });
49
+
50
+ beforeEach(() => {
51
+ vi.clearAllMocks();
52
+ getAtomStore().set(enviveConfigAtom, {
53
+ baseUrl: 'https://commerce-api.test',
54
+ orgLevelApiKey: 'test-key',
55
+ orgId: 'org-1',
56
+ orgShortName: 'test-org',
57
+ env: 'dev',
58
+ contextSource: 'app',
59
+ });
60
+ });
61
+
62
+ describe('CommerceApiClient.getResponses — AddToCart title resolution on rehydration', () => {
63
+ it('resolves the title for free from a matching Product response, without a fallback fetch', async () => {
64
+ mockV1GetSessionMessages.mockResolvedValueOnce(
65
+ makeSessionResponse({
66
+ responses: [[productResponse('sku-tier1', 'Tier One Sweater')]],
67
+ user_events: [addToCartEvent('evt-tier1', 'sku-tier1')],
68
+ }),
69
+ );
70
+ const fetchSpy = vi.spyOn(global, 'fetch');
71
+
72
+ const { messages } = await CommerceApiClient.getResponses('org-1', 'chat-1', 'user-1');
73
+
74
+ const addToCartMessage = messages.flat().find(m => m.id === 'evt-tier1');
75
+ expect(addToCartMessage?.type).toBe(MessageType.QueryTyped);
76
+ if (addToCartMessage?.type === MessageType.QueryTyped) {
77
+ expect(addToCartMessage.metadata.content).toBe('Add Tier One Sweater to my cart');
78
+ }
79
+ expect(fetchSpy).not.toHaveBeenCalled();
80
+ });
81
+
82
+ it('falls back to a cached product-details fetch when no matching response exists', async () => {
83
+ mockV1GetSessionMessages.mockResolvedValueOnce(
84
+ makeSessionResponse({
85
+ user_events: [addToCartEvent('evt-tier2', 'sku-tier2')],
86
+ }),
87
+ );
88
+ const fetchMock = vi.fn().mockResolvedValue({
89
+ ok: true,
90
+ json: async () => ({ data: { me: { productOptions: { title: 'Tier Two Boots' } } } }),
91
+ });
92
+ vi.stubGlobal('fetch', fetchMock);
93
+
94
+ const { messages } = await CommerceApiClient.getResponses('org-1', 'chat-1', 'user-1');
95
+
96
+ const addToCartMessage = messages.flat().find(m => m.id === 'evt-tier2');
97
+ expect(addToCartMessage?.type).toBe(MessageType.QueryTyped);
98
+ if (addToCartMessage?.type === MessageType.QueryTyped) {
99
+ expect(addToCartMessage.metadata.content).toBe('Add Tier Two Boots to my cart');
100
+ }
101
+ expect(fetchMock).toHaveBeenCalledTimes(1);
102
+ });
103
+
104
+ it('degrades to the raw productId when neither tier resolves a title', async () => {
105
+ mockV1GetSessionMessages.mockResolvedValueOnce(
106
+ makeSessionResponse({
107
+ user_events: [addToCartEvent('evt-tier3', 'sku-tier3-unresolvable')],
108
+ }),
109
+ );
110
+ vi.stubGlobal(
111
+ 'fetch',
112
+ vi.fn().mockResolvedValue({
113
+ ok: true,
114
+ json: async () => ({ data: { me: { productOptions: null } } }),
115
+ }),
116
+ );
117
+
118
+ const { messages } = await CommerceApiClient.getResponses('org-1', 'chat-1', 'user-1');
119
+
120
+ const addToCartMessage = messages.flat().find(m => m.id === 'evt-tier3');
121
+ expect(addToCartMessage?.type).toBe(MessageType.QueryTyped);
122
+ if (addToCartMessage?.type === MessageType.QueryTyped) {
123
+ expect(addToCartMessage.metadata.content).toBe('Add sku-tier3-unresolvable to my cart');
124
+ }
125
+ });
126
+ });