@interfere/next 0.0.14 → 0.0.15-alpha.0

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 (232) hide show
  1. package/README.md +1 -6
  2. package/dist/build/env-config.d.mts +7 -0
  3. package/dist/build/env-config.d.mts.map +1 -0
  4. package/dist/build/env-config.mjs +17 -0
  5. package/dist/build/env-config.mjs.map +1 -0
  6. package/dist/build/logger.d.mts +11 -0
  7. package/dist/build/logger.d.mts.map +1 -0
  8. package/dist/build/logger.mjs +155 -0
  9. package/dist/build/logger.mjs.map +1 -0
  10. package/dist/build/release-program.d.mts +19 -0
  11. package/dist/build/release-program.d.mts.map +1 -0
  12. package/dist/build/release-program.mjs +92 -0
  13. package/dist/build/release-program.mjs.map +1 -0
  14. package/dist/build/secret-key.d.mts +10 -0
  15. package/dist/build/secret-key.d.mts.map +1 -0
  16. package/dist/build/secret-key.mjs +16 -0
  17. package/dist/build/secret-key.mjs.map +1 -0
  18. package/dist/build/services/config.service.d.mts +9 -0
  19. package/dist/build/services/config.service.d.mts.map +1 -0
  20. package/dist/build/services/config.service.mjs +8 -0
  21. package/dist/build/services/config.service.mjs.map +1 -0
  22. package/dist/build/services/preflight.service.d.mts +19 -0
  23. package/dist/build/services/preflight.service.d.mts.map +1 -0
  24. package/dist/build/services/preflight.service.mjs +76 -0
  25. package/dist/build/services/preflight.service.mjs.map +1 -0
  26. package/dist/build/services/release-identity.service.d.mts +22 -0
  27. package/dist/build/services/release-identity.service.d.mts.map +1 -0
  28. package/dist/build/services/release-identity.service.mjs +48 -0
  29. package/dist/build/services/release-identity.service.mjs.map +1 -0
  30. package/dist/build/services/source-map.service.d.mts +24 -0
  31. package/dist/build/services/source-map.service.d.mts.map +1 -0
  32. package/dist/build/services/source-map.service.mjs +58 -0
  33. package/dist/build/services/source-map.service.mjs.map +1 -0
  34. package/dist/build/source-maps/api.d.mts +35 -0
  35. package/dist/build/source-maps/api.d.mts.map +1 -0
  36. package/dist/build/source-maps/api.mjs +61 -0
  37. package/dist/build/source-maps/api.mjs.map +1 -0
  38. package/dist/build/source-maps/client.d.mts +73 -0
  39. package/dist/build/source-maps/client.d.mts.map +1 -0
  40. package/dist/build/source-maps/client.mjs +228 -0
  41. package/dist/build/source-maps/client.mjs.map +1 -0
  42. package/dist/build/source-maps/errors.d.mts +109 -0
  43. package/dist/build/source-maps/errors.d.mts.map +1 -0
  44. package/dist/build/source-maps/errors.mjs +22 -0
  45. package/dist/build/source-maps/errors.mjs.map +1 -0
  46. package/dist/build/source-maps/files.d.mts +35 -0
  47. package/dist/build/source-maps/files.d.mts.map +1 -0
  48. package/dist/build/source-maps/files.mjs +222 -0
  49. package/dist/build/source-maps/files.mjs.map +1 -0
  50. package/dist/build/source-maps/providers/deployment/detector.d.mts +26 -0
  51. package/dist/build/source-maps/providers/deployment/detector.d.mts.map +1 -0
  52. package/dist/build/source-maps/providers/deployment/detector.mjs +22 -0
  53. package/dist/build/source-maps/providers/deployment/detector.mjs.map +1 -0
  54. package/dist/build/source-maps/providers/deployment/types.d.mts +12 -0
  55. package/dist/build/source-maps/providers/deployment/types.d.mts.map +1 -0
  56. package/dist/build/source-maps/providers/deployment/types.mjs +3 -0
  57. package/dist/build/source-maps/providers/deployment/vercel.d.mts +6 -0
  58. package/dist/build/source-maps/providers/deployment/vercel.d.mts.map +1 -0
  59. package/dist/build/source-maps/providers/deployment/vercel.mjs +44 -0
  60. package/dist/build/source-maps/providers/deployment/vercel.mjs.map +1 -0
  61. package/dist/build/source-maps/providers/source-control/detector.d.mts +15 -0
  62. package/dist/build/source-maps/providers/source-control/detector.d.mts.map +1 -0
  63. package/dist/build/source-maps/providers/source-control/detector.mjs +22 -0
  64. package/dist/build/source-maps/providers/source-control/detector.mjs.map +1 -0
  65. package/dist/build/source-maps/providers/source-control/git.d.mts +6 -0
  66. package/dist/build/source-maps/providers/source-control/git.d.mts.map +1 -0
  67. package/dist/build/source-maps/providers/source-control/git.mjs +50 -0
  68. package/dist/build/source-maps/providers/source-control/git.mjs.map +1 -0
  69. package/dist/build/source-maps/providers/source-control/types.d.mts +12 -0
  70. package/dist/build/source-maps/providers/source-control/types.d.mts.map +1 -0
  71. package/dist/build/source-maps/providers/source-control/types.mjs +3 -0
  72. package/dist/build/with-interfere.d.mts +49 -0
  73. package/dist/build/with-interfere.d.mts.map +1 -0
  74. package/dist/build/with-interfere.mjs +75 -0
  75. package/dist/build/with-interfere.mjs.map +1 -0
  76. package/dist/client/client.d.mts +3 -0
  77. package/dist/client/client.mjs +5 -0
  78. package/dist/client/provider.d.mts +22 -0
  79. package/dist/client/provider.d.mts.map +1 -0
  80. package/dist/client/provider.mjs +33 -0
  81. package/dist/client/provider.mjs.map +1 -0
  82. package/dist/lib/env.d.mts +12 -0
  83. package/dist/lib/env.d.mts.map +1 -0
  84. package/dist/lib/env.mjs +17 -0
  85. package/dist/lib/env.mjs.map +1 -0
  86. package/dist/lib/test-utils/make-next-request.d.mts +6 -0
  87. package/dist/lib/test-utils/make-next-request.d.mts.map +1 -0
  88. package/dist/lib/test-utils/make-next-request.mjs +12 -0
  89. package/dist/lib/test-utils/make-next-request.mjs.map +1 -0
  90. package/dist/lib/types.d.mts +22 -0
  91. package/dist/lib/types.d.mts.map +1 -0
  92. package/dist/lib/types.mjs +7 -0
  93. package/dist/lib/types.mjs.map +1 -0
  94. package/dist/server/middleware.d.mts +11 -0
  95. package/dist/server/middleware.d.mts.map +1 -0
  96. package/dist/server/middleware.mjs +84 -0
  97. package/dist/server/middleware.mjs.map +1 -0
  98. package/dist/server/proxy.d.mts +6 -0
  99. package/dist/server/proxy.d.mts.map +1 -0
  100. package/dist/server/proxy.mjs +29 -0
  101. package/dist/server/proxy.mjs.map +1 -0
  102. package/dist/server/route-handler.d.mts +9 -0
  103. package/dist/server/route-handler.d.mts.map +1 -0
  104. package/dist/server/route-handler.mjs +172 -0
  105. package/dist/server/route-handler.mjs.map +1 -0
  106. package/dist/server/services/config.service.d.mts +21 -0
  107. package/dist/server/services/config.service.d.mts.map +1 -0
  108. package/dist/server/services/config.service.mjs +43 -0
  109. package/dist/server/services/config.service.mjs.map +1 -0
  110. package/dist/server/services/error-tracking.service.d.mts +19 -0
  111. package/dist/server/services/error-tracking.service.d.mts.map +1 -0
  112. package/dist/server/services/error-tracking.service.mjs +31 -0
  113. package/dist/server/services/error-tracking.service.mjs.map +1 -0
  114. package/package.json +67 -36
  115. package/dist/__tests__/build/with-interfere-coverage.test.d.ts +0 -2
  116. package/dist/__tests__/build/with-interfere-coverage.test.d.ts.map +0 -1
  117. package/dist/__tests__/build/with-interfere-coverage.test.js +0 -295
  118. package/dist/__tests__/build/with-interfere-coverage.test.js.map +0 -1
  119. package/dist/__tests__/build/with-interfere.test.d.ts +0 -2
  120. package/dist/__tests__/build/with-interfere.test.d.ts.map +0 -1
  121. package/dist/__tests__/build/with-interfere.test.js +0 -363
  122. package/dist/__tests__/build/with-interfere.test.js.map +0 -1
  123. package/dist/__tests__/core/client.test.d.ts +0 -2
  124. package/dist/__tests__/core/client.test.d.ts.map +0 -1
  125. package/dist/__tests__/core/client.test.js +0 -373
  126. package/dist/__tests__/core/client.test.js.map +0 -1
  127. package/dist/__tests__/core/encoders.test.d.ts +0 -2
  128. package/dist/__tests__/core/encoders.test.d.ts.map +0 -1
  129. package/dist/__tests__/core/encoders.test.js +0 -56
  130. package/dist/__tests__/core/encoders.test.js.map +0 -1
  131. package/dist/__tests__/core/rage-click.test.d.ts +0 -2
  132. package/dist/__tests__/core/rage-click.test.d.ts.map +0 -1
  133. package/dist/__tests__/core/rage-click.test.js +0 -121
  134. package/dist/__tests__/core/rage-click.test.js.map +0 -1
  135. package/dist/__tests__/core/session-manager.test.d.ts +0 -2
  136. package/dist/__tests__/core/session-manager.test.d.ts.map +0 -1
  137. package/dist/__tests__/core/session-manager.test.js +0 -1168
  138. package/dist/__tests__/core/session-manager.test.js.map +0 -1
  139. package/dist/__tests__/integration/release-upload.test.d.ts +0 -2
  140. package/dist/__tests__/integration/release-upload.test.d.ts.map +0 -1
  141. package/dist/__tests__/integration/release-upload.test.js +0 -153
  142. package/dist/__tests__/integration/release-upload.test.js.map +0 -1
  143. package/dist/__tests__/provider.test.d.ts +0 -2
  144. package/dist/__tests__/provider.test.d.ts.map +0 -1
  145. package/dist/__tests__/provider.test.js +0 -84
  146. package/dist/__tests__/provider.test.js.map +0 -1
  147. package/dist/__tests__/session/persistence.test.d.ts +0 -2
  148. package/dist/__tests__/session/persistence.test.d.ts.map +0 -1
  149. package/dist/__tests__/session/persistence.test.js +0 -129
  150. package/dist/__tests__/session/persistence.test.js.map +0 -1
  151. package/dist/__tests__/session/session-summary.test.d.ts +0 -2
  152. package/dist/__tests__/session/session-summary.test.d.ts.map +0 -1
  153. package/dist/__tests__/session/session-summary.test.js +0 -763
  154. package/dist/__tests__/session/session-summary.test.js.map +0 -1
  155. package/dist/client.d.ts +0 -75
  156. package/dist/client.d.ts.map +0 -1
  157. package/dist/client.js +0 -123
  158. package/dist/client.js.map +0 -1
  159. package/dist/config.d.ts +0 -40
  160. package/dist/config.d.ts.map +0 -1
  161. package/dist/config.js +0 -340
  162. package/dist/config.js.map +0 -1
  163. package/dist/index.d.ts +0 -37
  164. package/dist/index.d.ts.map +0 -1
  165. package/dist/index.js +0 -49
  166. package/dist/index.js.map +0 -1
  167. package/dist/index.jsx +0 -87
  168. package/dist/index.jsx.map +0 -1
  169. package/dist/lib/core/client-core.d.ts +0 -27
  170. package/dist/lib/core/client-core.d.ts.map +0 -1
  171. package/dist/lib/core/client-core.js +0 -152
  172. package/dist/lib/core/client-core.js.map +0 -1
  173. package/dist/lib/core/constants.d.ts +0 -12
  174. package/dist/lib/core/constants.d.ts.map +0 -1
  175. package/dist/lib/core/constants.js +0 -17
  176. package/dist/lib/core/constants.js.map +0 -1
  177. package/dist/lib/core/debug.d.ts +0 -47
  178. package/dist/lib/core/debug.d.ts.map +0 -1
  179. package/dist/lib/core/debug.js +0 -79
  180. package/dist/lib/core/debug.js.map +0 -1
  181. package/dist/lib/core/encoders.d.ts +0 -3
  182. package/dist/lib/core/encoders.d.ts.map +0 -1
  183. package/dist/lib/core/encoders.js +0 -5
  184. package/dist/lib/core/encoders.js.map +0 -1
  185. package/dist/lib/core/error-handlers.d.ts +0 -14
  186. package/dist/lib/core/error-handlers.d.ts.map +0 -1
  187. package/dist/lib/core/error-handlers.js +0 -191
  188. package/dist/lib/core/error-handlers.js.map +0 -1
  189. package/dist/lib/core/runtime.d.ts +0 -7
  190. package/dist/lib/core/runtime.d.ts.map +0 -1
  191. package/dist/lib/core/runtime.js +0 -16
  192. package/dist/lib/core/runtime.js.map +0 -1
  193. package/dist/lib/persistence/storage.d.ts +0 -5
  194. package/dist/lib/persistence/storage.d.ts.map +0 -1
  195. package/dist/lib/persistence/storage.js +0 -67
  196. package/dist/lib/persistence/storage.js.map +0 -1
  197. package/dist/lib/session/constants.d.ts +0 -19
  198. package/dist/lib/session/constants.d.ts.map +0 -1
  199. package/dist/lib/session/constants.js +0 -34
  200. package/dist/lib/session/constants.js.map +0 -1
  201. package/dist/lib/session/persistence.d.ts +0 -58
  202. package/dist/lib/session/persistence.d.ts.map +0 -1
  203. package/dist/lib/session/persistence.js +0 -179
  204. package/dist/lib/session/persistence.js.map +0 -1
  205. package/dist/lib/session/rage-click.d.ts +0 -17
  206. package/dist/lib/session/rage-click.d.ts.map +0 -1
  207. package/dist/lib/session/rage-click.js +0 -104
  208. package/dist/lib/session/rage-click.js.map +0 -1
  209. package/dist/lib/session/replay.d.ts +0 -3
  210. package/dist/lib/session/replay.d.ts.map +0 -1
  211. package/dist/lib/session/replay.js +0 -109
  212. package/dist/lib/session/replay.js.map +0 -1
  213. package/dist/lib/session/session-manager.d.ts +0 -126
  214. package/dist/lib/session/session-manager.d.ts.map +0 -1
  215. package/dist/lib/session/session-manager.js +0 -635
  216. package/dist/lib/session/session-manager.js.map +0 -1
  217. package/dist/lib/session/session-summary.d.ts +0 -3
  218. package/dist/lib/session/session-summary.d.ts.map +0 -1
  219. package/dist/lib/session/session-summary.js +0 -214
  220. package/dist/lib/session/session-summary.js.map +0 -1
  221. package/dist/middleware.d.ts +0 -8
  222. package/dist/middleware.d.ts.map +0 -1
  223. package/dist/middleware.js +0 -139
  224. package/dist/middleware.js.map +0 -1
  225. package/dist/types/storage.d.ts +0 -7
  226. package/dist/types/storage.d.ts.map +0 -1
  227. package/dist/types/storage.js +0 -2
  228. package/dist/types/storage.js.map +0 -1
  229. package/dist/types.d.ts +0 -6
  230. package/dist/types.d.ts.map +0 -1
  231. package/dist/types.js +0 -4
  232. package/dist/types.js.map +0 -1
