Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
ba814ec
feat(node)!: Make channel-based instrumentation the default
andreiborza Jul 22, 2026
f7651ca
Use the channel-based Express integration by default
andreiborza Jul 22, 2026
8675e41
Use the channel-based Koa integration by default
andreiborza Jul 22, 2026
eb3c3c0
Use the channel-based Hapi integration by default
andreiborza Jul 22, 2026
417c3ea
Use the channel-based Mongo integration by default
andreiborza Jul 22, 2026
2d8a631
Use the channel-based Mongoose integration by default
andreiborza Jul 22, 2026
57ef73c
Use the channel-based Tedious integration by default
andreiborza Jul 22, 2026
04b1106
Use the channel-based GenericPool integration by default
andreiborza Jul 22, 2026
1e9fe39
Use the channel-based LruMemoizer integration by default
andreiborza Jul 22, 2026
234b66e
Use the channel-based Amqplib integration by default
andreiborza Jul 22, 2026
48dc84e
Use the channel-based Kafka integration by default
andreiborza Jul 22, 2026
9f54974
Use the channel-based Mysql2 integration by default
andreiborza Jul 22, 2026
27ffd52
Use the channel-based Mysql integration by default
andreiborza Jul 22, 2026
688d486
Use the channel-based Postgres integration by default
andreiborza Jul 22, 2026
5af758c
Use the channel-based PostgresJs integration by default
andreiborza Jul 22, 2026
6523470
Use the channel-based Graphql integration by default
andreiborza Jul 22, 2026
0e29371
Use the channel-based Firebase integration by default
andreiborza Jul 22, 2026
4a58aba
Use the channel-based OpenAI integration by default
andreiborza Jul 22, 2026
e48c96b
Use the channel-based Anthropic integration by default
andreiborza Jul 22, 2026
f8cc62f
Use the channel-based Google GenAI integration by default
andreiborza Jul 22, 2026
72a7e7c
Use the channel-based LangChain integration by default
andreiborza Jul 22, 2026
bdc7743
Use the channel-based LangGraph integration by default
andreiborza Jul 22, 2026
4ebec3d
Use the channel-based Vercel AI integration by default
andreiborza Jul 22, 2026
26e7f59
Fix e2e tests for channel-based instrumentation default
andreiborza Jul 23, 2026
61f4d9e
Fix koa middleware span assertion and fixme remaining trpc tests
andreiborza Jul 23, 2026
bf5c187
Fixme ai@v3 tests in nextjs-15
andreiborza Jul 23, 2026
7b54972
Propagate mounted-middleware route to http.server span in channel Exp…
andreiborza Jul 23, 2026
f93d358
Use channel-based aws-sdk integration in @sentry/aws-serverless
andreiborza Jul 23, 2026
21953cc
Bump @sentry/node size limits for channel-based default
andreiborza Jul 23, 2026
27302e1
Fix stale span-origin assertions in node integration tests
andreiborza Jul 23, 2026
3c153aa
Resolve SENTRY_TRACES_SAMPLE_RATE before gating channel hook registra…
andreiborza Jul 23, 2026
918f990
Drop non-finite SENTRY_TRACES_SAMPLE_RATE when gating nextjs channel …
andreiborza Jul 23, 2026
f462aeb
Drop obsolete nextjs tracingHooksDir channel-hook workaround
andreiborza Jul 24, 2026
797e4c2
Bump node/aws-serverless size limits for bundled orchestrion runtime
andreiborza Jul 24, 2026
94ca5f2
Add headroom to node size limits for CI gzip variance
andreiborza Jul 24, 2026
a640e0c
Populate default integrations from server-utils channel integrations
andreiborza Jul 24, 2026
4dab6a2
Stop invoking vendored OTel redis fallback in channel-default node SDK
andreiborza Jul 24, 2026
50303d9
Drop experimental tag and redundant runtime-hook comments from channe…
andreiborza Jul 24, 2026
26943bb
Drop redundant channel-default comments from e2e test apps
andreiborza Jul 24, 2026
506f090
Bump nextjs-15/16 e2e apps to ai@v4 and re-enable gen_ai span tests
andreiborza Jul 24, 2026
58bf4fc
Revert "Bump nextjs-15/16 e2e apps to ai@v4 and re-enable gen_ai span…
andreiborza Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 2 additions & 14 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -782,8 +782,8 @@ jobs:

job_node_integration_tests:
name:
Node (${{ matrix.node }})${{ (matrix.typescript && format(' (TS {0})', matrix.typescript)) || '' }}${{
(matrix.use_orchestrion && format(' (Orchestrion)', matrix.use_orchestrion)) || '' }} Integration Tests
Node (${{ matrix.node }})${{ (matrix.typescript && format(' (TS {0})', matrix.typescript)) || '' }} Integration
Tests
needs: [job_get_metadata, job_build]
if: needs.job_build.outputs.changed_node_integration == 'true' || github.event_name != 'pull_request'
runs-on: ubuntu-24.04
Expand All @@ -794,20 +794,10 @@ jobs:
node: [20.19, 22, 24, 26]
typescript:
- false
use_orchestrion:
- false
include:
# Only check typescript for latest version (to streamline CI)
- node: 24
typescript: '5.0'
- node: 20.19
use_orchestrion: 'true'
- node: 22
use_orchestrion: 'true'
- node: 24
use_orchestrion: 'true'
- node: 26
use_orchestrion: 'true'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
uses: actions/checkout@v7
Expand Down Expand Up @@ -843,8 +833,6 @@ jobs:
- name: Run integration tests
working-directory: dev-packages/node-integration-tests
run: yarn test
env:
INJECT_ORCHESTRION: ${{ matrix.use_orchestrion }}

