@interfere/next 0.0.0-alpha.10 → 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.
Files changed (120) hide show
  1. package/README.md +1 -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 +164 -0
  47. package/dist/core/client-core.js.map +1 -0
  48. package/dist/core/client.d.ts +70 -18
  49. package/dist/core/client.d.ts.map +1 -1
  50. package/dist/core/client.js +112 -104
  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.map +1 -1
  61. package/dist/core/error-handlers.js +42 -41
  62. package/dist/core/error-handlers.js.map +1 -1
  63. package/dist/core/runtime.d.ts +7 -0
  64. package/dist/core/runtime.d.ts.map +1 -0
  65. package/dist/core/runtime.js +16 -0
  66. package/dist/core/runtime.js.map +1 -0
  67. package/dist/index.d.ts +10 -7
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +6 -7
  70. package/dist/index.js.map +1 -1
  71. package/dist/next/middleware.d.ts +1 -1
  72. package/dist/next/middleware.js +13 -13
  73. package/dist/persistence/storage.d.ts +5 -0
  74. package/dist/persistence/storage.d.ts.map +1 -0
  75. package/dist/persistence/storage.js +67 -0
  76. package/dist/persistence/storage.js.map +1 -0
  77. package/dist/react/provider.d.ts +9 -5
  78. package/dist/react/provider.d.ts.map +1 -1
  79. package/dist/react/provider.jsx +33 -10
  80. package/dist/react/provider.jsx.map +1 -1
  81. package/dist/session/constants.d.ts +19 -0
  82. package/dist/session/constants.d.ts.map +1 -0
  83. package/dist/session/constants.js +34 -0
  84. package/dist/session/constants.js.map +1 -0
  85. package/dist/session/persistence.d.ts +58 -0
  86. package/dist/session/persistence.d.ts.map +1 -0
  87. package/dist/session/persistence.js +180 -0
  88. package/dist/session/persistence.js.map +1 -0
  89. package/dist/session/rage-click.d.ts +17 -0
  90. package/dist/session/rage-click.d.ts.map +1 -0
  91. package/dist/session/rage-click.js +104 -0
  92. package/dist/session/rage-click.js.map +1 -0
  93. package/dist/session/replay.d.ts +2 -2
  94. package/dist/session/replay.d.ts.map +1 -1
  95. package/dist/session/replay.js +57 -24
  96. package/dist/session/replay.js.map +1 -1
  97. package/dist/session/session-manager.d.ts +126 -0
  98. package/dist/session/session-manager.d.ts.map +1 -0
  99. package/dist/session/session-manager.js +635 -0
  100. package/dist/session/session-manager.js.map +1 -0
  101. package/dist/session/session-summary.d.ts +2 -2
  102. package/dist/session/session-summary.d.ts.map +1 -1
  103. package/dist/session/session-summary.js +94 -47
  104. package/dist/session/session-summary.js.map +1 -1
  105. package/dist/types/storage.d.ts +7 -0
  106. package/dist/types/storage.d.ts.map +1 -0
  107. package/dist/types/storage.js +2 -0
  108. package/dist/types/storage.js.map +1 -0
  109. package/package.json +24 -7
  110. package/dist/core/client.test.d.ts.map +0 -1
  111. package/dist/core/client.test.js +0 -238
  112. package/dist/core/client.test.js.map +0 -1
  113. package/dist/core/encoders.test.d.ts.map +0 -1
  114. package/dist/core/encoders.test.js.map +0 -1
  115. package/dist/next/error-boundary.d.ts +0 -17
  116. package/dist/next/error-boundary.d.ts.map +0 -1
  117. package/dist/next/error-boundary.jsx +0 -32
  118. package/dist/next/error-boundary.jsx.map +0 -1
  119. /package/dist/{core → __tests__/core}/client.test.d.ts +0 -0
  120. /package/dist/{core → __tests__/core}/encoders.test.d.ts +0 -0
@@ -1,3 +1,3 @@
1
- import type { Config } from '@interfere/schemas';
2
- export declare function setupSessionSummary(options?: Partial<Config>): void;
1
+ export declare function setupSessionSummary(): void;
2
+ export declare function stopSessionSummary(): void;
3
3
  //# sourceMappingURL=session-summary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-summary.d.ts","sourceRoot":"","sources":["../../src/session/session-summary.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAqGjD,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAkI5D"}
