@interfere/next 0.0.0 → 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 (49) hide show
  1. package/package.json +2 -2
  2. package/dist/__tests__/core/debug.test.d.ts +0 -2
  3. package/dist/__tests__/core/debug.test.d.ts.map +0 -1
  4. package/dist/__tests__/core/debug.test.js +0 -277
  5. package/dist/__tests__/core/debug.test.js.map +0 -1
  6. package/dist/__tests__/core/persistence.test.d.ts +0 -2
  7. package/dist/__tests__/core/persistence.test.d.ts.map +0 -1
  8. package/dist/__tests__/core/persistence.test.js +0 -129
  9. package/dist/__tests__/core/persistence.test.js.map +0 -1
  10. package/dist/__tests__/react/provider.test.d.ts +0 -2
  11. package/dist/__tests__/react/provider.test.d.ts.map +0 -1
  12. package/dist/__tests__/react/provider.test.jsx +0 -166
  13. package/dist/__tests__/react/provider.test.jsx.map +0 -1
  14. package/dist/__tests__/session/replay.test.d.ts +0 -2
  15. package/dist/__tests__/session/replay.test.d.ts.map +0 -1
  16. package/dist/__tests__/session/replay.test.js +0 -296
  17. package/dist/__tests__/session/replay.test.js.map +0 -1
  18. package/dist/core/client.test.d.ts +0 -2
  19. package/dist/core/client.test.d.ts.map +0 -1
  20. package/dist/core/client.test.js +0 -373
  21. package/dist/core/client.test.js.map +0 -1
  22. package/dist/core/encoders.test.d.ts +0 -2
  23. package/dist/core/encoders.test.d.ts.map +0 -1
  24. package/dist/core/encoders.test.js +0 -56
  25. package/dist/core/encoders.test.js.map +0 -1
  26. package/dist/next/error-boundary.d.ts +0 -17
  27. package/dist/next/error-boundary.d.ts.map +0 -1
  28. package/dist/next/error-boundary.jsx +0 -32
  29. package/dist/next/error-boundary.jsx.map +0 -1
  30. package/dist/persistence/index.d.ts +0 -5
  31. package/dist/persistence/index.d.ts.map +0 -1
  32. package/dist/persistence/index.js +0 -67
  33. package/dist/persistence/index.js.map +0 -1
  34. package/dist/session/persistence.test.d.ts +0 -2
  35. package/dist/session/persistence.test.d.ts.map +0 -1
  36. package/dist/session/persistence.test.js +0 -129
  37. package/dist/session/persistence.test.js.map +0 -1
  38. package/dist/session/rage-click.test.d.ts +0 -2
  39. package/dist/session/rage-click.test.d.ts.map +0 -1
  40. package/dist/session/rage-click.test.js +0 -124
  41. package/dist/session/rage-click.test.js.map +0 -1
  42. package/dist/session/session-manager.test.d.ts +0 -2
  43. package/dist/session/session-manager.test.d.ts.map +0 -1
  44. package/dist/session/session-manager.test.js +0 -1134
  45. package/dist/session/session-manager.test.js.map +0 -1
  46. package/dist/storage/index.d.ts +0 -5
  47. package/dist/storage/index.d.ts.map +0 -1
  48. package/dist/storage/index.js +0 -67
  49. package/dist/storage/index.js.map +0 -1
