@interfere/react 0.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/dist/__tests__/client.test.d.ts +2 -0
- package/dist/__tests__/client.test.d.ts.map +1 -0
- package/dist/__tests__/client.test.js +447 -0
- package/dist/__tests__/client.test.js.map +1 -0
- package/dist/__tests__/lib/core/error-handlers.test.d.ts +2 -0
- package/dist/__tests__/lib/core/error-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/lib/core/error-handlers.test.js +596 -0
- package/dist/__tests__/lib/core/error-handlers.test.js.map +1 -0
- package/dist/__tests__/lib/core/event-queue.test.d.ts +2 -0
- package/dist/__tests__/lib/core/event-queue.test.d.ts.map +1 -0
- package/dist/__tests__/lib/core/event-queue.test.js +290 -0
- package/dist/__tests__/lib/core/event-queue.test.js.map +1 -0
- package/dist/__tests__/lib/core/runtime.test.d.ts +2 -0
- package/dist/__tests__/lib/core/runtime.test.d.ts.map +1 -0
- package/dist/__tests__/lib/core/runtime.test.js +133 -0
- package/dist/__tests__/lib/core/runtime.test.js.map +1 -0
- package/dist/__tests__/lib/core/session-manager.test.d.ts +2 -0
- package/dist/__tests__/lib/core/session-manager.test.d.ts.map +1 -0
- package/dist/__tests__/lib/core/session-manager.test.js +356 -0
- package/dist/__tests__/lib/core/session-manager.test.js.map +1 -0
- package/dist/__tests__/provider.test.d.ts +2 -0
- package/dist/__tests__/provider.test.d.ts.map +1 -0
- package/dist/__tests__/provider.test.js +143 -0
- package/dist/__tests__/provider.test.js.map +1 -0
- package/dist/client.d.ts +78 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +219 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/core/error-handlers.d.ts +14 -0
- package/dist/lib/core/error-handlers.d.ts.map +1 -0
- package/dist/lib/core/error-handlers.js +191 -0
- package/dist/lib/core/error-handlers.js.map +1 -0
- package/dist/lib/core/event-queue.d.ts +90 -0
- package/dist/lib/core/event-queue.d.ts.map +1 -0
- package/dist/lib/core/event-queue.js +286 -0
- package/dist/lib/core/event-queue.js.map +1 -0
- package/dist/lib/core/runtime.d.ts +7 -0
- package/dist/lib/core/runtime.d.ts.map +1 -0
- package/dist/lib/core/runtime.js +16 -0
- package/dist/lib/core/runtime.js.map +1 -0
- package/dist/lib/core/session-manager.d.ts +96 -0
- package/dist/lib/core/session-manager.d.ts.map +1 -0
- package/dist/lib/core/session-manager.js +431 -0
- package/dist/lib/core/session-manager.js.map +1 -0
- package/dist/lib/persistence/storage.d.ts +5 -0
- package/dist/lib/persistence/storage.d.ts.map +1 -0
- package/dist/lib/persistence/storage.js +67 -0
- package/dist/lib/persistence/storage.js.map +1 -0
- package/dist/lib/session/rage-click.d.ts +2 -0
- package/dist/lib/session/rage-click.d.ts.map +1 -0
- package/dist/lib/session/rage-click.js +51 -0
- package/dist/lib/session/rage-click.js.map +1 -0
- package/dist/lib/session/replay.d.ts +3 -0
- package/dist/lib/session/replay.d.ts.map +1 -0
- package/dist/lib/session/replay.js +106 -0
- package/dist/lib/session/replay.js.map +1 -0
- package/dist/lib/session/session-summary.d.ts +3 -0
- package/dist/lib/session/session-summary.d.ts.map +1 -0
- package/dist/lib/session/session-summary.js +79 -0
- package/dist/lib/session/session-summary.js.map +1 -0
- package/dist/provider.d.ts +76 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +138 -0
- package/dist/provider.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced session management with multiple persistence strategies
|
|
3
|
+
*/
|
|
4
|
+
import { RADIX_36, RANDOM_SUBSTRING_END, RANDOM_SUBSTRING_START, SESSION_DURATION_MS, SESSION_EXTEND_THRESHOLD_MS, SESSION_KEY, } from "@interfere/constants";
|
|
5
|
+
/**
|
|
6
|
+
* Helper function to set a cookie value
|
|
7
|
+
*/
|
|
8
|
+
function setCookie(name, value, expires) {
|
|
9
|
+
if (typeof document === "undefined") {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const expiresStr = expires ? `; expires=${expires}` : "";
|
|
13
|
+
const cookieString = `${name}=${value}${expiresStr}; path=/; SameSite=Lax`;
|
|
14
|
+
// biome-ignore lint/suspicious/noDocumentCookie: For broad support
|
|
15
|
+
document.cookie = cookieString;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Helper function to delete a cookie
|
|
19
|
+
*/
|
|
20
|
+
function deleteCookie(name) {
|
|
21
|
+
if (typeof document === "undefined") {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const cookieString = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
|
|
25
|
+
// biome-ignore lint/suspicious/noDocumentCookie: For broad support
|
|
26
|
+
document.cookie = cookieString;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Helper function to get all cookies as key-value pairs
|
|
30
|
+
*/
|
|
31
|
+
function getCookies() {
|
|
32
|
+
if (typeof document === "undefined") {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
const cookies = {};
|
|
36
|
+
const cookieString = document.cookie;
|
|
37
|
+
if (cookieString) {
|
|
38
|
+
const pairs = cookieString.split(";");
|
|
39
|
+
for (const pair of pairs) {
|
|
40
|
+
const [name, value] = pair.trim().split("=");
|
|
41
|
+
if (name && value) {
|
|
42
|
+
cookies[name] = value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return cookies;
|
|
47
|
+
}
|
|
48
|
+
export class SessionManager {
|
|
49
|
+
sessionData = null;
|
|
50
|
+
persistenceStrategy = "memory";
|
|
51
|
+
onSessionChange;
|
|
52
|
+
constructor(onSessionChange) {
|
|
53
|
+
this.onSessionChange = onSessionChange;
|
|
54
|
+
this.initializeSession();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Initialize session from storage or create new
|
|
58
|
+
*/
|
|
59
|
+
initializeSession() {
|
|
60
|
+
// Try to restore session from various sources
|
|
61
|
+
const restored = this.restoreFromLocalStorage() ||
|
|
62
|
+
this.restoreFromCookie() ||
|
|
63
|
+
this.restoreFromSessionStorage();
|
|
64
|
+
if (restored) {
|
|
65
|
+
this.sessionData = restored;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Create new session and set default persistence strategy
|
|
69
|
+
this.sessionData = this.createNewSession();
|
|
70
|
+
// Try localStorage first for new sessions
|
|
71
|
+
if (this.testLocalStorage()) {
|
|
72
|
+
this.persistenceStrategy = "localStorage";
|
|
73
|
+
}
|
|
74
|
+
else if (typeof document !== "undefined") {
|
|
75
|
+
this.persistenceStrategy = "cookie";
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.persistenceStrategy = "memory";
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Persist the session
|
|
82
|
+
this.persistSession();
|
|
83
|
+
// Update last activity
|
|
84
|
+
this.updateActivity();
|
|
85
|
+
// Notify of session change
|
|
86
|
+
if (this.onSessionChange && this.sessionData) {
|
|
87
|
+
this.onSessionChange(this.sessionData.sessionId);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get current session ID
|
|
92
|
+
*/
|
|
93
|
+
getSessionId() {
|
|
94
|
+
if (!this.sessionData) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
// Check if session expired (only if expiresAt is set)
|
|
98
|
+
if (this.sessionData.expiresAt && Date.now() > this.sessionData.expiresAt) {
|
|
99
|
+
this.resetSession();
|
|
100
|
+
return this.sessionData?.sessionId || null;
|
|
101
|
+
}
|
|
102
|
+
return this.sessionData.sessionId;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get full session data
|
|
106
|
+
*/
|
|
107
|
+
getSessionData() {
|
|
108
|
+
return this.sessionData;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Update session activity
|
|
112
|
+
*/
|
|
113
|
+
updateActivity() {
|
|
114
|
+
if (!this.sessionData) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const now = Date.now();
|
|
118
|
+
this.sessionData.lastActivityTimestamp = now;
|
|
119
|
+
// Extend session if less than threshold remaining
|
|
120
|
+
if (this.sessionData.expiresAt) {
|
|
121
|
+
const timeRemaining = this.sessionData.expiresAt - now;
|
|
122
|
+
if (timeRemaining < SESSION_EXTEND_THRESHOLD_MS) {
|
|
123
|
+
this.sessionData.expiresAt = now + SESSION_DURATION_MS;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this.sessionData.expiresAt = now + SESSION_DURATION_MS;
|
|
128
|
+
}
|
|
129
|
+
this.persistSession();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Reset session
|
|
133
|
+
*/
|
|
134
|
+
resetSession() {
|
|
135
|
+
// Clear all storage
|
|
136
|
+
this.clearAllStorage();
|
|
137
|
+
// Create new session
|
|
138
|
+
this.sessionData = this.createNewSession();
|
|
139
|
+
// Notify of change
|
|
140
|
+
if (this.onSessionChange && this.sessionData) {
|
|
141
|
+
this.onSessionChange(this.sessionData.sessionId);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create new session
|
|
146
|
+
*/
|
|
147
|
+
createNewSession() {
|
|
148
|
+
const now = Date.now();
|
|
149
|
+
const session = {
|
|
150
|
+
sessionId: this.generateSessionId(),
|
|
151
|
+
startTimestamp: now,
|
|
152
|
+
lastActivityTimestamp: now,
|
|
153
|
+
expiresAt: now + SESSION_DURATION_MS,
|
|
154
|
+
};
|
|
155
|
+
this.persistSession(session);
|
|
156
|
+
return session;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Generate unique session ID
|
|
160
|
+
*/
|
|
161
|
+
generateSessionId() {
|
|
162
|
+
const timestamp = Date.now().toString(RADIX_36);
|
|
163
|
+
const random = Math.random()
|
|
164
|
+
.toString(RADIX_36)
|
|
165
|
+
.substring(RANDOM_SUBSTRING_START, RANDOM_SUBSTRING_END);
|
|
166
|
+
return `ses_${timestamp}_${random}`;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Persist session to available storage
|
|
170
|
+
*/
|
|
171
|
+
persistSession(session) {
|
|
172
|
+
const sessionToSave = session || this.sessionData;
|
|
173
|
+
if (!sessionToSave) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
// Try to use the current persistence strategy first
|
|
177
|
+
let success = false;
|
|
178
|
+
if (this.persistenceStrategy === "localStorage") {
|
|
179
|
+
success = this.saveToLocalStorage(sessionToSave);
|
|
180
|
+
}
|
|
181
|
+
else if (this.persistenceStrategy === "cookie") {
|
|
182
|
+
success = this.saveToCookie(sessionToSave);
|
|
183
|
+
}
|
|
184
|
+
// If current strategy fails, try all strategies
|
|
185
|
+
if (!success) {
|
|
186
|
+
const strategies = [
|
|
187
|
+
() => this.saveToLocalStorage(sessionToSave),
|
|
188
|
+
() => this.saveToCookie(sessionToSave),
|
|
189
|
+
() => this.saveToSessionStorage(sessionToSave),
|
|
190
|
+
];
|
|
191
|
+
for (const strategy of strategies) {
|
|
192
|
+
try {
|
|
193
|
+
if (strategy()) {
|
|
194
|
+
break; // Success, stop trying
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// Try next strategy
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Try to restore session from cookie
|
|
205
|
+
*/
|
|
206
|
+
restoreFromCookie() {
|
|
207
|
+
try {
|
|
208
|
+
const cookies = getCookies();
|
|
209
|
+
// Check for interfereSessionData cookie (used in tests) or SESSION_KEY
|
|
210
|
+
const sessionCookie = cookies.interfereSessionData || cookies[SESSION_KEY];
|
|
211
|
+
if (sessionCookie) {
|
|
212
|
+
const session = JSON.parse(decodeURIComponent(sessionCookie));
|
|
213
|
+
if (this.isValidSession(session)) {
|
|
214
|
+
this.persistenceStrategy = "cookie";
|
|
215
|
+
return session;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Invalid cookie data
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Save session to cookie
|
|
226
|
+
*/
|
|
227
|
+
saveToCookie(session) {
|
|
228
|
+
try {
|
|
229
|
+
const value = encodeURIComponent(JSON.stringify(session));
|
|
230
|
+
const expires = session.expiresAt
|
|
231
|
+
? new Date(session.expiresAt).toUTCString()
|
|
232
|
+
: undefined;
|
|
233
|
+
setCookie(SESSION_KEY, value, expires);
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Try to restore session from localStorage
|
|
242
|
+
*/
|
|
243
|
+
restoreFromLocalStorage() {
|
|
244
|
+
if (typeof localStorage === "undefined") {
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
const data = localStorage.getItem(SESSION_KEY);
|
|
249
|
+
if (data) {
|
|
250
|
+
const session = JSON.parse(data);
|
|
251
|
+
if (this.isValidSession(session)) {
|
|
252
|
+
this.persistenceStrategy = "localStorage";
|
|
253
|
+
return session;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// Invalid data
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Save session to localStorage
|
|
264
|
+
*/
|
|
265
|
+
saveToLocalStorage(session) {
|
|
266
|
+
if (typeof localStorage === "undefined") {
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
try {
|
|
270
|
+
localStorage.setItem(SESSION_KEY, JSON.stringify(session));
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return false;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Try to restore session from sessionStorage
|
|
279
|
+
*/
|
|
280
|
+
restoreFromSessionStorage() {
|
|
281
|
+
if (typeof sessionStorage === "undefined") {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
try {
|
|
285
|
+
const data = sessionStorage.getItem(SESSION_KEY);
|
|
286
|
+
if (data) {
|
|
287
|
+
const session = JSON.parse(data);
|
|
288
|
+
if (this.isValidSession(session)) {
|
|
289
|
+
this.persistenceStrategy = "memory"; // sessionStorage doesn't persist across sessions
|
|
290
|
+
return session;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
// Invalid data
|
|
296
|
+
}
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Save session to sessionStorage
|
|
301
|
+
*/
|
|
302
|
+
saveToSessionStorage(session) {
|
|
303
|
+
if (typeof sessionStorage === "undefined") {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
try {
|
|
307
|
+
sessionStorage.setItem(SESSION_KEY, JSON.stringify(session));
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Check if session data is valid
|
|
316
|
+
*/
|
|
317
|
+
isValidSession(session) {
|
|
318
|
+
if (!session || typeof session !== "object") {
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
const s = session;
|
|
322
|
+
// Support both old (id) and new (sessionId) field names for backward compatibility
|
|
323
|
+
const hasValidId = typeof s.sessionId === "string" || typeof s.id === "string";
|
|
324
|
+
// Normalize to sessionId
|
|
325
|
+
if (!s.sessionId && s.id && typeof s.id === "string") {
|
|
326
|
+
s.sessionId = s.id;
|
|
327
|
+
s.id = undefined;
|
|
328
|
+
}
|
|
329
|
+
return (hasValidId &&
|
|
330
|
+
typeof s.startTimestamp === "number" &&
|
|
331
|
+
typeof s.lastActivityTimestamp === "number" &&
|
|
332
|
+
(!s.expiresAt || typeof s.expiresAt === "number") &&
|
|
333
|
+
(!s.expiresAt ||
|
|
334
|
+
(typeof s.expiresAt === "number" && s.expiresAt > Date.now())) // Not expired if expiresAt is set
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Clear all storage
|
|
339
|
+
*/
|
|
340
|
+
clearAllStorage() {
|
|
341
|
+
// Clear cookie
|
|
342
|
+
deleteCookie(SESSION_KEY);
|
|
343
|
+
// Clear localStorage
|
|
344
|
+
if (typeof localStorage !== "undefined") {
|
|
345
|
+
localStorage.removeItem(SESSION_KEY);
|
|
346
|
+
}
|
|
347
|
+
// Clear sessionStorage
|
|
348
|
+
if (typeof sessionStorage !== "undefined") {
|
|
349
|
+
sessionStorage.removeItem(SESSION_KEY);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Get debug info
|
|
354
|
+
*/
|
|
355
|
+
getDebugInfo() {
|
|
356
|
+
const now = Date.now();
|
|
357
|
+
return {
|
|
358
|
+
sessionId: this.sessionData?.sessionId || null,
|
|
359
|
+
sessionStartTimestamp: this.sessionData?.startTimestamp || null,
|
|
360
|
+
lastActivityTimestamp: this.sessionData?.lastActivityTimestamp || null,
|
|
361
|
+
sessionTimeoutMs: SESSION_DURATION_MS,
|
|
362
|
+
sessionAge: this.sessionData
|
|
363
|
+
? now - this.sessionData.startTimestamp
|
|
364
|
+
: null,
|
|
365
|
+
timeSinceLastActivity: this.sessionData
|
|
366
|
+
? now - this.sessionData.lastActivityTimestamp
|
|
367
|
+
: null,
|
|
368
|
+
isSessionActive: !!this.sessionData &&
|
|
369
|
+
(!this.sessionData.expiresAt || this.sessionData.expiresAt > now),
|
|
370
|
+
persistenceStrategy: this.persistenceStrategy,
|
|
371
|
+
storageInfo: {
|
|
372
|
+
canUseLocalStorage: typeof localStorage !== "undefined",
|
|
373
|
+
canUseSessionStorage: typeof sessionStorage !== "undefined",
|
|
374
|
+
storageKeys: this.getStorageKeys(),
|
|
375
|
+
localStorageSupported: this.testLocalStorage(),
|
|
376
|
+
sessionStorageSupported: this.testSessionStorage(),
|
|
377
|
+
persistenceType: this.persistenceStrategy,
|
|
378
|
+
isDisabled: false,
|
|
379
|
+
},
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Get storage keys
|
|
384
|
+
*/
|
|
385
|
+
getStorageKeys() {
|
|
386
|
+
const keys = [];
|
|
387
|
+
if (typeof localStorage !== "undefined") {
|
|
388
|
+
try {
|
|
389
|
+
for (let i = 0; i < localStorage.length; i++) {
|
|
390
|
+
const key = localStorage.key(i);
|
|
391
|
+
if (key?.startsWith("interfere")) {
|
|
392
|
+
keys.push(key);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
// Storage might be disabled
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return keys;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Test localStorage availability
|
|
404
|
+
*/
|
|
405
|
+
testLocalStorage() {
|
|
406
|
+
try {
|
|
407
|
+
const test = "__interfere_test__";
|
|
408
|
+
localStorage.setItem(test, test);
|
|
409
|
+
localStorage.removeItem(test);
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
catch {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Test sessionStorage availability
|
|
418
|
+
*/
|
|
419
|
+
testSessionStorage() {
|
|
420
|
+
try {
|
|
421
|
+
const test = "__interfere_test__";
|
|
422
|
+
sessionStorage.setItem(test, test);
|
|
423
|
+
sessionStorage.removeItem(test);
|
|
424
|
+
return true;
|
|
425
|
+
}
|
|
426
|
+
catch {
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/lib/core/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { PersistentStore } from "@interfere/schemas/persistent-store";
|
|
2
|
+
export declare const localStore: PersistentStore;
|
|
3
|
+
export declare const sessionStore: PersistentStore;
|
|
4
|
+
export declare const memoryStore: PersistentStore;
|
|
5
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/lib/persistence/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAoE3E,eAAO,MAAM,UAAU,iBAAgC,CAAC;AACxD,eAAO,MAAM,YAAY,iBAAkC,CAAC;AAC5D,eAAO,MAAM,WAAW,iBAA0B,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const createStorage = (storageType) => {
|
|
2
|
+
const memoryStore = {};
|
|
3
|
+
const isSupported = () => {
|
|
4
|
+
if (storageType === "memory") {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
if (typeof window === "undefined") {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const storage = window[storageType];
|
|
12
|
+
const testKey = "__interfere_test__";
|
|
13
|
+
storage.setItem(testKey, "test");
|
|
14
|
+
storage.removeItem(testKey);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const getStorage = () => {
|
|
22
|
+
if (storageType === "memory" || !isSupported()) {
|
|
23
|
+
return {
|
|
24
|
+
getItem: (key) => memoryStore[key] ?? null,
|
|
25
|
+
setItem: (key, value) => {
|
|
26
|
+
memoryStore[key] = value;
|
|
27
|
+
},
|
|
28
|
+
removeItem: (key) => {
|
|
29
|
+
delete memoryStore[key];
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return window[storageType];
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
_is_supported: isSupported,
|
|
37
|
+
_parse: (key) => {
|
|
38
|
+
try {
|
|
39
|
+
const value = getStorage().getItem(key);
|
|
40
|
+
return value ? JSON.parse(value) : null;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
_set: (key, value) => {
|
|
47
|
+
try {
|
|
48
|
+
getStorage().setItem(key, JSON.stringify(value));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Silently fail
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
_remove: (key) => {
|
|
55
|
+
try {
|
|
56
|
+
getStorage().removeItem(key);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Silently fail
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export const localStore = createStorage("localStorage");
|
|
65
|
+
export const sessionStore = createStorage("sessionStorage");
|
|
66
|
+
export const memoryStore = createStorage("memory");
|
|
67
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/lib/persistence/storage.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,CACpB,WAAyD,EACxC,EAAE;IACnB,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,MAAM,WAAW,GAAG,GAAY,EAAE;QAChC,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,oBAAoB,CAAC;YACrC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/C,OAAO;gBACL,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI;gBAClD,OAAO,EAAE,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;oBACtC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC3B,CAAC;gBACD,UAAU,EAAE,CAAC,GAAW,EAAE,EAAE;oBAC1B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;aACF,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,WAAW;QAC1B,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACxC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC,GAAW,EAAE,KAAc,EAAE,EAAE;YACpC,IAAI,CAAC;gBACH,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB;YAClB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,UAAU,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB;YAClB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rage-click.d.ts","sourceRoot":"","sources":["../../../src/lib/session/rage-click.ts"],"names":[],"mappings":"AAyDA,wBAAgB,cAAc,6BAU7B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* Rage click detection */
|
|
2
|
+
"use client";
|
|
3
|
+
import { RAGE_CLICK_THRESHOLD, RAGE_CLICK_TIME_WINDOW, } from "@interfere/constants";
|
|
4
|
+
import { capture } from "../../client.js";
|
|
5
|
+
let clickTimestamps = [];
|
|
6
|
+
const CLASS_REGEX = /\s+/;
|
|
7
|
+
function getSelector(element) {
|
|
8
|
+
if (element.id) {
|
|
9
|
+
return `#${element.id}`;
|
|
10
|
+
}
|
|
11
|
+
if (element.className && typeof element.className === "string") {
|
|
12
|
+
const classes = element.className.trim().split(CLASS_REGEX).join(".");
|
|
13
|
+
if (classes) {
|
|
14
|
+
return `.${classes}`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return element.tagName.toLowerCase();
|
|
18
|
+
}
|
|
19
|
+
function handleClick(event) {
|
|
20
|
+
const now = Date.now();
|
|
21
|
+
// Clean up old timestamps
|
|
22
|
+
clickTimestamps = clickTimestamps.filter((ts) => now - ts < RAGE_CLICK_TIME_WINDOW);
|
|
23
|
+
// Add current click
|
|
24
|
+
clickTimestamps.push(now);
|
|
25
|
+
// Check for rage click
|
|
26
|
+
if (clickTimestamps.length >= RAGE_CLICK_THRESHOLD) {
|
|
27
|
+
const target = event.target;
|
|
28
|
+
const TRUNCATE_LENGTH = 100;
|
|
29
|
+
capture("rage_click", {
|
|
30
|
+
count: clickTimestamps.length,
|
|
31
|
+
timeWindow: RAGE_CLICK_TIME_WINDOW,
|
|
32
|
+
selector: target ? getSelector(target) : "unknown",
|
|
33
|
+
text: target?.textContent?.substring(0, TRUNCATE_LENGTH) || "",
|
|
34
|
+
x: event.clientX,
|
|
35
|
+
y: event.clientY,
|
|
36
|
+
timestamp: now,
|
|
37
|
+
});
|
|
38
|
+
// Reset after detection
|
|
39
|
+
clickTimestamps = [];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function setupRageClick() {
|
|
43
|
+
if (typeof window === "undefined") {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
window.addEventListener("click", handleClick, true);
|
|
47
|
+
return () => {
|
|
48
|
+
window.removeEventListener("click", handleClick, true);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=rage-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rage-click.js","sourceRoot":"","sources":["../../../src/lib/session/rage-click.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,YAAY,CAAC;AAEb,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,IAAI,eAAe,GAAa,EAAE,CAAC;AAEnC,MAAM,WAAW,GAAG,KAAK,CAAC;AAE1B,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,0BAA0B;IAC1B,eAAe,GAAG,eAAe,CAAC,MAAM,CACtC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,sBAAsB,CAC1C,CAAC;IAEF,oBAAoB;IACpB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE1B,uBAAuB;IACvB,IAAI,eAAe,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiB,CAAC;QACvC,MAAM,eAAe,GAAG,GAAG,CAAC;QAE5B,OAAO,CAAC,YAAY,EAAE;YACpB,KAAK,EAAE,eAAe,CAAC,MAAM;YAC7B,UAAU,EAAE,sBAAsB;YAClC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YAClD,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,EAAE;YAC9D,CAAC,EAAE,KAAK,CAAC,OAAO;YAChB,CAAC,EAAE,KAAK,CAAC,OAAO;YAChB,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,wBAAwB;QACxB,eAAe,GAAG,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAEpD,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../../src/lib/session/replay.ts"],"names":[],"mappings":"AAUA,wBAAgB,WAAW,SAoG1B;AAED,wBAAgB,UAAU,SAEzB"}
|