@interfere/next 0.0.9 → 0.0.11
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 +308 -0
- package/dist/__tests__/build/with-interfere-coverage.test.d.ts +2 -0
- package/dist/__tests__/build/with-interfere-coverage.test.d.ts.map +1 -0
- package/dist/__tests__/build/with-interfere-coverage.test.js +338 -0
- package/dist/__tests__/build/with-interfere-coverage.test.js.map +1 -0
- package/dist/__tests__/build/with-interfere.test.d.ts +2 -0
- package/dist/__tests__/build/with-interfere.test.d.ts.map +1 -0
- package/dist/__tests__/build/with-interfere.test.js +466 -0
- package/dist/__tests__/build/with-interfere.test.js.map +1 -0
- package/dist/__tests__/core/client.test.d.ts.map +1 -0
- package/dist/__tests__/core/client.test.js +373 -0
- package/dist/__tests__/core/client.test.js.map +1 -0
- package/dist/__tests__/core/encoders.test.d.ts.map +1 -0
- package/dist/{core → __tests__/core}/encoders.test.js +20 -19
- package/dist/__tests__/core/encoders.test.js.map +1 -0
- package/dist/__tests__/core/rage-click.test.d.ts +2 -0
- package/dist/__tests__/core/rage-click.test.d.ts.map +1 -0
- package/dist/__tests__/core/rage-click.test.js +121 -0
- package/dist/__tests__/core/rage-click.test.js.map +1 -0
- package/dist/__tests__/core/session-manager.test.d.ts +2 -0
- package/dist/__tests__/core/session-manager.test.d.ts.map +1 -0
- package/dist/__tests__/core/session-manager.test.js +1132 -0
- package/dist/__tests__/core/session-manager.test.js.map +1 -0
- package/dist/__tests__/integration/release-upload.test.d.ts +2 -0
- package/dist/__tests__/integration/release-upload.test.d.ts.map +1 -0
- package/dist/__tests__/integration/release-upload.test.js +173 -0
- package/dist/__tests__/integration/release-upload.test.js.map +1 -0
- package/dist/__tests__/session/persistence.test.d.ts +2 -0
- package/dist/__tests__/session/persistence.test.d.ts.map +1 -0
- package/dist/__tests__/session/persistence.test.js +129 -0
- package/dist/__tests__/session/persistence.test.js.map +1 -0
- package/dist/__tests__/session/session-summary.test.d.ts +2 -0
- package/dist/__tests__/session/session-summary.test.d.ts.map +1 -0
- package/dist/__tests__/session/session-summary.test.js +763 -0
- package/dist/__tests__/session/session-summary.test.js.map +1 -0
- package/dist/build/index.d.ts +3 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +2 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/with-interfere.d.ts +54 -0
- package/dist/build/with-interfere.d.ts.map +1 -0
- package/dist/build/with-interfere.js +267 -0
- package/dist/build/with-interfere.js.map +1 -0
- package/dist/core/client-core.d.ts +27 -0
- package/dist/core/client-core.d.ts.map +1 -0
- package/dist/core/client-core.js +152 -0
- package/dist/core/client-core.js.map +1 -0
- package/dist/core/client.d.ts +71 -18
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +107 -97
- package/dist/core/client.js.map +1 -1
- package/dist/core/constants.d.ts +12 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +17 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/debug.d.ts +47 -0
- package/dist/core/debug.d.ts.map +1 -0
- package/dist/core/debug.js +79 -0
- package/dist/core/debug.js.map +1 -0
- package/dist/core/error-handlers.d.ts +14 -0
- package/dist/core/error-handlers.d.ts.map +1 -0
- package/dist/core/error-handlers.js +192 -0
- package/dist/core/error-handlers.js.map +1 -0
- package/dist/core/runtime.d.ts +7 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +16 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/index.d.ts +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/next/middleware.d.ts +8 -0
- package/dist/next/middleware.d.ts.map +1 -0
- package/dist/next/middleware.js +139 -0
- package/dist/next/middleware.js.map +1 -0
- package/dist/persistence/storage.d.ts +5 -0
- package/dist/persistence/storage.d.ts.map +1 -0
- package/dist/persistence/storage.js +67 -0
- package/dist/persistence/storage.js.map +1 -0
- package/dist/react/provider.d.ts +12 -7
- package/dist/react/provider.d.ts.map +1 -1
- package/dist/react/provider.jsx +37 -10
- package/dist/react/provider.jsx.map +1 -1
- package/dist/session/constants.d.ts +19 -0
- package/dist/session/constants.d.ts.map +1 -0
- package/dist/session/constants.js +34 -0
- package/dist/session/constants.js.map +1 -0
- package/dist/session/persistence.d.ts +58 -0
- package/dist/session/persistence.d.ts.map +1 -0
- package/dist/session/persistence.js +180 -0
- package/dist/session/persistence.js.map +1 -0
- package/dist/session/rage-click.d.ts +17 -0
- package/dist/session/rage-click.d.ts.map +1 -0
- package/dist/session/rage-click.js +104 -0
- package/dist/session/rage-click.js.map +1 -0
- package/dist/session/replay.d.ts +3 -0
- package/dist/session/replay.d.ts.map +1 -0
- package/dist/session/replay.js +109 -0
- package/dist/session/replay.js.map +1 -0
- package/dist/session/session-manager.d.ts +126 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +635 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/session/session-summary.d.ts +3 -0
- package/dist/session/session-summary.d.ts.map +1 -0
- package/dist/session/session-summary.js +214 -0
- package/dist/session/session-summary.js.map +1 -0
- package/dist/types/storage.d.ts +7 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +2 -0
- package/dist/types/storage.js.map +1 -0
- package/package.json +28 -9
- package/dist/core/client.test.d.ts.map +0 -1
- package/dist/core/client.test.js +0 -227
- package/dist/core/client.test.js.map +0 -1
- package/dist/core/encoders.test.d.ts.map +0 -1
- package/dist/core/encoders.test.js.map +0 -1
- package/dist/edge/edge.d.ts +0 -11
- package/dist/edge/edge.d.ts.map +0 -1
- package/dist/edge/edge.js +0 -41
- package/dist/edge/edge.js.map +0 -1
- package/dist/edge/edge.test.d.ts +0 -2
- package/dist/edge/edge.test.d.ts.map +0 -1
- package/dist/edge/edge.test.js +0 -109
- package/dist/edge/edge.test.js.map +0 -1
- package/dist/server/server.d.ts +0 -6
- package/dist/server/server.d.ts.map +0 -1
- package/dist/server/server.js +0 -35
- package/dist/server/server.js.map +0 -1
- package/dist/server/server.test.d.ts +0 -2
- package/dist/server/server.test.d.ts.map +0 -1
- package/dist/server/server.test.js +0 -88
- package/dist/server/server.test.js.map +0 -1
- /package/dist/{core → __tests__/core}/client.test.d.ts +0 -0
- /package/dist/{core → __tests__/core}/encoders.test.d.ts +0 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { Config } from "@interfere/schemas/config";
|
|
2
|
+
import type { SurfaceId } from "@interfere/schemas/surface";
|
|
3
|
+
import type { InterferePersistence } from "./persistence.js";
|
|
4
|
+
/**
|
|
5
|
+
* Clock type for dependency injection and testability
|
|
6
|
+
*/
|
|
7
|
+
export type Clock = {
|
|
8
|
+
now(): number;
|
|
9
|
+
setTimeout(callback: () => void, delay: number): ReturnType<typeof setTimeout>;
|
|
10
|
+
clearTimeout(timeoutId: ReturnType<typeof setTimeout>): void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Reasons why a session ID might change
|
|
14
|
+
*/
|
|
15
|
+
export declare const SessionChangeReason: {
|
|
16
|
+
readonly NO_SESSION_ID: "noSessionId";
|
|
17
|
+
readonly ACTIVITY_TIMEOUT: "activityTimeout";
|
|
18
|
+
readonly SESSION_PAST_MAXIMUM_LENGTH: "sessionPastMaximumLength";
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Change reasons for session updates
|
|
22
|
+
*/
|
|
23
|
+
export type ChangeReasons = {
|
|
24
|
+
[SessionChangeReason.NO_SESSION_ID]?: boolean;
|
|
25
|
+
[SessionChangeReason.ACTIVITY_TIMEOUT]?: boolean;
|
|
26
|
+
[SessionChangeReason.SESSION_PAST_MAXIMUM_LENGTH]?: boolean;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Callback function called when session ID changes
|
|
30
|
+
* @param sessionId - The new session ID (null when session is reset)
|
|
31
|
+
* @param windowId - The window ID associated with this session
|
|
32
|
+
* @param changeReason - Reasons why the session changed
|
|
33
|
+
*/
|
|
34
|
+
export type SessionIdChangedCallback = (sessionId: string | null, windowId: string | null, changeReason?: ChangeReasons) => void;
|
|
35
|
+
type SessionData = {
|
|
36
|
+
sessionId: string;
|
|
37
|
+
windowId: string | null;
|
|
38
|
+
sessionStartTimestamp: number;
|
|
39
|
+
lastActivityTimestamp: number;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Manages session and window IDs with automatic timeout and persistence
|
|
43
|
+
*/
|
|
44
|
+
export declare class SessionIdManager {
|
|
45
|
+
private readonly _sessionIdGenerator;
|
|
46
|
+
private readonly _windowIdGenerator;
|
|
47
|
+
private readonly _config;
|
|
48
|
+
private readonly _persistence;
|
|
49
|
+
private readonly _clock;
|
|
50
|
+
private _windowId;
|
|
51
|
+
private _sessionId;
|
|
52
|
+
private readonly _windowIdStorageKey;
|
|
53
|
+
private readonly _primaryWindowExistsStorageKey;
|
|
54
|
+
private _sessionStartTimestamp;
|
|
55
|
+
private _sessionActivityTimestamp;
|
|
56
|
+
private _sessionIdChangedHandlers;
|
|
57
|
+
private readonly _sessionTimeoutMs;
|
|
58
|
+
private _enforceIdleTimeout;
|
|
59
|
+
private _canUseSessionStorageCache;
|
|
60
|
+
private _lastStorageCheck;
|
|
61
|
+
private _beforeUnloadHandler;
|
|
62
|
+
private _pageHideHandler;
|
|
63
|
+
private _visibilityChangeHandler;
|
|
64
|
+
private _heartbeatInterval;
|
|
65
|
+
private heartbeatPaused;
|
|
66
|
+
private readonly _debugLogger?;
|
|
67
|
+
/**
|
|
68
|
+
* Creates a new SessionIdManager
|
|
69
|
+
* @param surface - The surface ID for storage key namespacing
|
|
70
|
+
* @param config - Configuration options
|
|
71
|
+
* @param persistence - Persistence layer for storing session data
|
|
72
|
+
* @param options - Optional generators and clock for testing
|
|
73
|
+
*/
|
|
74
|
+
constructor(surface: SurfaceId, config: Partial<Config>, persistence: InterferePersistence, options?: {
|
|
75
|
+
sessionId?: () => string;
|
|
76
|
+
windowId?: () => string;
|
|
77
|
+
clock?: Clock;
|
|
78
|
+
debugLogger?: (message: string, error?: Error) => void;
|
|
79
|
+
});
|
|
80
|
+
get sessionTimeoutMs(): number;
|
|
81
|
+
/**
|
|
82
|
+
* Register a callback to be called when the session ID changes
|
|
83
|
+
* @param callback - Function to call when session changes
|
|
84
|
+
* @returns Unsubscribe function
|
|
85
|
+
*/
|
|
86
|
+
onSessionId(callback: SessionIdChangedCallback): () => void;
|
|
87
|
+
private _debugLog;
|
|
88
|
+
private _canUseSessionStorage;
|
|
89
|
+
private _cleanupStaleWindowFlags;
|
|
90
|
+
private _startWindowHeartbeat;
|
|
91
|
+
private _setWindowId;
|
|
92
|
+
private _getWindowId;
|
|
93
|
+
private _setSessionId;
|
|
94
|
+
private _persistSessionWithOptimisticLocking;
|
|
95
|
+
private _getSessionId;
|
|
96
|
+
private _parseSessionIdInfo;
|
|
97
|
+
/**
|
|
98
|
+
* Reset the current session, forcing a new session to be created on next access
|
|
99
|
+
* @param reason - Optional reason for the reset
|
|
100
|
+
*/
|
|
101
|
+
resetSessionId(reason?: ChangeReasons): void;
|
|
102
|
+
private _performWindowCleanup;
|
|
103
|
+
private _listenToReloadWindow;
|
|
104
|
+
private _sessionHasBeenIdleTooLong;
|
|
105
|
+
/**
|
|
106
|
+
* Check and get the current session and window IDs, updating them if necessary
|
|
107
|
+
* @param readOnly - If true, won't update activity timestamp or reset idle timer
|
|
108
|
+
* @param _timestamp - Optional timestamp override (primarily for testing)
|
|
109
|
+
* @returns Session data with optional change reason
|
|
110
|
+
*/
|
|
111
|
+
checkAndGetSessionAndWindowId(readOnly?: boolean, _timestamp?: number | null): SessionData & {
|
|
112
|
+
changeReason?: ChangeReasons;
|
|
113
|
+
};
|
|
114
|
+
private _evaluateSessionChangeReasons;
|
|
115
|
+
private _updateSessionIfNeeded;
|
|
116
|
+
private _calculateActivityTimestamp;
|
|
117
|
+
private _finalizeSessionUpdate;
|
|
118
|
+
private _resetIdleTimer;
|
|
119
|
+
/**
|
|
120
|
+
* Clean up resources and event listeners
|
|
121
|
+
* Call this when the SessionIdManager is no longer needed
|
|
122
|
+
*/
|
|
123
|
+
dispose(): void;
|
|
124
|
+
}
|
|
125
|
+
export {};
|
|
126
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|