@@ -1,104 +0,0 @@
1
- /* Rage click detection for identifying user frustration patterns */
2
- "use client";
3
- import { RAGE_CLICK_COUNT, RAGE_CLICK_ENABLED, RAGE_CLICK_RADIUS_PX, RAGE_CLICK_TIMEOUT_MS, } from "./constants.js";
4
- const MAX_TEXT_LENGTH = 100;
5
- export default class RageClick {
6
- clicks = [];
7
- radiusPx;
8
- timeoutMs;
9
- clickCount;
10
- constructor() {
11
- // Use static values - config options no longer used
12
- this.radiusPx = RAGE_CLICK_RADIUS_PX;
13
- this.timeoutMs = RAGE_CLICK_TIMEOUT_MS;
14
- this.clickCount = RAGE_CLICK_COUNT;
15
- }
16
- isRageClick(x, y, timestamp) {
17
- const current = { x, y, timestamp };
18
- // Keep only recent clicks within timeout window
19
- this.clicks = this.clicks.filter((c) => timestamp - c.timestamp <= this.timeoutMs);
20
- this.clicks.push(current);
21
- // Check if enough clicks happened in close proximity
22
- if (this.clicks.length >= this.clickCount) {
23
- const first = this.clicks[0];
24
- const last = this.clicks.at(-1);
25
- // Check time window - both first and last should exist due to length check
26
- if (first && last && last.timestamp - first.timestamp <= this.timeoutMs) {
27
- // Ensure all clicks are within radius of the first
28
- const allWithinRadius = this.clicks.every((c) => {
29
- const dx = c.x - first.x;
30
- const dy = c.y - first.y;
31
- return Math.sqrt(dx * dx + dy * dy) <= this.radiusPx;
32
- });
33
- if (allWithinRadius) {
34
- this.clicks = []; // reset after detection
35
- return true;
36
- }
37
- }
38
- }
39
- return false;
40
- }
41
- // Get the element information for the rage click event
42
- getElementInfo(target) {
43
- if (!target) {
44
- return {};
45
- }
46
- return {
47
- tagName: target.tagName?.toLowerCase(),
48
- className: target.className || undefined,
49
- id: target.id || undefined,
50
- text: target.innerText?.slice(0, MAX_TEXT_LENGTH) || undefined,
51
- ariaLabel: target.getAttribute("aria-label") || undefined,
52
- };
53
- }
54
- }
55
- let rageClickDetector = null;
56
- let initialized = false;
57
- function isBrowser() {
58
- return typeof window !== "undefined";
59
- }
60
- export function setupRageClick() {
61
- if (initialized) {
62
- return;
63
- }
64
- if (!isBrowser()) {
65
- return;
66
- }
67
- if (!RAGE_CLICK_ENABLED) {
68
- return;
69
- }
70
- initialized = true;
71
- rageClickDetector = new RageClick();
72
- // Import capture function dynamically to avoid circular dependencies
73
- import("../../client.js")
74
- .then(({ capture }) => {
75
- document.addEventListener("click", (e) => {
76
- if (!rageClickDetector) {
77
- return;
78
- }
79
- const mouseEvent = e;
80
- const timestamp = Date.now();
81
- if (rageClickDetector.isRageClick(mouseEvent.clientX, mouseEvent.clientY, timestamp)) {
82
- const target = mouseEvent.target;
83
- const elementInfo = rageClickDetector.getElementInfo(target);
84
- try {
85
- capture("rage_click", {
86
- timestamp,
87
- x: mouseEvent.clientX,
88
- y: mouseEvent.clientY,
89
- element: elementInfo,
90
- url: window.location.href,
91
- userAgent: navigator.userAgent,
92
- });
93
- }
94
- catch {
95
- // Swallow errors to avoid impacting the host app
96
- }
97
- }
98
- }, { capture: true });
99
- })
100
- .catch(() => {
101
- // Swallow import errors
102
- });
103
- }
104
- //# sourceMappingURL=rage-click.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rage-click.js","sourceRoot":"","sources":["../../../src/lib/session/rage-click.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare function setupReplay(): void;
2
- export declare function stopReplay(): void;
3
- //# sourceMappingURL=replay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../../src/lib/session/replay.ts"],"names":[],"mappings":"AAUA,wBAAgB,WAAW,SAuG1B;AAED,wBAAgB,UAAU,SAEzB"}
@@ -1,109 +0,0 @@
1
- /* Session replay capture using rrweb, chunked streaming to ingest */
2
- "use client";
3
- import { capture, flush } from "../../client.js";
4
- import { REPLAY_CHUNK_MS, REPLAY_ENABLED } from "./constants.js";
5
- let started = false;
6
- let stopFn = null;
7
- export function setupReplay() {
8
- if (started) {
9
- return;
10
- }
11
- if (typeof window === "undefined") {
12
- return;
13
- }
14
- if (!REPLAY_ENABLED) {
15
- return;
16
- }
17
- started = true;
18
- Promise.all([import("rrweb"), import("@rrweb/packer")])
19
- .then(([rrwebModule, packerModule]) => {
20
- // Handle different module export patterns
21
- const rrweb = rrwebModule.default || rrwebModule;
22
- const record = rrweb.record || rrweb;
23
- const { pack } = packerModule;
24
- const events = [];
25
- // Check if record is a function
26
- if (typeof record !== "function") {
27
- // biome-ignore lint/suspicious/noConsole: error logging needed
28
- console.error("rrweb.record is not available");
29
- return;
30
- }
31
- const stopRecord = record({
32
- emit(event) {
33
- // Compress the event before storing it
34
- const packedEvent = pack(event);
35
- events.push(packedEvent);
36
- },
37
- maskAllInputs: true, // Privacy: mask all text inputs by default
38
- });
39
- const sendChunk = () => {
40
- if (events.length === 0) {
41
- return;
42
- }
43
- const chunk = events.splice(0, events.length);
44
- try {
45
- capture("replay_chunk", {
46
- version: 1,
47
- chunkTs: Date.now(),
48
- count: chunk.length,
49
- // rrweb events are pre-compressed with @rrweb/packer
50
- events: chunk,
51
- });
52
- flush();
53
- }
54
- catch {
55
- // swallow
56
- }
57
- };
58
- const intervalId = window.setInterval(sendChunk, REPLAY_CHUNK_MS);
59
- const flushNow = () => {
60
- try {
61
- sendChunk();
62
- }
63
- catch {
64
- // swallow
65
- }
66
- };
67
- const beforeUnload = () => flushNow();
68
- const visibility = () => {
69
- if (document.visibilityState === "hidden") {
70
- flushNow();
71
- }
72
- };
73
- window.addEventListener("beforeunload", beforeUnload);
74
- document.addEventListener("visibilitychange", visibility);
75
- stopFn = () => {
76
- try {
77
- if (typeof stopRecord === "function") {
78
- stopRecord();
79
- }
80
- }
81
- catch {
82
- /* no-op */
83
- }
84
- try {
85
- window.clearInterval(intervalId);
86
- }
87
- catch {
88
- /* no-op */
89
- }
90
- try {
91
- window.removeEventListener("beforeunload", beforeUnload);
92
- document.removeEventListener("visibilitychange", visibility);
93
- }
94
- catch {
95
- /* no-op */
96
- }
97
- started = false;
98
- stopFn = null;
99
- };
100
- })
101
- .catch((error) => {
102
- // biome-ignore lint/suspicious/noConsole: Just for testing
103
- console.error("Failed to load rrweb:", error);
104
- });
105
- }
106
- export function stopReplay() {
107
- stopFn?.();
108
- }
109
- //# sourceMappingURL=replay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../src/lib/session/replay.ts"],"names":[],"mappings":"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"}
@@ -1,126 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/session/session-manager.ts"],"names":[],"mappings":"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"}