import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node' import { trace } from '@opentelemetry/api' export async function register() { if (process.env.NEXT_RUNTIME === 'nodejs') { const provider = new NodeTracerProvider() provider.register({ propagator: { inject(context, carrier, setter) { setter.set(carrier, 'my-test-key-1', 'my-test-value-1') setter.set(carrier, 'my-test-key-2', 'my-test-value-2') // This non-metadata-key-3 is not going to be injected into the page setter.set(carrier, 'non-metadata-key-3', 'non-metadata-key-3') setter.set( carrier, 'my-parent-span-id', trace.getSpanContext(context)?.spanId ?? 'invariant' ) }, extract(context) { // This is a noop because we don't extract in this test return context }, fields() { return [ 'my-parent-span-id', 'my-test-key-1', 'my-test-key-2', 'non-metadata-key-3', ] }, }, }) } }