diff --git a/packages/opentelemetry-node/src/constants.ts b/packages/opentelemetry-node/src/constants.ts new file mode 100644 index 000000000000..5c179dc5335b --- /dev/null +++ b/packages/opentelemetry-node/src/constants.ts @@ -0,0 +1,3 @@ +export const SENTRY_TRACE_HEADER = 'sentry-trace'; + +export const SENTRY_BAGGAGE_HEADER = 'baggage'; diff --git a/packages/opentelemetry-node/src/index.ts b/packages/opentelemetry-node/src/index.ts index 21b5f209d3a8..501c93432b44 100644 --- a/packages/opentelemetry-node/src/index.ts +++ b/packages/opentelemetry-node/src/index.ts @@ -1,3 +1,4 @@ import '@sentry/tracing'; export { SentrySpanProcessor } from './spanprocessor'; +export { SentryPropagator } from './propagator'; diff --git a/packages/opentelemetry-node/src/propagator.ts b/packages/opentelemetry-node/src/propagator.ts new file mode 100644 index 000000000000..897cc8819e33 --- /dev/null +++ b/packages/opentelemetry-node/src/propagator.ts @@ -0,0 +1,29 @@ +import { Context, TextMapGetter, TextMapPropagator, TextMapSetter } from '@opentelemetry/api'; + +import { SENTRY_BAGGAGE_HEADER, SENTRY_TRACE_HEADER } from './constants'; + +/** + * Injects and extracts `sentry-trace` and `baggage` headers from carriers. + */ +export class SentryPropagator implements TextMapPropagator { + /** + * @inheritDoc + */ + public inject(_context: Context, _carrier: unknown, _setter: TextMapSetter): void { + // no-op + } + + /** + * @inheritDoc + */ + public extract(context: Context, _carrier: unknown, _getter: TextMapGetter): Context { + return context; + } + + /** + * @inheritDoc + */ + public fields(): string[] { + return [SENTRY_TRACE_HEADER, SENTRY_BAGGAGE_HEADER]; + } +} diff --git a/packages/opentelemetry-node/test/propagator.test.ts b/packages/opentelemetry-node/test/propagator.test.ts new file mode 100644 index 000000000000..62311a586b6c --- /dev/null +++ b/packages/opentelemetry-node/test/propagator.test.ts @@ -0,0 +1,10 @@ +import { SENTRY_BAGGAGE_HEADER, SENTRY_TRACE_HEADER } from '../src/constants'; +import { SentryPropagator } from '../src/propagator'; + +describe('SentryPropagator', () => { + const propogator = new SentryPropagator(); + + it('returns fields set', () => { + expect(propogator.fields()).toEqual([SENTRY_TRACE_HEADER, SENTRY_BAGGAGE_HEADER]); + }); +});