UNPKG

@sentry/nextjs

Version:
91 lines (87 loc) 3.79 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const core = require('@sentry/core'); const nextNavigationErrorUtils = require('./nextNavigationErrorUtils.js'); const responseEnd = require('./utils/responseEnd.js'); const tracingUtils = require('./utils/tracingUtils.js'); const attributes = require('@sentry/conventions/attributes'); function wrapRouteHandlerWithSentry(routeHandler, context) { const { method, parameterizedRoute, headers } = context; return new Proxy(routeHandler, { apply: async (originalFunction, thisArg, args) => { const activeSpan = core.getActiveSpan(); const rootSpan = activeSpan ? core.getRootSpan(activeSpan) : void 0; let edgeRuntimeIsolationScopeOverride; if (rootSpan && process.env.NEXT_RUNTIME === "edge") { const isolationScope = tracingUtils.commonObjectToIsolationScope(headers); const { scope } = core.getCapturedScopesOnSpan(rootSpan); core.setCapturedScopesOnSpan(rootSpan, scope ?? new core.Scope(), isolationScope); edgeRuntimeIsolationScopeOverride = isolationScope; rootSpan.updateName(`${method} ${parameterizedRoute}`); rootSpan.setAttributes({ [core.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "route", [core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: "http.server", [attributes.HTTP_ROUTE]: parameterizedRoute }); } return core.withIsolationScope( process.env.NEXT_RUNTIME === "edge" ? edgeRuntimeIsolationScopeOverride : core.getIsolationScope(), () => { return core.withScope(async (scope) => { scope.setTransactionName(`${method} ${parameterizedRoute}`); if (process.env.NEXT_RUNTIME === "edge") { const completeHeadersDict = headers ? core.winterCGHeadersToDict(headers) : {}; const incomingPropagationContext = core.propagationContextFromHeaders( completeHeadersDict["sentry-trace"], completeHeadersDict["baggage"] ); scope.setPropagationContext(incomingPropagationContext); scope.setSDKProcessingMetadata({ normalizedRequest: { method, headers: completeHeadersDict } }); } const response = await core.handleCallbackErrors( () => originalFunction.apply(thisArg, args), (error) => { if (nextNavigationErrorUtils.isRedirectNavigationError(error)) ; else if (nextNavigationErrorUtils.isNotFoundNavigationError(error)) { if (activeSpan) { core.setHttpStatus(activeSpan, 404); } if (rootSpan) { core.setHttpStatus(rootSpan, 404); } } else { core.captureException(error, { mechanism: { handled: false, type: "auto.function.nextjs.route_handler" } }); } }, () => { responseEnd.waitUntil(responseEnd.flushSafelyWithTimeout()); } ); try { if (response.status) { if (activeSpan) { core.setHttpStatus(activeSpan, response.status); } if (rootSpan) { core.setHttpStatus(rootSpan, response.status); } } } catch { } return response; }); } ); } }); } exports.wrapRouteHandlerWithSentry = wrapRouteHandlerWithSentry; //# sourceMappingURL=wrapRouteHandlerWithSentry.js.map