🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@sentry/core

Package Overview
Dependencies
Maintainers
1
Versions
712
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sentry/core - npm Package Compare versions

Comparing version
10.59.0
to
10.60.0
+114
build/cjs/tracing/bindScopeToEmitter.js
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const currentScopes = require('../currentScopes.js');
const ADD_LISTENER_METHODS = [
"addListener",
"on",
"once",
"prependListener",
"prependOnceListener",
"addEventListener"
];
const REMOVE_LISTENER_METHODS = ["removeListener", "off", "removeEventListener"];
const SCOPE_BOUND_LISTENERS = /* @__PURE__ */ Symbol("SentryScopeBoundListeners");
let registeringWrapper;
function isReentrantWrapperRegistration(listener) {
return registeringWrapper !== void 0 && (listener === registeringWrapper || listener.listener === registeringWrapper);
}
function bindScopeToEmitter(emitter, scope = currentScopes.getCurrentScope()) {
const ee = emitter;
if (getPatchMap(ee)) {
return emitter;
}
createPatchMap(ee);
for (const methodName of ADD_LISTENER_METHODS) {
if (typeof ee[methodName] !== "function") {
continue;
}
ee[methodName] = patchAddListener(ee, ee[methodName], scope);
}
for (const methodName of REMOVE_LISTENER_METHODS) {
if (typeof ee[methodName] !== "function") {
continue;
}
ee[methodName] = patchRemoveListener(ee, ee[methodName]);
}
if (typeof ee.removeAllListeners === "function") {
ee.removeAllListeners = patchRemoveAllListeners(ee, ee.removeAllListeners);
}
return emitter;
}
function bindListenerToScope(listener, scope) {
return function(...args) {
return currentScopes.withScope(scope, () => listener.apply(this, args));
};
}
function isBoundListener(listener) {
return typeof listener === "function";
}
function patchAddListener(ee, original, scope) {
return function(...args) {
const event = args[0];
const listener = args[1];
const rest = args.slice(2);
if (!isBoundListener(listener) || isReentrantWrapperRegistration(listener)) {
return original.apply(this, args);
}
const map = getPatchMap(ee) || createPatchMap(ee);
let listeners = map.get(event);
if (!listeners) {
listeners = /* @__PURE__ */ new WeakMap();
map.set(event, listeners);
}
let boundListener = listeners.get(listener);
if (!boundListener) {
boundListener = bindListenerToScope(listener, scope);
listeners.set(listener, boundListener);
}
const previous = registeringWrapper;
registeringWrapper = boundListener;
try {
return original.call(this, event, boundListener, ...rest);
} finally {
registeringWrapper = previous;
}
};
}
function patchRemoveListener(ee, original) {
return function(...args) {
const event = args[0];
const listener = args[1];
const rest = args.slice(2);
const boundListener = isBoundListener(listener) ? getPatchMap(ee)?.get(event)?.get(listener) : void 0;
if (!boundListener) {
return original.apply(this, args);
}
return original.call(this, event, boundListener, ...rest);
};
}
function patchRemoveAllListeners(ee, original) {
return function(...args) {
const map = getPatchMap(ee);
if (map) {
if (args.length === 0) {
createPatchMap(ee);
} else {
const event = args[0];
map.delete(event);
}
}
return original.apply(this, args);
};
}
function createPatchMap(ee) {
const map = /* @__PURE__ */ new Map();
ee[SCOPE_BOUND_LISTENERS] = map;
return map;
}
function getPatchMap(ee) {
return ee[SCOPE_BOUND_LISTENERS];
}
exports.bindScopeToEmitter = bindScopeToEmitter;
//# sourceMappingURL=bindScopeToEmitter.js.map
{"version":3,"file":"bindScopeToEmitter.js","sources":["../../../src/tracing/bindScopeToEmitter.ts"],"sourcesContent":["import { getCurrentScope, withScope } from '../currentScopes';\nimport type { Scope } from '../scope';\n\ntype BoundListener = (...args: unknown[]) => unknown;\n\n/**\n * Per-event map from a user-provided listener to its single scope-bound wrapper. We reuse one stable\n * wrapper per listener (rather than minting a new one per registration) and let the underlying\n * emitter/target handle repeat registrations:\n * - Node's `EventEmitter` allows duplicates and counts them, so registering the same wrapper N times\n * fires N times and `removeListener` removes one instance per call — no orphaned wrappers.\n * - the DOM `EventTarget` dedupes by `(type, callback, capture)`, so reusing the wrapper preserves\n * that idempotency; a fresh wrapper per call would defeat it and fire the listener repeatedly.\n */\ntype ListenerPatchMap = Map<string, WeakMap<BoundListener, BoundListener>>;\n\n// We patch both Node.js `EventEmitter` registration methods (`on`, `addListener`, ...) and the DOM\n// `EventTarget.addEventListener`, so this works for Node emitters and browser-native event targets.\n\n/** Listener-registration methods we patch so listeners inherit the bound scope. */\nconst ADD_LISTENER_METHODS = [\n 'addListener',\n 'on',\n 'once',\n 'prependListener',\n 'prependOnceListener',\n 'addEventListener',\n] as const;\n/** Listener-removal methods we patch so removals find the scope-bound wrapper. */\nconst REMOVE_LISTENER_METHODS = ['removeListener', 'off', 'removeEventListener'] as const;\n\n/** Symbol under which the patch map is stashed on a bound emitter. */\nconst SCOPE_BOUND_LISTENERS = Symbol('SentryScopeBoundListeners');\n\n/**\n * Minimal structural type for a Node.js-style `EventEmitter` or DOM `EventTarget`. We intentionally\n * avoid importing `node:events` so this stays usable in non-Node environments — objects without any\n * of these methods simply pass through untouched.\n */\ntype EventEmitterLike = Record<string, unknown>;\n\n// Tracks the scope-bound wrapper currently being registered. Node's `once`/`prependOnceListener`\n// synchronously re-enter `on`/`prependListener`, passing an internal \"once wrapper\" whose `.listener`\n// is our wrapper; that re-entry must not be wrapped again. We scope the guard to that exact wrapper\n// rather than using a blanket flag for the whole registration, so unrelated listeners added in the same\n// synchronous window — e.g. from a Node `newListener` handler, or on another bound emitter — are still\n// wrapped and keep their scope. Binding is synchronous, so a module-level value (with save/restore for\n// nesting) is safe here.\nlet registeringWrapper: BoundListener | undefined;\n\n// True when `listener` is the wrapper we're mid-registering, or a Node once-wrapper around it (Node sets\n// `.listener` on the once-wrapper to the function we passed). These are the only re-entrant adds to skip.\nfunction isReentrantWrapperRegistration(listener: BoundListener): boolean {\n return (\n registeringWrapper !== undefined &&\n (listener === registeringWrapper || (listener as { listener?: unknown }).listener === registeringWrapper)\n );\n}\n\n/**\n * Binds a scope to the given event emitter, so that any listener added to it runs with that scope\n * (and therefore the active span) active — even if the listener fires later, in a different async\n * context.\n *\n * By default the currently active scope is bound, captured at the time this function is called.\n * Pass an explicit `scope` to bind a different one.\n *\n * This is useful when instrumenting APIs that hand back an event emitter (e.g. a streamed database\n * query) whose `'data'` / `'error'` / `'end'` listeners would otherwise lose the trace context.\n *\n * Works with both Node.js `EventEmitter`s (`on`, `addListener`, ...) and DOM `EventTarget`s\n * (`addEventListener`). Objects exposing none of these methods are returned untouched.\n *\n * The isolation scope is intentionally not captured — it is carried along by the active async\n * context. This mirrors the event-emitter behavior of OpenTelemetry's `ContextManager.bind`.\n */\nexport function bindScopeToEmitter<T extends object>(emitter: T, scope: Scope = getCurrentScope()): T {\n const ee = emitter as EventEmitterLike;\n\n // Already bound -> nothing to do.\n if (getPatchMap(ee)) {\n return emitter;\n }\n\n createPatchMap(ee);\n\n for (const methodName of ADD_LISTENER_METHODS) {\n if (typeof ee[methodName] !== 'function') {\n continue;\n }\n ee[methodName] = patchAddListener(ee, ee[methodName] as BoundListener, scope);\n }\n\n for (const methodName of REMOVE_LISTENER_METHODS) {\n if (typeof ee[methodName] !== 'function') {\n continue;\n }\n ee[methodName] = patchRemoveListener(ee, ee[methodName] as BoundListener);\n }\n\n if (typeof ee.removeAllListeners === 'function') {\n ee.removeAllListeners = patchRemoveAllListeners(ee, ee.removeAllListeners as BoundListener);\n }\n\n return emitter;\n}\n\n/** Wraps a listener so it runs with the given scope active. */\nfunction bindListenerToScope(listener: BoundListener, scope: Scope): BoundListener {\n return function (this: unknown, ...args: unknown[]) {\n return withScope(scope, () => listener.apply(this, args));\n };\n}\n\nfunction isBoundListener(listener: unknown): listener is BoundListener {\n return typeof listener === 'function';\n}\n\nfunction patchAddListener(ee: EventEmitterLike, original: BoundListener, scope: Scope): BoundListener {\n return function (this: unknown, ...args: unknown[]) {\n const event = args[0] as string;\n const listener = args[1];\n // Extra args (e.g. the `options` argument of `addEventListener`) must be forwarded verbatim.\n const rest = args.slice(2);\n\n // Pass through what we must not wrap: non-function listeners (e.g. `EventListener` objects passed to\n // `addEventListener`) and the re-entrant once-wrapper registration. Anything else is wrapped, even\n // when added synchronously mid-registration.\n if (!isBoundListener(listener) || isReentrantWrapperRegistration(listener)) {\n return original.apply(this, args);\n }\n\n const map = getPatchMap(ee) || createPatchMap(ee);\n let listeners = map.get(event);\n if (!listeners) {\n listeners = new WeakMap();\n map.set(event, listeners);\n }\n\n // Reuse one stable wrapper per listener so repeat registrations are handled correctly by the\n // underlying emitter/target (Node counts duplicates; the DOM dedupes by `(callback, capture)`).\n let boundListener = listeners.get(listener);\n if (!boundListener) {\n boundListener = bindListenerToScope(listener, scope);\n listeners.set(listener, boundListener);\n }\n\n const previous = registeringWrapper;\n registeringWrapper = boundListener;\n try {\n return original.call(this, event, boundListener, ...rest);\n } finally {\n registeringWrapper = previous;\n }\n };\n}\n\n// Unlike `patchRemoveAllListeners`, this intentionally leaves the map entry in place: Node counts\n// duplicate registrations, so the same wrapper may still be registered after removing one instance,\n// and later `removeListener` calls need the mapping to find it. The entry is in a `WeakMap` keyed by\n// the user listener, so it is GC'd once the user drops their reference — no manual cleanup needed.\nfunction patchRemoveListener(ee: EventEmitterLike, original: BoundListener): BoundListener {\n return function (this: unknown, ...args: unknown[]) {\n const event = args[0] as string;\n const listener = args[1];\n const rest = args.slice(2);\n\n const boundListener = isBoundListener(listener) ? getPatchMap(ee)?.get(event)?.get(listener) : undefined;\n if (!boundListener) {\n return original.apply(this, args);\n }\n // Pass the same stable wrapper and forward the caller's extra args (e.g. the `capture` option of\n // `removeEventListener`) unchanged, so the emitter/target matches the right registration itself.\n return original.call(this, event, boundListener, ...rest);\n };\n}\n\n// Safe to drop map entries here (unlike `patchRemoveListener`): this removes *every* listener for the\n// event at once, so no registration referencing those wrappers remains. It also reclaims keys from the\n// strong outer `Map` (keyed by event-name strings), which would otherwise accumulate indefinitely.\nfunction patchRemoveAllListeners(ee: EventEmitterLike, original: BoundListener): BoundListener {\n return function (this: unknown, ...args: unknown[]) {\n const map = getPatchMap(ee);\n if (map) {\n if (args.length === 0) {\n // `removeAllListeners()` with no event clears everything -> reset the map.\n createPatchMap(ee);\n } else {\n const event = args[0] as string;\n map.delete(event);\n }\n }\n return original.apply(this, args);\n };\n}\n\nfunction createPatchMap(ee: EventEmitterLike): ListenerPatchMap {\n const map: ListenerPatchMap = new Map();\n (ee as Record<symbol, ListenerPatchMap>)[SCOPE_BOUND_LISTENERS] = map;\n return map;\n}\n\nfunction getPatchMap(ee: EventEmitterLike): ListenerPatchMap | undefined {\n return (ee as Record<symbol, ListenerPatchMap | undefined>)[SCOPE_BOUND_LISTENERS];\n}\n"],"names":["getCurrentScope","withScope"],"mappings":"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"}
import { getCurrentScope, withScope } from '../currentScopes.js';
const ADD_LISTENER_METHODS = [
"addListener",
"on",
"once",
"prependListener",
"prependOnceListener",
"addEventListener"
];
const REMOVE_LISTENER_METHODS = ["removeListener", "off", "removeEventListener"];
const SCOPE_BOUND_LISTENERS = /* @__PURE__ */ Symbol("SentryScopeBoundListeners");
let registeringWrapper;
function isReentrantWrapperRegistration(listener) {
return registeringWrapper !== void 0 && (listener === registeringWrapper || listener.listener === registeringWrapper);
}
function bindScopeToEmitter(emitter, scope = getCurrentScope()) {
const ee = emitter;
if (getPatchMap(ee)) {
return emitter;
}
createPatchMap(ee);
for (const methodName of ADD_LISTENER_METHODS) {
if (typeof ee[methodName] !== "function") {
continue;
}
ee[methodName] = patchAddListener(ee, ee[methodName], scope);
}
for (const methodName of REMOVE_LISTENER_METHODS) {
if (typeof ee[methodName] !== "function") {
continue;
}
ee[methodName] = patchRemoveListener(ee, ee[methodName]);
}
if (typeof ee.removeAllListeners === "function") {
ee.removeAllListeners = patchRemoveAllListeners(ee, ee.removeAllListeners);
}
return emitter;
}
function bindListenerToScope(listener, scope) {
return function(...args) {
return withScope(scope, () => listener.apply(this, args));
};
}
function isBoundListener(listener) {
return typeof listener === "function";
}
function patchAddListener(ee, original, scope) {
return function(...args) {
const event = args[0];
const listener = args[1];
const rest = args.slice(2);
if (!isBoundListener(listener) || isReentrantWrapperRegistration(listener)) {
return original.apply(this, args);
}
const map = getPatchMap(ee) || createPatchMap(ee);
let listeners = map.get(event);
if (!listeners) {
listeners = /* @__PURE__ */ new WeakMap();
map.set(event, listeners);
}
let boundListener = listeners.get(listener);
if (!boundListener) {
boundListener = bindListenerToScope(listener, scope);
listeners.set(listener, boundListener);
}
const previous = registeringWrapper;
registeringWrapper = boundListener;
try {
return original.call(this, event, boundListener, ...rest);
} finally {
registeringWrapper = previous;
}
};
}
function patchRemoveListener(ee, original) {
return function(...args) {
const event = args[0];
const listener = args[1];
const rest = args.slice(2);
const boundListener = isBoundListener(listener) ? getPatchMap(ee)?.get(event)?.get(listener) : void 0;
if (!boundListener) {
return original.apply(this, args);
}
return original.call(this, event, boundListener, ...rest);
};
}
function patchRemoveAllListeners(ee, original) {
return function(...args) {
const map = getPatchMap(ee);
if (map) {
if (args.length === 0) {
createPatchMap(ee);
} else {
const event = args[0];
map.delete(event);
}
}
return original.apply(this, args);
};
}
function createPatchMap(ee) {
const map = /* @__PURE__ */ new Map();
ee[SCOPE_BOUND_LISTENERS] = map;
return map;
}
function getPatchMap(ee) {
return ee[SCOPE_BOUND_LISTENERS];
}
export { bindScopeToEmitter };
//# sourceMappingURL=bindScopeToEmitter.js.map
{"version":3,"file":"bindScopeToEmitter.js","sources":["../../../src/tracing/bindScopeToEmitter.ts"],"sourcesContent":["import { getCurrentScope, withScope } from '../currentScopes';\nimport type { Scope } from '../scope';\n\ntype BoundListener = (...args: unknown[]) => unknown;\n\n/**\n * Per-event map from a user-provided listener to its single scope-bound wrapper. We reuse one stable\n * wrapper per listener (rather than minting a new one per registration) and let the underlying\n * emitter/target handle repeat registrations:\n * - Node's `EventEmitter` allows duplicates and counts them, so registering the same wrapper N times\n * fires N times and `removeListener` removes one instance per call — no orphaned wrappers.\n * - the DOM `EventTarget` dedupes by `(type, callback, capture)`, so reusing the wrapper preserves\n * that idempotency; a fresh wrapper per call would defeat it and fire the listener repeatedly.\n */\ntype ListenerPatchMap = Map<string, WeakMap<BoundListener, BoundListener>>;\n\n// We patch both Node.js `EventEmitter` registration methods (`on`, `addListener`, ...) and the DOM\n// `EventTarget.addEventListener`, so this works for Node emitters and browser-native event targets.\n\n/** Listener-registration methods we patch so listeners inherit the bound scope. */\nconst ADD_LISTENER_METHODS = [\n 'addListener',\n 'on',\n 'once',\n 'prependListener',\n 'prependOnceListener',\n 'addEventListener',\n] as const;\n/** Listener-removal methods we patch so removals find the scope-bound wrapper. */\nconst REMOVE_LISTENER_METHODS = ['removeListener', 'off', 'removeEventListener'] as const;\n\n/** Symbol under which the patch map is stashed on a bound emitter. */\nconst SCOPE_BOUND_LISTENERS = Symbol('SentryScopeBoundListeners');\n\n/**\n * Minimal structural type for a Node.js-style `EventEmitter` or DOM `EventTarget`. We intentionally\n * avoid importing `node:events` so this stays usable in non-Node environments — objects without any\n * of these methods simply pass through untouched.\n */\ntype EventEmitterLike = Record<string, unknown>;\n\n// Tracks the scope-bound wrapper currently being registered. Node's `once`/`prependOnceListener`\n// synchronously re-enter `on`/`prependListener`, passing an internal \"once wrapper\" whose `.listener`\n// is our wrapper; that re-entry must not be wrapped again. We scope the guard to that exact wrapper\n// rather than using a blanket flag for the whole registration, so unrelated listeners added in the same\n// synchronous window — e.g. from a Node `newListener` handler, or on another bound emitter — are still\n// wrapped and keep their scope. Binding is synchronous, so a module-level value (with save/restore for\n// nesting) is safe here.\nlet registeringWrapper: BoundListener | undefined;\n\n// True when `listener` is the wrapper we're mid-registering, or a Node once-wrapper around it (Node sets\n// `.listener` on the once-wrapper to the function we passed). These are the only re-entrant adds to skip.\nfunction isReentrantWrapperRegistration(listener: BoundListener): boolean {\n return (\n registeringWrapper !== undefined &&\n (listener === registeringWrapper || (listener as { listener?: unknown }).listener === registeringWrapper)\n );\n}\n\n/**\n * Binds a scope to the given event emitter, so that any listener added to it runs with that scope\n * (and therefore the active span) active — even if the listener fires later, in a different async\n * context.\n *\n * By default the currently active scope is bound, captured at the time this function is called.\n * Pass an explicit `scope` to bind a different one.\n *\n * This is useful when instrumenting APIs that hand back an event emitter (e.g. a streamed database\n * query) whose `'data'` / `'error'` / `'end'` listeners would otherwise lose the trace context.\n *\n * Works with both Node.js `EventEmitter`s (`on`, `addListener`, ...) and DOM `EventTarget`s\n * (`addEventListener`). Objects exposing none of these methods are returned untouched.\n *\n * The isolation scope is intentionally not captured — it is carried along by the active async\n * context. This mirrors the event-emitter behavior of OpenTelemetry's `ContextManager.bind`.\n */\nexport function bindScopeToEmitter<T extends object>(emitter: T, scope: Scope = getCurrentScope()): T {\n const ee = emitter as EventEmitterLike;\n\n // Already bound -> nothing to do.\n if (getPatchMap(ee)) {\n return emitter;\n }\n\n createPatchMap(ee);\n\n for (const methodName of ADD_LISTENER_METHODS) {\n if (typeof ee[methodName] !== 'function') {\n continue;\n }\n ee[methodName] = patchAddListener(ee, ee[methodName] as BoundListener, scope);\n }\n\n for (const methodName of REMOVE_LISTENER_METHODS) {\n if (typeof ee[methodName] !== 'function') {\n continue;\n }\n ee[methodName] = patchRemoveListener(ee, ee[methodName] as BoundListener);\n }\n\n if (typeof ee.removeAllListeners === 'function') {\n ee.removeAllListeners = patchRemoveAllListeners(ee, ee.removeAllListeners as BoundListener);\n }\n\n return emitter;\n}\n\n/** Wraps a listener so it runs with the given scope active. */\nfunction bindListenerToScope(listener: BoundListener, scope: Scope): BoundListener {\n return function (this: unknown, ...args: unknown[]) {\n return withScope(scope, () => listener.apply(this, args));\n };\n}\n\nfunction isBoundListener(listener: unknown): listener is BoundListener {\n return typeof listener === 'function';\n}\n\nfunction patchAddListener(ee: EventEmitterLike, original: BoundListener, scope: Scope): BoundListener {\n return function (this: unknown, ...args: unknown[]) {\n const event = args[0] as string;\n const listener = args[1];\n // Extra args (e.g. the `options` argument of `addEventListener`) must be forwarded verbatim.\n const rest = args.slice(2);\n\n // Pass through what we must not wrap: non-function listeners (e.g. `EventListener` objects passed to\n // `addEventListener`) and the re-entrant once-wrapper registration. Anything else is wrapped, even\n // when added synchronously mid-registration.\n if (!isBoundListener(listener) || isReentrantWrapperRegistration(listener)) {\n return original.apply(this, args);\n }\n\n const map = getPatchMap(ee) || createPatchMap(ee);\n let listeners = map.get(event);\n if (!listeners) {\n listeners = new WeakMap();\n map.set(event, listeners);\n }\n\n // Reuse one stable wrapper per listener so repeat registrations are handled correctly by the\n // underlying emitter/target (Node counts duplicates; the DOM dedupes by `(callback, capture)`).\n let boundListener = listeners.get(listener);\n if (!boundListener) {\n boundListener = bindListenerToScope(listener, scope);\n listeners.set(listener, boundListener);\n }\n\n const previous = registeringWrapper;\n registeringWrapper = boundListener;\n try {\n return original.call(this, event, boundListener, ...rest);\n } finally {\n registeringWrapper = previous;\n }\n };\n}\n\n// Unlike `patchRemoveAllListeners`, this intentionally leaves the map entry in place: Node counts\n// duplicate registrations, so the same wrapper may still be registered after removing one instance,\n// and later `removeListener` calls need the mapping to find it. The entry is in a `WeakMap` keyed by\n// the user listener, so it is GC'd once the user drops their reference — no manual cleanup needed.\nfunction patchRemoveListener(ee: EventEmitterLike, original: BoundListener): BoundListener {\n return function (this: unknown, ...args: unknown[]) {\n const event = args[0] as string;\n const listener = args[1];\n const rest = args.slice(2);\n\n const boundListener = isBoundListener(listener) ? getPatchMap(ee)?.get(event)?.get(listener) : undefined;\n if (!boundListener) {\n return original.apply(this, args);\n }\n // Pass the same stable wrapper and forward the caller's extra args (e.g. the `capture` option of\n // `removeEventListener`) unchanged, so the emitter/target matches the right registration itself.\n return original.call(this, event, boundListener, ...rest);\n };\n}\n\n// Safe to drop map entries here (unlike `patchRemoveListener`): this removes *every* listener for the\n// event at once, so no registration referencing those wrappers remains. It also reclaims keys from the\n// strong outer `Map` (keyed by event-name strings), which would otherwise accumulate indefinitely.\nfunction patchRemoveAllListeners(ee: EventEmitterLike, original: BoundListener): BoundListener {\n return function (this: unknown, ...args: unknown[]) {\n const map = getPatchMap(ee);\n if (map) {\n if (args.length === 0) {\n // `removeAllListeners()` with no event clears everything -> reset the map.\n createPatchMap(ee);\n } else {\n const event = args[0] as string;\n map.delete(event);\n }\n }\n return original.apply(this, args);\n };\n}\n\nfunction createPatchMap(ee: EventEmitterLike): ListenerPatchMap {\n const map: ListenerPatchMap = new Map();\n (ee as Record<symbol, ListenerPatchMap>)[SCOPE_BOUND_LISTENERS] = map;\n return map;\n}\n\nfunction getPatchMap(ee: EventEmitterLike): ListenerPatchMap | undefined {\n return (ee as Record<symbol, ListenerPatchMap | undefined>)[SCOPE_BOUND_LISTENERS];\n}\n"],"names":[],"mappings":"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"}
import { Scope } from '../scope';
/**
* Binds a scope to the given event emitter, so that any listener added to it runs with that scope
* (and therefore the active span) active — even if the listener fires later, in a different async
* context.
*
* By default the currently active scope is bound, captured at the time this function is called.
* Pass an explicit `scope` to bind a different one.
*
* This is useful when instrumenting APIs that hand back an event emitter (e.g. a streamed database
* query) whose `'data'` / `'error'` / `'end'` listeners would otherwise lose the trace context.
*
* Works with both Node.js `EventEmitter`s (`on`, `addListener`, ...) and DOM `EventTarget`s
* (`addEventListener`). Objects exposing none of these methods are returned untouched.
*
* The isolation scope is intentionally not captured — it is carried along by the active async
* context. This mirrors the event-emitter behavior of OpenTelemetry's `ContextManager.bind`.
*/
export declare function bindScopeToEmitter<T extends object>(emitter: T, scope?: Scope): T;
//# sourceMappingURL=bindScopeToEmitter.d.ts.map
import type { Scope } from '../scope';
/**
* Binds a scope to the given event emitter, so that any listener added to it runs with that scope
* (and therefore the active span) active — even if the listener fires later, in a different async
* context.
*
* By default the currently active scope is bound, captured at the time this function is called.
* Pass an explicit `scope` to bind a different one.
*
* This is useful when instrumenting APIs that hand back an event emitter (e.g. a streamed database
* query) whose `'data'` / `'error'` / `'end'` listeners would otherwise lose the trace context.
*
* Works with both Node.js `EventEmitter`s (`on`, `addListener`, ...) and DOM `EventTarget`s
* (`addEventListener`). Objects exposing none of these methods are returned untouched.
*
* The isolation scope is intentionally not captured — it is carried along by the active async
* context. This mirrors the event-emitter behavior of OpenTelemetry's `ContextManager.bind`.
*/
export declare function bindScopeToEmitter<T extends object>(emitter: T, scope?: Scope): T;
//# sourceMappingURL=bindScopeToEmitter.d.ts.map
{"version":3,"file":"bindScopeToEmitter.d.ts","sourceRoot":"","sources":["../../../src/tracing/bindScopeToEmitter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AA0DtC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,GAAE,KAAyB,GAAG,CAAC,CA6BpG"}
+4
-0

@@ -10,2 +10,3 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const trace = require('./tracing/trace.js');
const bindScopeToEmitter = require('./tracing/bindScopeToEmitter.js');
const dynamicSamplingContext = require('./tracing/dynamicSamplingContext.js');

@@ -152,3 +153,5 @@ const measurement = require('./tracing/measurement.js');

exports.getCapturedScopesOnSpan = utils$2.getCapturedScopesOnSpan;
exports.markSpanForOtelSourceInference = utils$2.markSpanForOtelSourceInference;
exports.setCapturedScopesOnSpan = utils$2.setCapturedScopesOnSpan;
exports.spanShouldInferOtelSource = utils$2.spanShouldInferOtelSource;
exports.TRACING_DEFAULTS = idleSpan.TRACING_DEFAULTS;

@@ -171,2 +174,3 @@ exports.startIdleSpan = idleSpan.startIdleSpan;

exports.withActiveSpan = trace.withActiveSpan;
exports.bindScopeToEmitter = bindScopeToEmitter.bindScopeToEmitter;
exports.getDynamicSamplingContextFromClient = dynamicSamplingContext.getDynamicSamplingContextFromClient;

@@ -173,0 +177,0 @@ exports.getDynamicSamplingContextFromScope = dynamicSamplingContext.getDynamicSamplingContextFromScope;

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -13,4 +13,4 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const trace = require('./tracing/trace.js');
const traceData = require('./utils/traceData.js');
const url = require('./utils/url.js');
const traceData = require('./utils/traceData.js');

@@ -17,0 +17,0 @@ function instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeaders, spans, spanOriginOrOptions) {

@@ -10,2 +10,3 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const trace = require('./tracing/trace.js');
const bindScopeToEmitter = require('./tracing/bindScopeToEmitter.js');
const dynamicSamplingContext = require('./tracing/dynamicSamplingContext.js');

@@ -170,3 +171,5 @@ const measurement = require('./tracing/measurement.js');

exports.getCapturedScopesOnSpan = utils$2.getCapturedScopesOnSpan;
exports.markSpanForOtelSourceInference = utils$2.markSpanForOtelSourceInference;
exports.setCapturedScopesOnSpan = utils$2.setCapturedScopesOnSpan;
exports.spanShouldInferOtelSource = utils$2.spanShouldInferOtelSource;
exports.TRACING_DEFAULTS = idleSpan.TRACING_DEFAULTS;

@@ -189,2 +192,3 @@ exports.startIdleSpan = idleSpan.startIdleSpan;

exports.withActiveSpan = trace.withActiveSpan;
exports.bindScopeToEmitter = bindScopeToEmitter.bindScopeToEmitter;
exports.getDynamicSamplingContextFromClient = dynamicSamplingContext.getDynamicSamplingContextFromClient;

@@ -191,0 +195,0 @@ exports.getDynamicSamplingContextFromScope = dynamicSamplingContext.getDynamicSamplingContextFromScope;

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -10,2 +10,3 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const trace = require('./tracing/trace.js');
const bindScopeToEmitter = require('./tracing/bindScopeToEmitter.js');
const dynamicSamplingContext = require('./tracing/dynamicSamplingContext.js');

@@ -169,3 +170,5 @@ const measurement = require('./tracing/measurement.js');

exports.getCapturedScopesOnSpan = utils$2.getCapturedScopesOnSpan;
exports.markSpanForOtelSourceInference = utils$2.markSpanForOtelSourceInference;
exports.setCapturedScopesOnSpan = utils$2.setCapturedScopesOnSpan;
exports.spanShouldInferOtelSource = utils$2.spanShouldInferOtelSource;
exports.TRACING_DEFAULTS = idleSpan.TRACING_DEFAULTS;

@@ -188,2 +191,3 @@ exports.startIdleSpan = idleSpan.startIdleSpan;

exports.withActiveSpan = trace.withActiveSpan;
exports.bindScopeToEmitter = bindScopeToEmitter.bindScopeToEmitter;
exports.getDynamicSamplingContextFromClient = dynamicSamplingContext.getDynamicSamplingContextFromClient;

@@ -190,0 +194,0 @@ exports.getDynamicSamplingContextFromScope = dynamicSamplingContext.getDynamicSamplingContextFromScope;

@@ -1,1 +0,1 @@

{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -126,3 +126,5 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

this._name = name;
this.setAttribute(semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, "custom");
if (!utils.spanShouldInferOtelSource(this)) {
this.setAttribute(semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, "custom");
}
return this;

@@ -129,0 +131,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"sentrySpan.js","sources":["../../../src/tracing/sentrySpan.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { createSpanEnvelope } from '../envelope';\nimport {\n SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n SEMANTIC_ATTRIBUTE_PROFILE_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type { SpanEnvelope } from '../types/envelope';\nimport type { TransactionEvent } from '../types/event';\nimport type { SpanLink } from '../types/link';\nimport type {\n SentrySpanArguments,\n Span,\n SpanAttributes,\n SpanAttributeValue,\n SpanContextData,\n SpanJSON,\n SpanOrigin,\n SpanTimeInput,\n StreamedSpanJSON,\n} from '../types/span';\nimport type { SpanStatus } from '../types/spanStatus';\nimport type { TimedEvent } from '../types/timedEvent';\nimport { debug } from '../utils/debug-logger';\nimport { generateSpanId, generateTraceId } from '../utils/propagationContext';\nimport {\n convertSpanLinksForEnvelope,\n getRootSpan,\n getSimpleStatusMessage,\n getSpanDescendants,\n getStatusMessage,\n getStreamedSpanLinks,\n spanTimeInputToSeconds,\n spanToJSON,\n spanToTransactionTraceContext,\n TRACE_FLAG_NONE,\n TRACE_FLAG_SAMPLED,\n} from '../utils/spanUtils';\nimport { timestampInSeconds } from '../utils/time';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanEnd } from './logSpans';\nimport { timedEventsToMeasurements } from './measurement';\nimport { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled';\nimport { getCapturedScopesOnSpan } from './utils';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nexport class SentrySpan implements Span {\n protected _traceId: string;\n protected _spanId: string;\n protected _parentSpanId?: string | undefined;\n protected _sampled: boolean | undefined;\n protected _name?: string | undefined;\n protected _attributes: SpanAttributes;\n protected _links?: SpanLink[];\n /** Epoch timestamp in seconds when the span started. */\n protected _startTime: number;\n /** Epoch timestamp in seconds when the span ended. */\n protected _endTime?: number | undefined;\n /** Internal keeper of the status */\n protected _status?: SpanStatus;\n /** The timed events added to this span. */\n protected _events: TimedEvent[];\n\n /** if true, treat span as a standalone span (not part of a transaction) */\n private _isStandaloneSpan?: boolean;\n\n /**\n * You should never call the constructor manually, always use `Sentry.startSpan()`\n * or other span methods.\n * @internal\n * @hideconstructor\n * @hidden\n */\n public constructor(spanContext: SentrySpanArguments = {}) {\n this._traceId = spanContext.traceId || generateTraceId();\n this._spanId = spanContext.spanId || generateSpanId();\n this._startTime = spanContext.startTimestamp || timestampInSeconds();\n this._links = spanContext.links;\n\n this._attributes = {};\n this.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n ...spanContext.attributes,\n });\n\n this._name = spanContext.name;\n\n if (spanContext.parentSpanId) {\n this._parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.endTimestamp) {\n this._endTime = spanContext.endTimestamp;\n }\n\n this._events = [];\n\n this._isStandaloneSpan = spanContext.isStandalone;\n\n // If the span is already ended, ensure we finalize the span immediately\n if (this._endTime) {\n this._onSpanEnded();\n }\n }\n\n /** @inheritDoc */\n public addLink(link: SpanLink): this {\n if (this._links) {\n this._links.push(link);\n } else {\n this._links = [link];\n }\n return this;\n }\n\n /** @inheritDoc */\n public addLinks(links: SpanLink[]): this {\n if (this._links) {\n this._links.push(...links);\n } else {\n this._links = links;\n }\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n public recordException(_exception: unknown, _time?: number | undefined): void {\n // noop\n }\n\n /** @inheritdoc */\n public spanContext(): SpanContextData {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n public setAttribute(key: string, value: SpanAttributeValue | undefined): this {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n\n return this;\n }\n\n /** @inheritdoc */\n public setAttributes(attributes: SpanAttributes): this {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for browser tracing where we want to adjust the start time afterwards.\n * USE THIS WITH CAUTION!\n *\n * @hidden\n * @internal\n */\n public updateStartTime(timeInput: SpanTimeInput): void {\n this._startTime = spanTimeInputToSeconds(timeInput);\n }\n\n /**\n * @inheritDoc\n */\n public setStatus(value: SpanStatus): this {\n this._status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public updateName(name: string): this {\n this._name = name;\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom');\n return this;\n }\n\n /** @inheritdoc */\n public end(endTimestamp?: SpanTimeInput): void {\n // If already ended, skip\n if (this._endTime) {\n return;\n }\n\n this._endTime = spanTimeInputToSeconds(endTimestamp);\n logSpanEnd(this);\n\n this._onSpanEnded();\n }\n\n /**\n * Get JSON representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToJSON(span)` instead.\n */\n public getSpanJSON(): SpanJSON {\n return {\n data: this._attributes,\n description: this._name,\n op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n parent_span_id: this._parentSpanId,\n span_id: this._spanId,\n start_timestamp: this._startTime,\n status: getStatusMessage(this._status),\n timestamp: this._endTime,\n trace_id: this._traceId,\n origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,\n measurements: timedEventsToMeasurements(this._events),\n is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n links: convertSpanLinksForEnvelope(this._links),\n };\n }\n\n /**\n * Get {@link StreamedSpanJSON} representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToStreamedSpanJSON(span)` instead.\n */\n public getStreamedSpanJSON(): StreamedSpanJSON {\n return {\n name: this._name ?? '',\n span_id: this._spanId,\n trace_id: this._traceId,\n parent_span_id: this._parentSpanId,\n start_timestamp: this._startTime,\n // just in case _endTime is not set, we use the start time (i.e. duration 0)\n end_timestamp: this._endTime ?? this._startTime,\n is_segment: this._isStandaloneSpan || this === getRootSpan(this),\n status: getSimpleStatusMessage(this._status),\n attributes: this._attributes,\n links: getStreamedSpanLinks(this._links),\n };\n }\n\n /** @inheritdoc */\n public isRecording(): boolean {\n return !this._endTime && !!this._sampled;\n }\n\n /**\n * @inheritdoc\n */\n public addEvent(\n name: string,\n attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n startTime?: SpanTimeInput,\n ): this {\n DEBUG_BUILD && debug.log('[Tracing] Adding an event to span:', name);\n\n const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n const event: TimedEvent = {\n name,\n time: spanTimeInputToSeconds(time),\n attributes,\n };\n\n this._events.push(event);\n\n return this;\n }\n\n /**\n * This method should generally not be used,\n * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n * USE THIS WITH CAUTION!\n * @internal\n * @hidden\n * @experimental\n */\n public isStandaloneSpan(): boolean {\n return !!this._isStandaloneSpan;\n }\n\n /** Emit `spanEnd` when the span is ended. */\n private _onSpanEnded(): void {\n const client = getClient();\n if (client) {\n client.emit('spanEnd', this);\n // Guarding sending standalone v1 spans as v2 streamed spans for now.\n // Otherwise they'd be sent once as v1 spans and again as streamed spans.\n // We'll migrate CLS and LCP spans to streamed spans in a later PR and\n // INP spans in the next major of the SDK. At that point, we can fully remove\n // standalone v1 spans <3\n if (!this._isStandaloneSpan) {\n client.emit('afterSpanEnd', this);\n }\n }\n\n // A segment span is basically the root span of a local span tree.\n // So for now, this is either what we previously refer to as the root span,\n // or a standalone span.\n const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n if (!isSegmentSpan) {\n return;\n }\n\n // if this is a standalone span, we send it immediately\n if (this._isStandaloneSpan) {\n if (this._sampled) {\n sendSpanEnvelope(createSpanEnvelope([this], client));\n } else {\n DEBUG_BUILD &&\n debug.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n if (client) {\n client.recordDroppedEvent('sample_rate', 'span');\n }\n }\n return;\n } else if (client && hasSpanStreamingEnabled(client)) {\n // TODO (spans): Remove standalone span custom logic in favor of sending simple v2 web vital spans\n client.emit('afterSegmentSpanEnd', this);\n return;\n }\n\n const transactionEvent = this._convertSpanToTransaction();\n if (transactionEvent) {\n const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n scope.captureEvent(transactionEvent);\n }\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n private _convertSpanToTransaction(): TransactionEvent | undefined {\n // We can only convert finished spans\n if (!isFullFinishedSpan(spanToJSON(this))) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && debug.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n this._name = '<unlabeled transaction>';\n }\n\n const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n\n const normalizedRequest = capturedSpanScope?.getScopeData().sdkProcessingMetadata?.normalizedRequest;\n\n if (this._sampled !== true) {\n return undefined;\n }\n\n // The transaction span itself as well as any potential standalone spans should be filtered out\n const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // remove internal root span attributes we don't need to send.\n /* eslint-disable @typescript-eslint/no-dynamic-delete */\n delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n let hasGenAiSpans = false;\n spans.forEach(span => {\n delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n if (span.op?.startsWith('gen_ai.')) {\n hasGenAiSpans = true;\n }\n });\n // eslint-enabled-next-line @typescript-eslint/no-dynamic-delete\n\n const transaction: TransactionEvent = {\n contexts: {\n trace: spanToTransactionTraceContext(this),\n },\n spans:\n // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n // we do not use spans anymore after this point\n spans.length > MAX_SPAN_COUNT\n ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n : spans,\n start_timestamp: this._startTime,\n timestamp: this._endTime,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n capturedSpanScope,\n capturedSpanIsolationScope,\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n hasGenAiSpans,\n },\n request: normalizedRequest,\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const measurements = timedEventsToMeasurements(this._events);\n const hasMeasurements = measurements && Object.keys(measurements).length;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n debug.log(\n '[Measurements] Adding measurements to transaction event',\n JSON.stringify(measurements, undefined, 2),\n );\n transaction.measurements = measurements;\n }\n\n return transaction;\n }\n}\n\nfunction isSpanTimeInput(value: undefined | SpanAttributes | SpanTimeInput): value is SpanTimeInput {\n return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input: Partial<SpanJSON>): input is SpanJSON {\n return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span: Span): boolean {\n return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope: SpanEnvelope): void {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const spanItems = envelope[1];\n if (!spanItems || spanItems.length === 0) {\n client.recordDroppedEvent('before_send', 'span');\n return;\n }\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n client.sendEnvelope(envelope);\n}\n"],"names":["generateTraceId","generateSpanId","timestampInSeconds","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_OP","TRACE_FLAG_SAMPLED","TRACE_FLAG_NONE","spanTimeInputToSeconds","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","logSpanEnd","getStatusMessage","SEMANTIC_ATTRIBUTE_PROFILE_ID","SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME","timedEventsToMeasurements","getRootSpan","convertSpanLinksForEnvelope","getSimpleStatusMessage","getStreamedSpanLinks","DEBUG_BUILD","debug","time","getClient","createSpanEnvelope","hasSpanStreamingEnabled","getCapturedScopesOnSpan","getCurrentScope","spanToJSON","getSpanDescendants","SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME","spanToTransactionTraceContext","getDynamicSamplingContextFromSpan"],"mappings":"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"}
{"version":3,"file":"sentrySpan.js","sources":["../../../src/tracing/sentrySpan.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { createSpanEnvelope } from '../envelope';\nimport {\n SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n SEMANTIC_ATTRIBUTE_PROFILE_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type { SpanEnvelope } from '../types/envelope';\nimport type { TransactionEvent } from '../types/event';\nimport type { SpanLink } from '../types/link';\nimport type {\n SentrySpanArguments,\n Span,\n SpanAttributes,\n SpanAttributeValue,\n SpanContextData,\n SpanJSON,\n SpanOrigin,\n SpanTimeInput,\n StreamedSpanJSON,\n} from '../types/span';\nimport type { SpanStatus } from '../types/spanStatus';\nimport type { TimedEvent } from '../types/timedEvent';\nimport { debug } from '../utils/debug-logger';\nimport { generateSpanId, generateTraceId } from '../utils/propagationContext';\nimport {\n convertSpanLinksForEnvelope,\n getRootSpan,\n getSimpleStatusMessage,\n getSpanDescendants,\n getStatusMessage,\n getStreamedSpanLinks,\n spanTimeInputToSeconds,\n spanToJSON,\n spanToTransactionTraceContext,\n TRACE_FLAG_NONE,\n TRACE_FLAG_SAMPLED,\n} from '../utils/spanUtils';\nimport { timestampInSeconds } from '../utils/time';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanEnd } from './logSpans';\nimport { timedEventsToMeasurements } from './measurement';\nimport { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled';\nimport { getCapturedScopesOnSpan, spanShouldInferOtelSource } from './utils';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nexport class SentrySpan implements Span {\n protected _traceId: string;\n protected _spanId: string;\n protected _parentSpanId?: string | undefined;\n protected _sampled: boolean | undefined;\n protected _name?: string | undefined;\n protected _attributes: SpanAttributes;\n protected _links?: SpanLink[];\n /** Epoch timestamp in seconds when the span started. */\n protected _startTime: number;\n /** Epoch timestamp in seconds when the span ended. */\n protected _endTime?: number | undefined;\n /** Internal keeper of the status */\n protected _status?: SpanStatus;\n /** The timed events added to this span. */\n protected _events: TimedEvent[];\n\n /** if true, treat span as a standalone span (not part of a transaction) */\n private _isStandaloneSpan?: boolean;\n\n /**\n * You should never call the constructor manually, always use `Sentry.startSpan()`\n * or other span methods.\n * @internal\n * @hideconstructor\n * @hidden\n */\n public constructor(spanContext: SentrySpanArguments = {}) {\n this._traceId = spanContext.traceId || generateTraceId();\n this._spanId = spanContext.spanId || generateSpanId();\n this._startTime = spanContext.startTimestamp || timestampInSeconds();\n this._links = spanContext.links;\n\n this._attributes = {};\n this.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n ...spanContext.attributes,\n });\n\n this._name = spanContext.name;\n\n if (spanContext.parentSpanId) {\n this._parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.endTimestamp) {\n this._endTime = spanContext.endTimestamp;\n }\n\n this._events = [];\n\n this._isStandaloneSpan = spanContext.isStandalone;\n\n // If the span is already ended, ensure we finalize the span immediately\n if (this._endTime) {\n this._onSpanEnded();\n }\n }\n\n /** @inheritDoc */\n public addLink(link: SpanLink): this {\n if (this._links) {\n this._links.push(link);\n } else {\n this._links = [link];\n }\n return this;\n }\n\n /** @inheritDoc */\n public addLinks(links: SpanLink[]): this {\n if (this._links) {\n this._links.push(...links);\n } else {\n this._links = links;\n }\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n public recordException(_exception: unknown, _time?: number | undefined): void {\n // noop\n }\n\n /** @inheritdoc */\n public spanContext(): SpanContextData {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n public setAttribute(key: string, value: SpanAttributeValue | undefined): this {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n\n return this;\n }\n\n /** @inheritdoc */\n public setAttributes(attributes: SpanAttributes): this {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for browser tracing where we want to adjust the start time afterwards.\n * USE THIS WITH CAUTION!\n *\n * @hidden\n * @internal\n */\n public updateStartTime(timeInput: SpanTimeInput): void {\n this._startTime = spanTimeInputToSeconds(timeInput);\n }\n\n /**\n * @inheritDoc\n */\n public setStatus(value: SpanStatus): this {\n this._status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public updateName(name: string): this {\n this._name = name;\n // Renaming a span marks its name as explicitly chosen, so we stamp `custom`.\n // The exception is spans created by SentryTraceProvider: those are branded for\n // OTel-style source inference at span end (mirroring OTel SDK spans, which have\n // no Sentry source concept), so instrumentations renaming them must not pin\n // `custom` — applyOtelSpanData infers the correct source (e.g. 'route', 'task').\n if (!spanShouldInferOtelSource(this)) {\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom');\n }\n return this;\n }\n\n /** @inheritdoc */\n public end(endTimestamp?: SpanTimeInput): void {\n // If already ended, skip\n if (this._endTime) {\n return;\n }\n\n this._endTime = spanTimeInputToSeconds(endTimestamp);\n logSpanEnd(this);\n\n this._onSpanEnded();\n }\n\n /**\n * Get JSON representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToJSON(span)` instead.\n */\n public getSpanJSON(): SpanJSON {\n return {\n data: this._attributes,\n description: this._name,\n op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n parent_span_id: this._parentSpanId,\n span_id: this._spanId,\n start_timestamp: this._startTime,\n status: getStatusMessage(this._status),\n timestamp: this._endTime,\n trace_id: this._traceId,\n origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,\n measurements: timedEventsToMeasurements(this._events),\n is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n links: convertSpanLinksForEnvelope(this._links),\n };\n }\n\n /**\n * Get {@link StreamedSpanJSON} representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToStreamedSpanJSON(span)` instead.\n */\n public getStreamedSpanJSON(): StreamedSpanJSON {\n return {\n name: this._name ?? '',\n span_id: this._spanId,\n trace_id: this._traceId,\n parent_span_id: this._parentSpanId,\n start_timestamp: this._startTime,\n // just in case _endTime is not set, we use the start time (i.e. duration 0)\n end_timestamp: this._endTime ?? this._startTime,\n is_segment: this._isStandaloneSpan || this === getRootSpan(this),\n status: getSimpleStatusMessage(this._status),\n attributes: this._attributes,\n links: getStreamedSpanLinks(this._links),\n };\n }\n\n /** @inheritdoc */\n public isRecording(): boolean {\n return !this._endTime && !!this._sampled;\n }\n\n /**\n * @inheritdoc\n */\n public addEvent(\n name: string,\n attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n startTime?: SpanTimeInput,\n ): this {\n DEBUG_BUILD && debug.log('[Tracing] Adding an event to span:', name);\n\n const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n const event: TimedEvent = {\n name,\n time: spanTimeInputToSeconds(time),\n attributes,\n };\n\n this._events.push(event);\n\n return this;\n }\n\n /**\n * This method should generally not be used,\n * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n * USE THIS WITH CAUTION!\n * @internal\n * @hidden\n * @experimental\n */\n public isStandaloneSpan(): boolean {\n return !!this._isStandaloneSpan;\n }\n\n /** Emit `spanEnd` when the span is ended. */\n private _onSpanEnded(): void {\n const client = getClient();\n if (client) {\n client.emit('spanEnd', this);\n // Guarding sending standalone v1 spans as v2 streamed spans for now.\n // Otherwise they'd be sent once as v1 spans and again as streamed spans.\n // We'll migrate CLS and LCP spans to streamed spans in a later PR and\n // INP spans in the next major of the SDK. At that point, we can fully remove\n // standalone v1 spans <3\n if (!this._isStandaloneSpan) {\n client.emit('afterSpanEnd', this);\n }\n }\n\n // A segment span is basically the root span of a local span tree.\n // So for now, this is either what we previously refer to as the root span,\n // or a standalone span.\n const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n if (!isSegmentSpan) {\n return;\n }\n\n // if this is a standalone span, we send it immediately\n if (this._isStandaloneSpan) {\n if (this._sampled) {\n sendSpanEnvelope(createSpanEnvelope([this], client));\n } else {\n DEBUG_BUILD &&\n debug.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n if (client) {\n client.recordDroppedEvent('sample_rate', 'span');\n }\n }\n return;\n } else if (client && hasSpanStreamingEnabled(client)) {\n // TODO (spans): Remove standalone span custom logic in favor of sending simple v2 web vital spans\n client.emit('afterSegmentSpanEnd', this);\n return;\n }\n\n const transactionEvent = this._convertSpanToTransaction();\n if (transactionEvent) {\n const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n scope.captureEvent(transactionEvent);\n }\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n private _convertSpanToTransaction(): TransactionEvent | undefined {\n // We can only convert finished spans\n if (!isFullFinishedSpan(spanToJSON(this))) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && debug.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n this._name = '<unlabeled transaction>';\n }\n\n const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n\n const normalizedRequest = capturedSpanScope?.getScopeData().sdkProcessingMetadata?.normalizedRequest;\n\n if (this._sampled !== true) {\n return undefined;\n }\n\n // The transaction span itself as well as any potential standalone spans should be filtered out\n const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // remove internal root span attributes we don't need to send.\n /* eslint-disable @typescript-eslint/no-dynamic-delete */\n delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n let hasGenAiSpans = false;\n spans.forEach(span => {\n delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n if (span.op?.startsWith('gen_ai.')) {\n hasGenAiSpans = true;\n }\n });\n // eslint-enabled-next-line @typescript-eslint/no-dynamic-delete\n\n const transaction: TransactionEvent = {\n contexts: {\n trace: spanToTransactionTraceContext(this),\n },\n spans:\n // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n // we do not use spans anymore after this point\n spans.length > MAX_SPAN_COUNT\n ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n : spans,\n start_timestamp: this._startTime,\n timestamp: this._endTime,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n capturedSpanScope,\n capturedSpanIsolationScope,\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n hasGenAiSpans,\n },\n request: normalizedRequest,\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const measurements = timedEventsToMeasurements(this._events);\n const hasMeasurements = measurements && Object.keys(measurements).length;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n debug.log(\n '[Measurements] Adding measurements to transaction event',\n JSON.stringify(measurements, undefined, 2),\n );\n transaction.measurements = measurements;\n }\n\n return transaction;\n }\n}\n\nfunction isSpanTimeInput(value: undefined | SpanAttributes | SpanTimeInput): value is SpanTimeInput {\n return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input: Partial<SpanJSON>): input is SpanJSON {\n return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span: Span): boolean {\n return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope: SpanEnvelope): void {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const spanItems = envelope[1];\n if (!spanItems || spanItems.length === 0) {\n client.recordDroppedEvent('before_send', 'span');\n return;\n }\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n client.sendEnvelope(envelope);\n}\n"],"names":["generateTraceId","generateSpanId","timestampInSeconds","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_OP","TRACE_FLAG_SAMPLED","TRACE_FLAG_NONE","spanTimeInputToSeconds","spanShouldInferOtelSource","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","logSpanEnd","getStatusMessage","SEMANTIC_ATTRIBUTE_PROFILE_ID","SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME","timedEventsToMeasurements","getRootSpan","convertSpanLinksForEnvelope","getSimpleStatusMessage","getStreamedSpanLinks","DEBUG_BUILD","debug","time","getClient","createSpanEnvelope","hasSpanStreamingEnabled","getCapturedScopesOnSpan","getCurrentScope","spanToJSON","getSpanDescendants","SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME","spanToTransactionTraceContext","getDynamicSamplingContextFromSpan"],"mappings":"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"}

@@ -5,3 +5,2 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const scopeData = require('../../utils/scopeData.js');
const url = require('../../utils/url.js');
const spanUtils = require('../../utils/spanUtils.js');

@@ -21,3 +20,3 @@ const utils = require('../utils.js');

const spanKind = span.kind;
inferSpanDataFromOtelAttributes(spanJSON, spanKind);
client.emit("preprocessSpan", spanJSON, { spanKind });
if (spanJSON.is_segment) {

@@ -88,103 +87,6 @@ applyScopeToSegmentSpan(spanJSON, finalScopeData);

}
const SPAN_KIND_SERVER = 1;
const SPAN_KIND_CLIENT = 2;
function inferSpanDataFromOtelAttributes(spanJSON, spanKind) {
const attributes = spanJSON.attributes;
if (!attributes) {
return;
}
const httpMethod = attributes["http.request.method"] || attributes["http.method"];
if (httpMethod) {
inferHttpSpanData(spanJSON, attributes, spanKind, httpMethod);
return;
}
const dbSystem = attributes["db.system.name"] || attributes["db.system"];
const opIsCache = typeof attributes[semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_OP] === "string" && `${attributes[semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_OP]}`.startsWith("cache.");
if (dbSystem && !opIsCache) {
inferDbSpanData(spanJSON, attributes);
return;
}
if (attributes["rpc.service"]) {
safeSetSpanJSONAttributes(spanJSON, { [semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_OP]: "rpc" });
return;
}
if (attributes["messaging.system"]) {
safeSetSpanJSONAttributes(spanJSON, { [semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_OP]: "message" });
return;
}
const faasTrigger = attributes["faas.trigger"];
if (faasTrigger) {
safeSetSpanJSONAttributes(spanJSON, { [semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${faasTrigger}` });
}
}
function inferHttpSpanData(spanJSON, attributes, spanKind, httpMethod) {
const opParts = ["http"];
if (spanKind === SPAN_KIND_CLIENT) {
opParts.push("client");
} else if (spanKind === SPAN_KIND_SERVER) {
opParts.push("server");
}
if (attributes["sentry.http.prefetch"]) {
opParts.push("prefetch");
}
safeSetSpanJSONAttributes(spanJSON, { [semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_OP]: opParts.join(".") });
const customName = attributes[semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];
if (typeof customName === "string") {
spanJSON.name = customName;
return;
}
if (attributes[semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === "custom") {
return;
}
const httpRoute = attributes["http.route"];
if (typeof httpRoute === "string") {
spanJSON.name = `${httpMethod} ${httpRoute}`;
safeSetSpanJSONAttributes(spanJSON, { [semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "route" });
} else {
if (spanKind === SPAN_KIND_CLIENT || spanKind === SPAN_KIND_SERVER) {
const urlPath = getUrlPath(attributes, spanKind);
if (urlPath) {
spanJSON.name = `${httpMethod} ${urlPath}`;
}
}
safeSetSpanJSONAttributes(spanJSON, { [semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "url" });
}
}
function getUrlPath(attributes, spanKind) {
const httpUrl = attributes["http.url"] || attributes["url.full"];
const httpTarget = attributes["http.target"];
const parsedUrl = typeof httpUrl === "string" ? url.parseUrl(httpUrl) : void 0;
const sanitizedUrl = parsedUrl ? url.getSanitizedUrlString(parsedUrl) : void 0;
if (spanKind === SPAN_KIND_SERVER && typeof httpTarget === "string") {
return url.stripUrlQueryAndFragment(httpTarget);
}
if (sanitizedUrl) {
return sanitizedUrl;
}
if (typeof httpTarget === "string") {
return url.stripUrlQueryAndFragment(httpTarget);
}
return void 0;
}
function inferDbSpanData(spanJSON, attributes) {
safeSetSpanJSONAttributes(spanJSON, { [semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_OP]: "db" });
const customName = attributes[semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];
if (typeof customName === "string") {
spanJSON.name = customName;
return;
}
if (attributes[semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === "custom") {
return;
}
const statement = attributes["db.statement"];
if (statement) {
spanJSON.name = `${statement}`;
safeSetSpanJSONAttributes(spanJSON, { [semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "task" });
}
}
exports.applyBeforeSendSpanCallback = applyBeforeSendSpanCallback;
exports.captureSpan = captureSpan;
exports.inferSpanDataFromOtelAttributes = inferSpanDataFromOtelAttributes;
exports.safeSetSpanJSONAttributes = safeSetSpanJSONAttributes;
//# sourceMappingURL=captureSpan.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"captureSpan.js","sources":["../../../../src/tracing/spans/captureSpan.ts"],"sourcesContent":["import type { RawAttributes } from '../../attributes';\nimport type { Client } from '../../client';\nimport type { ScopeData } from '../../scope';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_RELEASE,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n SEMANTIC_ATTRIBUTE_USER_EMAIL,\n SEMANTIC_ATTRIBUTE_USER_ID,\n SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS,\n SEMANTIC_ATTRIBUTE_USER_USERNAME,\n} from '../../semanticAttributes';\nimport type { SerializedStreamedSpan, Span, StreamedSpanJSON } from '../../types/span';\nimport { getCombinedScopeData } from '../../utils/scopeData';\nimport { getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment } from '../../utils/url';\nimport {\n INTERNAL_getSegmentSpan,\n showSpanDropWarning,\n spanToStreamedSpanJSON,\n streamedSpanJsonToSerializedSpan,\n} from '../../utils/spanUtils';\nimport { getCapturedScopesOnSpan } from '../utils';\nimport { isStreamedBeforeSendSpanCallback } from './beforeSendSpan';\nimport { scopeContextsToSpanAttributes } from './scopeContextAttributes';\nimport { DEFAULT_ENVIRONMENT } from '../../constants';\n\nexport type SerializedStreamedSpanWithSegmentSpan = SerializedStreamedSpan & {\n _segmentSpan: Span;\n};\n\n/**\n * Captures a span and returns a JSON representation to be enqueued for sending.\n *\n * IMPORTANT: This function converts the span to JSON immediately to avoid writing\n * to an already-ended OTel span instance (which is blocked by the OTel Span class).\n *\n * @returns the final serialized span with a reference to its segment span. This reference\n * is needed later on to compute the DSC for the span envelope.\n */\nexport function captureSpan(span: Span, client: Client): SerializedStreamedSpanWithSegmentSpan {\n // Convert to JSON FIRST - we cannot write to an already-ended span\n const spanJSON = spanToStreamedSpanJSON(span);\n\n const segmentSpan = INTERNAL_getSegmentSpan(span);\n const serializedSegmentSpan = spanToStreamedSpanJSON(segmentSpan);\n\n const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n\n const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n\n applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, finalScopeData);\n\n // Backfill span data from OTel semantic conventions when not explicitly set.\n // OTel-originated spans don't have sentry.op, description, etc. — the non-streamed path\n // infers these in the SentrySpanExporter, but streamed spans skip the exporter entirely.\n // Access `kind` via duck-typing — OTel span objects have this property but it's not on Sentry's Span type.\n // This must run before all hooks and beforeSendSpan so that user callbacks can see and override inferred values.\n const spanKind = (span as { kind?: number }).kind;\n inferSpanDataFromOtelAttributes(spanJSON, spanKind);\n\n if (spanJSON.is_segment) {\n applyScopeToSegmentSpan(spanJSON, finalScopeData);\n applySdkMetadataToSegmentSpan(spanJSON, client);\n // Allow hook subscribers to mutate the segment span JSON\n // This also invokes the `processSegmentSpan` hook of all integrations\n client.emit('processSegmentSpan', spanJSON);\n }\n\n // This allows hook subscribers to mutate the span JSON\n // This also invokes the `processSpan` hook of all integrations\n client.emit('processSpan', spanJSON);\n\n const { beforeSendSpan } = client.getOptions();\n const processedSpan =\n beforeSendSpan && isStreamedBeforeSendSpanCallback(beforeSendSpan)\n ? applyBeforeSendSpanCallback(spanJSON, beforeSendSpan)\n : spanJSON;\n\n // Backfill sentry.span.source from sentry.source. Only `sentry.span.source` is respected by Sentry.\n // TODO(v11): Remove this backfill once we renamed SEMANTIC_ATTRIBUTE_SENTRY_SOURCE to sentry.span.source\n const spanNameSource = processedSpan.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (spanNameSource) {\n safeSetSpanJSONAttributes(processedSpan, {\n // Purposefully not using a constant defined here like in other attributes:\n // This will be the name for SEMANTIC_ATTRIBUTE_SENTRY_SOURCE in v11\n 'sentry.span.source': spanNameSource,\n });\n }\n\n return {\n ...streamedSpanJsonToSerializedSpan(processedSpan),\n _segmentSpan: segmentSpan,\n };\n}\n\nfunction applyScopeToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, scopeData: ScopeData): void {\n const contextAttributes = scopeContextsToSpanAttributes(scopeData.contexts);\n safeSetSpanJSONAttributes(segmentSpanJSON, contextAttributes);\n}\n\n/**\n * Safely set attributes on a span JSON.\n * If an attribute already exists, it will not be overwritten.\n */\nexport function safeSetSpanJSONAttributes(\n spanJSON: StreamedSpanJSON,\n newAttributes: RawAttributes<Record<string, unknown>>,\n): void {\n const originalAttributes = spanJSON.attributes ?? (spanJSON.attributes = {});\n\n Object.entries(newAttributes).forEach(([key, value]) => {\n if (value != null && !(key in originalAttributes)) {\n originalAttributes[key] = value;\n }\n });\n}\n\nfunction applySdkMetadataToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, client: Client): void {\n const integrationNames = client.getIntegrationNames();\n if (!integrationNames.length) return;\n\n safeSetSpanJSONAttributes(segmentSpanJSON, {\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS]: integrationNames,\n });\n}\n\nfunction applyCommonSpanAttributes(\n spanJSON: StreamedSpanJSON,\n serializedSegmentSpan: StreamedSpanJSON,\n client: Client,\n scopeData: ScopeData,\n): void {\n const sdk = client.getSdkMetadata();\n const { release, environment } = client.getOptions();\n\n // avoid overwriting any previously set attributes (from users or potentially our SDK instrumentation)\n safeSetSpanJSONAttributes(spanJSON, {\n [SEMANTIC_ATTRIBUTE_SENTRY_RELEASE]: release,\n [SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT]: environment || DEFAULT_ENVIRONMENT,\n [SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME]: serializedSegmentSpan.name,\n [SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID]: serializedSegmentSpan.span_id,\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME]: sdk?.sdk?.name,\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION]: sdk?.sdk?.version,\n [SEMANTIC_ATTRIBUTE_USER_ID]: scopeData.user?.id,\n [SEMANTIC_ATTRIBUTE_USER_EMAIL]: scopeData.user?.email,\n [SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS]: scopeData.user?.ip_address,\n [SEMANTIC_ATTRIBUTE_USER_USERNAME]: scopeData.user?.username,\n ...scopeData.attributes,\n });\n}\n\n/**\n * Apply a user-provided beforeSendSpan callback to a span JSON.\n */\nexport function applyBeforeSendSpanCallback(\n span: StreamedSpanJSON,\n beforeSendSpan: (span: StreamedSpanJSON) => StreamedSpanJSON,\n): StreamedSpanJSON {\n const modifedSpan = beforeSendSpan(span);\n if (!modifedSpan) {\n showSpanDropWarning();\n return span;\n }\n return modifedSpan;\n}\n\n// OTel SpanKind values (numeric to avoid importing from @opentelemetry/api)\nconst SPAN_KIND_SERVER = 1;\nconst SPAN_KIND_CLIENT = 2;\n\n/**\n * Infer and backfill span data from OTel semantic conventions.\n * This mirrors what the `SentrySpanExporter` does for non-streamed spans via `getSpanData`/`inferSpanData`.\n * Streamed spans skip the exporter, so we do the inference here during capture.\n *\n * Backfills: `sentry.op`, `sentry.source`, and `name` (description).\n * Uses `safeSetSpanJSONAttributes` so explicitly set attributes are never overwritten.\n */\n/** Exported only for tests. */\nexport function inferSpanDataFromOtelAttributes(spanJSON: StreamedSpanJSON, spanKind?: number): void {\n const attributes = spanJSON.attributes;\n if (!attributes) {\n return;\n }\n\n const httpMethod = attributes['http.request.method'] || attributes['http.method'];\n if (httpMethod) {\n inferHttpSpanData(spanJSON, attributes, spanKind, httpMethod);\n return;\n }\n\n const dbSystem = attributes['db.system.name'] || attributes['db.system'];\n const opIsCache =\n typeof attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'string' &&\n `${attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]}`.startsWith('cache.');\n if (dbSystem && !opIsCache) {\n inferDbSpanData(spanJSON, attributes);\n return;\n }\n\n if (attributes['rpc.service']) {\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'rpc' });\n return;\n }\n\n if (attributes['messaging.system']) {\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'message' });\n return;\n }\n\n const faasTrigger = attributes['faas.trigger'];\n if (faasTrigger) {\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${faasTrigger}` });\n }\n}\n\nfunction inferHttpSpanData(\n spanJSON: StreamedSpanJSON,\n attributes: RawAttributes<Record<string, unknown>>,\n spanKind: number | undefined,\n httpMethod: unknown,\n): void {\n // Infer op: http.client, http.server, or just http\n const opParts = ['http'];\n if (spanKind === SPAN_KIND_CLIENT) {\n opParts.push('client');\n } else if (spanKind === SPAN_KIND_SERVER) {\n opParts.push('server');\n }\n if (attributes['sentry.http.prefetch']) {\n opParts.push('prefetch');\n }\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: opParts.join('.') });\n\n // If the user set a custom span name via updateSpanName(), apply it — OTel instrumentation\n // may have overwritten span.name after the user set it, so we restore from the attribute.\n const customName = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n if (typeof customName === 'string') {\n spanJSON.name = customName;\n return;\n }\n\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'custom') {\n return;\n }\n\n const httpRoute = attributes['http.route'];\n if (typeof httpRoute === 'string') {\n spanJSON.name = `${httpMethod} ${httpRoute}`;\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route' });\n } else {\n // Infer span name from URL attributes, matching the non-streamed exporter's behavior.\n // Only overwrite the name for OTel spans (known spanKind)\n if (spanKind === SPAN_KIND_CLIENT || spanKind === SPAN_KIND_SERVER) {\n const urlPath = getUrlPath(attributes, spanKind);\n if (urlPath) {\n spanJSON.name = `${httpMethod} ${urlPath}`;\n }\n }\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' });\n }\n}\n\n/**\n * Extract a URL path from span attributes for use in the span name.\n * Mirrors the logic in the non-streamed exporter's `getSanitizedUrl`.\n */\nfunction getUrlPath(\n attributes: RawAttributes<Record<string, unknown>>,\n spanKind: number | undefined,\n): string | undefined {\n const httpUrl = attributes['http.url'] || attributes['url.full'];\n const httpTarget = attributes['http.target'];\n\n const parsedUrl = typeof httpUrl === 'string' ? parseUrl(httpUrl) : undefined;\n const sanitizedUrl = parsedUrl ? getSanitizedUrlString(parsedUrl) : undefined;\n\n // For server spans, prefer the relative target path\n if (spanKind === SPAN_KIND_SERVER && typeof httpTarget === 'string') {\n return stripUrlQueryAndFragment(httpTarget);\n }\n\n // For client spans (and others), use the full sanitized URL\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Fall back to target if no full URL is available\n if (typeof httpTarget === 'string') {\n return stripUrlQueryAndFragment(httpTarget);\n }\n\n return undefined;\n}\n\nfunction inferDbSpanData(spanJSON: StreamedSpanJSON, attributes: RawAttributes<Record<string, unknown>>): void {\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db' });\n\n // If the user set a custom span name via updateSpanName(), apply it.\n const customName = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n if (typeof customName === 'string') {\n spanJSON.name = customName;\n return;\n }\n\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'custom') {\n return;\n }\n\n const statement = attributes['db.statement'];\n if (statement) {\n spanJSON.name = `${statement}`;\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task' });\n }\n}\n"],"names":["spanToStreamedSpanJSON","INTERNAL_getSegmentSpan","getCapturedScopesOnSpan","getCombinedScopeData","beforeSendSpan","isStreamedBeforeSendSpanCallback","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","streamedSpanJsonToSerializedSpan","scopeContextsToSpanAttributes","SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS","SEMANTIC_ATTRIBUTE_SENTRY_RELEASE","SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT","DEFAULT_ENVIRONMENT","SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME","SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID","SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME","SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION","SEMANTIC_ATTRIBUTE_USER_ID","SEMANTIC_ATTRIBUTE_USER_EMAIL","SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS","SEMANTIC_ATTRIBUTE_USER_USERNAME","showSpanDropWarning","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME","parseUrl","getSanitizedUrlString","stripUrlQueryAndFragment"],"mappings":"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"}
{"version":3,"file":"captureSpan.js","sources":["../../../../src/tracing/spans/captureSpan.ts"],"sourcesContent":["import type { RawAttributes } from '../../attributes';\nimport type { Client } from '../../client';\nimport type { ScopeData } from '../../scope';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT,\n SEMANTIC_ATTRIBUTE_SENTRY_RELEASE,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n SEMANTIC_ATTRIBUTE_USER_EMAIL,\n SEMANTIC_ATTRIBUTE_USER_ID,\n SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS,\n SEMANTIC_ATTRIBUTE_USER_USERNAME,\n} from '../../semanticAttributes';\nimport type { SerializedStreamedSpan, Span, StreamedSpanJSON } from '../../types/span';\nimport { getCombinedScopeData } from '../../utils/scopeData';\nimport {\n INTERNAL_getSegmentSpan,\n showSpanDropWarning,\n spanToStreamedSpanJSON,\n streamedSpanJsonToSerializedSpan,\n} from '../../utils/spanUtils';\nimport { getCapturedScopesOnSpan } from '../utils';\nimport { isStreamedBeforeSendSpanCallback } from './beforeSendSpan';\nimport { scopeContextsToSpanAttributes } from './scopeContextAttributes';\nimport { DEFAULT_ENVIRONMENT } from '../../constants';\n\nexport type SerializedStreamedSpanWithSegmentSpan = SerializedStreamedSpan & {\n _segmentSpan: Span;\n};\n\n/**\n * Captures a span and returns a JSON representation to be enqueued for sending.\n *\n * IMPORTANT: This function converts the span to JSON immediately to avoid writing\n * to an already-ended OTel span instance (which is blocked by the OTel Span class).\n *\n * @returns the final serialized span with a reference to its segment span. This reference\n * is needed later on to compute the DSC for the span envelope.\n */\nexport function captureSpan(span: Span, client: Client): SerializedStreamedSpanWithSegmentSpan {\n // Convert to JSON FIRST - we cannot write to an already-ended span\n const spanJSON = spanToStreamedSpanJSON(span);\n\n const segmentSpan = INTERNAL_getSegmentSpan(span);\n const serializedSegmentSpan = spanToStreamedSpanJSON(segmentSpan);\n\n const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n\n const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n\n applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, finalScopeData);\n\n // Access `kind` via duck-typing — OTel span objects have this property but it's not on Sentry's Span type.\n // It is forwarded to `preprocessSpan` subscribers (e.g. the OpenTelemetry SDK backfills op/source/name from it).\n const spanKind = (span as { kind?: number }).kind;\n\n // Preprocess the span JSON before any other hooks run, so that `processSpan`/`processSegmentSpan`\n // subscribers (incl. integrations) and `beforeSendSpan` see fully inferred span data.\n client.emit('preprocessSpan', spanJSON, { spanKind });\n\n if (spanJSON.is_segment) {\n applyScopeToSegmentSpan(spanJSON, finalScopeData);\n applySdkMetadataToSegmentSpan(spanJSON, client);\n // Allow hook subscribers to mutate the segment span JSON\n // This also invokes the `processSegmentSpan` hook of all integrations\n client.emit('processSegmentSpan', spanJSON);\n }\n\n // This allows hook subscribers to mutate the span JSON\n // This also invokes the `processSpan` hook of all integrations\n client.emit('processSpan', spanJSON);\n\n const { beforeSendSpan } = client.getOptions();\n const processedSpan =\n beforeSendSpan && isStreamedBeforeSendSpanCallback(beforeSendSpan)\n ? applyBeforeSendSpanCallback(spanJSON, beforeSendSpan)\n : spanJSON;\n\n // Backfill sentry.span.source from sentry.source. Only `sentry.span.source` is respected by Sentry.\n // TODO(v11): Remove this backfill once we renamed SEMANTIC_ATTRIBUTE_SENTRY_SOURCE to sentry.span.source\n const spanNameSource = processedSpan.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (spanNameSource) {\n safeSetSpanJSONAttributes(processedSpan, {\n // Purposefully not using a constant defined here like in other attributes:\n // This will be the name for SEMANTIC_ATTRIBUTE_SENTRY_SOURCE in v11\n 'sentry.span.source': spanNameSource,\n });\n }\n\n return {\n ...streamedSpanJsonToSerializedSpan(processedSpan),\n _segmentSpan: segmentSpan,\n };\n}\n\nfunction applyScopeToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, scopeData: ScopeData): void {\n const contextAttributes = scopeContextsToSpanAttributes(scopeData.contexts);\n safeSetSpanJSONAttributes(segmentSpanJSON, contextAttributes);\n}\n\n/**\n * Safely set attributes on a span JSON.\n * If an attribute already exists, it will not be overwritten.\n */\nexport function safeSetSpanJSONAttributes(\n spanJSON: StreamedSpanJSON,\n newAttributes: RawAttributes<Record<string, unknown>>,\n): void {\n const originalAttributes = spanJSON.attributes ?? (spanJSON.attributes = {});\n\n Object.entries(newAttributes).forEach(([key, value]) => {\n if (value != null && !(key in originalAttributes)) {\n originalAttributes[key] = value;\n }\n });\n}\n\nfunction applySdkMetadataToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, client: Client): void {\n const integrationNames = client.getIntegrationNames();\n if (!integrationNames.length) return;\n\n safeSetSpanJSONAttributes(segmentSpanJSON, {\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS]: integrationNames,\n });\n}\n\nfunction applyCommonSpanAttributes(\n spanJSON: StreamedSpanJSON,\n serializedSegmentSpan: StreamedSpanJSON,\n client: Client,\n scopeData: ScopeData,\n): void {\n const sdk = client.getSdkMetadata();\n const { release, environment } = client.getOptions();\n\n // avoid overwriting any previously set attributes (from users or potentially our SDK instrumentation)\n safeSetSpanJSONAttributes(spanJSON, {\n [SEMANTIC_ATTRIBUTE_SENTRY_RELEASE]: release,\n [SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT]: environment || DEFAULT_ENVIRONMENT,\n [SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME]: serializedSegmentSpan.name,\n [SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID]: serializedSegmentSpan.span_id,\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME]: sdk?.sdk?.name,\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION]: sdk?.sdk?.version,\n [SEMANTIC_ATTRIBUTE_USER_ID]: scopeData.user?.id,\n [SEMANTIC_ATTRIBUTE_USER_EMAIL]: scopeData.user?.email,\n [SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS]: scopeData.user?.ip_address,\n [SEMANTIC_ATTRIBUTE_USER_USERNAME]: scopeData.user?.username,\n ...scopeData.attributes,\n });\n}\n\n/**\n * Apply a user-provided beforeSendSpan callback to a span JSON.\n */\nexport function applyBeforeSendSpanCallback(\n span: StreamedSpanJSON,\n beforeSendSpan: (span: StreamedSpanJSON) => StreamedSpanJSON,\n): StreamedSpanJSON {\n const modifedSpan = beforeSendSpan(span);\n if (!modifedSpan) {\n showSpanDropWarning();\n return span;\n }\n return modifedSpan;\n}\n"],"names":["spanToStreamedSpanJSON","INTERNAL_getSegmentSpan","getCapturedScopesOnSpan","getCombinedScopeData","beforeSendSpan","isStreamedBeforeSendSpanCallback","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","streamedSpanJsonToSerializedSpan","scopeContextsToSpanAttributes","SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS","SEMANTIC_ATTRIBUTE_SENTRY_RELEASE","SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT","DEFAULT_ENVIRONMENT","SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME","SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID","SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME","SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION","SEMANTIC_ATTRIBUTE_USER_ID","SEMANTIC_ATTRIBUTE_USER_EMAIL","SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS","SEMANTIC_ATTRIBUTE_USER_USERNAME","showSpanDropWarning"],"mappings":"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"}

@@ -8,2 +8,3 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const ISOLATION_SCOPE_ON_START_SPAN_FIELD = "_sentryIsolationScope";
const OTEL_SOURCE_INFERENCE_SPAN_FIELD = /* @__PURE__ */ Symbol.for("sentry.otelSourceInference");
function setCapturedScopesOnSpan(span, scope, isolationScope) {

@@ -22,5 +23,13 @@ if (span) {

}
function markSpanForOtelSourceInference(span) {
object.addNonEnumerableProperty(span, OTEL_SOURCE_INFERENCE_SPAN_FIELD, true);
}
function spanShouldInferOtelSource(span) {
return span[OTEL_SOURCE_INFERENCE_SPAN_FIELD] === true;
}
exports.getCapturedScopesOnSpan = getCapturedScopesOnSpan;
exports.markSpanForOtelSourceInference = markSpanForOtelSourceInference;
exports.setCapturedScopesOnSpan = setCapturedScopesOnSpan;
exports.spanShouldInferOtelSource = spanShouldInferOtelSource;
//# sourceMappingURL=utils.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"utils.js","sources":["../../../src/tracing/utils.ts"],"sourcesContent":["import type { Scope } from '../scope';\nimport type { Span } from '../types/span';\nimport { addNonEnumerableProperty } from '../utils/object';\nimport { derefWeakRef, makeWeakRef, type MaybeWeakRef } from '../utils/weakRef';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\ntype SpanWithScopes = Span & {\n [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: MaybeWeakRef<Scope>;\n};\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nexport function setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, makeWeakRef(isolationScope));\n // We don't wrap the scope with a WeakRef here because webkit aggressively garbage collects\n // and scopes are not held in memory for long periods of time.\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n * If WeakRef was used and scopes have been garbage collected, returns undefined for those scopes.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n const spanWithScopes = span as SpanWithScopes;\n\n return {\n scope: spanWithScopes[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: derefWeakRef(spanWithScopes[ISOLATION_SCOPE_ON_START_SPAN_FIELD]),\n };\n}\n"],"names":["addNonEnumerableProperty","makeWeakRef","derefWeakRef"],"mappings":";;;;;AAKA,MAAM,yBAAA,GAA4B,cAAA;AAClC,MAAM,mCAAA,GAAsC,uBAAA;AAQrC,SAAS,uBAAA,CAAwB,IAAA,EAAwB,KAAA,EAAc,cAAA,EAA6B;AACzG,EAAA,IAAI,IAAA,EAAM;AACR,IAAAA,+BAAA,CAAyB,IAAA,EAAM,mCAAA,EAAqCC,mBAAA,CAAY,cAAc,CAAC,CAAA;AAG/F,IAAAD,+BAAA,CAAyB,IAAA,EAAM,2BAA2B,KAAK,CAAA;AAAA,EACjE;AACF;AAMO,SAAS,wBAAwB,IAAA,EAAuD;AAC7F,EAAA,MAAM,cAAA,GAAiB,IAAA;AAEvB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,eAAe,yBAAyB,CAAA;AAAA,IAC/C,cAAA,EAAgBE,oBAAA,CAAa,cAAA,CAAe,mCAAmC,CAAC;AAAA,GAClF;AACF;;;;;"}
{"version":3,"file":"utils.js","sources":["../../../src/tracing/utils.ts"],"sourcesContent":["import type { Scope } from '../scope';\nimport type { Span } from '../types/span';\nimport { addNonEnumerableProperty } from '../utils/object';\nimport { derefWeakRef, makeWeakRef, type MaybeWeakRef } from '../utils/weakRef';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\n// Brand marking a span whose `sentry.source` should be inferred OTel-style at span end (by\n// `applyOtelSpanData`) rather than pinned. `SentryTraceProvider` sets it on the spans it creates\n// so they behave like OTel SDK spans, which carry no Sentry source concept. We use `Symbol.for`\n// so the key is shared across duplicated copies of `@sentry/core`.\nconst OTEL_SOURCE_INFERENCE_SPAN_FIELD = Symbol.for('sentry.otelSourceInference');\n\ntype SpanWithScopes = Span & {\n [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: MaybeWeakRef<Scope>;\n};\n\ntype SpanWithOtelSourceInference = Span & {\n [OTEL_SOURCE_INFERENCE_SPAN_FIELD]?: boolean;\n};\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nexport function setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, makeWeakRef(isolationScope));\n // We don't wrap the scope with a WeakRef here because webkit aggressively garbage collects\n // and scopes are not held in memory for long periods of time.\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n * If WeakRef was used and scopes have been garbage collected, returns undefined for those scopes.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n const spanWithScopes = span as SpanWithScopes;\n\n return {\n scope: spanWithScopes[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: derefWeakRef(spanWithScopes[ISOLATION_SCOPE_ON_START_SPAN_FIELD]),\n };\n}\n\n/**\n * Mark a span as eligible for OTel-style `sentry.source` inference at span end.\n * Set by `SentryTraceProvider` on the spans it creates; read by `SentrySpan.updateName()` and\n * `applyOtelSpanData()`.\n */\nexport function markSpanForOtelSourceInference(span: Span): void {\n addNonEnumerableProperty(span, OTEL_SOURCE_INFERENCE_SPAN_FIELD, true);\n}\n\n/** Whether a span is marked for OTel-style `sentry.source` inference (see {@link markSpanForOtelSourceInference}). */\nexport function spanShouldInferOtelSource(span: Span): boolean {\n return (span as SpanWithOtelSourceInference)[OTEL_SOURCE_INFERENCE_SPAN_FIELD] === true;\n}\n"],"names":["addNonEnumerableProperty","makeWeakRef","derefWeakRef"],"mappings":";;;;;AAKA,MAAM,yBAAA,GAA4B,cAAA;AAClC,MAAM,mCAAA,GAAsC,uBAAA;AAM5C,MAAM,gCAAA,mBAAmC,MAAA,CAAO,GAAA,CAAI,4BAA4B,CAAA;AAYzE,SAAS,uBAAA,CAAwB,IAAA,EAAwB,KAAA,EAAc,cAAA,EAA6B;AACzG,EAAA,IAAI,IAAA,EAAM;AACR,IAAAA,+BAAA,CAAyB,IAAA,EAAM,mCAAA,EAAqCC,mBAAA,CAAY,cAAc,CAAC,CAAA;AAG/F,IAAAD,+BAAA,CAAyB,IAAA,EAAM,2BAA2B,KAAK,CAAA;AAAA,EACjE;AACF;AAMO,SAAS,wBAAwB,IAAA,EAAuD;AAC7F,EAAA,MAAM,cAAA,GAAiB,IAAA;AAEvB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,eAAe,yBAAyB,CAAA;AAAA,IAC/C,cAAA,EAAgBE,oBAAA,CAAa,cAAA,CAAe,mCAAmC,CAAC;AAAA,GAClF;AACF;AAOO,SAAS,+BAA+B,IAAA,EAAkB;AAC/D,EAAAF,+BAAA,CAAyB,IAAA,EAAM,kCAAkC,IAAI,CAAA;AACvE;AAGO,SAAS,0BAA0B,IAAA,EAAqB;AAC7D,EAAA,OAAQ,IAAA,CAAqC,gCAAgC,CAAA,KAAM,IAAA;AACrF;;;;;;;"}
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const SDK_VERSION = "10.59.0" ;
const SDK_VERSION = "10.60.0" ;
exports.SDK_VERSION = SDK_VERSION;
//# sourceMappingURL=version.js.map
export { registerSpanErrorInstrumentation } from './tracing/errors.js';
export { getCapturedScopesOnSpan, setCapturedScopesOnSpan } from './tracing/utils.js';
export { getCapturedScopesOnSpan, markSpanForOtelSourceInference, setCapturedScopesOnSpan, spanShouldInferOtelSource } from './tracing/utils.js';
export { TRACING_DEFAULTS, startIdleSpan } from './tracing/idleSpan.js';

@@ -8,2 +8,3 @@ export { SentrySpan } from './tracing/sentrySpan.js';

export { SUPPRESS_TRACING_KEY, continueTrace, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan } from './tracing/trace.js';
export { bindScopeToEmitter } from './tracing/bindScopeToEmitter.js';
export { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan, spanToBaggageHeader } from './tracing/dynamicSamplingContext.js';

@@ -10,0 +11,0 @@ export { setMeasurement, timedEventsToMeasurements } from './tracing/measurement.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -11,4 +11,4 @@ import { getClient } from './currentScopes.js';

import { startInactiveSpan } from './tracing/trace.js';
import { getTraceData } from './utils/traceData.js';
import { stripDataUrlContent, parseStringToURLObject, getSanitizedUrlStringFromUrlObject, isURLObjectRelative } from './utils/url.js';
import { getTraceData } from './utils/traceData.js';

@@ -15,0 +15,0 @@ function instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeaders, spans, spanOriginOrOptions) {

export { registerSpanErrorInstrumentation } from './tracing/errors.js';
export { getCapturedScopesOnSpan, setCapturedScopesOnSpan } from './tracing/utils.js';
export { getCapturedScopesOnSpan, markSpanForOtelSourceInference, setCapturedScopesOnSpan, spanShouldInferOtelSource } from './tracing/utils.js';
export { TRACING_DEFAULTS, startIdleSpan } from './tracing/idleSpan.js';

@@ -8,2 +8,3 @@ export { SentrySpan } from './tracing/sentrySpan.js';

export { SUPPRESS_TRACING_KEY, continueTrace, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan } from './tracing/trace.js';
export { bindScopeToEmitter } from './tracing/bindScopeToEmitter.js';
export { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan, spanToBaggageHeader } from './tracing/dynamicSamplingContext.js';

@@ -10,0 +11,0 @@ export { setMeasurement, timedEventsToMeasurements } from './tracing/measurement.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -1,1 +0,1 @@

{"type":"module","version":"10.59.0","sideEffects":false}
{"type":"module","version":"10.60.0","sideEffects":false}
export { registerSpanErrorInstrumentation } from './tracing/errors.js';
export { getCapturedScopesOnSpan, setCapturedScopesOnSpan } from './tracing/utils.js';
export { getCapturedScopesOnSpan, markSpanForOtelSourceInference, setCapturedScopesOnSpan, spanShouldInferOtelSource } from './tracing/utils.js';
export { TRACING_DEFAULTS, startIdleSpan } from './tracing/idleSpan.js';

@@ -8,2 +8,3 @@ export { SentrySpan } from './tracing/sentrySpan.js';

export { SUPPRESS_TRACING_KEY, continueTrace, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan } from './tracing/trace.js';
export { bindScopeToEmitter } from './tracing/bindScopeToEmitter.js';
export { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan, spanToBaggageHeader } from './tracing/dynamicSamplingContext.js';

@@ -10,0 +11,0 @@ export { setMeasurement, timedEventsToMeasurements } from './tracing/measurement.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -13,3 +13,3 @@ import { getClient, getCurrentScope } from '../currentScopes.js';

import { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled.js';
import { getCapturedScopesOnSpan } from './utils.js';
import { spanShouldInferOtelSource, getCapturedScopesOnSpan } from './utils.js';

@@ -125,3 +125,5 @@ const MAX_SPAN_COUNT = 1e3;

this._name = name;
this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, "custom");
if (!spanShouldInferOtelSource(this)) {
this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, "custom");
}
return this;

@@ -128,0 +130,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"sentrySpan.js","sources":["../../../src/tracing/sentrySpan.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { createSpanEnvelope } from '../envelope';\nimport {\n SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n SEMANTIC_ATTRIBUTE_PROFILE_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type { SpanEnvelope } from '../types/envelope';\nimport type { TransactionEvent } from '../types/event';\nimport type { SpanLink } from '../types/link';\nimport type {\n SentrySpanArguments,\n Span,\n SpanAttributes,\n SpanAttributeValue,\n SpanContextData,\n SpanJSON,\n SpanOrigin,\n SpanTimeInput,\n StreamedSpanJSON,\n} from '../types/span';\nimport type { SpanStatus } from '../types/spanStatus';\nimport type { TimedEvent } from '../types/timedEvent';\nimport { debug } from '../utils/debug-logger';\nimport { generateSpanId, generateTraceId } from '../utils/propagationContext';\nimport {\n convertSpanLinksForEnvelope,\n getRootSpan,\n getSimpleStatusMessage,\n getSpanDescendants,\n getStatusMessage,\n getStreamedSpanLinks,\n spanTimeInputToSeconds,\n spanToJSON,\n spanToTransactionTraceContext,\n TRACE_FLAG_NONE,\n TRACE_FLAG_SAMPLED,\n} from '../utils/spanUtils';\nimport { timestampInSeconds } from '../utils/time';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanEnd } from './logSpans';\nimport { timedEventsToMeasurements } from './measurement';\nimport { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled';\nimport { getCapturedScopesOnSpan } from './utils';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nexport class SentrySpan implements Span {\n protected _traceId: string;\n protected _spanId: string;\n protected _parentSpanId?: string | undefined;\n protected _sampled: boolean | undefined;\n protected _name?: string | undefined;\n protected _attributes: SpanAttributes;\n protected _links?: SpanLink[];\n /** Epoch timestamp in seconds when the span started. */\n protected _startTime: number;\n /** Epoch timestamp in seconds when the span ended. */\n protected _endTime?: number | undefined;\n /** Internal keeper of the status */\n protected _status?: SpanStatus;\n /** The timed events added to this span. */\n protected _events: TimedEvent[];\n\n /** if true, treat span as a standalone span (not part of a transaction) */\n private _isStandaloneSpan?: boolean;\n\n /**\n * You should never call the constructor manually, always use `Sentry.startSpan()`\n * or other span methods.\n * @internal\n * @hideconstructor\n * @hidden\n */\n public constructor(spanContext: SentrySpanArguments = {}) {\n this._traceId = spanContext.traceId || generateTraceId();\n this._spanId = spanContext.spanId || generateSpanId();\n this._startTime = spanContext.startTimestamp || timestampInSeconds();\n this._links = spanContext.links;\n\n this._attributes = {};\n this.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n ...spanContext.attributes,\n });\n\n this._name = spanContext.name;\n\n if (spanContext.parentSpanId) {\n this._parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.endTimestamp) {\n this._endTime = spanContext.endTimestamp;\n }\n\n this._events = [];\n\n this._isStandaloneSpan = spanContext.isStandalone;\n\n // If the span is already ended, ensure we finalize the span immediately\n if (this._endTime) {\n this._onSpanEnded();\n }\n }\n\n /** @inheritDoc */\n public addLink(link: SpanLink): this {\n if (this._links) {\n this._links.push(link);\n } else {\n this._links = [link];\n }\n return this;\n }\n\n /** @inheritDoc */\n public addLinks(links: SpanLink[]): this {\n if (this._links) {\n this._links.push(...links);\n } else {\n this._links = links;\n }\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n public recordException(_exception: unknown, _time?: number | undefined): void {\n // noop\n }\n\n /** @inheritdoc */\n public spanContext(): SpanContextData {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n public setAttribute(key: string, value: SpanAttributeValue | undefined): this {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n\n return this;\n }\n\n /** @inheritdoc */\n public setAttributes(attributes: SpanAttributes): this {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for browser tracing where we want to adjust the start time afterwards.\n * USE THIS WITH CAUTION!\n *\n * @hidden\n * @internal\n */\n public updateStartTime(timeInput: SpanTimeInput): void {\n this._startTime = spanTimeInputToSeconds(timeInput);\n }\n\n /**\n * @inheritDoc\n */\n public setStatus(value: SpanStatus): this {\n this._status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public updateName(name: string): this {\n this._name = name;\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom');\n return this;\n }\n\n /** @inheritdoc */\n public end(endTimestamp?: SpanTimeInput): void {\n // If already ended, skip\n if (this._endTime) {\n return;\n }\n\n this._endTime = spanTimeInputToSeconds(endTimestamp);\n logSpanEnd(this);\n\n this._onSpanEnded();\n }\n\n /**\n * Get JSON representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToJSON(span)` instead.\n */\n public getSpanJSON(): SpanJSON {\n return {\n data: this._attributes,\n description: this._name,\n op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n parent_span_id: this._parentSpanId,\n span_id: this._spanId,\n start_timestamp: this._startTime,\n status: getStatusMessage(this._status),\n timestamp: this._endTime,\n trace_id: this._traceId,\n origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,\n measurements: timedEventsToMeasurements(this._events),\n is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n links: convertSpanLinksForEnvelope(this._links),\n };\n }\n\n /**\n * Get {@link StreamedSpanJSON} representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToStreamedSpanJSON(span)` instead.\n */\n public getStreamedSpanJSON(): StreamedSpanJSON {\n return {\n name: this._name ?? '',\n span_id: this._spanId,\n trace_id: this._traceId,\n parent_span_id: this._parentSpanId,\n start_timestamp: this._startTime,\n // just in case _endTime is not set, we use the start time (i.e. duration 0)\n end_timestamp: this._endTime ?? this._startTime,\n is_segment: this._isStandaloneSpan || this === getRootSpan(this),\n status: getSimpleStatusMessage(this._status),\n attributes: this._attributes,\n links: getStreamedSpanLinks(this._links),\n };\n }\n\n /** @inheritdoc */\n public isRecording(): boolean {\n return !this._endTime && !!this._sampled;\n }\n\n /**\n * @inheritdoc\n */\n public addEvent(\n name: string,\n attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n startTime?: SpanTimeInput,\n ): this {\n DEBUG_BUILD && debug.log('[Tracing] Adding an event to span:', name);\n\n const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n const event: TimedEvent = {\n name,\n time: spanTimeInputToSeconds(time),\n attributes,\n };\n\n this._events.push(event);\n\n return this;\n }\n\n /**\n * This method should generally not be used,\n * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n * USE THIS WITH CAUTION!\n * @internal\n * @hidden\n * @experimental\n */\n public isStandaloneSpan(): boolean {\n return !!this._isStandaloneSpan;\n }\n\n /** Emit `spanEnd` when the span is ended. */\n private _onSpanEnded(): void {\n const client = getClient();\n if (client) {\n client.emit('spanEnd', this);\n // Guarding sending standalone v1 spans as v2 streamed spans for now.\n // Otherwise they'd be sent once as v1 spans and again as streamed spans.\n // We'll migrate CLS and LCP spans to streamed spans in a later PR and\n // INP spans in the next major of the SDK. At that point, we can fully remove\n // standalone v1 spans <3\n if (!this._isStandaloneSpan) {\n client.emit('afterSpanEnd', this);\n }\n }\n\n // A segment span is basically the root span of a local span tree.\n // So for now, this is either what we previously refer to as the root span,\n // or a standalone span.\n const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n if (!isSegmentSpan) {\n return;\n }\n\n // if this is a standalone span, we send it immediately\n if (this._isStandaloneSpan) {\n if (this._sampled) {\n sendSpanEnvelope(createSpanEnvelope([this], client));\n } else {\n DEBUG_BUILD &&\n debug.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n if (client) {\n client.recordDroppedEvent('sample_rate', 'span');\n }\n }\n return;\n } else if (client && hasSpanStreamingEnabled(client)) {\n // TODO (spans): Remove standalone span custom logic in favor of sending simple v2 web vital spans\n client.emit('afterSegmentSpanEnd', this);\n return;\n }\n\n const transactionEvent = this._convertSpanToTransaction();\n if (transactionEvent) {\n const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n scope.captureEvent(transactionEvent);\n }\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n private _convertSpanToTransaction(): TransactionEvent | undefined {\n // We can only convert finished spans\n if (!isFullFinishedSpan(spanToJSON(this))) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && debug.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n this._name = '<unlabeled transaction>';\n }\n\n const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n\n const normalizedRequest = capturedSpanScope?.getScopeData().sdkProcessingMetadata?.normalizedRequest;\n\n if (this._sampled !== true) {\n return undefined;\n }\n\n // The transaction span itself as well as any potential standalone spans should be filtered out\n const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // remove internal root span attributes we don't need to send.\n /* eslint-disable @typescript-eslint/no-dynamic-delete */\n delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n let hasGenAiSpans = false;\n spans.forEach(span => {\n delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n if (span.op?.startsWith('gen_ai.')) {\n hasGenAiSpans = true;\n }\n });\n // eslint-enabled-next-line @typescript-eslint/no-dynamic-delete\n\n const transaction: TransactionEvent = {\n contexts: {\n trace: spanToTransactionTraceContext(this),\n },\n spans:\n // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n // we do not use spans anymore after this point\n spans.length > MAX_SPAN_COUNT\n ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n : spans,\n start_timestamp: this._startTime,\n timestamp: this._endTime,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n capturedSpanScope,\n capturedSpanIsolationScope,\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n hasGenAiSpans,\n },\n request: normalizedRequest,\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const measurements = timedEventsToMeasurements(this._events);\n const hasMeasurements = measurements && Object.keys(measurements).length;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n debug.log(\n '[Measurements] Adding measurements to transaction event',\n JSON.stringify(measurements, undefined, 2),\n );\n transaction.measurements = measurements;\n }\n\n return transaction;\n }\n}\n\nfunction isSpanTimeInput(value: undefined | SpanAttributes | SpanTimeInput): value is SpanTimeInput {\n return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input: Partial<SpanJSON>): input is SpanJSON {\n return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span: Span): boolean {\n return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope: SpanEnvelope): void {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const spanItems = envelope[1];\n if (!spanItems || spanItems.length === 0) {\n client.recordDroppedEvent('before_send', 'span');\n return;\n }\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n client.sendEnvelope(envelope);\n}\n"],"names":[],"mappings":"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"}
{"version":3,"file":"sentrySpan.js","sources":["../../../src/tracing/sentrySpan.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { createSpanEnvelope } from '../envelope';\nimport {\n SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n SEMANTIC_ATTRIBUTE_PROFILE_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type { SpanEnvelope } from '../types/envelope';\nimport type { TransactionEvent } from '../types/event';\nimport type { SpanLink } from '../types/link';\nimport type {\n SentrySpanArguments,\n Span,\n SpanAttributes,\n SpanAttributeValue,\n SpanContextData,\n SpanJSON,\n SpanOrigin,\n SpanTimeInput,\n StreamedSpanJSON,\n} from '../types/span';\nimport type { SpanStatus } from '../types/spanStatus';\nimport type { TimedEvent } from '../types/timedEvent';\nimport { debug } from '../utils/debug-logger';\nimport { generateSpanId, generateTraceId } from '../utils/propagationContext';\nimport {\n convertSpanLinksForEnvelope,\n getRootSpan,\n getSimpleStatusMessage,\n getSpanDescendants,\n getStatusMessage,\n getStreamedSpanLinks,\n spanTimeInputToSeconds,\n spanToJSON,\n spanToTransactionTraceContext,\n TRACE_FLAG_NONE,\n TRACE_FLAG_SAMPLED,\n} from '../utils/spanUtils';\nimport { timestampInSeconds } from '../utils/time';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanEnd } from './logSpans';\nimport { timedEventsToMeasurements } from './measurement';\nimport { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled';\nimport { getCapturedScopesOnSpan, spanShouldInferOtelSource } from './utils';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nexport class SentrySpan implements Span {\n protected _traceId: string;\n protected _spanId: string;\n protected _parentSpanId?: string | undefined;\n protected _sampled: boolean | undefined;\n protected _name?: string | undefined;\n protected _attributes: SpanAttributes;\n protected _links?: SpanLink[];\n /** Epoch timestamp in seconds when the span started. */\n protected _startTime: number;\n /** Epoch timestamp in seconds when the span ended. */\n protected _endTime?: number | undefined;\n /** Internal keeper of the status */\n protected _status?: SpanStatus;\n /** The timed events added to this span. */\n protected _events: TimedEvent[];\n\n /** if true, treat span as a standalone span (not part of a transaction) */\n private _isStandaloneSpan?: boolean;\n\n /**\n * You should never call the constructor manually, always use `Sentry.startSpan()`\n * or other span methods.\n * @internal\n * @hideconstructor\n * @hidden\n */\n public constructor(spanContext: SentrySpanArguments = {}) {\n this._traceId = spanContext.traceId || generateTraceId();\n this._spanId = spanContext.spanId || generateSpanId();\n this._startTime = spanContext.startTimestamp || timestampInSeconds();\n this._links = spanContext.links;\n\n this._attributes = {};\n this.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n ...spanContext.attributes,\n });\n\n this._name = spanContext.name;\n\n if (spanContext.parentSpanId) {\n this._parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.endTimestamp) {\n this._endTime = spanContext.endTimestamp;\n }\n\n this._events = [];\n\n this._isStandaloneSpan = spanContext.isStandalone;\n\n // If the span is already ended, ensure we finalize the span immediately\n if (this._endTime) {\n this._onSpanEnded();\n }\n }\n\n /** @inheritDoc */\n public addLink(link: SpanLink): this {\n if (this._links) {\n this._links.push(link);\n } else {\n this._links = [link];\n }\n return this;\n }\n\n /** @inheritDoc */\n public addLinks(links: SpanLink[]): this {\n if (this._links) {\n this._links.push(...links);\n } else {\n this._links = links;\n }\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n public recordException(_exception: unknown, _time?: number | undefined): void {\n // noop\n }\n\n /** @inheritdoc */\n public spanContext(): SpanContextData {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n public setAttribute(key: string, value: SpanAttributeValue | undefined): this {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n\n return this;\n }\n\n /** @inheritdoc */\n public setAttributes(attributes: SpanAttributes): this {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for browser tracing where we want to adjust the start time afterwards.\n * USE THIS WITH CAUTION!\n *\n * @hidden\n * @internal\n */\n public updateStartTime(timeInput: SpanTimeInput): void {\n this._startTime = spanTimeInputToSeconds(timeInput);\n }\n\n /**\n * @inheritDoc\n */\n public setStatus(value: SpanStatus): this {\n this._status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public updateName(name: string): this {\n this._name = name;\n // Renaming a span marks its name as explicitly chosen, so we stamp `custom`.\n // The exception is spans created by SentryTraceProvider: those are branded for\n // OTel-style source inference at span end (mirroring OTel SDK spans, which have\n // no Sentry source concept), so instrumentations renaming them must not pin\n // `custom` — applyOtelSpanData infers the correct source (e.g. 'route', 'task').\n if (!spanShouldInferOtelSource(this)) {\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom');\n }\n return this;\n }\n\n /** @inheritdoc */\n public end(endTimestamp?: SpanTimeInput): void {\n // If already ended, skip\n if (this._endTime) {\n return;\n }\n\n this._endTime = spanTimeInputToSeconds(endTimestamp);\n logSpanEnd(this);\n\n this._onSpanEnded();\n }\n\n /**\n * Get JSON representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToJSON(span)` instead.\n */\n public getSpanJSON(): SpanJSON {\n return {\n data: this._attributes,\n description: this._name,\n op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n parent_span_id: this._parentSpanId,\n span_id: this._spanId,\n start_timestamp: this._startTime,\n status: getStatusMessage(this._status),\n timestamp: this._endTime,\n trace_id: this._traceId,\n origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,\n measurements: timedEventsToMeasurements(this._events),\n is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n links: convertSpanLinksForEnvelope(this._links),\n };\n }\n\n /**\n * Get {@link StreamedSpanJSON} representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToStreamedSpanJSON(span)` instead.\n */\n public getStreamedSpanJSON(): StreamedSpanJSON {\n return {\n name: this._name ?? '',\n span_id: this._spanId,\n trace_id: this._traceId,\n parent_span_id: this._parentSpanId,\n start_timestamp: this._startTime,\n // just in case _endTime is not set, we use the start time (i.e. duration 0)\n end_timestamp: this._endTime ?? this._startTime,\n is_segment: this._isStandaloneSpan || this === getRootSpan(this),\n status: getSimpleStatusMessage(this._status),\n attributes: this._attributes,\n links: getStreamedSpanLinks(this._links),\n };\n }\n\n /** @inheritdoc */\n public isRecording(): boolean {\n return !this._endTime && !!this._sampled;\n }\n\n /**\n * @inheritdoc\n */\n public addEvent(\n name: string,\n attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n startTime?: SpanTimeInput,\n ): this {\n DEBUG_BUILD && debug.log('[Tracing] Adding an event to span:', name);\n\n const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n const event: TimedEvent = {\n name,\n time: spanTimeInputToSeconds(time),\n attributes,\n };\n\n this._events.push(event);\n\n return this;\n }\n\n /**\n * This method should generally not be used,\n * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n * USE THIS WITH CAUTION!\n * @internal\n * @hidden\n * @experimental\n */\n public isStandaloneSpan(): boolean {\n return !!this._isStandaloneSpan;\n }\n\n /** Emit `spanEnd` when the span is ended. */\n private _onSpanEnded(): void {\n const client = getClient();\n if (client) {\n client.emit('spanEnd', this);\n // Guarding sending standalone v1 spans as v2 streamed spans for now.\n // Otherwise they'd be sent once as v1 spans and again as streamed spans.\n // We'll migrate CLS and LCP spans to streamed spans in a later PR and\n // INP spans in the next major of the SDK. At that point, we can fully remove\n // standalone v1 spans <3\n if (!this._isStandaloneSpan) {\n client.emit('afterSpanEnd', this);\n }\n }\n\n // A segment span is basically the root span of a local span tree.\n // So for now, this is either what we previously refer to as the root span,\n // or a standalone span.\n const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n if (!isSegmentSpan) {\n return;\n }\n\n // if this is a standalone span, we send it immediately\n if (this._isStandaloneSpan) {\n if (this._sampled) {\n sendSpanEnvelope(createSpanEnvelope([this], client));\n } else {\n DEBUG_BUILD &&\n debug.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n if (client) {\n client.recordDroppedEvent('sample_rate', 'span');\n }\n }\n return;\n } else if (client && hasSpanStreamingEnabled(client)) {\n // TODO (spans): Remove standalone span custom logic in favor of sending simple v2 web vital spans\n client.emit('afterSegmentSpanEnd', this);\n return;\n }\n\n const transactionEvent = this._convertSpanToTransaction();\n if (transactionEvent) {\n const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n scope.captureEvent(transactionEvent);\n }\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n private _convertSpanToTransaction(): TransactionEvent | undefined {\n // We can only convert finished spans\n if (!isFullFinishedSpan(spanToJSON(this))) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && debug.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n this._name = '<unlabeled transaction>';\n }\n\n const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n\n const normalizedRequest = capturedSpanScope?.getScopeData().sdkProcessingMetadata?.normalizedRequest;\n\n if (this._sampled !== true) {\n return undefined;\n }\n\n // The transaction span itself as well as any potential standalone spans should be filtered out\n const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // remove internal root span attributes we don't need to send.\n /* eslint-disable @typescript-eslint/no-dynamic-delete */\n delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n let hasGenAiSpans = false;\n spans.forEach(span => {\n delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n if (span.op?.startsWith('gen_ai.')) {\n hasGenAiSpans = true;\n }\n });\n // eslint-enabled-next-line @typescript-eslint/no-dynamic-delete\n\n const transaction: TransactionEvent = {\n contexts: {\n trace: spanToTransactionTraceContext(this),\n },\n spans:\n // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n // we do not use spans anymore after this point\n spans.length > MAX_SPAN_COUNT\n ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n : spans,\n start_timestamp: this._startTime,\n timestamp: this._endTime,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n capturedSpanScope,\n capturedSpanIsolationScope,\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n hasGenAiSpans,\n },\n request: normalizedRequest,\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const measurements = timedEventsToMeasurements(this._events);\n const hasMeasurements = measurements && Object.keys(measurements).length;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n debug.log(\n '[Measurements] Adding measurements to transaction event',\n JSON.stringify(measurements, undefined, 2),\n );\n transaction.measurements = measurements;\n }\n\n return transaction;\n }\n}\n\nfunction isSpanTimeInput(value: undefined | SpanAttributes | SpanTimeInput): value is SpanTimeInput {\n return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input: Partial<SpanJSON>): input is SpanJSON {\n return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span: Span): boolean {\n return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope: SpanEnvelope): void {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const spanItems = envelope[1];\n if (!spanItems || spanItems.length === 0) {\n client.recordDroppedEvent('before_send', 'span');\n return;\n }\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n client.sendEnvelope(envelope);\n}\n"],"names":[],"mappings":"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"}

@@ -1,4 +0,3 @@

import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_USER_USERNAME, SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS, SEMANTIC_ATTRIBUTE_USER_EMAIL, SEMANTIC_ATTRIBUTE_USER_ID, SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME, SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID, SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME, SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT, SEMANTIC_ATTRIBUTE_SENTRY_RELEASE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../../semanticAttributes.js';
import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_USER_USERNAME, SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS, SEMANTIC_ATTRIBUTE_USER_EMAIL, SEMANTIC_ATTRIBUTE_USER_ID, SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME, SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID, SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME, SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT, SEMANTIC_ATTRIBUTE_SENTRY_RELEASE, SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS } from '../../semanticAttributes.js';
import { getCombinedScopeData } from '../../utils/scopeData.js';
import { parseUrl, getSanitizedUrlString, stripUrlQueryAndFragment } from '../../utils/url.js';
import { spanToStreamedSpanJSON, INTERNAL_getSegmentSpan, streamedSpanJsonToSerializedSpan, showSpanDropWarning } from '../../utils/spanUtils.js';

