From 4512ebe91b891534d26d81a6c3d9c18f2d420a89 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Wed, 26 Apr 2023 11:32:57 +0200 Subject: [PATCH] ref(core): Update multiplexed transport to default to errors only By default, we only multiplex errors, but allow to opt-in to more envelope types. --- packages/core/src/transports/multiplexed.ts | 6 ++-- .../test/lib/transports/multiplexed.test.ts | 33 ++++++++++++++++--- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/packages/core/src/transports/multiplexed.ts b/packages/core/src/transports/multiplexed.ts index 859101bf56bc..9f47b5b76542 100644 --- a/packages/core/src/transports/multiplexed.ts +++ b/packages/core/src/transports/multiplexed.ts @@ -17,8 +17,9 @@ interface MatchParam { /** * A function that returns an event from the envelope if one exists. You can optionally pass an array of envelope item * types to filter by - only envelopes matching the given types will be multiplexed. + * Allowed values are: 'event', 'transaction', 'profile', 'replay_event' * - * @param types Defaults to ['event', 'transaction', 'profile', 'replay_event'] + * @param types Defaults to ['event'] */ getEvent(types?: EnvelopeItemType[]): Event | undefined; } @@ -61,8 +62,7 @@ export function makeMultiplexedTransport( async function send(envelope: Envelope): Promise { function getEvent(types?: EnvelopeItemType[]): Event | undefined { - const eventTypes: EnvelopeItemType[] = - types && types.length ? types : ['event', 'transaction', 'profile', 'replay_event']; + const eventTypes: EnvelopeItemType[] = types && types.length ? types : ['event']; return eventFromEnvelope(envelope, eventTypes); } diff --git a/packages/core/test/lib/transports/multiplexed.test.ts b/packages/core/test/lib/transports/multiplexed.test.ts index 0849af8a81f7..f4f0144e045e 100644 --- a/packages/core/test/lib/transports/multiplexed.test.ts +++ b/packages/core/test/lib/transports/multiplexed.test.ts @@ -1,4 +1,11 @@ -import type { BaseTransportOptions, ClientReport, EventEnvelope, EventItem, Transport } from '@sentry/types'; +import type { + BaseTransportOptions, + ClientReport, + EventEnvelope, + EventItem, + TransactionEvent, + Transport, +} from '@sentry/types'; import { createClientReportEnvelope, createEnvelope, dsnFromString } from '@sentry/utils'; import { TextEncoder } from 'util'; @@ -15,9 +22,10 @@ const ERROR_ENVELOPE = createEnvelope({ event_id: 'aa3ff046696b4b [{ type: 'event' }, ERROR_EVENT] as EventItem, ]); +const TRANSACTION_EVENT: TransactionEvent = { type: 'transaction', event_id: 'aa3ff046696b4bc6b609ce6d28fde9e2' }; const TRANSACTION_ENVELOPE = createEnvelope( { event_id: 'aa3ff046696b4bc6b609ce6d28fde9e2', sent_at: '123' }, - [[{ type: 'transaction' }, { event_id: 'aa3ff046696b4bc6b609ce6d28fde9e2' }] as EventItem], + [[{ type: 'transaction' }, TRANSACTION_EVENT] as EventItem], ); const DEFAULT_DISCARDED_EVENTS: ClientReport['discarded_events'] = [ @@ -143,7 +151,7 @@ describe('makeMultiplexedTransport', () => { await transport.send(CLIENT_REPORT_ENVELOPE); }); - it('callback getEvent can ignore transactions', async () => { + it('callback getEvent ignores transactions by default', async () => { expect.assertions(2); const makeTransport = makeMultiplexedTransport( @@ -151,7 +159,24 @@ describe('makeMultiplexedTransport', () => { expect(url).toBe(DSN2_URL); }), ({ getEvent }) => { - expect(getEvent(['event'])).toBeUndefined(); + expect(getEvent()).toBeUndefined(); + return [DSN2]; + }, + ); + + const transport = makeTransport({ url: DSN1_URL, ...transportOptions }); + await transport.send(TRANSACTION_ENVELOPE); + }); + + it('callback getEvent can define envelope types', async () => { + expect.assertions(2); + + const makeTransport = makeMultiplexedTransport( + createTestTransport(url => { + expect(url).toBe(DSN2_URL); + }), + ({ getEvent }) => { + expect(getEvent(['event', 'transaction'])).toBe(TRANSACTION_EVENT); return [DSN2]; }, );