@nextscope/next 0.2.1 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"inspector-assets.js","sourceRoot":"","sources":["../src/inspector-assets.ts"],"names":[],"mappings":";;;AAAA,mEAAmE;AACtD,QAAA,YAAY,GAAG,0wvCAA0wvC,CAAA;AACzxvC,QAAA,WAAW,GAAG,k8/PAAk8/P,CAAA"}
1
+ {"version":3,"file":"inspector-assets.js","sourceRoot":"","sources":["../src/inspector-assets.ts"],"names":[],"mappings":";;;AAAA,mEAAmE;AACtD,QAAA,YAAY,GAAG,i1yCAAi1yC,CAAA;AACh2yC,QAAA,WAAW,GAAG,u7pQAAu7pQ,CAAA"}
package/dist/mcp.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleMcpRequest = handleMcpRequest;
4
4
  const mcp_1 = require("@nextscope/mcp");
5
+ const node_crypto_1 = require("node:crypto");
5
6
  const store_1 = require("./store");
6
7
  async function handleMcpRequest(request, response, options) {
7
8
  await (0, mcp_1.handleNextScopeMcpRequest)(request, response, createTraceStoreAdapter(options));
@@ -9,6 +10,21 @@ async function handleMcpRequest(request, response, options) {
9
10
  function createTraceStoreAdapter(options) {
10
11
  return {
11
12
  getStatus: () => options.getStatus(),
13
+ listServers: () => {
14
+ const status = options.getStatus();
15
+ return {
16
+ servers: [{
17
+ serverId: serverIdFromProjectRoot(String(status.projectRoot ?? process.cwd())),
18
+ projectRoot: String(status.projectRoot ?? process.cwd()),
19
+ packageName: typeof status.packageName === 'string' ? status.packageName : undefined,
20
+ route: typeof status.route === 'string' ? status.route : undefined,
21
+ devOrigin: typeof status.devOrigin === 'string' ? status.devOrigin : undefined,
22
+ traceCount: typeof status.traceCount === 'number' ? status.traceCount : undefined,
23
+ lastIngestAt: typeof status.lastIngestAt === 'string' ? status.lastIngestAt : undefined,
24
+ lastError: typeof status.lastError === 'string' ? status.lastError : undefined,
25
+ }],
26
+ };
27
+ },
12
28
  listTraces: (args) => options.store.listTraceSummariesPage({
13
29
  limit: args.limit,
14
30
  cursor: args.cursor,
@@ -52,6 +68,9 @@ function createTraceStoreAdapter(options) {
52
68
  clearTraces: () => options.clearTraces(),
53
69
  };
54
70
  }
71
+ function serverIdFromProjectRoot(projectRoot) {
72
+ return `ns_${(0, node_crypto_1.createHash)('sha256').update(projectRoot).digest('base64url').slice(0, 8)}`;
73
+ }
55
74
  function requireTrace(store, traceId) {
56
75
  const trace = store.getTrace(traceId);
57
76
  if (!trace) {
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":";;AAgBA,4CAMC;AAtBD,wCAGuB;AAEvB,mCAGgB;AAQT,KAAK,UAAU,gBAAgB,CACpC,OAAwB,EACxB,QAAwB,EACxB,OAA4B;IAE5B,MAAM,IAAA,+BAAyB,EAAC,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAA;AACtF,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA4B;IAC3D,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE;QACpC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CACnB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI;SACX,CAAC;QACJ,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;QAC7D,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;YAClB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAA;YACF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;YACrD,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACjB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAChE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;YACrD,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAA;QACzC,CAAC;QACD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;QACJ,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;YACpB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YACvD,OAAO;gBACL,KAAK,EAAE;oBACL,GAAG,KAAK;oBACR,KAAK,EAAE,SAAS;iBACjB;gBACD,KAAK,EAAE,IAAA,yBAAiB,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;aAChF,CAAA;QACH,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;KACzC,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB,EAAE,OAAe;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export type NextConfig = object & {
2
2
  rewrites?: () => Promise<Rewrites> | Rewrites;
3
+ env?: Record<string, string | undefined>;
3
4
  };
4
5
  export type Rewrites = Rewrite[] | RewriteGroups;
5
6
  export interface Rewrite {
package/dist/pids.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export interface SidecarOwnerClaim {
2
+ release(): void;
3
+ }
4
+ interface SidecarOwnerClaimOptions {
5
+ cwd?: string;
6
+ pid?: number;
7
+ isPidAlive?: (pid: number) => boolean;
8
+ }
9
+ export declare function claimDevServerPidfile(): boolean;
10
+ export declare function claimSidecarOwner(options?: SidecarOwnerClaimOptions): SidecarOwnerClaim | undefined;
11
+ export declare function cleanupDevServerPidfilesForTests(): void;
12
+ export declare function cleanupSidecarOwnerForTests(cwd?: string): void;
13
+ export {};
package/dist/pids.js ADDED
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.claimDevServerPidfile = claimDevServerPidfile;
4
+ exports.claimSidecarOwner = claimSidecarOwner;
5
+ exports.cleanupDevServerPidfilesForTests = cleanupDevServerPidfilesForTests;
6
+ exports.cleanupSidecarOwnerForTests = cleanupSidecarOwnerForTests;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_os_1 = require("node:os");
10
+ const node_path_1 = require("node:path");
11
+ const DEV_SERVER_PID_DIR = (0, node_path_1.join)((0, node_os_1.tmpdir)(), 'nextscope');
12
+ const DEV_SERVER_PID_PREFIX = 'dev-server-';
13
+ const DEV_SERVER_PID_MAX_AGE_MS = 24 * 60 * 60 * 1000;
14
+ const SIDECAR_OWNER_PREFIX = 'sidecar-owner-';
15
+ function claimDevServerPidfile() {
16
+ try {
17
+ (0, node_fs_1.mkdirSync)(DEV_SERVER_PID_DIR, { recursive: true });
18
+ pruneStaleDevServerPidfiles();
19
+ (0, node_fs_1.writeFileSync)(devServerPidfilePath(), String(process.pid), { flag: 'wx' });
20
+ return true;
21
+ }
22
+ catch (error) {
23
+ return error.code !== 'EEXIST';
24
+ }
25
+ }
26
+ function claimSidecarOwner(options = {}) {
27
+ const pid = options.pid ?? process.pid;
28
+ const pidfile = sidecarOwnerPidfilePath(options.cwd);
29
+ const isPidAlive = options.isPidAlive ?? isProcessAlive;
30
+ try {
31
+ (0, node_fs_1.mkdirSync)(DEV_SERVER_PID_DIR, { recursive: true });
32
+ try {
33
+ (0, node_fs_1.writeFileSync)(pidfile, String(pid), { flag: 'wx' });
34
+ return createSidecarOwnerClaim(pidfile, pid);
35
+ }
36
+ catch (error) {
37
+ if (error.code !== 'EEXIST') {
38
+ return undefined;
39
+ }
40
+ }
41
+ const currentOwnerPid = readPidfile(pidfile);
42
+ if (currentOwnerPid !== undefined && isPidAlive(currentOwnerPid)) {
43
+ return undefined;
44
+ }
45
+ (0, node_fs_1.rmSync)(pidfile, { force: true });
46
+ (0, node_fs_1.writeFileSync)(pidfile, String(pid), { flag: 'wx' });
47
+ return createSidecarOwnerClaim(pidfile, pid);
48
+ }
49
+ catch {
50
+ return undefined;
51
+ }
52
+ }
53
+ function cleanupDevServerPidfilesForTests() {
54
+ (0, node_fs_1.rmSync)(devServerPidfilePath(), { force: true });
55
+ (0, node_fs_1.rmSync)(sidecarOwnerPidfilePath(), { force: true });
56
+ }
57
+ function cleanupSidecarOwnerForTests(cwd = process.cwd()) {
58
+ (0, node_fs_1.rmSync)(sidecarOwnerPidfilePath(cwd), { force: true });
59
+ }
60
+ function pruneStaleDevServerPidfiles(now = Date.now()) {
61
+ try {
62
+ for (const entry of (0, node_fs_1.readdirSync)(DEV_SERVER_PID_DIR)) {
63
+ if (!entry.startsWith(DEV_SERVER_PID_PREFIX)) {
64
+ continue;
65
+ }
66
+ const pidfile = (0, node_path_1.join)(DEV_SERVER_PID_DIR, entry);
67
+ try {
68
+ const stats = (0, node_fs_1.statSync)(pidfile);
69
+ if (now - stats.mtimeMs > DEV_SERVER_PID_MAX_AGE_MS) {
70
+ (0, node_fs_1.rmSync)(pidfile, { force: true });
71
+ }
72
+ }
73
+ catch {
74
+ // Ignore races with another process creating or removing pidfiles.
75
+ }
76
+ }
77
+ }
78
+ catch {
79
+ // Startup reporting should not depend on being able to prune old pidfiles.
80
+ }
81
+ }
82
+ function devServerPidfilePath() {
83
+ return (0, node_path_1.join)(DEV_SERVER_PID_DIR, `${DEV_SERVER_PID_PREFIX}${process.ppid}-${projectCwdHash()}`);
84
+ }
85
+ function sidecarOwnerPidfilePath(cwd = process.cwd()) {
86
+ return (0, node_path_1.join)(DEV_SERVER_PID_DIR, `${SIDECAR_OWNER_PREFIX}${projectCwdHash(cwd)}`);
87
+ }
88
+ function projectCwdHash(cwd = process.cwd()) {
89
+ return (0, node_crypto_1.createHash)('sha1').update(cwd).digest('hex');
90
+ }
91
+ function readPidfile(pidfile) {
92
+ const value = Number((0, node_fs_1.readFileSync)(pidfile, 'utf8').trim());
93
+ return Number.isInteger(value) && value > 0 ? value : undefined;
94
+ }
95
+ function isProcessAlive(pid) {
96
+ try {
97
+ process.kill(pid, 0);
98
+ return true;
99
+ }
100
+ catch (error) {
101
+ return error.code === 'EPERM';
102
+ }
103
+ }
104
+ function createSidecarOwnerClaim(pidfile, pid) {
105
+ let released = false;
106
+ return {
107
+ release() {
108
+ if (released) {
109
+ return;
110
+ }
111
+ released = true;
112
+ try {
113
+ if (readPidfile(pidfile) === pid) {
114
+ (0, node_fs_1.rmSync)(pidfile, { force: true });
115
+ }
116
+ }
117
+ catch {
118
+ // Ignore races with another process or test cleanup removing the claim.
119
+ }
120
+ },
121
+ };
122
+ }
123
+ //# sourceMappingURL=pids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pids.js","sourceRoot":"","sources":["../src/pids.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -4,6 +4,7 @@ export interface NextScopeServerOptions {
4
4
  maxTraces: number;
5
5
  persistence?: boolean;
6
6
  persistenceDirectory?: string;
7
+ devOrigin?: string;
7
8
  }
8
9
  export interface NextScopeServer {
9
10
  route: string;
package/dist/server.js CHANGED
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.startNextScopeServer = startNextScopeServer;
4
4
  const node_http_1 = require("node:http");
5
+ const promises_1 = require("node:fs/promises");
6
+ const node_path_1 = require("node:path");
5
7
  const forwarder_1 = require("./forwarder");
6
8
  const mcp_1 = require("./mcp");
7
9
  const otel_1 = require("./otel");
@@ -19,7 +21,12 @@ async function startNextScopeServer(options) {
19
21
  maxTraces: options.maxTraces,
20
22
  });
21
23
  await persistence.loadInto(store);
22
- const sidecarStatus = new SidecarStatus(options.route);
24
+ const sidecarStatus = new SidecarStatus({
25
+ route: options.route,
26
+ projectRoot: process.cwd(),
27
+ packageName: await readPackageName(process.cwd()),
28
+ devOrigin: options.devOrigin,
29
+ });
23
30
  let sidecarUrl = '';
24
31
  const server = (0, node_http_1.createServer)(async (request, response) => {
25
32
  try {
@@ -46,6 +53,7 @@ async function startNextScopeServer(options) {
46
53
  const address = server.address();
47
54
  const url = `http://127.0.0.1:${address.port}`;
48
55
  sidecarUrl = url;
56
+ sidecarStatus.setSidecarUrl(url);
49
57
  return {
50
58
  route: options.route,
51
59
  url,
@@ -175,11 +183,15 @@ class HttpError extends Error {
175
183
  }
176
184
  }
177
185
  class SidecarStatus {
178
- route;
186
+ options;
179
187
  suppressedCount = 0;
180
188
  lastParseError;
181
- constructor(route) {
182
- this.route = route;
189
+ sidecarUrl;
190
+ constructor(options) {
191
+ this.options = options;
192
+ }
193
+ setSidecarUrl(url) {
194
+ this.sidecarUrl = url;
183
195
  }
184
196
  recordIngest(suppressedCount) {
185
197
  this.suppressedCount += suppressedCount;
@@ -192,8 +204,14 @@ class SidecarStatus {
192
204
  const storeStats = store.getStats();
193
205
  const forwarding = forwarder.getStatus();
194
206
  const persistenceStatus = persistence.snapshot();
207
+ const inspectorUrl = this.formatInspectorUrl();
195
208
  return {
196
- route: this.route,
209
+ projectRoot: this.options.projectRoot,
210
+ packageName: this.options.packageName,
211
+ route: this.options.route,
212
+ devOrigin: this.options.devOrigin,
213
+ inspectorUrl,
214
+ mcpUrl: `${inspectorUrl}/mcp`,
197
215
  traceCount: storeStats.traceCount,
198
216
  lastIngestAt: storeStats.lastIngestAt,
199
217
  suppressedCount: this.suppressedCount,
@@ -205,5 +223,20 @@ class SidecarStatus {
205
223
  lastError: this.lastParseError ?? forwarding.lastError ?? persistenceStatus.lastError,
206
224
  };
207
225
  }
226
+ formatInspectorUrl() {
227
+ if (this.options.devOrigin) {
228
+ return `${this.options.devOrigin}${this.options.route}`;
229
+ }
230
+ return this.sidecarUrl ?? '';
231
+ }
232
+ }
233
+ async function readPackageName(projectRoot) {
234
+ try {
235
+ const packageJson = JSON.parse(await (0, promises_1.readFile)((0, node_path_1.join)(projectRoot, 'package.json'), 'utf8'));
236
+ return typeof packageJson.name === 'string' && packageJson.name.length ? packageJson.name : undefined;
237
+ }
238
+ catch {
239
+ return undefined;
240
+ }
208
241
  }
209
242
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -2,6 +2,7 @@ import type { NormalizedSpan } from './otel';
2
2
  export interface TraceSummary {
3
3
  traceId: string;
4
4
  requestSegmentId: string;
5
+ traceKind: TraceKind;
5
6
  revision: number;
6
7
  updatedAt: string;
7
8
  spanCount: number;
@@ -13,6 +14,8 @@ export interface TraceSummary {
13
14
  durationMs: number;
14
15
  statusBucket: StatusBucket;
15
16
  requestKind: string;
17
+ browserKind?: BrowserEventKind;
18
+ originPage?: string;
16
19
  hasRsc: boolean;
17
20
  hasPrefetch: boolean;
18
21
  routeLabel: string;
@@ -33,10 +36,13 @@ export interface TraceDetail extends TraceSummary {
33
36
  }
34
37
  export interface RequestSegmentSummary {
35
38
  requestSegmentId: string;
39
+ traceKind: TraceKind;
36
40
  rootSpan: RequestSpanSummary;
37
41
  routeLabel: string;
38
42
  statusBucket: StatusBucket;
39
43
  requestKind: string;
44
+ browserKind?: BrowserEventKind;
45
+ originPage?: string;
40
46
  startOffsetMs: number;
41
47
  endOffsetMs: number;
42
48
  durationMs: number;
@@ -86,6 +92,8 @@ export interface RequestSpanSummary {
86
92
  durationMs: number;
87
93
  attributes?: Record<string, unknown>;
88
94
  }
95
+ export type TraceKind = 'browser-page-load' | 'server-request' | 'unknown';
96
+ export type BrowserEventKind = 'page-load' | 'fetch' | 'error' | 'unhandledrejection';
89
97
  export interface TraceSpanNode {
90
98
  spanId: string;
91
99
  parentSpanId?: string;
@@ -223,4 +231,5 @@ export declare function pickRequestRoot(spans: NormalizedSpan[]): NormalizedSpan
223
231
  export declare function isNoiseOnlyTrace(spans: NormalizedSpan[]): boolean;
224
232
  export declare function statusBucket(statusCode?: number): StatusBucket;
225
233
  export declare function routeLabel(summary: RequestSpanSummary): string;
234
+ export declare function browserEventKind(root: NormalizedSpan): BrowserEventKind | undefined;
226
235
  export {};
package/dist/store.js CHANGED
@@ -7,6 +7,7 @@ exports.pickRequestRoot = pickRequestRoot;
7
7
  exports.isNoiseOnlyTrace = isNoiseOnlyTrace;
8
8
  exports.statusBucket = statusBucket;
9
9
  exports.routeLabel = routeLabel;
10
+ exports.browserEventKind = browserEventKind;
10
11
  class TraceStore {
11
12
  maxTraces;
12
13
  traces = new Map();
@@ -261,6 +262,7 @@ function summarizeTrace(trace) {
261
262
  return segments.map((segment) => ({
262
263
  traceId: trace.traceId,
263
264
  requestSegmentId: segment.requestSegmentId,
265
+ traceKind: segment.traceKind,
264
266
  revision: trace.revision,
265
267
  updatedAt: new Date(trace.updatedAt).toISOString(),
266
268
  spanCount: segment.spanCount,
@@ -279,6 +281,8 @@ function summarizeTrace(trace) {
279
281
  },
280
282
  statusBucket: segment.statusBucket,
281
283
  requestKind: segment.requestKind,
284
+ browserKind: segment.browserKind,
285
+ originPage: segment.originPage,
282
286
  hasRsc: segmentSpans(spans, segment.requestSegmentId).some((span) => span.attributes['next.rsc'] === true),
283
287
  hasPrefetch: segmentSpans(spans, segment.requestSegmentId).some((span) => span.attributes['next.span_type'] === 'NextNodeServer.handleNextDataRequest' || span.attributes['next.rsc'] === true),
284
288
  routeLabel: segment.routeLabel,
@@ -427,19 +431,34 @@ function requestSegments(spans, traceStart) {
427
431
  const requestRoots = spans
428
432
  .filter((span) => span.attributes['next.span_type'] === 'BaseServer.handleRequest')
429
433
  .sort(compareByStartTime);
430
- const roots = requestRoots.length > 0 ? requestRoots : [pickRequestRoot(spans)];
434
+ const pageLoadRoot = pickBrowserPageLoadRoot(spans);
435
+ const roots = requestRoots.length > 0 ? requestRoots : [pageLoadRoot ?? pickRequestRoot(spans)];
431
436
  return roots.map((root) => {
432
437
  const spansInSegment = segmentSpans(spans, root.spanId).sort(compareByStartTime);
433
438
  const segmentStart = minBigInt(spansInSegment.map((span) => span.startTimeUnixNano));
434
439
  const segmentEnd = maxBigInt(spansInSegment.map((span) => span.endTimeUnixNano));
435
440
  const rootSummary = requestSpanSummary(root, true);
436
441
  const diagnostics = spanDiagnostics(spansInSegment, traceStart);
442
+ const browserKind = browserEventKind(root);
443
+ // A browser fetch names its span "HTTP GET" and stamps the fetched URL on
444
+ // `http.url`; the page it fired from lands in the route/target fields. Swap
445
+ // in the fetched pathname so the label, grouping, and search key off the
446
+ // request the developer actually made, not the page they were on.
447
+ const fetchPath = browserKind === 'fetch' ? fetchPathname(root) : undefined;
448
+ if (fetchPath) {
449
+ rootSummary.target = fetchPath;
450
+ }
437
451
  return {
438
452
  requestSegmentId: root.spanId,
453
+ traceKind: traceKind(root, spansInSegment),
439
454
  rootSpan: rootSummary,
440
- routeLabel: routeLabel(rootSummary),
455
+ routeLabel: fetchPath ?? routeLabel(rootSummary),
441
456
  statusBucket: statusBucket(rootSummary.statusCode),
442
457
  requestKind: requestKind(root),
458
+ browserKind,
459
+ // The page a browser event fired from — surfaced as a top-level field so
460
+ // the trace list (which ships without span attributes) can show it.
461
+ originPage: browserKind ? stringAttr(root.attributes, 'nextscope.page.path') : undefined,
443
462
  startOffsetMs: Number(segmentStart - traceStart) / 1_000_000,
444
463
  endOffsetMs: Number(segmentEnd - traceStart) / 1_000_000,
445
464
  durationMs: Number(segmentEnd - segmentStart) / 1_000_000,
@@ -555,8 +574,8 @@ function requestSpanSummary(span, includeAttributes = false) {
555
574
  return {
556
575
  spanId: span.spanId,
557
576
  name: span.name,
558
- route: stringAttr(span.attributes, 'next.route', 'http.route'),
559
- target: stringAttr(span.attributes, 'http.target', 'url.path'),
577
+ route: stringAttr(span.attributes, 'next.route', 'http.route', 'nextscope.page.path'),
578
+ target: stringAttr(span.attributes, 'http.target', 'url.path', 'nextscope.page.url'),
560
579
  method: stringAttr(span.attributes, 'http.method', 'http.request.method'),
561
580
  statusCode: numberAttr(span.attributes, 'http.status_code', 'http.response.status_code'),
562
581
  spanType: stringAttr(span.attributes, 'next.span_type'),
@@ -580,6 +599,8 @@ function routeLabel(summary) {
580
599
  return summary.route ?? summary.target ?? summary.name;
581
600
  }
582
601
  function requestKind(span) {
602
+ if (isBrowserPageLoadSpan(span))
603
+ return 'browser-page-load';
583
604
  const spanType = stringAttr(span.attributes, 'next.span_type');
584
605
  if (spanType === 'BaseServer.handleRequest')
585
606
  return 'page';
@@ -587,6 +608,61 @@ function requestKind(span) {
587
608
  return 'route-handler';
588
609
  return spanType ?? 'span';
589
610
  }
611
+ function traceKind(root, spans) {
612
+ if (isBrowserPageLoadSpan(root) || spans.some(isBrowserPageLoadSpan)) {
613
+ return 'browser-page-load';
614
+ }
615
+ if (root.attributes['next.span_type'] === 'BaseServer.handleRequest') {
616
+ return 'server-request';
617
+ }
618
+ return 'unknown';
619
+ }
620
+ function pickBrowserPageLoadRoot(spans) {
621
+ return spans
622
+ .filter(isBrowserPageLoadSpan)
623
+ .sort(compareByStartTime)[0];
624
+ }
625
+ function isBrowserPageLoadSpan(span) {
626
+ return (span.attributes['nextscope.browser.kind'] === 'page-load' ||
627
+ (serviceName(span) === 'nextscope-browser' && span.name === 'documentLoad'));
628
+ }
629
+ const BROWSER_EVENT_KINDS = new Set([
630
+ 'page-load',
631
+ 'fetch',
632
+ 'error',
633
+ 'unhandledrejection',
634
+ ]);
635
+ // Classify a browser-rooted span so the inspector can label it distinctly. The
636
+ // SDK stamps `nextscope.browser.kind` on every browser span; the fallbacks
637
+ // cover spans captured before that tag existed. Returns undefined for anything
638
+ // that isn't a browser event root (server spans, distributed server roots).
639
+ function browserEventKind(root) {
640
+ const tagged = root.attributes['nextscope.browser.kind'];
641
+ if (typeof tagged === 'string' && BROWSER_EVENT_KINDS.has(tagged)) {
642
+ return tagged;
643
+ }
644
+ if (isBrowserPageLoadSpan(root))
645
+ return 'page-load';
646
+ if (root.name === 'browser.error')
647
+ return 'error';
648
+ if (root.name === 'browser.unhandledrejection')
649
+ return 'unhandledrejection';
650
+ if (serviceName(root) === 'nextscope-browser' && stringAttr(root.attributes, 'http.url')) {
651
+ return 'fetch';
652
+ }
653
+ return undefined;
654
+ }
655
+ function fetchPathname(span) {
656
+ const url = stringAttr(span.attributes, 'http.url');
657
+ if (!url)
658
+ return undefined;
659
+ try {
660
+ return new URL(url).pathname;
661
+ }
662
+ catch {
663
+ return url.split(/[?#]/)[0] || undefined;
664
+ }
665
+ }
590
666
  function compareByStartTime(a, b) {
591
667
  if (a.startTimeUnixNano === b.startTimeUnixNano) {
592
668
  return a.spanId.localeCompare(b.spanId);