Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

@sentry/cloudflare: stubs from namespace.jurisdiction() bypass Durable Object instrumentation

Closed Beginner friendly
#24,442 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
86/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
typescript
Domain
observability

Research direction

Start in packages/cloudflare/src/instrumentations/instrumentDurableObjectNamespace.ts, where the get trap currently special-cases get and getByName. Trace how other namespace functions are bound, then verify that jurisdiction() returns a recursively instrumented namespace with RPC trace propagation. Done means stubs obtained through a jurisdiction-restricted namespace produce the same fetch spans and sentry_rpc_meta behavior as direct namespace calls.

Written by the indexing model from the issue text.

Description

Bug Cloudflare Workers Spans
Environment
  • @sentry/cloudflare: 10.74.0 (also present on develop and 11.0.0-beta.2)
  • Caller wrapped with Sentry.withSentry(), enableRpcTracePropagation: true
  • Durable Object namespace restricted to a jurisdiction (env.MY_DO.jurisdiction('eu'))
Description

instrumentDurableObjectNamespace wraps get and getByName so the returned stub gets fetch spans and
RPC trace propagation. Every other function on the namespace, including jurisdiction, goes through
value.bind(target), so a jurisdiction-restricted namespace is the raw binding. Stubs from it get
no fetch span and never append __sentry_rpc_meta__.

That applies to every Durable Object call from an app that uses data-location jurisdictions (for
example EU residency). The traces break at the Durable Object boundary. Combined with the receiver-side gap in #24443, the receiver
also loses all of its telemetry.

Reproduction
const ns = env.MY_DO.jurisdiction('eu');
const stub = ns.get(ns.idFromName('x'));
await stub.someRpcMethod('a'); // receiver sees no __sentry_rpc_meta__; no caller-side span

Compare with env.MY_DO.get(env.MY_DO.idFromName('x')), which does propagate.

Expected

jurisdiction() returns a namespace instrumented the same way, i.e.
instrumentDurableObjectNamespace(value.apply(target, args), propagateRpcTrace).

Code

packages/cloudflare/src/instrumentations/instrumentDurableObjectNamespace.ts: the get trap only
special-cases get/getByName.

Dominant language
TypeScript
Stars
8.7k
Forks
1.9k
Avg merge
1d 16h
Merged PRs (30d)
576

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from getsentry/sentry-javascript

All issues in getsentry/sentry-javascript

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.