@sentry/core
Version:
Base implementation for all Sentry JavaScript SDKs
68 lines (59 loc) • 2.68 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const index = require('../asyncContext/index.js');
const carrier = require('../carrier.js');
const currentScopes = require('../currentScopes.js');
const exports$1 = require('../exports.js');
require('../tracing/errors.js');
require('../utils-hoist/debug-build.js');
const logger = require('../utils-hoist/logger.js');
require('../debug-build.js');
require('../utils-hoist/time.js');
const spanUtils = require('./spanUtils.js');
const dynamicSamplingContext = require('../tracing/dynamicSamplingContext.js');
const tracing = require('../utils-hoist/tracing.js');
const baggage = require('../utils-hoist/baggage.js');
/**
* Extracts trace propagation data from the current span or from the client's scope (via transaction or propagation
* context) and serializes it to `sentry-trace` and `baggage` values to strings. These values can be used to propagate
* a trace via our tracing Http headers or Html `<meta>` tags.
*
* This function also applies some validation to the generated sentry-trace and baggage values to ensure that
* only valid strings are returned.
*
* @returns an object with the tracing data values. The object keys are the name of the tracing key to be used as header
* or meta tag name.
*/
function getTraceData(options = {}) {
const client = currentScopes.getClient();
if (!exports$1.isEnabled() || !client) {
return {};
}
const carrier$1 = carrier.getMainCarrier();
const acs = index.getAsyncContextStrategy(carrier$1);
if (acs.getTraceData) {
return acs.getTraceData(options);
}
const scope = currentScopes.getCurrentScope();
const span = options.span || spanUtils.getActiveSpan();
const sentryTrace = span ? spanUtils.spanToTraceHeader(span) : scopeToTraceHeader(scope);
const dsc = span ? dynamicSamplingContext.getDynamicSamplingContextFromSpan(span) : dynamicSamplingContext.getDynamicSamplingContextFromScope(client, scope);
const baggage$1 = baggage.dynamicSamplingContextToSentryBaggageHeader(dsc);
const isValidSentryTraceHeader = tracing.TRACEPARENT_REGEXP.test(sentryTrace);
if (!isValidSentryTraceHeader) {
logger.logger.warn('Invalid sentry-trace data. Cannot generate trace data');
return {};
}
return {
'sentry-trace': sentryTrace,
baggage: baggage$1,
};
}
/**
* Get a sentry-trace header value for the given scope.
*/
function scopeToTraceHeader(scope) {
const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();
return tracing.generateSentryTraceHeader(traceId, propagationSpanId, sampled);
}
exports.getTraceData = getTraceData;
//# sourceMappingURL=traceData.js.map