@interfere/next 0.0.13 → 0.0.14

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.
@@ -0,0 +1,84 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ // Test that environment variables are properly set by withInterfere
3
+ describe("InterfereProvider configuration", () => {
4
+ beforeEach(() => {
5
+ vi.clearAllMocks();
6
+ // Clear all environment variables to ensure test isolation
7
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_SURFACE_ID", undefined);
8
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_ENVIRONMENT", undefined);
9
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_DEBUG", undefined);
10
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_RELEASE_ID", undefined);
11
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_BUILD_ID", undefined);
12
+ });
13
+ afterEach(() => {
14
+ vi.resetAllMocks();
15
+ vi.unstubAllEnvs();
16
+ });
17
+ it("should read surface ID from NEXT_PUBLIC_INTERFERE_SURFACE_ID", () => {
18
+ // This test verifies that the provider would read from env vars
19
+ // In a real app, these would be set by withInterfere at build time
20
+ const mockSurfaceId = "test-surface-123";
21
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_SURFACE_ID", mockSurfaceId);
22
+ // The provider would read this value
23
+ expect(process.env.NEXT_PUBLIC_INTERFERE_SURFACE_ID).toBe(mockSurfaceId);
24
+ });
25
+ it("should read all configuration from environment variables", () => {
26
+ // Set all env vars as withInterfere would
27
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_SURFACE_ID", "test-surface");
28
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_ENVIRONMENT", "staging");
29
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_DEBUG", "true");
30
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_RELEASE_ID", "release-123");
31
+ vi.stubEnv("NEXT_PUBLIC_INTERFERE_BUILD_ID", "build-456");
32
+ // Verify they're all accessible
33
+ expect(process.env.NEXT_PUBLIC_INTERFERE_SURFACE_ID).toBe("test-surface");
34
+ expect(process.env.NEXT_PUBLIC_INTERFERE_ENVIRONMENT).toBe("staging");
35
+ expect(process.env.NEXT_PUBLIC_INTERFERE_DEBUG).toBe("true");
36
+ expect(process.env.NEXT_PUBLIC_INTERFERE_RELEASE_ID).toBe("release-123");
37
+ expect(process.env.NEXT_PUBLIC_INTERFERE_BUILD_ID).toBe("build-456");
38
+ });
39
+ });
40
+ const EXPECTED_PARTS_LENGTH = 4;
41
+ const EXPECTED_PREFIX = "int";
42
+ const EXPECTED_SUFFIX = "sk";
43
+ function parseSurfaceIdFromSecretKey(secretKey) {
44
+ const parts = secretKey.split("_");
45
+ return parts.length === EXPECTED_PARTS_LENGTH &&
46
+ parts[0] === EXPECTED_PREFIX &&
47
+ parts[1] === EXPECTED_SUFFIX &&
48
+ parts[2] && // Ensure surface ID is not empty
49
+ parts[3] // Ensure suffix is not empty
50
+ ? parts[2]
51
+ : undefined;
52
+ }
53
+ describe("Configuration flow", () => {
54
+ beforeEach(() => {
55
+ vi.clearAllMocks();
56
+ });
57
+ afterEach(() => {
58
+ vi.resetAllMocks();
59
+ vi.unstubAllEnvs();
60
+ });
61
+ it("withInterfere should set public env vars from secret key", () => {
62
+ // This demonstrates the expected flow:
63
+ // 1. User sets INTERFERE_SECRET_KEY=int_sk_mysurface_abc123
64
+ // 2. withInterfere parses it and sets NEXT_PUBLIC_INTERFERE_SURFACE_ID=mysurface
65
+ // 3. InterfereProvider reads NEXT_PUBLIC_INTERFERE_SURFACE_ID
66
+ const secretKey = "int_sk_mysurface_abc123";
67
+ const expectedSurfaceId = "mysurface";
68
+ const surfaceId = parseSurfaceIdFromSecretKey(secretKey);
69
+ expect(surfaceId).toBe(expectedSurfaceId);
70
+ });
71
+ it("should handle invalid secret key format", () => {
72
+ const invalidKeys = [
73
+ "invalid-format",
74
+ "int_sk_", // Missing parts
75
+ "int_sk_surface", // Missing suffix
76
+ "sk_surface_suffix", // Wrong prefix
77
+ ];
78
+ for (const key of invalidKeys) {
79
+ const surfaceId = parseSurfaceIdFromSecretKey(key);
80
+ expect(surfaceId).toBeUndefined();
81
+ }
82
+ });
83
+ });
84
+ //# sourceMappingURL=provider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.test.js","sourceRoot":"","sources":["../../src/__tests__/provider.test.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,31 +1,6 @@
1
1
  /** biome-ignore-all lint/suspicious/noConsole: Not an internal package */
