@sentry/node 8.22.0 → 8.24.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.
Files changed (48) hide show
  1. package/build/cjs/index.js +2 -1
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/cjs/integrations/anr/index.js +1 -1
  4. package/build/cjs/integrations/local-variables/local-variables-async.js +1 -1
  5. package/build/cjs/integrations/tracing/index.js +1 -1
  6. package/build/cjs/integrations/tracing/index.js.map +1 -1
  7. package/build/cjs/integrations/tracing/nest/helpers.js +39 -0
  8. package/build/cjs/integrations/tracing/nest/helpers.js.map +1 -0
  9. package/build/cjs/integrations/tracing/nest/nest.js +129 -0
  10. package/build/cjs/integrations/tracing/nest/nest.js.map +1 -0
  11. package/build/cjs/integrations/tracing/nest/sentry-nest-instrumentation.js +178 -0
  12. package/build/cjs/integrations/tracing/nest/sentry-nest-instrumentation.js.map +1 -0
  13. package/build/esm/index.js +2 -2
  14. package/build/esm/integrations/anr/index.js +1 -1
  15. package/build/esm/integrations/anr/worker-script.js +2 -2
  16. package/build/esm/integrations/local-variables/local-variables-async.js +1 -1
  17. package/build/esm/integrations/local-variables/worker-script.js +1 -1
  18. package/build/esm/integrations/tracing/index.js +1 -1
  19. package/build/esm/integrations/tracing/index.js.map +1 -1
  20. package/build/esm/integrations/tracing/nest/helpers.js +36 -0
  21. package/build/esm/integrations/tracing/nest/helpers.js.map +1 -0
  22. package/build/esm/integrations/tracing/nest/nest.js +122 -0
  23. package/build/esm/integrations/tracing/nest/nest.js.map +1 -0
  24. package/build/esm/integrations/tracing/nest/sentry-nest-instrumentation.js +176 -0
  25. package/build/esm/integrations/tracing/nest/sentry-nest-instrumentation.js.map +1 -0
  26. package/build/types/index.d.ts +2 -2
  27. package/build/types/index.d.ts.map +1 -1
  28. package/build/types/integrations/tracing/nest/helpers.d.ts +19 -0
  29. package/build/types/integrations/tracing/nest/helpers.d.ts.map +1 -0
  30. package/build/types/integrations/tracing/nest/nest.d.ts +15 -0
  31. package/build/types/integrations/tracing/nest/nest.d.ts.map +1 -0
  32. package/build/types/integrations/tracing/nest/sentry-nest-instrumentation.d.ts +29 -0
  33. package/build/types/integrations/tracing/nest/sentry-nest-instrumentation.d.ts.map +1 -0
  34. package/build/types/integrations/tracing/nest/types.d.ts +50 -0
  35. package/build/types/integrations/tracing/nest/types.d.ts.map +1 -0
  36. package/build/types-ts3.8/index.d.ts +2 -2
  37. package/build/types-ts3.8/integrations/tracing/nest/helpers.d.ts +19 -0
  38. package/build/types-ts3.8/integrations/tracing/nest/nest.d.ts +15 -0
  39. package/build/types-ts3.8/integrations/tracing/nest/sentry-nest-instrumentation.d.ts +29 -0
  40. package/build/types-ts3.8/integrations/tracing/nest/types.d.ts +50 -0
  41. package/package.json +5 -5
  42. package/build/cjs/integrations/tracing/nest.js +0 -278
  43. package/build/cjs/integrations/tracing/nest.js.map +0 -1
  44. package/build/esm/integrations/tracing/nest.js +0 -269
  45. package/build/esm/integrations/tracing/nest.js.map +0 -1
  46. package/build/types/integrations/tracing/nest.d.ts +0 -84
  47. package/build/types/integrations/tracing/nest.d.ts.map +0 -1
  48. package/build/types-ts3.8/integrations/tracing/nest.d.ts +0 -84