@@ -1,373 +0,0 @@
1
- import { v7 as uuidv7 } from "uuid";
2
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
- import { capture, flush, getSessionId, init } from "./client.js";
4
- const SESSION_ID_REGEX = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;
5
- // Test defaults for required fields
6
- const DEFAULT_TEST_CONFIG = {
7
- buildId: "test-build-123",
8
- releaseId: "test-release-456",
9
- };
10
- describe("client", () => {
11
- beforeEach(() => {
12
- vi.resetModules();
13
- vi.clearAllMocks();
14
- vi.clearAllTimers();
15
- vi.useFakeTimers();
16
- });
17
- afterEach(() => {
18
- vi.useRealTimers();
19
- });
20
- describe("init", () => {
21
- it("initializes with required config", () => {
22
- const client = init({
23
- surface: "if_p_test",
24
- options: DEFAULT_TEST_CONFIG,
25
- });
26
- expect(client).toBeDefined();
27
- });
28
- it("uses default endpoint", () => {
29
- const fetchSpy = vi
30
- .spyOn(global, "fetch")
31
- .mockResolvedValue(new Response());
32
- init({
33
- surface: "if_p_test",
34
- options: DEFAULT_TEST_CONFIG,
35
- });
36
- capture("error", { test: true });
37
- flush();
38
- expect(fetchSpy).toHaveBeenCalledWith("https://api.interfere.com/ingest/v0", expect.any(Object));
39
- });
40
- it("uses custom endpoint", () => {
41
- const fetchSpy = vi
42
- .spyOn(global, "fetch")
43
- .mockResolvedValue(new Response());
44
- init({
45
- surface: "if_p_test",
46
- options: {
47
- ...DEFAULT_TEST_CONFIG,
48
- endpoint: "http://localhost:3001/ingest/v0",
49
- },
50
- });
51
- capture("error", { test: true });
52
- flush();
53
- expect(fetchSpy).toHaveBeenCalledWith("http://localhost:3001/ingest/v0", expect.any(Object));
54
- });
55
- });
56
- describe("capture", () => {
57
- it("throws if not initialized", async () => {
58
- vi.resetModules();
59
- const { capture: freshCapture } = await import("./client.js");
60
- expect(() => freshCapture("error", {})).toThrow("[Interfere] Not initialized");
61
- });
62
- it("queues events", () => {
63
- const fetchSpy = vi
64
- .spyOn(global, "fetch")
65
- .mockResolvedValue(new Response());
66
- init({
67
- surface: "if_p_test",
68
- options: DEFAULT_TEST_CONFIG,
69
- });
70
- capture("ui_event", { action: "click" });
71
- capture("error", { message: "test error" });
72
- // In server mode, each capture auto-flushes
73
- // So we expect 2 fetch calls
74
- expect(fetchSpy).toHaveBeenCalledTimes(2);
75
- const call1 = fetchSpy.mock.calls[0];
76
- const call2 = fetchSpy.mock.calls[1];
77
- if (!(call1?.[1] && call2?.[1])) {
78
- throw new Error("Expected 2 fetch calls");
79
- }
80
- const body1 = JSON.parse(call1[1].body);
81
- const body2 = JSON.parse(call2[1].body);
82
- expect(body1).toHaveLength(1);
83
- expect(body1[0].type).toBe("ui_event");
84
- expect(body2).toHaveLength(1);
85
- expect(body2[0].type).toBe("error");
86
- });
87
- it("auto-flushes after 10 events", () => {
88
- const fetchSpy = vi
89
- .spyOn(global, "fetch")
90
- .mockResolvedValue(new Response());
91
- init({
92
- surface: "if_p_test",
93
- options: DEFAULT_TEST_CONFIG,
94
- });
95
- // In server mode, each capture triggers a flush
96
- for (let i = 0; i < 10; i++) {
97
- capture("ui_event", { index: i });
98
- }
99
- // Each capture causes a flush in server mode
100
- expect(fetchSpy).toHaveBeenCalledTimes(10);
101
- });
102
- it("includes correct envelope structure", () => {
103
- const fetchSpy = vi
104
- .spyOn(global, "fetch")
105
- .mockResolvedValue(new Response());
106
- init({
107
- surface: "if_p_test",
108
- options: { ...DEFAULT_TEST_CONFIG, env: "production" },
109
- });
110
- capture("network", { url: "/api/test" });
111
- flush();
112
- const call = fetchSpy.mock.calls[0];
113
- if (!call?.[1]) {
114
- throw new Error("Expected fetch call");
115
- }
116
- const body = JSON.parse(call[1].body);
117
- const envelope = body[0];
118
- expect(envelope.v).toBe(0);
119
- expect(envelope.runtime).toBe("server"); // Default in test environment
120
- expect(envelope.surface).toBe("if_p_test");
121
- expect(envelope.env).toBe("production");
122
- expect(envelope.clientTs).toBeGreaterThan(0);
123
- expect(envelope.sessionId).toMatch(SESSION_ID_REGEX);
124
- expect(envelope.seq).toBe(1);
125
- expect(envelope.type).toBe("network");
126
- expect(envelope.payload).toBeDefined();
127
- });
128
- });
129
- describe("flush", () => {
130
- it("does nothing with empty queue", () => {
131
- const fetchSpy = vi
132
- .spyOn(global, "fetch")
133
- .mockResolvedValue(new Response());
134
- init({
135
- surface: "if_p_test",
136
- options: DEFAULT_TEST_CONFIG,
137
- });
138
- flush();
139
- expect(fetchSpy).not.toHaveBeenCalled();
140
- });
141
- it("clears queue after flush", () => {
142
- const fetchSpy = vi
143
- .spyOn(global, "fetch")
144
- .mockResolvedValue(new Response());
145
- init({
146
- surface: "if_p_test",
147
- options: DEFAULT_TEST_CONFIG,
148
- });
149
- capture("error", { test: true });
150
- flush();
151
- expect(fetchSpy).toHaveBeenCalledTimes(1);
152
- flush(); // Second flush should do nothing
153
- expect(fetchSpy).toHaveBeenCalledTimes(1);
154
- });
155
- it("handles fetch errors in debug mode", async () => {
156
- const fetchSpy = vi
157
- .spyOn(global, "fetch")
158
- .mockRejectedValue(new Error("Network error"));
159
- init({
160
- surface: "if_p_test",
161
- options: { ...DEFAULT_TEST_CONFIG, debug: true },
162
- });
163
- capture("error", { test: true });
164
- // Should not throw
165
- expect(() => flush()).not.toThrow();
166
- await vi.waitFor(() => {
167
- expect(fetchSpy).toHaveBeenCalled();
168
- });
169
- });
170
- });
171
- describe("getSessionId", () => {
172
- it("throws if not initialized", async () => {
173
- vi.resetModules();
174
- const { getSessionId: freshGetSessionId } = await import("./client.js");
175
- expect(() => freshGetSessionId()).toThrow("[Interfere] Not initialized");
176
- });
177
- it("returns consistent session ID", () => {
178
- init({
179
- surface: "if_p_test",
180
- options: DEFAULT_TEST_CONFIG,
181
- });
182
- const id1 = getSessionId();
183
- const id2 = getSessionId();
184
- expect(id1).toBe(id2);
185
- expect(id1).toMatch(SESSION_ID_REGEX);
186
- });
187
- it("uses provided session ID", () => {
188
- const customId = uuidv7();
189
- init({
190
- surface: "if_p_test",
191
- options: { ...DEFAULT_TEST_CONFIG, sessionId: customId },
192
- });
193
- expect(getSessionId()).toBe(customId);
194
- });
195
- });
196
- describe("runtime detection", () => {
197
- it("detects server runtime by default", () => {
198
- const fetchSpy = vi
199
- .spyOn(global, "fetch")
200
- .mockResolvedValue(new Response());
201
- init({
202
- surface: "if_p_test",
203
- options: DEFAULT_TEST_CONFIG,
204
- });
205
- capture("server_req", {});
206
- flush();
207
- const call = fetchSpy.mock.calls[0];
208
- if (!call?.[1]) {
209
- throw new Error("Expected fetch call");
210
- }
211
- const body = JSON.parse(call[1].body);
212
- expect(body[0].runtime).toBe("server");
213
- });
214
- it("detects client runtime with window", async () => {
215
- const originalWindow = global.window;
216
- global.window = {
217
- addEventListener: vi.fn(),
218
- };
219
- vi.resetModules();
220
- const { init: freshInit, capture: freshCapture, flush: freshFlush, } = await import("./client.js");
221
- const fetchSpy = vi
222
- .spyOn(global, "fetch")
223
- .mockResolvedValue(new Response());
224
- freshInit({
225
- surface: "if_p_test",
226
- options: DEFAULT_TEST_CONFIG,
227
- });
228
- freshCapture("ui_event", {});
229
- // Client mode doesn't auto-flush
230
- expect(fetchSpy).not.toHaveBeenCalled();
231
- freshFlush();
232
- const call = fetchSpy.mock.calls[0];
233
- if (!call?.[1]) {
234
- throw new Error("Expected fetch call");
235
- }
236
- const body = JSON.parse(call[1].body);
237
- expect(body[0].runtime).toBe("client");
238
- global.window = originalWindow;
239
- });
240
- });
241
- describe("client mode features", () => {
242
- it("uses fetch with keepalive when sendBeacon is available", async () => {
243
- const originalWindow = global.window;
244
- const fetchSpy = vi.fn().mockResolvedValue(new Response());
245
- const sendBeaconSpy = vi.fn().mockReturnValue(true);
246
- // Create a proper mock window with sendBeacon on it
247
- global.window = {
248
- addEventListener: vi.fn(),
249
- navigator: {
250
- sendBeacon: sendBeaconSpy,
251
- },
252
- };
253
- global.fetch = fetchSpy;
254
- vi.resetModules();
255
- const { init: freshInit, capture: freshCapture, flush: freshFlush, } = await import("./client.js");
256
- freshInit({
257
- surface: "if_p_test",
258
- options: DEFAULT_TEST_CONFIG,
259
- });
260
- freshCapture("ui_event", {});
261
- freshFlush();
262
- // Should use fetch with keepalive, not sendBeacon
263
- expect(sendBeaconSpy).not.toHaveBeenCalled();
264
- expect(fetchSpy).toHaveBeenCalledWith("https://api.interfere.com/ingest/v0", expect.objectContaining({
265
- method: "POST",
266
- keepalive: true,
267
- headers: expect.any(Headers),
268
- body: expect.any(String),
269
- }));
270
- global.window = originalWindow;
271
- global.fetch = fetch;
272
- });
273
- it("sets up auto-flush timer in client mode", async () => {
274
- const originalWindow = global.window;
275
- global.window = { addEventListener: vi.fn() };
276
- vi.resetModules();
277
- const { init: freshInit } = await import("./client.js");
278
- freshInit({
279
- surface: "if_p_test",
280
- options: { ...DEFAULT_TEST_CONFIG, flushInterval: 1000 },
281
- });
282
- expect(global.window.addEventListener).toHaveBeenCalledWith("beforeunload", expect.any(Function));
283
- global.window = originalWindow;
284
- });
285
- });
286
- describe("background events", () => {
287
- beforeEach(() => {
288
- vi.clearAllMocks();
289
- });
290
- it("should not update session activity for replay_chunk events", () => {
291
- const client = init({
292
- surface: "if_p_test",
293
- options: DEFAULT_TEST_CONFIG,
294
- });
295
- // Mock the session manager to spy on checkAndGetSessionAndWindowId calls
296
- const sessionManager = client
297
- .sessionManager;
298
- if (!sessionManager) {
299
- throw new Error("Session manager not found");
300
- }
301
- const checkAndGetSpy = vi.spyOn(sessionManager, "checkAndGetSessionAndWindowId");
302
- // Capture a background event
303
- capture("replay_chunk", { events: [] });
304
- // Should be called with readOnly = true
305
- expect(checkAndGetSpy).toHaveBeenCalledWith(true);
306
- });
307
- it("should not update session activity for session_summary events", () => {
308
- const client = init({
309
- surface: "if_p_test",
310
- options: DEFAULT_TEST_CONFIG,
311
- });
312
- const sessionManager = client
313
- .sessionManager;
314
- if (!sessionManager) {
315
- throw new Error("Session manager not found");
316
- }
317
- const checkAndGetSpy = vi.spyOn(sessionManager, "checkAndGetSessionAndWindowId");
318
- // Capture a background event
319
- capture("session_summary", { summary: "test" });
320
- // Should be called with readOnly = true
321
- expect(checkAndGetSpy).toHaveBeenCalledWith(true);
322
- });
323
- it("should update session activity for user events", () => {
324
- const client = init({
325
- surface: "if_p_test",
326
- options: DEFAULT_TEST_CONFIG,
327
- });
328
- const sessionManager = client
329
- .sessionManager;
330
- if (!sessionManager) {
331
- throw new Error("Session manager not found");
332
- }
333
- const checkAndGetSpy = vi.spyOn(sessionManager, "checkAndGetSessionAndWindowId");
334
- // Capture a user event
335
- capture("ui_event", { action: "click" });
336
- // Should be called with readOnly = false
337
- expect(checkAndGetSpy).toHaveBeenCalledWith(false);
338
- });
339
- it("should update session activity for error events", () => {
340
- const client = init({
341
- surface: "if_p_test",
342
- options: DEFAULT_TEST_CONFIG,
343
- });
344
- const sessionManager = client
345
- .sessionManager;
346
- if (!sessionManager) {
347
- throw new Error("Session manager not found");
348
- }
349
- const checkAndGetSpy = vi.spyOn(sessionManager, "checkAndGetSessionAndWindowId");
350
- // Capture an error event
351
- capture("error", { message: "test error" });
352
- // Should be called with readOnly = false
353
- expect(checkAndGetSpy).toHaveBeenCalledWith(false);
354
- });
355
- it("should update session activity for custom events", () => {
356
- const client = init({
357
- surface: "if_p_test",
358
- options: DEFAULT_TEST_CONFIG,
359
- });
360
- const sessionManager = client
361
- .sessionManager;
362
- if (!sessionManager) {
363
- throw new Error("Session manager not found");
364
- }
365
- const checkAndGetSpy = vi.spyOn(sessionManager, "checkAndGetSessionAndWindowId");
366
- // Capture a custom event
367
- capture("custom", { action: "user_signup" });
368
- // Should be called with readOnly = false
369
- expect(checkAndGetSpy).toHaveBeenCalledWith(false);
370
- });
371
- });
372
- });
373
- //# 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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=encoders.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encoders.test.d.ts","sourceRoot":"","sources":["../../src/core/encoders.test.ts"],"names":[],"mappings":""}
@@ -1,56 +0,0 @@
1
- /** biome-ignore-all lint/style/noMagicNumbers: Self-explanatory */
2
- import { describe, expect, it } from "vitest";
3
- import { decode, encode } from "./encoders.js";
4
- describe("encoders", () => {
5
- describe("encode", () => {
6
- it("encodes strings to Uint8Array", () => {
7
- const result = encode("hello");
8
- expect(result).toBeInstanceOf(Uint8Array);
9
- expect(new TextDecoder().decode(result)).toBe('"hello"');
10
- });
11
- it("encodes objects to Uint8Array", () => {
12
- const obj = { foo: "bar", num: 123 };
13
- const result = encode(obj);
14
- expect(result).toBeInstanceOf(Uint8Array);
15
- expect(new TextDecoder().decode(result)).toBe('{"foo":"bar","num":123}');
16
- });
17
- it("encodes arrays to Uint8Array", () => {
18
- const arr = [1, 2, 3];
19
- const result = encode(arr);
20
- expect(result).toBeInstanceOf(Uint8Array);
21
- expect(new TextDecoder().decode(result)).toBe("[1,2,3]");
22
- });
23
- it("encodes null", () => {
24
- expect(new TextDecoder().decode(encode(null))).toBe("null");
25
- });
26
- it("handles undefined by encoding as null", () => {
27
- // JSON.stringify(undefined) returns undefined, which becomes empty string
28
- // This is expected behavior for JSON
29
- const result = encode(undefined);
30
- expect(result).toBeInstanceOf(Uint8Array);
31
- });
32
- });
33
- describe("decode", () => {
34
- it("decodes Uint8Array back to original values", () => {
35
- const testCases = [
36
- "hello",
37
- { foo: "bar", num: 123 },
38
- [1, 2, 3],
39
- null,
40
- true,
41
- false,
42
- 42,
43
- ];
44
- for (const original of testCases) {
45
- const encoded = encode(original);
46
- const decoded = decode(encoded);
47
- expect(decoded).toEqual(original);
48
- }
49
- });
50
- it("throws on invalid JSON", () => {
51
- const invalidJson = new TextEncoder().encode("not valid json");
52
- expect(() => decode(invalidJson)).toThrow();
53
- });
54
- });
55
- });
56
- //# sourceMappingURL=encoders.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encoders.test.js","sourceRoot":"","sources":["../../src/core/encoders.test.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import React, { type ReactNode } from "react";
2
- type Props = {
3
- children: ReactNode;
4
- fallback?: ReactNode;
5
- };
6
- type State = {
7
- hasError: boolean;
8
- error?: Error;
9
- };
10
- export declare class InterfereErrorBoundary extends React.Component<Props, State> {
11
- constructor(props: Props);
12
- static getDerivedStateFromError(error: Error): State;
13
- componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
14
- render(): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | React.JSX.Element | null | undefined;
15
- }
16
- export {};
17
- //# sourceMappingURL=error-boundary.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../../src/next/error-boundary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9C,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAMF,qBAAa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC3D,KAAK,EAAE,KAAK;IAKxB,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IAI3C,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAQjE,MAAM;CAgBhB"}
@@ -1,32 +0,0 @@
1
- "use client";
2
- import React, {} from "react";
3
- import { captureErrorBoundaryError } from "../core/error-handlers.js";
4
- export class InterfereErrorBoundary extends React.Component {
5
- constructor(props) {
6
- super(props);
7
- this.state = { hasError: false };
8
- }
9
- static getDerivedStateFromError(error) {
10
- return { hasError: true, error };
11
- }
12
- componentDidCatch(error, errorInfo) {
13
- // React's ErrorInfo might have undefined componentStack, but our handler expects a string
14
- const errorBoundaryInfo = {
15
- componentStack: errorInfo.componentStack || "",
16
- };
17
- captureErrorBoundaryError(error, errorBoundaryInfo);
18
- }
19
- render() {
20
- if (this.state.hasError) {
21
- if (this.props.fallback) {
22
- return this.props.fallback;
23
- }
24
- return (<div style={{ padding: "20px", textAlign: "center" }}>
25
- <h1>Something went wrong.</h1>
26
- <p>We've been notified about this error.</p>
27
- </div>);
28
- }
29
- return this.props.children;
30
- }
31
- }
32
- //# sourceMappingURL=error-boundary.jsx.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-boundary.jsx","sourceRoot":"","sources":["../../src/next/error-boundary.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAgBtE,MAAM,OAAO,sBAAuB,SAAQ,KAAK,CAAC,SAAuB;IACvE,YAAY,KAAY;QACtB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,KAAY;QAC1C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAEQ,iBAAiB,CAAC,KAAY,EAAE,SAA0B;QACjE,0FAA0F;QAC1F,MAAM,iBAAiB,GAA2B;YAChD,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,EAAE;SAC/C,CAAC;QACF,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACtD,CAAC;IAEQ,MAAM;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC7B,CAAC;YAED,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CACnD;UAAA,CAAC,EAAE,CAAC,qBAAqB,EAAE,EAAE,CAC7B;UAAA,CAAC,CAAC,CAAC,qCAAqC,EAAE,CAAC,CAC7C;QAAA,EAAE,GAAG,CAAC,CACP,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF"}
@@ -1,5 +0,0 @@
1
- import type { PersistentStore } from "../types/storage";
2
- export declare const localStore: PersistentStore;
3
- export declare const sessionStore: PersistentStore;
4
- export declare const memoryStore: PersistentStore;
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAoExD,eAAO,MAAM,UAAU,iBAAgC,CAAC;AACxD,eAAO,MAAM,YAAY,iBAAkC,CAAC;AAC5D,eAAO,MAAM,WAAW,iBAA0B,CAAC"}
@@ -1,67 +0,0 @@
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=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=persistence.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persistence.test.d.ts","sourceRoot":"","sources":["../../src/session/persistence.test.ts"],"names":[],"mappings":""}