@akson/cortex-analytics-react 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,36 +23,37 @@ npm install @akson/cortex-analytics-react
23
23
  ### 1. Setup Provider
24
24
 
25
25
  ```tsx
26
- import React from 'react';
27
- import { AnalyticsProvider, type AnalyticsConfig } from '@akson/cortex-analytics-react';
28
- import { LEAD_GENERATION_EVENTS } from '@akson/cortex-api-shared/events';
26
+ import React from "react";
27
+ import {
28
+ AnalyticsProvider,
29
+ type AnalyticsConfig,
30
+ } from "@akson/cortex-analytics-react";
31
+ import { LEAD_GENERATION_EVENTS } from "@akson/cortex-utilities/events";
29
32
 
30
33
  const analyticsConfig: AnalyticsConfig = {
31
34
  platforms: {
32
35
  gtm: {
33
- containerId: 'GTM-XXXXXXX',
36
+ containerId: "GTM-XXXXXXX",
34
37
  workspaceId: 40,
35
38
  },
36
39
  posthog: {
37
- apiKey: 'phc_your_key',
38
- host: 'https://app.posthog.com',
40
+ apiKey: "phc_your_key",
41
+ host: "https://app.posthog.com",
39
42
  },
40
43
  ga4: {
41
- measurementId: 'G-XXXXXXXXXX',
44
+ measurementId: "G-XXXXXXXXXX",
42
45
  },
43
46
  },
44
47
  conversions: {
45
- [LEAD_GENERATION_EVENTS.LEAD_FORM_SUBMITTED]: 'CONVERSION_LABEL_1',
46
- [LEAD_GENERATION_EVENTS.LEAD_WHATSAPP_CONTACT]: 'CONVERSION_LABEL_2',
48
+ [LEAD_GENERATION_EVENTS.LEAD_FORM_SUBMITTED]: "CONVERSION_LABEL_1",
49
+ [LEAD_GENERATION_EVENTS.LEAD_WHATSAPP_CONTACT]: "CONVERSION_LABEL_2",
47
50
  },
48
- debug: process.env.NODE_ENV === 'development',
51
+ debug: process.env.NODE_ENV === "development",
49
52
  };
50
53
 
51
54
  export default function App({ children }) {
52
55
  return (
53
- <AnalyticsProvider config={analyticsConfig}>
54
- {children}
55
- </AnalyticsProvider>
56
+ <AnalyticsProvider config={analyticsConfig}>{children}</AnalyticsProvider>
56
57
  );
57
58
  }
58
59
  ```
