@envive-ai/react-hooks 0.2.6-alpha-arthur-1 → 0.2.6-alpha-arthur-2

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 (166) hide show
  1. package/dist/{AmplitudeOperations-_uIb5QED.cjs → AmplitudeOperations-6Y7GejD-.cjs} +2 -2
  2. package/dist/{AmplitudeOperations-CXU93q_4.js → AmplitudeOperations-DOEgdx-a.js} +2 -2
  3. package/dist/{NewOrgConfig-CUQGpmw9.js → NewOrgConfig-C_1T1iOt.js} +2 -2
  4. package/dist/{NewOrgConfig-DD0oloeK.cjs → NewOrgConfig-D2Kvqa1z.cjs} +2 -2
  5. package/dist/{TrackComponentVisibleEvent-D-pvNVOP.js → TrackComponentVisibleEvent-BvDOoSsc.js} +2 -2
  6. package/dist/{TrackComponentVisibleEvent-D-hN3owz.cjs → TrackComponentVisibleEvent-CcZ6l_cs.cjs} +2 -2
  7. package/dist/amplitudeContext-CH-Rtn8y.js +236 -0
  8. package/dist/amplitudeContext-CZXdr3HG.cjs +252 -0
  9. package/dist/{app-BT3g-mDp.js → app-DEnOfim0.js} +5 -5
  10. package/dist/{app-DxwdFQlv.cjs → app-DOEeLKrt.cjs} +5 -5
  11. package/dist/application/utils/index.cjs +3 -3
  12. package/dist/application/utils/index.d.cts +3 -3
  13. package/dist/application/utils/index.d.ts +2 -2
  14. package/dist/application/utils/index.js +3 -3
  15. package/dist/{atomStore-CZKe3itM.cjs → atomStore-BQVO5haU.cjs} +1 -1
  16. package/dist/{atomStore-BuopbV9k.js → atomStore-CfzCqWB9.js} +1 -1
  17. package/dist/atoms/app/index.cjs +8 -8
  18. package/dist/atoms/app/index.d.cts +7 -7
  19. package/dist/atoms/app/index.d.ts +7 -7
  20. package/dist/atoms/app/index.js +8 -8
  21. package/dist/atoms/atomStore/index.cjs +1 -1
  22. package/dist/atoms/atomStore/index.d.ts +1 -1
  23. package/dist/atoms/atomStore/index.js +1 -1
  24. package/dist/atoms/chat/index.cjs +9 -9
  25. package/dist/atoms/chat/index.d.cts +31 -31
  26. package/dist/atoms/chat/index.d.ts +32 -32
  27. package/dist/atoms/chat/index.js +9 -9
  28. package/dist/atoms/globalSearch/index.d.ts +6 -6
  29. package/dist/atoms/org/index.cjs +2 -2
  30. package/dist/atoms/org/index.d.cts +16 -16
  31. package/dist/atoms/org/index.d.ts +15 -15
  32. package/dist/atoms/org/index.js +2 -2
  33. package/dist/atoms/search/index.cjs +5 -5
  34. package/dist/atoms/search/index.d.cts +14 -14
  35. package/dist/atoms/search/index.d.ts +14 -14
  36. package/dist/atoms/search/index.js +5 -5
  37. package/dist/atoms/search/utils.cjs +1 -1
  38. package/dist/atoms/search/utils.d.ts +1 -1
  39. package/dist/atoms/search/utils.js +1 -1
  40. package/dist/{cdnContext-D-qi0lub.js → cdnContext-CJ2BNLAD.js} +2 -2
  41. package/dist/{cdnContext-DIVgBnsl.cjs → cdnContext-lkC-AE6A.cjs} +2 -2
  42. package/dist/{chat-ZaY3KY-R.js → chat-ChbwDr7k.js} +2 -2
  43. package/dist/{chat-rhEjVfrd.cjs → chat-FCaaEJvJ.cjs} +2 -2
  44. package/dist/contexts/amplitudeContext/index.cjs +11 -11
  45. package/dist/contexts/amplitudeContext/index.js +11 -11
  46. package/dist/contexts/cdnContext/index.cjs +2 -2
  47. package/dist/contexts/cdnContext/index.d.cts +1 -1
  48. package/dist/contexts/cdnContext/index.js +2 -2
  49. package/dist/contexts/enviveConfigContext/index.cjs +2 -2
  50. package/dist/contexts/enviveConfigContext/index.js +2 -2
  51. package/dist/contexts/enviveCssContext/index.cjs +7 -7
  52. package/dist/contexts/enviveCssContext/index.d.cts +1 -1
  53. package/dist/contexts/enviveCssContext/index.js +7 -7
  54. package/dist/contexts/featureFlagContext/index.cjs +2 -2
  55. package/dist/contexts/featureFlagContext/index.d.cts +1 -1
  56. package/dist/contexts/featureFlagContext/index.js +2 -2
  57. package/dist/contexts/featureFlagServiceContext/index.cjs +1 -1
  58. package/dist/contexts/featureFlagServiceContext/index.js +1 -1
  59. package/dist/contexts/graphqlContext/index.cjs +2 -2
  60. package/dist/contexts/graphqlContext/index.js +2 -2
  61. package/dist/contexts/newOrgConfigContext/index.cjs +6 -6
  62. package/dist/contexts/newOrgConfigContext/index.js +6 -6
  63. package/dist/contexts/searchContext/index.cjs +14 -14
  64. package/dist/contexts/searchContext/index.js +14 -14
  65. package/dist/contexts/shopifyUrlContext/index.cjs +2 -2
  66. package/dist/contexts/shopifyUrlContext/index.js +2 -2
  67. package/dist/contexts/systemSettingsContext/index.cjs +2 -2
  68. package/dist/contexts/systemSettingsContext/index.d.cts +2 -2
  69. package/dist/contexts/systemSettingsContext/index.d.ts +2 -2
  70. package/dist/contexts/systemSettingsContext/index.js +2 -2
  71. package/dist/contexts/userIdentityContext/index.cjs +8 -8
  72. package/dist/contexts/userIdentityContext/index.js +8 -8
  73. package/dist/{domObserver-LCBj1xw4.cjs → domObserver-C2oQO8vi.cjs} +1 -1
  74. package/dist/{domObserver-CVhsCSkS.js → domObserver-DNeeSh1F.js} +1 -1
  75. package/dist/{enviveConfig-Cwlp7-Qz.js → enviveConfig-Ciq4ASoV.js} +1 -1
  76. package/dist/{enviveConfig-CQ_8mT-g.cjs → enviveConfig-Dp80h9yu.cjs} +1 -1
  77. package/dist/{enviveConfigContext-DHEs077z.cjs → enviveConfigContext-0PQkfMQ6.cjs} +2 -2
  78. package/dist/{enviveConfigContext-CIavPzcm.js → enviveConfigContext-CMDiVsln.js} +2 -2
  79. package/dist/exceptions/index.d.cts +1 -1
  80. package/dist/exceptions/index.d.ts +1 -1
  81. package/dist/featureFlagServiceContext-ClnlCJV5.d.cts +1 -1
  82. package/dist/{featureFlagServiceContext-Dr8Cw23n.js → featureFlagServiceContext-Cvp7NlpC.js} +1 -1
  83. package/dist/{featureFlagServiceContext-rxZhpdEj.cjs → featureFlagServiceContext-DHtkQAtq.cjs} +1 -1
  84. package/dist/{graphqlContext-CpHMbKoX.js → graphqlContext-0cg9fEUw.js} +2 -2
  85. package/dist/{graphqlContext-B8wuRZcp.cjs → graphqlContext-ChXlE8Ul.cjs} +2 -2
  86. package/dist/hooks/AmplitudeOperations/index.cjs +12 -12
  87. package/dist/hooks/AmplitudeOperations/index.js +12 -12
  88. package/dist/hooks/AppDetails/index.cjs +11 -11
  89. package/dist/hooks/AppDetails/index.js +11 -11
  90. package/dist/hooks/CdnOperations/index.cjs +2 -2
  91. package/dist/hooks/CdnOperations/index.js +2 -2
  92. package/dist/hooks/ChatToggle/index.cjs +12 -12
  93. package/dist/hooks/ChatToggle/index.js +12 -12
  94. package/dist/hooks/ChatToggleAnalytics/index.cjs +12 -12
  95. package/dist/hooks/ChatToggleAnalytics/index.d.cts +1 -1
  96. package/dist/hooks/ChatToggleAnalytics/index.d.ts +1 -1
  97. package/dist/hooks/ChatToggleAnalytics/index.js +12 -12
  98. package/dist/hooks/CustomerSupportHandoff/index.d.cts +1 -1
  99. package/dist/hooks/Debounce/index.d.cts +1 -1
  100. package/dist/hooks/Debounce/index.d.ts +1 -1
  101. package/dist/hooks/ElementObserver/index.cjs +1 -1
  102. package/dist/hooks/ElementObserver/index.js +1 -1
  103. package/dist/hooks/GrabAndScroll/index.d.cts +2 -2
  104. package/dist/hooks/GraphQLConfig/index.cjs +3 -3
  105. package/dist/hooks/GraphQLConfig/index.js +3 -3
  106. package/dist/hooks/IdentifyUser/index.cjs +8 -8
  107. package/dist/hooks/IdentifyUser/index.js +8 -8
  108. package/dist/hooks/ImageResolver/index.cjs +1 -1
  109. package/dist/hooks/ImageResolver/index.d.ts +1 -1
  110. package/dist/hooks/ImageResolver/index.js +1 -1
  111. package/dist/hooks/Intersection/index.d.cts +1 -1
  112. package/dist/hooks/MessageFilter/index.d.cts +1 -1
  113. package/dist/hooks/NewOrgConfig/index.cjs +7 -7
  114. package/dist/hooks/NewOrgConfig/index.d.cts +2 -2
  115. package/dist/hooks/NewOrgConfig/index.d.ts +2 -2
  116. package/dist/hooks/NewOrgConfig/index.js +7 -7
  117. package/dist/hooks/Search/index.cjs +15 -15
  118. package/dist/hooks/Search/index.js +15 -15
  119. package/dist/hooks/SearchOperations/index.cjs +14 -14
  120. package/dist/hooks/SearchOperations/index.js +14 -14
  121. package/dist/hooks/ShopifyUrlOperations/index.cjs +2 -2
  122. package/dist/hooks/ShopifyUrlOperations/index.js +2 -2
  123. package/dist/hooks/SystemSettingsContext/index.cjs +2 -2
  124. package/dist/hooks/SystemSettingsContext/index.d.cts +4 -4
  125. package/dist/hooks/SystemSettingsContext/index.d.ts +4 -4
  126. package/dist/hooks/SystemSettingsContext/index.js +2 -2
  127. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +12 -12
  128. package/dist/hooks/TrackComponentVisibleEvent/index.js +12 -12
  129. package/dist/hooks/UpdateAnalyticsProps/index.cjs +11 -11
  130. package/dist/hooks/UpdateAnalyticsProps/index.js +11 -11
  131. package/dist/hooks/utils.d.ts +1 -1
  132. package/dist/index-CMZcE7pk.d.cts +1 -1
  133. package/dist/index-CsmO1rDH.d.ts +1 -1
  134. package/dist/index-DtzPIcQp.d.ts +1 -1
  135. package/dist/index-bEjLKG_Q.d.ts +1 -1
  136. package/dist/{newOrgConfigAtom-C8h3w_Ji.js → newOrgConfigAtom-BuQE_zPK.js} +1 -1
  137. package/dist/{newOrgConfigAtom-CDttTiuu.cjs → newOrgConfigAtom-rrYHmp1b.cjs} +1 -1
  138. package/dist/{newOrgConfigContext-BdzDnzUM.js → newOrgConfigContext-D-gU5ppl.js} +5 -5
  139. package/dist/{newOrgConfigContext-cWeJAT6E.cjs → newOrgConfigContext-d3RHl430.cjs} +5 -5
  140. package/dist/nodeSelector-BYEAyrsj.d.cts +1 -1
  141. package/dist/{org-CScQqL4k.js → org-15F128Ah.js} +1 -1
  142. package/dist/{org-BNs_maoW.cjs → org-CIFgIcO4.cjs} +1 -1
  143. package/dist/{search-CsXXamht.js → search--80x6CfL.js} +4 -4
  144. package/dist/{search-DHhDpeQU.cjs → search-Ch6LKNh4.cjs} +4 -4
  145. package/dist/{searchContext-B5ZNLtvd.js → searchContext-CSmiMhhs.js} +5 -5
  146. package/dist/{searchContext-SFvF_Y8J.cjs → searchContext-DuB2drQx.cjs} +5 -5
  147. package/dist/{searchServiceAdapter-BkvDIhV8.js → searchServiceAdapter-B0h7psvh.js} +1 -1
  148. package/dist/{searchServiceAdapter-C4zzBUl0.cjs → searchServiceAdapter-BclWy4fE.cjs} +1 -1
  149. package/dist/{shopifyUrlContext-COc1eDR_.cjs → shopifyUrlContext-Bw1kAZ2P.cjs} +2 -2
  150. package/dist/{shopifyUrlContext-CToAt_98.js → shopifyUrlContext-DnJiUmMA.js} +2 -2
  151. package/dist/{systemSettingsContext-D9iNGz5v.js → systemSettingsContext-CyanI1pd.js} +2 -2
  152. package/dist/{systemSettingsContext-DdV7Yte8.cjs → systemSettingsContext-sM46G65r.cjs} +2 -2
  153. package/dist/{urlsParser-Dax4iVNC.cjs → urlsParser-bb8ciRFg.cjs} +1 -1
  154. package/dist/{urlsParser-NAp2LwWP.js → urlsParser-v_1DKvyf.js} +1 -1
  155. package/dist/{useAppDetails-xPVs6fW7.js → useAppDetails-Ce_siNC2.js} +4 -4
  156. package/dist/{useAppDetails-D3T6kJY_.cjs → useAppDetails-Dyn-dAJJ.cjs} +4 -4
  157. package/dist/{useGraphQLConfig-BtPxjtxw.js → useGraphQLConfig-Btszi6cG.js} +2 -2
  158. package/dist/{useGraphQLConfig-B1DaVvFx.cjs → useGraphQLConfig-v9veUbvJ.cjs} +2 -2
  159. package/dist/{utils-DMwh3QbT.js → utils-BzR9AjY0.js} +1 -1
  160. package/dist/{utils-D3MjNkd3.cjs → utils-CLANMl4P.cjs} +1 -1
  161. package/dist/{utils-Buo4KU5l.cjs → utils-CqVRbvfN.cjs} +1 -1
  162. package/dist/{utils-BRNaQkCK.js → utils-DQhbbAnt.js} +1 -1
  163. package/package.json +1 -1
  164. package/src/contexts/amplitudeContext/amplitudeContext.tsx +3 -0
  165. package/dist/amplitudeContext-DFXeRauX.js +0 -233
  166. package/dist/amplitudeContext-DrFGH7Q7.cjs +0 -249
