@envive-ai/react-hooks 0.3.15-beta.1 → 0.3.16

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 (119) hide show
  1. package/dist/application/commerce-api.cjs +38 -1
  2. package/dist/application/commerce-api.d.cts +13 -2
  3. package/dist/application/commerce-api.d.ts +13 -2
  4. package/dist/application/commerce-api.js +39 -2
  5. package/dist/application/models/guards/api/isApiQueryTypedEventAttributes.cjs +2 -2
  6. package/dist/application/models/guards/api/isApiQueryTypedEventAttributes.js +2 -2
  7. package/dist/application/models/index.d.cts +10 -10
  8. package/dist/application/models/index.d.ts +10 -10
  9. package/dist/application/models/variantInfo/variantInfo.cjs +1 -1
  10. package/dist/application/models/variantInfo/variantInfo.d.cts +2 -2
  11. package/dist/application/models/variantInfo/variantInfo.d.ts +2 -2
  12. package/dist/application/models/variantInfo/variantInfo.js +1 -1
  13. package/dist/application/utils/productRetrievalResponseToProductRetrievalResult.cjs +18 -0
  14. package/dist/application/utils/productRetrievalResponseToProductRetrievalResult.js +18 -0
  15. package/dist/atoms/app/index.d.cts +7 -7
  16. package/dist/atoms/app/index.d.ts +6 -6
  17. package/dist/atoms/app/variant.cjs +5 -1
  18. package/dist/atoms/app/variant.d.cts +1 -1
  19. package/dist/atoms/app/variant.d.ts +1 -1
  20. package/dist/atoms/app/variant.js +5 -1
  21. package/dist/atoms/chat/chatState.d.cts +17 -17
  22. package/dist/atoms/chat/chatState.d.ts +18 -18
  23. package/dist/atoms/chat/form.d.cts +2 -2
  24. package/dist/atoms/chat/index.cjs +1 -1
  25. package/dist/atoms/chat/index.d.cts +2 -2
  26. package/dist/atoms/chat/index.js +1 -1
  27. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  28. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  29. package/dist/atoms/chat/replies.d.cts +3 -3
  30. package/dist/atoms/chat/replies.d.ts +3 -3
  31. package/dist/atoms/chat/suggestions.d.cts +2 -2
  32. package/dist/atoms/chat/suggestions.d.ts +2 -2
  33. package/dist/atoms/envive/enviveConfig.d.cts +12 -12
  34. package/dist/atoms/envive/enviveConfig.d.ts +13 -13
  35. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  36. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  37. package/dist/atoms/org/customerService.d.cts +6 -6
  38. package/dist/atoms/org/customerService.d.ts +6 -6
  39. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  40. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  41. package/dist/atoms/org/index.cjs +1 -1
  42. package/dist/atoms/org/index.js +1 -1
  43. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  44. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  45. package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
  46. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  47. package/dist/atoms/search/chatSearch.cjs +1 -1
  48. package/dist/atoms/search/chatSearch.d.cts +18 -18
  49. package/dist/atoms/search/chatSearch.d.ts +1 -1
  50. package/dist/atoms/search/chatSearch.js +1 -1
  51. package/dist/atoms/search/searchAPI.cjs +1 -1
  52. package/dist/atoms/search/searchAPI.d.cts +14 -14
  53. package/dist/atoms/search/searchAPI.d.ts +14 -14
  54. package/dist/atoms/search/searchAPI.js +1 -1
  55. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  56. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  57. package/dist/contexts/enviveContext/types.d.cts +1 -1
  58. package/dist/contexts/enviveContext/types.d.ts +1 -1
  59. package/dist/contexts/graphqlContext/graphqlContext.d.cts +1 -1
  60. package/dist/contexts/graphqlContext/graphqlContext.d.ts +1 -1
  61. package/dist/contexts/graphqlContext/mockV3Config.cjs +2 -3
  62. package/dist/contexts/graphqlContext/mockV3Config.js +2 -3
  63. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +1 -1
  64. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +1 -1
  65. package/dist/contexts/salesAgentContext/chatAPI.cjs +7 -6
  66. package/dist/contexts/salesAgentContext/chatAPI.d.cts +3 -2
  67. package/dist/contexts/salesAgentContext/chatAPI.d.ts +3 -2
  68. package/dist/contexts/salesAgentContext/chatAPI.js +7 -6
  69. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +20 -7
  70. package/dist/contexts/salesAgentContext/salesAgentContext.d.cts +3 -2
  71. package/dist/contexts/salesAgentContext/salesAgentContext.d.ts +3 -2
  72. package/dist/contexts/salesAgentContext/salesAgentContext.js +21 -8
  73. package/dist/contexts/salesAgentContext/salesAgentService.cjs +9 -4
  74. package/dist/contexts/salesAgentContext/salesAgentService.js +9 -4
  75. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  76. package/dist/contexts/searchContext/searchContext.js +1 -1
  77. package/dist/contexts/types.d.cts +1 -1
  78. package/dist/contexts/types.d.ts +1 -1
  79. package/dist/contexts/typesV3.cjs +1 -1
  80. package/dist/contexts/typesV3.d.cts +1 -10
  81. package/dist/contexts/typesV3.d.ts +1 -10
  82. package/dist/contexts/typesV3.js +1 -1
  83. package/dist/hooks/ChatToggle/useChatToggle.cjs +1 -1
  84. package/dist/hooks/ChatToggle/useChatToggle.js +1 -1
  85. package/dist/hooks/ProductImageUrl/index.cjs +3 -0
  86. package/dist/hooks/ProductImageUrl/index.d.cts +2 -0
  87. package/dist/hooks/ProductImageUrl/index.d.ts +2 -0
  88. package/dist/hooks/ProductImageUrl/index.js +3 -0
  89. package/dist/hooks/ProductImageUrl/useProductImageUrl.cjs +33 -0
  90. package/dist/hooks/ProductImageUrl/useProductImageUrl.d.cts +9 -0
  91. package/dist/hooks/ProductImageUrl/useProductImageUrl.d.ts +9 -0
  92. package/dist/hooks/ProductImageUrl/useProductImageUrl.js +32 -0
  93. package/dist/hooks/Search/useSearch.cjs +3 -3
  94. package/dist/hooks/Search/useSearch.d.cts +1 -1
  95. package/dist/hooks/Search/useSearch.d.ts +1 -1
  96. package/dist/hooks/Search/useSearch.js +3 -3
  97. package/dist/hooks/WidgetInteraction/types.cjs +2 -1
  98. package/dist/hooks/WidgetInteraction/types.d.cts +2 -1
  99. package/dist/hooks/WidgetInteraction/types.d.ts +2 -1
  100. package/dist/hooks/WidgetInteraction/types.js +2 -1
  101. package/dist/hooks/utils.d.cts +1 -1
  102. package/dist/hooks/utils.d.ts +1 -1
  103. package/dist/services/ga4ProjectionService/ga4EventSchema.cjs +2 -1
  104. package/dist/services/ga4ProjectionService/ga4EventSchema.js +2 -1
  105. package/package.json +5 -1
  106. package/src/application/commerce-api.ts +51 -0
  107. package/src/application/models/guards/api/isApiQueryTypedEventAttributes.ts +1 -6
  108. package/src/application/models/variantInfo/variantInfo.ts +1 -1
  109. package/src/application/utils/productRetrievalResponseToProductRetrievalResult.ts +21 -0
  110. package/src/atoms/app/variant.ts +8 -2
  111. package/src/contexts/graphqlContext/mockV3Config.ts +0 -3
  112. package/src/contexts/salesAgentContext/chatAPI.ts +4 -3
  113. package/src/contexts/salesAgentContext/salesAgentContext.tsx +32 -16
  114. package/src/contexts/salesAgentContext/salesAgentService.ts +22 -14
  115. package/src/contexts/typesV3.ts +0 -10
  116. package/src/hooks/ProductImageUrl/index.ts +1 -0
  117. package/src/hooks/ProductImageUrl/useProductImageUrl.ts +35 -0
  118. package/src/hooks/WidgetInteraction/types.ts +1 -0
  119. package/src/services/ga4ProjectionService/ga4EventSchema.ts +1 -0
@@ -4,11 +4,11 @@ import { initializedAtom, messagesAtom, pendingResponseAtom, responseStreamingAt
4
4
  import { processUserEventAtom, userEventQueueAtom, userQueueEventCountAtom } from "../../atoms/chat/messageQueue.js";
5
5
  import { useSystemSettingsContext } from "../../hooks/SystemSettingsContext/useSystemSettingsContext.js";
6
6
  import "../../hooks/SystemSettingsContext/index.js";
7
- import { buildFormSubmittedDisplayContent, createFormSubmittedUserMessage } from "./formSubmittedUtils.js";
8
7
  import { useSalesAgentChatAPI } from "./chatAPI.js";
8
+ import { buildFormSubmittedDisplayContent, createFormSubmittedUserMessage } from "./formSubmittedUtils.js";
9
9
  import { useSalesAgentService } from "./salesAgentService.js";
10
10
  import { UserEventCategory } from "@spiffy-ai/commerce-api-client";
11
- import { createContext, useCallback, useEffect, useMemo, useRef } from "react";
11
+ import { createContext, useCallback, useEffect, useMemo, useRef, useState } from "react";
12
12
  import { jsx } from "react/jsx-runtime";
13
13
  import { useAtom, useAtomValue, useSetAtom } from "jotai";
14
14
 
@@ -18,6 +18,7 @@ const SalesAgentProvider = ({ children, previewMode = false, mockData }) => {
18
18
  const userEvents = useAtomValue(userEventQueueAtom);
19
19
  const userQueueEventCount = useAtomValue(userQueueEventCountAtom);
20
20
  const markUserEventsProcessed = useSetAtom(processUserEventAtom);
21
+ const [isHydrated, setIsHydrated] = useState(false);
21
22
  const [isInitialized, setIsInitialized] = useAtom(initializedAtom);
22
23
  const settingsContext = useSystemSettingsContext();
23
24
  const setMessages = useSetAtom(messagesAtom);
@@ -52,6 +53,7 @@ const SalesAgentProvider = ({ children, previewMode = false, mockData }) => {
52
53
  ]);
53
54
  useEffect(() => {
54
55
  if (previewMode) return;
56
+ if (!isHydrated) return;
55
57
  if (userQueueEventCount > 0 && !isSendingRef.current) {
56
58
  isSendingRef.current = true;
57
59
  const payloadEvents = userEvents.slice(0, userQueueEventCount);
@@ -95,6 +97,7 @@ const SalesAgentProvider = ({ children, previewMode = false, mockData }) => {
95
97
  generationParams: settingsContext.generationParams
96
98
  }));
97
99
  }, [
100
+ isHydrated,
98
101
  createResponsePayload,
99
102
  getSuggestions,
100
103
  isInitialized,
@@ -106,26 +109,36 @@ const SalesAgentProvider = ({ children, previewMode = false, mockData }) => {
106
109
  previewMode
107
110
  ]);
108
111
  useEffect(() => {
109
- if (previewMode) return;
110
- if (isInitialized) hydrateMessages();
112
+ const startHydration = async () => {
113
+ if (previewMode) return;
114
+ if (!isHydrated) try {
115
+ await hydrateMessages();
116
+ } catch (error) {
117
+ logger_default.logError("[envive-ai] error hydrating messages", error);
118
+ } finally {
119
+ setIsHydrated(true);
120
+ }
121
+ };
122
+ startHydration();
111
123
  }, [
112
124
  isInitialized,
113
125
  hydrateMessages,
114
- previewMode
126
+ previewMode,
127
+ isHydrated
115
128
  ]);
116
129
  return /* @__PURE__ */ jsx(SalesAgentContext.Provider, {
117
130
  value: void 0,
118
131
  children
119
132
  });
120
133
  };