1
+ {"version":3,"file":"session-summary.d.ts","sourceRoot":"","sources":["../../src/session/session-summary.ts"],"names":[],"mappings":"AAsHA,wBAAgB,mBAAmB,SAsKlC;AAED,wBAAgB,kBAAkB,SAWjC"}
@@ -4,12 +4,16 @@
4
4
  - On window or time window end, tries to summarize using in-browser AI (window.ai)
5
5
  - Sends a compact 'session_summary' event instead of raw replay
6
6
  */
7
- import { capture } from '../core/client.js';
7
+ import { capture } from "../core/client.js";
8
+ import { ALLOW_BROWSER_AI, SESSION_SUMMARY_ENABLED, SESSION_SUMMARY_MAX_EVENTS, SESSION_SUMMARY_WINDOW_MS, } from "./constants.js";
9
+ const MAX_LENGTH = 2000;
10
+ const SAMPLE_LENGTH = 20;
8
11
  let initialized = false;
9
12
  let buffer = [];
13
+ const teardownFns = [];
10
14
  // interval-driven scheduling, no explicit timer var to satisfy lints
11
15
  function isBrowser() {
12
- return typeof window !== 'undefined' && typeof document !== 'undefined';
16
+ return typeof window !== "undefined" && typeof document !== "undefined";
13
17
  }
