Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 2 additions & 3 deletions packages/node-core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,16 @@
Unlike the `@sentry/node` SDK, this SDK comes with no OpenTelemetry auto-instrumentation out of the box. It requires the following OpenTelemetry dependencies and supports both v1 and v2 of OpenTelemetry:

- `@opentelemetry/api`
- `@opentelemetry/core`
- `@opentelemetry/instrumentation`
- `@opentelemetry/sdk-trace-base`

## Installation

```bash
npm install @sentry/node-core @sentry/opentelemetry @opentelemetry/api @opentelemetry/core @opentelemetry/instrumentation @opentelemetry/sdk-trace-base
npm install @sentry/node-core @sentry/opentelemetry @opentelemetry/api @opentelemetry/instrumentation @opentelemetry/sdk-trace-base

# Or yarn
yarn add @sentry/node-core @sentry/opentelemetry @opentelemetry/api @opentelemetry/core @opentelemetry/instrumentation @opentelemetry/sdk-trace-base
yarn add @sentry/node-core @sentry/opentelemetry @opentelemetry/api @opentelemetry/instrumentation @opentelemetry/sdk-trace-base
```

## Usage
Expand Down
5 changes: 0 additions & 5 deletions packages/node-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@
},
"peerDependencies": {
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/core": "^1.30.1 || ^2.1.0",
"@opentelemetry/instrumentation": ">=0.57.1 <1",
"@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0",
"@opentelemetry/exporter-trace-otlp-http": ">=0.57.0 <1"
Expand All @@ -87,9 +86,6 @@
"@opentelemetry/api": {
"optional": true
},
"@opentelemetry/core": {
"optional": true
},
"@opentelemetry/instrumentation": {
"optional": true
},
Expand All @@ -108,7 +104,6 @@
},
"devDependencies": {
"@opentelemetry/api": "^1.9.1",
"@opentelemetry/core": "^2.9.0",
"@opentelemetry/exporter-trace-otlp-http": "^0.220.0",
"@opentelemetry/instrumentation": "^0.220.0",
"@opentelemetry/sdk-trace-base": "^2.9.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
import { errorMonitor } from 'node:events';
import type { IncomingHttpHeaders } from 'node:http';
import { context } from '@opentelemetry/api';
import type { RPCMetadata } from '@opentelemetry/core';
import { RPCType, setRPCMetadata } from '@opentelemetry/core';
import type { RPCMetadata } from './vendored/rpcMetadata';
import { RPCType, setRPCMetadata } from './vendored/rpcMetadata';
import {
HTTP_CLIENT_IP,
HTTP_FLAVOR,
Expand Down
34 changes: 34 additions & 0 deletions packages/node-core/src/integrations/http/vendored/rpcMetadata.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*
* NOTICE from the Sentry authors:
* - Vendored from: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core/src/trace/rpc-metadata.ts
* - Upstream version: @opentelemetry/core@2.9.0
* - `getRPCMetadata` and `deleteRPCMetadata` were removed since they're not used
*/

import type { Context, Span } from '@opentelemetry/api';
import { createContextKey } from '@opentelemetry/api';

const RPC_METADATA_KEY = createContextKey('OpenTelemetry SDK Context Key RPC_METADATA');

export enum RPCType {
HTTP = 'http',
}

type HTTPMetadata = {
type: RPCType.HTTP;
route?: string;
span: Span;
};

/**
* Allows for future rpc metadata to be used with this mechanism
*/
export type RPCMetadata = HTTPMetadata;

/** Set the current RPC metadata on the given context. */
export function setRPCMetadata(context: Context, meta: RPCMetadata): Context {
return context.setValue(RPC_METADATA_KEY, meta);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Vendored RPC key breaks interop

High Severity

createContextKey returns a unique symbol on every call, so this vendored RPC_METADATA_KEY is not the same key as @opentelemetry/core's. Framework instrumentations (Express, Fastify, Koa, etc.) call getRPCMetadata from @opentelemetry/core and will no longer find the metadata httpServerSpansIntegration stores, so rpcMetadata.route stays unset and http.route / transaction-name updates from that path are lost for @sentry/node-core bring-your-own-OTel setups.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c56eb18. Configure here.

@msonnb msonnb Jul 16, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

this shouldn't be a problem since createContextKey calls Symbol.for under the hood. So if we keep the string exactly the same, this resolves to the same key. See https://github.com/open-telemetry/opentelemetry-js/blob/d8894cf99074d487203e1b814d9c3679019b63d3/api/src/context/context.ts#L13

Loading