job_cloudflare_integration_tests:
name: Cloudflare Integration Tests
Expand Down
15 changes: 3 additions & 12 deletions .size-limit.js
Original file line number Diff line number Diff line change
Expand Up @@ -381,16 +381,7 @@ module.exports = [
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '129 KB',
disablePlugins: ['@size-limit/esbuild'],
},
{
name: '@sentry/node (incl. diagnostics channel injection)',
path: 'packages/node/build/esm/index.js',
import: createImport('init', 'experimentalUseDiagnosticsChannelInjection'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '173 KB',
limit: '159 KB',
disablePlugins: ['@size-limit/esbuild'],
},
{
Expand All @@ -406,7 +397,7 @@ module.exports = [
path: 'packages/node/build/esm/index.js',
import: createImport('initWithoutDefaultIntegrations', 'getDefaultIntegrationsWithoutPerformance'),
gzip: true,
limit: '79 KB',
limit: '98 KB',
disablePlugins: ['@size-limit/esbuild'],
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
modifyWebpackConfig: function (config) {
Expand All @@ -430,7 +421,7 @@ module.exports = [
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '88 KB',
limit: '106 KB',
disablePlugins: ['@size-limit/esbuild'],
},
// Cloudflare SDK (ESM) - compressed, minified to match `wrangler deploy --dry-run --minify` output
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
import * as Sentry from '@sentry/astro';
import { experimentalUseDiagnosticsChannelInjection } from '@sentry/node';

// Registers the diagnostics-channel subscribers that turn the build-time
// injected channel events (from the orchestrion Vite plugin) into Sentry spans.
// Must run before Sentry.init()
experimentalUseDiagnosticsChannelInjection();

Sentry.init({
traceLifecycle: 'static',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
const Sentry = require('@sentry/remix');

const injectOrchestrion = process.env.INJECT_ORCHESTRION === 'true';

if (injectOrchestrion) {
// Opt into diagnostics-channel-based auto-instrumentation. This registers the
// channel subscribers (e.g. for mysql and ioredis) that turn the
// diagnostics-channel events - injected at build time by the orchestrion Vite
// plugin (see vite.config.ts) - into Sentry spans. Must run before Sentry.init().
Sentry.experimentalUseDiagnosticsChannelInjection();
}

Sentry.init({
traceLifecycle: 'static',
tracesSampleRate: 1.0, // Capture 100% of the transactions, reduce in production!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ test('Sends an API route transaction', async ({ baseURL }) => {
span_id: expect.stringMatching(/[a-f0-9]{16}/),
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.origin': 'auto.http.otel.nestjs',
'sentry.origin': 'auto.http.orchestrion.nestjs',
'sentry.op': 'handler.nestjs',
component: '@nestjs/core',
'nestjs.version': expect.any(String),
Expand All @@ -118,7 +118,7 @@ test('Sends an API route transaction', async ({ baseURL }) => {
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
origin: 'auto.http.otel.nestjs',
origin: 'auto.http.orchestrion.nestjs',
op: 'handler.nestjs',
},
]),
Expand Down Expand Up @@ -154,15 +154,15 @@ test('API route transaction includes nest middleware span. Spans created in and
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs',
'sentry.origin': 'auto.middleware.orchestrion.nestjs',
},
description: 'ExampleMiddleware',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs',
origin: 'auto.middleware.orchestrion.nestjs',
},
]),
}),
Expand Down Expand Up @@ -234,15 +234,15 @@ test('API route transaction includes nest guard span and span started in guard i
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.guard',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.guard',
},
description: 'ExampleGuard',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.guard',
origin: 'auto.middleware.orchestrion.nestjs.guard',
},
]),
}),
Expand Down Expand Up @@ -298,15 +298,15 @@ test('API route transaction includes nest pipe span for valid request', async ({
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.pipe',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.pipe',
},
description: 'ParseIntPipe',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.pipe',
origin: 'auto.middleware.orchestrion.nestjs.pipe',
},
]),
}),
Expand Down Expand Up @@ -335,15 +335,15 @@ test('API route transaction includes nest pipe span for invalid request', async
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.pipe',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.pipe',
},
description: 'ParseIntPipe',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'internal_error',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.pipe',
origin: 'auto.middleware.orchestrion.nestjs.pipe',
},
]),
}),
Expand Down Expand Up @@ -374,30 +374,30 @@ test('API route transaction includes nest interceptor spans before route executi
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'ExampleInterceptor1',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
{
span_id: expect.stringMatching(/[a-f0-9]{16}/),
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'ExampleInterceptor2',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
]),
}),
Expand Down Expand Up @@ -492,15 +492,15 @@ test('API route transaction includes exactly one nest interceptor span after rou
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'Interceptors - After Route',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
]),
}),
Expand Down Expand Up @@ -574,15 +574,15 @@ test('API route transaction includes nest async interceptor spans before route e
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'AsyncInterceptor',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
]),
}),
Expand Down Expand Up @@ -659,15 +659,15 @@ test('API route transaction includes exactly one nest async interceptor span aft
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'Interceptors - After Route',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
]),
}),
Expand Down
Loading
Loading