2
2
  import type { NextConfig } from "next";
3
3
  export type InterfereOptions = {
4
- /**
5
- * Your Interfere surface ID (optional if using secret key)
6
- * If not provided, will be extracted from the secret key
7
- */
8
- surface?: string;
9
- /**
10
- * API endpoint for uploading source maps
11
- * @default "https://api.interfere.com"
12
- */
13
- apiUrl?: string;
14
- /**
15
- * Secret key for authentication (required)
16
- * Format: int_sk_{surfaceId}_{random}
17
- *
18
- * SECURITY: Use INTERFERE_SECRET_KEY env var (without NEXT_PUBLIC_ prefix)
19
- * This ensures the key stays server-side only and is never exposed to the client bundle.
20
- *
21
- * @example
22
- * // ✅ CORRECT: Server-side only
23
- * INTERFERE_SECRET_KEY=int_sk_abc123_xyz789
24
- *
25
- * // ❌ WRONG: Would leak to client
26
- * NEXT_PUBLIC_INTERFERE_SECRET_KEY=int_sk_abc123_xyz789
27
- */
28
- secretKey?: string;
29
4
  /**
30
5
  * Environment name
31
6
  * @default "production"
@@ -36,26 +11,30 @@ export type InterfereOptions = {
36
11
  * @default false
37
12
  */
38
13
  debug?: boolean;
39
- /**
40
- * Disable source map upload (useful for development)
41
- * @default false
42
- */
43
- disabled?: boolean;
44
14
  };
45
15
  /**
46
16
  * Next.js configuration wrapper that automatically uploads source maps
47
17
  *
18
+ * SECURITY: Secret key must be set via INTERFERE_SECRET_KEY env var (without NEXT_PUBLIC_ prefix)
19
+ * Format: int_sk_{surfaceId}_{random}
20
+ *
48
21
  * @example
49
22
  * ```js
50
23
  * // next.config.js
51
24
  * const { withInterfere } = require('@interfere/next/build');
52
25
  *
26
+ * // Set in your .env file:
27
+ * // INTERFERE_SECRET_KEY=int_sk_abc123_xyz789
28
+ *
53
29
  * module.exports = withInterfere({
54
- * secretKey: process.env.INTERFERE_SECRET_KEY, // Contains surface ID
30
+ * // Optional: Override environment name
31
+ * environment: 'staging',
32
+ * // Optional: Enable debug logging
33
+ * debug: true
55
34
  * })({
56
35
  * // Your Next.js config
57
36
  * });
58
37
  * ```
59
38
  */
60
- export declare function withInterfere(options: InterfereOptions): (nextConfig?: NextConfig) => NextConfig;
39
+ export declare function withInterfere(options?: InterfereOptions): (nextConfig?: NextConfig) => NextConfig;
61
40
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAO1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AASvC,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAoTF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,IAC7C,aAAY,UAAe,KAAG,UAAU,CAqEjD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAO1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AASvC,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAmUF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,gBAAqB,IAClD,aAAY,UAAe,KAAG,UAAU,CA6EjD"}
package/dist/config.js CHANGED
@@ -75,10 +75,10 @@ const NEXT_REGEX = /^\.next\//;
75
75
  /**
76
76
  * Upload source maps in chunks
77
77
  */