@@ -18,3 +17,3 @@ import { getCapturedScopesOnSpan } from '../utils.js';

const spanKind = span.kind;
inferSpanDataFromOtelAttributes(spanJSON, spanKind);
client.emit("preprocessSpan", spanJSON, { spanKind });
if (spanJSON.is_segment) {

@@ -85,100 +84,4 @@ applyScopeToSegmentSpan(spanJSON, finalScopeData);

}
const SPAN_KIND_SERVER = 1;
const SPAN_KIND_CLIENT = 2;
function inferSpanDataFromOtelAttributes(spanJSON, spanKind) {
const attributes = spanJSON.attributes;
if (!attributes) {
return;
}
const httpMethod = attributes["http.request.method"] || attributes["http.method"];
if (httpMethod) {
inferHttpSpanData(spanJSON, attributes, spanKind, httpMethod);
return;
}
const dbSystem = attributes["db.system.name"] || attributes["db.system"];
const opIsCache = typeof attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === "string" && `${attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]}`.startsWith("cache.");
if (dbSystem && !opIsCache) {
inferDbSpanData(spanJSON, attributes);
return;
}
if (attributes["rpc.service"]) {
safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: "rpc" });
return;
}
if (attributes["messaging.system"]) {
safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: "message" });
return;
}
const faasTrigger = attributes["faas.trigger"];
if (faasTrigger) {
safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${faasTrigger}` });
}
}
function inferHttpSpanData(spanJSON, attributes, spanKind, httpMethod) {
const opParts = ["http"];
if (spanKind === SPAN_KIND_CLIENT) {
opParts.push("client");
} else if (spanKind === SPAN_KIND_SERVER) {
opParts.push("server");
}
if (attributes["sentry.http.prefetch"]) {
opParts.push("prefetch");
}
safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: opParts.join(".") });
const customName = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];
if (typeof customName === "string") {
spanJSON.name = customName;
return;
}
if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === "custom") {
return;
}
const httpRoute = attributes["http.route"];
if (typeof httpRoute === "string") {
spanJSON.name = `${httpMethod} ${httpRoute}`;
safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "route" });
} else {
if (spanKind === SPAN_KIND_CLIENT || spanKind === SPAN_KIND_SERVER) {
const urlPath = getUrlPath(attributes, spanKind);
if (urlPath) {
spanJSON.name = `${httpMethod} ${urlPath}`;
}
}
safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "url" });
}
}
function getUrlPath(attributes, spanKind) {
const httpUrl = attributes["http.url"] || attributes["url.full"];
const httpTarget = attributes["http.target"];
const parsedUrl = typeof httpUrl === "string" ? parseUrl(httpUrl) : void 0;
const sanitizedUrl = parsedUrl ? getSanitizedUrlString(parsedUrl) : void 0;
if (spanKind === SPAN_KIND_SERVER && typeof httpTarget === "string") {
return stripUrlQueryAndFragment(httpTarget);
}
if (sanitizedUrl) {
return sanitizedUrl;
}
if (typeof httpTarget === "string") {
return stripUrlQueryAndFragment(httpTarget);
}
return void 0;
}
function inferDbSpanData(spanJSON, attributes) {
safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: "db" });
const customName = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];
if (typeof customName === "string") {
spanJSON.name = customName;
return;
}
if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === "custom") {
return;
}
const statement = attributes["db.statement"];
if (statement) {
spanJSON.name = `${statement}`;
safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "task" });
}
}
export { applyBeforeSendSpanCallback, captureSpan, inferSpanDataFromOtelAttributes, safeSetSpanJSONAttributes };
export { applyBeforeSendSpanCallback, captureSpan, safeSetSpanJSONAttributes };
//# sourceMappingURL=captureSpan.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"captureSpan.js","sources":["../../../../src/tracing/spans/captureSpan.ts"],"sourcesContent":["import type { RawAttributes } from '../../attributes';\nimport type { Client } from '../../client';\nimport type { ScopeData } from '../../scope';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_RELEASE,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n SEMANTIC_ATTRIBUTE_USER_EMAIL,\n SEMANTIC_ATTRIBUTE_USER_ID,\n SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS,\n SEMANTIC_ATTRIBUTE_USER_USERNAME,\n} from '../../semanticAttributes';\nimport type { SerializedStreamedSpan, Span, StreamedSpanJSON } from '../../types/span';\nimport { getCombinedScopeData } from '../../utils/scopeData';\nimport { getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment } from '../../utils/url';\nimport {\n INTERNAL_getSegmentSpan,\n showSpanDropWarning,\n spanToStreamedSpanJSON,\n streamedSpanJsonToSerializedSpan,\n} from '../../utils/spanUtils';\nimport { getCapturedScopesOnSpan } from '../utils';\nimport { isStreamedBeforeSendSpanCallback } from './beforeSendSpan';\nimport { scopeContextsToSpanAttributes } from './scopeContextAttributes';\nimport { DEFAULT_ENVIRONMENT } from '../../constants';\n\nexport type SerializedStreamedSpanWithSegmentSpan = SerializedStreamedSpan & {\n _segmentSpan: Span;\n};\n\n/**\n * Captures a span and returns a JSON representation to be enqueued for sending.\n *\n * IMPORTANT: This function converts the span to JSON immediately to avoid writing\n * to an already-ended OTel span instance (which is blocked by the OTel Span class).\n *\n * @returns the final serialized span with a reference to its segment span. This reference\n * is needed later on to compute the DSC for the span envelope.\n */\nexport function captureSpan(span: Span, client: Client): SerializedStreamedSpanWithSegmentSpan {\n // Convert to JSON FIRST - we cannot write to an already-ended span\n const spanJSON = spanToStreamedSpanJSON(span);\n\n const segmentSpan = INTERNAL_getSegmentSpan(span);\n const serializedSegmentSpan = spanToStreamedSpanJSON(segmentSpan);\n\n const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n\n const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n\n applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, finalScopeData);\n\n // Backfill span data from OTel semantic conventions when not explicitly set.\n // OTel-originated spans don't have sentry.op, description, etc. — the non-streamed path\n // infers these in the SentrySpanExporter, but streamed spans skip the exporter entirely.\n // Access `kind` via duck-typing — OTel span objects have this property but it's not on Sentry's Span type.\n // This must run before all hooks and beforeSendSpan so that user callbacks can see and override inferred values.\n const spanKind = (span as { kind?: number }).kind;\n inferSpanDataFromOtelAttributes(spanJSON, spanKind);\n\n if (spanJSON.is_segment) {\n applyScopeToSegmentSpan(spanJSON, finalScopeData);\n applySdkMetadataToSegmentSpan(spanJSON, client);\n // Allow hook subscribers to mutate the segment span JSON\n // This also invokes the `processSegmentSpan` hook of all integrations\n client.emit('processSegmentSpan', spanJSON);\n }\n\n // This allows hook subscribers to mutate the span JSON\n // This also invokes the `processSpan` hook of all integrations\n client.emit('processSpan', spanJSON);\n\n const { beforeSendSpan } = client.getOptions();\n const processedSpan =\n beforeSendSpan && isStreamedBeforeSendSpanCallback(beforeSendSpan)\n ? applyBeforeSendSpanCallback(spanJSON, beforeSendSpan)\n : spanJSON;\n\n // Backfill sentry.span.source from sentry.source. Only `sentry.span.source` is respected by Sentry.\n // TODO(v11): Remove this backfill once we renamed SEMANTIC_ATTRIBUTE_SENTRY_SOURCE to sentry.span.source\n const spanNameSource = processedSpan.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (spanNameSource) {\n safeSetSpanJSONAttributes(processedSpan, {\n // Purposefully not using a constant defined here like in other attributes:\n // This will be the name for SEMANTIC_ATTRIBUTE_SENTRY_SOURCE in v11\n 'sentry.span.source': spanNameSource,\n });\n }\n\n return {\n ...streamedSpanJsonToSerializedSpan(processedSpan),\n _segmentSpan: segmentSpan,\n };\n}\n\nfunction applyScopeToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, scopeData: ScopeData): void {\n const contextAttributes = scopeContextsToSpanAttributes(scopeData.contexts);\n safeSetSpanJSONAttributes(segmentSpanJSON, contextAttributes);\n}\n\n/**\n * Safely set attributes on a span JSON.\n * If an attribute already exists, it will not be overwritten.\n */\nexport function safeSetSpanJSONAttributes(\n spanJSON: StreamedSpanJSON,\n newAttributes: RawAttributes<Record<string, unknown>>,\n): void {\n const originalAttributes = spanJSON.attributes ?? (spanJSON.attributes = {});\n\n Object.entries(newAttributes).forEach(([key, value]) => {\n if (value != null && !(key in originalAttributes)) {\n originalAttributes[key] = value;\n }\n });\n}\n\nfunction applySdkMetadataToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, client: Client): void {\n const integrationNames = client.getIntegrationNames();\n if (!integrationNames.length) return;\n\n safeSetSpanJSONAttributes(segmentSpanJSON, {\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS]: integrationNames,\n });\n}\n\nfunction applyCommonSpanAttributes(\n spanJSON: StreamedSpanJSON,\n serializedSegmentSpan: StreamedSpanJSON,\n client: Client,\n scopeData: ScopeData,\n): void {\n const sdk = client.getSdkMetadata();\n const { release, environment } = client.getOptions();\n\n // avoid overwriting any previously set attributes (from users or potentially our SDK instrumentation)\n safeSetSpanJSONAttributes(spanJSON, {\n [SEMANTIC_ATTRIBUTE_SENTRY_RELEASE]: release,\n [SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT]: environment || DEFAULT_ENVIRONMENT,\n [SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME]: serializedSegmentSpan.name,\n [SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID]: serializedSegmentSpan.span_id,\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME]: sdk?.sdk?.name,\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION]: sdk?.sdk?.version,\n [SEMANTIC_ATTRIBUTE_USER_ID]: scopeData.user?.id,\n [SEMANTIC_ATTRIBUTE_USER_EMAIL]: scopeData.user?.email,\n [SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS]: scopeData.user?.ip_address,\n [SEMANTIC_ATTRIBUTE_USER_USERNAME]: scopeData.user?.username,\n ...scopeData.attributes,\n });\n}\n\n/**\n * Apply a user-provided beforeSendSpan callback to a span JSON.\n */\nexport function applyBeforeSendSpanCallback(\n span: StreamedSpanJSON,\n beforeSendSpan: (span: StreamedSpanJSON) => StreamedSpanJSON,\n): StreamedSpanJSON {\n const modifedSpan = beforeSendSpan(span);\n if (!modifedSpan) {\n showSpanDropWarning();\n return span;\n }\n return modifedSpan;\n}\n\n// OTel SpanKind values (numeric to avoid importing from @opentelemetry/api)\nconst SPAN_KIND_SERVER = 1;\nconst SPAN_KIND_CLIENT = 2;\n\n/**\n * Infer and backfill span data from OTel semantic conventions.\n * This mirrors what the `SentrySpanExporter` does for non-streamed spans via `getSpanData`/`inferSpanData`.\n * Streamed spans skip the exporter, so we do the inference here during capture.\n *\n * Backfills: `sentry.op`, `sentry.source`, and `name` (description).\n * Uses `safeSetSpanJSONAttributes` so explicitly set attributes are never overwritten.\n */\n/** Exported only for tests. */\nexport function inferSpanDataFromOtelAttributes(spanJSON: StreamedSpanJSON, spanKind?: number): void {\n const attributes = spanJSON.attributes;\n if (!attributes) {\n return;\n }\n\n const httpMethod = attributes['http.request.method'] || attributes['http.method'];\n if (httpMethod) {\n inferHttpSpanData(spanJSON, attributes, spanKind, httpMethod);\n return;\n }\n\n const dbSystem = attributes['db.system.name'] || attributes['db.system'];\n const opIsCache =\n typeof attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'string' &&\n `${attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]}`.startsWith('cache.');\n if (dbSystem && !opIsCache) {\n inferDbSpanData(spanJSON, attributes);\n return;\n }\n\n if (attributes['rpc.service']) {\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'rpc' });\n return;\n }\n\n if (attributes['messaging.system']) {\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'message' });\n return;\n }\n\n const faasTrigger = attributes['faas.trigger'];\n if (faasTrigger) {\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${faasTrigger}` });\n }\n}\n\nfunction inferHttpSpanData(\n spanJSON: StreamedSpanJSON,\n attributes: RawAttributes<Record<string, unknown>>,\n spanKind: number | undefined,\n httpMethod: unknown,\n): void {\n // Infer op: http.client, http.server, or just http\n const opParts = ['http'];\n if (spanKind === SPAN_KIND_CLIENT) {\n opParts.push('client');\n } else if (spanKind === SPAN_KIND_SERVER) {\n opParts.push('server');\n }\n if (attributes['sentry.http.prefetch']) {\n opParts.push('prefetch');\n }\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: opParts.join('.') });\n\n // If the user set a custom span name via updateSpanName(), apply it — OTel instrumentation\n // may have overwritten span.name after the user set it, so we restore from the attribute.\n const customName = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n if (typeof customName === 'string') {\n spanJSON.name = customName;\n return;\n }\n\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'custom') {\n return;\n }\n\n const httpRoute = attributes['http.route'];\n if (typeof httpRoute === 'string') {\n spanJSON.name = `${httpMethod} ${httpRoute}`;\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route' });\n } else {\n // Infer span name from URL attributes, matching the non-streamed exporter's behavior.\n // Only overwrite the name for OTel spans (known spanKind)\n if (spanKind === SPAN_KIND_CLIENT || spanKind === SPAN_KIND_SERVER) {\n const urlPath = getUrlPath(attributes, spanKind);\n if (urlPath) {\n spanJSON.name = `${httpMethod} ${urlPath}`;\n }\n }\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' });\n }\n}\n\n/**\n * Extract a URL path from span attributes for use in the span name.\n * Mirrors the logic in the non-streamed exporter's `getSanitizedUrl`.\n */\nfunction getUrlPath(\n attributes: RawAttributes<Record<string, unknown>>,\n spanKind: number | undefined,\n): string | undefined {\n const httpUrl = attributes['http.url'] || attributes['url.full'];\n const httpTarget = attributes['http.target'];\n\n const parsedUrl = typeof httpUrl === 'string' ? parseUrl(httpUrl) : undefined;\n const sanitizedUrl = parsedUrl ? getSanitizedUrlString(parsedUrl) : undefined;\n\n // For server spans, prefer the relative target path\n if (spanKind === SPAN_KIND_SERVER && typeof httpTarget === 'string') {\n return stripUrlQueryAndFragment(httpTarget);\n }\n\n // For client spans (and others), use the full sanitized URL\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Fall back to target if no full URL is available\n if (typeof httpTarget === 'string') {\n return stripUrlQueryAndFragment(httpTarget);\n }\n\n return undefined;\n}\n\nfunction inferDbSpanData(spanJSON: StreamedSpanJSON, attributes: RawAttributes<Record<string, unknown>>): void {\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db' });\n\n // If the user set a custom span name via updateSpanName(), apply it.\n const customName = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n if (typeof customName === 'string') {\n spanJSON.name = customName;\n return;\n }\n\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'custom') {\n return;\n }\n\n const statement = attributes['db.statement'];\n if (statement) {\n spanJSON.name = `${statement}`;\n safeSetSpanJSONAttributes(spanJSON, { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task' });\n }\n}\n"],"names":[],"mappings":"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"}
{"version":3,"file":"captureSpan.js","sources":["../../../../src/tracing/spans/captureSpan.ts"],"sourcesContent":["import type { RawAttributes } from '../../attributes';\nimport type { Client } from '../../client';\nimport type { ScopeData } from '../../scope';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT,\n SEMANTIC_ATTRIBUTE_SENTRY_RELEASE,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n SEMANTIC_ATTRIBUTE_USER_EMAIL,\n SEMANTIC_ATTRIBUTE_USER_ID,\n SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS,\n SEMANTIC_ATTRIBUTE_USER_USERNAME,\n} from '../../semanticAttributes';\nimport type { SerializedStreamedSpan, Span, StreamedSpanJSON } from '../../types/span';\nimport { getCombinedScopeData } from '../../utils/scopeData';\nimport {\n INTERNAL_getSegmentSpan,\n showSpanDropWarning,\n spanToStreamedSpanJSON,\n streamedSpanJsonToSerializedSpan,\n} from '../../utils/spanUtils';\nimport { getCapturedScopesOnSpan } from '../utils';\nimport { isStreamedBeforeSendSpanCallback } from './beforeSendSpan';\nimport { scopeContextsToSpanAttributes } from './scopeContextAttributes';\nimport { DEFAULT_ENVIRONMENT } from '../../constants';\n\nexport type SerializedStreamedSpanWithSegmentSpan = SerializedStreamedSpan & {\n _segmentSpan: Span;\n};\n\n/**\n * Captures a span and returns a JSON representation to be enqueued for sending.\n *\n * IMPORTANT: This function converts the span to JSON immediately to avoid writing\n * to an already-ended OTel span instance (which is blocked by the OTel Span class).\n *\n * @returns the final serialized span with a reference to its segment span. This reference\n * is needed later on to compute the DSC for the span envelope.\n */\nexport function captureSpan(span: Span, client: Client): SerializedStreamedSpanWithSegmentSpan {\n // Convert to JSON FIRST - we cannot write to an already-ended span\n const spanJSON = spanToStreamedSpanJSON(span);\n\n const segmentSpan = INTERNAL_getSegmentSpan(span);\n const serializedSegmentSpan = spanToStreamedSpanJSON(segmentSpan);\n\n const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n\n const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n\n applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, finalScopeData);\n\n // Access `kind` via duck-typing — OTel span objects have this property but it's not on Sentry's Span type.\n // It is forwarded to `preprocessSpan` subscribers (e.g. the OpenTelemetry SDK backfills op/source/name from it).\n const spanKind = (span as { kind?: number }).kind;\n\n // Preprocess the span JSON before any other hooks run, so that `processSpan`/`processSegmentSpan`\n // subscribers (incl. integrations) and `beforeSendSpan` see fully inferred span data.\n client.emit('preprocessSpan', spanJSON, { spanKind });\n\n if (spanJSON.is_segment) {\n applyScopeToSegmentSpan(spanJSON, finalScopeData);\n applySdkMetadataToSegmentSpan(spanJSON, client);\n // Allow hook subscribers to mutate the segment span JSON\n // This also invokes the `processSegmentSpan` hook of all integrations\n client.emit('processSegmentSpan', spanJSON);\n }\n\n // This allows hook subscribers to mutate the span JSON\n // This also invokes the `processSpan` hook of all integrations\n client.emit('processSpan', spanJSON);\n\n const { beforeSendSpan } = client.getOptions();\n const processedSpan =\n beforeSendSpan && isStreamedBeforeSendSpanCallback(beforeSendSpan)\n ? applyBeforeSendSpanCallback(spanJSON, beforeSendSpan)\n : spanJSON;\n\n // Backfill sentry.span.source from sentry.source. Only `sentry.span.source` is respected by Sentry.\n // TODO(v11): Remove this backfill once we renamed SEMANTIC_ATTRIBUTE_SENTRY_SOURCE to sentry.span.source\n const spanNameSource = processedSpan.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (spanNameSource) {\n safeSetSpanJSONAttributes(processedSpan, {\n // Purposefully not using a constant defined here like in other attributes:\n // This will be the name for SEMANTIC_ATTRIBUTE_SENTRY_SOURCE in v11\n 'sentry.span.source': spanNameSource,\n });\n }\n\n return {\n ...streamedSpanJsonToSerializedSpan(processedSpan),\n _segmentSpan: segmentSpan,\n };\n}\n\nfunction applyScopeToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, scopeData: ScopeData): void {\n const contextAttributes = scopeContextsToSpanAttributes(scopeData.contexts);\n safeSetSpanJSONAttributes(segmentSpanJSON, contextAttributes);\n}\n\n/**\n * Safely set attributes on a span JSON.\n * If an attribute already exists, it will not be overwritten.\n */\nexport function safeSetSpanJSONAttributes(\n spanJSON: StreamedSpanJSON,\n newAttributes: RawAttributes<Record<string, unknown>>,\n): void {\n const originalAttributes = spanJSON.attributes ?? (spanJSON.attributes = {});\n\n Object.entries(newAttributes).forEach(([key, value]) => {\n if (value != null && !(key in originalAttributes)) {\n originalAttributes[key] = value;\n }\n });\n}\n\nfunction applySdkMetadataToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, client: Client): void {\n const integrationNames = client.getIntegrationNames();\n if (!integrationNames.length) return;\n\n safeSetSpanJSONAttributes(segmentSpanJSON, {\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS]: integrationNames,\n });\n}\n\nfunction applyCommonSpanAttributes(\n spanJSON: StreamedSpanJSON,\n serializedSegmentSpan: StreamedSpanJSON,\n client: Client,\n scopeData: ScopeData,\n): void {\n const sdk = client.getSdkMetadata();\n const { release, environment } = client.getOptions();\n\n // avoid overwriting any previously set attributes (from users or potentially our SDK instrumentation)\n safeSetSpanJSONAttributes(spanJSON, {\n [SEMANTIC_ATTRIBUTE_SENTRY_RELEASE]: release,\n [SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT]: environment || DEFAULT_ENVIRONMENT,\n [SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME]: serializedSegmentSpan.name,\n [SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID]: serializedSegmentSpan.span_id,\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME]: sdk?.sdk?.name,\n [SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION]: sdk?.sdk?.version,\n [SEMANTIC_ATTRIBUTE_USER_ID]: scopeData.user?.id,\n [SEMANTIC_ATTRIBUTE_USER_EMAIL]: scopeData.user?.email,\n [SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS]: scopeData.user?.ip_address,\n [SEMANTIC_ATTRIBUTE_USER_USERNAME]: scopeData.user?.username,\n ...scopeData.attributes,\n });\n}\n\n/**\n * Apply a user-provided beforeSendSpan callback to a span JSON.\n */\nexport function applyBeforeSendSpanCallback(\n span: StreamedSpanJSON,\n beforeSendSpan: (span: StreamedSpanJSON) => StreamedSpanJSON,\n): StreamedSpanJSON {\n const modifedSpan = beforeSendSpan(span);\n if (!modifedSpan) {\n showSpanDropWarning();\n return span;\n }\n return modifedSpan;\n}\n"],"names":[],"mappings":"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"}

@@ -6,2 +6,3 @@ import { addNonEnumerableProperty } from '../utils/object.js';

const ISOLATION_SCOPE_ON_START_SPAN_FIELD = "_sentryIsolationScope";
const OTEL_SOURCE_INFERENCE_SPAN_FIELD = /* @__PURE__ */ Symbol.for("sentry.otelSourceInference");
function setCapturedScopesOnSpan(span, scope, isolationScope) {

@@ -20,4 +21,10 @@ if (span) {

}
function markSpanForOtelSourceInference(span) {
addNonEnumerableProperty(span, OTEL_SOURCE_INFERENCE_SPAN_FIELD, true);
}
function spanShouldInferOtelSource(span) {
return span[OTEL_SOURCE_INFERENCE_SPAN_FIELD] === true;
}
export { getCapturedScopesOnSpan, setCapturedScopesOnSpan };
export { getCapturedScopesOnSpan, markSpanForOtelSourceInference, setCapturedScopesOnSpan, spanShouldInferOtelSource };
//# sourceMappingURL=utils.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"utils.js","sources":["../../../src/tracing/utils.ts"],"sourcesContent":["import type { Scope } from '../scope';\nimport type { Span } from '../types/span';\nimport { addNonEnumerableProperty } from '../utils/object';\nimport { derefWeakRef, makeWeakRef, type MaybeWeakRef } from '../utils/weakRef';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\ntype SpanWithScopes = Span & {\n [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: MaybeWeakRef<Scope>;\n};\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nexport function setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, makeWeakRef(isolationScope));\n // We don't wrap the scope with a WeakRef here because webkit aggressively garbage collects\n // and scopes are not held in memory for long periods of time.\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n * If WeakRef was used and scopes have been garbage collected, returns undefined for those scopes.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n const spanWithScopes = span as SpanWithScopes;\n\n return {\n scope: spanWithScopes[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: derefWeakRef(spanWithScopes[ISOLATION_SCOPE_ON_START_SPAN_FIELD]),\n };\n}\n"],"names":[],"mappings":";;;AAKA,MAAM,yBAAA,GAA4B,cAAA;AAClC,MAAM,mCAAA,GAAsC,uBAAA;AAQrC,SAAS,uBAAA,CAAwB,IAAA,EAAwB,KAAA,EAAc,cAAA,EAA6B;AACzG,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,wBAAA,CAAyB,IAAA,EAAM,mCAAA,EAAqC,WAAA,CAAY,cAAc,CAAC,CAAA;AAG/F,IAAA,wBAAA,CAAyB,IAAA,EAAM,2BAA2B,KAAK,CAAA;AAAA,EACjE;AACF;AAMO,SAAS,wBAAwB,IAAA,EAAuD;AAC7F,EAAA,MAAM,cAAA,GAAiB,IAAA;AAEvB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,eAAe,yBAAyB,CAAA;AAAA,IAC/C,cAAA,EAAgB,YAAA,CAAa,cAAA,CAAe,mCAAmC,CAAC;AAAA,GAClF;AACF;;;;"}
{"version":3,"file":"utils.js","sources":["../../../src/tracing/utils.ts"],"sourcesContent":["import type { Scope } from '../scope';\nimport type { Span } from '../types/span';\nimport { addNonEnumerableProperty } from '../utils/object';\nimport { derefWeakRef, makeWeakRef, type MaybeWeakRef } from '../utils/weakRef';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\n// Brand marking a span whose `sentry.source` should be inferred OTel-style at span end (by\n// `applyOtelSpanData`) rather than pinned. `SentryTraceProvider` sets it on the spans it creates\n// so they behave like OTel SDK spans, which carry no Sentry source concept. We use `Symbol.for`\n// so the key is shared across duplicated copies of `@sentry/core`.\nconst OTEL_SOURCE_INFERENCE_SPAN_FIELD = Symbol.for('sentry.otelSourceInference');\n\ntype SpanWithScopes = Span & {\n [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: MaybeWeakRef<Scope>;\n};\n\ntype SpanWithOtelSourceInference = Span & {\n [OTEL_SOURCE_INFERENCE_SPAN_FIELD]?: boolean;\n};\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nexport function setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, makeWeakRef(isolationScope));\n // We don't wrap the scope with a WeakRef here because webkit aggressively garbage collects\n // and scopes are not held in memory for long periods of time.\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n * If WeakRef was used and scopes have been garbage collected, returns undefined for those scopes.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n const spanWithScopes = span as SpanWithScopes;\n\n return {\n scope: spanWithScopes[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: derefWeakRef(spanWithScopes[ISOLATION_SCOPE_ON_START_SPAN_FIELD]),\n };\n}\n\n/**\n * Mark a span as eligible for OTel-style `sentry.source` inference at span end.\n * Set by `SentryTraceProvider` on the spans it creates; read by `SentrySpan.updateName()` and\n * `applyOtelSpanData()`.\n */\nexport function markSpanForOtelSourceInference(span: Span): void {\n addNonEnumerableProperty(span, OTEL_SOURCE_INFERENCE_SPAN_FIELD, true);\n}\n\n/** Whether a span is marked for OTel-style `sentry.source` inference (see {@link markSpanForOtelSourceInference}). */\nexport function spanShouldInferOtelSource(span: Span): boolean {\n return (span as SpanWithOtelSourceInference)[OTEL_SOURCE_INFERENCE_SPAN_FIELD] === true;\n}\n"],"names":[],"mappings":";;;AAKA,MAAM,yBAAA,GAA4B,cAAA;AAClC,MAAM,mCAAA,GAAsC,uBAAA;AAM5C,MAAM,gCAAA,mBAAmC,MAAA,CAAO,GAAA,CAAI,4BAA4B,CAAA;AAYzE,SAAS,uBAAA,CAAwB,IAAA,EAAwB,KAAA,EAAc,cAAA,EAA6B;AACzG,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,wBAAA,CAAyB,IAAA,EAAM,mCAAA,EAAqC,WAAA,CAAY,cAAc,CAAC,CAAA;AAG/F,IAAA,wBAAA,CAAyB,IAAA,EAAM,2BAA2B,KAAK,CAAA;AAAA,EACjE;AACF;AAMO,SAAS,wBAAwB,IAAA,EAAuD;AAC7F,EAAA,MAAM,cAAA,GAAiB,IAAA;AAEvB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,eAAe,yBAAyB,CAAA;AAAA,IAC/C,cAAA,EAAgB,YAAA,CAAa,cAAA,CAAe,mCAAmC,CAAC;AAAA,GAClF;AACF;AAOO,SAAS,+BAA+B,IAAA,EAAkB;AAC/D,EAAA,wBAAA,CAAyB,IAAA,EAAM,kCAAkC,IAAI,CAAA;AACvE;AAGO,SAAS,0BAA0B,IAAA,EAAqB;AAC7D,EAAA,OAAQ,IAAA,CAAqC,gCAAgC,CAAA,KAAM,IAAA;AACrF;;;;"}

@@ -1,4 +0,4 @@

const SDK_VERSION = "10.59.0" ;
const SDK_VERSION = "10.60.0" ;
export { SDK_VERSION };
//# sourceMappingURL=version.js.map

@@ -235,2 +235,10 @@ import { IntegrationIndex } from './integration';

/**
* Register a callback to preprocess a span JSON _before_ it is passed to the `processSpan` and
* `processSegmentSpan` hooks. Use this to backfill data that subsequent hooks rely on.
* The optional `hint` exposes additional context about the originating span (e.g. the OTel `spanKind`).
*/
on(hook: 'preprocessSpan', callback: (streamedSpanJSON: StreamedSpanJSON, hint?: {
spanKind?: number;
}) => void): () => void;
/**
* Register a callback for when a span JSON is processed, to add some data to the span JSON.

@@ -458,2 +466,8 @@ */

/**
* Fire a hook event to preprocess a span JSON before the `processSpan` and `processSegmentSpan` hooks run.
*/
emit(hook: 'preprocessSpan', streamedSpanJSON: StreamedSpanJSON, hint?: {
spanKind?: number;
}): void;
/**
* Fire a hook event when a span JSON is processed, to add some data to the span JSON.

@@ -460,0 +474,0 @@ */

export { registerSpanErrorInstrumentation } from './errors';
export { setCapturedScopesOnSpan, getCapturedScopesOnSpan } from './utils';
export { setCapturedScopesOnSpan, getCapturedScopesOnSpan, markSpanForOtelSourceInference, spanShouldInferOtelSource, } from './utils';
export { startIdleSpan, TRACING_DEFAULTS } from './idleSpan';

@@ -9,2 +9,3 @@ export { SentrySpan } from './sentrySpan';

export { startSpan, startInactiveSpan, startSpanManual, continueTrace, withActiveSpan, suppressTracing, startNewTrace, SUPPRESS_TRACING_KEY, } from './trace';
export { bindScopeToEmitter } from './bindScopeToEmitter';
export { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromScope, spanToBaggageHeader, } from './dynamicSamplingContext';

@@ -11,0 +12,0 @@ export { setMeasurement, timedEventsToMeasurements } from './measurement';

@@ -26,12 +26,2 @@ import { RawAttributes } from '../../attributes';

export declare function applyBeforeSendSpanCallback(span: StreamedSpanJSON, beforeSendSpan: (span: StreamedSpanJSON) => StreamedSpanJSON): StreamedSpanJSON;
/**
* Infer and backfill span data from OTel semantic conventions.
* This mirrors what the `SentrySpanExporter` does for non-streamed spans via `getSpanData`/`inferSpanData`.
* Streamed spans skip the exporter, so we do the inference here during capture.
*
* Backfills: `sentry.op`, `sentry.source`, and `name` (description).
* Uses `safeSetSpanJSONAttributes` so explicitly set attributes are never overwritten.
*/
/** Exported only for tests. */
export declare function inferSpanDataFromOtelAttributes(spanJSON: StreamedSpanJSON, spanKind?: number): void;
//# sourceMappingURL=captureSpan.d.ts.map

@@ -13,2 +13,10 @@ import { Scope } from '../scope';

};
/**
* Mark a span as eligible for OTel-style `sentry.source` inference at span end.
* Set by `SentryTraceProvider` on the spans it creates; read by `SentrySpan.updateName()` and
* `applyOtelSpanData()`.
*/
export declare function markSpanForOtelSourceInference(span: Span): void;
/** Whether a span is marked for OTel-style `sentry.source` inference (see {@link markSpanForOtelSourceInference}). */
export declare function spanShouldInferOtelSource(span: Span): boolean;
//# sourceMappingURL=utils.d.ts.map

@@ -235,2 +235,10 @@ import type { IntegrationIndex } from './integration';

/**
* Register a callback to preprocess a span JSON _before_ it is passed to the `processSpan` and
* `processSegmentSpan` hooks. Use this to backfill data that subsequent hooks rely on.
* The optional `hint` exposes additional context about the originating span (e.g. the OTel `spanKind`).
*/
on(hook: 'preprocessSpan', callback: (streamedSpanJSON: StreamedSpanJSON, hint?: {
spanKind?: number;
}) => void): () => void;
/**
* Register a callback for when a span JSON is processed, to add some data to the span JSON.

@@ -458,2 +466,8 @@ */

/**
* Fire a hook event to preprocess a span JSON before the `processSpan` and `processSegmentSpan` hooks run.
*/
emit(hook: 'preprocessSpan', streamedSpanJSON: StreamedSpanJSON, hint?: {
spanKind?: number;
}): void;
/**
* Fire a hook event when a span JSON is processed, to add some data to the span JSON.

@@ -460,0 +474,0 @@ */

@@ -1,1 +0,1 @@

{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
export { registerSpanErrorInstrumentation } from './errors';
export { setCapturedScopesOnSpan, getCapturedScopesOnSpan } from './utils';
export { setCapturedScopesOnSpan, getCapturedScopesOnSpan, markSpanForOtelSourceInference, spanShouldInferOtelSource, } from './utils';
export { startIdleSpan, TRACING_DEFAULTS } from './idleSpan';

@@ -9,2 +9,3 @@ export { SentrySpan } from './sentrySpan';

export { startSpan, startInactiveSpan, startSpanManual, continueTrace, withActiveSpan, suppressTracing, startNewTrace, SUPPRESS_TRACING_KEY, } from './trace';
export { bindScopeToEmitter } from './bindScopeToEmitter';
export { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromScope, spanToBaggageHeader, } from './dynamicSamplingContext';

@@ -11,0 +12,0 @@ export { setMeasurement, timedEventsToMeasurements } from './measurement';

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,mCAAmC,EACnC,iCAAiC,EACjC,kCAAkC,EAClC,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,mCAAmC,EACnC,iCAAiC,EACjC,kCAAkC,EAClC,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}

@@ -1,1 +0,1 @@

{"version":3,"file":"sentrySpan.d.ts","sourceRoot":"","sources":["../../../src/tracing/sentrySpan.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACV,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,QAAQ,EAER,aAAa,EACb,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAyBtD;;GAEG;AACH,qBAAa,UAAW,YAAW,IAAI;IACrC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC;IACtC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC9B,wDAAwD;IACxD,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,oCAAoC;IACpC,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC/B,2CAA2C;IAC3C,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;IAEhC,2EAA2E;IAC3E,OAAO,CAAC,iBAAiB,CAAC,CAAU;IAEpC;;;;;;OAMG;gBACgB,WAAW,GAAE,mBAAwB;IAoCxD,kBAAkB;IACX,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IASpC,kBAAkB;IACX,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IASxC;;;;;;OAMG;IACI,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI7E,kBAAkB;IACX,WAAW,IAAI,eAAe;IASrC,kBAAkB;IACX,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,IAAI;IAW7E,kBAAkB;IACX,aAAa,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAKtD;;;;;;;OAOG;IACI,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAItD;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKzC;;OAEG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMrC,kBAAkB;IACX,GAAG,CAAC,YAAY,CAAC,EAAE,aAAa,GAAG,IAAI;IAY9C;;;;;;;OAOG;IACI,WAAW,IAAI,QAAQ;IAqB9B;;;;;;;OAOG;IACI,mBAAmB,IAAI,gBAAgB;IAgB9C,kBAAkB;IACX,WAAW,IAAI,OAAO;IAI7B;;OAEG;IACI,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,qBAAqB,CAAC,EAAE,cAAc,GAAG,aAAa,EACtD,SAAS,CAAC,EAAE,aAAa,GACxB,IAAI;IAiBP;;;;;;;OAOG;IACI,gBAAgB,IAAI,OAAO;IAIlC,6CAA6C;IAC7C,OAAO,CAAC,YAAY;IAgDpB;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAgFlC"}
{"version":3,"file":"sentrySpan.d.ts","sourceRoot":"","sources":["../../../src/tracing/sentrySpan.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACV,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,QAAQ,EAER,aAAa,EACb,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAyBtD;;GAEG;AACH,qBAAa,UAAW,YAAW,IAAI;IACrC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC;IACtC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC9B,wDAAwD;IACxD,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,oCAAoC;IACpC,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC/B,2CAA2C;IAC3C,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;IAEhC,2EAA2E;IAC3E,OAAO,CAAC,iBAAiB,CAAC,CAAU;IAEpC;;;;;;OAMG;gBACgB,WAAW,GAAE,mBAAwB;IAoCxD,kBAAkB;IACX,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IASpC,kBAAkB;IACX,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IASxC;;;;;;OAMG;IACI,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI7E,kBAAkB;IACX,WAAW,IAAI,eAAe;IASrC,kBAAkB;IACX,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,IAAI;IAW7E,kBAAkB;IACX,aAAa,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAKtD;;;;;;;OAOG;IACI,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAItD;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKzC;;OAEG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAarC,kBAAkB;IACX,GAAG,CAAC,YAAY,CAAC,EAAE,aAAa,GAAG,IAAI;IAY9C;;;;;;;OAOG;IACI,WAAW,IAAI,QAAQ;IAqB9B;;;;;;;OAOG;IACI,mBAAmB,IAAI,gBAAgB;IAgB9C,kBAAkB;IACX,WAAW,IAAI,OAAO;IAI7B;;OAEG;IACI,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,qBAAqB,CAAC,EAAE,cAAc,GAAG,aAAa,EACtD,SAAS,CAAC,EAAE,aAAa,GACxB,IAAI;IAiBP;;;;;;;OAOG;IACI,gBAAgB,IAAI,OAAO;IAIlC,6CAA6C;IAC7C,OAAO,CAAC,YAAY;IAgDpB;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAgFlC"}

@@ -26,12 +26,2 @@ import type { RawAttributes } from '../../attributes';

export declare function applyBeforeSendSpanCallback(span: StreamedSpanJSON, beforeSendSpan: (span: StreamedSpanJSON) => StreamedSpanJSON): StreamedSpanJSON;
/**
* Infer and backfill span data from OTel semantic conventions.
* This mirrors what the `SentrySpanExporter` does for non-streamed spans via `getSpanData`/`inferSpanData`.
* Streamed spans skip the exporter, so we do the inference here during capture.
*
* Backfills: `sentry.op`, `sentry.source`, and `name` (description).
* Uses `safeSetSpanJSONAttributes` so explicitly set attributes are never overwritten.
*/
/** Exported only for tests. */
export declare function inferSpanDataFromOtelAttributes(spanJSON: StreamedSpanJSON, spanKind?: number): void;
//# sourceMappingURL=captureSpan.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"captureSpan.d.ts","sourceRoot":"","sources":["../../../../src/tracing/spans/captureSpan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAkB3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAcvF,MAAM,MAAM,qCAAqC,GAAG,sBAAsB,GAAG;IAC3E,YAAY,EAAE,IAAI,CAAC;CACpB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,qCAAqC,CAsD7F;AAOD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACpD,IAAI,CAQN;AAoCD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,gBAAgB,EACtB,cAAc,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,gBAAgB,GAC3D,gBAAgB,CAOlB;AAMD;;;;;;;GAOG;AACH,+BAA+B;AAC/B,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAmCnG"}
{"version":3,"file":"captureSpan.d.ts","sourceRoot":"","sources":["../../../../src/tracing/spans/captureSpan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAgB3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAavF,MAAM,MAAM,qCAAqC,GAAG,sBAAsB,GAAG;IAC3E,YAAY,EAAE,IAAI,CAAC;CACpB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,qCAAqC,CAsD7F;AAOD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACpD,IAAI,CAQN;AAoCD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,gBAAgB,EACtB,cAAc,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,gBAAgB,GAC3D,gBAAgB,CAOlB"}

@@ -13,2 +13,10 @@ import type { Scope } from '../scope';

};
/**
* Mark a span as eligible for OTel-style `sentry.source` inference at span end.
* Set by `SentryTraceProvider` on the spans it creates; read by `SentrySpan.updateName()` and
* `applyOtelSpanData()`.
*/
export declare function markSpanForOtelSourceInference(span: Span): void;
/** Whether a span is marked for OTel-style `sentry.source` inference (see {@link markSpanForOtelSourceInference}). */
export declare function spanShouldInferOtelSource(span: Span): boolean;
//# sourceMappingURL=utils.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tracing/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAY1C,+FAA+F;AAC/F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,GAAG,IAAI,CAOzG;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,cAAc,CAAC,EAAE,KAAK,CAAA;CAAE,CAO7F"}
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tracing/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAsB1C,+FAA+F;AAC/F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,GAAG,IAAI,CAOzG;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,cAAc,CAAC,EAAE,KAAK,CAAA;CAAE,CAO7F;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE/D;AAED,sHAAsH;AACtH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE7D"}
{
"name": "@sentry/core",
"version": "10.59.0",
"version": "10.60.0",
"description": "Base implementation for all Sentry JavaScript SDKs",

@@ -5,0 +5,0 @@ "repository": "git://github.com/getsentry/sentry-javascript.git",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display