@@ -1,249 +0,0 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_events = require('./events-CgFGtanE.cjs');
3
- const require_dist = require('./dist-VxRI6eQv.cjs');
4
- const require_logger = require('./logger-BqHq67zN.cjs');
5
- const require_enviveConfig = require('./enviveConfig-CQ_8mT-g.cjs');
6
- const require_org = require('./org-BNs_maoW.cjs');
7
- const require_app = require('./app-DxwdFQlv.cjs');
8
- const require_localStorageContext = require('./localStorageContext-CWc5xJ6U.cjs');
9
- const require_enviveConfigContext = require('./enviveConfigContext-DHEs077z.cjs');
10
- const require_featureFlagServiceContext = require('./featureFlagServiceContext-rxZhpdEj.cjs');
11
- let react = require("react");
12
- react = require_chunk.__toESM(react);
13
- let jotai = require("jotai");
14
- jotai = require_chunk.__toESM(jotai);
15
- let react_jsx_runtime = require("react/jsx-runtime");
16
- react_jsx_runtime = require_chunk.__toESM(react_jsx_runtime);
17
- let __amplitude_analytics_browser = require("@amplitude/analytics-browser");
18
- __amplitude_analytics_browser = require_chunk.__toESM(__amplitude_analytics_browser);
19
-
20
- //#region src/contexts/amplitudeContext/amplitudeContext.tsx
21
- const AmplitudeContext = (0, react.createContext)(null);
22
- if (typeof window !== "undefined") window.AmplitudeReact = react.default;
23
- const AmplitudeProvider = ({ children }) => {
24
- const userId = (0, jotai.useAtomValue)(require_app.userIdAtom);
25
- const amplitudeApiKey = (0, jotai.useAtomValue)(require_enviveConfig.amplitudeApiKeyAtom);
26
- const dataResidency = (0, jotai.useAtomValue)(require_enviveConfig.dataResidencyAtom);
27
- const orgGaConfig = (0, jotai.useAtomValue)(require_org.orgAnalyticsGoogleAnalyticsConfigAtom);
28
- const env = (0, jotai.useAtomValue)(require_enviveConfig.envAtom);
29
- const contextSource = (0, jotai.useAtomValue)(require_enviveConfig.contextSourceAtom);
30
- (0, jotai.useAtomValue)(require_enviveConfig.identifyingPrefixAtom);
31
- const { getItem } = require_localStorageContext.useLocalStorage();
32
- const { publicKey, featureOverrides, variantUrlOverride, variantInfoOverride, show, orgShortName, featureGates } = require_enviveConfigContext.useEnviveConfig();
33
- const { featureFlagService } = require_featureFlagServiceContext.useFeatureFlagService();
34
- const [amplitudeClient, setAmplitudeClient] = react.default.useState(void 0);
35
- const [internalEventTrackingEnrichment, setInternalEventTrackingEnrichment] = react.default.useState(void 0);
36
- const [supplementalDefaultProps, setSupplementalDefaultProps] = react.default.useState({});
37
- const isReady = Boolean(userId && featureFlagService && amplitudeApiKey && userId);
38
- const getDefaultTrackingProps = (0, react.useCallback)(() => {
39
- const gatesProps = featureGates ? featureGates.reduce((acc, curr) => {
40
- if (curr.name && curr.value != null) return {
41
- ...acc,
42
- [`feature_gate.${curr.name}`]: curr.value
43
- };
44
- return acc;
45
- }, {}) : {};
46
- const experimentProps = {};
47
- return {
48
- ...gatesProps,
49
- ...experimentProps,
50
- ...supplementalDefaultProps,
51
- app_id: "commerce-chat-react-component",
52
- chat_id: getItem(require_dist.LocalStorageKeys.ChatId),
53
- env: env || "unknown",
54
- app_source: contextSource,
55
- "org.short_name": orgShortName,
56
- "user.id": userId,
57
- "cdp.user_id": null,
58
- "cdp.provider": null,
59
- "event.source": "web-browser",
60
- "event.type": "user-activity",
61
- "event.id": null,
62
- "event.channel": "web",
63
- "event.timestamp": null
64
- };
65
- }, [
66
- featureGates,
67
- supplementalDefaultProps,
68
- env,
69
- contextSource,
70
- orgShortName,
71
- userId
72
- ]);
73
- const eventPropsToPrefixedEventProps = (0, react.useCallback)((eventName, eventProps) => {
74
- const prefix = eventName.toLowerCase().replace(/\s+/g, "_");
75
- return Object.entries(eventProps).reduce((acc, [key, value$1]) => {
76
- acc[`${prefix}.${key}`] = value$1;
77
- return acc;
78
- }, {});
79
- }, []);
80
- const amplitudeSessionReplayInit = (0, react.useCallback)(() => {
81
- const isEnabled = Boolean(orgShortName === require_dist.OrgShortName.UniqueVintage && featureFlagService?.isClientSessionEnabled() && featureFlagService?.isFeatureGateEnabled(require_dist.FeatureGates.IsNewFeatureEnabled));
82
- const sampleRate = 1;
83
- try {
84
- require_logger.logger_default.logDebug(`[spiffy-ai] amplitude session-replay initializing isEnabled=${isEnabled} sampleRate=${sampleRate}`);
85
- if (!isEnabled) return isEnabled;
86
- return isEnabled;
87
- } catch (e) {
88
- require_logger.logger_default.logError("[spiffy-ai] Error initializing amplitude session-replay", e);
89
- return false;
90
- }
91
- }, [orgShortName, featureFlagService]);
92
- const getEventTrackingEnrichment = (0, react.useCallback)(() => {
93
- if (internalEventTrackingEnrichment !== void 0) return internalEventTrackingEnrichment;
94
- const enrichment = {
95
- name: "page-view-tracking-enrichment",
96
- type: "enrichment",
97
- setup: async () => void 0,
98
- execute: async (event) => {
99
- let enrichedEvent;
100
- if (["[Amplitude] Page Viewed", `[Spiffy] ${require_dist.SpiffyMetricsEventName.BundleLoaded}`].includes(event.event_type)) {
101
- const globalProperties = {};
102
- if (publicKey) globalProperties["globalProperties.publicKey"] = publicKey;
103
- if (featureOverrides) Object.entries(featureOverrides).forEach(([key, value$1]) => {
104
- globalProperties[`globalProperties.featureOverrides.${key}`] = String(value$1);
105
- });
106
- if (variantUrlOverride) globalProperties["globalProperties.variantUrlOverride"] = variantUrlOverride;
107
- if (variantInfoOverride) globalProperties["globalProperties.variantInfoOverride"] = JSON.stringify(variantInfoOverride);
108
- if (show != null) globalProperties["globalProperties.show"] = String(show);
109
- const enabledFeatures = featureFlagService.getFeatureFlags();
110
- const enabledFeaturesProperties = Object.entries(enabledFeatures).reduce((acc, [key, value$1]) => ({
111
- ...acc,
112
- [`enabledFeatures.${key}`]: `${value$1}`
113
- }), {});
114
- const timingProperties = { "timing.enriched_at_ms": window.performance?.now() };
115
- enrichedEvent = {
116
- ...event,
117
- event_properties: {
118
- ...event.event_properties,
119
- ...getDefaultTrackingProps(),
120
- ...globalProperties,
121
- ...enabledFeaturesProperties,
122
- ...timingProperties
123
- }
124
- };
125
- } else enrichedEvent = event;
126
- require_events.EventsDispatcher.dispatch(require_dist.SpiffyEvent.AMPLITUDE_EVENT, enrichedEvent);
127
- return enrichedEvent;
128
- }
129
- };
130
- setInternalEventTrackingEnrichment(enrichment);
131
- return enrichment;
132
- }, [
133
- internalEventTrackingEnrichment,
134
- getDefaultTrackingProps,
135
- featureFlagService,
136
- publicKey,
137
- featureOverrides,
138
- variantUrlOverride,
139
- variantInfoOverride,
140
- show
141
- ]);
142
- (0, react.useEffect)(() => {
143
- if (isReady && !amplitudeClient) {
144
- const currentAmplitudeInstance = (0, __amplitude_analytics_browser.createInstance)();
145
- const isSessionsEnabled = amplitudeSessionReplayInit();
146
- currentAmplitudeInstance.add(getEventTrackingEnrichment());
147
- currentAmplitudeInstance.init(amplitudeApiKey, userId, {
148
- serverZone: dataResidency,
149
- trackingOptions: { ipAddress: true },
150
- autocapture: {
151
- attribution: true,
152
- pageViews: { trackHistoryChanges: "pathOnly" },
153
- sessions: isSessionsEnabled,
154
- formInteractions: false,
155
- fileDownloads: false
156
- }
157
- });
158
- setAmplitudeClient(currentAmplitudeInstance);
159
- }
160
- }, [
161
- isReady,
162
- amplitudeClient,
163
- amplitudeApiKey,
164
- userId,
165
- dataResidency,
166
- amplitudeSessionReplayInit,
167
- getEventTrackingEnrichment
168
- ]);
169
- const trackEvent = (0, react.useCallback)(async ({ eventName, eventProps, eventGroups, alsoSendToGoogleAnalytics = false }) => {
170
- require_logger.logger_default.logDebug("Submitting event", eventName);
171
- try {
172
- const decoratedEventName = `[Spiffy] ${eventName}`;
173
- if (!amplitudeClient) {
174
- require_logger.logger_default.logWarn("amplitude client undefined", void 0, { event_name: decoratedEventName });
175
- return;
176
- }
177
- const eventData = JSON.stringify({
178
- eventName,
179
- eventProps,
180
- created_at: (/* @__PURE__ */ new Date()).toISOString()
181
- });
182
- const data = new TextEncoder().encode(eventData);
183
- const hashBuffer = await crypto.subtle.digest("SHA-256", data);
184
- const currentInsertId = Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, "0")).join("");
185
- require_logger.logger_default.logDebug(`amplitude tracking ${decoratedEventName}`, null, {
186
- event_name: decoratedEventName,
187
- props: eventProps
188
- });
189
- amplitudeClient.track(decoratedEventName, {
190
- ...getDefaultTrackingProps(),
191
- ...eventProps,
192
- ...eventProps ? eventPropsToPrefixedEventProps(eventName, eventProps) : {}
193
- }, {
194
- ...eventGroups,
195
- insert_id: currentInsertId
196
- });
197
- if (alsoSendToGoogleAnalytics && orgGaConfig) {
198
- require_logger.logger_default.logDebug("[spiffy-ai] GA tracking", decoratedEventName);
199
- if (window.dataLayer) window.dataLayer.push({
200
- event: decoratedEventName,
201
- eventProps
202
- });
203
- }
204
- } catch (err) {
205
- require_logger.logger_default.logError("[spiffy-ai] Error tracking event", err, {
206
- eventName,
207
- eventProps
208
- });
209
- }
210
- }, [
211
- amplitudeClient,
212
- getDefaultTrackingProps,
213
- eventPropsToPrefixedEventProps,
214
- orgGaConfig
215
- ]);
216
- const value = (0, react.useMemo)(() => ({
217
- trackEvent,
218
- isReady,
219
- setSupplementalDefaultProps: (props) => setSupplementalDefaultProps(props)
220
- }), [
221
- trackEvent,
222
- isReady,
223
- setSupplementalDefaultProps
224
- ]);
225
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AmplitudeContext.Provider, {
226
- value,
227
- children
228
- });
229
- };
230
- const useAmplitude = () => {
231
- const context = (0, react.useContext)(AmplitudeContext);
232
- if (!context) throw new Error("useAmplitude must be used within AmplitudeProvider");
233
- return context;
234
- };
235
-
236
- //#endregion
237
- Object.defineProperty(exports, 'AmplitudeProvider', {
238
- enumerable: true,
239
- get: function () {
240
- return AmplitudeProvider;
241
- }
242
- });
243
- Object.defineProperty(exports, 'useAmplitude', {
244
- enumerable: true,
245
- get: function () {
246
- return useAmplitude;
247
- }
248
- });
249
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlQ29udGV4dC1EckZHSDdRNy5janMiLCJuYW1lcyI6WyJSZWFjdCIsIkFtcGxpdHVkZVByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4iLCJ1c2VySWRBdG9tIiwiYW1wbGl0dWRlQXBpS2V5QXRvbSIsImRhdGFSZXNpZGVuY3lBdG9tIiwib3JnQW5hbHl0aWNzR29vZ2xlQW5hbHl0aWNzQ29uZmlnQXRvbSIsImVudkF0b20iLCJjb250ZXh0U291cmNlQXRvbSIsImlkZW50aWZ5aW5nUHJlZml4QXRvbSIsInVzZUxvY2FsU3RvcmFnZSIsInVzZUVudml2ZUNvbmZpZyIsInVzZUZlYXR1cmVGbGFnU2VydmljZSIsIkxvY2FsU3RvcmFnZUtleXMiLCJ2YWx1ZSIsIk9yZ1Nob3J0TmFtZSIsIkZlYXR1cmVHYXRlcyIsImVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4iLCJlbnJpY2hlZEV2ZW50OiBFdmVudCIsIlNwaWZmeU1ldHJpY3NFdmVudE5hbWUiLCJnbG9iYWxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IiwiU3BpZmZ5RXZlbnQiLCJjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQiXSwic291cmNlcyI6WyIuLi9zcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dC9hbXBsaXR1ZGVDb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZUVmZmVjdCxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VBdG9tVmFsdWUgfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSBcIkBhbXBsaXR1ZGUvYW5hbHl0aWNzLWJyb3dzZXJcIjtcbmltcG9ydCB7XG4gIEZlYXR1cmVHYXRlcyxcbiAgT3JnU2hvcnROYW1lLFxuICBMb2NhbFN0b3JhZ2VLZXlzLFxuICBTcGlmZnlFdmVudCxcbiAgQW1wbGl0dWRlQ29udGV4dFR5cGUsXG4gIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gIFRyYWNrRXZlbnRQYXJhbXMsXG59IGZyb20gXCJAZW52aXZlLWFpL3R5cGVzXCI7XG5pbXBvcnQge1xuICBhbXBsaXR1ZGVBcGlLZXlBdG9tLFxuICBjb250ZXh0U291cmNlQXRvbSxcbiAgZGF0YVJlc2lkZW5jeUF0b20sXG4gIGlkZW50aWZ5aW5nUHJlZml4QXRvbSxcbn0gZnJvbSBcInNyYy9hdG9tcy9lbnZpdmUvZW52aXZlQ29uZmlnXCI7XG5pbXBvcnQgeyB1c2VMb2NhbFN0b3JhZ2UgfSBmcm9tIFwic3JjL2NvbnRleHRzL2xvY2FsU3RvcmFnZUNvbnRleHRcIjtcbmltcG9ydCB7IG9yZ0FuYWx5dGljc0dvb2dsZUFuYWx5dGljc0NvbmZpZ0F0b20gfSBmcm9tIFwic3JjL2F0b21zL29yZy9vcmdBbmFseXRpY3NDb25maWdcIjtcbmltcG9ydCB7IHVzZXJJZEF0b20gfSBmcm9tIFwic3JjL2F0b21zL2FwcFwiO1xuaW1wb3J0IHsgZW52QXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZ1wiO1xuaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEJyb3dzZXJDbGllbnQsXG4gIEVucmljaG1lbnRQbHVnaW4sXG4gIEV2ZW50LFxuICBTZXJ2ZXJab25lVHlwZSxcbn0gZnJvbSBcIkBhbXBsaXR1ZGUvYW5hbHl0aWNzLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFbnZpdmVDb25maWcgfSBmcm9tIFwic3JjL2NvbnRleHRzL2Vudml2ZUNvbmZpZ0NvbnRleHQvZW52aXZlQ29uZmlnQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSBcInNyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHRcIjtcbmltcG9ydCB7IEV2ZW50c0Rpc3BhdGNoZXIgfSBmcm9tIFwic3JjL2V2ZW50c1wiO1xuXG5jb25zdCBBbXBsaXR1ZGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxBbXBsaXR1ZGVDb250ZXh0VHlwZSB8IG51bGw+KG51bGwpO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgKHdpbmRvdyBhcyBhbnkpLkFtcGxpdHVkZVJlYWN0ID0gUmVhY3Q7XG59XG5cbmV4cG9ydCBjb25zdCBBbXBsaXR1ZGVQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0+ID0gKHtcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGNvbnN0IHVzZXJJZCA9IHVzZUF0b21WYWx1ZSh1c2VySWRBdG9tKTtcbiAgY29uc3QgYW1wbGl0dWRlQXBpS2V5ID0gdXNlQXRvbVZhbHVlKGFtcGxpdHVkZUFwaUtleUF0b20pO1xuICBjb25zdCBkYXRhUmVzaWRlbmN5ID0gdXNlQXRvbVZhbHVlKGRhdGFSZXNpZGVuY3lBdG9tKTtcbiAgY29uc3Qgb3JnR2FDb25maWcgPSB1c2VBdG9tVmFsdWUob3JnQW5hbHl0aWNzR29vZ2xlQW5hbHl0aWNzQ29uZmlnQXRvbSk7XG4gIGNvbnN0IGVudiA9IHVzZUF0b21WYWx1ZShlbnZBdG9tKTtcbiAgY29uc3QgY29udGV4dFNvdXJjZSA9IHVzZUF0b21WYWx1ZShjb250ZXh0U291cmNlQXRvbSk7XG4gIGNvbnN0IGlkZW50aWZ5aW5nUHJlZml4ID0gdXNlQXRvbVZhbHVlKGlkZW50aWZ5aW5nUHJlZml4QXRvbSk7XG4gIGNvbnN0IHsgZ2V0SXRlbSB9ID0gdXNlTG9jYWxTdG9yYWdlKCk7XG4gIGNvbnN0IHtcbiAgICBwdWJsaWNLZXksXG4gICAgZmVhdHVyZU92ZXJyaWRlcyxcbiAgICB2YXJpYW50VXJsT3ZlcnJpZGUsXG4gICAgdmFyaWFudEluZm9PdmVycmlkZSxcbiAgICBzaG93LFxuICAgIG9yZ1Nob3J0TmFtZSxcbiAgICBmZWF0dXJlR2F0ZXMsXG4gIH0gPSB1c2VFbnZpdmVDb25maWcoKTtcblxuICBjb25zdCB7IGZlYXR1cmVGbGFnU2VydmljZSB9ID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG5cbiAgY29uc3QgW2FtcGxpdHVkZUNsaWVudCwgc2V0QW1wbGl0dWRlQ2xpZW50XSA9IFJlYWN0LnVzZVN0YXRlPFxuICAgIEJyb3dzZXJDbGllbnQgfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICBjb25zdCBbaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCwgc2V0SW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudF0gPVxuICAgIFJlYWN0LnVzZVN0YXRlPEVucmljaG1lbnRQbHVnaW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFtzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMsIHNldFN1cHBsZW1lbnRhbERlZmF1bHRQcm9wc10gPVxuICAgIFJlYWN0LnVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7fSk7XG5cbiAgY29uc3QgaXNSZWFkeSA9IEJvb2xlYW4oXG4gICAgdXNlcklkICYmIGZlYXR1cmVGbGFnU2VydmljZSAmJiBhbXBsaXR1ZGVBcGlLZXkgJiYgdXNlcklkXG4gICk7XG5cbiAgY29uc3QgZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMgPSB1c2VDYWxsYmFjaygoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICAgIGNvbnN0IGdhdGVzUHJvcHMgPSBmZWF0dXJlR2F0ZXNcbiAgICAgID8gZmVhdHVyZUdhdGVzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oKGFjYywgY3VycikgPT4ge1xuICAgICAgICAgIGlmIChjdXJyLm5hbWUgJiYgY3Vyci52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtgZmVhdHVyZV9nYXRlLiR7Y3Vyci5uYW1lfWBdOiBjdXJyLnZhbHVlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KVxuICAgICAgOiB7fTtcbiAgICBjb25zdCBleHBlcmltZW50UHJvcHMgPSB7fTsgLy8gTm8gZGlyZWN0IGVxdWl2YWxlbnQgZm9yIGV4cGVyaW1lbnRzIGluIEVudml2ZUNvbmZpZyB5ZXRcblxuICAgIGNvbnN0IG9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyA9IHtcbiAgICAgIC4uLmdhdGVzUHJvcHMsXG4gICAgICAuLi5leHBlcmltZW50UHJvcHMsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMsXG4gICAgICAvLyBUT0RPOiBvcmdfaWQgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBpbiBFbnZpdmVDb25maWcuIE5lZWQgdG8gZmluZCBhIG5ldyBzb3VyY2Ugb3IgZGVyaXZlIGl0LlxuICAgICAgLy8gb3JnX2lkOiBvcmdDb25maWc/Lm9yZz8ub3JnPy5pZCxcbiAgICAgIGFwcF9pZDogXCJjb21tZXJjZS1jaGF0LXJlYWN0LWNvbXBvbmVudFwiLFxuICAgICAgY2hhdF9pZDogZ2V0SXRlbShMb2NhbFN0b3JhZ2VLZXlzLkNoYXRJZCksXG4gICAgICBlbnY6IGVudiB8fCBcInVua25vd25cIixcbiAgICAgIGFwcF9zb3VyY2U6IGNvbnRleHRTb3VyY2UsXG4gICAgICBcIm9yZy5zaG9ydF9uYW1lXCI6IG9yZ1Nob3J0TmFtZSxcbiAgICAgIFwidXNlci5pZFwiOiB1c2VySWQsXG4gICAgICBcImNkcC51c2VyX2lkXCI6IG51bGwsXG4gICAgICBcImNkcC5wcm92aWRlclwiOiBudWxsLFxuICAgICAgXCJldmVudC5zb3VyY2VcIjogXCJ3ZWItYnJvd3NlclwiLFxuICAgICAgXCJldmVudC50eXBlXCI6IFwidXNlci1hY3Rpdml0eVwiLFxuICAgICAgXCJldmVudC5pZFwiOiBudWxsLFxuICAgICAgXCJldmVudC5jaGFubmVsXCI6IFwid2ViXCIsXG4gICAgICBcImV2ZW50LnRpbWVzdGFtcFwiOiBudWxsLFxuICAgIH07XG4gIH0sIFtcbiAgICBmZWF0dXJlR2F0ZXMsXG4gICAgc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzLFxuICAgIGVudixcbiAgICBjb250ZXh0U291cmNlLFxuICAgIG9yZ1Nob3J0TmFtZSxcbiAgICB1c2VySWQsXG4gIF0pO1xuXG4gIGNvbnN0IGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSxcbiAgICAgIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICAgICAgY29uc3QgcHJlZml4ID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCBcIl9cIik7XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZXZlbnRQcm9wcykucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBhbXBsaXR1ZGVTZXNzaW9uUmVwbGF5SW5pdCA9IHVzZUNhbGxiYWNrKCgpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBpc0VuYWJsZWQgPSBCb29sZWFuKFxuICAgICAgb3JnU2hvcnROYW1lID09PSBPcmdTaG9ydE5hbWUuVW5pcXVlVmludGFnZSAmJlxuICAgICAgICBmZWF0dXJlRmxhZ1NlcnZpY2U/LmlzQ2xpZW50U2Vzc2lvbkVuYWJsZWQoKSAmJlxuICAgICAgICBmZWF0dXJlRmxhZ1NlcnZpY2U/LmlzRmVhdHVyZUdhdGVFbmFibGVkKFxuICAgICAgICAgIEZlYXR1cmVHYXRlcy5Jc05ld0ZlYXR1cmVFbmFibGVkXG4gICAgICAgIClcbiAgICApO1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGFtcGxpdHVkZSBzZXNzaW9uLXJlcGxheSBpbml0aWFsaXppbmcgaXNFbmFibGVkPSR7aXNFbmFibGVkfSBzYW1wbGVSYXRlPSR7c2FtcGxlUmF0ZX1gXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gaXNFbmFibGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBhbXBsaXR1ZGVJbnN0YW5jZS5hZGQoc2Vzc2lvblJlcGxheVBsdWdpbih7IHNhbXBsZVJhdGUgfSkpO1xuXG4gICAgICByZXR1cm4gaXNFbmFibGVkO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgXCJbc3BpZmZ5LWFpXSBFcnJvciBpbml0aWFsaXppbmcgYW1wbGl0dWRlIHNlc3Npb24tcmVwbGF5XCIsXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCBbb3JnU2hvcnROYW1lLCBmZWF0dXJlRmxhZ1NlcnZpY2VdKTtcblxuICBjb25zdCBnZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCA9IHVzZUNhbGxiYWNrKCgpOiBFbnJpY2htZW50UGx1Z2luID0+IHtcbiAgICBpZiAoaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogXCJwYWdlLXZpZXctdHJhY2tpbmctZW5yaWNobWVudFwiLFxuICAgICAgdHlwZTogXCJlbnJpY2htZW50XCIsXG4gICAgICBzZXR1cDogYXN5bmMgKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGV2ZW50OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+ID0+IHtcbiAgICAgICAgbGV0IGVucmljaGVkRXZlbnQ6IEV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGV2ZW50c1RvRW5yaWNoID0gW1xuICAgICAgICAgIFwiW0FtcGxpdHVkZV0gUGFnZSBWaWV3ZWRcIixcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmIChwdWJsaWNLZXkpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbXCJnbG9iYWxQcm9wZXJ0aWVzLnB1YmxpY0tleVwiXSA9IHB1YmxpY0tleTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZlYXR1cmVPdmVycmlkZXMpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZlYXR1cmVPdmVycmlkZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzW2BnbG9iYWxQcm9wZXJ0aWVzLmZlYXR1cmVPdmVycmlkZXMuJHtrZXl9YF0gPVxuICAgICAgICAgICAgICAgIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhcmlhbnRVcmxPdmVycmlkZSkge1xuICAgICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1tcImdsb2JhbFByb3BlcnRpZXMudmFyaWFudFVybE92ZXJyaWRlXCJdID1cbiAgICAgICAgICAgICAgdmFyaWFudFVybE92ZXJyaWRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFyaWFudEluZm9PdmVycmlkZSkge1xuICAgICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1tcImdsb2JhbFByb3BlcnRpZXMudmFyaWFudEluZm9PdmVycmlkZVwiXSA9XG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHZhcmlhbnRJbmZvT3ZlcnJpZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzW1wiZ2xvYmFsUHJvcGVydGllcy5zaG93XCJdID0gU3RyaW5nKHNob3cpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVuYWJsZWRGZWF0dXJlcyA9IGZlYXR1cmVGbGFnU2VydmljZSEuZ2V0RmVhdHVyZUZsYWdzKCk7XG4gICAgICAgICAgY29uc3QgZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgZW5hYmxlZEZlYXR1cmVzXG4gICAgICAgICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2BlbmFibGVkRmVhdHVyZXMuJHtrZXl9YF06IGAke3ZhbHVlfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IHRpbWluZ1Byb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBcInRpbWluZy5lbnJpY2hlZF9hdF9tc1wiOiB3aW5kb3cucGVyZm9ybWFuY2U/Lm5vdygpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbnJpY2hlZEV2ZW50ID0ge1xuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBldmVudF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmV2ZW50LmV2ZW50X3Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKCksXG4gICAgICAgICAgICAgIC4uLmdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRpbWluZ1Byb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgRXZlbnRzRGlzcGF0Y2hlci5kaXNwYXRjaChTcGlmZnlFdmVudC5BTVBMSVRVREVfRVZFTlQsIGVucmljaGVkRXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBlbnJpY2hlZEV2ZW50O1xuICAgICAgfSxcbiAgICB9O1xuICAgIHNldEludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQoZW5yaWNobWVudCk7XG4gICAgcmV0dXJuIGVucmljaG1lbnQ7XG4gIH0sIFtcbiAgICBpbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50LFxuICAgIGdldERlZmF1bHRUcmFja2luZ1Byb3BzLFxuICAgIGZlYXR1cmVGbGFnU2VydmljZSxcbiAgICBwdWJsaWNLZXksXG4gICAgZmVhdHVyZU92ZXJyaWRlcyxcbiAgICB2YXJpYW50VXJsT3ZlcnJpZGUsXG4gICAgdmFyaWFudEluZm9PdmVycmlkZSxcbiAgICBzaG93LFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc1JlYWR5ICYmICFhbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCA9IGNyZWF0ZUluc3RhbmNlKCk7XG4gICAgICBjb25zdCBpc1Nlc3Npb25zRW5hYmxlZCA9IGFtcGxpdHVkZVNlc3Npb25SZXBsYXlJbml0KCk7XG4gICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuYWRkKGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCkpO1xuICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmluaXQoYW1wbGl0dWRlQXBpS2V5ISwgdXNlcklkISwge1xuICAgICAgICBzZXJ2ZXJab25lOiBkYXRhUmVzaWRlbmN5IGFzIFNlcnZlclpvbmVUeXBlLFxuICAgICAgICB0cmFja2luZ09wdGlvbnM6IHtcbiAgICAgICAgICBpcEFkZHJlc3M6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9jYXB0dXJlOiB7XG4gICAgICAgICAgYXR0cmlidXRpb246IHRydWUsXG4gICAgICAgICAgcGFnZVZpZXdzOiB7XG4gICAgICAgICAgICB0cmFja0hpc3RvcnlDaGFuZ2VzOiBcInBhdGhPbmx5XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uczogaXNTZXNzaW9uc0VuYWJsZWQsXG4gICAgICAgICAgZm9ybUludGVyYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgZmlsZURvd25sb2FkczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHNldEFtcGxpdHVkZUNsaWVudChjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UpO1xuICAgIH1cbiAgfSwgW1xuICAgIGlzUmVhZHksXG4gICAgYW1wbGl0dWRlQ2xpZW50LFxuICAgIGFtcGxpdHVkZUFwaUtleSxcbiAgICB1c2VySWQsXG4gICAgZGF0YVJlc2lkZW5jeSxcbiAgICBhbXBsaXR1ZGVTZXNzaW9uUmVwbGF5SW5pdCxcbiAgICBnZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCxcbiAgXSk7XG5cbiAgY29uc3QgdHJhY2tFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBldmVudFByb3BzLFxuICAgICAgZXZlbnRHcm91cHMsXG4gICAgICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzID0gZmFsc2UsXG4gICAgfTogVHJhY2tFdmVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFwiU3VibWl0dGluZyBldmVudFwiLCBldmVudE5hbWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGVjb3JhdGVkRXZlbnROYW1lID0gYFtTcGlmZnldICR7ZXZlbnROYW1lfWA7XG5cbiAgICAgICAgaWYgKCFhbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgICAgICBMb2dnZXIubG9nV2FybihcImFtcGxpdHVkZSBjbGllbnQgdW5kZWZpbmVkXCIsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZShldmVudERhdGEpO1xuICAgICAgICAvLyBjYWxjdWxhdGUgYSBoYXNoIG9mIHRoZSBldmVudCBwcm9wZXJ0aWVzIHRvIHVzZSBhcyB0aGUgaW5zZXJ0X2lkIHNvIHRoYXQgZHVwbGljYXRlIGV2ZW50c1xuICAgICAgICAvLyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIGJ5IEFtcGxpdHVkZVxuICAgICAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJTSEEtMjU2XCIsIGRhdGEpO1xuICAgICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgICAgY29uc3QgY3VycmVudEluc2VydElkID0gaGFzaEFycmF5XG4gICAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgICAgIExvZ2dlci5sb2dEZWJ1ZyhgYW1wbGl0dWRlIHRyYWNraW5nICR7ZGVjb3JhdGVkRXZlbnROYW1lfWAsIG51bGwsIHtcbiAgICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgICAgcHJvcHM6IGV2ZW50UHJvcHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFtcGxpdHVkZUNsaWVudC50cmFjayhcbiAgICAgICAgICBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoKSxcbiAgICAgICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgICAgICAuLi4oZXZlbnRQcm9wc1xuICAgICAgICAgICAgICA/IGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhldmVudE5hbWUsIGV2ZW50UHJvcHMpXG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uZXZlbnRHcm91cHMsXG4gICAgICAgICAgICBpbnNlcnRfaWQ6IGN1cnJlbnRJbnNlcnRJZCxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgJiYgb3JnR2FDb25maWcpIHtcbiAgICAgICAgICAvLyBUT0RPOiBBZGQgaW4gd2luZG93RGF0YUxheWVyU2VydmljZSBvciBjb250ZXh0IGFsdGVybmF0aXZlIGFuZCBob29rIGl0IHVwIGhlcmVcbiAgICAgICAgICBMb2dnZXIubG9nRGVidWcoXCJbc3BpZmZ5LWFpXSBHQSB0cmFja2luZ1wiLCBkZWNvcmF0ZWRFdmVudE5hbWUpO1xuICAgICAgICAgIGlmICh3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgICAgICAgICAod2luZG93LmRhdGFMYXllciBhcyBhbnlbXSkucHVzaCh7XG4gICAgICAgICAgICAgIGV2ZW50OiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50UHJvcHM6IGV2ZW50UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBMb2dnZXIubG9nRXJyb3IoXCJbc3BpZmZ5LWFpXSBFcnJvciB0cmFja2luZyBldmVudFwiLCBlcnIsIHtcbiAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhbXBsaXR1ZGVDbGllbnQsXG4gICAgICBnZXREZWZhdWx0VHJhY2tpbmdQcm9wcyxcbiAgICAgIGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyxcbiAgICAgIG9yZ0dhQ29uZmlnLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHRyYWNrRXZlbnQsXG4gICAgICBpc1JlYWR5LFxuICAgICAgc2V0U3VwcGxlbWVudGFsRGVmYXVsdFByb3BzOiAocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PlxuICAgICAgICBzZXRTdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMocHJvcHMpLFxuICAgIH0pLFxuICAgIFt0cmFja0V2ZW50LCBpc1JlYWR5LCBzZXRTdXBwbGVtZW50YWxEZWZhdWx0UHJvcHNdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QW1wbGl0dWRlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQW1wbGl0dWRlQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VBbXBsaXR1ZGUgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEFtcGxpdHVkZUNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VBbXBsaXR1ZGUgbXVzdCBiZSB1c2VkIHdpdGhpbiBBbXBsaXR1ZGVQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUNBLE1BQU0sNENBQThELEtBQUs7QUFFekUsSUFBSSxPQUFPLFdBQVcsWUFDcEIsQ0FBQyxPQUFlLGlCQUFpQkE7QUFHbkMsTUFBYUMscUJBQThELEVBQ3pFLGVBQ0k7Q0FDSixNQUFNLGlDQUFzQkMsdUJBQVc7Q0FDdkMsTUFBTSwwQ0FBK0JDLHlDQUFvQjtDQUN6RCxNQUFNLHdDQUE2QkMsdUNBQWtCO0NBQ3JELE1BQU0sc0NBQTJCQyxrREFBc0M7Q0FDdkUsTUFBTSw4QkFBbUJDLDZCQUFRO0NBQ2pDLE1BQU0sd0NBQTZCQyx1Q0FBa0I7QUFDM0IseUJBQWFDLDJDQUFzQjtDQUM3RCxNQUFNLEVBQUUsWUFBWUMsNkNBQWlCO0NBQ3JDLE1BQU0sRUFDSixXQUNBLGtCQUNBLG9CQUNBLHFCQUNBLE1BQ0EsY0FDQSxpQkFDRUMsNkNBQWlCO0NBRXJCLE1BQU0sRUFBRSx1QkFBdUJDLHlEQUF1QjtDQUV0RCxNQUFNLENBQUMsaUJBQWlCLHNCQUFzQlgsY0FBTSxTQUVsRCxPQUFVO0NBQ1osTUFBTSxDQUFDLGlDQUFpQyxzQ0FDdENBLGNBQU0sU0FBdUMsT0FBVTtDQUN6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