121
- const useSalesAgent = () => {
134
+ const useSalesAgent = (contextWidget) => {
122
135
  const messages = useAtomValue(messagesAtom);
123
136
  const suggestions = useAtomValue(suggestionsAtom);
124
137
  const pendingMessages = useAtomValue(userEventQueueAtom);
125
138
  const isResponseStreaming = useAtomValue(responseStreamingAtom);
126
139
  const isPendingResponse = useAtomValue(pendingResponseAtom);
127
140
  const isInitialized = useAtomValue(initializedAtom);
128
- const { logPageVisit, logUserEvent, onSuggestionClicked, onTypedMessageSubmitted, onFormResponseSubmitted } = useSalesAgentChatAPI();
141
+ const { logPageVisit, logUserEvent, onSuggestionClicked, onTypedMessageSubmitted, onFormResponseSubmitted } = useSalesAgentChatAPI(contextWidget);
129
142
  return useMemo(() => {
130
143
  return {
131
144
  messages,
@@ -157,4 +170,4 @@ const useSalesAgent = () => {
157
170
 
158
171
  //#endregion
159
172
  export { SalesAgentProvider, useSalesAgent };
160
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuanMiLCJuYW1lcyI6WyJTYWxlc0FnZW50UHJvdmlkZXI6IFJlYWN0LkZDPFNhbGVzQWdlbnRQcm92aWRlclByb3BzPiIsIm5ld01lc3NhZ2U6IE1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvc2FsZXNBZ2VudENvbnRleHQvc2FsZXNBZ2VudENvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUF0b20sIHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IFJlYWN0Tm9kZSwgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVJvbGUsIE1lc3NhZ2VUeXBlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9tZXNzYWdlJztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCwgU3VnZ2VzdGlvbiwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQge1xuICBpbml0aWFsaXplZEF0b20sXG4gIG1lc3NhZ2VzQXRvbSxcbiAgcGVuZGluZ1Jlc3BvbnNlQXRvbSxcbiAgcmVzcG9uc2VTdHJlYW1pbmdBdG9tLFxuICBzdWdnZXN0aW9uc0F0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9jaGF0L2NoYXRTdGF0ZSc7XG5pbXBvcnQge1xuICBwcm9jZXNzVXNlckV2ZW50QXRvbSxcbiAgdXNlckV2ZW50UXVldWVBdG9tLFxuICB1c2VyUXVldWVFdmVudENvdW50QXRvbSxcbn0gZnJvbSAnc3JjL2F0b21zL2NoYXQvbWVzc2FnZVF1ZXVlJztcbmltcG9ydCB7IHVzZVN5c3RlbVNldHRpbmdzQ29udGV4dCB9IGZyb20gJ3NyYy9ob29rcy9TeXN0ZW1TZXR0aW5nc0NvbnRleHQnO1xuaW1wb3J0IHtcbiAgYnVpbGRGb3JtU3VibWl0dGVkRGlzcGxheUNvbnRlbnQsXG4gIGNyZWF0ZUZvcm1TdWJtaXR0ZWRVc2VyTWVzc2FnZSxcbn0gZnJvbSAnLi9mb3JtU3VibWl0dGVkVXRpbHMnO1xuaW1wb3J0IHsgU2FsZXNBZ2VudENoYXRBUEksIHVzZVNhbGVzQWdlbnRDaGF0QVBJIH0gZnJvbSAnLi9jaGF0QVBJJztcbmltcG9ydCB7IHVzZVNhbGVzQWdlbnRTZXJ2aWNlIH0gZnJvbSAnLi9zYWxlc0FnZW50U2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2FsZXNBZ2VudCBleHRlbmRzIFNhbGVzQWdlbnRDaGF0QVBJIHtcbiAgLy8gTWVzc2FnZXMgYXJlIHRoZSBmdWxsIGxpc3Qgb2YgYWxsIHR1cm5zXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW11bXTtcbiAgLy8gUGVuZGluZyBtZXNzYWdlcyBhcmUgbWVzc2FnZXMgdGhhdCB0aGUgdXNlciBoYXMgY2xpY2tlZC90eXBlZCBidXQgaGF2ZSBub3QgeWV0IGJlZW4gc2VudCB0byB0aGUgYmFja2VuZC5cbiAgcGVuZGluZ01lc3NhZ2VzOiBVc2VyRXZlbnRbXTtcbiAgLy8gU3VnZ2VzdGlvbnMgYXJlIHRoZSBsaXN0IG9mIHN1Z2dlc3Rpb25zIHRoYXQgdGhlIHVzZXIgY2FuIGNsaWNrIG9uIGluIHJlc3BvbnNlIHRvIHRoZSBtb3N0IHJlY2VudCBtZXNzYWdlIGZyb20gdGhlIGJhY2tlbmRcbiAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgLy8gVHJ1ZSB3aGlsZSB0aGUgcmVzcG9uc2UgaXMgc3RyZWFtaW5nIGZyb20gdGhlIGJhY2tlbmRcbiAgaXNSZXNwb25zZVN0cmVhbWluZzogYm9vbGVhbjtcbiAgLy8gVHJ1ZSB3aGlsZSB0aGUgcmVzcG9uc2UgaXMgcGVuZGluZyBmcm9tIHRoZSBiYWNrZW5kXG4gIGlzUGVuZGluZ1Jlc3BvbnNlOiBib29sZWFuO1xuICAvLyBUcnVlIHdoZW4gdGhlIHNhbGVzIGFnZW50IGlzIGluaXRpYWxpemVkXG4gIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ja1NhbGVzQWdlbnREYXRhIHtcbiAgbWVzc2FnZXM/OiBNZXNzYWdlW11bXTtcbiAgc3VnZ2VzdGlvbnM/OiBTdWdnZXN0aW9uW107XG59XG5cbmNvbnN0IFNhbGVzQWdlbnRDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxTYWxlc0FnZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNhbGVzQWdlbnRQcm92aWRlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgcHJldmlld01vZGU/OiBib29sZWFuO1xuICBtb2NrRGF0YT86IE1vY2tTYWxlc0FnZW50RGF0YTtcbn1cblxuZXhwb3J0IGNvbnN0IFNhbGVzQWdlbnRQcm92aWRlcjogUmVhY3QuRkM8U2FsZXNBZ2VudFByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIHByZXZpZXdNb2RlID0gZmFsc2UsXG4gIG1vY2tEYXRhLFxufSkgPT4ge1xuICBjb25zdCB1c2VyRXZlbnRzID0gdXNlQXRvbVZhbHVlKHVzZXJFdmVudFF1ZXVlQXRvbSk7XG4gIGNvbnN0IHVzZXJRdWV1ZUV2ZW50Q291bnQgPSB1c2VBdG9tVmFsdWUodXNlclF1ZXVlRXZlbnRDb3VudEF0b20pO1xuICBjb25zdCBtYXJrVXNlckV2ZW50c1Byb2Nlc3NlZCA9IHVzZVNldEF0b20ocHJvY2Vzc1VzZXJFdmVudEF0b20pO1xuICBjb25zdCBbaXNJbml0aWFsaXplZCwgc2V0SXNJbml0aWFsaXplZF0gPSB1c2VBdG9tKGluaXRpYWxpemVkQXRvbSk7XG4gIGNvbnN0IHNldHRpbmdzQ29udGV4dCA9IHVzZVN5c3RlbVNldHRpbmdzQ29udGV4dCgpO1xuICBjb25zdCBzZXRNZXNzYWdlcyA9IHVzZVNldEF0b20obWVzc2FnZXNBdG9tKTtcbiAgY29uc3Qgc2V0U3VnZ2VzdGlvbnMgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zQXRvbSk7XG5cbiAgY29uc3QgeyBnZXRTdHJlYW1pbmdSZXNwb25zZXMsIGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCwgZ2V0U3VnZ2VzdGlvbnMsIGh5ZHJhdGVNZXNzYWdlcyB9ID1cbiAgICB1c2VTYWxlc0FnZW50U2VydmljZSgpO1xuXG4gIGNvbnN0IGlzU2VuZGluZ1JlZiA9IHVzZVJlZihmYWxzZSk7XG5cbiAgLy8gSW5pdGlhbGl6ZSB3aXRoIG1vY2sgZGF0YSBpbiBwcmV2aWV3IG1vZGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldmlld01vZGUgJiYgbW9ja0RhdGEpIHtcbiAgICAgIGlmIChtb2NrRGF0YS5tZXNzYWdlcykge1xuICAgICAgICBzZXRNZXNzYWdlcyhtb2NrRGF0YS5tZXNzYWdlcyk7XG4gICAgICB9XG4gICAgICBpZiAobW9ja0RhdGEuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgc2V0U3VnZ2VzdGlvbnMobW9ja0RhdGEuc3VnZ2VzdGlvbnMpO1xuICAgICAgfVxuICAgICAgc2V0SXNJbml0aWFsaXplZCh0cnVlKTtcbiAgICB9XG4gIH0sIFtwcmV2aWV3TW9kZSwgbW9ja0RhdGEsIHNldE1lc3NhZ2VzLCBzZXRTdWdnZXN0aW9ucywgc2V0SXNJbml0aWFsaXplZF0pO1xuXG4gIC8vIFRPRE86IEVuc3VyZSB0aGF0IGFtcGxpdHVkZSBldmVudHMgYXJlIGJlaW5nIGVtaXR0ZWRcblxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgdGhlIHN0cmVhbWluZyByZXNwb25zZXMgdG8gZnVuY3Rpb25cblxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGh5ZHJhdGlvbiBvZiB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgYmFja2VuZCBvbiBpbml0aWFsaXphdGlvblxuICBjb25zdCBzZW5kTWVzc2FnZXNUb0JhY2tlbmQgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVxdWVzdFBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzKHJlcXVlc3RQYXlsb2FkKTtcbiAgICAgICAgc2V0SXNJbml0aWFsaXplZCh0cnVlKTtcblxuICAgICAgICAvLyBSZW1vdmUgdGhlIHBlbmRpbmcgbWVzc2FnZSBmcm9tIHRoZSB1c2VyIGV2ZW50c1xuICAgICAgICByZXF1ZXN0UGF5bG9hZC51c2VyRXZlbnRzPy5tYXAodXNlckV2ZW50ID0+IG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkKFt1c2VyRXZlbnQuZXZlbnRJZF0pKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcignW2Vudml2ZS1haV0gZXJyb3Igc2VuZGluZyBtZXNzYWdlJywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2dldFN0cmVhbWluZ1Jlc3BvbnNlcywgc2V0SXNJbml0aWFsaXplZCwgbWFya1VzZXJFdmVudHNQcm9jZXNzZWRdLFxuICApO1xuXG4gIC8vIFRoaXMgaXMgdGhlIHByaW1hcnkgZXZlbnQgbG9vcCBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBiYWNrZW5kIEFQSVxuICAvLyBJdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZXJlIGFyZSBwZW5kaW5nIG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIGJhY2tlbmRcbiAgLy8gSXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3Igc2VuZGluZyB0aGUgbWVzc2FnZXMgdG8gdGhlIGJhY2tlbmQgYW5kIHJlY2VpdmluZyB0aGUgcmVzcG9uc2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2tpcCBiYWNrZW5kIGNvbW11bmljYXRpb24gaW4gcHJldmlldyBtb2RlXG4gICAgaWYgKHByZXZpZXdNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHVzZXJRdWV1ZUV2ZW50Q291bnQgPiAwICYmICFpc1NlbmRpbmdSZWYuY3VycmVudCkge1xuICAgICAgaXNTZW5kaW5nUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgY29uc3QgcGF5bG9hZEV2ZW50cyA9IHVzZXJFdmVudHMuc2xpY2UoMCwgdXNlclF1ZXVlRXZlbnRDb3VudCk7XG5cbiAgICAgIHBheWxvYWRFdmVudHMuZm9yRWFjaCh1c2VyRXZlbnQgPT4ge1xuICAgICAgICBpZiAodXNlckV2ZW50ICYmIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgICAgICAgIGNvbnN0IG5ld01lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICBpZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAgICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUXVlcnlUeXBlZCxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogdXNlckV2ZW50LmNyZWF0ZWRBdCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNldE1lc3NhZ2VzKGN1cnJlbnQgPT4gWy4uLmN1cnJlbnQsIFtuZXdNZXNzYWdlXV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1c2VyRXZlbnQgJiYgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgICAgICAgIGNvbnN0IG5ld01lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICBpZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAgICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUXVlcnlUeXBlZCxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogdXNlckV2ZW50LmNyZWF0ZWRBdCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLmNvbnRlbnQgPz8gJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2V0TWVzc2FnZXMoY3VycmVudCA9PiBbLi4uY3VycmVudCwgW25ld01lc3NhZ2VdXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJFdmVudCAmJiB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQpIHtcbiAgICAgICAgICBjb25zdCB7IGZvcm1SZXNwb25zZUlkLCBmaWxsZWRTY2hlbWEgfSA9IHVzZXJFdmVudC5hdHRyaWJ1dGVzO1xuICAgICAgICAgIHNldE1lc3NhZ2VzKHByZXZNZXNzYWdlc1N0YXRlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1TdWJtaXR0ZWRDb250ZW50ID0gYnVpbGRGb3JtU3VibWl0dGVkRGlzcGxheUNvbnRlbnQoXG4gICAgICAgICAgICAgIHByZXZNZXNzYWdlc1N0YXRlLFxuICAgICAgICAgICAgICBmb3JtUmVzcG9uc2VJZCxcbiAgICAgICAgICAgICAgZmlsbGVkU2NoZW1hLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1VzZXJNZXNzYWdlID0gY3JlYXRlRm9ybVN1Ym1pdHRlZFVzZXJNZXNzYWdlKHVzZXJFdmVudCwgZm9ybVN1Ym1pdHRlZENvbnRlbnQpO1xuICAgICAgICAgICAgY29uc3QgdHVybnNXaXRob3V0Rm9ybSA9IHByZXZNZXNzYWdlc1N0YXRlXG4gICAgICAgICAgICAgIC5tYXAodHVybiA9PlxuICAgICAgICAgICAgICAgIHR1cm4uZmlsdGVyKG1zZyA9PiAhKG1zZy50eXBlID09PSBNZXNzYWdlVHlwZS5Gb3JtICYmIG1zZy5pZCA9PT0gZm9ybVJlc3BvbnNlSWQpKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZmlsdGVyKHR1cm4gPT4gdHVybi5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgIHJldHVybiBbLi4udHVybnNXaXRob3V0Rm9ybSwgW25ld1VzZXJNZXNzYWdlXV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzZW5kTWVzc2FnZXNUb0JhY2tlbmQoXG4gICAgICAgIGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCh7XG4gICAgICAgICAgdXNlckV2ZW50czogcGF5bG9hZEV2ZW50cyxcbiAgICAgICAgICBnZW5lcmF0aW9uUGFyYW1zOiBzZXR0aW5nc0NvbnRleHQuZ2VuZXJhdGlvblBhcmFtcyxcbiAgICAgICAgfSksXG4gICAgICApLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBpc1NlbmRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpc0luaXRpYWxpemVkKSB7XG4gICAgICBnZXRTdWdnZXN0aW9ucyhcbiAgICAgICAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICB1c2VyRXZlbnRzOiBbXSxcbiAgICAgICAgICBnZW5lcmF0aW9uUGFyYW1zOiBzZXR0aW5nc0NvbnRleHQuZ2VuZXJhdGlvblBhcmFtcyxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSwgW1xuICAgIGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCxcbiAgICBnZXRTdWdnZXN0aW9ucyxcbiAgICBpc0luaXRpYWxpemVkLFxuICAgIHNldE1lc3NhZ2VzLFxuICAgIHNlbmRNZXNzYWdlc1RvQmFja2VuZCxcbiAgICBzZXR0aW5nc0NvbnRleHQuZ2VuZXJhdGlvblBhcmFtcyxcbiAgICB1c2VyRXZlbnRzLFxuICAgIHVzZXJRdWV1ZUV2ZW50Q291bnQsXG4gICAgcHJldmlld01vZGUsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2tpcCBoeWRyYXRpb24gaW4gcHJldmlldyBtb2RlXG4gICAgaWYgKHByZXZpZXdNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIC8vIFJlaHlkcmF0ZSBhbnkgbWVzc2FnZXMgZnJvbSB0aGUgYmFja2VuZFxuICAgICAgaHlkcmF0ZU1lc3NhZ2VzKCk7XG4gICAgfVxuICB9LCBbaXNJbml0aWFsaXplZCwgaHlkcmF0ZU1lc3NhZ2VzLCBwcmV2aWV3TW9kZV0pO1xuXG4gIHJldHVybiA8U2FsZXNBZ2VudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3VuZGVmaW5lZH0+e2NoaWxkcmVufTwvU2FsZXNBZ2VudENvbnRleHQuUHJvdmlkZXI+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVNhbGVzQWdlbnQgPSAoKTogU2FsZXNBZ2VudCA9PiB7XG4gIGNvbnN0IG1lc3NhZ2VzID0gdXNlQXRvbVZhbHVlKG1lc3NhZ2VzQXRvbSk7XG4gIGNvbnN0IHN1Z2dlc3Rpb25zID0gdXNlQXRvbVZhbHVlKHN1Z2dlc3Rpb25zQXRvbSk7XG4gIGNvbnN0IHBlbmRpbmdNZXNzYWdlcyA9IHVzZUF0b21WYWx1ZSh1c2VyRXZlbnRRdWV1ZUF0b20pO1xuICBjb25zdCBpc1Jlc3BvbnNlU3RyZWFtaW5nID0gdXNlQXRvbVZhbHVlKHJlc3BvbnNlU3RyZWFtaW5nQXRvbSk7XG4gIGNvbnN0IGlzUGVuZGluZ1Jlc3BvbnNlID0gdXNlQXRvbVZhbHVlKHBlbmRpbmdSZXNwb25zZUF0b20pO1xuICBjb25zdCBpc0luaXRpYWxpemVkID0gdXNlQXRvbVZhbHVlKGluaXRpYWxpemVkQXRvbSk7XG4gIGNvbnN0IHtcbiAgICBsb2dQYWdlVmlzaXQsXG4gICAgbG9nVXNlckV2ZW50LFxuICAgIG9uU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgb25UeXBlZE1lc3NhZ2VTdWJtaXR0ZWQsXG4gICAgb25Gb3JtUmVzcG9uc2VTdWJtaXR0ZWQsXG4gIH0gPSB1c2VTYWxlc0FnZW50Q2hhdEFQSSgpO1xuXG4gIGNvbnN0IHNhbGVzQWdlbnQ6IFNhbGVzQWdlbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICBzdWdnZXN0aW9ucyxcbiAgICAgIHBlbmRpbmdNZXNzYWdlcyxcbiAgICAgIGlzSW5pdGlhbGl6ZWQsXG4gICAgICBpc1Jlc3BvbnNlU3RyZWFtaW5nLFxuICAgICAgaXNQZW5kaW5nUmVzcG9uc2UsXG4gICAgICBsb2dQYWdlVmlzaXQsXG4gICAgICBsb2dVc2VyRXZlbnQsXG4gICAgICBvblN1Z2dlc3Rpb25DbGlja2VkLFxuICAgICAgb25UeXBlZE1lc3NhZ2VTdWJtaXR0ZWQsXG4gICAgICBvbkZvcm1SZXNwb25zZVN1Ym1pdHRlZCxcbiAgICB9O1xuICB9LCBbXG4gICAgbWVzc2FnZXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgcGVuZGluZ01lc3NhZ2VzLFxuICAgIGlzSW5pdGlhbGl6ZWQsXG4gICAgaXNSZXNwb25zZVN0cmVhbWluZyxcbiAgICBpc1BlbmRpbmdSZXNwb25zZSxcbiAgICBsb2dQYWdlVmlzaXQsXG4gICAgbG9nVXNlckV2ZW50LFxuICAgIG9uU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgb25UeXBlZE1lc3NhZ2VTdWJtaXR0ZWQsXG4gICAgb25Gb3JtUmVzcG9uc2VTdWJtaXR0ZWQsXG4gIF0pO1xuICByZXR1cm4gc2FsZXNBZ2VudDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQThDQSxNQUFNLG9CQUFvQixjQUFzQyxPQUFVO0FBUTFFLE1BQWFBLHNCQUF5RCxFQUNwRSxVQUNBLGNBQWMsT0FDZCxlQUNJO0NBQ0osTUFBTSxhQUFhLGFBQWEsbUJBQW1CO0NBQ25ELE1BQU0sc0JBQXNCLGFBQWEsd0JBQXdCO0NBQ2pFLE1BQU0sMEJBQTBC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
173
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudENvbnRleHQuanMiLCJuYW1lcyI6WyJTYWxlc0FnZW50UHJvdmlkZXI6IFJlYWN0LkZDPFNhbGVzQWdlbnRQcm92aWRlclByb3BzPiIsIm5ld01lc3NhZ2U6IE1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvc2FsZXNBZ2VudENvbnRleHQvc2FsZXNBZ2VudENvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IHVzZUF0b20sIHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IFJlYWN0Tm9kZSwgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCwgU3VnZ2VzdGlvbiwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBNZXNzYWdlLCBNZXNzYWdlUm9sZSwgTWVzc2FnZVR5cGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL21lc3NhZ2UnO1xuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZWRBdG9tLFxuICBtZXNzYWdlc0F0b20sXG4gIHBlbmRpbmdSZXNwb25zZUF0b20sXG4gIHJlc3BvbnNlU3RyZWFtaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxufSBmcm9tICdzcmMvYXRvbXMvY2hhdC9jaGF0U3RhdGUnO1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1VzZXJFdmVudEF0b20sXG4gIHVzZXJFdmVudFF1ZXVlQXRvbSxcbiAgdXNlclF1ZXVlRXZlbnRDb3VudEF0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9jaGF0L21lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgeyB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQgfSBmcm9tICcuLi8uLi9ob29rcy9TeXN0ZW1TZXR0aW5nc0NvbnRleHQnO1xuaW1wb3J0IHsgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9ob29rcy9XaWRnZXRJbnRlcmFjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBTYWxlc0FnZW50Q2hhdEFQSSwgdXNlU2FsZXNBZ2VudENoYXRBUEkgfSBmcm9tICcuL2NoYXRBUEknO1xuaW1wb3J0IHtcbiAgYnVpbGRGb3JtU3VibWl0dGVkRGlzcGxheUNvbnRlbnQsXG4gIGNyZWF0ZUZvcm1TdWJtaXR0ZWRVc2VyTWVzc2FnZSxcbn0gZnJvbSAnLi9mb3JtU3VibWl0dGVkVXRpbHMnO1xuaW1wb3J0IHsgdXNlU2FsZXNBZ2VudFNlcnZpY2UgfSBmcm9tICcuL3NhbGVzQWdlbnRTZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBTYWxlc0FnZW50IGV4dGVuZHMgU2FsZXNBZ2VudENoYXRBUEkge1xuICAvLyBNZXNzYWdlcyBhcmUgdGhlIGZ1bGwgbGlzdCBvZiBhbGwgdHVybnNcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXVtdO1xuICAvLyBQZW5kaW5nIG1lc3NhZ2VzIGFyZSBtZXNzYWdlcyB0aGF0IHRoZSB1c2VyIGhhcyBjbGlja2VkL3R5cGVkIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiBzZW50IHRvIHRoZSBiYWNrZW5kLlxuICBwZW5kaW5nTWVzc2FnZXM6IFVzZXJFdmVudFtdO1xuICAvLyBTdWdnZXN0aW9ucyBhcmUgdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgdGhhdCB0aGUgdXNlciBjYW4gY2xpY2sgb24gaW4gcmVzcG9uc2UgdG8gdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2UgZnJvbSB0aGUgYmFja2VuZFxuICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdO1xuICAvLyBUcnVlIHdoaWxlIHRoZSByZXNwb25zZSBpcyBzdHJlYW1pbmcgZnJvbSB0aGUgYmFja2VuZFxuICBpc1Jlc3BvbnNlU3RyZWFtaW5nOiBib29sZWFuO1xuICAvLyBUcnVlIHdoaWxlIHRoZSByZXNwb25zZSBpcyBwZW5kaW5nIGZyb20gdGhlIGJhY2tlbmRcbiAgaXNQZW5kaW5nUmVzcG9uc2U6IGJvb2xlYW47XG4gIC8vIFRydWUgd2hlbiB0aGUgc2FsZXMgYWdlbnQgaXMgaW5pdGlhbGl6ZWRcbiAgaXNJbml0aWFsaXplZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2NrU2FsZXNBZ2VudERhdGEge1xuICBtZXNzYWdlcz86IE1lc3NhZ2VbXVtdO1xuICBzdWdnZXN0aW9ucz86IFN1Z2dlc3Rpb25bXTtcbn1cblxuY29uc3QgU2FsZXNBZ2VudENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNhbGVzQWdlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2FsZXNBZ2VudFByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBwcmV2aWV3TW9kZT86IGJvb2xlYW47XG4gIG1vY2tEYXRhPzogTW9ja1NhbGVzQWdlbnREYXRhO1xufVxuXG5leHBvcnQgY29uc3QgU2FsZXNBZ2VudFByb3ZpZGVyOiBSZWFjdC5GQzxTYWxlc0FnZW50UHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgcHJldmlld01vZGUgPSBmYWxzZSxcbiAgbW9ja0RhdGEsXG59KSA9PiB7XG4gIGNvbnN0IHVzZXJFdmVudHMgPSB1c2VBdG9tVmFsdWUodXNlckV2ZW50UXVldWVBdG9tKTtcbiAgY29uc3QgdXNlclF1ZXVlRXZlbnRDb3VudCA9IHVzZUF0b21WYWx1ZSh1c2VyUXVldWVFdmVudENvdW50QXRvbSk7XG4gIGNvbnN0IG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkID0gdXNlU2V0QXRvbShwcm9jZXNzVXNlckV2ZW50QXRvbSk7XG4gIGNvbnN0IFtpc0h5ZHJhdGVkLCBzZXRJc0h5ZHJhdGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzSW5pdGlhbGl6ZWQsIHNldElzSW5pdGlhbGl6ZWRdID0gdXNlQXRvbShpbml0aWFsaXplZEF0b20pO1xuICBjb25zdCBzZXR0aW5nc0NvbnRleHQgPSB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQoKTtcbiAgY29uc3Qgc2V0TWVzc2FnZXMgPSB1c2VTZXRBdG9tKG1lc3NhZ2VzQXRvbSk7XG4gIGNvbnN0IHNldFN1Z2dlc3Rpb25zID0gdXNlU2V0QXRvbShzdWdnZXN0aW9uc0F0b20pO1xuXG4gIGNvbnN0IHsgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLCBjcmVhdGVSZXNwb25zZVBheWxvYWQsIGdldFN1Z2dlc3Rpb25zLCBoeWRyYXRlTWVzc2FnZXMgfSA9XG4gICAgdXNlU2FsZXNBZ2VudFNlcnZpY2UoKTtcblxuICBjb25zdCBpc1NlbmRpbmdSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8vIEluaXRpYWxpemUgd2l0aCBtb2NrIGRhdGEgaW4gcHJldmlldyBtb2RlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZXZpZXdNb2RlICYmIG1vY2tEYXRhKSB7XG4gICAgICBpZiAobW9ja0RhdGEubWVzc2FnZXMpIHtcbiAgICAgICAgc2V0TWVzc2FnZXMobW9ja0RhdGEubWVzc2FnZXMpO1xuICAgICAgfVxuICAgICAgaWYgKG1vY2tEYXRhLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKG1vY2tEYXRhLnN1Z2dlc3Rpb25zKTtcbiAgICAgIH1cbiAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgfVxuICB9LCBbcHJldmlld01vZGUsIG1vY2tEYXRhLCBzZXRNZXNzYWdlcywgc2V0U3VnZ2VzdGlvbnMsIHNldElzSW5pdGlhbGl6ZWRdKTtcblxuICAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbXBsaXR1ZGUgZXZlbnRzIGFyZSBiZWluZyBlbWl0dGVkXG5cbiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHRoZSBzdHJlYW1pbmcgcmVzcG9uc2VzIHRvIGZ1bmN0aW9uXG5cbiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHRoZSBoeWRyYXRpb24gb2YgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIGJhY2tlbmQgb24gaW5pdGlhbGl6YXRpb25cbiAgY29uc3Qgc2VuZE1lc3NhZ2VzVG9CYWNrZW5kID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHJlcXVlc3RQYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGdldFN0cmVhbWluZ1Jlc3BvbnNlcyhyZXF1ZXN0UGF5bG9hZCk7XG4gICAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwZW5kaW5nIG1lc3NhZ2UgZnJvbSB0aGUgdXNlciBldmVudHNcbiAgICAgICAgcmVxdWVzdFBheWxvYWQudXNlckV2ZW50cz8ubWFwKHVzZXJFdmVudCA9PiBtYXJrVXNlckV2ZW50c1Byb2Nlc3NlZChbdXNlckV2ZW50LmV2ZW50SWRdKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBMb2dnZXIubG9nRXJyb3IoJ1tlbnZpdmUtYWldIGVycm9yIHNlbmRpbmcgbWVzc2FnZScsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtnZXRTdHJlYW1pbmdSZXNwb25zZXMsIHNldElzSW5pdGlhbGl6ZWQsIG1hcmtVc2VyRXZlbnRzUHJvY2Vzc2VkXSxcbiAgKTtcblxuICAvLyBUaGlzIGlzIHRoZSBwcmltYXJ5IGV2ZW50IGxvb3AgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCBBUElcbiAgLy8gSXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSBiYWNrZW5kXG4gIC8vIEl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgdGhlIG1lc3NhZ2VzIHRvIHRoZSBiYWNrZW5kIGFuZCByZWNlaXZpbmcgdGhlIHJlc3BvbnNlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNraXAgYmFja2VuZCBjb21tdW5pY2F0aW9uIGluIHByZXZpZXcgbW9kZVxuICAgIGlmIChwcmV2aWV3TW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBXYWl0IGZvciB0aGUgbWVzc2FnZXMgdG8gYmUgaHlkcmF0ZWQgYmVmb3JlIHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIGJhY2tlbmRcbiAgICBpZiAoIWlzSHlkcmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodXNlclF1ZXVlRXZlbnRDb3VudCA+IDAgJiYgIWlzU2VuZGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICBpc1NlbmRpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICBjb25zdCBwYXlsb2FkRXZlbnRzID0gdXNlckV2ZW50cy5zbGljZSgwLCB1c2VyUXVldWVFdmVudENvdW50KTtcblxuICAgICAgcGF5bG9hZEV2ZW50cy5mb3JFYWNoKHVzZXJFdmVudCA9PiB7XG4gICAgICAgIGlmICh1c2VyRXZlbnQgJiYgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgICAgICAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICAgICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiB1c2VyRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgY29udGVudDogdXNlckV2ZW50LmF0dHJpYnV0ZXMucXVlcnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2V0TWVzc2FnZXMoY3VycmVudCA9PiBbLi4uY3VycmVudCwgW25ld01lc3NhZ2VdXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJFdmVudCAmJiB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgICAgICAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICAgICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiB1c2VyRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgY29udGVudDogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCA/PyAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzZXRNZXNzYWdlcyhjdXJyZW50ID0+IFsuLi5jdXJyZW50LCBbbmV3TWVzc2FnZV1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlckV2ZW50ICYmIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgICAgICAgIGNvbnN0IHsgZm9ybVJlc3BvbnNlSWQsIGZpbGxlZFNjaGVtYSB9ID0gdXNlckV2ZW50LmF0dHJpYnV0ZXM7XG4gICAgICAgICAgc2V0TWVzc2FnZXMocHJldk1lc3NhZ2VzU3RhdGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybVN1Ym1pdHRlZENvbnRlbnQgPSBidWlsZEZvcm1TdWJtaXR0ZWREaXNwbGF5Q29udGVudChcbiAgICAgICAgICAgICAgcHJldk1lc3NhZ2VzU3RhdGUsXG4gICAgICAgICAgICAgIGZvcm1SZXNwb25zZUlkLFxuICAgICAgICAgICAgICBmaWxsZWRTY2hlbWEsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbmV3VXNlck1lc3NhZ2UgPSBjcmVhdGVGb3JtU3VibWl0dGVkVXNlck1lc3NhZ2UodXNlckV2ZW50LCBmb3JtU3VibWl0dGVkQ29udGVudCk7XG4gICAgICAgICAgICBjb25zdCB0dXJuc1dpdGhvdXRGb3JtID0gcHJldk1lc3NhZ2VzU3RhdGVcbiAgICAgICAgICAgICAgLm1hcCh0dXJuID0+XG4gICAgICAgICAgICAgICAgdHVybi5maWx0ZXIobXNnID0+ICEobXNnLnR5cGUgPT09IE1lc3NhZ2VUeXBlLkZvcm0gJiYgbXNnLmlkID09PSBmb3JtUmVzcG9uc2VJZCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5maWx0ZXIodHVybiA9PiB0dXJuLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgcmV0dXJuIFsuLi50dXJuc1dpdGhvdXRGb3JtLCBbbmV3VXNlck1lc3NhZ2VdXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlbmRNZXNzYWdlc1RvQmFja2VuZChcbiAgICAgICAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkRXZlbnRzLFxuICAgICAgICAgIGdlbmVyYXRpb25QYXJhbXM6IHNldHRpbmdzQ29udGV4dC5nZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICB9KSxcbiAgICAgICkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlzU2VuZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGdldFN1Z2dlc3Rpb25zKFxuICAgICAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQoe1xuICAgICAgICAgIHVzZXJFdmVudHM6IFtdLFxuICAgICAgICAgIGdlbmVyYXRpb25QYXJhbXM6IHNldHRpbmdzQ29udGV4dC5nZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9LCBbXG4gICAgaXNIeWRyYXRlZCxcbiAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gICAgZ2V0U3VnZ2VzdGlvbnMsXG4gICAgaXNJbml0aWFsaXplZCxcbiAgICBzZXRNZXNzYWdlcyxcbiAgICBzZW5kTWVzc2FnZXNUb0JhY2tlbmQsXG4gICAgc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgdXNlckV2ZW50cyxcbiAgICB1c2VyUXVldWVFdmVudENvdW50LFxuICAgIHByZXZpZXdNb2RlLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0SHlkcmF0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gU2tpcCBoeWRyYXRpb24gaW4gcHJldmlldyBtb2RlXG4gICAgICBpZiAocHJldmlld01vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzSHlkcmF0ZWQpIHtcbiAgICAgICAgLy8gUmVoeWRyYXRlIGFueSBtZXNzYWdlcyBmcm9tIHRoZSBiYWNrZW5kXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaHlkcmF0ZU1lc3NhZ2VzKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdbZW52aXZlLWFpXSBlcnJvciBoeWRyYXRpbmcgbWVzc2FnZXMnLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNIeWRyYXRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgc3RhcnRIeWRyYXRpb24oKTtcbiAgfSwgW2lzSW5pdGlhbGl6ZWQsIGh5ZHJhdGVNZXNzYWdlcywgcHJldmlld01vZGUsIGlzSHlkcmF0ZWRdKTtcblxuICByZXR1cm4gPFNhbGVzQWdlbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1bmRlZmluZWR9PntjaGlsZHJlbn08L1NhbGVzQWdlbnRDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTYWxlc0FnZW50ID0gKGNvbnRleHRXaWRnZXQ/OiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudCk6IFNhbGVzQWdlbnQgPT4ge1xuICBjb25zdCBtZXNzYWdlcyA9IHVzZUF0b21WYWx1ZShtZXNzYWdlc0F0b20pO1xuICBjb25zdCBzdWdnZXN0aW9ucyA9IHVzZUF0b21WYWx1ZShzdWdnZXN0aW9uc0F0b20pO1xuICBjb25zdCBwZW5kaW5nTWVzc2FnZXMgPSB1c2VBdG9tVmFsdWUodXNlckV2ZW50UXVldWVBdG9tKTtcbiAgY29uc3QgaXNSZXNwb25zZVN0cmVhbWluZyA9IHVzZUF0b21WYWx1ZShyZXNwb25zZVN0cmVhbWluZ0F0b20pO1xuICBjb25zdCBpc1BlbmRpbmdSZXNwb25zZSA9IHVzZUF0b21WYWx1ZShwZW5kaW5nUmVzcG9uc2VBdG9tKTtcbiAgY29uc3QgaXNJbml0aWFsaXplZCA9IHVzZUF0b21WYWx1ZShpbml0aWFsaXplZEF0b20pO1xuICBjb25zdCB7XG4gICAgbG9nUGFnZVZpc2l0LFxuICAgIGxvZ1VzZXJFdmVudCxcbiAgICBvblN1Z2dlc3Rpb25DbGlja2VkLFxuICAgIG9uVHlwZWRNZXNzYWdlU3VibWl0dGVkLFxuICAgIG9uRm9ybVJlc3BvbnNlU3VibWl0dGVkLFxuICB9ID0gdXNlU2FsZXNBZ2VudENoYXRBUEkoY29udGV4dFdpZGdldCk7XG5cbiAgY29uc3Qgc2FsZXNBZ2VudDogU2FsZXNBZ2VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlcyxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgcGVuZGluZ01lc3NhZ2VzLFxuICAgICAgaXNJbml0aWFsaXplZCxcbiAgICAgIGlzUmVzcG9uc2VTdHJlYW1pbmcsXG4gICAgICBpc1BlbmRpbmdSZXNwb25zZSxcbiAgICAgIGxvZ1BhZ2VWaXNpdCxcbiAgICAgIGxvZ1VzZXJFdmVudCxcbiAgICAgIG9uU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBvblR5cGVkTWVzc2FnZVN1Ym1pdHRlZCxcbiAgICAgIG9uRm9ybVJlc3BvbnNlU3VibWl0dGVkLFxuICAgIH07XG4gIH0sIFtcbiAgICBtZXNzYWdlcyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBwZW5kaW5nTWVzc2FnZXMsXG4gICAgaXNJbml0aWFsaXplZCxcbiAgICBpc1Jlc3BvbnNlU3RyZWFtaW5nLFxuICAgIGlzUGVuZGluZ1Jlc3BvbnNlLFxuICAgIGxvZ1BhZ2VWaXNpdCxcbiAgICBsb2dVc2VyRXZlbnQsXG4gICAgb25TdWdnZXN0aW9uQ2xpY2tlZCxcbiAgICBvblR5cGVkTWVzc2FnZVN1Ym1pdHRlZCxcbiAgICBvbkZvcm1SZXNwb25zZVN1Ym1pdHRlZCxcbiAgXSk7XG4gIHJldHVybiBzYWxlc0FnZW50O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBK0NBLE1BQU0sb0JBQW9CLGNBQXNDLE9BQVU7QUFRMUUsTUFBYUEsc0JBQXlELEVBQ3BFLFVBQ0EsY0FBYyxPQUNkLGVBQ0k7Q0FDSixNQUFNLGFBQWEsYUFBYSxtQkFBbUI7Q0FDbkQsTUFBTSxzQkFBc0IsYUFBYSx3QkFBd0I7Q0FDakUsTUFBTSwwQkFBMEIsV0FBVyxxQkFBcUI7Q0FDaEUsTUFBTSxDQUFDLFlBQVksaUJBQWlCLFNBQVMsTUFBTTtDQUNuRCxNQUFNLENBQUMsZUFBZSxvQkFBb0IsUUFBUSxnQkFBZ0I7Q0FDbEUsTUFBTSxrQkFBa0IsMEJBQTBCO0NBQ2xELE1BQU0sY0FBYyxXQUFXLGFBQWE7Q0FDNUMsTUFBTSxpQkFBaUIsV0FBVyxnQkFBZ0I7Q0FFbEQsTUFBTSxFQUFFLHVCQUF1Qix1QkFBdUIsZ0JBQWdCLG9CQUNwRSxzQkFBc0I7Q0FFeEIsTUFBTSxlQUFlLE9BQU8sTUFBTTtBQUdsQyxpQkFB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
@@ -10,11 +10,11 @@ const require_variant = require('../../atoms/app/variant.cjs');
10
10
  const require_atoms_app_index = require('../../atoms/app/index.cjs');
11
11
  const require_application_commerce_api = require('../../application/commerce-api.cjs');
12
12
  const require_useMessageInterceptor = require('../../interceptors/useMessageInterceptor.cjs');
13
- const require_atoms_chat_chatState = require('../../atoms/chat/chatState.cjs');
14
13
  const require_featureFlagServiceContext = require('../featureFlagServiceContext/featureFlagServiceContext.cjs');
15
14
  const require_amplitudeContext = require('../amplitudeContext/amplitudeContext.cjs');
16
15
  require('../amplitudeContext/index.cjs');
17
16
  require('../featureFlagServiceContext/index.cjs');
17
+ const require_atoms_chat_chatState = require('../../atoms/chat/chatState.cjs');
18
18
  const require_statusCodeError = require('./statusCodeError.cjs');
19
19
  let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
20
20
  let react = require("react");
@@ -109,7 +109,12 @@ const processStreamingResponse = async (stream, messageInterceptor, setMessages,
109
109
  if (!response) throw new Error("No response from stream");
110
110
  const message = require_messageFromResponse.messageFromResponse(response);
111
111
  if (!message) throw new Error("Failed to transform API response to client message");
112
- if (message.type === require_message.MessageType.Product) responseAnalytics["chat.product_cards_returned"] = (responseAnalytics["chat.product_cards_returned"] || 0) + 1;
112
+ if (message.type === require_message.MessageType.Product) {
113
+ responseAnalytics["chat.product_cards_returned"] = (responseAnalytics["chat.product_cards_returned"] || 0) + 1;
114
+ const productIds = responseAnalytics["chat.product_ids_returned"];
115
+ if (!productIds) responseAnalytics["chat.product_ids_returned"] = [message.metadata.id];
116
+ else productIds.push(message.metadata.id);
117
+ }
113
118
  if (message.type === require_message.MessageType.Review) responseAnalytics["chat.review_cards_returned"] = (responseAnalytics["chat.review_cards_returned"] || 0) + 1;
114
119
  lastMessage = updateMessageState(message, lastMessage, setMessages);
115
120
  } catch (error) {
@@ -201,7 +206,7 @@ const useSalesAgentService = () => {
201
206
  }, [setSuggestions]),
202
207
  hydrateMessages: (0, react.useCallback)(async () => {
203
208
  const { orgId, chatId, userId } = context;
204
- const { messages: existingMessages, userEvents } = await require_application_commerce_api.default.getResponses(orgId, chatId, userId);
209
+ const { messages: existingMessages } = await require_application_commerce_api.default.getResponses(orgId, chatId, userId);
205
210
  setMessages([...existingMessages]);
206
211
  }, [context, setMessages])
207
212
  };
@@ -209,4 +214,4 @@ const useSalesAgentService = () => {
209
214
 
210
215
  //#endregion
211
216
  exports.useSalesAgentService = useSalesAgentService;
212
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudFNlcnZpY2UuY2pzIiwibmFtZXMiOlsiVXNlckV2ZW50Q2F0ZWdvcnkiLCJTdGF0dXNDb2RlRXJyb3IiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwibGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiIsIm1lc3NhZ2VGcm9tUmVzcG9uc2UiLCJlcnJvcjogdW5rbm93biIsInVzZVNhbGVzQWdlbnRTZXJ2aWNlOiAoKSA9PiBTYWxlc0FnZW50U2VydmljZSIsInJlcXVlc3RGYWlsdXJlQXRvbSIsIm1lc3NhZ2VzQXRvbSIsInN1Z2dlc3Rpb25zQXRvbSIsInBlbmRpbmdSZXNwb25zZUF0b20iLCJyZXNwb25zZVN0cmVhbWluZ0F0b20iLCJhbmFseXRpY3NDb250ZXh0QXRvbSIsInVzZU1lc3NhZ2VJbnRlcmNlcHRvciIsInVzZUFtcGxpdHVkZSIsInVzZUZlYXR1cmVGbGFnU2VydmljZSIsImFwcERldGFpbHNBdG9tIiwic3VjY2Vzc2Z1bFJlc3BvbnNlOiBib29sZWFuIHwgdW5kZWZpbmVkIiwiQ29tbWVyY2VBcGlDbGllbnQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQiLCJTcGlmZnlNZXRyaWNzRXZlbnROYW1lIiwiRW52aXZlTWV0cmljc0V2ZW50TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9zYWxlc0FnZW50Q29udGV4dC9zYWxlc0FnZW50U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VBdG9tVmFsdWUsIHVzZVNldEF0b20gfSBmcm9tICdqb3RhaSc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBDb21tZXJjZUFwaUNsaWVudCBmcm9tICdzcmMvYXBwbGljYXRpb24vY29tbWVyY2UtYXBpJztcbmltcG9ydCB7IGFwcERldGFpbHNBdG9tIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQge1xuICBHZW5lcmF0aW9uUGFyYW1zLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlUm9sZSxcbiAgTWVzc2FnZVR5cGUsXG4gIE5leHRNZXNzYWdlUmVxdWVzdCxcbiAgUmVzcG9uc2UsXG4gIFVzZXJFdmVudCxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBtZXNzYWdlRnJvbVJlc3BvbnNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzJztcbmltcG9ydCB7XG4gIG1lc3NhZ2VzQXRvbSxcbiAgcGVuZGluZ1Jlc3BvbnNlQXRvbSxcbiAgcmVxdWVzdEZhaWx1cmVBdG9tLFxuICByZXNwb25zZVN0cmVhbWluZ0F0b20sXG4gIHN1Z2dlc3Rpb25zQXRvbSxcbn0gZnJvbSAnc3JjL2F0b21zL2NoYXQvY2hhdFN0YXRlJztcbmltcG9ydCB7IHVzZU1lc3NhZ2VJbnRlcmNlcHRvciB9IGZyb20gJ3NyYy9pbnRlcmNlcHRvcnMvdXNlTWVzc2FnZUludGVyY2VwdG9yJztcbmltcG9ydCB7IHVzZUFtcGxpdHVkZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9hbXBsaXR1ZGVDb250ZXh0JztcbmltcG9ydCB7XG4gIEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG59IGZyb20gJ3NyYy9zZXJ2aWNlcy9hbXBsaXR1ZGVTZXJ2aWNlL2FtcGxpdHVkZVNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgYW5hbHl0aWNzQ29udGV4dEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuXG5pbXBvcnQgeyBTdGF0dXNDb2RlRXJyb3IgfSBmcm9tICcuL3N0YXR1c0NvZGVFcnJvcic7XG5cbmludGVyZmFjZSBTYWxlc0FnZW50U2VydmljZSB7XG4gIGNyZWF0ZVJlc3BvbnNlUGF5bG9hZDogKHBheWxvYWQ6IHtcbiAgICB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXTtcbiAgICBnZW5lcmF0aW9uUGFyYW1zPzogR2VuZXJhdGlvblBhcmFtcztcbiAgfSkgPT4gTmV4dE1lc3NhZ2VSZXF1ZXN0O1xuICBnZXRTdHJlYW1pbmdSZXNwb25zZXM6IChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IFByb21pc2U8dm9pZD47XG4gIGdldFN1Z2dlc3Rpb25zOiAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KSA9PiBQcm9taXNlPHZvaWQ+O1xuICBoeWRyYXRlTWVzc2FnZXM6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmNvbnN0IGlucHV0UHJvcHNUb1RyYWNraW5nUHJvcHMgPSAoXG4gIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgW3VzZXJFdmVudF0gPSBwYXlsb2FkLnVzZXJFdmVudHMgfHwgW107XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VfaWQ6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgdXNlcl9ldmVudF90eXBlOiAnc3VnZ2VzdGlvbl9jbGlja2VkJyxcbiAgICAgIHVzZXJfcXVlcnk6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLmNvbnRlbnQsXG4gICAgfTtcbiAgfVxuICBpZiAodXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VfaWQ6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgdXNlcl9ldmVudF90eXBlOiAncXVlcnlfdHlwZWQnLFxuICAgICAgdXNlcl9xdWVyeTogdXNlckV2ZW50LmF0dHJpYnV0ZXMucXVlcnksXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge307XG59O1xuXG5jb25zdCBpbnB1dFByb3BzVG9FbnZpdmVUcmFja2luZ1Byb3BzID0gKFxuICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IFt1c2VyRXZlbnRdID0gcGF5bG9hZC51c2VyRXZlbnRzIHx8IFtdO1xuICBpZiAodXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICAnY2hhdC5yZXF1ZXN0X3R5cGUnOiAnc3VnZ2VzdGlvbicsXG4gICAgICAnY2hhdC5yZXF1ZXN0X2lkJzogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAnY2hhdC5yZXF1ZXN0X3RleHQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy5jb250ZW50LFxuICAgICAgJ2NoYXQuc3VnZ2VzdGlvbl9pZCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnN1Z2dlc3Rpb25JZCxcbiAgICAgICdjaGF0LnVzZXJfdHlwZWQnOiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2NoYXQucmVxdWVzdF90eXBlJzogJ3RleHQnLFxuICAgICAgJ2NoYXQucmVxdWVzdF9pZCc6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgJ2NoYXQucmVxdWVzdF90ZXh0JzogdXNlckV2ZW50LmF0dHJpYnV0ZXMucXVlcnksXG4gICAgICAnY2hhdC51c2VyX3R5cGVkJzogdXNlckV2ZW50LmF0dHJpYnV0ZXMudXNlclR5cGVkLFxuICAgIH07XG4gIH1cbiAgaWYgKFxuICAgIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGFnZVZpc2l0IHx8XG4gICAgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QZHBWaXNpdCB8fFxuICAgIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXRcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjaGF0LnJlcXVlc3RfaWQnOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICdjaGF0LnJlcXVlc3RfdHlwZSc6ICdwYWdlX3Zpc2l0JyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5UGFyYW0gPSAoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIHJldHVybiB1cmxPYmouc2VhcmNoUGFyYW1zLmdldChrZXkpO1xufTtcblxuY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKF9lcnJvcjogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGlmIChfZXJyb3IgaW5zdGFuY2VvZiBTdGF0dXNDb2RlRXJyb3IpIHtcbiAgICBpZiAoX2Vycm9yLnN0YXR1c0NvZGUgPT09IDQyMykge1xuICAgICAgcmV0dXJuICdEdWUgdG8gdmlvbGF0aW9uIG9mIHRlcm1zIGFuZCBzZXJ2aWNlcywgdGhpcyBzZXNzaW9uIGhhcyBiZWVuIHRlcm1pbmF0ZWQuJztcbiAgICB9XG4gICAgLy8gS2VlcGluZyB0aGUgNDI5IGVycm9yIG1lc3NhZ2VzIGFzIHRoZSBnZW5lcmljIGVycm9yIG1lc3NhZ2UgZm9yIG5vdy5cbiAgICAvLyBpZiAoX2Vycm9yLnN0YXR1c0NvZGUgPT09IDQyOSkge1xuICAgIC8vICAgcmV0dXJuIFwiSSdtIHNvcnJ5ISBUaGUgc3lzdGVtIGlzIGJ1c3kgcmlnaHQgbm93LiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgZmV3IG1pbnV0ZXMuXCI7XG4gICAgLy8gfVxuICB9XG5cbiAgcmV0dXJuIFwiSSdtIHNvcnJ5ISBJJ20gaGF2aW5nIHRyb3VibGUgcmlnaHQgbm93LiBQbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBvciB0cnkgYWdhaW4gaW4gYSBtb21lbnQuXCI7XG59O1xuXG5jb25zdCBoYW5kbGVTdHJlYW1pbmdFcnJvciA9IChcbiAgX2Vycm9yOiB1bmtub3duLFxuICBzZXRSZXF1ZXN0RmFpbHVyZTogKGZhaWxlZDogYm9vbGVhbikgPT4gdm9pZCxcbiAgc2V0TWVzc2FnZXM6ICh1cGRhdGVyOiAocHJldjogTWVzc2FnZVtdW10pID0+IE1lc3NhZ2VbXVtdKSA9PiB2b2lkLFxuKSA9PiB7XG4gIHNldFJlcXVlc3RGYWlsdXJlKHRydWUpO1xuXG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShfZXJyb3IpO1xuICBzZXRNZXNzYWdlcyhwcmV2ID0+IFtcbiAgICAuLi5wcmV2LFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgICB0eXBlOiBNZXNzYWdlVHlwZS5UZXh0LFxuICAgICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBjb250ZW50OiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gIF0pO1xufTtcblxuY29uc3QgdXBkYXRlTWVzc2FnZVN0YXRlID0gKFxuICBtZXNzYWdlOiBNZXNzYWdlLFxuICBsYXN0TWVzc2FnZTogTWVzc2FnZSxcbiAgc2V0TWVzc2FnZXM6ICh1cGRhdGVyOiAocHJldjogTWVzc2FnZVtdW10pID0+IE1lc3NhZ2VbXVtdKSA9PiB2b2lkLFxuKTogTWVzc2FnZSA9PiB7XG4gIGlmIChsYXN0TWVzc2FnZSA9PSBudWxsKSB7XG4gICAgc2V0TWVzc2FnZXMocHJldiA9PiBbLi4ucHJldiwgW21lc3NhZ2VdXSk7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cbiAgaWYgKGxhc3RNZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlRleHQgJiYgbWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5UZXh0KSB7XG4gICAgY29uc3QgbmV3TWVzc2FnZSA9IHtcbiAgICAgIC4uLmxhc3RNZXNzYWdlLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ubGFzdE1lc3NhZ2UubWV0YWRhdGEsXG4gICAgICAgIGNvbnRlbnQ6IGxhc3RNZXNzYWdlLm1ldGFkYXRhLmNvbnRlbnQgKyBtZXNzYWdlLm1ldGFkYXRhLmNvbnRlbnQsXG4gICAgICB9LFxuICAgIH07XG4gICAgc2V0TWVzc2FnZXMocHJldiA9PiB7XG4gICAgICBjb25zdCBsYXN0VHVybiA9IHByZXZbcHJldi5sZW5ndGggLSAxXTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLnByZXYuc2xpY2UoMCwgcHJldi5sZW5ndGggLSAxKSxcbiAgICAgICAgWy4uLmxhc3RUdXJuLnNsaWNlKDAsIGxhc3RUdXJuLmxlbmd0aCAtIDEpLCBuZXdNZXNzYWdlXSxcbiAgICAgIF07XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld01lc3NhZ2U7XG4gIH1cbiAgc2V0TWVzc2FnZXMocHJldiA9PiBbLi4ucHJldi5zbGljZSgwLCBwcmV2Lmxlbmd0aCAtIDEpLCBbLi4ucHJldltwcmV2Lmxlbmd0aCAtIDFdLCBtZXNzYWdlXV0pO1xuICByZXR1cm4gbWVzc2FnZTtcbn07XG5cbmNvbnN0IHByb2Nlc3NTdHJlYW1pbmdSZXNwb25zZSA9IGFzeW5jIChcbiAgc3RyZWFtOiBBc3luY0l0ZXJhYmxlPFJlc3BvbnNlPixcbiAgbWVzc2FnZUludGVyY2VwdG9yOiB7IGludGVyY2VwdDogKHJlc3BvbnNlPzogUmVzcG9uc2UpID0+IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgc2V0TWVzc2FnZXM6ICh1cGRhdGVyOiAocHJldjogTWVzc2FnZVtdW10pID0+IE1lc3NhZ2VbXVtdKSA9PiB2b2lkLFxuICBzZXRSZXNwb25zZVN0cmVhbWluZzogKHJlc3BvbnNlU3RyZWFtaW5nOiBib29sZWFuKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PiA9PiB7XG4gIGxldCBsYXN0TWVzc2FnZTogTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgc2V0UmVzcG9uc2VTdHJlYW1pbmcodHJ1ZSk7XG4gIGNvbnN0IHJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbiAgZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBzdHJlYW0pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKG1lc3NhZ2VJbnRlcmNlcHRvci5pbnRlcmNlcHQocmVzcG9uc2UpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlc3BvbnNlIGZyb20gc3RyZWFtJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB0cmFuc2Zvcm0gQVBJIHJlc3BvbnNlIHRvIGNsaWVudCBtZXNzYWdlJyk7XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0KSB7XG4gICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSA9XG4gICAgICAgICAgKHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSB8fCAwKSArIDE7XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5SZXZpZXcpIHtcbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucmV2aWV3X2NhcmRzX3JldHVybmVkJ10gPVxuICAgICAgICAgIChyZXNwb25zZUFuYWx5dGljc1snY2hhdC5yZXZpZXdfY2FyZHNfcmV0dXJuZWQnXSB8fCAwKSArIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIHN1cHBvcnQgZm9yIENoYXRTZWFyY2ggbWVzc2FnZXMgYXQgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIC8vIFBlcmhhcHMgd2UgYWRkIHN1cHBvcnQgYmFjayBpbiB0aGUgZnV0dXJlXG4gICAgICAvLyBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgICAvLyAgIGhhbmRsZVNlYXJjaFJlc3VsdHMobWVzc2FnZSk7XG4gICAgICAvLyAgIGhhc1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgICAgLy8gICBzZXRTZWFyY2hJc0xvYWRpbmcoZmFsc2UpOyAvLyBVcGRhdGUgc2VhcmNoIGxvYWRpbmcgaW1tZWRpYXRlbHkgd2hlbiByZXN1bHRzIGFyZSBkZXRlY3RlZFxuICAgICAgLy8gfVxuXG4gICAgICBsYXN0TWVzc2FnZSA9IHVwZGF0ZU1lc3NhZ2VTdGF0ZShtZXNzYWdlLCBsYXN0TWVzc2FnZSEsIHNldE1lc3NhZ2VzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ1dhcm4oYFtzcGlmZnktYWldIEZhaWxlZCB0byBnZW5lcmF0ZSByZXNwb25zZXMgZnJvbSBzdHJlYW1gLCBlcnJvciwge1xuICAgICAgICBsYXN0UmVzcG9uc2U6IGxhc3RNZXNzYWdlLFxuICAgICAgICByZXNwb25zZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRSZXNwb25zZVN0cmVhbWluZyhmYWxzZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlQW5hbHl0aWNzO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVNhbGVzQWdlbnRTZXJ2aWNlOiAoKSA9PiBTYWxlc0FnZW50U2VydmljZSA9ICgpID0+IHtcbiAgY29uc3Qgc2V0UmVxdWVzdEZhaWx1cmUgPSB1c2VTZXRBdG9tKHJlcXVlc3RGYWlsdXJlQXRvbSk7XG4gIGNvbnN0IHNldE1lc3NhZ2VzID0gdXNlU2V0QXRvbShtZXNzYWdlc0F0b20pO1xuICBjb25zdCBzZXRTdWdnZXN0aW9ucyA9IHVzZVNldEF0b20oc3VnZ2VzdGlvbnNBdG9tKTtcbiAgY29uc3Qgc2V0UGVuZGluZ1Jlc3BvbnNlID0gdXNlU2V0QXRvbShwZW5kaW5nUmVzcG9uc2VBdG9tKTtcbiAgY29uc3Qgc2V0UmVzcG9uc2VTdHJlYW1pbmcgPSB1c2VTZXRBdG9tKHJlc3BvbnNlU3RyZWFtaW5nQXRvbSk7XG4gIGNvbnN0IGFuYWx5dGljc0NvbnRleHQgPSB1c2VBdG9tVmFsdWUoYW5hbHl0aWNzQ29udGV4dEF0b20pO1xuICBjb25zdCBtZXNzYWdlSW50ZXJjZXB0b3IgPSB1c2VNZXNzYWdlSW50ZXJjZXB0b3IoKTtcbiAgY29uc3QgeyB0cmFja0V2ZW50IH0gPSB1c2VBbXBsaXR1ZGUoKTtcblxuICBjb25zdCBmZWF0dXJlRmxhZ1NlcnZpY2UgPSB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UoKTtcbiAgY29uc3QgY29udGV4dCA9IHVzZUF0b21WYWx1ZShhcHBEZXRhaWxzQXRvbSk7XG5cbiAgY29uc3QgY3JlYXRlUmVzcG9uc2VQYXlsb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHtcbiAgICAgIHVzZXJFdmVudHMsXG4gICAgICBnZW5lcmF0aW9uUGFyYW1zLFxuICAgIH06IHtcbiAgICAgIHVzZXJFdmVudHM6IFVzZXJFdmVudFtdO1xuICAgICAgZ2VuZXJhdGlvblBhcmFtcz86IEdlbmVyYXRpb25QYXJhbXM7XG4gICAgfSk6IE5leHRNZXNzYWdlUmVxdWVzdCA9PiB7XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ3MgPSBmZWF0dXJlRmxhZ1NlcnZpY2U/LmZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge307XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRlQ29uZmlnVmVyc2lvbiA9XG4gICAgICAgIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICAgIGdldFF1ZXJ5UGFyYW0oJ2Vudml2ZV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG92ZXJyaWRlTW9kZWxEYXRldGltZSA9IGdldFF1ZXJ5UGFyYW0oJ292ZXJyaWRlX21vZGVsX2RhdGV0aW1lJykgfHwgdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgdXNlckV2ZW50cyxcbiAgICAgICAgZmVhdHVyZUZsYWdzLFxuICAgICAgICBnZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICBvdmVycmlkZUNvbmZpZ1ZlcnNpb24sXG4gICAgICAgIG92ZXJyaWRlTW9kZWxEYXRldGltZSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBbY29udGV4dCwgZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2VdLFxuICApO1xuXG4gIGNvbnN0IGdldFN0cmVhbWluZ1Jlc3BvbnNlcyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICBsZXQgc3VjY2Vzc2Z1bFJlc3BvbnNlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgc2V0UGVuZGluZ1Jlc3BvbnNlKHRydWUpO1xuICAgICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgICAgY29uc3Qgc3RyZWFtID0gQ29tbWVyY2VBcGlDbGllbnQuZ2V0TmV4dFJlc3BvbnNlU3RyZWFtaW5nKHBheWxvYWQpO1xuICAgICAgbGV0IHJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFJlcXVlc3RGYWlsdXJlKGZhbHNlKTtcblxuICAgICAgICByZXNwb25zZUFuYWx5dGljcyA9IGF3YWl0IHByb2Nlc3NTdHJlYW1pbmdSZXNwb25zZShcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgbWVzc2FnZUludGVyY2VwdG9yLFxuICAgICAgICAgIHNldE1lc3NhZ2VzLFxuICAgICAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nLFxuICAgICAgICApO1xuICAgICAgICBzdWNjZXNzZnVsUmVzcG9uc2UgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciB0aGUgQ2hyb21lIEV4dGVuc2lvbiBjb21tdW5pY2F0aW9uXG4gICAgICAgIC8vIGF3YWl0IGxvZ0J1bmRsZUV2ZW50KHtcbiAgICAgICAgLy8gICBsZXZlbDogJ2luZm8nLFxuICAgICAgICAvLyAgIGV2ZW50OiAnTkVYVF9SRVNQT05TRV9TVUNDRVNTJyxcbiAgICAgICAgLy8gICBjb250ZXh0OiB7XG4gICAgICAgIC8vICAgICB0eXBlOiAnbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgZW5kcG9pbnQ6ICcvdjEvbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICAvLyAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBnZXR0aW5nIHN0cmVhbWluZyByZXNwb25zZXMnLCBlKTtcbiAgICAgICAgc3VjY2Vzc2Z1bFJlc3BvbnNlID0gZmFsc2U7XG4gICAgICAgIC8vIExvZyBmYWlsZWQgbmV4dF9yZXNwb25zZXMgY2FsbFxuICAgICAgICAvLyBjb25zdCByZXNwb25zZVRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICAvLyBhd2FpdCBsb2dCdW5kbGVFdmVudCh7XG4gICAgICAgIC8vICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIC8vICAgZXZlbnQ6ICdORVhUX1JFU1BPTlNFX0ZBSUxFRCcsXG4gICAgICAgIC8vICAgbWVzc2FnZTogYEZhaWxlZCB0byBnZXQgc3RyZWFtaW5nIHJlc3BvbnNlOiAke2V9YCxcbiAgICAgICAgLy8gICBjb250ZXh0OiB7XG4gICAgICAgIC8vICAgICB0eXBlOiAnbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgZW5kcG9pbnQ6ICcvdjEvbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgICAvLyAgICAgZXJyb3I6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyB9KTtcblxuICAgICAgICBoYW5kbGVTdHJlYW1pbmdFcnJvcihlLCBzZXRSZXF1ZXN0RmFpbHVyZSwgc2V0TWVzc2FnZXMpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gTG9nIG5leHRfcmVzcG9uc2VzIGNhbGxcbiAgICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRBc3Npc3RhbnRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICByZXNwb25zZVRpbWVNczogcmVzcG9uc2VUaW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBzdWNjZXNzZnVsX3Jlc3BvbnNlOiBzdWNjZXNzZnVsUmVzcG9uc2UsXG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzVG9UcmFja2luZ1Byb3BzKHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuQ2hhdFJlc3BvbnNlLFxuICAgICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICAgIC4uLmFuYWx5dGljc0NvbnRleHQsXG4gICAgICAgICAgICAnY2hhdC5yZXNwb25zZV90aW1lX21zJzogcmVzcG9uc2VUaW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzVG9FbnZpdmVUcmFja2luZ1Byb3BzKHBheWxvYWQpLFxuICAgICAgICAgICAgLi4ucmVzcG9uc2VBbmFseXRpY3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFBlbmRpbmdSZXNwb25zZShmYWxzZSk7XG4gICAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nKGZhbHNlKTtcbiAgICAgICAgLy8gbG9nUGVyZk1ldHJpYyhQZXJmTWV0cmljc0V2ZW50cy5GaXJzdFJlc3BvbnNlQ29tcGxldGVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFuYWx5dGljc0NvbnRleHQsXG4gICAgICB0cmFja0V2ZW50LFxuICAgICAgc2V0UmVzcG9uc2VTdHJlYW1pbmcsXG4gICAgICAvLyBsb2dQZXJmTWV0cmljLFxuICAgICAgc2V0UmVxdWVzdEZhaWx1cmUsXG4gICAgICBzZXRTdWdnZXN0aW9ucyxcbiAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgIHNldE1lc3NhZ2VzLFxuICAgICAgc2V0UGVuZGluZ1Jlc3BvbnNlLFxuICAgIF0sXG4gICk7XG5cbiAgY29uc3QgZ2V0U3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBuZXdTdWdnZXN0aW9ucyA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRTdWdnZXN0aW9ucyhwYXlsb2FkKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKG5ld1N1Z2dlc3Rpb25zKTtcbiAgICB9LFxuICAgIFtzZXRTdWdnZXN0aW9uc10sXG4gICk7XG5cbiAgY29uc3QgaHlkcmF0ZU1lc3NhZ2VzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgb3JnSWQsIGNoYXRJZCwgdXNlcklkIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgbWVzc2FnZXM6IGV4aXN0aW5nTWVzc2FnZXMsIHVzZXJFdmVudHMgfSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldFJlc3BvbnNlcyhcbiAgICAgIG9yZ0lkLFxuICAgICAgY2hhdElkLFxuICAgICAgdXNlcklkLFxuICAgICk7XG4gICAgc2V0TWVzc2FnZXMoWy4uLmV4aXN0aW5nTWVzc2FnZXNdKTtcbiAgfSwgW2NvbnRleHQsIHNldE1lc3NhZ2VzXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gICAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLFxuICAgIGdldFN1Z2dlc3Rpb25zLFxuICAgIGh5ZHJhdGVNZXNzYWdlcyxcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZDQSxNQUFNLDZCQUNKLFlBQ3dDO0NBQ3hDLE1BQU0sQ0FBQyxhQUFhLFFBQVEsY0FBYyxFQUFFO0FBQzVDLEtBQUksVUFBVSxhQUFhQSxrREFBa0Isa0JBQzNDLFFBQU87RUFDTCxZQUFZLFVBQVU7RUFDdEIsaUJBQWlCO0VBQ2pCLFlBQVksVUFBVSxXQUFXO0VB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
217
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudFNlcnZpY2UuY2pzIiwibmFtZXMiOlsiVXNlckV2ZW50Q2F0ZWdvcnkiLCJTdGF0dXNDb2RlRXJyb3IiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwibGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+IiwibWVzc2FnZUZyb21SZXNwb25zZSIsImVycm9yOiB1bmtub3duIiwidXNlU2FsZXNBZ2VudFNlcnZpY2U6ICgpID0+IFNhbGVzQWdlbnRTZXJ2aWNlIiwicmVxdWVzdEZhaWx1cmVBdG9tIiwibWVzc2FnZXNBdG9tIiwic3VnZ2VzdGlvbnNBdG9tIiwicGVuZGluZ1Jlc3BvbnNlQXRvbSIsInJlc3BvbnNlU3RyZWFtaW5nQXRvbSIsImFuYWx5dGljc0NvbnRleHRBdG9tIiwidXNlTWVzc2FnZUludGVyY2VwdG9yIiwidXNlQW1wbGl0dWRlIiwidXNlRmVhdHVyZUZsYWdTZXJ2aWNlIiwiYXBwRGV0YWlsc0F0b20iLCJzdWNjZXNzZnVsUmVzcG9uc2U6IGJvb2xlYW4gfCB1bmRlZmluZWQiLCJDb21tZXJjZUFwaUNsaWVudCIsInJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCIsIlNwaWZmeU1ldHJpY3NFdmVudE5hbWUiLCJFbnZpdmVNZXRyaWNzRXZlbnROYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL3NhbGVzQWdlbnRDb250ZXh0L3NhbGVzQWdlbnRTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgR2VuZXJhdGlvblBhcmFtcyxcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIFJlc3BvbnNlLFxuICBVc2VyRXZlbnQsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgbWVzc2FnZUZyb21RdWVyeUV2ZW50LCBtZXNzYWdlRnJvbVJlc3BvbnNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzJztcbmltcG9ydCB7IGFwcERldGFpbHNBdG9tIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7XG5pbXBvcnQgeyBhbmFseXRpY3NDb250ZXh0QXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9hcHAvdmFyaWFudCc7XG5pbXBvcnQge1xuICBtZXNzYWdlc0F0b20sXG4gIHBlbmRpbmdSZXNwb25zZUF0b20sXG4gIHJlcXVlc3RGYWlsdXJlQXRvbSxcbiAgcmVzcG9uc2VTdHJlYW1pbmdBdG9tLFxuICBzdWdnZXN0aW9uc0F0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9jaGF0L2NoYXRTdGF0ZSc7XG5pbXBvcnQgeyB1c2VBbXBsaXR1ZGUgfSBmcm9tICdzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VNZXNzYWdlSW50ZXJjZXB0b3IgfSBmcm9tICdzcmMvaW50ZXJjZXB0b3JzL3VzZU1lc3NhZ2VJbnRlcmNlcHRvcic7XG5pbXBvcnQge1xuICBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxufSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgU3RhdHVzQ29kZUVycm9yIH0gZnJvbSAnLi9zdGF0dXNDb2RlRXJyb3InO1xuXG5pbnRlcmZhY2UgU2FsZXNBZ2VudFNlcnZpY2Uge1xuICBjcmVhdGVSZXNwb25zZVBheWxvYWQ6IChwYXlsb2FkOiB7XG4gICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgZ2VuZXJhdGlvblBhcmFtcz86IEdlbmVyYXRpb25QYXJhbXM7XG4gIH0pID0+IE5leHRNZXNzYWdlUmVxdWVzdDtcbiAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzOiAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdWdnZXN0aW9uczogKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgaHlkcmF0ZU1lc3NhZ2VzOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jb25zdCBpbnB1dFByb3BzVG9UcmFja2luZ1Byb3BzID0gKFxuICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IFt1c2VyRXZlbnRdID0gcGF5bG9hZC51c2VyRXZlbnRzIHx8IFtdO1xuICBpZiAodXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlX2lkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgIHVzZXJfZXZlbnRfdHlwZTogJ3N1Z2dlc3Rpb25fY2xpY2tlZCcsXG4gICAgICB1c2VyX3F1ZXJ5OiB1c2VyRXZlbnQuYXR0cmlidXRlcy5jb250ZW50LFxuICAgIH07XG4gIH1cbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlX2lkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgIHVzZXJfZXZlbnRfdHlwZTogJ3F1ZXJ5X3R5cGVkJyxcbiAgICAgIHVzZXJfcXVlcnk6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuY29uc3QgaW5wdXRQcm9wc1RvRW52aXZlVHJhY2tpbmdQcm9wcyA9IChcbiAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBbdXNlckV2ZW50XSA9IHBheWxvYWQudXNlckV2ZW50cyB8fCBbXTtcbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2NoYXQucmVxdWVzdF90eXBlJzogJ3N1Z2dlc3Rpb24nLFxuICAgICAgJ2NoYXQucmVxdWVzdF9pZCc6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgJ2NoYXQucmVxdWVzdF90ZXh0JzogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCxcbiAgICAgICdjaGF0LnN1Z2dlc3Rpb25faWQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy5zdWdnZXN0aW9uSWQsXG4gICAgICAnY2hhdC51c2VyX3R5cGVkJzogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBpZiAodXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjaGF0LnJlcXVlc3RfdHlwZSc6ICd0ZXh0JyxcbiAgICAgICdjaGF0LnJlcXVlc3RfaWQnOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICdjaGF0LnJlcXVlc3RfdGV4dCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgJ2NoYXQudXNlcl90eXBlZCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnVzZXJUeXBlZCxcbiAgICB9O1xuICB9XG4gIGlmIChcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBhZ2VWaXNpdCB8fFxuICAgIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgfHxcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBscFZpc2l0XG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICAnY2hhdC5yZXF1ZXN0X2lkJzogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAnY2hhdC5yZXF1ZXN0X3R5cGUnOiAncGFnZV92aXNpdCcsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtID0gKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICByZXR1cm4gdXJsT2JqLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbn07XG5cbmNvbnN0IGdldEVycm9yTWVzc2FnZSA9IChfZXJyb3I6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICBpZiAoX2Vycm9yIGluc3RhbmNlb2YgU3RhdHVzQ29kZUVycm9yKSB7XG4gICAgaWYgKF9lcnJvci5zdGF0dXNDb2RlID09PSA0MjMpIHtcbiAgICAgIHJldHVybiAnRHVlIHRvIHZpb2xhdGlvbiBvZiB0ZXJtcyBhbmQgc2VydmljZXMsIHRoaXMgc2Vzc2lvbiBoYXMgYmVlbiB0ZXJtaW5hdGVkLic7XG4gICAgfVxuICAgIC8vIEtlZXBpbmcgdGhlIDQyOSBlcnJvciBtZXNzYWdlcyBhcyB0aGUgZ2VuZXJpYyBlcnJvciBtZXNzYWdlIGZvciBub3cuXG4gICAgLy8gaWYgKF9lcnJvci5zdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAvLyAgIHJldHVybiBcIkknbSBzb3JyeSEgVGhlIHN5c3RlbSBpcyBidXN5IHJpZ2h0IG5vdy4gUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIGZldyBtaW51dGVzLlwiO1xuICAgIC8vIH1cbiAgfVxuXG4gIHJldHVybiBcIkknbSBzb3JyeSEgSSdtIGhhdmluZyB0cm91YmxlIHJpZ2h0IG5vdy4gUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2Ugb3IgdHJ5IGFnYWluIGluIGEgbW9tZW50LlwiO1xufTtcblxuY29uc3QgaGFuZGxlU3RyZWFtaW5nRXJyb3IgPSAoXG4gIF9lcnJvcjogdW5rbm93bixcbiAgc2V0UmVxdWVzdEZhaWx1cmU6IChmYWlsZWQ6IGJvb2xlYW4pID0+IHZvaWQsXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZCxcbikgPT4ge1xuICBzZXRSZXF1ZXN0RmFpbHVyZSh0cnVlKTtcblxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoX2Vycm9yKTtcbiAgc2V0TWVzc2FnZXMocHJldiA9PiBbXG4gICAgLi4ucHJldixcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgICAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dCxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgY29udGVudDogZXJyb3JNZXNzYWdlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn07XG5cbmNvbnN0IHVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IChcbiAgbWVzc2FnZTogTWVzc2FnZSxcbiAgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UsXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZCxcbik6IE1lc3NhZ2UgPT4ge1xuICBpZiAobGFzdE1lc3NhZ2UgPT0gbnVsbCkge1xuICAgIHNldE1lc3NhZ2VzKHByZXYgPT4gWy4uLnByZXYsIFttZXNzYWdlXV0pO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG4gIGlmIChsYXN0TWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5UZXh0ICYmIG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dCkge1xuICAgIGNvbnN0IG5ld01lc3NhZ2UgPSB7XG4gICAgICAuLi5sYXN0TWVzc2FnZSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLmxhc3RNZXNzYWdlLm1ldGFkYXRhLFxuICAgICAgICBjb250ZW50OiBsYXN0TWVzc2FnZS5tZXRhZGF0YS5jb250ZW50ICsgbWVzc2FnZS5tZXRhZGF0YS5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHNldE1lc3NhZ2VzKHByZXYgPT4ge1xuICAgICAgY29uc3QgbGFzdFR1cm4gPSBwcmV2W3ByZXYubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5wcmV2LnNsaWNlKDAsIHByZXYubGVuZ3RoIC0gMSksXG4gICAgICAgIFsuLi5sYXN0VHVybi5zbGljZSgwLCBsYXN0VHVybi5sZW5ndGggLSAxKSwgbmV3TWVzc2FnZV0sXG4gICAgICBdO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICB9XG4gIHNldE1lc3NhZ2VzKHByZXYgPT4gWy4uLnByZXYuc2xpY2UoMCwgcHJldi5sZW5ndGggLSAxKSwgWy4uLnByZXZbcHJldi5sZW5ndGggLSAxXSwgbWVzc2FnZV1dKTtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuXG5jb25zdCBwcm9jZXNzU3RyZWFtaW5nUmVzcG9uc2UgPSBhc3luYyAoXG4gIHN0cmVhbTogQXN5bmNJdGVyYWJsZTxSZXNwb25zZT4sXG4gIG1lc3NhZ2VJbnRlcmNlcHRvcjogeyBpbnRlcmNlcHQ6IChyZXNwb25zZT86IFJlc3BvbnNlKSA9PiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZCxcbiAgc2V0UmVzcG9uc2VTdHJlYW1pbmc6IChyZXNwb25zZVN0cmVhbWluZzogYm9vbGVhbikgPT4gdm9pZCxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+PiA9PiB7XG4gIGxldCBsYXN0TWVzc2FnZTogTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgc2V0UmVzcG9uc2VTdHJlYW1pbmcodHJ1ZSk7XG4gIGNvbnN0IHJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmdbXT4gPSB7fTtcbiAgY29uc3QgcHJvZHVjdElkcyA9IFtdO1xuXG4gIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2Ygc3RyZWFtKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChtZXNzYWdlSW50ZXJjZXB0b3IuaW50ZXJjZXB0KHJlc3BvbnNlKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZXNwb25zZSBmcm9tIHN0cmVhbScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwb25zZSk7XG4gICAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdHJhbnNmb3JtIEFQSSByZXNwb25zZSB0byBjbGllbnQgbWVzc2FnZScpO1xuICAgICAgfVxuICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdCkge1xuICAgICAgICBjb25zdCBjYXJkc0NvdW50ZXIgPSAocmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucHJvZHVjdF9jYXJkc19yZXR1cm5lZCddIGFzIG51bWJlcikgfHwgMDtcbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucHJvZHVjdF9jYXJkc19yZXR1cm5lZCddID0gY2FyZHNDb3VudGVyICsgMTtcblxuICAgICAgICBjb25zdCBwcm9kdWN0SWRzID0gcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucHJvZHVjdF9pZHNfcmV0dXJuZWQnXSBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKCFwcm9kdWN0SWRzKSB7XG4gICAgICAgICAgcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucHJvZHVjdF9pZHNfcmV0dXJuZWQnXSA9IFttZXNzYWdlLm1ldGFkYXRhLmlkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9kdWN0SWRzLnB1c2gobWVzc2FnZS5tZXRhZGF0YS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlJldmlldykge1xuICAgICAgICBjb25zdCBjYXJkc0NvdW50ZXIgPSAocmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucmV2aWV3X2NhcmRzX3JldHVybmVkJ10gYXMgbnVtYmVyKSB8fCAwO1xuICAgICAgICByZXNwb25zZUFuYWx5dGljc1snY2hhdC5yZXZpZXdfY2FyZHNfcmV0dXJuZWQnXSA9IGNhcmRzQ291bnRlciArIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIHN1cHBvcnQgZm9yIENoYXRTZWFyY2ggbWVzc2FnZXMgYXQgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIC8vIFBlcmhhcHMgd2UgYWRkIHN1cHBvcnQgYmFjayBpbiB0aGUgZnV0dXJlXG4gICAgICAvLyBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgICAvLyAgIGhhbmRsZVNlYXJjaFJlc3VsdHMobWVzc2FnZSk7XG4gICAgICAvLyAgIGhhc1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgICAgLy8gICBzZXRTZWFyY2hJc0xvYWRpbmcoZmFsc2UpOyAvLyBVcGRhdGUgc2VhcmNoIGxvYWRpbmcgaW1tZWRpYXRlbHkgd2hlbiByZXN1bHRzIGFyZSBkZXRlY3RlZFxuICAgICAgLy8gfVxuXG4gICAgICBsYXN0TWVzc2FnZSA9IHVwZGF0ZU1lc3NhZ2VTdGF0ZShtZXNzYWdlLCBsYXN0TWVzc2FnZSEsIHNldE1lc3NhZ2VzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ1dhcm4oYFtzcGlmZnktYWldIEZhaWxlZCB0byBnZW5lcmF0ZSByZXNwb25zZXMgZnJvbSBzdHJlYW1gLCBlcnJvciwge1xuICAgICAgICBsYXN0UmVzcG9uc2U6IGxhc3RNZXNzYWdlLFxuICAgICAgICByZXNwb25zZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRSZXNwb25zZVN0cmVhbWluZyhmYWxzZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlQW5hbHl0aWNzO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVNhbGVzQWdlbnRTZXJ2aWNlOiAoKSA9PiBTYWxlc0FnZW50U2VydmljZSA9ICgpID0+IHtcbiAgY29uc3Qgc2V0UmVxdWVzdEZhaWx1cmUgPSB1c2VTZXRBdG9tKHJlcXVlc3RGYWlsdXJlQXRvbSk7XG4gIGNvbnN0IHNldE1lc3NhZ2VzID0gdXNlU2V0QXRvbShtZXNzYWdlc0F0b20pO1xuICBjb25zdCBzZXRTdWdnZXN0aW9ucyA9IHVzZVNldEF0b20oc3VnZ2VzdGlvbnNBdG9tKTtcbiAgY29uc3Qgc2V0UGVuZGluZ1Jlc3BvbnNlID0gdXNlU2V0QXRvbShwZW5kaW5nUmVzcG9uc2VBdG9tKTtcbiAgY29uc3Qgc2V0UmVzcG9uc2VTdHJlYW1pbmcgPSB1c2VTZXRBdG9tKHJlc3BvbnNlU3RyZWFtaW5nQXRvbSk7XG4gIGNvbnN0IGFuYWx5dGljc0NvbnRleHQgPSB1c2VBdG9tVmFsdWUoYW5hbHl0aWNzQ29udGV4dEF0b20pO1xuICBjb25zdCBtZXNzYWdlSW50ZXJjZXB0b3IgPSB1c2VNZXNzYWdlSW50ZXJjZXB0b3IoKTtcbiAgY29uc3QgeyB0cmFja0V2ZW50IH0gPSB1c2VBbXBsaXR1ZGUoKTtcblxuICBjb25zdCBmZWF0dXJlRmxhZ1NlcnZpY2UgPSB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UoKTtcbiAgY29uc3QgY29udGV4dCA9IHVzZUF0b21WYWx1ZShhcHBEZXRhaWxzQXRvbSk7XG5cbiAgY29uc3QgY3JlYXRlUmVzcG9uc2VQYXlsb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHtcbiAgICAgIHVzZXJFdmVudHMsXG4gICAgICBnZW5lcmF0aW9uUGFyYW1zLFxuICAgIH06IHtcbiAgICAgIHVzZXJFdmVudHM6IFVzZXJFdmVudFtdO1xuICAgICAgZ2VuZXJhdGlvblBhcmFtcz86IEdlbmVyYXRpb25QYXJhbXM7XG4gICAgfSk6IE5leHRNZXNzYWdlUmVxdWVzdCA9PiB7XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ3MgPSBmZWF0dXJlRmxhZ1NlcnZpY2U/LmZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge307XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRlQ29uZmlnVmVyc2lvbiA9XG4gICAgICAgIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICAgIGdldFF1ZXJ5UGFyYW0oJ2Vudml2ZV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG92ZXJyaWRlTW9kZWxEYXRldGltZSA9IGdldFF1ZXJ5UGFyYW0oJ292ZXJyaWRlX21vZGVsX2RhdGV0aW1lJykgfHwgdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgdXNlckV2ZW50cyxcbiAgICAgICAgZmVhdHVyZUZsYWdzLFxuICAgICAgICBnZW5lcmF0aW9uUGFyYW1zLFxuICAgICAgICBvdmVycmlkZUNvbmZpZ1ZlcnNpb24sXG4gICAgICAgIG92ZXJyaWRlTW9kZWxEYXRldGltZSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBbY29udGV4dCwgZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2VdLFxuICApO1xuXG4gIGNvbnN0IGdldFN0cmVhbWluZ1Jlc3BvbnNlcyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICBsZXQgc3VjY2Vzc2Z1bFJlc3BvbnNlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgc2V0UGVuZGluZ1Jlc3BvbnNlKHRydWUpO1xuICAgICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgICAgY29uc3Qgc3RyZWFtID0gQ29tbWVyY2VBcGlDbGllbnQuZ2V0TmV4dFJlc3BvbnNlU3RyZWFtaW5nKHBheWxvYWQpO1xuICAgICAgbGV0IHJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFJlcXVlc3RGYWlsdXJlKGZhbHNlKTtcblxuICAgICAgICByZXNwb25zZUFuYWx5dGljcyA9IGF3YWl0IHByb2Nlc3NTdHJlYW1pbmdSZXNwb25zZShcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgbWVzc2FnZUludGVyY2VwdG9yLFxuICAgICAgICAgIHNldE1lc3NhZ2VzLFxuICAgICAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nLFxuICAgICAgICApO1xuICAgICAgICBzdWNjZXNzZnVsUmVzcG9uc2UgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciB0aGUgQ2hyb21lIEV4dGVuc2lvbiBjb21tdW5pY2F0aW9uXG4gICAgICAgIC8vIGF3YWl0IGxvZ0J1bmRsZUV2ZW50KHtcbiAgICAgICAgLy8gICBsZXZlbDogJ2luZm8nLFxuICAgICAgICAvLyAgIGV2ZW50OiAnTkVYVF9SRVNQT05TRV9TVUNDRVNTJyxcbiAgICAgICAgLy8gICBjb250ZXh0OiB7XG4gICAgICAgIC8vICAgICB0eXBlOiAnbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgZW5kcG9pbnQ6ICcvdjEvbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICAvLyAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBnZXR0aW5nIHN0cmVhbWluZyByZXNwb25zZXMnLCBlKTtcbiAgICAgICAgc3VjY2Vzc2Z1bFJlc3BvbnNlID0gZmFsc2U7XG4gICAgICAgIC8vIExvZyBmYWlsZWQgbmV4dF9yZXNwb25zZXMgY2FsbFxuICAgICAgICAvLyBjb25zdCByZXNwb25zZVRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICAvLyBhd2FpdCBsb2dCdW5kbGVFdmVudCh7XG4gICAgICAgIC8vICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIC8vICAgZXZlbnQ6ICdORVhUX1JFU1BPTlNFX0ZBSUxFRCcsXG4gICAgICAgIC8vICAgbWVzc2FnZTogYEZhaWxlZCB0byBnZXQgc3RyZWFtaW5nIHJlc3BvbnNlOiAke2V9YCxcbiAgICAgICAgLy8gICBjb250ZXh0OiB7XG4gICAgICAgIC8vICAgICB0eXBlOiAnbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgZW5kcG9pbnQ6ICcvdjEvbmV4dF9yZXNwb25zZXMnLFxuICAgICAgICAvLyAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgICAvLyAgICAgZXJyb3I6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyB9KTtcblxuICAgICAgICBoYW5kbGVTdHJlYW1pbmdFcnJvcihlLCBzZXRSZXF1ZXN0RmFpbHVyZSwgc2V0TWVzc2FnZXMpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gTG9nIG5leHRfcmVzcG9uc2VzIGNhbGxcbiAgICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRBc3Npc3RhbnRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICByZXNwb25zZVRpbWVNczogcmVzcG9uc2VUaW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBzdWNjZXNzZnVsX3Jlc3BvbnNlOiBzdWNjZXNzZnVsUmVzcG9uc2UsXG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzVG9UcmFja2luZ1Byb3BzKHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuQ2hhdFJlc3BvbnNlLFxuICAgICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICAgIC4uLmFuYWx5dGljc0NvbnRleHQsXG4gICAgICAgICAgICAnY2hhdC5yZXNwb25zZV90aW1lX21zJzogcmVzcG9uc2VUaW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzVG9FbnZpdmVUcmFja2luZ1Byb3BzKHBheWxvYWQpLFxuICAgICAgICAgICAgLi4ucmVzcG9uc2VBbmFseXRpY3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFBlbmRpbmdSZXNwb25zZShmYWxzZSk7XG4gICAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nKGZhbHNlKTtcbiAgICAgICAgLy8gbG9nUGVyZk1ldHJpYyhQZXJmTWV0cmljc0V2ZW50cy5GaXJzdFJlc3BvbnNlQ29tcGxldGVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFuYWx5dGljc0NvbnRleHQsXG4gICAgICB0cmFja0V2ZW50LFxuICAgICAgc2V0UmVzcG9uc2VTdHJlYW1pbmcsXG4gICAgICAvLyBsb2dQZXJmTWV0cmljLFxuICAgICAgc2V0UmVxdWVzdEZhaWx1cmUsXG4gICAgICBzZXRTdWdnZXN0aW9ucyxcbiAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgIHNldE1lc3NhZ2VzLFxuICAgICAgc2V0UGVuZGluZ1Jlc3BvbnNlLFxuICAgIF0sXG4gICk7XG5cbiAgY29uc3QgZ2V0U3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBuZXdTdWdnZXN0aW9ucyA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRTdWdnZXN0aW9ucyhwYXlsb2FkKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKG5ld1N1Z2dlc3Rpb25zKTtcbiAgICB9LFxuICAgIFtzZXRTdWdnZXN0aW9uc10sXG4gICk7XG5cbiAgY29uc3QgaHlkcmF0ZU1lc3NhZ2VzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgb3JnSWQsIGNoYXRJZCwgdXNlcklkIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgbWVzc2FnZXM6IGV4aXN0aW5nTWVzc2FnZXMgfSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldFJlc3BvbnNlcyhcbiAgICAgIG9yZ0lkLFxuICAgICAgY2hhdElkLFxuICAgICAgdXNlcklkLFxuICAgICk7XG4gICAgc2V0TWVzc2FnZXMoWy4uLmV4aXN0aW5nTWVzc2FnZXNdKTtcbiAgfSwgW2NvbnRleHQsIHNldE1lc3NhZ2VzXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gICAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLFxuICAgIGdldFN1Z2dlc3Rpb25zLFxuICAgIGh5ZHJhdGVNZXNzYWdlcyxcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZDQSxNQUFNLDZCQUNKLFlBQ3dDO0NBQ3hDLE1BQU0sQ0FBQyxhQUFhLFFBQVEsY0FBYyxFQUFFO0FBQzVDLEtBQUksVUFBVSxhQUFhQSxrREFBa0Isa0JBQzNDLFFBQU87RUFDTCxZQUFZLFVBQVU7RUFDdEIsaUJBQWlCO0VBQ2pCLFlBQVksVUFBVSxXQUFXO0VBQ2xDO0FBRUgsS0FBSSxVQUFVLGFBQWFBLGtEQUFrQixXQUMzQyxRQUFPO0VBQ0wsWUFBWSxVQUFVO0VBQ3RCLGlCQUFpQjtFQUNqQixZQUFZLFVBQVUsV0FBVztFQUNsQztBQUVILFFBQU8sRUFBRTs7QUFHWCxNQUFNLG1DQUNKLFlBQ3dDO0NBQ3hDLE1BQU0sQ0FBQyxhQUFhLFFBQVEsY0FBYyxFQUFFO0FBQzVDLEtBQUksVUFBVSxhQUFhQSxrREFBa0Isa0JBQzNDLFFBQU87RUFDTCxxQkFBcUI7RUFDckIsbUJBQW1CLFVBQVU7RUFDN0IscUJBQXFCLFVBQVUsV0FBVztFQUMxQyxzQkFBc0IsVUFBVSxXQUFXO0VBQzNDLG1CQUFtQjtFQUNwQjtBQUVILEtBQUksVUFBVSxhQUFhQSxrREFBa0IsV0FDM0MsUUFBTztFQUNMLHFCQUFxQjtFQUNyQixtQkFBbUIsVUFBVTtFQUM3QixxQkFBcUIsVUFBVSxXQUFXO0VBQzFDLG1CQUFtQixVQUFVLFdBQVc7RUFDekM7QUFFSCxLQUNFLFVBQVUsYUFBYUEsa0RBQWtCLGFBQ3pDLFVBQVUsYUFBYUEsa0RBQWtCLFlBQ3pDLFVBQVUsYUFBYUEsa0RBQWtCLFNBRXpDLFFBQU87RUFDTCxtQkFBbUIsVUFBVTtFQUM3QixxQkFBcUI7RUFDdEI7QUFHSCxRQUFPLEVBQUU7O0FBR1gsTUFBYSxpQkFBaUIsUUFBK0I7QUFFM0QsUUFEZSxJQUFJLElBQUksT0FBTyxTQUFTLEtBQUssQ0FDOUIsYUFBYSxJQUFJLElBQUk7O0FBR3JDLE1BQU0sbUJBQW1CLFdBQTRCO0FBQ25ELEtBQUksa0JBQWtCQyx5Q0FDcEI7TUFBSSxPQUFPLGVBQWUsSUFDeEIsUUFBTzs7QUFRWCxRQUFPOztBQUdULE1BQU0sd0JBQ0osUUFDQSxtQkFDQSxnQkFDRztBQUNILG1CQUFrQixLQUFLO0NBRXZCLE1BQU0sZUFBZSxnQkFBZ0IsT0FBTztBQUM1QyxjQUFZLFNBQVEsQ0FDbEIsR0FBRyxNQUNILENBQ0U7RUFDRSxrQkFBVTtFQUNWLE1BQU1DLDRCQUFZO0VBQ2xCLE1BQU1DLDRCQUFZO0VBQ2xCLDRCQUFXLElBQUksTUFBTSxFQUFDLGFBQWE7RUFDbkMsVUFBVSxFQUNSLFNBQVMsY0FDVjtFQUNGLENBQ0YsQ0FDRixDQUFDOztBQUdKLE1BQU0sc0JBQ0osU0FDQSxhQUNBLGdCQUNZO0FBQ1osS0FBSSxlQUFlLE1BQU07QUFDdkIsZUFBWSxTQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekMsU0FBTzs7QUFFVCxLQUFJLFlBQVksU0FBU0EsNEJBQVksUUFBUSxRQUFRLFNBQVNBLDRCQUFZLE1BQU07RUFDOUUsTUFBTSxhQUFhO0dBQ2pCLEdBQUc7R0FDSCxVQUFVO0lBQ1IsR0FBRyxZQUFZO0lBQ2YsU0FBUyxZQUFZLFNBQVMsVUFBVSxRQUFRLFNBQVM7SUFDMUQ7R0FDRjtBQUNELGVBQVksU0FBUTtHQUNsQixNQUFNLFdBQVcsS0FBSyxLQUFLLFNBQVM7QUFDcEMsVUFBTyxDQUNMLEdBQUcsS0FBSyxNQUFNLEdBQUcsS0FBSyxTQUFTLEVBQUUsRUFDakMsQ0FBQyxHQUFHLFNBQVMsTUFBTSxHQUFHLFNBQVMsU0FBUyxFQUFFLEVBQUUsV0FBVyxDQUN4RDtJQUNEO0FBQ0YsU0FBTzs7QUFFVCxjQUFZLFNBQVEsQ0FBQyxHQUFHLEtBQUssTUFBTSxHQUFHLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLENBQUM7QUFDN0YsUUFBTzs7QUFHVCxNQUFNLDJCQUEyQixPQUMvQixRQUNBLG9CQUNBLGFBQ0EseUJBQytDO0NBQy9DLElBQUlDO0FBQ0osc0JBQXFCLEtBQUs7Q0FDMUIsTUFBTUMsb0JBQXVELEVBQUU7QUFHL0QsWUFBVyxNQUFNLFlBQVksUUFBUTtBQUNuQyxNQUFJO0FBQ0YsT0FBSSxtQkFBbUIsVUFBVSxTQUFTLENBQ3hDLFFBQU8sRUFBRTtBQUdYLE9BQUksQ0FBQyxTQUNILE9BQU0sSUFBSSxNQUFNLDBCQUEwQjtHQUc1QyxNQUFNLFVBQVVDLGdEQUFvQixTQUFTO0FBQzdDLE9BQUksQ0FBQyxRQUNILE9BQU0sSUFBSSxNQUFNLHFEQUFxRDtBQUV2RSxPQUFJLFFBQVEsU0FBU0gsNEJBQVksU0FBUztBQUV4QyxzQkFBa0Isa0NBREksa0JBQWtCLGtDQUE2QyxLQUNuQjtJQUVsRSxNQUFNLGFBQWEsa0JBQWtCO0FBQ3JDLFFBQUksQ0FBQyxXQUNILG1CQUFrQiwrQkFBK0IsQ0FBQyxRQUFRLFNBQVMsR0FBRztRQUV0RSxZQUFXLEtBQUssUUFBUSxTQUFTLEdBQUc7O0FBR3hDLE9BQUksUUFBUSxTQUFTQSw0QkFBWSxPQUUvQixtQkFBa0IsaUNBREksa0JBQWtCLGlDQUE0QyxLQUNuQjtBQVduRSxpQkFBYyxtQkFBbUIsU0FBUyxhQUFjLFlBQVk7V0FDN0RJLE9BQWdCO0FBQ3ZCLDBCQUFPLFFBQVEsd0RBQXdELE9BQU87SUFDNUUsY0FBYztJQUNkO0lBQ0QsQ0FBQzs7QUFFSix1QkFBcUIsTUFBTTs7QUFFN0IsUUFBTzs7QUFHVCxNQUFhQyw2QkFBc0Q7Q0FDakUsTUFBTSwwQ0FBK0JDLGdEQUFtQjtDQUN4RCxNQUFNLG9DQUF5QkMsMENBQWE7Q0FDNUMsTUFBTSx1Q0FBNEJDLDZDQUFnQjtDQUNsRCxNQUFNLDJDQUFnQ0MsaURBQW9CO0NBQzFELE1BQU0sNkNBQWtDQyxtREFBc0I7Q0FDOUQsTUFBTSwyQ0FBZ0NDLHFDQUFxQjtDQUMzRCxNQUFNLHFCQUFxQkMscURBQXVCO0NBQ2xELE1BQU0sRUFBRSxlQUFlQyx1Q0FBYztDQUVyQyxNQUFNLHFCQUFxQkMseURBQXVCO0NBQ2xELE1BQU0sa0NBQXVCQyx1Q0FBZTtBQXVJNUMsUUFBTztFQUNMLCtDQXJJQyxFQUNDLFlBQ0EsdUJBSXdCO0dBQ3hCLE1BQU0sZUFBZSxvQkFBb0Isb0JBQW9CLGlCQUFpQixJQUFJLEVBQUU7R0FFcEYsTUFBTSx3QkFDSixjQUFjLHdCQUF3QixJQUN0QyxjQUFjLHdCQUF3QixJQUN0QztHQUNGLE1BQU0sd0JBQXdCLGNBQWMsMEJBQTBCLElBQUk7QUFDMUUsVUFBTztJQUNMLGtCQUFVO0lBQ1Y7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7S0FFSCxDQUFDLFNBQVMsb0JBQW9CLG1CQUFtQixDQUNsRDtFQTZHQyw4Q0ExR0EsT0FBTyxZQUErQztHQUNwRCxNQUFNLFlBQVksS0FBSyxLQUFLO0dBQzVCLElBQUlDO0FBQ0osc0JBQW1CLEtBQUs7QUFDeEIsa0JBQWUsRUFBRSxDQUFDO0dBQ2xCLE1BQU0sU0FBU0MseUNBQWtCLHlCQUF5QixRQUFRO0dBQ2xFLElBQUlDO0FBQ0osT0FBSTtBQUNGLHNCQUFrQixNQUFNO0FBRXhCLHdCQUFvQixNQUFNLHlCQUN4QixRQUNBLG9CQUNBLGFBQ0EscUJBQ0Q7QUFDRCx5QkFBcUI7WUFhZCxHQUFHO0FBQ1YsWUFBUSxNQUFNLHFDQUFxQyxFQUFFO0FBQ3JELHlCQUFxQjtBQWVyQix5QkFBcUIsR0FBRyxtQkFBbUIsWUFBWTtBQUN2RCxVQUFNO2FBQ0U7SUFFUixNQUFNLGVBQWUsS0FBSyxLQUFLLEdBQUc7QUFDbEMsZUFBVztLQUNULFdBQVdDLDBDQUF1QjtLQUNsQyxZQUFZO01BQ1YsZ0JBQWdCLGFBQWEsVUFBVTtNQUN2QyxxQkFBcUI7TUFDckIsR0FBRywwQkFBMEIsUUFBUTtNQUN0QztLQUNGLENBQUM7QUFDRixlQUFXO0tBQ1QsV0FBV0MsMENBQXVCO0tBQ2xDLFlBQVk7TUFDVixHQUFHO01BQ0gseUJBQXlCLGFBQWEsVUFBVTtNQUNoRCxHQUFHLGdDQUFnQyxRQUFRO01BQzNDLEdBQUc7TUFDSjtLQUNGLENBQUM7QUFDRix1QkFBbUIsTUFBTTtBQUN6Qix5QkFBcUIsTUFBTTs7S0FJL0I7R0FDRTtHQUNBO0dBQ0E7R0FFQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0QsQ0FDRjtFQXVCQyx1Q0FwQkEsT0FBTyxZQUErQztBQUVwRCxrQkFEdUIsTUFBTUgseUNBQWtCLG1CQUFtQixRQUFRLENBQzVDO0tBRWhDLENBQUMsZUFBZSxDQUNqQjtFQWdCQyx3Q0Fka0MsWUFBWTtHQUM5QyxNQUFNLEVBQUUsT0FBTyxRQUFRLFdBQVc7R0FDbEMsTUFBTSxFQUFFLFVBQVUscUJBQXFCLE1BQU1BLHlDQUFrQixhQUM3RCxPQUNBLFFBQ0EsT0FDRDtBQUNELGVBQVksQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0tBQ2pDLENBQUMsU0FBUyxZQUFZLENBQUM7RUFPekIifQ==
@@ -9,11 +9,11 @@ import { analyticsContextAtom } from "../../atoms/app/variant.js";
9
9
  import { appDetailsAtom } from "../../atoms/app/index.js";
10
10
  import commerce_api_default from "../../application/commerce-api.js";
11
11
  import { useMessageInterceptor } from "../../interceptors/useMessageInterceptor.js";
12
- import { messagesAtom, pendingResponseAtom, requestFailureAtom, responseStreamingAtom, suggestionsAtom } from "../../atoms/chat/chatState.js";
13
12
  import { useFeatureFlagService } from "../featureFlagServiceContext/featureFlagServiceContext.js";
14
13
  import { useAmplitude } from "../amplitudeContext/amplitudeContext.js";
15
14
  import "../amplitudeContext/index.js";
16
15
  import "../featureFlagServiceContext/index.js";
16
+ import { messagesAtom, pendingResponseAtom, requestFailureAtom, responseStreamingAtom, suggestionsAtom } from "../../atoms/chat/chatState.js";
17
17
  import { StatusCodeError } from "./statusCodeError.js";
18
18
  import { UserEventCategory } from "@spiffy-ai/commerce-api-client";
19
19
  import { useCallback } from "react";
@@ -108,7 +108,12 @@ const processStreamingResponse = async (stream, messageInterceptor, setMessages,
108
108
  if (!response) throw new Error("No response from stream");
109
109
  const message = messageFromResponse(response);
110
110
  if (!message) throw new Error("Failed to transform API response to client message");
111
- if (message.type === MessageType.Product) responseAnalytics["chat.product_cards_returned"] = (responseAnalytics["chat.product_cards_returned"] || 0) + 1;
111
+ if (message.type === MessageType.Product) {
112
+ responseAnalytics["chat.product_cards_returned"] = (responseAnalytics["chat.product_cards_returned"] || 0) + 1;
113
+ const productIds = responseAnalytics["chat.product_ids_returned"];
114
+ if (!productIds) responseAnalytics["chat.product_ids_returned"] = [message.metadata.id];
115
+ else productIds.push(message.metadata.id);
116
+ }
112
117
  if (message.type === MessageType.Review) responseAnalytics["chat.review_cards_returned"] = (responseAnalytics["chat.review_cards_returned"] || 0) + 1;
113
118
  lastMessage = updateMessageState(message, lastMessage, setMessages);
114
119
  } catch (error) {
@@ -200,7 +205,7 @@ const useSalesAgentService = () => {
200
205
  }, [setSuggestions]),
201
206
  hydrateMessages: useCallback(async () => {
202
207
  const { orgId, chatId, userId } = context;
203
- const { messages: existingMessages, userEvents } = await commerce_api_default.getResponses(orgId, chatId, userId);
208
+ const { messages: existingMessages } = await commerce_api_default.getResponses(orgId, chatId, userId);
204
209
  setMessages([...existingMessages]);
205
210
  }, [context, setMessages])
206
211
  };
@@ -208,4 +213,4 @@ const useSalesAgentService = () => {
208
213
 
209
214
  //#endregion
210
215
  export { useSalesAgentService };
211
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudFNlcnZpY2UuanMiLCJuYW1lcyI6WyJ1dWlkIiwibGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiIsImVycm9yOiB1bmtub3duIiwidXNlU2FsZXNBZ2VudFNlcnZpY2U6ICgpID0+IFNhbGVzQWdlbnRTZXJ2aWNlIiwic3VjY2Vzc2Z1bFJlc3BvbnNlOiBib29sZWFuIHwgdW5kZWZpbmVkIiwiQ29tbWVyY2VBcGlDbGllbnQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvc2FsZXNBZ2VudENvbnRleHQvc2FsZXNBZ2VudFNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQXRvbVZhbHVlLCB1c2VTZXRBdG9tIH0gZnJvbSAnam90YWknO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgeyBhcHBEZXRhaWxzQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9hcHAnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgR2VuZXJhdGlvblBhcmFtcyxcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIFJlc3BvbnNlLFxuICBVc2VyRXZlbnQsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgbWVzc2FnZUZyb21SZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscyc7XG5pbXBvcnQge1xuICBtZXNzYWdlc0F0b20sXG4gIHBlbmRpbmdSZXNwb25zZUF0b20sXG4gIHJlcXVlc3RGYWlsdXJlQXRvbSxcbiAgcmVzcG9uc2VTdHJlYW1pbmdBdG9tLFxuICBzdWdnZXN0aW9uc0F0b20sXG59IGZyb20gJ3NyYy9hdG9tcy9jaGF0L2NoYXRTdGF0ZSc7XG5pbXBvcnQgeyB1c2VNZXNzYWdlSW50ZXJjZXB0b3IgfSBmcm9tICdzcmMvaW50ZXJjZXB0b3JzL3VzZU1lc3NhZ2VJbnRlcmNlcHRvcic7XG5pbXBvcnQgeyB1c2VBbXBsaXR1ZGUgfSBmcm9tICdzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dCc7XG5pbXBvcnQge1xuICBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxufSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCB7IHVzZUZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IGFuYWx5dGljc0NvbnRleHRBdG9tIH0gZnJvbSAnc3JjL2F0b21zL2FwcC92YXJpYW50JztcblxuaW1wb3J0IHsgU3RhdHVzQ29kZUVycm9yIH0gZnJvbSAnLi9zdGF0dXNDb2RlRXJyb3InO1xuXG5pbnRlcmZhY2UgU2FsZXNBZ2VudFNlcnZpY2Uge1xuICBjcmVhdGVSZXNwb25zZVBheWxvYWQ6IChwYXlsb2FkOiB7XG4gICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgZ2VuZXJhdGlvblBhcmFtcz86IEdlbmVyYXRpb25QYXJhbXM7XG4gIH0pID0+IE5leHRNZXNzYWdlUmVxdWVzdDtcbiAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzOiAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdWdnZXN0aW9uczogKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgaHlkcmF0ZU1lc3NhZ2VzOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jb25zdCBpbnB1dFByb3BzVG9UcmFja2luZ1Byb3BzID0gKFxuICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IFt1c2VyRXZlbnRdID0gcGF5bG9hZC51c2VyRXZlbnRzIHx8IFtdO1xuICBpZiAodXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlX2lkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgIHVzZXJfZXZlbnRfdHlwZTogJ3N1Z2dlc3Rpb25fY2xpY2tlZCcsXG4gICAgICB1c2VyX3F1ZXJ5OiB1c2VyRXZlbnQuYXR0cmlidXRlcy5jb250ZW50LFxuICAgIH07XG4gIH1cbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlX2lkOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgIHVzZXJfZXZlbnRfdHlwZTogJ3F1ZXJ5X3R5cGVkJyxcbiAgICAgIHVzZXJfcXVlcnk6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuY29uc3QgaW5wdXRQcm9wc1RvRW52aXZlVHJhY2tpbmdQcm9wcyA9IChcbiAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBbdXNlckV2ZW50XSA9IHBheWxvYWQudXNlckV2ZW50cyB8fCBbXTtcbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2NoYXQucmVxdWVzdF90eXBlJzogJ3N1Z2dlc3Rpb24nLFxuICAgICAgJ2NoYXQucmVxdWVzdF9pZCc6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgJ2NoYXQucmVxdWVzdF90ZXh0JzogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCxcbiAgICAgICdjaGF0LnN1Z2dlc3Rpb25faWQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy5zdWdnZXN0aW9uSWQsXG4gICAgICAnY2hhdC51c2VyX3R5cGVkJzogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBpZiAodXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjaGF0LnJlcXVlc3RfdHlwZSc6ICd0ZXh0JyxcbiAgICAgICdjaGF0LnJlcXVlc3RfaWQnOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICdjaGF0LnJlcXVlc3RfdGV4dCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgJ2NoYXQudXNlcl90eXBlZCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLnVzZXJUeXBlZCxcbiAgICB9O1xuICB9XG4gIGlmIChcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBhZ2VWaXNpdCB8fFxuICAgIHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgfHxcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBscFZpc2l0XG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICAnY2hhdC5yZXF1ZXN0X2lkJzogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAnY2hhdC5yZXF1ZXN0X3R5cGUnOiAncGFnZV92aXNpdCcsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtID0gKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICByZXR1cm4gdXJsT2JqLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbn07XG5cbmNvbnN0IGdldEVycm9yTWVzc2FnZSA9IChfZXJyb3I6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICBpZiAoX2Vycm9yIGluc3RhbmNlb2YgU3RhdHVzQ29kZUVycm9yKSB7XG4gICAgaWYgKF9lcnJvci5zdGF0dXNDb2RlID09PSA0MjMpIHtcbiAgICAgIHJldHVybiAnRHVlIHRvIHZpb2xhdGlvbiBvZiB0ZXJtcyBhbmQgc2VydmljZXMsIHRoaXMgc2Vzc2lvbiBoYXMgYmVlbiB0ZXJtaW5hdGVkLic7XG4gICAgfVxuICAgIC8vIEtlZXBpbmcgdGhlIDQyOSBlcnJvciBtZXNzYWdlcyBhcyB0aGUgZ2VuZXJpYyBlcnJvciBtZXNzYWdlIGZvciBub3cuXG4gICAgLy8gaWYgKF9lcnJvci5zdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAvLyAgIHJldHVybiBcIkknbSBzb3JyeSEgVGhlIHN5c3RlbSBpcyBidXN5IHJpZ2h0IG5vdy4gUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIGZldyBtaW51dGVzLlwiO1xuICAgIC8vIH1cbiAgfVxuXG4gIHJldHVybiBcIkknbSBzb3JyeSEgSSdtIGhhdmluZyB0cm91YmxlIHJpZ2h0IG5vdy4gUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2Ugb3IgdHJ5IGFnYWluIGluIGEgbW9tZW50LlwiO1xufTtcblxuY29uc3QgaGFuZGxlU3RyZWFtaW5nRXJyb3IgPSAoXG4gIF9lcnJvcjogdW5rbm93bixcbiAgc2V0UmVxdWVzdEZhaWx1cmU6IChmYWlsZWQ6IGJvb2xlYW4pID0+IHZvaWQsXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZCxcbikgPT4ge1xuICBzZXRSZXF1ZXN0RmFpbHVyZSh0cnVlKTtcblxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoX2Vycm9yKTtcbiAgc2V0TWVzc2FnZXMocHJldiA9PiBbXG4gICAgLi4ucHJldixcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgICAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dCxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgY29udGVudDogZXJyb3JNZXNzYWdlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn07XG5cbmNvbnN0IHVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IChcbiAgbWVzc2FnZTogTWVzc2FnZSxcbiAgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UsXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZCxcbik6IE1lc3NhZ2UgPT4ge1xuICBpZiAobGFzdE1lc3NhZ2UgPT0gbnVsbCkge1xuICAgIHNldE1lc3NhZ2VzKHByZXYgPT4gWy4uLnByZXYsIFttZXNzYWdlXV0pO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG4gIGlmIChsYXN0TWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5UZXh0ICYmIG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dCkge1xuICAgIGNvbnN0IG5ld01lc3NhZ2UgPSB7XG4gICAgICAuLi5sYXN0TWVzc2FnZSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLmxhc3RNZXNzYWdlLm1ldGFkYXRhLFxuICAgICAgICBjb250ZW50OiBsYXN0TWVzc2FnZS5tZXRhZGF0YS5jb250ZW50ICsgbWVzc2FnZS5tZXRhZGF0YS5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHNldE1lc3NhZ2VzKHByZXYgPT4ge1xuICAgICAgY29uc3QgbGFzdFR1cm4gPSBwcmV2W3ByZXYubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5wcmV2LnNsaWNlKDAsIHByZXYubGVuZ3RoIC0gMSksXG4gICAgICAgIFsuLi5sYXN0VHVybi5zbGljZSgwLCBsYXN0VHVybi5sZW5ndGggLSAxKSwgbmV3TWVzc2FnZV0sXG4gICAgICBdO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICB9XG4gIHNldE1lc3NhZ2VzKHByZXYgPT4gWy4uLnByZXYuc2xpY2UoMCwgcHJldi5sZW5ndGggLSAxKSwgWy4uLnByZXZbcHJldi5sZW5ndGggLSAxXSwgbWVzc2FnZV1dKTtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuXG5jb25zdCBwcm9jZXNzU3RyZWFtaW5nUmVzcG9uc2UgPSBhc3luYyAoXG4gIHN0cmVhbTogQXN5bmNJdGVyYWJsZTxSZXNwb25zZT4sXG4gIG1lc3NhZ2VJbnRlcmNlcHRvcjogeyBpbnRlcmNlcHQ6IChyZXNwb25zZT86IFJlc3BvbnNlKSA9PiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZCxcbiAgc2V0UmVzcG9uc2VTdHJlYW1pbmc6IChyZXNwb25zZVN0cmVhbWluZzogYm9vbGVhbikgPT4gdm9pZCxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4gPT4ge1xuICBsZXQgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIHNldFJlc3BvbnNlU3RyZWFtaW5nKHRydWUpO1xuICBjb25zdCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2Ygc3RyZWFtKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChtZXNzYWdlSW50ZXJjZXB0b3IuaW50ZXJjZXB0KHJlc3BvbnNlKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZXNwb25zZSBmcm9tIHN0cmVhbScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwb25zZSk7XG4gICAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdHJhbnNmb3JtIEFQSSByZXNwb25zZSB0byBjbGllbnQgbWVzc2FnZScpO1xuICAgICAgfVxuICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdCkge1xuICAgICAgICByZXNwb25zZUFuYWx5dGljc1snY2hhdC5wcm9kdWN0X2NhcmRzX3JldHVybmVkJ10gPVxuICAgICAgICAgIChyZXNwb25zZUFuYWx5dGljc1snY2hhdC5wcm9kdWN0X2NhcmRzX3JldHVybmVkJ10gfHwgMCkgKyAxO1xuICAgICAgfVxuICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUmV2aWV3KSB7XG4gICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnJldmlld19jYXJkc19yZXR1cm5lZCddID1cbiAgICAgICAgICAocmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucmV2aWV3X2NhcmRzX3JldHVybmVkJ10gfHwgMCkgKyAxO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBzdXBwb3J0IGZvciBDaGF0U2VhcmNoIG1lc3NhZ2VzIGF0IHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICAvLyBQZXJoYXBzIHdlIGFkZCBzdXBwb3J0IGJhY2sgaW4gdGhlIGZ1dHVyZVxuICAgICAgLy8gaWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCkge1xuICAgICAgLy8gICBoYW5kbGVTZWFyY2hSZXN1bHRzKG1lc3NhZ2UpO1xuICAgICAgLy8gICBoYXNTZWFyY2hSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIC8vICAgc2V0U2VhcmNoSXNMb2FkaW5nKGZhbHNlKTsgLy8gVXBkYXRlIHNlYXJjaCBsb2FkaW5nIGltbWVkaWF0ZWx5IHdoZW4gcmVzdWx0cyBhcmUgZGV0ZWN0ZWRcbiAgICAgIC8vIH1cblxuICAgICAgbGFzdE1lc3NhZ2UgPSB1cGRhdGVNZXNzYWdlU3RhdGUobWVzc2FnZSwgbGFzdE1lc3NhZ2UhLCBzZXRNZXNzYWdlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKGBbc3BpZmZ5LWFpXSBGYWlsZWQgdG8gZ2VuZXJhdGUgcmVzcG9uc2VzIGZyb20gc3RyZWFtYCwgZXJyb3IsIHtcbiAgICAgICAgbGFzdFJlc3BvbnNlOiBsYXN0TWVzc2FnZSxcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICB9KTtcbiAgICB9XG4gICAgc2V0UmVzcG9uc2VTdHJlYW1pbmcoZmFsc2UpO1xuICB9XG4gIHJldHVybiByZXNwb25zZUFuYWx5dGljcztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTYWxlc0FnZW50U2VydmljZTogKCkgPT4gU2FsZXNBZ2VudFNlcnZpY2UgPSAoKSA9PiB7XG4gIGNvbnN0IHNldFJlcXVlc3RGYWlsdXJlID0gdXNlU2V0QXRvbShyZXF1ZXN0RmFpbHVyZUF0b20pO1xuICBjb25zdCBzZXRNZXNzYWdlcyA9IHVzZVNldEF0b20obWVzc2FnZXNBdG9tKTtcbiAgY29uc3Qgc2V0U3VnZ2VzdGlvbnMgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zQXRvbSk7XG4gIGNvbnN0IHNldFBlbmRpbmdSZXNwb25zZSA9IHVzZVNldEF0b20ocGVuZGluZ1Jlc3BvbnNlQXRvbSk7XG4gIGNvbnN0IHNldFJlc3BvbnNlU3RyZWFtaW5nID0gdXNlU2V0QXRvbShyZXNwb25zZVN0cmVhbWluZ0F0b20pO1xuICBjb25zdCBhbmFseXRpY3NDb250ZXh0ID0gdXNlQXRvbVZhbHVlKGFuYWx5dGljc0NvbnRleHRBdG9tKTtcbiAgY29uc3QgbWVzc2FnZUludGVyY2VwdG9yID0gdXNlTWVzc2FnZUludGVyY2VwdG9yKCk7XG4gIGNvbnN0IHsgdHJhY2tFdmVudCB9ID0gdXNlQW1wbGl0dWRlKCk7XG5cbiAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VBdG9tVmFsdWUoYXBwRGV0YWlsc0F0b20pO1xuXG4gIGNvbnN0IGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgICh7XG4gICAgICB1c2VyRXZlbnRzLFxuICAgICAgZ2VuZXJhdGlvblBhcmFtcyxcbiAgICB9OiB7XG4gICAgICB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXTtcbiAgICAgIGdlbmVyYXRpb25QYXJhbXM/OiBHZW5lcmF0aW9uUGFyYW1zO1xuICAgIH0pOiBOZXh0TWVzc2FnZVJlcXVlc3QgPT4ge1xuICAgICAgY29uc3QgZmVhdHVyZUZsYWdzID0gZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2U/LmdldEZlYXR1cmVGbGFncygpIHx8IHt9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZUNvbmZpZ1ZlcnNpb24gPVxuICAgICAgICBnZXRRdWVyeVBhcmFtKCdzcGlmZnlfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgICBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgICB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBvdmVycmlkZU1vZGVsRGF0ZXRpbWUgPSBnZXRRdWVyeVBhcmFtKCdvdmVycmlkZV9tb2RlbF9kYXRldGltZScpIHx8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHMsXG4gICAgICAgIGZlYXR1cmVGbGFncyxcbiAgICAgICAgZ2VuZXJhdGlvblBhcmFtcyxcbiAgICAgICAgb3ZlcnJpZGVDb25maWdWZXJzaW9uLFxuICAgICAgICBvdmVycmlkZU1vZGVsRGF0ZXRpbWUsXG4gICAgICB9O1xuICAgIH0sXG4gICAgW2NvbnRleHQsIGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlXSxcbiAgKTtcblxuICBjb25zdCBnZXRTdHJlYW1pbmdSZXNwb25zZXMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHN1Y2Nlc3NmdWxSZXNwb25zZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgIHNldFBlbmRpbmdSZXNwb25zZSh0cnVlKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRSZXNwb25zZVN0cmVhbWluZyhwYXlsb2FkKTtcbiAgICAgIGxldCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXF1ZXN0RmFpbHVyZShmYWxzZSk7XG5cbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3MgPSBhd2FpdCBwcm9jZXNzU3RyZWFtaW5nUmVzcG9uc2UoXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgICAgICBzZXRNZXNzYWdlcyxcbiAgICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyxcbiAgICAgICAgKTtcbiAgICAgICAgc3VjY2Vzc2Z1bFJlc3BvbnNlID0gdHJ1ZTtcblxuICAgICAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgdGhlIENocm9tZSBFeHRlbnNpb24gY29tbXVuaWNhdGlvblxuICAgICAgICAvLyBhd2FpdCBsb2dCdW5kbGVFdmVudCh7XG4gICAgICAgIC8vICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgLy8gICBldmVudDogJ05FWFRfUkVTUE9OU0VfU1VDQ0VTUycsXG4gICAgICAgIC8vICAgY29udGV4dDoge1xuICAgICAgICAvLyAgICAgdHlwZTogJ25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIGVuZHBvaW50OiAnL3YxL25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgLy8gICAgIHJlc3BvbnNlVGltZSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignZXJyb3IgZ2V0dGluZyBzdHJlYW1pbmcgcmVzcG9uc2VzJywgZSk7XG4gICAgICAgIHN1Y2Nlc3NmdWxSZXNwb25zZSA9IGZhbHNlO1xuICAgICAgICAvLyBMb2cgZmFpbGVkIG5leHRfcmVzcG9uc2VzIGNhbGxcbiAgICAgICAgLy8gY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgLy8gYXdhaXQgbG9nQnVuZGxlRXZlbnQoe1xuICAgICAgICAvLyAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAvLyAgIGV2ZW50OiAnTkVYVF9SRVNQT05TRV9GQUlMRUQnLFxuICAgICAgICAvLyAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZ2V0IHN0cmVhbWluZyByZXNwb25zZTogJHtlfWAsXG4gICAgICAgIC8vICAgY29udGV4dDoge1xuICAgICAgICAvLyAgICAgdHlwZTogJ25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIGVuZHBvaW50OiAnL3YxL25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIHJlc3BvbnNlVGltZSxcbiAgICAgICAgLy8gICAgIGVycm9yOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgIC8vICAgfSxcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgaGFuZGxlU3RyZWFtaW5nRXJyb3IoZSwgc2V0UmVxdWVzdEZhaWx1cmUsIHNldE1lc3NhZ2VzKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIExvZyBuZXh0X3Jlc3BvbnNlcyBjYWxsXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0QXNzaXN0YW50UmVzcG9uc2UsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgcmVzcG9uc2VUaW1lTXM6IHJlc3BvbnNlVGltZS50b1N0cmluZygpLFxuICAgICAgICAgICAgc3VjY2Vzc2Z1bF9yZXNwb25zZTogc3VjY2Vzc2Z1bFJlc3BvbnNlLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wc1RvVHJhY2tpbmdQcm9wcyhwYXlsb2FkKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLkNoYXRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICAuLi5hbmFseXRpY3NDb250ZXh0LFxuICAgICAgICAgICAgJ2NoYXQucmVzcG9uc2VfdGltZV9tcyc6IHJlc3BvbnNlVGltZS50b1N0cmluZygpLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wc1RvRW52aXZlVHJhY2tpbmdQcm9wcyhwYXlsb2FkKSxcbiAgICAgICAgICAgIC4uLnJlc3BvbnNlQW5hbHl0aWNzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRQZW5kaW5nUmVzcG9uc2UoZmFsc2UpO1xuICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyhmYWxzZSk7XG4gICAgICAgIC8vIGxvZ1BlcmZNZXRyaWMoUGVyZk1ldHJpY3NFdmVudHMuRmlyc3RSZXNwb25zZUNvbXBsZXRlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhbmFseXRpY3NDb250ZXh0LFxuICAgICAgdHJhY2tFdmVudCxcbiAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nLFxuICAgICAgLy8gbG9nUGVyZk1ldHJpYyxcbiAgICAgIHNldFJlcXVlc3RGYWlsdXJlLFxuICAgICAgc2V0U3VnZ2VzdGlvbnMsXG4gICAgICBtZXNzYWdlSW50ZXJjZXB0b3IsXG4gICAgICBzZXRNZXNzYWdlcyxcbiAgICAgIHNldFBlbmRpbmdSZXNwb25zZSxcbiAgICBdLFxuICApO1xuXG4gIGNvbnN0IGdldFN1Z2dlc3Rpb25zID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgbmV3U3VnZ2VzdGlvbnMgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXROZXh0U3VnZ2VzdGlvbnMocGF5bG9hZCk7XG4gICAgICBzZXRTdWdnZXN0aW9ucyhuZXdTdWdnZXN0aW9ucyk7XG4gICAgfSxcbiAgICBbc2V0U3VnZ2VzdGlvbnNdLFxuICApO1xuXG4gIGNvbnN0IGh5ZHJhdGVNZXNzYWdlcyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IG9yZ0lkLCBjaGF0SWQsIHVzZXJJZCB9ID0gY29udGV4dDtcbiAgICBjb25zdCB7IG1lc3NhZ2VzOiBleGlzdGluZ01lc3NhZ2VzLCB1c2VyRXZlbnRzIH0gPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRSZXNwb25zZXMoXG4gICAgICBvcmdJZCxcbiAgICAgIGNoYXRJZCxcbiAgICAgIHVzZXJJZCxcbiAgICApO1xuICAgIHNldE1lc3NhZ2VzKFsuLi5leGlzdGluZ01lc3NhZ2VzXSk7XG4gIH0sIFtjb250ZXh0LCBzZXRNZXNzYWdlc10pO1xuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkLFxuICAgIGdldFN0cmVhbWluZ1Jlc3BvbnNlcyxcbiAgICBnZXRTdWdnZXN0aW9ucyxcbiAgICBoeWRyYXRlTWVzc2FnZXMsXG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZDQSxNQUFNLDZCQUNKLFlBQ3dDO0NBQ3hDLE1BQU0sQ0FBQyxhQUFhLFFBQVEsY0FBYyxFQUFFO0FBQzVDLEtBQUksVUFBVSxhQUFhLGtCQUFrQixrQkFDM0MsUUFBTztFQUNMLFlBQVksVUFBVTtFQUN0QixpQkFBaUI7RUFDakIsWUFBWSxVQUFVLFdBQVc7RUFDbEM7QUFFSCxLQUFJLFVBQVUsYUFBYSxrQkFBa0IsV0FDM0MsUUFBTztFQUNMLFlBQVksVUFBVTtFQUN0QixpQkFBaUI7RUFDakIsWUFBWSxVQUFVLFdBQVc7RUFDbEM7QUFFSCxRQUFPLEVBQUU7O0FBR1gsTUFBTSxtQ0FDSixZQUN3QztDQUN4QyxNQUFNLENBQUMsYUFBYSxRQUFRLGNBQWMsRUFBRTtBQUM1QyxLQUFJLFVBQVUsYUFBYSxrQkFBa0Isa0JBQzNDLFFBQU87RUFDTCxxQkFBcUI7RUFDckIsbUJBQW1CLFVBQVU7RUFDN0IscUJBQXFCLFVBQVUsV0FBVztFQUMxQyxzQkFBc0IsVUFBVSxXQUFXO0VBQzNDLG1CQUFtQjtFQUNwQjtBQUVILEtBQUksVUFBVSxhQUFhLGtCQUFrQixXQUMz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
216
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsZXNBZ2VudFNlcnZpY2UuanMiLCJuYW1lcyI6WyJ1dWlkIiwibGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQiLCJyZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+IiwiZXJyb3I6IHVua25vd24iLCJ1c2VTYWxlc0FnZW50U2VydmljZTogKCkgPT4gU2FsZXNBZ2VudFNlcnZpY2UiLCJzdWNjZXNzZnVsUmVzcG9uc2U6IGJvb2xlYW4gfCB1bmRlZmluZWQiLCJDb21tZXJjZUFwaUNsaWVudCIsInJlc3BvbnNlQW5hbHl0aWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9zYWxlc0FnZW50Q29udGV4dC9zYWxlc0FnZW50U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyB1c2VBdG9tVmFsdWUsIHVzZVNldEF0b20gfSBmcm9tICdqb3RhaSc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb21tZXJjZUFwaUNsaWVudCBmcm9tICdzcmMvYXBwbGljYXRpb24vY29tbWVyY2UtYXBpJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7XG4gIEdlbmVyYXRpb25QYXJhbXMsXG4gIE1lc3NhZ2UsXG4gIE1lc3NhZ2VSb2xlLFxuICBNZXNzYWdlVHlwZSxcbiAgTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuICBSZXNwb25zZSxcbiAgVXNlckV2ZW50LFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IG1lc3NhZ2VGcm9tUXVlcnlFdmVudCwgbWVzc2FnZUZyb21SZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscyc7XG5pbXBvcnQgeyBhcHBEZXRhaWxzQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9hcHAnO1xuaW1wb3J0IHsgYW5hbHl0aWNzQ29udGV4dEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuaW1wb3J0IHtcbiAgbWVzc2FnZXNBdG9tLFxuICBwZW5kaW5nUmVzcG9uc2VBdG9tLFxuICByZXF1ZXN0RmFpbHVyZUF0b20sXG4gIHJlc3BvbnNlU3RyZWFtaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxufSBmcm9tICdzcmMvYXRvbXMvY2hhdC9jaGF0U3RhdGUnO1xuaW1wb3J0IHsgdXNlQW1wbGl0dWRlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlTWVzc2FnZUludGVyY2VwdG9yIH0gZnJvbSAnc3JjL2ludGVyY2VwdG9ycy91c2VNZXNzYWdlSW50ZXJjZXB0b3InO1xuaW1wb3J0IHtcbiAgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSxcbn0gZnJvbSAnc3JjL3NlcnZpY2VzL2FtcGxpdHVkZVNlcnZpY2UvYW1wbGl0dWRlU2VydmljZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IFN0YXR1c0NvZGVFcnJvciB9IGZyb20gJy4vc3RhdHVzQ29kZUVycm9yJztcblxuaW50ZXJmYWNlIFNhbGVzQWdlbnRTZXJ2aWNlIHtcbiAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkOiAocGF5bG9hZDoge1xuICAgIHVzZXJFdmVudHM6IFVzZXJFdmVudFtdO1xuICAgIGdlbmVyYXRpb25QYXJhbXM/OiBHZW5lcmF0aW9uUGFyYW1zO1xuICB9KSA9PiBOZXh0TWVzc2FnZVJlcXVlc3Q7XG4gIGdldFN0cmVhbWluZ1Jlc3BvbnNlczogKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3VnZ2VzdGlvbnM6IChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IFByb21pc2U8dm9pZD47XG4gIGh5ZHJhdGVNZXNzYWdlczogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgaW5wdXRQcm9wc1RvVHJhY2tpbmdQcm9wcyA9IChcbiAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBbdXNlckV2ZW50XSA9IHBheWxvYWQudXNlckV2ZW50cyB8fCBbXTtcbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZV9pZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICB1c2VyX2V2ZW50X3R5cGU6ICdzdWdnZXN0aW9uX2NsaWNrZWQnLFxuICAgICAgdXNlcl9xdWVyeTogdXNlckV2ZW50LmF0dHJpYnV0ZXMuY29udGVudCxcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZV9pZDogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICB1c2VyX2V2ZW50X3R5cGU6ICdxdWVyeV90eXBlZCcsXG4gICAgICB1c2VyX3F1ZXJ5OiB1c2VyRXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbmNvbnN0IGlucHV0UHJvcHNUb0Vudml2ZVRyYWNraW5nUHJvcHMgPSAoXG4gIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgW3VzZXJFdmVudF0gPSBwYXlsb2FkLnVzZXJFdmVudHMgfHwgW107XG4gIGlmICh1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjaGF0LnJlcXVlc3RfdHlwZSc6ICdzdWdnZXN0aW9uJyxcbiAgICAgICdjaGF0LnJlcXVlc3RfaWQnOiB1c2VyRXZlbnQuZXZlbnRJZCxcbiAgICAgICdjaGF0LnJlcXVlc3RfdGV4dCc6IHVzZXJFdmVudC5hdHRyaWJ1dGVzLmNvbnRlbnQsXG4gICAgICAnY2hhdC5zdWdnZXN0aW9uX2lkJzogdXNlckV2ZW50LmF0dHJpYnV0ZXMuc3VnZ2VzdGlvbklkLFxuICAgICAgJ2NoYXQudXNlcl90eXBlZCc6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKHVzZXJFdmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICAnY2hhdC5yZXF1ZXN0X3R5cGUnOiAndGV4dCcsXG4gICAgICAnY2hhdC5yZXF1ZXN0X2lkJzogdXNlckV2ZW50LmV2ZW50SWQsXG4gICAgICAnY2hhdC5yZXF1ZXN0X3RleHQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICAgICdjaGF0LnVzZXJfdHlwZWQnOiB1c2VyRXZlbnQuYXR0cmlidXRlcy51c2VyVHlwZWQsXG4gICAgfTtcbiAgfVxuICBpZiAoXG4gICAgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QYWdlVmlzaXQgfHxcbiAgICB1c2VyRXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0IHx8XG4gICAgdXNlckV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdFxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2NoYXQucmVxdWVzdF9pZCc6IHVzZXJFdmVudC5ldmVudElkLFxuICAgICAgJ2NoYXQucmVxdWVzdF90eXBlJzogJ3BhZ2VfdmlzaXQnLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge307XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlQYXJhbSA9IChrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgcmV0dXJuIHVybE9iai5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG59O1xuXG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoX2Vycm9yOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKF9lcnJvciBpbnN0YW5jZW9mIFN0YXR1c0NvZGVFcnJvcikge1xuICAgIGlmIChfZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDIzKSB7XG4gICAgICByZXR1cm4gJ0R1ZSB0byB2aW9sYXRpb24gb2YgdGVybXMgYW5kIHNlcnZpY2VzLCB0aGlzIHNlc3Npb24gaGFzIGJlZW4gdGVybWluYXRlZC4nO1xuICAgIH1cbiAgICAvLyBLZWVwaW5nIHRoZSA0MjkgZXJyb3IgbWVzc2FnZXMgYXMgdGhlIGdlbmVyaWMgZXJyb3IgbWVzc2FnZSBmb3Igbm93LlxuICAgIC8vIGlmIChfZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgLy8gICByZXR1cm4gXCJJJ20gc29ycnkhIFRoZSBzeXN0ZW0gaXMgYnVzeSByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbWludXRlcy5cIjtcbiAgICAvLyB9XG4gIH1cblxuICByZXR1cm4gXCJJJ20gc29ycnkhIEknbSBoYXZpbmcgdHJvdWJsZSByaWdodCBub3cuIFBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIG9yIHRyeSBhZ2FpbiBpbiBhIG1vbWVudC5cIjtcbn07XG5cbmNvbnN0IGhhbmRsZVN0cmVhbWluZ0Vycm9yID0gKFxuICBfZXJyb3I6IHVua25vd24sXG4gIHNldFJlcXVlc3RGYWlsdXJlOiAoZmFpbGVkOiBib29sZWFuKSA9PiB2b2lkLFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4pID0+IHtcbiAgc2V0UmVxdWVzdEZhaWx1cmUodHJ1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKF9lcnJvcik7XG4gIHNldE1lc3NhZ2VzKHByZXYgPT4gW1xuICAgIC4uLnByZXYsXG4gICAgW1xuICAgICAge1xuICAgICAgICBpZDogdXVpZCgpLFxuICAgICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlRleHQsXG4gICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGNvbnRlbnQ6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59O1xuXG5jb25zdCB1cGRhdGVNZXNzYWdlU3RhdGUgPSAoXG4gIG1lc3NhZ2U6IE1lc3NhZ2UsXG4gIGxhc3RNZXNzYWdlOiBNZXNzYWdlLFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4pOiBNZXNzYWdlID0+IHtcbiAgaWYgKGxhc3RNZXNzYWdlID09IG51bGwpIHtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LCBbbWVzc2FnZV1dKTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuICBpZiAobGFzdE1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dCAmJiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlRleHQpIHtcbiAgICBjb25zdCBuZXdNZXNzYWdlID0ge1xuICAgICAgLi4ubGFzdE1lc3NhZ2UsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5sYXN0TWVzc2FnZS5tZXRhZGF0YSxcbiAgICAgICAgY29udGVudDogbGFzdE1lc3NhZ2UubWV0YWRhdGEuY29udGVudCArIG1lc3NhZ2UubWV0YWRhdGEuY29udGVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGxhc3RUdXJuID0gcHJldltwcmV2Lmxlbmd0aCAtIDFdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4ucHJldi5zbGljZSgwLCBwcmV2Lmxlbmd0aCAtIDEpLFxuICAgICAgICBbLi4ubGFzdFR1cm4uc2xpY2UoMCwgbGFzdFR1cm4ubGVuZ3RoIC0gMSksIG5ld01lc3NhZ2VdLFxuICAgICAgXTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3TWVzc2FnZTtcbiAgfVxuICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LnNsaWNlKDAsIHByZXYubGVuZ3RoIC0gMSksIFsuLi5wcmV2W3ByZXYubGVuZ3RoIC0gMV0sIG1lc3NhZ2VdXSk7XG4gIHJldHVybiBtZXNzYWdlO1xufTtcblxuY29uc3QgcHJvY2Vzc1N0cmVhbWluZ1Jlc3BvbnNlID0gYXN5bmMgKFxuICBzdHJlYW06IEFzeW5jSXRlcmFibGU8UmVzcG9uc2U+LFxuICBtZXNzYWdlSW50ZXJjZXB0b3I6IHsgaW50ZXJjZXB0OiAocmVzcG9uc2U/OiBSZXNwb25zZSkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBzZXRNZXNzYWdlczogKHVwZGF0ZXI6IChwcmV2OiBNZXNzYWdlW11bXSkgPT4gTWVzc2FnZVtdW10pID0+IHZvaWQsXG4gIHNldFJlc3BvbnNlU3RyZWFtaW5nOiAocmVzcG9uc2VTdHJlYW1pbmc6IGJvb2xlYW4pID0+IHZvaWQsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZ1tdPj4gPT4ge1xuICBsZXQgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIHNldFJlc3BvbnNlU3RyZWFtaW5nKHRydWUpO1xuICBjb25zdCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nW10+ID0ge307XG4gIGNvbnN0IHByb2R1Y3RJZHMgPSBbXTtcblxuICBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHN0cmVhbSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAobWVzc2FnZUludGVyY2VwdG9yLmludGVyY2VwdChyZXNwb25zZSkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVzcG9uc2UgZnJvbSBzdHJlYW0nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VGcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHRyYW5zZm9ybSBBUEkgcmVzcG9uc2UgdG8gY2xpZW50IG1lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QpIHtcbiAgICAgICAgY29uc3QgY2FyZHNDb3VudGVyID0gKHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSBhcyBudW1iZXIpIHx8IDA7XG4gICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfY2FyZHNfcmV0dXJuZWQnXSA9IGNhcmRzQ291bnRlciArIDE7XG5cbiAgICAgICAgY29uc3QgcHJvZHVjdElkcyA9IHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfaWRzX3JldHVybmVkJ10gYXMgc3RyaW5nW107XG4gICAgICAgIGlmICghcHJvZHVjdElkcykge1xuICAgICAgICAgIHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnByb2R1Y3RfaWRzX3JldHVybmVkJ10gPSBbbWVzc2FnZS5tZXRhZGF0YS5pZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvZHVjdElkcy5wdXNoKG1lc3NhZ2UubWV0YWRhdGEuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5SZXZpZXcpIHtcbiAgICAgICAgY29uc3QgY2FyZHNDb3VudGVyID0gKHJlc3BvbnNlQW5hbHl0aWNzWydjaGF0LnJldmlld19jYXJkc19yZXR1cm5lZCddIGFzIG51bWJlcikgfHwgMDtcbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3NbJ2NoYXQucmV2aWV3X2NhcmRzX3JldHVybmVkJ10gPSBjYXJkc0NvdW50ZXIgKyAxO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBzdXBwb3J0IGZvciBDaGF0U2VhcmNoIG1lc3NhZ2VzIGF0IHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICAvLyBQZXJoYXBzIHdlIGFkZCBzdXBwb3J0IGJhY2sgaW4gdGhlIGZ1dHVyZVxuICAgICAgLy8gaWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCkge1xuICAgICAgLy8gICBoYW5kbGVTZWFyY2hSZXN1bHRzKG1lc3NhZ2UpO1xuICAgICAgLy8gICBoYXNTZWFyY2hSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIC8vICAgc2V0U2VhcmNoSXNMb2FkaW5nKGZhbHNlKTsgLy8gVXBkYXRlIHNlYXJjaCBsb2FkaW5nIGltbWVkaWF0ZWx5IHdoZW4gcmVzdWx0cyBhcmUgZGV0ZWN0ZWRcbiAgICAgIC8vIH1cblxuICAgICAgbGFzdE1lc3NhZ2UgPSB1cGRhdGVNZXNzYWdlU3RhdGUobWVzc2FnZSwgbGFzdE1lc3NhZ2UhLCBzZXRNZXNzYWdlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKGBbc3BpZmZ5LWFpXSBGYWlsZWQgdG8gZ2VuZXJhdGUgcmVzcG9uc2VzIGZyb20gc3RyZWFtYCwgZXJyb3IsIHtcbiAgICAgICAgbGFzdFJlc3BvbnNlOiBsYXN0TWVzc2FnZSxcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICB9KTtcbiAgICB9XG4gICAgc2V0UmVzcG9uc2VTdHJlYW1pbmcoZmFsc2UpO1xuICB9XG4gIHJldHVybiByZXNwb25zZUFuYWx5dGljcztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTYWxlc0FnZW50U2VydmljZTogKCkgPT4gU2FsZXNBZ2VudFNlcnZpY2UgPSAoKSA9PiB7XG4gIGNvbnN0IHNldFJlcXVlc3RGYWlsdXJlID0gdXNlU2V0QXRvbShyZXF1ZXN0RmFpbHVyZUF0b20pO1xuICBjb25zdCBzZXRNZXNzYWdlcyA9IHVzZVNldEF0b20obWVzc2FnZXNBdG9tKTtcbiAgY29uc3Qgc2V0U3VnZ2VzdGlvbnMgPSB1c2VTZXRBdG9tKHN1Z2dlc3Rpb25zQXRvbSk7XG4gIGNvbnN0IHNldFBlbmRpbmdSZXNwb25zZSA9IHVzZVNldEF0b20ocGVuZGluZ1Jlc3BvbnNlQXRvbSk7XG4gIGNvbnN0IHNldFJlc3BvbnNlU3RyZWFtaW5nID0gdXNlU2V0QXRvbShyZXNwb25zZVN0cmVhbWluZ0F0b20pO1xuICBjb25zdCBhbmFseXRpY3NDb250ZXh0ID0gdXNlQXRvbVZhbHVlKGFuYWx5dGljc0NvbnRleHRBdG9tKTtcbiAgY29uc3QgbWVzc2FnZUludGVyY2VwdG9yID0gdXNlTWVzc2FnZUludGVyY2VwdG9yKCk7XG4gIGNvbnN0IHsgdHJhY2tFdmVudCB9ID0gdXNlQW1wbGl0dWRlKCk7XG5cbiAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VBdG9tVmFsdWUoYXBwRGV0YWlsc0F0b20pO1xuXG4gIGNvbnN0IGNyZWF0ZVJlc3BvbnNlUGF5bG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgICh7XG4gICAgICB1c2VyRXZlbnRzLFxuICAgICAgZ2VuZXJhdGlvblBhcmFtcyxcbiAgICB9OiB7XG4gICAgICB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXTtcbiAgICAgIGdlbmVyYXRpb25QYXJhbXM/OiBHZW5lcmF0aW9uUGFyYW1zO1xuICAgIH0pOiBOZXh0TWVzc2FnZVJlcXVlc3QgPT4ge1xuICAgICAgY29uc3QgZmVhdHVyZUZsYWdzID0gZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2U/LmdldEZlYXR1cmVGbGFncygpIHx8IHt9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZUNvbmZpZ1ZlcnNpb24gPVxuICAgICAgICBnZXRRdWVyeVBhcmFtKCdzcGlmZnlfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgICBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fFxuICAgICAgICB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBvdmVycmlkZU1vZGVsRGF0ZXRpbWUgPSBnZXRRdWVyeVBhcmFtKCdvdmVycmlkZV9tb2RlbF9kYXRldGltZScpIHx8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHMsXG4gICAgICAgIGZlYXR1cmVGbGFncyxcbiAgICAgICAgZ2VuZXJhdGlvblBhcmFtcyxcbiAgICAgICAgb3ZlcnJpZGVDb25maWdWZXJzaW9uLFxuICAgICAgICBvdmVycmlkZU1vZGVsRGF0ZXRpbWUsXG4gICAgICB9O1xuICAgIH0sXG4gICAgW2NvbnRleHQsIGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlXSxcbiAgKTtcblxuICBjb25zdCBnZXRTdHJlYW1pbmdSZXNwb25zZXMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHN1Y2Nlc3NmdWxSZXNwb25zZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgIHNldFBlbmRpbmdSZXNwb25zZSh0cnVlKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRSZXNwb25zZVN0cmVhbWluZyhwYXlsb2FkKTtcbiAgICAgIGxldCByZXNwb25zZUFuYWx5dGljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXF1ZXN0RmFpbHVyZShmYWxzZSk7XG5cbiAgICAgICAgcmVzcG9uc2VBbmFseXRpY3MgPSBhd2FpdCBwcm9jZXNzU3RyZWFtaW5nUmVzcG9uc2UoXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgICAgICBzZXRNZXNzYWdlcyxcbiAgICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyxcbiAgICAgICAgKTtcbiAgICAgICAgc3VjY2Vzc2Z1bFJlc3BvbnNlID0gdHJ1ZTtcblxuICAgICAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgdGhlIENocm9tZSBFeHRlbnNpb24gY29tbXVuaWNhdGlvblxuICAgICAgICAvLyBhd2FpdCBsb2dCdW5kbGVFdmVudCh7XG4gICAgICAgIC8vICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgLy8gICBldmVudDogJ05FWFRfUkVTUE9OU0VfU1VDQ0VTUycsXG4gICAgICAgIC8vICAgY29udGV4dDoge1xuICAgICAgICAvLyAgICAgdHlwZTogJ25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIGVuZHBvaW50OiAnL3YxL25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgLy8gICAgIHJlc3BvbnNlVGltZSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignZXJyb3IgZ2V0dGluZyBzdHJlYW1pbmcgcmVzcG9uc2VzJywgZSk7XG4gICAgICAgIHN1Y2Nlc3NmdWxSZXNwb25zZSA9IGZhbHNlO1xuICAgICAgICAvLyBMb2cgZmFpbGVkIG5leHRfcmVzcG9uc2VzIGNhbGxcbiAgICAgICAgLy8gY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgLy8gYXdhaXQgbG9nQnVuZGxlRXZlbnQoe1xuICAgICAgICAvLyAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAvLyAgIGV2ZW50OiAnTkVYVF9SRVNQT05TRV9GQUlMRUQnLFxuICAgICAgICAvLyAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZ2V0IHN0cmVhbWluZyByZXNwb25zZTogJHtlfWAsXG4gICAgICAgIC8vICAgY29udGV4dDoge1xuICAgICAgICAvLyAgICAgdHlwZTogJ25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIGVuZHBvaW50OiAnL3YxL25leHRfcmVzcG9uc2VzJyxcbiAgICAgICAgLy8gICAgIHJlc3BvbnNlVGltZSxcbiAgICAgICAgLy8gICAgIGVycm9yOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgIC8vICAgfSxcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgaGFuZGxlU3RyZWFtaW5nRXJyb3IoZSwgc2V0UmVxdWVzdEZhaWx1cmUsIHNldE1lc3NhZ2VzKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIExvZyBuZXh0X3Jlc3BvbnNlcyBjYWxsXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0QXNzaXN0YW50UmVzcG9uc2UsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgcmVzcG9uc2VUaW1lTXM6IHJlc3BvbnNlVGltZS50b1N0cmluZygpLFxuICAgICAgICAgICAgc3VjY2Vzc2Z1bF9yZXNwb25zZTogc3VjY2Vzc2Z1bFJlc3BvbnNlLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wc1RvVHJhY2tpbmdQcm9wcyhwYXlsb2FkKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLkNoYXRSZXNwb25zZSxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICAuLi5hbmFseXRpY3NDb250ZXh0LFxuICAgICAgICAgICAgJ2NoYXQucmVzcG9uc2VfdGltZV9tcyc6IHJlc3BvbnNlVGltZS50b1N0cmluZygpLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wc1RvRW52aXZlVHJhY2tpbmdQcm9wcyhwYXlsb2FkKSxcbiAgICAgICAgICAgIC4uLnJlc3BvbnNlQW5hbHl0aWNzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRQZW5kaW5nUmVzcG9uc2UoZmFsc2UpO1xuICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyhmYWxzZSk7XG4gICAgICAgIC8vIGxvZ1BlcmZNZXRyaWMoUGVyZk1ldHJpY3NFdmVudHMuRmlyc3RSZXNwb25zZUNvbXBsZXRlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhbmFseXRpY3NDb250ZXh0LFxuICAgICAgdHJhY2tFdmVudCxcbiAgICAgIHNldFJlc3BvbnNlU3RyZWFtaW5nLFxuICAgICAgLy8gbG9nUGVyZk1ldHJpYyxcbiAgICAgIHNldFJlcXVlc3RGYWlsdXJlLFxuICAgICAgc2V0U3VnZ2VzdGlvbnMsXG4gICAgICBtZXNzYWdlSW50ZXJjZXB0b3IsXG4gICAgICBzZXRNZXNzYWdlcyxcbiAgICAgIHNldFBlbmRpbmdSZXNwb25zZSxcbiAgICBdLFxuICApO1xuXG4gIGNvbnN0IGdldFN1Z2dlc3Rpb25zID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgbmV3U3VnZ2VzdGlvbnMgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXROZXh0U3VnZ2VzdGlvbnMocGF5bG9hZCk7XG4gICAgICBzZXRTdWdnZXN0aW9ucyhuZXdTdWdnZXN0aW9ucyk7XG4gICAgfSxcbiAgICBbc2V0U3VnZ2VzdGlvbnNdLFxuICApO1xuXG4gIGNvbnN0IGh5ZHJhdGVNZXNzYWdlcyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IG9yZ0lkLCBjaGF0SWQsIHVzZXJJZCB9ID0gY29udGV4dDtcbiAgICBjb25zdCB7IG1lc3NhZ2VzOiBleGlzdGluZ01lc3NhZ2VzIH0gPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRSZXNwb25zZXMoXG4gICAgICBvcmdJZCxcbiAgICAgIGNoYXRJZCxcbiAgICAgIHVzZXJJZCxcbiAgICApO1xuICAgIHNldE1lc3NhZ2VzKFsuLi5leGlzdGluZ01lc3NhZ2VzXSk7XG4gIH0sIFtjb250ZXh0LCBzZXRNZXNzYWdlc10pO1xuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkLFxuICAgIGdldFN0cmVhbWluZ1Jlc3BvbnNlcyxcbiAgICBnZXRTdWdnZXN0aW9ucyxcbiAgICBoeWRyYXRlTWVzc2FnZXMsXG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZDQSxNQUFNLDZCQUNKLFlBQ3dDO0NBQ3hDLE1BQU0sQ0FBQyxhQUFhLFFBQVEsY0FB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
@@ -3,9 +3,9 @@ const require_logger = require('../../application/logging/logger.cjs');
3
3
  const require_atoms_envive_enviveConfig = require('../../atoms/envive/enviveConfig.cjs');
4
4
  const require_sessionExceptions = require('../../types/exceptions/sessionExceptions.cjs');
5
5
  const require_unsupportedProductExceptions = require('../../types/exceptions/unsupportedProductExceptions.cjs');
6
- const require_searchServiceAdapter = require('../../atoms/search/searchServiceAdapter.cjs');
7
6
  const require_enviveConfigContext = require('../enviveConfigContext/enviveConfigContext.cjs');
8
7
  const require_useAppDetails = require('../../hooks/AppDetails/useAppDetails.cjs');
8
+ const require_searchServiceAdapter = require('../../atoms/search/searchServiceAdapter.cjs');
9
9
  let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
10
10
  let react = require("react");
11
11
  react = require_rolldown_runtime.__toESM(react);
@@ -2,9 +2,9 @@ import logger_default from "../../application/logging/logger.js";
2
2
  import { baseUrlAtom } from "../../atoms/envive/enviveConfig.js";
3
3
  import { SessionRestartRequired } from "../../types/exceptions/sessionExceptions.js";
4
4
  import { UnsupportedProductException } from "../../types/exceptions/unsupportedProductExceptions.js";
5
- import { clearSearchServiceFunction, setSearchServiceFunction } from "../../atoms/search/searchServiceAdapter.js";
6
5
  import { useEnviveConfig } from "../enviveConfigContext/enviveConfigContext.js";
7
6
  import { useAppDetails } from "../../hooks/AppDetails/useAppDetails.js";
7
+ import { clearSearchServiceFunction, setSearchServiceFunction } from "../../atoms/search/searchServiceAdapter.js";
8
8
  import { Configuration, ResponseCategory, ResponseError, SearchApi } from "@spiffy-ai/commerce-api-client";
9
9
  import React, { createContext, useCallback, useContext, useEffect, useMemo } from "react";
10
10
  import { jsx } from "react/jsx-runtime";