78
- async function uploadSourceMapsChunk(sourceMaps, options, releaseInfo) {
78
+ async function uploadSourceMapsChunk(sourceMaps, config, releaseInfo) {
79
79
  const form = new FormData();
80
80
  // Add release metadata
81
- form.append("surfaceId", options.surface);
81
+ form.append("surfaceId", config.surface);
82
82
  form.append("buildId", releaseInfo.buildId);
83
83
  form.append("releaseId", releaseInfo.releaseId);
84
84
  form.append("environment", releaseInfo.environment);
@@ -100,11 +100,11 @@ async function uploadSourceMapsChunk(sourceMaps, options, releaseInfo) {
100
100
  contentType: "application/json",
101
101
  });
102
102
  }
103
- const response = await fetch(`${options.apiUrl}/internal/releases`, {
103
+ const response = await fetch("https://api.interfere.com/internal/releases", {
104
104
  method: "POST",
105
105
  body: form,
106
106
  headers: {
107
- Authorization: `Bearer ${options.secretKey}`,
107
+ Authorization: `Bearer ${config.secretKey}`,
108
108
  },
109
109
  signal: AbortSignal.timeout(API_TIMEOUT_MS),
110
110
  });
@@ -116,7 +116,7 @@ async function uploadSourceMapsChunk(sourceMaps, options, releaseInfo) {
116
116
  /**
117
117
  * Upload all source maps for a release
118
118
  */
119
- async function uploadSourceMaps(options) {
119
+ async function uploadSourceMaps(config) {
120
120
  const buildId = getGitSha();
121
121
  if (!buildId) {
122
122
  console.warn("[Interfere] Could not determine Git SHA, skipping source map upload");
@@ -124,12 +124,12 @@ async function uploadSourceMaps(options) {
124
124
  }
125
125
  const releaseId = getVercelDeploymentId() || buildId;
126
126
  const HINT_LENGTH = 4;
127
- if (options.debug) {
127
+ if (config.debug) {
128
128
  console.log("[Interfere] Starting source map upload");
129
129
  console.log(` Build ID: ${buildId}`);
130
130
  console.log(` Release ID: ${releaseId}`);
131
- console.log(` Environment: ${options.environment}`);
132
- console.log(` Secret Key: ***${options.secretKey.slice(-HINT_LENGTH)}`);
131
+ console.log(` Environment: ${config.environment}`);
132
+ console.log(` Secret Key: ***${config.secretKey.slice(-HINT_LENGTH)}`);
133
133
  }
134
134
  // Find all source map files
135
135
  const sourceMapFiles = await glob(SOURCE_MAP_GLOB, {
@@ -137,7 +137,7 @@ async function uploadSourceMaps(options) {
137
137
  absolute: false,
138
138
  });
139
139
  if (sourceMapFiles.length === 0) {
140
- if (options.debug) {
140
+ if (config.debug) {
141
141
  console.log("[Interfere] No source maps found to upload");
142
142
  }
143
143
  return;
@@ -147,7 +147,7 @@ async function uploadSourceMaps(options) {
147
147
  const releaseInfo = {
148
148
  buildId,
149
149
  releaseId,
150
- environment: options.environment,
150
+ environment: config.environment,
151
151
  branch: getGitBranch(),
152
152
  commitMessage: getCommitMessage(),
153
153
  deployUrl: getDeployUrl(),
@@ -167,11 +167,11 @@ async function uploadSourceMaps(options) {
167
167
  const chunk = sourceMaps.slice(i, i + CHUNK_SIZE);
168
168
  const chunkNumber = Math.floor(i / CHUNK_SIZE) + 1;
169
169
  const totalChunks = Math.ceil(sourceMaps.length / CHUNK_SIZE);
170
- if (options.debug) {
170
+ if (config.debug) {
171
171
  console.log(`[Interfere] Uploading chunk ${chunkNumber}/${totalChunks}`);
172
172
  }
173
173
  try {
174
- await uploadSourceMapsChunk(chunk, options, releaseInfo);
174
+ await uploadSourceMapsChunk(chunk, config, releaseInfo);
175
175
  }
176
176
  catch (error) {
177
177
  console.error(`[Interfere] Failed to upload chunk ${chunkNumber}:`, error);
@@ -209,56 +209,73 @@ function preflightChecks(options) {
209
209
  throw new Error("[Interfere] Security Error: withInterfere requires Node.js environment. " +
210
210
  "It should only run during build time, not in the browser.");
211
211
  }
212
- // Get secret key from options or environment
213
- const secretKey = options.secretKey || process.env.INTERFERE_SECRET_KEY || "";
212
+ // Get secret key from environment (only source now)
213
+ const secretKey = process.env.INTERFERE_SECRET_KEY || "";
214
214
  // Validate secret key format to catch common mistakes
215
215
  if (secretKey?.startsWith("NEXT_PUBLIC_")) {
216
216
  throw new Error("[Interfere] Security Error: Secret key should NOT use NEXT_PUBLIC_ prefix. " +
217
217
  "Use INTERFERE_SECRET_KEY instead to keep it server-side only.");
218
218
  }
219
- // Determine surface ID
220
- let surfaceId = options.surface;
221
- if (!surfaceId && secretKey) {
219
+ // Parse surface ID from secret key
220
+ let surfaceId;
221
+ if (secretKey) {
222
222
  surfaceId = parseSurfaceIdFromSecretKey(secretKey);
223
223
  }
224
- // Validate required options
225
- if (!surfaceId) {
226
- throw new Error("[Interfere] Could not determine surface ID. Either provide 'surface' option or use a secret key with format: int_sk_{surfaceId}_{random}");
224
+ // Check if we have a valid setup
225
+ const hasValidSetup = secretKey && surfaceId;
226
+ // Log appropriate warning
227
+ if (!secretKey) {
228
+ console.warn("[Interfere] No secret key found. Set INTERFERE_SECRET_KEY environment variable to enable source map uploads.");
227
229
  }
228
- // Fill in defaults
229
- const fullOptions = {
230
+ else if (!surfaceId) {
231
+ console.warn("[Interfere] Invalid secret key format. Expected format: int_sk_{surfaceId}_{random}");
232
+ }
233
+ // Return disabled state if setup is invalid
234
+ if (!hasValidSetup) {
235
+ return {
236
+ enabled: false,
237
+ surface: "",
238
+ secretKey: "",
239
+ environment: options.environment || process.env.NODE_ENV || "production",
240
+ debug: options.debug ?? false,
241
+ };
242
+ }
243
+ // At this point, both secretKey and surfaceId are guaranteed to be strings
244
+ return {
245
+ enabled: true,
230
246
  surface: surfaceId,
231
- apiUrl: options.apiUrl || "https://api.interfere.com",
232
247
  secretKey,
233
248
  environment: options.environment || process.env.NODE_ENV || "production",
234
249
  debug: options.debug ?? false,
235
- disabled: options.disabled ?? false,
236
250
  };
237
- // Check for secret key
238
- if (!(fullOptions.secretKey || fullOptions.disabled)) {
239
- console.warn("[Interfere] No secret key provided. Set INTERFERE_SECRET_KEY environment variable or pass secretKey option");
240
- fullOptions.disabled = true;
241
- }
242
- return { fullOptions };
243
251
  }
244
252
  /**
245
253
  * Next.js configuration wrapper that automatically uploads source maps
246
254
  *
255
+ * SECURITY: Secret key must be set via INTERFERE_SECRET_KEY env var (without NEXT_PUBLIC_ prefix)
256
+ * Format: int_sk_{surfaceId}_{random}
257
+ *
247
258
  * @example
248
259
  * ```js
249
260
  * // next.config.js
250
261
  * const { withInterfere } = require('@interfere/next/build');
251
262
  *
263
+ * // Set in your .env file:
264
+ * // INTERFERE_SECRET_KEY=int_sk_abc123_xyz789
265
+ *
252
266
  * module.exports = withInterfere({
253
- * secretKey: process.env.INTERFERE_SECRET_KEY, // Contains surface ID
267
+ * // Optional: Override environment name
268
+ * environment: 'staging',
269
+ * // Optional: Enable debug logging
270
+ * debug: true
254
271
  * })({
255
272
  * // Your Next.js config
256
273
  * });
257
274
  * ```
258
275
  */
259
- export function withInterfere(options) {
276
+ export function withInterfere(options = {}) {
260
277
  return (nextConfig = {}) => {
261
- const { fullOptions } = preflightChecks(options);
278
+ const interfereConfig = preflightChecks(options);
262
279
  return {
263
280
  ...nextConfig,
264
281
  // Enable source maps in production
@@ -280,14 +297,19 @@ export function withInterfere(options) {
280
297
  config.plugins = [];
281
298
  }
282
299
  // Add plugin to upload source maps after build
283
- if (!fullOptions.disabled) {
300
+ if (interfereConfig.enabled) {
284
301
  config.plugins.push({
285
302
  apply: (compiler) => {
286
303
  compiler.hooks.afterEmit.tapPromise("InterfereSourceMapUpload", async () => {
287
304
  try {
288
305
  // Set build ID in environment for upload
289
306
  process.env.NEXT_BUILD_ID = buildId;
290
- await uploadSourceMaps(fullOptions);
307
+ await uploadSourceMaps({
308
+ surface: interfereConfig.surface,
309
+ secretKey: interfereConfig.secretKey,
310
+ environment: interfereConfig.environment,
311
+ debug: interfereConfig.debug,
312
+ });
291
313
  }
292
314
  catch (error) {
293
315
  console.error("[Interfere] Failed to upload source maps:", error);
@@ -305,8 +327,11 @@ export function withInterfere(options) {
305
327
  // Only set public variables that are safe to expose
306
328
  env: {
307
329
  ...nextConfig.env,
330
+ NEXT_PUBLIC_INTERFERE_SURFACE_ID: interfereConfig.surface || "",
308
331
  NEXT_PUBLIC_INTERFERE_BUILD_ID: getGitSha() || "",
309
332
  NEXT_PUBLIC_INTERFERE_RELEASE_ID: getVercelDeploymentId() || getGitSha() || "",
333
+ NEXT_PUBLIC_INTERFERE_ENVIRONMENT: interfereConfig.environment || "",
334
+ NEXT_PUBLIC_INTERFERE_DEBUG: interfereConfig.debug ? "true" : "false",
310
335
  // DO NOT add INTERFERE_SECRET_KEY here - it would leak to client!
311
336
  },
312
337
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,29 @@
1
- import type { Config } from "@interfere/schemas/config";
2
- import type { SurfaceId } from "@interfere/schemas/surface";
3
1
  import { type ReactNode } from "react";
4
2
  import { capture, flush, getDebugInfo, getSessionId, getWindowId, resetSession } from "./client.js";
5
3
  export * from "./lib/core/error-handlers.js";
6
4
  type InterfereProviderProps = {
7
- surface: SurfaceId;
8
- options?: Partial<Config>;
9
5
  children: ReactNode;
10
6
  };
7
+ /**
8
+ * InterfereProvider automatically configures the SDK using environment variables
9
+ * set by withInterfere in your next.config.js
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * // app/layout.tsx
14
+ * export default function RootLayout({ children }) {
15
+ * return (
16
+ * <html>
17
+ * <body>
18
+ * <InterfereProvider>
19
+ * {children}
20
+ * </InterfereProvider>
21
+ * </body>
22
+ * </html>
23
+ * );
24
+ * }
25
+ * ```
26
+ */
11
27
  export declare function InterfereProvider(props: InterfereProviderProps): import("react").JSX.Element;
12
28
  export declare function useInterfere(): {
13
29
  capture: typeof capture;
@@ -17,4 +33,5 @@ export declare function useInterfere(): {
17
33
  getDebugInfo: typeof getDebugInfo;
18
34
  resetSession: typeof resetSession;
19
35
  };
36
+ export type { EventType } from "@interfere/schemas/envelope";
20
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAiB,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AAC7E,OAAO,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EAEX,YAAY,EACb,MAAM,aAAa,CAAC;AASrB,cAAc,8BAA8B,CAAC;AAW7C,KAAK,sBAAsB,GAAG;IAC5B,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,+BAoC9D;AAED,wBAAgB,YAAY;aApDjB,OAAO,OAAO;WAChB,OAAO,KAAK;kBACL,OAAO,YAAY;iBACpB,OAAO,WAAW;kBACjB,OAAO,YAAY;kBACnB,OAAO,YAAY;EAqDlC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AAC7E,OAAO,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EAEX,YAAY,EACb,MAAM,aAAa,CAAC;AASrB,cAAc,8BAA8B,CAAC;AAW7C,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,+BAwD9D;AAED,wBAAgB,YAAY;aA1FjB,OAAO,OAAO;WAChB,OAAO,KAAK;kBACL,OAAO,YAAY;iBACpB,OAAO,WAAW;kBACjB,OAAO,YAAY;kBACnB,OAAO,YAAY;EA2FlC;AAGD,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext, useEffect } from "react";
4
+ import { capture, flush, getDebugInfo, getSessionId, getWindowId, init, resetSession, } from "./client.js";
5
+ import { setupRageClick } from "./lib/session/rage-click.js";
6
+ import { setupReplay, stopReplay } from "./lib/session/replay.js";
7
+ import { setupSessionSummary, stopSessionSummary, } from "./lib/session/session-summary.js";
8
+ // biome-ignore lint/performance/noBarrelFile: There is a better way to do this
9
+ export * from "./lib/core/error-handlers.js";
10
+ const InterfereContext = createContext(null);
11
+ export function InterfereProvider(props) {
12
+ useEffect(() => {
13
+ init(props);
14
+ setupSessionSummary();
15
+ setupReplay();
16
+ setupRageClick();
17
+ return () => {
18
+ try {
19
+ stopSessionSummary();
20
+ }
21
+ catch {
22
+ /* no-op */
23
+ }
24
+ try {
25
+ stopReplay();
26
+ }
27
+ catch {
28
+ /* no-op */
29
+ }
30
+ flush();
31
+ };
32
+ }, [props]);
33
+ return (_jsx(InterfereContext.Provider, { value: {
34
+ capture,
35
+ flush,
36
+ getSessionId,
37
+ getWindowId,
38
+ getDebugInfo,
39
+ resetSession,
40
+ }, children: props.children }));
41
+ }
42
+ export function useInterfere() {
43
+ const context = useContext(InterfereContext);
44
+ if (!context) {
45
+ throw new Error("useInterfere() must be used within InterfereProvider");
46
+ }
47
+ return context;
48
+ }
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAKb,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAE1C,+EAA+E;AAC/E,cAAc,8BAA8B,CAAC;AAE7C,MAAM,gBAAgB,GAAG,aAAa,CAO5B,IAAI,CAAC,CAAC;AAQhB,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,mBAAmB,EAAE,CAAC;QACtB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;QAEjB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC;gBACH,kBAAkB,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;YACD,IAAI,CAAC;gBACH,UAAU,EAAE,CAAC;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,IACxB,KAAK,EAAE;YACL,OAAO;YACP,KAAK;YACL,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,YAAY;SACb,YAEA,KAAK,CAAC,QAAQ,GACW,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/index.jsx CHANGED
@@ -7,9 +7,46 @@ import { setupSessionSummary, stopSessionSummary, } from "./lib/session/session-
7
7
  // biome-ignore lint/performance/noBarrelFile: There is a better way to do this
8
8
  export * from "./lib/core/error-handlers.js";
9
9
  const InterfereContext = createContext(null);
10
+ /**
11
+ * InterfereProvider automatically configures the SDK using environment variables
12
+ * set by withInterfere in your next.config.js
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * // app/layout.tsx
17
+ * export default function RootLayout({ children }) {
18
+ * return (
19
+ * <html>
20
+ * <body>
21
+ * <InterfereProvider>
22
+ * {children}
23
+ * </InterfereProvider>
24
+ * </body>
25
+ * </html>
26
+ * );
27
+ * }
28
+ * ```
29
+ */
10
30
  export function InterfereProvider(props) {
11
31
  useEffect(() => {
12
- init(props);
32
+ // Read configuration from environment variables set by withInterfere
33
+ const surface = process.env.NEXT_PUBLIC_INTERFERE_SURFACE_ID;
34
+ if (!surface) {
35
+ // Silently skip initialization if no surface ID is configured
36
+ // This happens when withInterfere is not set up in next.config.js
37
+ return;
38
+ }
39
+ const config = {
40
+ surface,
41
+ options: {
42
+ env: (process.env.NEXT_PUBLIC_INTERFERE_ENVIRONMENT ||
43
+ "production"),
44
+ debug: process.env.NEXT_PUBLIC_INTERFERE_DEBUG === "true",
45
+ releaseId: process.env.NEXT_PUBLIC_INTERFERE_RELEASE_ID || undefined,
46
+ buildId: process.env.NEXT_PUBLIC_INTERFERE_BUILD_ID || undefined,
47
+ },
48
+ };
49
+ init(config);
13
50
  setupSessionSummary();
14
51
  setupReplay();
15
52
  setupRageClick();
@@ -28,7 +65,7 @@ export function InterfereProvider(props) {
28
65
  }
29
66
  flush();
30
67
  };
31
- }, [props]);
68
+ }, []);
32
69
  return (<InterfereContext.Provider value={{
33
70
  capture,
34
71
  flush,
@@ -1 +1 @@
1
- {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAKb,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAE1C,+EAA+E;AAC/E,cAAc,8BAA8B,CAAC;AAE7C,MAAM,gBAAgB,GAAG,aAAa,CAO5B,IAAI,CAAC,CAAC;AAQhB,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,mBAAmB,EAAE,CAAC;QACtB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;QAEjB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC;gBACH,kBAAkB,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;YACD,IAAI,CAAC;gBACH,UAAU,EAAE,CAAC;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CACL,CAAC,gBAAgB,CAAC,QAAQ,CACxB,KAAK,CAAC,CAAC;YACL,OAAO;YACP,KAAK;YACL,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,YAAY;SACb,CAAC,CAEF;MAAA,CAAC,KAAK,CAAC,QAAQ,CACjB;IAAA,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAE1C,+EAA+E;AAC/E,cAAc,8BAA8B,CAAC;AAE7C,MAAM,gBAAgB,GAAG,aAAa,CAO5B,IAAI,CAAC,CAAC;AAMhB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,SAAS,CAAC,GAAG,EAAE;QACb,qEAAqE;QACrE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;QAE7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,8DAA8D;YAC9D,kEAAkE;YAClE,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG;YACb,OAAO;YACP,OAAO,EAAE;gBACP,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC;oBACjD,YAAY,CAAQ;gBACtB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,MAAM;gBACzD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,SAAS;gBACpE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,SAAS;aACjE;SACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,CAAC;QACb,mBAAmB,EAAE,CAAC;QACtB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;QAEjB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC;gBACH,kBAAkB,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;YACD,IAAI,CAAC;gBACH,UAAU,EAAE,CAAC;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,CAAC,gBAAgB,CAAC,QAAQ,CACxB,KAAK,CAAC,CAAC;YACL,OAAO;YACP,KAAK;YACL,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,YAAY;SACb,CAAC,CAEF;MAAA,CAAC,KAAK,CAAC,QAAQ,CACjB;IAAA,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@interfere/next",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "license": "MIT",
5
5
  "description": "Build apps that never break.",
6
6
  "keywords": [