Skip to content

fix(nestjs): Improve control flow exception filtering#19524

Merged
nicohrubec merged 7 commits intodevelopfrom
nh/nestjs-report-axios-errors
Feb 25, 2026
Merged

fix(nestjs): Improve control flow exception filtering#19524
nicohrubec merged 7 commits intodevelopfrom
nh/nestjs-report-axios-errors

Conversation

@nicohrubec
Copy link
Member

@nicohrubec nicohrubec commented Feb 25, 2026

Our conditions for dropping control flow errors were a bit broad, leading to silently dropping errors from being sent to Sentry including axios errors.

Closes #19519

@nicohrubec nicohrubec marked this pull request as ready for review February 25, 2026 14:48
@nicohrubec nicohrubec requested a review from chargome February 25, 2026 14:48
@nicohrubec nicohrubec changed the title fix(nestjs): Report axios errors fix(nestjs): Improve control flow exception filtering Feb 25, 2026
*/
export function isExpectedError(exception: unknown): boolean {
if (typeof exception === 'object' && exception !== null) {
return 'status' in exception || 'error' in exception;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

q: Are we dropping the status check on purpose?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we could add it as an additional condition but don't think it's necessary

@github-actions
Copy link
Contributor

size-limit report 📦

Path Size % Change Change
@sentry/browser 25.62 kB - -
@sentry/browser - with treeshaking flags 24.12 kB - -
@sentry/browser (incl. Tracing) 42.42 kB - -
@sentry/browser (incl. Tracing, Profiling) 47.09 kB - -
@sentry/browser (incl. Tracing, Replay) 81.24 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 70.86 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 85.94 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 98.2 kB - -
@sentry/browser (incl. Feedback) 42.43 kB - -
@sentry/browser (incl. sendFeedback) 30.29 kB - -
@sentry/browser (incl. FeedbackAsync) 35.34 kB - -
@sentry/browser (incl. Metrics) 26.79 kB - -
@sentry/browser (incl. Logs) 26.93 kB - -
@sentry/browser (incl. Metrics & Logs) 27.61 kB - -
@sentry/react 27.37 kB - -
@sentry/react (incl. Tracing) 44.76 kB - -
@sentry/vue 30.07 kB - -
@sentry/vue (incl. Tracing) 44.27 kB - -
@sentry/svelte 25.64 kB - -
CDN Bundle 28.16 kB - -
CDN Bundle (incl. Tracing) 43.25 kB - -
CDN Bundle (incl. Logs, Metrics) 29 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 44.09 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 68.08 kB - -
CDN Bundle (incl. Tracing, Replay) 80.13 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 80.99 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 85.64 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 86.53 kB - -
CDN Bundle - uncompressed 82.34 kB - -
CDN Bundle (incl. Tracing) - uncompressed 128.06 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 85.18 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 130.89 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 208.84 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 244.94 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 247.76 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 257.85 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 260.66 kB - -
@sentry/nextjs (client) 47.17 kB - -
@sentry/sveltekit (client) 42.88 kB - -
@sentry/node-core 52.18 kB +0.02% +9 B 🔺
@sentry/node 173.46 kB +0.01% +9 B 🔺
@sentry/node - without tracing 97.33 kB +0.01% +8 B 🔺
@sentry/aws-serverless 113.13 kB +0.01% +8 B 🔺

View base workflow run

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.


// RpcException
if (typeof ex.getError === 'function' && typeof ex.initMessage === 'function') {
return true;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duck-typing check may break for older NestJS versions

Medium Severity

The isExpectedError duck-typing relies on initMessage being a function on both HttpException and RpcException. The package's peerDependencies support @nestjs/common ^8.0.0 || ^9.0.0, but initMessage appears to have been added as a public method in NestJS v10 (older documentation only lists getStatus and getResponse). If initMessage doesn't exist in v8/v9, isExpectedError would always return false, causing HttpException and RpcException to be incorrectly reported to Sentry. The existing nestjs-8 e2e test app has tests verifying these exceptions are NOT sent to Sentry, which would break.

Fix in Cursor Fix in Web

@nicohrubec nicohrubec merged commit 5bbba8a into develop Feb 25, 2026
45 checks passed
@nicohrubec nicohrubec deleted the nh/nestjs-report-axios-errors branch February 25, 2026 15:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[NestJS] SentryGlobalFilter silently drops non-NestJS exceptions that have a status or error property (e.g. AxiosError)

2 participants