@@ -1,278 +0,0 @@
1
- var {
2
- _optionalChain
3
- } = require('@sentry/utils');
4
-
5
- Object.defineProperty(exports, '__esModule', { value: true });
6
-
7
- const core$1 = require('@opentelemetry/core');
8
- const instrumentation = require('@opentelemetry/instrumentation');
9
- const instrumentationNestjsCore = require('@opentelemetry/instrumentation-nestjs-core');
10
- const core = require('@sentry/core');
11
- const utils = require('@sentry/utils');
12
- const instrument = require('../../otel/instrument.js');
13
-
14
- const INTEGRATION_NAME = 'Nest';
15
-
16
- const supportedVersions = ['>=8.0.0 <11'];
17
-
18
- const sentryPatched = 'sentryPatched';
19
-
20
- /**
21
- * Represents an injectable target class in NestJS.
22
- */
23
-
24
- /**
25
- * Helper checking if a concrete target class is already patched.
26
- *
27
- * We already guard duplicate patching with isWrapped. However, isWrapped checks whether a file has been patched, whereas we use this check for concrete target classes.
28
- * This check might not be necessary, but better to play it safe.
29
- */
30
- function isPatched(target) {
31
- if (target.sentryPatched) {
32
- return true;
33
- }
34
-
35
- utils.addNonEnumerableProperty(target, sentryPatched, true);
36
- return false;
37
- }
38
-
39
- /**
40
- * Custom instrumentation for nestjs.
41
- *
42
- * This hooks into the @Injectable decorator, which is applied on class middleware, interceptors and guards.
43
- */
44
- class SentryNestInstrumentation extends instrumentation.InstrumentationBase {
45
- static __initStatic() {this.COMPONENT = '@nestjs/common';}
46
- static __initStatic2() {this.COMMON_ATTRIBUTES = {
47
- component: SentryNestInstrumentation.COMPONENT,
48
- };}
49
-
50
- constructor(config = {}) {
51
- super('sentry-nestjs', core.SDK_VERSION, config);
52
- }
53
-
54
- /**
55
- * Initializes the instrumentation by defining the modules to be patched.
56
- */
57
- init() {
58
- const moduleDef = new instrumentation.InstrumentationNodeModuleDefinition(SentryNestInstrumentation.COMPONENT, supportedVersions);
59
-
60
- moduleDef.files.push(this._getInjectableFileInstrumentation(supportedVersions));
61
- return moduleDef;
62
- }
63
-
64
- /**
65
- * Wraps the @Injectable decorator.
66
- */
67
- _getInjectableFileInstrumentation(versions) {
68
- return new instrumentation.InstrumentationNodeModuleFile(
69
- '@nestjs/common/decorators/core/injectable.decorator.js',
70
- versions,
71
- (moduleExports) => {
72
- if (core$1.isWrapped(moduleExports.Injectable)) {
73
- this._unwrap(moduleExports, 'Injectable');
74
- }
75
- this._wrap(moduleExports, 'Injectable', this._createWrapInjectable());
76
- return moduleExports;
77
- },
78
- (moduleExports) => {
79
- this._unwrap(moduleExports, 'Injectable');
80
- },
81
- );
82
- }
83
-
84
- /**
85
- * Creates a wrapper function for the @Injectable decorator.
86
- *
87
- * Wraps the use method to instrument nest class middleware.
88
- */
89
- _createWrapInjectable() {
90
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
91
- return function wrapInjectable(original) {
92
- return function wrappedInjectable(options) {
93
- return function (target) {
94
- // patch middleware
95
- if (typeof target.prototype.use === 'function') {
96
- // patch only once
97
- if (isPatched(target)) {
98
- return original(options)(target);
99
- }
100
-
101
- target.prototype.use = new Proxy(target.prototype.use, {
102
- apply: (originalUse, thisArgUse, argsUse) => {
103
- const [req, res, next, ...args] = argsUse;
104
- const prevSpan = core.getActiveSpan();
105
-
106
- return core.startSpanManual(
107
- {
108
- name: target.name,
109
- attributes: {
110
- [core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware.nestjs',
111
- [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.middleware.nestjs',
112
- },
113
- },
114
- (span) => {
115
- const nextProxy = new Proxy(next, {
116
- apply: (originalNext, thisArgNext, argsNext) => {
117
- span.end();
118
-
119
- if (prevSpan) {
120
- core.withActiveSpan(prevSpan, () => {
121
- return Reflect.apply(originalNext, thisArgNext, argsNext);
122
- });
123
- } else {
124
- return Reflect.apply(originalNext, thisArgNext, argsNext);
125
- }
126
- },
127
- });
128
-
129
- return originalUse.apply(thisArgUse, [req, res, nextProxy, args]);
130
- },
131
- );
132
- },
133
- });
134
- }
135
-
136
- // patch guards
137
- if (typeof target.prototype.canActivate === 'function') {
138
- // patch only once
139
- if (isPatched(target)) {
140
- return original(options)(target);
141
- }
142
-
143
- target.prototype.canActivate = new Proxy(target.prototype.canActivate, {
144
- apply: (originalCanActivate, thisArgCanActivate, argsCanActivate) => {
145
- return core.startSpan(
146
- {
147
- name: target.name,
148
- attributes: {
149
- [core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware.nestjs',
150
- [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.middleware.nestjs',
151
- },
152
- },
153
- () => {
154
- return originalCanActivate.apply(thisArgCanActivate, argsCanActivate);
155
- },
156
- );
157
- },
158
- });
159
- }
160
-
161
- return original(options)(target);
162
- };
163
- };
164
- };
165
- }
166
- }SentryNestInstrumentation.__initStatic();SentryNestInstrumentation.__initStatic2();
167
-
168
- const instrumentNestCore = instrument.generateInstrumentOnce('Nest-Core', () => {
169
- return new instrumentationNestjsCore.NestInstrumentation();
170
- });
171
-
172
- const instrumentNestCommon = instrument.generateInstrumentOnce('Nest-Common', () => {
173
- return new SentryNestInstrumentation();
174
- });
175
-
176
- const instrumentNest = Object.assign(
177
- () => {
178
- instrumentNestCore();
179
- instrumentNestCommon();
180
- },
181
- { id: INTEGRATION_NAME },
182
- );
183
-
184
- const _nestIntegration = (() => {
185
- return {
186
- name: INTEGRATION_NAME,
187
- setupOnce() {
188
- instrumentNest();
189
- },
190
- };
191
- }) ;
192
-
193
- /**
194
- * Nest framework integration
195
- *
196
- * Capture tracing data for nest.
197
- */
198
- const nestIntegration = core.defineIntegration(_nestIntegration);
199
-
200
- /**
201
- * Setup an error handler for Nest.
202
- */
203
- function setupNestErrorHandler(app, baseFilter) {
204
- // Sadly, NestInstrumentation has no requestHook, so we need to add the attributes here
205
- // We register this hook in this method, because if we register it in the integration `setup`,
206
- // it would always run even for users that are not even using Nest.js
207
- const client = core.getClient();
208
- if (client) {
209
- client.on('spanStart', span => {
210
- addNestSpanAttributes(span);
211
- });
212
- }
213
-
214
- app.useGlobalInterceptors({
215
- intercept(context, next) {
216
- if (core.getIsolationScope() === core.getDefaultIsolationScope()) {
217
- utils.logger.warn('Isolation scope is still the default isolation scope, skipping setting transactionName.');
218
- return next.handle();
219
- }
220
-
221
- if (context.getType() === 'http') {
222
- const req = context.switchToHttp().getRequest();
223
- if (req.route) {
224
- core.getIsolationScope().setTransactionName(`${_optionalChain([req, 'access', _ => _.method, 'optionalAccess', _2 => _2.toUpperCase, 'call', _3 => _3()]) || 'GET'} ${req.route.path}`);
225
- }
226
- }
227
-
228
- return next.handle();
229
- },
230
- });
231
-
232
- const wrappedFilter = new Proxy(baseFilter, {
233
- get(target, prop, receiver) {
234
- if (prop === 'catch') {
235
- const originalCatch = Reflect.get(target, prop, receiver);
236
-
237
- return (exception, host) => {
238
- const status_code = (exception ).status;
239
-
240
- // don't report expected errors
241
- if (status_code !== undefined) {
242
- return originalCatch.apply(target, [exception, host]);
243
- }
244
-
245
- core.captureException(exception);
246
- return originalCatch.apply(target, [exception, host]);
247
- };
248
- }
249
- return Reflect.get(target, prop, receiver);
250
- },
251
- });
252
-
253
- app.useGlobalFilters(wrappedFilter);
254
- }
255
-
256
- function addNestSpanAttributes(span) {
257
- const attributes = core.spanToJSON(span).data || {};
258
-
259
- // this is one of: app_creation, request_context, handler
260
- const type = attributes['nestjs.type'];
261
-
262
- // If this is already set, or we have no nest.js span, no need to process again...
263
- if (attributes[core.SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {
264
- return;
265
- }
266
-
267
- span.setAttributes({
268
- [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.nestjs',
269
- [core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.nestjs`,
270
- });
271
- }
272
-
273
- exports.SentryNestInstrumentation = SentryNestInstrumentation;
274
- exports.instrumentNest = instrumentNest;
275
- exports.isPatched = isPatched;
276
- exports.nestIntegration = nestIntegration;
277
- exports.setupNestErrorHandler = setupNestErrorHandler;
278
- //# sourceMappingURL=nest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nest.js","sources":["../../../../src/integrations/tracing/nest.ts"],"sourcesContent":["import { isWrapped } from '@opentelemetry/core';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n} from '@opentelemetry/instrumentation';\nimport { NestInstrumentation } from '@opentelemetry/instrumentation-nestjs-core';\nimport {\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n captureException,\n defineIntegration,\n getActiveSpan,\n getClient,\n getDefaultIsolationScope,\n getIsolationScope,\n spanToJSON,\n startSpan,\n startSpanManual,\n withActiveSpan,\n} from '@sentry/core';\nimport type { IntegrationFn, Span } from '@sentry/types';\nimport { addNonEnumerableProperty, logger } from '@sentry/utils';\nimport type { Observable } from 'rxjs';\nimport { generateInstrumentOnce } from '../../otel/instrument';\n\ninterface MinimalNestJsExecutionContext {\n getType: () => string;\n\n switchToHttp: () => {\n // minimal request object\n // according to official types, all properties are required but\n // let's play it safe and assume they're optional\n getRequest: () => {\n route?: {\n path?: string;\n };\n method?: string;\n };\n };\n}\n\ninterface NestJsErrorFilter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n catch(exception: any, host: any): void;\n}\n\ninterface MinimalNestJsApp {\n useGlobalFilters: (arg0: NestJsErrorFilter) => void;\n useGlobalInterceptors: (interceptor: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n intercept: (context: MinimalNestJsExecutionContext, next: { handle: () => any }) => any;\n }) => void;\n}\n\nconst INTEGRATION_NAME = 'Nest';\n\nconst supportedVersions = ['>=8.0.0 <11'];\n\nconst sentryPatched = 'sentryPatched';\n\n/**\n * Represents an injectable target class in NestJS.\n */\nexport interface InjectableTarget {\n name: string;\n sentryPatched?: boolean;\n prototype: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n use?: (req: unknown, res: unknown, next: () => void, ...args: any[]) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n canActivate?: (...args: any[]) => boolean | Promise<boolean> | Observable<boolean>;\n };\n}\n\n/**\n * Helper checking if a concrete target class is already patched.\n *\n * We already guard duplicate patching with isWrapped. However, isWrapped checks whether a file has been patched, whereas we use this check for concrete target classes.\n * This check might not be necessary, but better to play it safe.\n */\nexport function isPatched(target: InjectableTarget): boolean {\n if (target.sentryPatched) {\n return true;\n }\n\n addNonEnumerableProperty(target, sentryPatched, true);\n return false;\n}\n\n/**\n * Custom instrumentation for nestjs.\n *\n * This hooks into the @Injectable decorator, which is applied on class middleware, interceptors and guards.\n */\nexport class SentryNestInstrumentation extends InstrumentationBase {\n public static readonly COMPONENT = '@nestjs/common';\n public static readonly COMMON_ATTRIBUTES = {\n component: SentryNestInstrumentation.COMPONENT,\n };\n\n public constructor(config: InstrumentationConfig = {}) {\n super('sentry-nestjs', SDK_VERSION, config);\n }\n\n /**\n * Initializes the instrumentation by defining the modules to be patched.\n */\n public init(): InstrumentationNodeModuleDefinition {\n const moduleDef = new InstrumentationNodeModuleDefinition(SentryNestInstrumentation.COMPONENT, supportedVersions);\n\n moduleDef.files.push(this._getInjectableFileInstrumentation(supportedVersions));\n return moduleDef;\n }\n\n /**\n * Wraps the @Injectable decorator.\n */\n private _getInjectableFileInstrumentation(versions: string[]): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n '@nestjs/common/decorators/core/injectable.decorator.js',\n versions,\n (moduleExports: { Injectable: InjectableTarget }) => {\n if (isWrapped(moduleExports.Injectable)) {\n this._unwrap(moduleExports, 'Injectable');\n }\n this._wrap(moduleExports, 'Injectable', this._createWrapInjectable());\n return moduleExports;\n },\n (moduleExports: { Injectable: InjectableTarget }) => {\n this._unwrap(moduleExports, 'Injectable');\n },\n );\n }\n\n /**\n * Creates a wrapper function for the @Injectable decorator.\n *\n * Wraps the use method to instrument nest class middleware.\n */\n private _createWrapInjectable() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function wrapInjectable(original: any) {\n return function wrappedInjectable(options?: unknown) {\n return function (target: InjectableTarget) {\n // patch middleware\n if (typeof target.prototype.use === 'function') {\n // patch only once\n if (isPatched(target)) {\n return original(options)(target);\n }\n\n target.prototype.use = new Proxy(target.prototype.use, {\n apply: (originalUse, thisArgUse, argsUse) => {\n const [req, res, next, ...args] = argsUse;\n const prevSpan = getActiveSpan();\n\n return startSpanManual(\n {\n name: target.name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware.nestjs',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.middleware.nestjs',\n },\n },\n (span: Span) => {\n const nextProxy = new Proxy(next, {\n apply: (originalNext, thisArgNext, argsNext) => {\n span.end();\n\n if (prevSpan) {\n withActiveSpan(prevSpan, () => {\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n });\n } else {\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n }\n },\n });\n\n return originalUse.apply(thisArgUse, [req, res, nextProxy, args]);\n },\n );\n },\n });\n }\n\n // patch guards\n if (typeof target.prototype.canActivate === 'function') {\n // patch only once\n if (isPatched(target)) {\n return original(options)(target);\n }\n\n target.prototype.canActivate = new Proxy(target.prototype.canActivate, {\n apply: (originalCanActivate, thisArgCanActivate, argsCanActivate) => {\n return startSpan(\n {\n name: target.name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware.nestjs',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.middleware.nestjs',\n },\n },\n () => {\n return originalCanActivate.apply(thisArgCanActivate, argsCanActivate);\n },\n );\n },\n });\n }\n\n return original(options)(target);\n };\n };\n };\n }\n}\n\nconst instrumentNestCore = generateInstrumentOnce('Nest-Core', () => {\n return new NestInstrumentation();\n});\n\nconst instrumentNestCommon = generateInstrumentOnce('Nest-Common', () => {\n return new SentryNestInstrumentation();\n});\n\nexport const instrumentNest = Object.assign(\n (): void => {\n instrumentNestCore();\n instrumentNestCommon();\n },\n { id: INTEGRATION_NAME },\n);\n\nconst _nestIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentNest();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Nest framework integration\n *\n * Capture tracing data for nest.\n */\nexport const nestIntegration = defineIntegration(_nestIntegration);\n\n/**\n * Setup an error handler for Nest.\n */\nexport function setupNestErrorHandler(app: MinimalNestJsApp, baseFilter: NestJsErrorFilter): void {\n // Sadly, NestInstrumentation has no requestHook, so we need to add the attributes here\n // We register this hook in this method, because if we register it in the integration `setup`,\n // it would always run even for users that are not even using Nest.js\n const client = getClient();\n if (client) {\n client.on('spanStart', span => {\n addNestSpanAttributes(span);\n });\n }\n\n app.useGlobalInterceptors({\n intercept(context, next) {\n if (getIsolationScope() === getDefaultIsolationScope()) {\n logger.warn('Isolation scope is still the default isolation scope, skipping setting transactionName.');\n return next.handle();\n }\n\n if (context.getType() === 'http') {\n const req = context.switchToHttp().getRequest();\n if (req.route) {\n getIsolationScope().setTransactionName(`${req.method?.toUpperCase() || 'GET'} ${req.route.path}`);\n }\n }\n\n return next.handle();\n },\n });\n\n const wrappedFilter = new Proxy(baseFilter, {\n get(target, prop, receiver) {\n if (prop === 'catch') {\n const originalCatch = Reflect.get(target, prop, receiver);\n\n return (exception: unknown, host: unknown) => {\n const status_code = (exception as { status?: number }).status;\n\n // don't report expected errors\n if (status_code !== undefined) {\n return originalCatch.apply(target, [exception, host]);\n }\n\n captureException(exception);\n return originalCatch.apply(target, [exception, host]);\n };\n }\n return Reflect.get(target, prop, receiver);\n },\n });\n\n app.useGlobalFilters(wrappedFilter);\n}\n\nfunction addNestSpanAttributes(span: Span): void {\n const attributes = spanToJSON(span).data || {};\n\n // this is one of: app_creation, request_context, handler\n const type = attributes['nestjs.type'];\n\n // If this is already set, or we have no nest.js span, no need to process again...\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {\n return;\n }\n\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.nestjs',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.nestjs`,\n });\n}\n"],"names":["addNonEnumerableProperty","InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","isWrapped","getActiveSpan","startSpanManual","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","withActiveSpan","startSpan","generateInstrumentOnce","NestInstrumentation","defineIntegration","getClient","getIsolationScope","getDefaultIsolationScope","logger","captureException","spanToJSON"],"mappings":"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"}
@@ -1,269 +0,0 @@
1
- import { _optionalChain } from '@sentry/utils';
2
- import { isWrapped } from '@opentelemetry/core';
3
- import { InstrumentationBase, InstrumentationNodeModuleDefinition, InstrumentationNodeModuleFile } from '@opentelemetry/instrumentation';
4
- import { NestInstrumentation } from '@opentelemetry/instrumentation-nestjs-core';
5
- import { defineIntegration, SDK_VERSION, getActiveSpan, startSpanManual, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, withActiveSpan, startSpan, getClient, getIsolationScope, getDefaultIsolationScope, captureException, spanToJSON } from '@sentry/core';
6
- import { logger, addNonEnumerableProperty } from '@sentry/utils';
7
- import { generateInstrumentOnce } from '../../otel/instrument.js';
8
-
9
- const INTEGRATION_NAME = 'Nest';
10
-
11
- const supportedVersions = ['>=8.0.0 <11'];
12
-
13
- const sentryPatched = 'sentryPatched';
14
-
15
- /**
16
- * Represents an injectable target class in NestJS.
17
- */
18
-
19
- /**
20
- * Helper checking if a concrete target class is already patched.
21
- *
22
- * We already guard duplicate patching with isWrapped. However, isWrapped checks whether a file has been patched, whereas we use this check for concrete target classes.
23
- * This check might not be necessary, but better to play it safe.
24
- */
25
- function isPatched(target) {
26
- if (target.sentryPatched) {
27
- return true;
28
- }
29
-
30
- addNonEnumerableProperty(target, sentryPatched, true);
31
- return false;
32
- }
33
-
34
- /**
35
- * Custom instrumentation for nestjs.
36
- *
37
- * This hooks into the @Injectable decorator, which is applied on class middleware, interceptors and guards.
38
- */
39
- class SentryNestInstrumentation extends InstrumentationBase {
40
- static __initStatic() {this.COMPONENT = '@nestjs/common';}
41
- static __initStatic2() {this.COMMON_ATTRIBUTES = {
42
- component: SentryNestInstrumentation.COMPONENT,
43
- };}
44
-
45
- constructor(config = {}) {
46
- super('sentry-nestjs', SDK_VERSION, config);
47
- }
48
-
49
- /**
50
- * Initializes the instrumentation by defining the modules to be patched.
51
- */
52
- init() {
53
- const moduleDef = new InstrumentationNodeModuleDefinition(SentryNestInstrumentation.COMPONENT, supportedVersions);
54
-
55
- moduleDef.files.push(this._getInjectableFileInstrumentation(supportedVersions));
56
- return moduleDef;
57
- }
58
-
59
- /**
60
- * Wraps the @Injectable decorator.
61
- */
62
- _getInjectableFileInstrumentation(versions) {
63
- return new InstrumentationNodeModuleFile(
64
- '@nestjs/common/decorators/core/injectable.decorator.js',
65
- versions,
66
- (moduleExports) => {
67
- if (isWrapped(moduleExports.Injectable)) {
68
- this._unwrap(moduleExports, 'Injectable');
69
- }
70
- this._wrap(moduleExports, 'Injectable', this._createWrapInjectable());
71
- return moduleExports;
72
- },
73
- (moduleExports) => {
74
- this._unwrap(moduleExports, 'Injectable');
75
- },
76
- );
77
- }
78
-
79
- /**
80
- * Creates a wrapper function for the @Injectable decorator.
81
- *
82
- * Wraps the use method to instrument nest class middleware.
83
- */
84
- _createWrapInjectable() {
85
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
- return function wrapInjectable(original) {
87
- return function wrappedInjectable(options) {
88
- return function (target) {
89
- // patch middleware
90
- if (typeof target.prototype.use === 'function') {
91
- // patch only once
92
- if (isPatched(target)) {
93
- return original(options)(target);
94
- }
95
-
96
- target.prototype.use = new Proxy(target.prototype.use, {
97
- apply: (originalUse, thisArgUse, argsUse) => {
98
- const [req, res, next, ...args] = argsUse;
99
- const prevSpan = getActiveSpan();
100
-
101
- return startSpanManual(
102
- {
103
- name: target.name,
104
- attributes: {
105
- [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware.nestjs',
106
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.middleware.nestjs',
107
- },
108
- },
109
- (span) => {
110
- const nextProxy = new Proxy(next, {
111
- apply: (originalNext, thisArgNext, argsNext) => {
112
- span.end();
113
-
114
- if (prevSpan) {
115
- withActiveSpan(prevSpan, () => {
116
- return Reflect.apply(originalNext, thisArgNext, argsNext);
117
- });
118
- } else {
119
- return Reflect.apply(originalNext, thisArgNext, argsNext);
120
- }
121
- },
122
- });
123
-
124
- return originalUse.apply(thisArgUse, [req, res, nextProxy, args]);
125
- },
126
- );
127
- },
128
- });
129
- }
130
-
131
- // patch guards
132
- if (typeof target.prototype.canActivate === 'function') {
133
- // patch only once
134
- if (isPatched(target)) {
135
- return original(options)(target);
136
- }
137
-
138
- target.prototype.canActivate = new Proxy(target.prototype.canActivate, {
139
- apply: (originalCanActivate, thisArgCanActivate, argsCanActivate) => {
140
- return startSpan(
141
- {
142
- name: target.name,
143
- attributes: {
144
- [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware.nestjs',
145
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.middleware.nestjs',
146
- },
147
- },
148
- () => {
149
- return originalCanActivate.apply(thisArgCanActivate, argsCanActivate);
150
- },
151
- );
152
- },
153
- });
154
- }
155
-
156
- return original(options)(target);
157
- };
158
- };
159
- };
160
- }
161
- }SentryNestInstrumentation.__initStatic();SentryNestInstrumentation.__initStatic2();
162
-
163
- const instrumentNestCore = generateInstrumentOnce('Nest-Core', () => {
164
- return new NestInstrumentation();
165
- });
166
-
167
- const instrumentNestCommon = generateInstrumentOnce('Nest-Common', () => {
168
- return new SentryNestInstrumentation();
169
- });
170
-
171
- const instrumentNest = Object.assign(
172
- () => {
173
- instrumentNestCore();
174
- instrumentNestCommon();
175
- },
176
- { id: INTEGRATION_NAME },
177
- );
178
-
179
- const _nestIntegration = (() => {
180
- return {
181
- name: INTEGRATION_NAME,
182
- setupOnce() {
183
- instrumentNest();
184
- },
185
- };
186
- }) ;
187
-
188
- /**
189
- * Nest framework integration
190
- *
191
- * Capture tracing data for nest.
192
- */
193
- const nestIntegration = defineIntegration(_nestIntegration);
194
-
195
- /**
196
- * Setup an error handler for Nest.
197
- */
198
- function setupNestErrorHandler(app, baseFilter) {
199
- // Sadly, NestInstrumentation has no requestHook, so we need to add the attributes here
200
- // We register this hook in this method, because if we register it in the integration `setup`,
201
- // it would always run even for users that are not even using Nest.js
202
- const client = getClient();
203
- if (client) {
204
- client.on('spanStart', span => {
205
- addNestSpanAttributes(span);
206
- });
207
- }
208
-
209
- app.useGlobalInterceptors({
210
- intercept(context, next) {
211
- if (getIsolationScope() === getDefaultIsolationScope()) {
212
- logger.warn('Isolation scope is still the default isolation scope, skipping setting transactionName.');
213
- return next.handle();
214
- }
215
-
216
- if (context.getType() === 'http') {
217
- const req = context.switchToHttp().getRequest();
218
- if (req.route) {
219
- getIsolationScope().setTransactionName(`${_optionalChain([req, 'access', _ => _.method, 'optionalAccess', _2 => _2.toUpperCase, 'call', _3 => _3()]) || 'GET'} ${req.route.path}`);
220
- }
221
- }
222
-
223
- return next.handle();
224
- },
225
- });
226
-
227
- const wrappedFilter = new Proxy(baseFilter, {
228
- get(target, prop, receiver) {
229
- if (prop === 'catch') {
230
- const originalCatch = Reflect.get(target, prop, receiver);
231
-
232
- return (exception, host) => {
233
- const status_code = (exception ).status;
234
-
235
- // don't report expected errors
236
- if (status_code !== undefined) {
237
- return originalCatch.apply(target, [exception, host]);
238
- }
239
-
240
- captureException(exception);
241
- return originalCatch.apply(target, [exception, host]);
242
- };
243
- }
244
- return Reflect.get(target, prop, receiver);
245
- },
246
- });
247
-
248
- app.useGlobalFilters(wrappedFilter);
249
- }
250
-
251
- function addNestSpanAttributes(span) {
252
- const attributes = spanToJSON(span).data || {};
253
-
254
- // this is one of: app_creation, request_context, handler
255
- const type = attributes['nestjs.type'];
256
-
257
- // If this is already set, or we have no nest.js span, no need to process again...
258
- if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {
259
- return;
260
- }
261
-
262
- span.setAttributes({
263
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.nestjs',
264
- [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.nestjs`,
265
- });
266
- }
267
-
268
- export { SentryNestInstrumentation, instrumentNest, isPatched, nestIntegration, setupNestErrorHandler };
269
- //# sourceMappingURL=nest.js.map