@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.
Files changed (135) hide show
  1. package/README.md +308 -0
  2. package/dist/__tests__/build/with-interfere-coverage.test.d.ts +2 -0
  3. package/dist/__tests__/build/with-interfere-coverage.test.d.ts.map +1 -0
  4. package/dist/__tests__/build/with-interfere-coverage.test.js +338 -0
  5. package/dist/__tests__/build/with-interfere-coverage.test.js.map +1 -0
  6. package/dist/__tests__/build/with-interfere.test.d.ts +2 -0
  7. package/dist/__tests__/build/with-interfere.test.d.ts.map +1 -0
  8. package/dist/__tests__/build/with-interfere.test.js +466 -0
  9. package/dist/__tests__/build/with-interfere.test.js.map +1 -0
  10. package/dist/__tests__/core/client.test.d.ts.map +1 -0
  11. package/dist/__tests__/core/client.test.js +373 -0
  12. package/dist/__tests__/core/client.test.js.map +1 -0
  13. package/dist/__tests__/core/encoders.test.d.ts.map +1 -0
  14. package/dist/{core → __tests__/core}/encoders.test.js +20 -19
  15. package/dist/__tests__/core/encoders.test.js.map +1 -0
  16. package/dist/__tests__/core/rage-click.test.d.ts +2 -0
  17. package/dist/__tests__/core/rage-click.test.d.ts.map +1 -0
  18. package/dist/__tests__/core/rage-click.test.js +121 -0
  19. package/dist/__tests__/core/rage-click.test.js.map +1 -0
  20. package/dist/__tests__/core/session-manager.test.d.ts +2 -0
  21. package/dist/__tests__/core/session-manager.test.d.ts.map +1 -0
  22. package/dist/__tests__/core/session-manager.test.js +1132 -0
  23. package/dist/__tests__/core/session-manager.test.js.map +1 -0
  24. package/dist/__tests__/integration/release-upload.test.d.ts +2 -0
  25. package/dist/__tests__/integration/release-upload.test.d.ts.map +1 -0
  26. package/dist/__tests__/integration/release-upload.test.js +173 -0
  27. package/dist/__tests__/integration/release-upload.test.js.map +1 -0
  28. package/dist/__tests__/session/persistence.test.d.ts +2 -0
  29. package/dist/__tests__/session/persistence.test.d.ts.map +1 -0
  30. package/dist/__tests__/session/persistence.test.js +129 -0
  31. package/dist/__tests__/session/persistence.test.js.map +1 -0
  32. package/dist/__tests__/session/session-summary.test.d.ts +2 -0
  33. package/dist/__tests__/session/session-summary.test.d.ts.map +1 -0
  34. package/dist/__tests__/session/session-summary.test.js +763 -0
  35. package/dist/__tests__/session/session-summary.test.js.map +1 -0
  36. package/dist/build/index.d.ts +3 -0
  37. package/dist/build/index.d.ts.map +1 -0
  38. package/dist/build/index.js +2 -0
  39. package/dist/build/index.js.map +1 -0
  40. package/dist/build/with-interfere.d.ts +54 -0
  41. package/dist/build/with-interfere.d.ts.map +1 -0
  42. package/dist/build/with-interfere.js +267 -0
  43. package/dist/build/with-interfere.js.map +1 -0
  44. package/dist/core/client-core.d.ts +27 -0
  45. package/dist/core/client-core.d.ts.map +1 -0
  46. package/dist/core/client-core.js +152 -0
  47. package/dist/core/client-core.js.map +1 -0
  48. package/dist/core/client.d.ts +71 -18
  49. package/dist/core/client.d.ts.map +1 -1
  50. package/dist/core/client.js +107 -97
  51. package/dist/core/client.js.map +1 -1
  52. package/dist/core/constants.d.ts +12 -0
  53. package/dist/core/constants.d.ts.map +1 -0
  54. package/dist/core/constants.js +17 -0
  55. package/dist/core/constants.js.map +1 -0
  56. package/dist/core/debug.d.ts +47 -0
  57. package/dist/core/debug.d.ts.map +1 -0
  58. package/dist/core/debug.js +79 -0
  59. package/dist/core/debug.js.map +1 -0
  60. package/dist/core/error-handlers.d.ts +14 -0
  61. package/dist/core/error-handlers.d.ts.map +1 -0
  62. package/dist/core/error-handlers.js +192 -0
  63. package/dist/core/error-handlers.js.map +1 -0
  64. package/dist/core/runtime.d.ts +7 -0
  65. package/dist/core/runtime.d.ts.map +1 -0
  66. package/dist/core/runtime.js +16 -0
  67. package/dist/core/runtime.js.map +1 -0
  68. package/dist/index.d.ts +10 -5
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +9 -5
  71. package/dist/index.js.map +1 -1
  72. package/dist/next/middleware.d.ts +8 -0
  73. package/dist/next/middleware.d.ts.map +1 -0
  74. package/dist/next/middleware.js +139 -0
  75. package/dist/next/middleware.js.map +1 -0
  76. package/dist/persistence/storage.d.ts +5 -0
  77. package/dist/persistence/storage.d.ts.map +1 -0
  78. package/dist/persistence/storage.js +67 -0
  79. package/dist/persistence/storage.js.map +1 -0
  80. package/dist/react/provider.d.ts +12 -7
  81. package/dist/react/provider.d.ts.map +1 -1
  82. package/dist/react/provider.jsx +37 -10
  83. package/dist/react/provider.jsx.map +1 -1
  84. package/dist/session/constants.d.ts +19 -0
  85. package/dist/session/constants.d.ts.map +1 -0
  86. package/dist/session/constants.js +34 -0
  87. package/dist/session/constants.js.map +1 -0
  88. package/dist/session/persistence.d.ts +58 -0
  89. package/dist/session/persistence.d.ts.map +1 -0
  90. package/dist/session/persistence.js +180 -0
  91. package/dist/session/persistence.js.map +1 -0
  92. package/dist/session/rage-click.d.ts +17 -0
  93. package/dist/session/rage-click.d.ts.map +1 -0
  94. package/dist/session/rage-click.js +104 -0
  95. package/dist/session/rage-click.js.map +1 -0
  96. package/dist/session/replay.d.ts +3 -0
  97. package/dist/session/replay.d.ts.map +1 -0
  98. package/dist/session/replay.js +109 -0
  99. package/dist/session/replay.js.map +1 -0
  100. package/dist/session/session-manager.d.ts +126 -0
  101. package/dist/session/session-manager.d.ts.map +1 -0
  102. package/dist/session/session-manager.js +635 -0
  103. package/dist/session/session-manager.js.map +1 -0
  104. package/dist/session/session-summary.d.ts +3 -0
  105. package/dist/session/session-summary.d.ts.map +1 -0
  106. package/dist/session/session-summary.js +214 -0
  107. package/dist/session/session-summary.js.map +1 -0
  108. package/dist/types/storage.d.ts +7 -0
  109. package/dist/types/storage.d.ts.map +1 -0
  110. package/dist/types/storage.js +2 -0
  111. package/dist/types/storage.js.map +1 -0
  112. package/package.json +28 -9
  113. package/dist/core/client.test.d.ts.map +0 -1
  114. package/dist/core/client.test.js +0 -227
  115. package/dist/core/client.test.js.map +0 -1
  116. package/dist/core/encoders.test.d.ts.map +0 -1
  117. package/dist/core/encoders.test.js.map +0 -1
  118. package/dist/edge/edge.d.ts +0 -11
  119. package/dist/edge/edge.d.ts.map +0 -1
  120. package/dist/edge/edge.js +0 -41
  121. package/dist/edge/edge.js.map +0 -1
  122. package/dist/edge/edge.test.d.ts +0 -2
  123. package/dist/edge/edge.test.d.ts.map +0 -1
  124. package/dist/edge/edge.test.js +0 -109
  125. package/dist/edge/edge.test.js.map +0 -1
  126. package/dist/server/server.d.ts +0 -6
  127. package/dist/server/server.d.ts.map +0 -1
  128. package/dist/server/server.js +0 -35
  129. package/dist/server/server.js.map +0 -1
  130. package/dist/server/server.test.d.ts +0 -2
  131. package/dist/server/server.test.d.ts.map +0 -1
  132. package/dist/server/server.test.js +0 -88
  133. package/dist/server/server.test.js.map +0 -1
  134. /package/dist/{core → __tests__/core}/client.test.d.ts +0 -0
  135. /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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"}