diff --git a/packages/hub/src/hub.ts b/packages/hub/src/hub.ts index e3c9bd96d436..2995b0edf98f 100644 --- a/packages/hub/src/hub.ts +++ b/packages/hub/src/hub.ts @@ -351,13 +351,6 @@ export class Hub implements HubInterface { return this._callExtensionMethod('startTransaction', context, customSamplingContext); } - /** - * @inheritDoc - */ - public traceHeaders(): { [key: string]: string } { - return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders'); - } - /** * @inheritDoc */ diff --git a/packages/node/test/integrations/http.test.ts b/packages/node/test/integrations/http.test.ts index c13f3bb90a0a..705ff6f8ebdb 100644 --- a/packages/node/test/integrations/http.test.ts +++ b/packages/node/test/integrations/http.test.ts @@ -9,7 +9,7 @@ import { NodeClient } from '../../src/client'; import { Http as HttpIntegration } from '../../src/integrations/http'; describe('tracing', () => { - function createTransactionOnScope() { + function createTransactionOnScope(): Transaction { const hub = new Hub( new NodeClient({ dsn: 'https://dogsarebadatkeepingsecrets@squirrelchasers.ingest.sentry.io/12312012', @@ -24,7 +24,10 @@ describe('tracing', () => { jest.spyOn(sentryCore, 'getCurrentHub').mockReturnValue(hub); jest.spyOn(hubModule, 'getCurrentHub').mockReturnValue(hub); - const transaction = hub.startTransaction({ name: 'dogpark' }); + // we have to cast this to a Transaction (the class) because hub.startTransaction only returns a Transaction (the + // interface, which doesn't have things like spanRecorder) (and because @sentry/hub can't depend on @sentry/tracing, + // we can't fix that) + const transaction = hub.startTransaction({ name: 'dogpark' }) as Transaction; hub.getScope()?.setSpan(transaction); return transaction; @@ -36,7 +39,7 @@ describe('tracing', () => { .reply(200); const transaction = createTransactionOnScope(); - const spans = (transaction as Span).spanRecorder?.spans as Span[]; + const spans = transaction.spanRecorder?.spans as Span[]; http.get('http://dogs.are.great/'); @@ -55,7 +58,7 @@ describe('tracing', () => { .reply(200); const transaction = createTransactionOnScope(); - const spans = (transaction as Span).spanRecorder?.spans as Span[]; + const spans = transaction.spanRecorder?.spans as Span[]; http.get('http://squirrelchasers.ingest.sentry.io/api/12312012/store/'); diff --git a/packages/tracing/src/hubextensions.ts b/packages/tracing/src/hubextensions.ts index e041a9e33b3b..888b5b74ce77 100644 --- a/packages/tracing/src/hubextensions.ts +++ b/packages/tracing/src/hubextensions.ts @@ -13,20 +13,6 @@ import { IdleTransaction } from './idletransaction'; import { Transaction } from './transaction'; import { hasTracingEnabled } from './utils'; -/** Returns all trace headers that are currently on the top scope. */ -function traceHeaders(this: Hub): { [key: string]: string } { - const scope = this.getScope(); - if (scope) { - const span = scope.getSpan(); - if (span) { - return { - 'sentry-trace': span.toTraceparent(), - }; - } - } - return {}; -} - /** * Makes a sampling decision for the given transaction and stores it on the transaction. * @@ -212,9 +198,6 @@ export function _addTracingExtensions(): void { if (!carrier.__SENTRY__.extensions.startTransaction) { carrier.__SENTRY__.extensions.startTransaction = _startTransaction; } - if (!carrier.__SENTRY__.extensions.traceHeaders) { - carrier.__SENTRY__.extensions.traceHeaders = traceHeaders; - } } } diff --git a/packages/tracing/src/transaction.ts b/packages/tracing/src/transaction.ts index 536b5fc663c3..5af70cc3e52f 100644 --- a/packages/tracing/src/transaction.ts +++ b/packages/tracing/src/transaction.ts @@ -6,7 +6,7 @@ import { TransactionContext, TransactionMetadata, } from '@sentry/types'; -import { dropUndefinedKeys, isInstanceOf, logger } from '@sentry/utils'; +import { dropUndefinedKeys, logger } from '@sentry/utils'; import { Span as SpanClass, SpanRecorder } from './span'; @@ -21,7 +21,7 @@ export class Transaction extends SpanClass implements TransactionInterface { /** * The reference to the current hub. */ - private readonly _hub: Hub = (getCurrentHub() as unknown) as Hub; + private readonly _hub: Hub; private _trimEnd?: boolean; @@ -35,13 +35,10 @@ export class Transaction extends SpanClass implements TransactionInterface { public constructor(transactionContext: TransactionContext, hub?: Hub) { super(transactionContext); - if (isInstanceOf(hub, Hub)) { - this._hub = hub as Hub; - } - this.name = transactionContext.name || ''; this.metadata = transactionContext.metadata || {}; this._trimEnd = transactionContext.trimEnd; + this._hub = hub || getCurrentHub(); // create a new sentry tracestate value if we didn't inherit one if (!this.metadata.tracestate?.sentry) { diff --git a/packages/tracing/src/utils.ts b/packages/tracing/src/utils.ts index 3bf0a17a1415..2a6ca3bf4423 100644 --- a/packages/tracing/src/utils.ts +++ b/packages/tracing/src/utils.ts @@ -80,15 +80,13 @@ export function extractSentrytraceData(header: string): TraceparentData | undefi return undefined; } -type TracestateHeaderData = { sentry?: string; thirdparty?: string }; - /** * Extract data from an incoming `tracestate` header * * @param header * @returns Object containing data from the header */ -export function extractTracestateData(header: string): TracestateHeaderData { +export function extractTracestateData(header: string): { sentry?: string; thirdparty?: string } { let sentryEntry, thirdPartyEntry, before, after; // find sentry's entry, if any @@ -160,7 +158,8 @@ type SentryTracestateData = { * @returns the base64-encoded header value */ export function computeTracestateValue(data: SentryTracestateData): string { - // `JSON.stringify` will drop keys with undefined values, but not ones with null values + // `JSON.stringify` will drop keys with undefined values, but not ones with null values, so this prevents + // `environment` and `release` from being dropped if they haven't been set by `Sentry.init` data.environment = data.environment || null; data.release = data.release || null; diff --git a/packages/types/src/hub.ts b/packages/types/src/hub.ts index 22948f3f2024..ab1b187f32e2 100644 --- a/packages/types/src/hub.ts +++ b/packages/types/src/hub.ts @@ -177,9 +177,6 @@ export interface Hub { /** Returns the integration if installed on the current client. */ getIntegration(integration: IntegrationClass): T | null; - /** Returns all trace headers that are currently on the top scope. */ - traceHeaders(): { [key: string]: string }; - /** * @deprecated No longer does anything. Use use {@link Transaction.startChild} instead. */