@@ -60,8 +61,11 @@ export default function App({ children }) {
60
61
  ### 2. Use Analytics Hooks
61
62
 
62
63
  ```tsx
63
- import React from 'react';
64
- import { useAnalytics, LEAD_GENERATION_EVENTS } from '@akson/cortex-analytics-react';
64
+ import React from "react";
65
+ import {
66
+ useAnalytics,
67
+ LEAD_GENERATION_EVENTS,
68
+ } from "@akson/cortex-analytics-react";
65
69
 
66
70
  export function ContactForm() {
67
71
  const analytics = useAnalytics();
@@ -69,97 +73,99 @@ export function ContactForm() {
69
73
  const handleSubmit = (formData: any) => {
70
74
  // Track standardized lead event
71
75
  analytics.track(LEAD_GENERATION_EVENTS.LEAD_FORM_SUBMITTED, {
72
- form_type: 'contact',
73
- source: 'header',
76
+ form_type: "contact",
77
+ source: "header",
74
78
  lead_score: 100,
75
79
  });
76
80
  };
77
81
 
78
- return (
79
- <form onSubmit={handleSubmit}>
80
- {/* Your form */}
81
- </form>
82
- );
82
+ return <form onSubmit={handleSubmit}>{/* Your form */}</form>;
83
83
  }
84
84
  ```
85
85
 
86
86
  ## Available Hooks
87
87
 
88
88
  ### `useAnalytics()`
89
+
89
90
  Core analytics hook with full tracking capabilities.
90
91
 
91
92
  ```tsx
92
- import { useAnalytics } from '@akson/cortex-analytics-react';
93
+ import { useAnalytics } from "@akson/cortex-analytics-react";
93
94
 
94
95
  function Component() {
95
96
  const analytics = useAnalytics();
96
-
97
+
97
98
  // Basic tracking
98
- analytics.track('custom_event', { property: 'value' });
99
- analytics.trackPageView('/page', 'Page Title');
100
- analytics.trackInteraction('button', 'click', 'header_cta');
101
-
99
+ analytics.track("custom_event", { property: "value" });
100
+ analytics.trackPageView("/page", "Page Title");
101
+ analytics.trackInteraction("button", "click", "header_cta");
102
+
102
103
  // User identification
103
- analytics.identify('user123', { email: 'user@example.com' });
104
- analytics.sendUserData({ email: 'user@example.com', phone: '+1234567890' });
105
-
104
+ analytics.identify("user123", { email: "user@example.com" });
105
+ analytics.sendUserData({ email: "user@example.com", phone: "+1234567890" });
106
+
106
107
  // Session utilities
107
108
  const sessionId = analytics.getSessionId();
108
109
  const funnelPath = analytics.getFunnelPath();
109
110
  const timeInFunnel = analytics.getTimeInFunnel();
110
-
111
+
111
112
  return <div>...</div>;
112
113
  }
113
114
  ```
114
115
 
115
116
  ### `useFunnelTracking()`
117
+
116
118
  Specialized hook for funnel analysis.
117
119
 
118
120
  ```tsx
119
- import { useFunnelTracking } from '@akson/cortex-analytics-react';
121
+ import { useFunnelTracking } from "@akson/cortex-analytics-react";
120
122
 
121
123
  function OrderForm() {
122
124
  const funnel = useFunnelTracking();
123
-
125
+
124
126
  const handleStepComplete = (step: string) => {
125
127
  funnel.trackStage(step, {
126
128
  completion_time: 30,
127
- source: 'organic',
129
+ source: "organic",
128
130
  });
129
131
  };
130
-
132
+
131
133
  const handleAbandonment = () => {
132
- funnel.trackAbandonment('step_2', 'form_error');
134
+ funnel.trackAbandonment("step_2", "form_error");
133
135
  };
134
-
136
+
135
137
  const handleConversion = () => {
136
- funnel.trackConversion('order', 149.90, {
137
- product_type: 'custom_badge',
138
- currency: 'CHF',
138
+ funnel.trackConversion("order", 149.9, {
139
+ product_type: "custom_badge",
140
+ currency: "CHF",
139
141
  });
140
142
  };
141
-
143
+
142
144
  return <div>...</div>;
143
145
  }
144
146
  ```
145
147
 
146
148
  ### `useLeadTracking()`
149
+
147
150
  Hook for lead generation scenarios.
148
151
 
149
152
  ```tsx
150
- import { useLeadTracking, LEAD_GENERATION_EVENTS } from '@akson/cortex-analytics-react';
153
+ import {
154
+ useLeadTracking,
155
+ LEAD_GENERATION_EVENTS,
156
+ } from "@akson/cortex-analytics-react";
151
157
 
152
158
  function LeadCapture() {
153
159
  const lead = useLeadTracking();
154
-
160
+
155
161
  const handleFormSubmit = (userData: any) => {
156
162
  // Track the lead event
157
163
  lead.trackLead(LEAD_GENERATION_EVENTS.LEAD_FORM_SUBMITTED, {
158
164
  lead_score: 100,
159
- source: 'landing_page',
160
- form_type: 'quote_request',
165
+ source: "landing_page",
166
+ form_type: "quote_request",
161
167
  });
162
-
168
+
163
169
  // Send user data for enhanced conversions
164
170
  lead.sendUserData({
165
171
  email: userData.email,
@@ -167,33 +173,37 @@ function LeadCapture() {
167
173
  firstName: userData.firstName,
168
174
  });
169
175
  };
170
-
176
+
171
177
  return <div>...</div>;
172
178
  }
173
179
  ```
174
180
 
175
181
  ### `useEcommerceTracking()`
182
+
176
183
  Hook for e-commerce events.
177
184
 
178
185
  ```tsx
179
- import { useEcommerceTracking, ECOMMERCE_EVENTS } from '@akson/cortex-analytics-react';
186
+ import {
187
+ useEcommerceTracking,
188
+ ECOMMERCE_EVENTS,
189
+ } from "@akson/cortex-analytics-react";
180
190
 
181
191
  function ProductPage() {
182
192
  const ecommerce = useEcommerceTracking();
183
-
193
+
184
194
  const handlePurchase = (orderData: any) => {
185
195
  ecommerce.trackEcommerce(ECOMMERCE_EVENTS.PURCHASE, {
186
196
  value: orderData.total,
187
- currency: 'CHF',
197
+ currency: "CHF",
188
198
  transaction_id: orderData.id,
189
- items: orderData.items.map(item => ({
199
+ items: orderData.items.map((item) => ({
190
200
  item_name: item.name,
191
201
  price: item.price,
192
202
  quantity: item.quantity,
193
203
  })),
194
204
  });
195
205
  };
196
-
206
+
197
207
  return <div>...</div>;
198
208
  }
199
209
  ```
@@ -243,24 +253,27 @@ interface FunnelConfig {
243
253
 
244
254
  ## Standardized Events
245
255
 
246
- The package uses standardized events from `@akson/cortex-api-shared`:
256
+ The package uses standardized events from `@akson/cortex-utilities`:
247
257
 
248
258
  ```typescript
249
- import { LEAD_GENERATION_EVENTS, ECOMMERCE_EVENTS } from '@akson/cortex-analytics-react';
259
+ import {
260
+ LEAD_GENERATION_EVENTS,
261
+ ECOMMERCE_EVENTS,
262
+ } from "@akson/cortex-analytics-react";
250
263
 
251
264
  // Lead generation events (scored 1-100)
252
- LEAD_GENERATION_EVENTS.LEAD_PAGE_VIEW // Score: 5
253
- LEAD_GENERATION_EVENTS.LEAD_CONTENT_VIEW // Score: 15
254
- LEAD_GENERATION_EVENTS.LEAD_INQUIRY_STARTED // Score: 40
255
- LEAD_GENERATION_EVENTS.LEAD_CONTACT_INFO // Score: 60
256
- LEAD_GENERATION_EVENTS.LEAD_WHATSAPP_CONTACT // Score: 85
257
- LEAD_GENERATION_EVENTS.LEAD_FORM_SUBMITTED // Score: 100
265
+ LEAD_GENERATION_EVENTS.LEAD_PAGE_VIEW; // Score: 5
266
+ LEAD_GENERATION_EVENTS.LEAD_CONTENT_VIEW; // Score: 15
267
+ LEAD_GENERATION_EVENTS.LEAD_INQUIRY_STARTED; // Score: 40
268
+ LEAD_GENERATION_EVENTS.LEAD_CONTACT_INFO; // Score: 60
269
+ LEAD_GENERATION_EVENTS.LEAD_WHATSAPP_CONTACT; // Score: 85
270
+ LEAD_GENERATION_EVENTS.LEAD_FORM_SUBMITTED; // Score: 100
258
271
 
259
272
  // E-commerce events (with monetary values)
260
- ECOMMERCE_EVENTS.VIEW_ITEM // Product views
261
- ECOMMERCE_EVENTS.ADD_TO_CART // Cart additions
262
- ECOMMERCE_EVENTS.BEGIN_CHECKOUT // Checkout started
263
- ECOMMERCE_EVENTS.PURCHASE // Completed transactions
273
+ ECOMMERCE_EVENTS.VIEW_ITEM; // Product views
274
+ ECOMMERCE_EVENTS.ADD_TO_CART; // Cart additions
275
+ ECOMMERCE_EVENTS.BEGIN_CHECKOUT; // Checkout started
276
+ ECOMMERCE_EVENTS.PURCHASE; // Completed transactions
264
277
  ```
265
278
 
266
279
  ## Migration from Landing Analytics
@@ -269,16 +282,19 @@ If migrating from the landing page analytics system:
269
282
 
270
283
  ```tsx
271
284
  // OLD: Landing-specific analytics
272
- import { Analytics, FUNNEL_STAGES } from '@/app/lib/analytics';
285
+ import { Analytics, FUNNEL_STAGES } from "@/app/lib/analytics";
273
286
 
274
287
  // NEW: @akson/cortex-analytics-react
275
- import { useAnalytics, LEAD_GENERATION_EVENTS } from '@akson/cortex-analytics-react';
288
+ import {
289
+ useAnalytics,
290
+ LEAD_GENERATION_EVENTS,
291
+ } from "@akson/cortex-analytics-react";
276
292
 
277
293
  function Component() {
278
294
  const analytics = useAnalytics();
279
-
295
+
280
296
  // OLD: Analytics.trackStage(FUNNEL_STAGES.FORM_SUBMITTED)
281
- // NEW:
297
+ // NEW:
282
298
  analytics.track(LEAD_GENERATION_EVENTS.LEAD_FORM_SUBMITTED, {
283
299
  lead_score: 100,
284
300
  });
@@ -317,14 +333,16 @@ The package follows a layered architecture:
317
333
  ## Dependencies
318
334
 
319
335
  ### Peer Dependencies
336
+
320
337
  - `react ^18.0.0`
321
338
  - `react-dom ^18.0.0`
322
339
 
323
340
  ### Dependencies
324
- - `@akson/cortex-api-shared` - Standardized event definitions
325
- - `@akson/cortex-api-gtm` - GTM API client
326
- - `@akson/cortex-api-posthog` - PostHog API client
341
+
342
+ - `@akson/cortex-utilities` - Standardized event definitions
343
+ - `@akson/cortex-gtm` - GTM API client
344
+ - `@akson/cortex-posthog` - PostHog API client
327
345
 
328
346
  ## License
329
347
 
330
- MIT
348
+ MIT
@@ -0,0 +1,304 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React from 'react';
3
+ export { ECOMMERCE_EVENTS, LEAD_GENERATION_EVENTS, LEAD_SCORES } from '@akson/cortex-utilities';
4
+
5
+ /**
6
+ * @akson/cortex-analytics-react - Type Definitions
7
+ * Reusable types for analytics tracking across React applications
8
+ */
9
+
10
+ /**
11
+ * Analytics configuration for projects
12
+ */
13
+ interface AnalyticsConfig {
14
+ platforms: {
15
+ gtm?: {
16
+ containerId: string;
17
+ workspaceId?: number;
18
+ publicId?: string;
19
+ };
20
+ posthog?: {
21
+ apiKey: string;
22
+ host?: string;
23
+ };
24
+ ga4?: {
25
+ measurementId: string;
26
+ };
27
+ googleAds?: {
28
+ accountId: string;
29
+ };
30
+ meta?: {
31
+ pixelId: string;
32
+ };
33
+ };
34
+ conversions?: Record<string, string>;
35
+ funnel?: FunnelConfig;
36
+ debug?: boolean;
37
+ enableEnhancedConversions?: boolean;
38
+ }
39
+ /**
40
+ * Funnel configuration
41
+ */
42
+ interface FunnelConfig {
43
+ stages?: Record<string, string[]>;
44
+ scoring?: (stage: string) => number;
45
+ abandonmentTracking?: boolean;
46
+ sessionTimeout?: number;
47
+ }
48
+ /**
49
+ * Event data for tracking
50
+ */
51
+ interface EventData {
52
+ [key: string]: any;
53
+ event_category?: string;
54
+ event_label?: string;
55
+ event_value?: number;
56
+ standardized_event?: boolean;
57
+ timestamp?: string;
58
+ sessionId?: string;
59
+ }
60
+ /**
61
+ * Lead event data
62
+ */
63
+ interface LeadEventData extends EventData {
64
+ lead_score: number;
65
+ funnel_stage?: string;
66
+ contact_method?: string;
67
+ source?: string;
68
+ language?: string;
69
+ device?: "mobile" | "desktop" | "tablet";
70
+ }
71
+ /**
72
+ * E-commerce event data
73
+ */
74
+ interface EcommerceEventData extends EventData {
75
+ value: number;
76
+ currency: string;
77
+ transaction_id?: string;
78
+ items?: Array<{
79
+ item_id?: string;
80
+ item_name: string;
81
+ price: number;
82
+ quantity?: number;
83
+ }>;
84
+ }
85
+ /**
86
+ * Funnel stage data
87
+ */
88
+ interface FunnelStageData {
89
+ stage: string;
90
+ previousStage?: string;
91
+ timeOnStage?: number;
92
+ totalTimeInFunnel?: number;
93
+ experimentVariants?: Record<string, string>;
94
+ formData?: FormData;
95
+ scrollData?: ScrollData;
96
+ performanceData?: PerformanceData;
97
+ source?: string;
98
+ language?: string;
99
+ device?: "mobile" | "desktop" | "tablet";
100
+ sessionId?: string;
101
+ userAgent?: string;
102
+ viewport?: string;
103
+ screenResolution?: string;
104
+ }
105
+ /**
106
+ * Form tracking data
107
+ */
108
+ interface FormData {
109
+ step?: number;
110
+ stepName?: string;
111
+ fieldsCompleted?: number;
112
+ totalFields?: number;
113
+ completionPercentage?: number;
114
+ filledFields?: string[];
115
+ emptyFields?: string[];
116
+ }
117
+ /**
118
+ * Scroll tracking data
119
+ */
120
+ interface ScrollData {
121
+ maxScrollPercent?: number;
122
+ timeToMaxScroll?: number;
123
+ }
124
+ /**
125
+ * Performance tracking data
126
+ */
127
+ interface PerformanceData {
128
+ pageLoadTime?: number;
129
+ timeToInteraction?: number;
130
+ dns?: number;
131
+ tcp?: number;
132
+ ttfb?: number;
133
+ }
134
+ /**
135
+ * User data for enhanced conversions
136
+ */
137
+ interface UserData {
138
+ email?: string;
139
+ phone?: string;
140
+ firstName?: string;
141
+ lastName?: string;
142
+ street?: string;
143
+ city?: string;
144
+ postalCode?: string;
145
+ country?: string;
146
+ }
147
+ /**
148
+ * Analytics context value
149
+ */
150
+ interface AnalyticsContextValue {
151
+ config: AnalyticsConfig;
152
+ isReady: boolean;
153
+ track: (event: string, properties?: EventData) => void;
154
+ trackPageView: (pagePath: string, pageTitle?: string) => void;
155
+ trackInteraction: (category: string, action: string, label?: string, value?: number) => void;
156
+ trackLead: (event: string, data?: Partial<LeadEventData>) => void;
157
+ trackEcommerce: (event: string, data: Partial<EcommerceEventData>) => void;
158
+ trackFunnelStage: (stage: string, data?: Partial<FunnelStageData>) => void;
159
+ trackFunnelAbandonment: (lastStage: string, reason?: string, data?: Record<string, any>) => void;
160
+ trackFunnelConversion: (type: string, value?: number, data?: Record<string, any>) => void;
161
+ trackExperiment: (experimentName: string, variant: string, userId?: string) => void;
162
+ trackFeatureFlag: (flagName: string, value: boolean | string, userId?: string) => void;
163
+ identify: (userId: string, traits?: Record<string, any>) => void;
164
+ sendUserData: (userData: UserData) => void;
165
+ getSessionId: () => string;
166
+ getFunnelPath: () => string[];
167
+ getTimeInFunnel: () => number;
168
+ clearSession: () => void;
169
+ }
170
+ /**
171
+ * Storage utility functions
172
+ */
173
+ interface StorageUtils {
174
+ safeGetStorage: (storageType: "localStorage" | "sessionStorage", key: string) => string | null;
175
+ safeSetStorage: (storageType: "localStorage" | "sessionStorage", key: string, value: string) => void;
176
+ safeRemoveStorage: (storageType: "localStorage" | "sessionStorage", key: string) => void;
177
+ }
178
+ /**
179
+ * Platform adapters interface
180
+ */
181
+ interface PlatformAdapter {
182
+ isReady(): boolean;
183
+ track(event: string, properties?: Record<string, any>): void;
184
+ identify?(userId: string, traits?: Record<string, any>): void;
185
+ reset?(): void;
186
+ }
187
+ /**
188
+ * GTM adapter interface
189
+ */
190
+ interface GTMAdapter extends PlatformAdapter {
191
+ dataLayer: any[];
192
+ }
193
+ /**
194
+ * PostHog adapter interface
195
+ */
196
+ interface PostHogAdapter extends PlatformAdapter {
197
+ posthog: any;
198
+ }
199
+
200
+ declare const AnalyticsContext: React.Context<AnalyticsContextValue | null>;
201
+ interface AnalyticsProviderProps {
202
+ config: AnalyticsConfig;
203
+ children: React.ReactNode;
204
+ }
205
+ declare function AnalyticsProvider({ config, children, }: AnalyticsProviderProps): react_jsx_runtime.JSX.Element;
206
+
207
+ /**
208
+ * Hook to access analytics functionality
209
+ * @throws Error if used outside of AnalyticsProvider
210
+ */
211
+ declare function useAnalytics(): AnalyticsContextValue;
212
+ /**
213
+ * Hook for simplified tracking
214
+ */
215
+ declare function useTrack(): {
216
+ track: (event: string, properties?: EventData) => void;
217
+ isReady: boolean;
218
+ };
219
+ /**
220
+ * Hook for funnel tracking
221
+ */
222
+ declare function useFunnelTracking(): {
223
+ trackStage: (stage: string, data?: Partial<FunnelStageData>) => void;
224
+ trackAbandonment: (lastStage: string, reason?: string, data?: Record<string, any>) => void;
225
+ trackConversion: (type: string, value?: number, data?: Record<string, any>) => void;
226
+ getFunnelPath: () => string[];
227
+ getTimeInFunnel: () => number;
228
+ clearSession: () => void;
229
+ isReady: boolean;
230
+ };
231
+ /**
232
+ * Hook for lead tracking
233
+ */
234
+ declare function useLeadTracking(): {
235
+ trackLead: (event: string, data?: Partial<LeadEventData>) => void;
236
+ sendUserData: (userData: UserData) => void;
237
+ isReady: boolean;
238
+ };
239
+ /**
240
+ * Hook for e-commerce tracking
241
+ */
242
+ declare function useEcommerceTracking(): {
243
+ trackEcommerce: (event: string, data: Partial<EcommerceEventData>) => void;
244
+ isReady: boolean;
245
+ };
246
+ /**
247
+ * Hook for experiment tracking
248
+ */
249
+ declare function useExperimentTracking(): {
250
+ trackExperiment: (experimentName: string, variant: string, userId?: string) => void;
251
+ trackFeatureFlag: (flagName: string, value: boolean | string, userId?: string) => void;
252
+ isReady: boolean;
253
+ };
254
+
255
+ /**
256
+ * Get or create session ID
257
+ */
258
+ declare function getSessionId(): string;
259
+ /**
260
+ * Get funnel path
261
+ */
262
+ declare function getFunnelPath(): string[];
263
+ /**
264
+ * Get time in funnel (seconds)
265
+ */
266
+ declare function getTimeInFunnel(): number;
267
+ /**
268
+ * Clear session data
269
+ */
270
+ declare function clearSession(): void;
271
+ /**
272
+ * Get device type based on viewport
273
+ */
274
+ declare function getDeviceType(): 'mobile' | 'desktop' | 'tablet';
275
+ /**
276
+ * Get performance data
277
+ */
278
+ declare function getPerformanceData(): {
279
+ pageLoadTime: number;
280
+ timeToInteraction: number;
281
+ dns: number;
282
+ tcp: number;
283
+ ttfb: number;
284
+ } | undefined;
285
+
286
+ /**
287
+ * Safe storage utilities for browser environments
288
+ * Handles storage access errors gracefully
289
+ */
290
+
291
+ /**
292
+ * Safely get value from storage
293
+ */
294
+ declare const safeGetStorage: StorageUtils['safeGetStorage'];
295
+ /**
296
+ * Safely set value in storage
297
+ */
298
+ declare const safeSetStorage: StorageUtils['safeSetStorage'];
299
+ /**
300
+ * Safely remove value from storage
301
+ */
302
+ declare const safeRemoveStorage: StorageUtils['safeRemoveStorage'];
303
+
304
+ export { type AnalyticsConfig, AnalyticsContext, type AnalyticsContextValue, AnalyticsProvider, type EcommerceEventData, type EventData, type FormData, type FunnelConfig, type FunnelStageData, type GTMAdapter, type LeadEventData, type PerformanceData, type PlatformAdapter, type PostHogAdapter, type ScrollData, type UserData, clearSession, getDeviceType, getFunnelPath, getPerformanceData, getSessionId, getTimeInFunnel, safeGetStorage, safeRemoveStorage, safeSetStorage, useAnalytics, useEcommerceTracking, useExperimentTracking, useFunnelTracking, useLeadTracking, useTrack };