@agentuity/frontend 0.1.2 → 0.1.4
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 +12 -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/offline.ts
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import type { AnalyticsEvent } from './types';
|
|
2
|
-
|
|
3
|
-
const DB_NAME = 'agentuity_analytics';
|
|
4
|
-
const STORE_NAME = 'events';
|
|
5
|
-
const DB_VERSION = 1;
|
|
6
|
-
const MAX_QUEUE_SIZE = 1000;
|
|
7
|
-
|
|
8
|
-
let db: IDBDatabase | null = null;
|
|
9
|
-
let dbInitPromise: Promise<IDBDatabase | null> | null = null;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Initialize IndexedDB for offline event storage
|
|
13
|
-
*/
|
|
14
|
-
async function initDB(): Promise<IDBDatabase | null> {
|
|
15
|
-
if (typeof indexedDB === 'undefined') {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return new Promise((resolve) => {
|
|
20
|
-
try {
|
|
21
|
-
const request = indexedDB.open(DB_NAME, DB_VERSION);
|
|
22
|
-
|
|
23
|
-
request.onerror = () => {
|
|
24
|
-
resolve(null);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
request.onsuccess = () => {
|
|
28
|
-
resolve(request.result);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
request.onupgradeneeded = (e) => {
|
|
32
|
-
const database = (e.target as IDBOpenDBRequest).result;
|
|
33
|
-
if (!database.objectStoreNames.contains(STORE_NAME)) {
|
|
34
|
-
database.createObjectStore(STORE_NAME, { keyPath: 'id' });
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
} catch {
|
|
38
|
-
resolve(null);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Get database instance
|
|
45
|
-
*/
|
|
46
|
-
async function getDB(): Promise<IDBDatabase | null> {
|
|
47
|
-
if (db) {
|
|
48
|
-
return db;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (!dbInitPromise) {
|
|
52
|
-
dbInitPromise = initDB();
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
db = await dbInitPromise;
|
|
56
|
-
return db;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Store event in IndexedDB for offline persistence
|
|
61
|
-
*/
|
|
62
|
-
export async function storeOfflineEvent(event: AnalyticsEvent): Promise<void> {
|
|
63
|
-
const database = await getDB();
|
|
64
|
-
if (!database) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
const transaction = database.transaction(STORE_NAME, 'readwrite');
|
|
70
|
-
const store = transaction.objectStore(STORE_NAME);
|
|
71
|
-
|
|
72
|
-
// Check current count and evict old events if needed before adding
|
|
73
|
-
const count = await new Promise<number>((resolve) => {
|
|
74
|
-
const countRequest = store.count();
|
|
75
|
-
countRequest.onsuccess = () => resolve(countRequest.result);
|
|
76
|
-
countRequest.onerror = () => resolve(0);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
if (count >= MAX_QUEUE_SIZE) {
|
|
80
|
-
// Evict oldest event (FIFO) before adding new one
|
|
81
|
-
await new Promise<void>((resolve) => {
|
|
82
|
-
const cursorRequest = store.openCursor();
|
|
83
|
-
cursorRequest.onsuccess = () => {
|
|
84
|
-
const cursor = cursorRequest.result;
|
|
85
|
-
if (cursor) {
|
|
86
|
-
const deleteRequest = cursor.delete();
|
|
87
|
-
deleteRequest.onsuccess = () => resolve();
|
|
88
|
-
deleteRequest.onerror = () => resolve();
|
|
89
|
-
} else {
|
|
90
|
-
resolve();
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
cursorRequest.onerror = () => resolve();
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
store.add(event);
|
|
98
|
-
} catch {
|
|
99
|
-
// Silent failure
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Get all offline events and clear them
|
|
105
|
-
*/
|
|
106
|
-
export async function getAndClearOfflineEvents(): Promise<AnalyticsEvent[]> {
|
|
107
|
-
const database = await getDB();
|
|
108
|
-
if (!database) {
|
|
109
|
-
return [];
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return new Promise((resolve) => {
|
|
113
|
-
try {
|
|
114
|
-
const transaction = database.transaction(STORE_NAME, 'readwrite');
|
|
115
|
-
const store = transaction.objectStore(STORE_NAME);
|
|
116
|
-
|
|
117
|
-
const events: AnalyticsEvent[] = [];
|
|
118
|
-
const request = store.openCursor();
|
|
119
|
-
|
|
120
|
-
request.onsuccess = () => {
|
|
121
|
-
const cursor = request.result;
|
|
122
|
-
if (cursor) {
|
|
123
|
-
events.push(cursor.value as AnalyticsEvent);
|
|
124
|
-
cursor.delete();
|
|
125
|
-
cursor.continue();
|
|
126
|
-
} else {
|
|
127
|
-
resolve(events);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
request.onerror = () => {
|
|
132
|
-
resolve([]);
|
|
133
|
-
};
|
|
134
|
-
} catch {
|
|
135
|
-
resolve([]);
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Check if we're online
|
|
142
|
-
*/
|
|
143
|
-
export function isOnline(): boolean {
|
|
144
|
-
if (typeof navigator === 'undefined') {
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
return navigator.onLine !== false;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Initialize offline support
|
|
152
|
-
* Listens for online event to flush queued events
|
|
153
|
-
*/
|
|
154
|
-
export function initOfflineSupport(flushCallback: () => void): void {
|
|
155
|
-
if (typeof window === 'undefined') {
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
window.addEventListener('online', () => {
|
|
160
|
-
// Flush offline events when coming back online
|
|
161
|
-
flushCallback();
|
|
162
|
-
});
|
|
163
|
-
}
|