@agentuity/frontend 0.1.2 → 0.1.3
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/dist/analytics/beacon-standalone.d.ts +106 -0
- package/dist/analytics/beacon-standalone.d.ts.map +1 -0
- package/dist/analytics/beacon-standalone.js +577 -0
- package/dist/analytics/beacon-standalone.js.map +1 -0
- package/dist/analytics/index.d.ts +15 -5
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +21 -5
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/types.d.ts +63 -35
- package/dist/analytics/types.d.ts.map +1 -1
- package/dist/beacon-script.d.ts +16 -0
- package/dist/beacon-script.d.ts.map +1 -0
- package/dist/beacon-script.js +3 -0
- package/dist/beacon-script.js.map +1 -0
- package/dist/beacon.js +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/analytics/beacon-standalone.ts +718 -0
- package/src/analytics/index.ts +29 -8
- package/src/analytics/types.ts +78 -49
- package/src/beacon-script.ts +24 -0
- package/src/index.ts +10 -7
- package/dist/analytics/beacon.d.ts +0 -15
- package/dist/analytics/beacon.d.ts.map +0 -1
- package/dist/analytics/beacon.js +0 -177
- package/dist/analytics/beacon.js.map +0 -1
- package/dist/analytics/collectors/clicks.d.ts +0 -10
- package/dist/analytics/collectors/clicks.d.ts.map +0 -1
- package/dist/analytics/collectors/clicks.js +0 -84
- package/dist/analytics/collectors/clicks.js.map +0 -1
- package/dist/analytics/collectors/errors.d.ts +0 -5
- package/dist/analytics/collectors/errors.d.ts.map +0 -1
- package/dist/analytics/collectors/errors.js +0 -43
- package/dist/analytics/collectors/errors.js.map +0 -1
- package/dist/analytics/collectors/forms.d.ts +0 -5
- package/dist/analytics/collectors/forms.d.ts.map +0 -1
- package/dist/analytics/collectors/forms.js +0 -55
- package/dist/analytics/collectors/forms.js.map +0 -1
- package/dist/analytics/collectors/pageview.d.ts +0 -15
- package/dist/analytics/collectors/pageview.d.ts.map +0 -1
- package/dist/analytics/collectors/pageview.js +0 -64
- package/dist/analytics/collectors/pageview.js.map +0 -1
- package/dist/analytics/collectors/scroll.d.ts +0 -17
- package/dist/analytics/collectors/scroll.d.ts.map +0 -1
- package/dist/analytics/collectors/scroll.js +0 -93
- package/dist/analytics/collectors/scroll.js.map +0 -1
- package/dist/analytics/collectors/spa.d.ts +0 -10
- package/dist/analytics/collectors/spa.d.ts.map +0 -1
- package/dist/analytics/collectors/spa.js +0 -53
- package/dist/analytics/collectors/spa.js.map +0 -1
- package/dist/analytics/collectors/visibility.d.ts +0 -18
- package/dist/analytics/collectors/visibility.d.ts.map +0 -1
- package/dist/analytics/collectors/visibility.js +0 -81
- package/dist/analytics/collectors/visibility.js.map +0 -1
- package/dist/analytics/collectors/webvitals.d.ts +0 -6
- package/dist/analytics/collectors/webvitals.d.ts.map +0 -1
- package/dist/analytics/collectors/webvitals.js +0 -111
- package/dist/analytics/collectors/webvitals.js.map +0 -1
- package/dist/analytics/events.d.ts +0 -18
- package/dist/analytics/events.d.ts.map +0 -1
- package/dist/analytics/events.js +0 -126
- package/dist/analytics/events.js.map +0 -1
- package/dist/analytics/offline.d.ts +0 -19
- package/dist/analytics/offline.d.ts.map +0 -1
- package/dist/analytics/offline.js +0 -145
- package/dist/analytics/offline.js.map +0 -1
- package/src/analytics/beacon.ts +0 -203
- package/src/analytics/collectors/clicks.ts +0 -100
- package/src/analytics/collectors/errors.ts +0 -49
- package/src/analytics/collectors/forms.ts +0 -64
- package/src/analytics/collectors/pageview.ts +0 -76
- package/src/analytics/collectors/scroll.ts +0 -112
- package/src/analytics/collectors/spa.ts +0 -60
- package/src/analytics/collectors/visibility.ts +0 -94
- package/src/analytics/collectors/webvitals.ts +0 -129
- package/src/analytics/events.ts +0 -146
- package/src/analytics/offline.ts +0 -163
package/src/analytics/index.ts
CHANGED
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Web Analytics for Agentuity SDK applications
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* The analytics beacon is bundled separately via beacon-standalone.ts
|
|
5
|
+
* and injected as a script tag by the SDK runtime.
|
|
6
|
+
*
|
|
7
|
+
* This module re-exports types and utilities for programmatic access.
|
|
6
8
|
*/
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
import type { AnalyticsClient } from './types';
|
|
9
11
|
|
|
10
12
|
export type {
|
|
11
13
|
AnalyticsClient,
|
|
12
|
-
|
|
13
|
-
AnalyticsEventType,
|
|
14
|
-
AnalyticsBatchPayload,
|
|
14
|
+
AnalyticsPayload,
|
|
15
15
|
AnalyticsPageConfig,
|
|
16
|
+
PageViewPayload,
|
|
17
|
+
ScrollEvent,
|
|
18
|
+
AnalyticsCustomEvent,
|
|
19
|
+
GeoLocation,
|
|
16
20
|
} from './types';
|
|
17
21
|
|
|
18
|
-
// Re-export utilities for advanced usage
|
|
19
|
-
export { trackPageview, createBaseEvent } from './collectors/pageview';
|
|
20
22
|
export { getVisitorId, isOptedOut, setOptOut } from './utils/storage';
|
|
21
23
|
export { getUTMParams } from './utils/utm';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get the analytics client from the global window object.
|
|
27
|
+
* Returns null if the beacon hasn't been initialized.
|
|
28
|
+
*/
|
|
29
|
+
export function getAnalytics(): AnalyticsClient | null {
|
|
30
|
+
if (typeof window !== 'undefined') {
|
|
31
|
+
const client = (window as { agentuityAnalytics?: AnalyticsClient }).agentuityAnalytics;
|
|
32
|
+
return client ?? null;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Track a custom event. No-op if analytics isn't initialized.
|
|
39
|
+
*/
|
|
40
|
+
export function track(eventName: string, properties?: Record<string, unknown>): void {
|
|
41
|
+
getAnalytics()?.track(eventName, properties);
|
|
42
|
+
}
|
package/src/analytics/types.ts
CHANGED
|
@@ -1,34 +1,54 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Scroll milestone event - records when a scroll depth milestone was first crossed
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
| 'visibility'
|
|
9
|
-
| 'error'
|
|
10
|
-
| 'custom'
|
|
11
|
-
| 'web_vital'
|
|
12
|
-
| 'form_submit'
|
|
13
|
-
| 'outbound_link';
|
|
4
|
+
export interface ScrollEvent {
|
|
5
|
+
depth: number; // 25, 50, 75, or 100
|
|
6
|
+
timestamp: number; // ms since page load
|
|
7
|
+
}
|
|
14
8
|
|
|
15
9
|
/**
|
|
16
|
-
*
|
|
10
|
+
* Custom event tracked during the page session
|
|
17
11
|
*/
|
|
18
|
-
export interface
|
|
12
|
+
export interface AnalyticsCustomEvent {
|
|
13
|
+
timestamp: number; // ms since epoch
|
|
14
|
+
name: string;
|
|
15
|
+
data?: string; // JSON string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Geo location data from agentuity.sh/location
|
|
20
|
+
*/
|
|
21
|
+
export interface GeoLocation {
|
|
22
|
+
country?: string;
|
|
23
|
+
country_latitude?: number;
|
|
24
|
+
country_longitude?: number;
|
|
25
|
+
region?: string;
|
|
26
|
+
region_latitude?: number;
|
|
27
|
+
region_longitude?: number;
|
|
28
|
+
city?: string;
|
|
29
|
+
city_latitude?: number;
|
|
30
|
+
city_longitude?: number;
|
|
31
|
+
timezone?: string;
|
|
32
|
+
latitude?: number;
|
|
33
|
+
longitude?: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Page view payload sent to the collection endpoint
|
|
38
|
+
* Represents a single page view with all aggregated data
|
|
39
|
+
*/
|
|
40
|
+
export interface PageViewPayload {
|
|
19
41
|
id: string;
|
|
20
42
|
timestamp: number;
|
|
21
43
|
timezone_offset: number;
|
|
22
44
|
|
|
23
|
-
|
|
24
|
-
event_name?: string;
|
|
25
|
-
event_data?: Record<string, unknown>;
|
|
26
|
-
|
|
45
|
+
// Page context
|
|
27
46
|
url: string;
|
|
28
47
|
path: string;
|
|
29
48
|
referrer: string;
|
|
30
49
|
title: string;
|
|
31
50
|
|
|
51
|
+
// Device/browser
|
|
32
52
|
screen_width: number;
|
|
33
53
|
screen_height: number;
|
|
34
54
|
viewport_width: number;
|
|
@@ -37,17 +57,42 @@ export interface AnalyticsEvent {
|
|
|
37
57
|
user_agent: string;
|
|
38
58
|
language: string;
|
|
39
59
|
|
|
60
|
+
// Geography
|
|
61
|
+
country?: string;
|
|
62
|
+
country_latitude?: number;
|
|
63
|
+
country_longitude?: number;
|
|
64
|
+
region?: string;
|
|
65
|
+
region_latitude?: number;
|
|
66
|
+
region_longitude?: number;
|
|
67
|
+
city?: string;
|
|
68
|
+
city_latitude?: number;
|
|
69
|
+
city_longitude?: number;
|
|
70
|
+
timezone?: string;
|
|
71
|
+
latitude?: number;
|
|
72
|
+
longitude?: number;
|
|
73
|
+
|
|
74
|
+
// Performance metrics
|
|
40
75
|
load_time?: number;
|
|
41
76
|
dom_ready?: number;
|
|
42
77
|
ttfb?: number;
|
|
78
|
+
|
|
79
|
+
// Web vitals (collected during session)
|
|
43
80
|
fcp?: number;
|
|
44
81
|
lcp?: number;
|
|
45
82
|
cls?: number;
|
|
46
83
|
inp?: number;
|
|
47
84
|
|
|
48
|
-
|
|
49
|
-
|
|
85
|
+
// Engagement metrics
|
|
86
|
+
scroll_depth: number; // max scroll depth reached
|
|
87
|
+
time_on_page: number; // ms
|
|
88
|
+
|
|
89
|
+
// Scroll events: when milestones were first crossed
|
|
90
|
+
scroll_events: ScrollEvent[];
|
|
91
|
+
|
|
92
|
+
// Custom events (max 1000)
|
|
93
|
+
custom_events: AnalyticsCustomEvent[];
|
|
50
94
|
|
|
95
|
+
// UTM parameters
|
|
51
96
|
utm_source?: string;
|
|
52
97
|
utm_medium?: string;
|
|
53
98
|
utm_campaign?: string;
|
|
@@ -56,16 +101,17 @@ export interface AnalyticsEvent {
|
|
|
56
101
|
}
|
|
57
102
|
|
|
58
103
|
/**
|
|
59
|
-
*
|
|
104
|
+
* Payload sent to /_agentuity/webanalytics/collect
|
|
60
105
|
*/
|
|
61
|
-
export interface
|
|
106
|
+
export interface AnalyticsPayload {
|
|
62
107
|
org_id: string;
|
|
63
108
|
project_id: string;
|
|
64
|
-
session_id: string;
|
|
65
109
|
thread_id: string;
|
|
66
110
|
visitor_id: string;
|
|
111
|
+
user_id: string;
|
|
112
|
+
user_traits: Record<string, string>;
|
|
67
113
|
is_devmode: boolean;
|
|
68
|
-
|
|
114
|
+
pageview: PageViewPayload;
|
|
69
115
|
}
|
|
70
116
|
|
|
71
117
|
/**
|
|
@@ -75,7 +121,6 @@ export interface AnalyticsPageConfig {
|
|
|
75
121
|
enabled: boolean;
|
|
76
122
|
orgId: string;
|
|
77
123
|
projectId: string;
|
|
78
|
-
sessionId: string;
|
|
79
124
|
threadId: string;
|
|
80
125
|
isDevmode: boolean;
|
|
81
126
|
|
|
@@ -93,47 +138,31 @@ export interface AnalyticsPageConfig {
|
|
|
93
138
|
}
|
|
94
139
|
|
|
95
140
|
/**
|
|
96
|
-
* Public analytics client interface
|
|
141
|
+
* Public analytics client interface (exposed on window.agentuityAnalytics)
|
|
97
142
|
*/
|
|
98
143
|
export interface AnalyticsClient {
|
|
99
144
|
/**
|
|
100
|
-
* Track a custom event
|
|
145
|
+
* Track a custom event (aggregated and sent on page exit)
|
|
101
146
|
*/
|
|
102
147
|
track(eventName: string, properties?: Record<string, unknown>): void;
|
|
103
148
|
|
|
104
149
|
/**
|
|
105
|
-
* Identify the current user
|
|
150
|
+
* Identify the current user
|
|
106
151
|
*/
|
|
107
152
|
identify(userId: string, traits?: Record<string, unknown>): void;
|
|
108
153
|
|
|
109
154
|
/**
|
|
110
|
-
*
|
|
111
|
-
*/
|
|
112
|
-
pageview(path?: string): void;
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Flush pending events immediately
|
|
116
|
-
*/
|
|
117
|
-
flush(): Promise<void>;
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Opt out of analytics
|
|
121
|
-
*/
|
|
122
|
-
optOut(): void;
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Opt back in to analytics
|
|
126
|
-
*/
|
|
127
|
-
optIn(): void;
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Check if analytics is currently enabled
|
|
155
|
+
* Flush pending page view data immediately
|
|
131
156
|
*/
|
|
132
|
-
|
|
157
|
+
flush(): void;
|
|
133
158
|
}
|
|
134
159
|
|
|
135
160
|
declare global {
|
|
136
161
|
interface Window {
|
|
137
162
|
__AGENTUITY_ANALYTICS__?: AnalyticsPageConfig;
|
|
163
|
+
__AGENTUITY_SESSION__?: {
|
|
164
|
+
threadId?: string;
|
|
165
|
+
};
|
|
166
|
+
agentuityAnalytics?: AnalyticsClient;
|
|
138
167
|
}
|
|
139
168
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is a placeholder for TypeScript compilation.
|
|
3
|
+
* The actual BEACON_SCRIPT value is generated at build time by scripts/build-beacon.ts
|
|
4
|
+
* and written directly to dist/beacon-script.js, overwriting the compiled output.
|
|
5
|
+
*
|
|
6
|
+
* This allows TypeScript to generate proper .d.ts files during compilation,
|
|
7
|
+
* while the actual minified beacon code is injected during the build step.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const BEACON_SCRIPT: string = '';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Validates that the beacon script has been properly injected at build time.
|
|
14
|
+
* Call this early in the runtime to fail fast if the build step was missed.
|
|
15
|
+
* @throws Error if BEACON_SCRIPT is empty (build step not run)
|
|
16
|
+
*/
|
|
17
|
+
export function validateBeaconScript(): void {
|
|
18
|
+
if (!BEACON_SCRIPT || BEACON_SCRIPT.length === 0) {
|
|
19
|
+
throw new Error(
|
|
20
|
+
'BEACON_SCRIPT is empty. The frontend package was not built correctly. ' +
|
|
21
|
+
'Run "bun run build" in @agentuity/frontend to generate the beacon script.'
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -31,20 +31,23 @@ export type {
|
|
|
31
31
|
EventHandler,
|
|
32
32
|
} from './client/types';
|
|
33
33
|
|
|
34
|
-
// Export analytics
|
|
34
|
+
// Export analytics (beacon is bundled separately via beacon-standalone.ts)
|
|
35
35
|
export {
|
|
36
36
|
getAnalytics,
|
|
37
37
|
track,
|
|
38
|
-
initBeacon,
|
|
39
|
-
trackPageview,
|
|
40
|
-
createBaseEvent,
|
|
41
38
|
getVisitorId,
|
|
42
39
|
isOptedOut,
|
|
43
40
|
setOptOut,
|
|
44
41
|
getUTMParams,
|
|
45
42
|
type AnalyticsClient,
|
|
46
|
-
type
|
|
47
|
-
type AnalyticsEventType,
|
|
48
|
-
type AnalyticsBatchPayload,
|
|
43
|
+
type AnalyticsPayload,
|
|
49
44
|
type AnalyticsPageConfig,
|
|
45
|
+
type PageViewPayload,
|
|
46
|
+
type ScrollEvent,
|
|
47
|
+
type AnalyticsCustomEvent,
|
|
48
|
+
type GeoLocation,
|
|
50
49
|
} from './analytics';
|
|
50
|
+
|
|
51
|
+
// Re-export beacon script for server-side use
|
|
52
|
+
// The actual value is replaced at build time by scripts/build-beacon.ts
|
|
53
|
+
export { BEACON_SCRIPT, validateBeaconScript } from './beacon-script';
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { AnalyticsClient } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Initialize the analytics beacon
|
|
4
|
-
* Called automatically when the script loads
|
|
5
|
-
*/
|
|
6
|
-
export declare function initBeacon(): void;
|
|
7
|
-
/**
|
|
8
|
-
* Get the analytics client instance
|
|
9
|
-
*/
|
|
10
|
-
export declare function getAnalytics(): AnalyticsClient;
|
|
11
|
-
/**
|
|
12
|
-
* Convenience function to track a custom event
|
|
13
|
-
*/
|
|
14
|
-
export declare function track(eventName: string, properties?: Record<string, unknown>): void;
|
|
15
|
-
//# sourceMappingURL=beacon.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"beacon.d.ts","sourceRoot":"","sources":["../../src/analytics/beacon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,eAAe,EAAE,MAAM,SAAS,CAAC;AA6BpE;;;GAGG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAoBjC;AA6HD;;GAEG;AACH,wBAAgB,YAAY,IAAI,eAAe,CAK9C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEnF"}
|
package/dist/analytics/beacon.js
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { initEventQueue, queueEvent, flushEvents } from './events';
|
|
2
|
-
import { initPageviewTracking, createBaseEvent, trackPageview } from './collectors/pageview';
|
|
3
|
-
import { initSPATracking } from './collectors/spa';
|
|
4
|
-
import { initClickTracking, initOutboundLinkTracking } from './collectors/clicks';
|
|
5
|
-
import { initScrollTracking } from './collectors/scroll';
|
|
6
|
-
import { initErrorTracking } from './collectors/errors';
|
|
7
|
-
import { initVisibilityTracking } from './collectors/visibility';
|
|
8
|
-
import { initFormTracking } from './collectors/forms';
|
|
9
|
-
import { initWebVitalsTracking } from './collectors/webvitals';
|
|
10
|
-
import { isOptedOut, setOptOut } from './utils/storage';
|
|
11
|
-
import { initOfflineSupport, getAndClearOfflineEvents } from './offline';
|
|
12
|
-
let initialized = false;
|
|
13
|
-
let trackingStarted = false;
|
|
14
|
-
let analyticsEnabled = true;
|
|
15
|
-
let consentRequired = false;
|
|
16
|
-
let consentGiven = false;
|
|
17
|
-
/**
|
|
18
|
-
* Check if analytics should run
|
|
19
|
-
*/
|
|
20
|
-
function shouldTrack() {
|
|
21
|
-
if (!analyticsEnabled)
|
|
22
|
-
return false;
|
|
23
|
-
if (isOptedOut())
|
|
24
|
-
return false;
|
|
25
|
-
if (consentRequired && !consentGiven)
|
|
26
|
-
return false;
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Initialize the analytics beacon
|
|
31
|
-
* Called automatically when the script loads
|
|
32
|
-
*/
|
|
33
|
-
export function initBeacon() {
|
|
34
|
-
if (initialized) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
const config = window.__AGENTUITY_ANALYTICS__;
|
|
38
|
-
if (!config || !config.enabled) {
|
|
39
|
-
analyticsEnabled = false;
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
initialized = true;
|
|
43
|
-
consentRequired = config.requireConsent ?? false;
|
|
44
|
-
// If consent is required and not given, wait for optIn
|
|
45
|
-
if (consentRequired && !consentGiven) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
startTracking(config);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Start all tracking based on config
|
|
52
|
-
*/
|
|
53
|
-
function startTracking(config) {
|
|
54
|
-
if (trackingStarted) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
trackingStarted = true;
|
|
58
|
-
// Initialize event queue
|
|
59
|
-
initEventQueue(config);
|
|
60
|
-
// Initialize offline support
|
|
61
|
-
initOfflineSupport(async () => {
|
|
62
|
-
// Flush offline events when coming back online
|
|
63
|
-
const offlineEvents = await getAndClearOfflineEvents();
|
|
64
|
-
for (const event of offlineEvents) {
|
|
65
|
-
queueEvent(event);
|
|
66
|
-
}
|
|
67
|
-
flushEvents();
|
|
68
|
-
});
|
|
69
|
-
// Always track pageviews
|
|
70
|
-
initPageviewTracking();
|
|
71
|
-
// Initialize visibility tracking (for time on page)
|
|
72
|
-
initVisibilityTracking();
|
|
73
|
-
// Conditional tracking based on config (all default to true except requireConsent)
|
|
74
|
-
if (config.trackSPANavigation !== false) {
|
|
75
|
-
initSPATracking();
|
|
76
|
-
}
|
|
77
|
-
if (config.trackClicks !== false) {
|
|
78
|
-
initClickTracking();
|
|
79
|
-
}
|
|
80
|
-
if (config.trackOutboundLinks !== false) {
|
|
81
|
-
initOutboundLinkTracking();
|
|
82
|
-
}
|
|
83
|
-
if (config.trackScroll !== false) {
|
|
84
|
-
initScrollTracking();
|
|
85
|
-
}
|
|
86
|
-
if (config.trackErrors !== false) {
|
|
87
|
-
initErrorTracking();
|
|
88
|
-
}
|
|
89
|
-
if (config.trackForms !== false) {
|
|
90
|
-
initFormTracking();
|
|
91
|
-
}
|
|
92
|
-
if (config.trackWebVitals !== false) {
|
|
93
|
-
initWebVitalsTracking();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Create the analytics client API
|
|
98
|
-
*/
|
|
99
|
-
function createClient() {
|
|
100
|
-
return {
|
|
101
|
-
track(eventName, properties) {
|
|
102
|
-
if (!shouldTrack())
|
|
103
|
-
return;
|
|
104
|
-
const event = createBaseEvent('custom');
|
|
105
|
-
event.event_name = eventName;
|
|
106
|
-
if (properties) {
|
|
107
|
-
event.event_data = properties;
|
|
108
|
-
}
|
|
109
|
-
queueEvent(event);
|
|
110
|
-
},
|
|
111
|
-
identify(userId, traits) {
|
|
112
|
-
if (!shouldTrack())
|
|
113
|
-
return;
|
|
114
|
-
const event = createBaseEvent('custom');
|
|
115
|
-
event.event_name = 'identify';
|
|
116
|
-
event.event_data = {
|
|
117
|
-
user_id: userId,
|
|
118
|
-
...traits,
|
|
119
|
-
};
|
|
120
|
-
queueEvent(event);
|
|
121
|
-
},
|
|
122
|
-
pageview(path) {
|
|
123
|
-
if (!shouldTrack())
|
|
124
|
-
return;
|
|
125
|
-
trackPageview(path);
|
|
126
|
-
},
|
|
127
|
-
async flush() {
|
|
128
|
-
flushEvents();
|
|
129
|
-
},
|
|
130
|
-
optOut() {
|
|
131
|
-
setOptOut(true);
|
|
132
|
-
analyticsEnabled = false;
|
|
133
|
-
},
|
|
134
|
-
optIn() {
|
|
135
|
-
setOptOut(false);
|
|
136
|
-
analyticsEnabled = true;
|
|
137
|
-
consentGiven = true;
|
|
138
|
-
// If consent was required and now given, start tracking
|
|
139
|
-
if (consentRequired && !trackingStarted) {
|
|
140
|
-
const config = window.__AGENTUITY_ANALYTICS__;
|
|
141
|
-
if (config) {
|
|
142
|
-
startTracking(config);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
isEnabled() {
|
|
147
|
-
return shouldTrack();
|
|
148
|
-
},
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
// Singleton client instance
|
|
152
|
-
let clientInstance = null;
|
|
153
|
-
/**
|
|
154
|
-
* Get the analytics client instance
|
|
155
|
-
*/
|
|
156
|
-
export function getAnalytics() {
|
|
157
|
-
if (!clientInstance) {
|
|
158
|
-
clientInstance = createClient();
|
|
159
|
-
}
|
|
160
|
-
return clientInstance;
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Convenience function to track a custom event
|
|
164
|
-
*/
|
|
165
|
-
export function track(eventName, properties) {
|
|
166
|
-
getAnalytics().track(eventName, properties);
|
|
167
|
-
}
|
|
168
|
-
// Auto-initialize when script loads
|
|
169
|
-
if (typeof window !== 'undefined') {
|
|
170
|
-
if (document.readyState === 'loading') {
|
|
171
|
-
document.addEventListener('DOMContentLoaded', initBeacon);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
initBeacon();
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
//# sourceMappingURL=beacon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"beacon.js","sourceRoot":"","sources":["../../src/analytics/beacon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Initialize click tracking
|
|
3
|
-
* Tracks clicks on elements with data-analytics attribute
|
|
4
|
-
*/
|
|
5
|
-
export declare function initClickTracking(): void;
|
|
6
|
-
/**
|
|
7
|
-
* Initialize outbound link tracking
|
|
8
|
-
*/
|
|
9
|
-
export declare function initOutboundLinkTracking(): void;
|
|
10
|
-
//# sourceMappingURL=clicks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clicks.d.ts","sourceRoot":"","sources":["../../../src/analytics/collectors/clicks.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAgDxC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAuC/C"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { createBaseEvent } from './pageview';
|
|
2
|
-
import { queueEvent } from '../events';
|
|
3
|
-
/**
|
|
4
|
-
* Initialize click tracking
|
|
5
|
-
* Tracks clicks on elements with data-analytics attribute
|
|
6
|
-
*/
|
|
7
|
-
export function initClickTracking() {
|
|
8
|
-
if (typeof document === 'undefined') {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
document.addEventListener('click', (e) => {
|
|
12
|
-
const target = e.target;
|
|
13
|
-
if (!target)
|
|
14
|
-
return;
|
|
15
|
-
// Find closest element with data-analytics attribute
|
|
16
|
-
const analyticsElement = target.closest('[data-analytics]');
|
|
17
|
-
if (!analyticsElement)
|
|
18
|
-
return;
|
|
19
|
-
const eventName = analyticsElement.getAttribute('data-analytics');
|
|
20
|
-
if (!eventName)
|
|
21
|
-
return;
|
|
22
|
-
const event = createBaseEvent('click');
|
|
23
|
-
event.event_name = eventName;
|
|
24
|
-
// Collect additional data attributes
|
|
25
|
-
const eventData = {};
|
|
26
|
-
for (const attr of Array.from(analyticsElement.attributes)) {
|
|
27
|
-
if (attr.name.startsWith('data-analytics-')) {
|
|
28
|
-
const key = attr.name.replace('data-analytics-', '');
|
|
29
|
-
eventData[key] = attr.value;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
// Add element info
|
|
33
|
-
eventData.tag = analyticsElement.tagName.toLowerCase();
|
|
34
|
-
if (analyticsElement.id) {
|
|
35
|
-
eventData.id = analyticsElement.id;
|
|
36
|
-
}
|
|
37
|
-
const text = analyticsElement.innerText?.slice(0, 100);
|
|
38
|
-
if (text) {
|
|
39
|
-
eventData.text = text;
|
|
40
|
-
}
|
|
41
|
-
if (Object.keys(eventData).length > 0) {
|
|
42
|
-
event.event_data = eventData;
|
|
43
|
-
}
|
|
44
|
-
queueEvent(event);
|
|
45
|
-
}, { capture: true, passive: true });
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Initialize outbound link tracking
|
|
49
|
-
*/
|
|
50
|
-
export function initOutboundLinkTracking() {
|
|
51
|
-
if (typeof document === 'undefined') {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
document.addEventListener('click', (e) => {
|
|
55
|
-
const target = e.target;
|
|
56
|
-
if (!target)
|
|
57
|
-
return;
|
|
58
|
-
const link = target.closest('a');
|
|
59
|
-
if (!link)
|
|
60
|
-
return;
|
|
61
|
-
const href = link.href;
|
|
62
|
-
if (!href)
|
|
63
|
-
return;
|
|
64
|
-
// Check if it's an outbound link
|
|
65
|
-
try {
|
|
66
|
-
const url = new URL(href, window.location.origin);
|
|
67
|
-
if (url.hostname === window.location.hostname) {
|
|
68
|
-
return; // Same domain, not outbound
|
|
69
|
-
}
|
|
70
|
-
const event = createBaseEvent('outbound_link');
|
|
71
|
-
event.event_name = 'outbound_link';
|
|
72
|
-
event.event_data = {
|
|
73
|
-
href,
|
|
74
|
-
hostname: url.hostname,
|
|
75
|
-
text: link.innerText?.slice(0, 100) || '',
|
|
76
|
-
};
|
|
77
|
-
queueEvent(event);
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
// Invalid URL, ignore
|
|
81
|
-
}
|
|
82
|
-
}, { capture: true, passive: true });
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=clicks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clicks.js","sourceRoot":"","sources":["../../../src/analytics/collectors/clicks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/analytics/collectors/errors.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CA0CxC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { createBaseEvent } from './pageview';
|
|
2
|
-
import { queueEvent } from '../events';
|
|
3
|
-
/**
|
|
4
|
-
* Initialize JavaScript error tracking
|
|
5
|
-
*/
|
|
6
|
-
export function initErrorTracking() {
|
|
7
|
-
if (typeof window === 'undefined') {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
// Handle uncaught errors
|
|
11
|
-
window.addEventListener('error', (e) => {
|
|
12
|
-
const event = createBaseEvent('error');
|
|
13
|
-
event.event_name = 'js_error';
|
|
14
|
-
event.event_data = {
|
|
15
|
-
message: e.message || 'Unknown error',
|
|
16
|
-
filename: e.filename || '',
|
|
17
|
-
lineno: e.lineno || 0,
|
|
18
|
-
colno: e.colno || 0,
|
|
19
|
-
stack: e.error?.stack?.slice(0, 1000) || '',
|
|
20
|
-
};
|
|
21
|
-
queueEvent(event);
|
|
22
|
-
});
|
|
23
|
-
// Handle unhandled promise rejections
|
|
24
|
-
window.addEventListener('unhandledrejection', (e) => {
|
|
25
|
-
const event = createBaseEvent('error');
|
|
26
|
-
event.event_name = 'unhandled_rejection';
|
|
27
|
-
let message = 'Unhandled Promise Rejection';
|
|
28
|
-
let stack = '';
|
|
29
|
-
if (e.reason instanceof Error) {
|
|
30
|
-
message = e.reason.message;
|
|
31
|
-
stack = e.reason.stack?.slice(0, 1000) || '';
|
|
32
|
-
}
|
|
33
|
-
else if (typeof e.reason === 'string') {
|
|
34
|
-
message = e.reason;
|
|
35
|
-
}
|
|
36
|
-
event.event_data = {
|
|
37
|
-
message,
|
|
38
|
-
stack,
|
|
39
|
-
};
|
|
40
|
-
queueEvent(event);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/analytics/collectors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAChC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO;IACR,CAAC;IAED,yBAAyB;IACzB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9B,KAAK,CAAC,UAAU,GAAG;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,eAAe;YACrC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;YAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC;YACrB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;YACnB,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE;SAC3C,CAAC;QAEF,UAAU,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE;QACnD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,CAAC,UAAU,GAAG,qBAAqB,CAAC;QAEzC,IAAI,OAAO,GAAG,6BAA6B,CAAC;QAC5C,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,IAAI,CAAC,CAAC,MAAM,YAAY,KAAK,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3B,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;QACpB,CAAC;QAED,KAAK,CAAC,UAAU,GAAG;YAClB,OAAO;YACP,KAAK;SACL,CAAC;QAEF,UAAU,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;AACJ,CAAC"}
|