@sentry/nitro 10.53.1 → 10.55.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.
@@ -2,246 +2,181 @@ import { GLOBAL_OBJ, parseStringToURLObject, getHttpSpanDetailsFromUrlObject, st
2
2
  import { tracingChannel } from '@sentry/opentelemetry/tracing-channel';
3
3
  import { setServerTimingHeaders } from './setServerTimingHeaders.js';
4
4
 
5
- /**
6
- * Global object with the trace channels
7
- */
8
- const globalWithTraceChannels = GLOBAL_OBJ
9
-
10
- ;
11
-
12
- /**
13
- * Captures tracing events emitted by Nitro tracing channels.
14
- */
5
+ const globalWithTraceChannels = GLOBAL_OBJ;
15
6
  function captureTracingEvents() {
16
7
  if (globalWithTraceChannels.__SENTRY_NITRO_HTTP_CHANNELS_INSTRUMENTED__) {
17
8
  return;
18
9
  }
19
-
20
10
  setupH3TracingChannels();
21
11
  setupSrvxTracingChannels();
22
12
  globalWithTraceChannels.__SENTRY_NITRO_HTTP_CHANNELS_INSTRUMENTED__ = true;
23
13
  }
24
-
25
- /**
26
- * Extracts the HTTP status code from a tracing channel result.
27
- * The result is the return value of the traced handler, which is a Response for srvx
28
- * and may or may not be a Response for h3.
29
- */
30
14
  function getResponseStatusCode(result) {
31
- if (result && typeof result === 'object' && 'status' in result && typeof result.status === 'number') {
15
+ if (result && typeof result === "object" && "status" in result && typeof result.status === "number") {
32
16
  return result.status;
33
17
  }
34
- return undefined;
18
+ return void 0;
35
19
  }
36
-
37
20
  function onTraceEnd(data) {
38
21
  const statusCode = getResponseStatusCode(data.result);
39
- if (data._sentrySpan && statusCode !== undefined) {
22
+ if (data._sentrySpan && statusCode !== void 0) {
40
23
  setHttpStatus(data._sentrySpan, statusCode);
41
24
  }
42
-
43
25
  data._sentrySpan?.end();
44
26
  }
45
-
46
27
  function onTraceError(data) {
47
- captureException(data.error, { mechanism: { type: 'auto.http.nitro.onTraceError', handled: false } });
48
- data._sentrySpan?.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });
28
+ captureException(data.error, { mechanism: { type: "auto.http.nitro.onTraceError", handled: false } });
29
+ data._sentrySpan?.setStatus({ code: SPAN_STATUS_ERROR, message: "internal_error" });
49
30
  data._sentrySpan?.end();
50
31
  }
51
-
52
- /**
53
- * Extracts the parameterized route pattern from the h3 event context.
54
- */
55
32
  function getParameterizedRoute(event) {
56
33
  const matchedRoute = event.context?.matchedRoute;
57
34
  if (!matchedRoute) {
58
- return undefined;
35
+ return void 0;
59
36
  }
60
-
61
37
  const routePath = matchedRoute.route;
62
-
63
- // Skip catch-all routes as they're not useful for transaction grouping
64
- if (!routePath || routePath === '/**') {
65
- return undefined;
38
+ if (!routePath || routePath === "/**") {
39
+ return void 0;
66
40
  }
67
-
68
41
  return routePath;
69
42
  }
70
-
71
43
  function setupH3TracingChannels() {
72
- const h3Channel = tracingChannel('h3.request', data => {
44
+ const h3Channel = tracingChannel("h3.request", (data) => {
73
45
  const parsedUrl = parseStringToURLObject(data.event.url.href);
74
46
  const routePattern = getParameterizedRoute(data.event);
75
-
76
47
  const [spanName, urlAttributes] = getHttpSpanDetailsFromUrlObject(
77
48
  parsedUrl,
78
- 'server',
79
- 'auto.http.nitro.h3',
49
+ "server",
50
+ "auto.http.nitro.h3",
80
51
  { method: data.event.req.method },
81
- routePattern,
52
+ routePattern
82
53
  );
83
-
84
54
  return startSpanManual(
85
55
  {
86
56
  name: spanName,
87
57
  attributes: {
88
58
  ...urlAttributes,
89
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.nitro.h3',
90
- [SEMANTIC_ATTRIBUTE_SENTRY_OP]: data?.type === 'middleware' ? 'middleware.nitro' : 'http.server',
91
- },
59
+ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.nitro.h3",
60
+ [SEMANTIC_ATTRIBUTE_SENTRY_OP]: data?.type === "middleware" ? "middleware.nitro" : "http.server"
61
+ }
92
62
  },
93
- span => {
63
+ (span) => {
94
64
  setParameterizedRouteAttributes(span, data.event);
95
-
96
65
  return span;
97
- },
66
+ }
98
67
  );
99
68
  });
100
-
101
69
  h3Channel.subscribe({
102
70
  start: (data) => {
103
71
  setServerTimingHeaders(data.event);
104
72
  },
105
73
  asyncEnd: (data) => {
106
74
  onTraceEnd(data);
107
-
108
75
  if (!data._sentrySpan) {
109
76
  return;
110
77
  }
111
-
112
- // Update the root span (srvx transaction) with the parameterized route name.
113
- // The srvx span is created before h3 resolves the route, so it initially has the raw URL.
114
- // Note: data.type is always 'middleware' in asyncEnd regardless of handler type,
115
- // so we rely on getParameterizedRoute() to filter out catch-all routes instead.
116
78
  const rootSpan = getRootSpan(data._sentrySpan);
117
79
  if (rootSpan && rootSpan !== data._sentrySpan) {
118
80
  const routePattern = getParameterizedRoute(data.event);
119
81
  if (routePattern) {
120
- const method = data.event.req.method || 'GET';
82
+ const method = data.event.req.method || "GET";
121
83
  updateSpanName(rootSpan, `${method} ${routePattern}`);
122
84
  rootSpan.setAttributes({
123
- [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',
124
- 'http.route': routePattern,
85
+ [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "route",
86
+ "http.route": routePattern
125
87
  });
126
88
  }
127
89
  }
128
90
  },
129
- error: onTraceError,
91
+ error: onTraceError
130
92
  });
131
93
  }
132
-
133
94
  function setupSrvxTracingChannels() {
134
- // Store the parent span per-request so middleware and fetch share the same parent.
135
- // WeakMap ensures per-request isolation in concurrent environments and automatic cleanup.
136
- const requestParentSpans = new WeakMap();
137
-
138
- const fetchChannel = tracingChannel('srvx.request', data => {
139
- const parsedUrl = data.request._url ? parseStringToURLObject(data.request._url.href) : undefined;
140
- const [spanName, urlAttributes] = getHttpSpanDetailsFromUrlObject(parsedUrl, 'server', 'auto.http.nitro.srvx', {
141
- method: data.request.method,
95
+ const requestParentSpans = /* @__PURE__ */ new WeakMap();
96
+ const fetchChannel = tracingChannel("srvx.request", (data) => {
97
+ const parsedUrl = data.request._url ? parseStringToURLObject(data.request._url.href) : void 0;
98
+ const [spanName, urlAttributes] = getHttpSpanDetailsFromUrlObject(parsedUrl, "server", "auto.http.nitro.srvx", {
99
+ method: data.request.method
142
100
  });
143
-
144
101
  const sendDefaultPii = getClient()?.getOptions().sendDefaultPii ?? false;
145
102
  const headerAttributes = httpHeadersToSpanAttributes(
146
103
  Object.fromEntries(data.request.headers.entries()),
147
- sendDefaultPii,
104
+ sendDefaultPii
148
105
  );
149
-
150
106
  return startSpanManual(
151
107
  {
152
108
  name: spanName,
153
109
  attributes: {
154
110
  ...urlAttributes,
155
111
  ...headerAttributes,
156
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.nitro.srvx',
157
- [SEMANTIC_ATTRIBUTE_SENTRY_OP]: data.middleware ? 'middleware.nitro' : 'http.server',
158
- 'server.port': data.server.options.port,
112
+ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.nitro.srvx",
113
+ [SEMANTIC_ATTRIBUTE_SENTRY_OP]: data.middleware ? "middleware.nitro" : "http.server",
114
+ "server.port": data.server.options.port
159
115
  },
160
116
  // Use the same parent span as middleware to make them siblings
161
- parentSpan: requestParentSpans.get(data.request) || undefined,
117
+ parentSpan: requestParentSpans.get(data.request) || void 0
162
118
  },
163
- span => span,
119
+ (span) => span
164
120
  );
165
121
  });
166
-
167
- // Subscribe to events (span already created in bindStore)
168
122
  fetchChannel.subscribe({
169
- asyncEnd: data => {
123
+ asyncEnd: (data) => {
170
124
  onTraceEnd(data);
171
-
172
- // Clean up parent span reference after the fetch handler completes.
173
125
  requestParentSpans.delete(data.request);
174
126
  },
175
- error: data => {
127
+ error: (data) => {
176
128
  onTraceError(data);
177
- // Clean up parent span reference on error too
178
129
  requestParentSpans.delete(data.request);
179
- },
130
+ }
180
131
  });
181
-
182
- const middlewareChannel = tracingChannel('srvx.middleware', data => {
183
- // For the first middleware, capture the current parent span per-request
132
+ const middlewareChannel = tracingChannel("srvx.middleware", (data) => {
184
133
  if (data.middleware?.index === 0) {
185
134
  const activeSpan = getActiveSpan();
186
135
  if (activeSpan) {
187
136
  requestParentSpans.set(data.request, activeSpan);
188
137
  }
189
138
  }
190
-
191
- const parsedUrl = data.request._url ? parseStringToURLObject(data.request._url.href) : undefined;
192
- const [, urlAttributes] = getHttpSpanDetailsFromUrlObject(parsedUrl, 'server', 'auto.http.nitro.srvx', {
193
- method: data.request.method,
139
+ const parsedUrl = data.request._url ? parseStringToURLObject(data.request._url.href) : void 0;
140
+ const [, urlAttributes] = getHttpSpanDetailsFromUrlObject(parsedUrl, "server", "auto.http.nitro.srvx", {
141
+ method: data.request.method
194
142
  });
195
-
196
- // Create span as a child of the original parent, not the previous middleware
197
143
  return startSpanManual(
198
144
  {
199
- name: `${data.middleware?.handler.name ?? 'unknown'} - ${data.request.method} ${data.request._url?.pathname}`,
145
+ name: `${data.middleware?.handler.name ?? "unknown"} - ${data.request.method} ${data.request._url?.pathname}`,
200
146
  attributes: {
201
147
  ...urlAttributes,
202
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.nitro.srvx',
203
- [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware.nitro',
148
+ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.nitro.srvx",
149
+ [SEMANTIC_ATTRIBUTE_SENTRY_OP]: "middleware.nitro"
204
150
  },
205
- parentSpan: requestParentSpans.get(data.request) || undefined,
151
+ parentSpan: requestParentSpans.get(data.request) || void 0
206
152
  },
207
- span => span,
153
+ (span) => span
208
154
  );
209
155
  });
210
-
211
- // Subscribe to events (span already created in bindStore)
212
156
  middlewareChannel.subscribe({
213
157
  asyncEnd: onTraceEnd,
214
- error: onTraceError,
158
+ error: onTraceError
215
159
  });
216
160
  }
217
-
218
- /**
219
- * Sets the parameterized route attributes on the span.
220
- */
221
161
  function setParameterizedRouteAttributes(span, event) {
222
162
  const rootSpan = getRootSpan(span);
223
163
  if (!rootSpan) {
224
164
  return;
225
165
  }
226
-
227
166
  const matchedRoutePath = getParameterizedRoute(event);
228
167
  if (!matchedRoutePath) {
229
168
  return;
230
169
  }
231
-
232
170
  rootSpan.setAttributes({
233
- [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',
234
- 'http.route': matchedRoutePath,
171
+ [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "route",
172
+ "http.route": matchedRoutePath
235
173
  });
236
-
237
174
  const params = event.context?.params;
238
-
239
- if (params && typeof params === 'object') {
175
+ if (params && typeof params === "object") {
240
176
  Object.entries(params).forEach(([key, value]) => {
241
- // Based on this convention: https://getsentry.github.io/sentry-conventions/generated/attributes/url.html#urlpathparameterkey
242
177
  rootSpan.setAttributes({
243
178
  [`url.path.parameter.${key}`]: String(value),
244
- [`params.${key}`]: String(value),
179
+ [`params.${key}`]: String(value)
245
180
  });
246
181
  });
247
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"captureTracingEvents.js","sources":["../../../../src/runtime/hooks/captureTracingEvents.ts"],"sourcesContent":["import {\n captureException,\n getActiveSpan,\n getClient,\n getHttpSpanDetailsFromUrlObject,\n getRootSpan,\n GLOBAL_OBJ,\n httpHeadersToSpanAttributes,\n parseStringToURLObject,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n setHttpStatus,\n type Span,\n SPAN_STATUS_ERROR,\n startSpanManual,\n updateSpanName,\n} from '@sentry/core';\nimport { tracingChannel, type TracingChannelContextWithSpan } from '@sentry/opentelemetry/tracing-channel';\nimport type { TracingRequestEvent as H3TracingRequestEvent } from 'h3/tracing';\nimport type { RequestEvent as SrvxRequestEvent } from 'srvx/tracing';\nimport { setServerTimingHeaders } from './setServerTimingHeaders';\n\n/**\n * Global object with the trace channels\n */\nconst globalWithTraceChannels = GLOBAL_OBJ as typeof GLOBAL_OBJ & {\n __SENTRY_NITRO_HTTP_CHANNELS_INSTRUMENTED__: boolean;\n};\n\n/**\n * Captures tracing events emitted by Nitro tracing channels.\n */\nexport function captureTracingEvents(): void {\n if (globalWithTraceChannels.__SENTRY_NITRO_HTTP_CHANNELS_INSTRUMENTED__) {\n return;\n }\n\n setupH3TracingChannels();\n setupSrvxTracingChannels();\n globalWithTraceChannels.__SENTRY_NITRO_HTTP_CHANNELS_INSTRUMENTED__ = true;\n}\n\n/**\n * Extracts the HTTP status code from a tracing channel result.\n * The result is the return value of the traced handler, which is a Response for srvx\n * and may or may not be a Response for h3.\n */\nfunction getResponseStatusCode(result: unknown): number | undefined {\n if (result && typeof result === 'object' && 'status' in result && typeof result.status === 'number') {\n return result.status;\n }\n return undefined;\n}\n\nfunction onTraceEnd(data: TracingChannelContextWithSpan<{ result?: unknown }>): void {\n const statusCode = getResponseStatusCode(data.result);\n if (data._sentrySpan && statusCode !== undefined) {\n setHttpStatus(data._sentrySpan, statusCode);\n }\n\n data._sentrySpan?.end();\n}\n\nfunction onTraceError(data: TracingChannelContextWithSpan<{ error: unknown }>): void {\n captureException(data.error, { mechanism: { type: 'auto.http.nitro.onTraceError', handled: false } });\n data._sentrySpan?.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n data._sentrySpan?.end();\n}\n\n/**\n * Extracts the parameterized route pattern from the h3 event context.\n */\nfunction getParameterizedRoute(event: H3TracingRequestEvent['event']): string | undefined {\n const matchedRoute = event.context?.matchedRoute;\n if (!matchedRoute) {\n return undefined;\n }\n\n const routePath = matchedRoute.route;\n\n // Skip catch-all routes as they're not useful for transaction grouping\n if (!routePath || routePath === '/**') {\n return undefined;\n }\n\n return routePath;\n}\n\nfunction setupH3TracingChannels(): void {\n const h3Channel = tracingChannel<H3TracingRequestEvent>('h3.request', data => {\n const parsedUrl = parseStringToURLObject(data.event.url.href);\n const routePattern = getParameterizedRoute(data.event);\n\n const [spanName, urlAttributes] = getHttpSpanDetailsFromUrlObject(\n parsedUrl,\n 'server',\n 'auto.http.nitro.h3',\n { method: data.event.req.method },\n routePattern,\n );\n\n return startSpanManual(\n {\n name: spanName,\n attributes: {\n ...urlAttributes,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.nitro.h3',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: data?.type === 'middleware' ? 'middleware.nitro' : 'http.server',\n },\n },\n span => {\n setParameterizedRouteAttributes(span, data.event);\n\n return span;\n },\n );\n });\n\n h3Channel.subscribe({\n start: (data: H3TracingRequestEvent) => {\n setServerTimingHeaders(data.event);\n },\n asyncEnd: (data: TracingChannelContextWithSpan<H3TracingRequestEvent>) => {\n onTraceEnd(data);\n\n if (!data._sentrySpan) {\n return;\n }\n\n // Update the root span (srvx transaction) with the parameterized route name.\n // The srvx span is created before h3 resolves the route, so it initially has the raw URL.\n // Note: data.type is always 'middleware' in asyncEnd regardless of handler type,\n // so we rely on getParameterizedRoute() to filter out catch-all routes instead.\n const rootSpan = getRootSpan(data._sentrySpan);\n if (rootSpan && rootSpan !== data._sentrySpan) {\n const routePattern = getParameterizedRoute(data.event);\n if (routePattern) {\n const method = data.event.req.method || 'GET';\n updateSpanName(rootSpan, `${method} ${routePattern}`);\n rootSpan.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',\n 'http.route': routePattern,\n });\n }\n }\n },\n error: onTraceError,\n });\n}\n\nfunction setupSrvxTracingChannels(): void {\n // Store the parent span per-request so middleware and fetch share the same parent.\n // WeakMap ensures per-request isolation in concurrent environments and automatic cleanup.\n const requestParentSpans = new WeakMap<Request, Span>();\n\n const fetchChannel = tracingChannel<SrvxRequestEvent>('srvx.request', data => {\n const parsedUrl = data.request._url ? parseStringToURLObject(data.request._url.href) : undefined;\n const [spanName, urlAttributes] = getHttpSpanDetailsFromUrlObject(parsedUrl, 'server', 'auto.http.nitro.srvx', {\n method: data.request.method,\n });\n\n const sendDefaultPii = getClient()?.getOptions().sendDefaultPii ?? false;\n const headerAttributes = httpHeadersToSpanAttributes(\n Object.fromEntries(data.request.headers.entries()),\n sendDefaultPii,\n );\n\n return startSpanManual(\n {\n name: spanName,\n attributes: {\n ...urlAttributes,\n ...headerAttributes,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.nitro.srvx',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: data.middleware ? 'middleware.nitro' : 'http.server',\n 'server.port': data.server.options.port,\n },\n // Use the same parent span as middleware to make them siblings\n parentSpan: requestParentSpans.get(data.request) || undefined,\n },\n span => span,\n );\n });\n\n // Subscribe to events (span already created in bindStore)\n fetchChannel.subscribe({\n asyncEnd: data => {\n onTraceEnd(data);\n\n // Clean up parent span reference after the fetch handler completes.\n requestParentSpans.delete(data.request);\n },\n error: data => {\n onTraceError(data);\n // Clean up parent span reference on error too\n requestParentSpans.delete(data.request);\n },\n });\n\n const middlewareChannel = tracingChannel<SrvxRequestEvent>('srvx.middleware', data => {\n // For the first middleware, capture the current parent span per-request\n if (data.middleware?.index === 0) {\n const activeSpan = getActiveSpan();\n if (activeSpan) {\n requestParentSpans.set(data.request, activeSpan);\n }\n }\n\n const parsedUrl = data.request._url ? parseStringToURLObject(data.request._url.href) : undefined;\n const [, urlAttributes] = getHttpSpanDetailsFromUrlObject(parsedUrl, 'server', 'auto.http.nitro.srvx', {\n method: data.request.method,\n });\n\n // Create span as a child of the original parent, not the previous middleware\n return startSpanManual(\n {\n name: `${data.middleware?.handler.name ?? 'unknown'} - ${data.request.method} ${data.request._url?.pathname}`,\n attributes: {\n ...urlAttributes,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.nitro.srvx',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware.nitro',\n },\n parentSpan: requestParentSpans.get(data.request) || undefined,\n },\n span => span,\n );\n });\n\n // Subscribe to events (span already created in bindStore)\n middlewareChannel.subscribe({\n asyncEnd: onTraceEnd,\n error: onTraceError,\n });\n}\n\n/**\n * Sets the parameterized route attributes on the span.\n */\nfunction setParameterizedRouteAttributes(span: Span, event: H3TracingRequestEvent['event']): void {\n const rootSpan = getRootSpan(span);\n if (!rootSpan) {\n return;\n }\n\n const matchedRoutePath = getParameterizedRoute(event);\n if (!matchedRoutePath) {\n return;\n }\n\n rootSpan.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',\n 'http.route': matchedRoutePath,\n });\n\n const params = event.context?.params;\n\n if (params && typeof params === 'object') {\n Object.entries(params).forEach(([key, value]) => {\n // Based on this convention: https://getsentry.github.io/sentry-conventions/generated/attributes/url.html#urlpathparameterkey\n rootSpan.setAttributes({\n [`url.path.parameter.${key}`]: String(value),\n [`params.${key}`]: String(value),\n });\n });\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captureTracingEvents.js","sources":["../../../../src/runtime/hooks/captureTracingEvents.ts"],"sourcesContent":["import {\n captureException,\n getActiveSpan,\n getClient,\n getHttpSpanDetailsFromUrlObject,\n getRootSpan,\n GLOBAL_OBJ,\n httpHeadersToSpanAttributes,\n parseStringToURLObject,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n setHttpStatus,\n type Span,\n SPAN_STATUS_ERROR,\n startSpanManual,\n updateSpanName,\n} from '@sentry/core';\nimport { tracingChannel, type TracingChannelContextWithSpan } from '@sentry/opentelemetry/tracing-channel';\nimport type { TracingRequestEvent as H3TracingRequestEvent } from 'h3/tracing';\nimport type { RequestEvent as SrvxRequestEvent } from 'srvx/tracing';\nimport { setServerTimingHeaders } from './setServerTimingHeaders';\n\n/**\n * Global object with the trace channels\n */\nconst globalWithTraceChannels = GLOBAL_OBJ as typeof GLOBAL_OBJ & {\n __SENTRY_NITRO_HTTP_CHANNELS_INSTRUMENTED__: boolean;\n};\n\n/**\n * Captures tracing events emitted by Nitro tracing channels.\n */\nexport function captureTracingEvents(): void {\n if (globalWithTraceChannels.__SENTRY_NITRO_HTTP_CHANNELS_INSTRUMENTED__) {\n return;\n }\n\n setupH3TracingChannels();\n setupSrvxTracingChannels();\n globalWithTraceChannels.__SENTRY_NITRO_HTTP_CHANNELS_INSTRUMENTED__ = true;\n}\n\n/**\n * Extracts the HTTP status code from a tracing channel result.\n * The result is the return value of the traced handler, which is a Response for srvx\n * and may or may not be a Response for h3.\n */\nfunction getResponseStatusCode(result: unknown): number | undefined {\n if (result && typeof result === 'object' && 'status' in result && typeof result.status === 'number') {\n return result.status;\n }\n return undefined;\n}\n\nfunction onTraceEnd(data: TracingChannelContextWithSpan<{ result?: unknown }>): void {\n const statusCode = getResponseStatusCode(data.result);\n if (data._sentrySpan && statusCode !== undefined) {\n setHttpStatus(data._sentrySpan, statusCode);\n }\n\n data._sentrySpan?.end();\n}\n\nfunction onTraceError(data: TracingChannelContextWithSpan<{ error: unknown }>): void {\n captureException(data.error, { mechanism: { type: 'auto.http.nitro.onTraceError', handled: false } });\n data._sentrySpan?.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n data._sentrySpan?.end();\n}\n\n/**\n * Extracts the parameterized route pattern from the h3 event context.\n */\nfunction getParameterizedRoute(event: H3TracingRequestEvent['event']): string | undefined {\n const matchedRoute = event.context?.matchedRoute;\n if (!matchedRoute) {\n return undefined;\n }\n\n const routePath = matchedRoute.route;\n\n // Skip catch-all routes as they're not useful for transaction grouping\n if (!routePath || routePath === '/**') {\n return undefined;\n }\n\n return routePath;\n}\n\nfunction setupH3TracingChannels(): void {\n const h3Channel = tracingChannel<H3TracingRequestEvent>('h3.request', data => {\n const parsedUrl = parseStringToURLObject(data.event.url.href);\n const routePattern = getParameterizedRoute(data.event);\n\n const [spanName, urlAttributes] = getHttpSpanDetailsFromUrlObject(\n parsedUrl,\n 'server',\n 'auto.http.nitro.h3',\n { method: data.event.req.method },\n routePattern,\n );\n\n return startSpanManual(\n {\n name: spanName,\n attributes: {\n ...urlAttributes,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.nitro.h3',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: data?.type === 'middleware' ? 'middleware.nitro' : 'http.server',\n },\n },\n span => {\n setParameterizedRouteAttributes(span, data.event);\n\n return span;\n },\n );\n });\n\n h3Channel.subscribe({\n start: (data: H3TracingRequestEvent) => {\n setServerTimingHeaders(data.event);\n },\n asyncEnd: (data: TracingChannelContextWithSpan<H3TracingRequestEvent>) => {\n onTraceEnd(data);\n\n if (!data._sentrySpan) {\n return;\n }\n\n // Update the root span (srvx transaction) with the parameterized route name.\n // The srvx span is created before h3 resolves the route, so it initially has the raw URL.\n // Note: data.type is always 'middleware' in asyncEnd regardless of handler type,\n // so we rely on getParameterizedRoute() to filter out catch-all routes instead.\n const rootSpan = getRootSpan(data._sentrySpan);\n if (rootSpan && rootSpan !== data._sentrySpan) {\n const routePattern = getParameterizedRoute(data.event);\n if (routePattern) {\n const method = data.event.req.method || 'GET';\n updateSpanName(rootSpan, `${method} ${routePattern}`);\n rootSpan.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',\n 'http.route': routePattern,\n });\n }\n }\n },\n error: onTraceError,\n });\n}\n\nfunction setupSrvxTracingChannels(): void {\n // Store the parent span per-request so middleware and fetch share the same parent.\n // WeakMap ensures per-request isolation in concurrent environments and automatic cleanup.\n const requestParentSpans = new WeakMap<Request, Span>();\n\n const fetchChannel = tracingChannel<SrvxRequestEvent>('srvx.request', data => {\n const parsedUrl = data.request._url ? parseStringToURLObject(data.request._url.href) : undefined;\n const [spanName, urlAttributes] = getHttpSpanDetailsFromUrlObject(parsedUrl, 'server', 'auto.http.nitro.srvx', {\n method: data.request.method,\n });\n\n const sendDefaultPii = getClient()?.getOptions().sendDefaultPii ?? false;\n const headerAttributes = httpHeadersToSpanAttributes(\n Object.fromEntries(data.request.headers.entries()),\n sendDefaultPii,\n );\n\n return startSpanManual(\n {\n name: spanName,\n attributes: {\n ...urlAttributes,\n ...headerAttributes,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.nitro.srvx',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: data.middleware ? 'middleware.nitro' : 'http.server',\n 'server.port': data.server.options.port,\n },\n // Use the same parent span as middleware to make them siblings\n parentSpan: requestParentSpans.get(data.request) || undefined,\n },\n span => span,\n );\n });\n\n // Subscribe to events (span already created in bindStore)\n fetchChannel.subscribe({\n asyncEnd: data => {\n onTraceEnd(data);\n\n // Clean up parent span reference after the fetch handler completes.\n requestParentSpans.delete(data.request);\n },\n error: data => {\n onTraceError(data);\n // Clean up parent span reference on error too\n requestParentSpans.delete(data.request);\n },\n });\n\n const middlewareChannel = tracingChannel<SrvxRequestEvent>('srvx.middleware', data => {\n // For the first middleware, capture the current parent span per-request\n if (data.middleware?.index === 0) {\n const activeSpan = getActiveSpan();\n if (activeSpan) {\n requestParentSpans.set(data.request, activeSpan);\n }\n }\n\n const parsedUrl = data.request._url ? parseStringToURLObject(data.request._url.href) : undefined;\n const [, urlAttributes] = getHttpSpanDetailsFromUrlObject(parsedUrl, 'server', 'auto.http.nitro.srvx', {\n method: data.request.method,\n });\n\n // Create span as a child of the original parent, not the previous middleware\n return startSpanManual(\n {\n name: `${data.middleware?.handler.name ?? 'unknown'} - ${data.request.method} ${data.request._url?.pathname}`,\n attributes: {\n ...urlAttributes,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.nitro.srvx',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware.nitro',\n },\n parentSpan: requestParentSpans.get(data.request) || undefined,\n },\n span => span,\n );\n });\n\n // Subscribe to events (span already created in bindStore)\n middlewareChannel.subscribe({\n asyncEnd: onTraceEnd,\n error: onTraceError,\n });\n}\n\n/**\n * Sets the parameterized route attributes on the span.\n */\nfunction setParameterizedRouteAttributes(span: Span, event: H3TracingRequestEvent['event']): void {\n const rootSpan = getRootSpan(span);\n if (!rootSpan) {\n return;\n }\n\n const matchedRoutePath = getParameterizedRoute(event);\n if (!matchedRoutePath) {\n return;\n }\n\n rootSpan.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',\n 'http.route': matchedRoutePath,\n });\n\n const params = event.context?.params;\n\n if (params && typeof params === 'object') {\n Object.entries(params).forEach(([key, value]) => {\n // Based on this convention: https://getsentry.github.io/sentry-conventions/generated/attributes/url.html#urlpathparameterkey\n rootSpan.setAttributes({\n [`url.path.parameter.${key}`]: String(value),\n [`params.${key}`]: String(value),\n });\n });\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,27 +1,20 @@
1
1
  import { getTraceData } from '@sentry/core';
2
2
 
3
- /**
4
- * Sets Server-Timing response headers for trace propagation to the client.
5
- * The browser SDK reads these via the Performance API to connect pageload traces.
6
- */
7
3
  function setServerTimingHeaders(event) {
8
4
  if (event.context._sentryServerTimingSet) {
9
5
  return;
10
6
  }
11
-
12
7
  const headers = event.res?.headers;
13
8
  if (!headers) {
14
9
  return;
15
10
  }
16
-
17
11
  const traceData = getTraceData();
18
- if (traceData['sentry-trace']) {
19
- headers.append('Server-Timing', `sentry-trace;desc="${traceData['sentry-trace']}"`);
12
+ if (traceData["sentry-trace"]) {
13
+ headers.append("Server-Timing", `sentry-trace;desc="${traceData["sentry-trace"]}"`);
20
14
  }
21
15
  if (traceData.baggage) {
22
- headers.append('Server-Timing', `baggage;desc="${traceData.baggage}"`);
16
+ headers.append("Server-Timing", `baggage;desc="${traceData.baggage}"`);
23
17
  }
24
-
25
18
  event.context._sentryServerTimingSet = true;
26
19
  }
27
20
 
@@ -1 +1 @@
1
- {"version":3,"file":"setServerTimingHeaders.js","sources":["../../../../src/runtime/hooks/setServerTimingHeaders.ts"],"sourcesContent":["import { getTraceData } from '@sentry/core';\nimport type { TracingRequestEvent as H3TracingRequestEvent } from 'h3/tracing';\n\n/**\n * Sets Server-Timing response headers for trace propagation to the client.\n * The browser SDK reads these via the Performance API to connect pageload traces.\n */\nexport function setServerTimingHeaders(event: H3TracingRequestEvent['event']): void {\n if (event.context._sentryServerTimingSet) {\n return;\n }\n\n const headers = event.res?.headers;\n if (!headers) {\n return;\n }\n\n const traceData = getTraceData();\n if (traceData['sentry-trace']) {\n headers.append('Server-Timing', `sentry-trace;desc=\"${traceData['sentry-trace']}\"`);\n }\n if (traceData.baggage) {\n headers.append('Server-Timing', `baggage;desc=\"${traceData.baggage}\"`);\n }\n\n event.context._sentryServerTimingSet = true;\n}\n"],"names":[],"mappings":";;AAGA;AACA;AACA;AACA;AACO,SAAS,sBAAsB,CAAC,KAAK,EAAwC;AACpF,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE;AAC5C,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,OAAA,GAAU,KAAK,CAAC,GAAG,EAAE,OAAO;AACpC,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,SAAA,GAAY,YAAY,EAAE;AAClC,EAAE,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE;AACjC,IAAI,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,EAAE;AACF,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE;AACzB,IAAI,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1E,EAAE;;AAEF,EAAE,KAAK,CAAC,OAAO,CAAC,sBAAA,GAAyB,IAAI;AAC7C;;;;"}
1
+ {"version":3,"file":"setServerTimingHeaders.js","sources":["../../../../src/runtime/hooks/setServerTimingHeaders.ts"],"sourcesContent":["import { getTraceData } from '@sentry/core';\nimport type { TracingRequestEvent as H3TracingRequestEvent } from 'h3/tracing';\n\n/**\n * Sets Server-Timing response headers for trace propagation to the client.\n * The browser SDK reads these via the Performance API to connect pageload traces.\n */\nexport function setServerTimingHeaders(event: H3TracingRequestEvent['event']): void {\n if (event.context._sentryServerTimingSet) {\n return;\n }\n\n const headers = event.res?.headers;\n if (!headers) {\n return;\n }\n\n const traceData = getTraceData();\n if (traceData['sentry-trace']) {\n headers.append('Server-Timing', `sentry-trace;desc=\"${traceData['sentry-trace']}\"`);\n }\n if (traceData.baggage) {\n headers.append('Server-Timing', `baggage;desc=\"${traceData.baggage}\"`);\n }\n\n event.context._sentryServerTimingSet = true;\n}\n"],"names":[],"mappings":";;AAOO,SAAS,uBAAuB,KAAA,EAA6C;AAClF,EAAA,IAAI,KAAA,CAAM,QAAQ,sBAAA,EAAwB;AACxC,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,GAAA,EAAK,OAAA;AAC3B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,IAAI,SAAA,CAAU,cAAc,CAAA,EAAG;AAC7B,IAAA,OAAA,CAAQ,OAAO,eAAA,EAAiB,CAAA,mBAAA,EAAsB,SAAA,CAAU,cAAc,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACpF;AACA,EAAA,IAAI,UAAU,OAAA,EAAS;AACrB,IAAA,OAAA,CAAQ,MAAA,CAAO,eAAA,EAAiB,CAAA,cAAA,EAAiB,SAAA,CAAU,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACvE;AAEA,EAAA,KAAA,CAAM,QAAQ,sBAAA,GAAyB,IAAA;AACzC;;;;"}
@@ -3,9 +3,8 @@ import { captureErrorHook } from '../hooks/captureErrorHook.js';
3
3
  import { captureStorageEvents } from '../hooks/captureStorageEvents.js';
4
4
  import { captureTracingEvents } from '../hooks/captureTracingEvents.js';
5
5
 
6
- const server = definePlugin(nitroApp => {
7
- nitroApp.hooks.hook('error', captureErrorHook);
8
-
6
+ const server = definePlugin((nitroApp) => {
7
+ nitroApp.hooks.hook("error", captureErrorHook);
9
8
  captureTracingEvents();
10
9
  captureStorageEvents();
11
10
  });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sources":["../../../../src/runtime/plugins/server.ts"],"sourcesContent":["import { definePlugin } from 'nitro';\nimport { captureErrorHook } from '../hooks/captureErrorHook';\nimport { captureStorageEvents } from '../hooks/captureStorageEvents';\nimport { captureTracingEvents } from '../hooks/captureTracingEvents';\n\nexport default definePlugin(nitroApp => {\n nitroApp.hooks.hook('error', captureErrorHook);\n\n captureTracingEvents();\n captureStorageEvents();\n});\n"],"names":[],"mappings":";;;;;AAKA,eAAe,YAAY,CAAC,QAAA,IAAY;AACxC,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;;AAEhD,EAAE,oBAAoB,EAAE;AACxB,EAAE,oBAAoB,EAAE;AACxB,CAAC,CAAC;;;;"}
1
+ {"version":3,"file":"server.js","sources":["../../../../src/runtime/plugins/server.ts"],"sourcesContent":["import { definePlugin } from 'nitro';\nimport { captureErrorHook } from '../hooks/captureErrorHook';\nimport { captureStorageEvents } from '../hooks/captureStorageEvents';\nimport { captureTracingEvents } from '../hooks/captureTracingEvents';\n\nexport default definePlugin(nitroApp => {\n nitroApp.hooks.hook('error', captureErrorHook);\n\n captureTracingEvents();\n captureStorageEvents();\n});\n"],"names":[],"mappings":";;;;;AAKA,eAAe,aAAa,CAAA,QAAA,KAAY;AACtC,EAAA,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA;AAE7C,EAAA,oBAAA,EAAqB;AACrB,EAAA,oBAAA,EAAqB;AACvB,CAAC,CAAA;;;;"}
package/build/esm/sdk.js CHANGED
@@ -1,30 +1,17 @@
1
1
  import { applySdkMetadata } from '@sentry/core';
2
2
  import { init as init$1, getDefaultIntegrations as getDefaultIntegrations$1 } from '@sentry/node';
3
3
 
4
- /**
5
- * Initializes the Nitro SDK
6
- */
7
4
  function init(options = {}) {
8
5
  const opts = {
9
- ...options,
6
+ ...options
10
7
  };
11
-
12
- if (opts.defaultIntegrations === undefined) {
8
+ if (opts.defaultIntegrations === void 0) {
13
9
  opts.defaultIntegrations = getDefaultIntegrations(opts);
14
10
  }
15
-
16
- applySdkMetadata(opts, 'nitro', ['nitro', 'node']);
17
-
11
+ applySdkMetadata(opts, "nitro", ["nitro", "node"]);
18
12
  const client = init$1(opts);
19
-
20
13
  return client;
21
14
  }
22
-
23
- /**
24
- * Get the default integrations for the Nitro SDK.
25
- *
26
- * @returns The default integrations for the Nitro SDK.
27
- */
28
15
  function getDefaultIntegrations(options) {
29
16
  return [...getDefaultIntegrations$1(options)];
30
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sources":["../../src/sdk.ts"],"sourcesContent":["import type { Integration } from '@sentry/core';\nimport { applySdkMetadata } from '@sentry/core';\nimport type { NodeClient, NodeOptions } from '@sentry/node';\nimport { getDefaultIntegrations as getDefaultNodeIntegrations, init as nodeInit } from '@sentry/node';\n\n/**\n * Initializes the Nitro SDK\n */\nexport function init(options: NodeOptions | undefined = {}): NodeClient | undefined {\n const opts: NodeOptions = {\n ...options,\n };\n\n if (opts.defaultIntegrations === undefined) {\n opts.defaultIntegrations = getDefaultIntegrations(opts);\n }\n\n applySdkMetadata(opts, 'nitro', ['nitro', 'node']);\n\n const client = nodeInit(opts);\n\n return client;\n}\n\n/**\n * Get the default integrations for the Nitro SDK.\n *\n * @returns The default integrations for the Nitro SDK.\n */\nexport function getDefaultIntegrations(options: NodeOptions): Integration[] | undefined {\n return [...getDefaultNodeIntegrations(options)];\n}\n"],"names":["nodeInit","getDefaultNodeIntegrations"],"mappings":";;;AAKA;AACA;AACA;AACO,SAAS,IAAI,CAAC,OAAO,GAA4B,EAAE,EAA0B;AACpF,EAAE,MAAM,IAAI,GAAgB;AAC5B,IAAI,GAAG,OAAO;AACd,GAAG;;AAEH,EAAE,IAAI,IAAI,CAAC,mBAAA,KAAwB,SAAS,EAAE;AAC9C,IAAI,IAAI,CAAC,mBAAA,GAAsB,sBAAsB,CAAC,IAAI,CAAC;AAC3D,EAAE;;AAEF,EAAE,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;;AAEpD,EAAE,MAAM,MAAA,GAASA,MAAQ,CAAC,IAAI,CAAC;;AAE/B,EAAE,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,sBAAsB,CAAC,OAAO,EAA0C;AACxF,EAAE,OAAO,CAAC,GAAGC,wBAA0B,CAAC,OAAO,CAAC,CAAC;AACjD;;;;"}
1
+ {"version":3,"file":"sdk.js","sources":["../../src/sdk.ts"],"sourcesContent":["import type { Integration } from '@sentry/core';\nimport { applySdkMetadata } from '@sentry/core';\nimport type { NodeClient, NodeOptions } from '@sentry/node';\nimport { getDefaultIntegrations as getDefaultNodeIntegrations, init as nodeInit } from '@sentry/node';\n\n/**\n * Initializes the Nitro SDK\n */\nexport function init(options: NodeOptions | undefined = {}): NodeClient | undefined {\n const opts: NodeOptions = {\n ...options,\n };\n\n if (opts.defaultIntegrations === undefined) {\n opts.defaultIntegrations = getDefaultIntegrations(opts);\n }\n\n applySdkMetadata(opts, 'nitro', ['nitro', 'node']);\n\n const client = nodeInit(opts);\n\n return client;\n}\n\n/**\n * Get the default integrations for the Nitro SDK.\n *\n * @returns The default integrations for the Nitro SDK.\n */\nexport function getDefaultIntegrations(options: NodeOptions): Integration[] | undefined {\n return [...getDefaultNodeIntegrations(options)];\n}\n"],"names":["nodeInit","getDefaultNodeIntegrations"],"mappings":";;;AAQO,SAAS,IAAA,CAAK,OAAA,GAAmC,EAAC,EAA2B;AAClF,EAAA,MAAM,IAAA,GAAoB;AAAA,IACxB,GAAG;AAAA,GACL;AAEA,EAAA,IAAI,IAAA,CAAK,wBAAwB,MAAA,EAAW;AAC1C,IAAA,IAAA,CAAK,mBAAA,GAAsB,uBAAuB,IAAI,CAAA;AAAA,EACxD;AAEA,EAAA,gBAAA,CAAiB,IAAA,EAAM,OAAA,EAAS,CAAC,OAAA,EAAS,MAAM,CAAC,CAAA;AAEjD,EAAA,MAAM,MAAA,GAASA,OAAS,IAAI,CAAA;AAE5B,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,uBAAuB,OAAA,EAAiD;AACtF,EAAA,OAAO,CAAC,GAAGC,wBAAA,CAA2B,OAAO,CAAC,CAAA;AAChD;;;;"}