14
18
  function pushEvent(event, maxEvents) {
15
19
  buffer.push(event);
@@ -19,12 +23,12 @@ function pushEvent(event, maxEvents) {
19
23
  }
20
24
  async function summarizeWithBrowserAI(items) {
21
25
  const w = window;
22
- if (!w.ai || typeof w.ai.canCreateTextSession !== 'function') {
26
+ if (!w.ai || typeof w.ai.canCreateTextSession !== "function") {
23
27
  return null;
24
28
  }
25
29
  try {
26
30
  const readiness = await w.ai.canCreateTextSession();
27
- if (readiness !== 'readily' && readiness !== 'after-download') {
31
+ if (readiness !== "readily" && readiness !== "after-download") {
28
32
  return null;
29
33
  }
30
34
  const session = await w.ai.createTextSession({
@@ -33,135 +37,178 @@ async function summarizeWithBrowserAI(items) {
33
37
  topP: 0.95,
34
38
  });
35
39
  const prompt = `You are summarizing a brief series of UI events and errors from a web session. Return a compact JSON with keys: summary (string, <= 300 chars), keyActions (string[]), errors (string[]). Do not include any PII.\n\nEvents:\n${items
36
- .map((e) => e.kind === 'ui'
37
- ? `UI:${e.action}${e.label ? `:${e.label}` : ''}@${new Date(e.ts).toISOString()}`
38
- : `ERR:${e.name ?? 'Error'}:${e.message}@${new Date(e.ts).toISOString()}`)
39
- .join('\n')}`;
40
+ .map((e) => e.kind === "ui"
41
+ ? `UI:${e.action}${e.label ? `:${e.label}` : ""}@${new Date(e.ts).toISOString()}`
42
+ : `ERR:${e.name ?? "Error"}:${e.message}@${new Date(e.ts).toISOString()}`)
43
+ .join("\n")}`;
40
44
  const out = await session.prompt(prompt);
41
- if (typeof out !== 'string' || out.length === 0) {
45
+ if (typeof out !== "string" || out.length === 0) {
42
46
  return null;
43
47
  }
44
- return out.slice(0, 2000);
48
+ return out.slice(0, MAX_LENGTH);
45
49
  }
46
50
  catch {
47
51
  return null;
48
52
  }
49
53
  }
50
- async function emitSummary(allowBrowserAI) {
54
+ async function emitSummary() {
51
55
  const items = buffer.slice();
52
56
  buffer = [];
53
57
  if (items.length === 0) {
54
58
  return;
55
59
  }
56
60
  let summary = null;
57
- if (allowBrowserAI) {
61
+ if (ALLOW_BROWSER_AI) {
58
62
  summary = await summarizeWithBrowserAI(items);
59
63
  }
60
64
  const payload = {
61
65
  version: 1,
62
66
  windowMs: undefined,
63
67
  eventCount: items.length,
64
- sample: items.slice(-20),
68
+ sample: items.slice(-SAMPLE_LENGTH),
65
69
  summary,
66
70
  };
67
71
  try {
68
- capture('session_summary', payload);
72
+ capture("session_summary", payload);
69
73
  }
70
74
  catch {
71
75
  // ignore if not initialized yet
72
76
  }
73
77
  }
74
- export function setupSessionSummary(options) {
78
+ export function setupSessionSummary() {
75
79
  if (initialized) {
76
80
  return;
77
81
  }
78
82
  if (!isBrowser()) {
79
83
  return;
80
84
  }
81
- const enable = options?.enableSessionSummary ?? false;
82
- if (!enable) {
85
+ // Session summary is always enabled now
86
+ if (!SESSION_SUMMARY_ENABLED) {
83
87
  return;
84
88
  }
85
89
  initialized = true;
86
- const windowMs = options?.sessionSummaryWindowMs ?? 10_000;
87
- const maxEvents = options?.sessionSummaryMaxEvents ?? 200;
88
- const allowBrowserAI = options?.allowBrowserAI ?? true;
90
+ const windowMs = SESSION_SUMMARY_WINDOW_MS;
91
+ const maxEvents = SESSION_SUMMARY_MAX_EVENTS;
89
92
  // Basic UI signals
90
- document.addEventListener('click', (e) => {
93
+ const clickListener = (e) => {
91
94
  const target = e.target;
92
- const label = target?.getAttribute('aria-label') ||
93
- target?.innerText?.slice(0, 60) ||
95
+ const label = target?.getAttribute("aria-label") ||
96
+ target?.textContent?.slice(0, 60) ||
94
97
  undefined;
95
- pushEvent({ kind: 'ui', action: 'click', label, ts: Date.now() }, maxEvents);
96
- }, { capture: true });
97
- document.addEventListener('keydown', () => {
98
+ pushEvent({ kind: "ui", action: "click", label, ts: Date.now() }, maxEvents);
99
+ };
100
+ document.addEventListener("click", clickListener, { capture: true });
101
+ teardownFns.push(() => {
102
+ document.removeEventListener("click", clickListener, {
103
+ capture: true,
104
+ });
105
+ });
106
+ const keydownListener = () => {
98
107
  // Avoid capturing actual keys for privacy; log only that a key interaction occurred
99
- pushEvent({ kind: 'ui', action: 'key', ts: Date.now() }, maxEvents);
100
- }, { capture: true });
108
+ pushEvent({ kind: "ui", action: "key", ts: Date.now() }, maxEvents);
109
+ };
110
+ document.addEventListener("keydown", keydownListener, { capture: true });
111
+ teardownFns.push(() => {
112
+ document.removeEventListener("keydown", keydownListener, {
113
+ capture: true,
114
+ });
115
+ });
101
116
  // Basic navigation signals
102
117
  try {
103
118
  const originalPushState = history.pushState.bind(history);
104
119
  const newPushState = (...args) => {
105
- pushEvent({ kind: 'ui', action: 'nav', label: 'push', ts: Date.now() }, maxEvents);
120
+ pushEvent({ kind: "ui", action: "nav", label: "push", ts: Date.now() }, maxEvents);
106
121
  return originalPushState(...args);
107
122
  };
108
123
  history.pushState = newPushState;
124
+ teardownFns.push(() => {
125
+ history.pushState = originalPushState;
126
+ });
109
127
  const originalReplaceState = history.replaceState.bind(history);
110
128
  const newReplaceState = (...args) => {
111
- pushEvent({ kind: 'ui', action: 'nav', label: 'replace', ts: Date.now() }, maxEvents);
129
+ pushEvent({ kind: "ui", action: "nav", label: "replace", ts: Date.now() }, maxEvents);
112
130
  return originalReplaceState(...args);
113
131
  };
114
132
  history.replaceState = newReplaceState;
115
- window.addEventListener('popstate', () => {
116
- pushEvent({ kind: 'ui', action: 'nav', label: 'pop', ts: Date.now() }, maxEvents);
133
+ teardownFns.push(() => {
134
+ history.replaceState = originalReplaceState;
117
135
  });
136
+ const popstate = () => {
137
+ pushEvent({ kind: "ui", action: "nav", label: "pop", ts: Date.now() }, maxEvents);
138
+ };
139
+ window.addEventListener("popstate", popstate);
140
+ teardownFns.push(() => window.removeEventListener("popstate", popstate));
118
141
  }
119
142
  catch {
120
143
  // Ignore if history API not available
121
144
  }
122
145
  // Lightweight error hook (in addition to error-handlers)
123
- window.addEventListener('error', (ev) => {
146
+ const errorListener = (ev) => {
124
147
  if (!ev?.message) {
125
148
  return;
126
149
  }
127
150
  pushEvent({
128
- kind: 'error',
151
+ kind: "error",
129
152
  message: String(ev.message),
130
- name: 'WindowError',
153
+ name: "WindowError",
131
154
  ts: Date.now(),
132
155
  }, maxEvents);
133
- });
134
- window.addEventListener('unhandledrejection', (ev) => {
156
+ };
157
+ window.addEventListener("error", errorListener);
158
+ teardownFns.push(() => window.removeEventListener("error", errorListener));
159
+ const rejectionListener = (ev) => {
135
160
  const msg = ev?.reason
136
161
  ? String(ev.reason?.message ?? ev.reason)
137
- : 'unhandledrejection';
162
+ : "unhandledrejection";
138
163
  pushEvent({
139
- kind: 'error',
164
+ kind: "error",
140
165
  message: msg,
141
- name: 'UnhandledRejection',
166
+ name: "UnhandledRejection",
142
167
  ts: Date.now(),
143
168
  }, maxEvents);
144
- });
169
+ };
170
+ window.addEventListener("unhandledrejection", rejectionListener);
171
+ teardownFns.push(() => window.removeEventListener("unhandledrejection", rejectionListener));
145
172
  // Timer-based summary emission
146
173
  const run = () => {
147
174
  // Swallow errors to avoid impacting the host app
148
- emitSummary(allowBrowserAI).catch(() => {
175
+ emitSummary().catch(() => {
149
176
  /* no-op */
150
177
  });
151
178
  };
152
- window.setInterval(run, windowMs);
179
+ const intervalId = window.setInterval(run, windowMs);
180
+ teardownFns.push(() => window.clearInterval(intervalId));
153
181
  // Emit on page hide/visibility change to avoid losing the last window
154
182
  const flushNow = () => {
155
183
  // Swallow errors to avoid impacting the host app
156
- emitSummary(allowBrowserAI).catch(() => {
184
+ emitSummary().catch(() => {
157
185
  /* no-op */
158
186
  });
159
187
  };
160
- window.addEventListener('beforeunload', flushNow);
161
- document.addEventListener('visibilitychange', () => {
162
- if (document.visibilityState === 'hidden') {
188
+ const beforeUnload = () => flushNow();
189
+ const visibility = () => {
190
+ if (document.visibilityState === "hidden") {
163
191
  flushNow();
164
192
  }
193
+ };
194
+ window.addEventListener("beforeunload", beforeUnload);
195
+ document.addEventListener("visibilitychange", visibility);
196
+ teardownFns.push(() => {
197
+ window.removeEventListener("beforeunload", beforeUnload);
198
+ document.removeEventListener("visibilitychange", visibility);
165
199
  });
166
200
  }
201
+ export function stopSessionSummary() {
202
+ const fns = teardownFns.splice(0);
203
+ for (const fn of fns) {
204
+ try {
205
+ fn();
206
+ }
207
+ catch {
208
+ /* no-op */
209
+ }
210
+ }
211
+ initialized = false;
212
+ buffer = [];
213
+ }
167
214
  //# sourceMappingURL=session-summary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-summary.js","sourceRoot":"","sources":["../../src/session/session-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-summary.js","sourceRoot":"","sources":["../../src/session/session-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type PersistentStore = {
2
+ _is_supported(): boolean;
3
+ _parse(key: string): unknown;
4
+ _set(key: string, value: unknown): void;
5
+ _remove(key: string): void;
6
+ };
7
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,aAAa,IAAI,OAAO,CAAC;IACzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@interfere/next",
3
- "version": "0.0.0-alpha.10",
3
+ "version": "0.0.1",
4
4
  "license": "MIT",
5
5
  "description": "Build apps that never break.",
6
6
  "keywords": [
@@ -20,13 +20,29 @@
20
20
  "type": "module",
21
21
  "main": "./dist/index.js",
22
22
  "types": "./dist/index.d.ts",
23
+ "exports": {
24
+ ".": {
25
+ "import": "./dist/index.js",
26
+ "types": "./dist/index.d.ts"
27
+ },
28
+ "./build": {
29
+ "import": "./dist/build/index.js",
30
+ "types": "./dist/build/index.d.ts"
31
+ }
32
+ },
23
33
  "publishConfig": {
24
34
  "access": "public"
25
35
  },
26
36
  "dependencies": {
37
+ "@rrweb/packer": "^2.0.0-alpha.18",
38
+ "@rrweb/types": "^2.0.0-alpha.18",
39
+ "form-data": "^4.0.1",
40
+ "glob": "^11.0.0",
27
41
  "nanoid": "^5.1.5",
28
- "rrweb": "^2.0.0-alpha.18",
29
- "@interfere/schemas": "0.0.3"
42
+ "node-fetch": "^3.3.2",
43
+ "rrweb": "2.0.0-alpha.18",
44
+ "uuid": "^13.0.0",
45
+ "@interfere/schemas": "0.0.5"
30
46
  },
31
47
  "peerDependencies": {
32
48
  "next": ">=15",
@@ -35,14 +51,15 @@
35
51
  },
36
52
  "devDependencies": {
37
53
  "@types/node": "22.15.29",
38
- "@types/react": "19.1.9",
39
- "@types/react-dom": "19.1.7",
40
- "next": "^15.4.6",
54
+ "@types/react": "19.1.13",
55
+ "@types/react-dom": "19.1.9",
56
+ "@vitest/coverage-v8": "^3.2.4",
57
+ "next": "^15.5.3",
41
58
  "react": "^19.1.1",
42
59
  "react-dom": "^19.1.1",
43
60
  "typescript": "5.9.2",
44
61
  "vitest": "^3.2.4",
45
- "@interfere/typescript-config": "1.0.1"
62
+ "@interfere/typescript-config": "1.0.2"
46
63
  },
47
64
  "scripts": {
48
65
  "build": "tsc",
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../src/core/client.test.ts"],"names":[],"mappings":""}
@@ -1,238 +0,0 @@
1
- import { sessionIdLength } from '@interfere/schemas';
2
- import { nanoid, urlAlphabet } from 'nanoid';
3
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
- import { capture, flush, getSessionId, init } from './client.js';
5
- const SESSION_ID_REGEX = new RegExp(`^[${urlAlphabet.split('').sort().join('')}]{${sessionIdLength}}$`);
6
- describe('client', () => {
7
- beforeEach(() => {
8
- vi.resetModules();
9
- vi.clearAllMocks();
10
- vi.clearAllTimers();
11
- vi.useFakeTimers();
12
- });
13
- afterEach(() => {
14
- vi.useRealTimers();
15
- });
16
- describe('init', () => {
17
- it('initializes with required config', () => {
18
- const client = init({ surface: 'if_p_test' });
19
- expect(client).toBeDefined();
20
- });
21
- it('uses default endpoint', () => {
22
- const fetchSpy = vi
23
- .spyOn(global, 'fetch')
24
- .mockResolvedValue(new Response());
25
- init({ surface: 'if_p_test' });
26
- capture('error', { test: true });
27
- flush();
28
- expect(fetchSpy).toHaveBeenCalledWith('https://api.interfere.com/ingest/v0', expect.any(Object));
29
- });
30
- it('uses custom endpoint', () => {
31
- const fetchSpy = vi
32
- .spyOn(global, 'fetch')
33
- .mockResolvedValue(new Response());
34
- init({
35
- surface: 'if_p_test',
36
- options: { endpoint: 'http://localhost:3001/ingest/v0' },
37
- });
38
- capture('error', { test: true });
39
- flush();
40
- expect(fetchSpy).toHaveBeenCalledWith('http://localhost:3001/ingest/v0', expect.any(Object));
41
- });
42
- });
43
- describe('capture', () => {
44
- it('throws if not initialized', async () => {
45
- vi.resetModules();
46
- const { capture: freshCapture } = await import('./client.js');
47
- expect(() => freshCapture('error', {})).toThrow('[interfere] not initialized');
48
- });
49
- it('queues events', () => {
50
- const fetchSpy = vi
51
- .spyOn(global, 'fetch')
52
- .mockResolvedValue(new Response());
53
- init({ surface: 'if_p_test' });
54
- capture('ui_event', { action: 'click' });
55
- capture('error', { message: 'test error' });
56
- // In server mode, each capture auto-flushes
57
- // So we expect 2 fetch calls
58
- expect(fetchSpy).toHaveBeenCalledTimes(2);
59
- const call1 = fetchSpy.mock.calls[0];
60
- const call2 = fetchSpy.mock.calls[1];
61
- if (!(call1?.[1] && call2?.[1])) {
62
- throw new Error('Expected 2 fetch calls');
63
- }
64
- const body1 = JSON.parse(call1[1].body);
65
- const body2 = JSON.parse(call2[1].body);
66
- expect(body1).toHaveLength(1);
67
- expect(body1[0].type).toBe('ui_event');
68
- expect(body2).toHaveLength(1);
69
- expect(body2[0].type).toBe('error');
70
- });
71
- it('auto-flushes after 10 events', () => {
72
- const fetchSpy = vi
73
- .spyOn(global, 'fetch')
74
- .mockResolvedValue(new Response());
75
- init({ surface: 'if_p_test' });
76
- // In server mode, each capture triggers a flush
77
- for (let i = 0; i < 10; i++) {
78
- capture('ui_event', { index: i });
79
- }
80
- // Each capture causes a flush in server mode
81
- expect(fetchSpy).toHaveBeenCalledTimes(10);
82
- });
83
- it('includes correct envelope structure', () => {
84
- const fetchSpy = vi
85
- .spyOn(global, 'fetch')
86
- .mockResolvedValue(new Response());
87
- init({ surface: 'if_p_test', options: { env: 'production' } });
88
- capture('network', { url: '/api/test' });
89
- flush();
90
- const call = fetchSpy.mock.calls[0];
91
- if (!call?.[1]) {
92
- throw new Error('Expected fetch call');
93
- }
94
- const body = JSON.parse(call[1].body);
95
- const envelope = body[0];
96
- expect(envelope.v).toBe(0);
97
- expect(envelope.runtime).toBe('server'); // Default in test environment
98
- expect(envelope.surface).toBe('if_p_test');
99
- expect(envelope.env).toBe('production');
100
- expect(envelope.clientTs).toBeGreaterThan(0);
101
- expect(envelope.sessionId).toMatch(SESSION_ID_REGEX);
102
- expect(envelope.seq).toBe(1);
103
- expect(envelope.type).toBe('network');
104
- expect(envelope.payload).toBeDefined();
105
- });
106
- });
107
- describe('flush', () => {
108
- it('does nothing with empty queue', () => {
109
- const fetchSpy = vi
110
- .spyOn(global, 'fetch')
111
- .mockResolvedValue(new Response());
112
- init({ surface: 'if_p_test' });
113
- flush();
114
- expect(fetchSpy).not.toHaveBeenCalled();
115
- });
116
- it('clears queue after flush', () => {
117
- const fetchSpy = vi
118
- .spyOn(global, 'fetch')
119
- .mockResolvedValue(new Response());
120
- init({ surface: 'if_p_test' });
121
- capture('error', { test: true });
122
- flush();
123
- expect(fetchSpy).toHaveBeenCalledTimes(1);
124
- flush(); // Second flush should do nothing
125
- expect(fetchSpy).toHaveBeenCalledTimes(1);
126
- });
127
- it('handles fetch errors in debug mode', async () => {
128
- const fetchSpy = vi
129
- .spyOn(global, 'fetch')
130
- .mockRejectedValue(new Error('Network error'));
131
- init({ surface: 'if_p_test', options: { debug: true } });
132
- capture('error', { test: true });
133
- // Should not throw
134
- expect(() => flush()).not.toThrow();
135
- await vi.waitFor(() => {
136
- expect(fetchSpy).toHaveBeenCalled();
137
- });
138
- });
139
- });
140
- describe('getSessionId', () => {
141
- it('throws if not initialized', async () => {
142
- vi.resetModules();
143
- const { getSessionId: freshGetSessionId } = await import('./client.js');
144
- expect(() => freshGetSessionId()).toThrow('[interfere] not initialized');
145
- });
146
- it('returns consistent session ID', () => {
147
- init({ surface: 'if_p_test' });
148
- const id1 = getSessionId();
149
- const id2 = getSessionId();
150
- expect(id1).toBe(id2);
151
- expect(id1).toMatch(SESSION_ID_REGEX);
152
- });
153
- it('uses provided session ID', () => {
154
- const customId = nanoid(sessionIdLength);
155
- init({ surface: 'if_p_test', options: { sessionId: customId } });
156
- expect(getSessionId()).toBe(customId);
157
- });
158
- });
159
- describe('runtime detection', () => {
160
- it('detects server runtime by default', () => {
161
- const fetchSpy = vi
162
- .spyOn(global, 'fetch')
163
- .mockResolvedValue(new Response());
164
- init({ surface: 'if_p_test' });
165
- capture('server_req', {});
166
- flush();
167
- const call = fetchSpy.mock.calls[0];
168
- if (!call?.[1]) {
169
- throw new Error('Expected fetch call');
170
- }
171
- const body = JSON.parse(call[1].body);
172
- expect(body[0].runtime).toBe('server');
173
- });
174
- it('detects client runtime with window', async () => {
175
- const originalWindow = global.window;
176
- global.window = {
177
- addEventListener: vi.fn(),
178
- };
179
- vi.resetModules();
180
- const { init: freshInit, capture: freshCapture, flush: freshFlush, } = await import('./client.js');
181
- const fetchSpy = vi
182
- .spyOn(global, 'fetch')
183
- .mockResolvedValue(new Response());
184
- freshInit({ surface: 'if_p_test' });
185
- freshCapture('ui_event', {});
186
- // Client mode doesn't auto-flush
187
- expect(fetchSpy).not.toHaveBeenCalled();
188
- freshFlush();
189
- const call = fetchSpy.mock.calls[0];
190
- if (!call?.[1]) {
191
- throw new Error('Expected fetch call');
192
- }
193
- const body = JSON.parse(call[1].body);
194
- expect(body[0].runtime).toBe('client');
195
- global.window = originalWindow;
196
- });
197
- });
198
- describe('client mode features', () => {
199
- it('uses fetch with keepalive when sendBeacon is available', async () => {
200
- const originalWindow = global.window;
201
- const fetchSpy = vi.fn().mockResolvedValue(new Response());
202
- const sendBeaconSpy = vi.fn().mockReturnValue(true);
203
- // Create a proper mock window with sendBeacon on it
204
- global.window = {
205
- addEventListener: vi.fn(),
206
- navigator: {
207
- sendBeacon: sendBeaconSpy,
208
- },
209
- };
210
- global.fetch = fetchSpy;
211
- vi.resetModules();
212
- const { init: freshInit, capture: freshCapture, flush: freshFlush, } = await import('./client.js');
213
- freshInit({ surface: 'if_p_test' });
214
- freshCapture('ui_event', {});
215
- freshFlush();
216
- // Should use fetch with keepalive, not sendBeacon
217
- expect(sendBeaconSpy).not.toHaveBeenCalled();
218
- expect(fetchSpy).toHaveBeenCalledWith('https://api.interfere.com/ingest/v0', expect.objectContaining({
219
- method: 'POST',
220
- keepalive: true,
221
- headers: expect.any(Headers),
222
- body: expect.any(String),
223
- }));
224
- global.window = originalWindow;
225
- global.fetch = fetch;
226
- });
227
- it('sets up auto-flush timer in client mode', async () => {
228
- const originalWindow = global.window;
229
- global.window = { addEventListener: vi.fn() };
230
- vi.resetModules();
231
- const { init: freshInit } = await import('./client.js');
232
- freshInit({ surface: 'if_p_test', options: { flushInterval: 1000 } });
233
- expect(global.window.addEventListener).toHaveBeenCalledWith('beforeunload', expect.any(Function));
234
- global.window = originalWindow;
235
- });
236
- });
237
- });
238
- //# sourceMappingURL=client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/core/client.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"encoders.test.d.ts","sourceRoot":"","sources":["../../src/core/encoders.test.ts"],"names":[],"mappings":""}