getsentry / sentry-javascript

Official Sentry SDKs for JavaScript
https://sentry.io
MIT License
7.87k stars 1.55k forks source link

Sentry treats all Injectable's with `use` function as middleware #13507

Closed asomethings closed 2 weeks ago

asomethings commented 3 weeks ago

Is there an existing issue for this?

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/nestjs

SDK Version

8.27.0

Framework Version

Nest.js 10.4.1

Link to Sentry event

https://sentry.io/issues/5765154861/events/e100e2846c104bb293875be2fcc751c5/?project=4506504369405952

Reproduction Example/SDK Setup

StackBlitz

Create a Injectable class with use method

@Injectable()
export class SomeClass {
  async use(amount: number): Promise<number> {
     return amount - 1
  }
}

Steps to Reproduce

  1. Create a @Injectable() class with use method
  2. Try to use it from anywhere from the code
  3. TypeError: Cannot create proxy with a non-object as target or handler will be thrown

Expected Result

The function should be run normally without errors.

Actual Result

TypeError: Cannot create proxy with a non-object as target or handler will be thrown.

It seems it may apply to functions that sentry tries to proxy it (like transform / canActivate / intercept but not tested)

lforst commented 3 weeks ago

@nicohrubec we should add guards to ensure that we only instrument when we can reasonably assume that we are actually in a middleware.

nicohrubec commented 3 weeks ago

Hey @asomethings, thanks for writing in. I just opened a PR with a fix. Should be merged next week.