Skip to content

feat: add tracesSampler callback and integrations array to SentryConfig#5

Merged
benminer merged 3 commits intomainfrom
feat/backend-migration-support
Apr 3, 2026
Merged

feat: add tracesSampler callback and integrations array to SentryConfig#5
benminer merged 3 commits intomainfrom
feat/backend-migration-support

Conversation

@benminer
Copy link
Copy Markdown
Collaborator

@benminer benminer commented Apr 3, 2026

Summary

Adds two new optional fields to SentryConfig to unblock the backend monorepo migration from direct Sentry/Pyroscope initialization to observability-js.

  • tracesSampler — custom sampling callback invoked after the built-in ignoredRoutes check and before the default sampleRate fallback. Returns number | undefined; returning undefined falls through to sampleRate. Enables the backend to suppress traces for specific customers (e.g. QAWolf test accounts) without patching the library.
  • integrations — array of additional Sentry integrations spread after the hardcoded defaults (expressIntegration, nodeProfilingIntegration). Enables consumers to register prismaIntegration(), rewriteFramesIntegration(), etc.

Both fields flow unchanged through resolveConfig into ResolvedConfig.sentry. Types are derived from the already-declared @sentry/node dependency via NodeOptions utility types — no new imports or dependencies added.

Also relaxes engines.node from >= 24 to >= 20 so the package installs cleanly on backends not yet on Node 24 (.nvmrc stays at 24 for local dev).

Testing

5 new tests in filtering.test.ts cover the sampler composition logic:

  • fallback to sampleRate when no custom sampler is provided
  • custom sampler return value overrides sampleRate
  • undefined return falls through to sampleRate
  • ignoredRoutes short-circuits before the custom sampler is called
  • fractional sample rates pass through correctly

@benminer benminer merged commit 78db0fb into main Apr 3, 2026
1 check passed
benminer added a commit that referenced this pull request Apr 13, 2026
- types.ts: derive SentryIntegration via ReturnType<typeof Sentry.expressIntegration>
  instead of fragile Extract<NodeOptions['integrations'], unknown[]>[number]
- config.ts: clamp tracesSampler return value through clampSampleRate(), consistent
  with how sampleRate is handled
- provider.ts: extract tracesSampler composition into exported buildTracesSampler()
  so the logic can be unit-tested directly
- filtering.test.ts: replace duplicated makeSampler local copy with buildTracesSampler
  from the real implementation, so tests actually cover provider.ts logic
benminer added a commit that referenced this pull request Apr 13, 2026
* feat!: upgrade OpenTelemetry to 2.x, bump to v2.0.0

- sdk-trace-node ^1.25.0 → ^2.6.1
- resources ^1.25.0 → ^2.6.1
- exporter-trace-otlp-http ^0.52.0 → ^0.214.0
- semantic-conventions ^1.25.0 → ^1.40.0

OTEL 2.x API changes applied:
- new Resource({}) → resourceFromAttributes() factory function
- provider.addSpanProcessor() → spanProcessors: [] in constructor config
- SEMRESATTRS_DEPLOYMENT_ENVIRONMENT → ATTR_DEPLOYMENT_ENVIRONMENT_NAME
  from @opentelemetry/semantic-conventions/incubating (changes resource
  attribute key from deployment.environment to deployment.environment.name)

Fixes the sdk-trace-base version mismatch crash seen in downstream
consumers that pin OTEL packages to 2.x globally.

* fix: address code review findings from PR #5

- types.ts: derive SentryIntegration via ReturnType<typeof Sentry.expressIntegration>
  instead of fragile Extract<NodeOptions['integrations'], unknown[]>[number]
- config.ts: clamp tracesSampler return value through clampSampleRate(), consistent
  with how sampleRate is handled
- provider.ts: extract tracesSampler composition into exported buildTracesSampler()
  so the logic can be unit-tested directly
- filtering.test.ts: replace duplicated makeSampler local copy with buildTracesSampler
  from the real implementation, so tests actually cover provider.ts logic
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.

1 participant