From 8719de283d5e6a00820c43102852b9cc581c51f8 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Sun, 31 Mar 2024 14:47:09 +0200 Subject: [PATCH 1/3] feat(types): `beforeSend` and `beforeSendTransaction` breaking changes --- packages/types/src/options.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/types/src/options.ts b/packages/types/src/options.ts index 3f8c55e84949..b1e9c3486e73 100644 --- a/packages/types/src/options.ts +++ b/packages/types/src/options.ts @@ -255,7 +255,6 @@ export interface ClientOptions number | boolean; - // TODO (v8): Narrow the response type to `ErrorEvent` - this is technically a breaking change. /** * An event-processing callback for error and message events, guaranteed to be invoked after all other event * processors, which allows an event to be modified or dropped. @@ -267,9 +266,8 @@ export interface ClientOptions PromiseLike | Event | null; + beforeSend?: (event: ErrorEvent, hint: EventHint) => PromiseLike | ErrorEvent | null; - // TODO (v8): Narrow the response type to `TransactionEvent` - this is technically a breaking change. /** * An event-processing callback for transaction events, guaranteed to be invoked after all other event * processors. This allows an event to be modified or dropped before it's sent. @@ -281,7 +279,7 @@ export interface ClientOptions PromiseLike | Event | null; + beforeSendTransaction?: (event: TransactionEvent, hint: EventHint) => PromiseLike | TransactionEvent | null; /** * A callback invoked when adding a breadcrumb, allowing to optionally modify From 93e9450a2c949a45266ecfc4122c8b394f822c92 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Sun, 31 Mar 2024 15:30:23 +0200 Subject: [PATCH 2/3] Fix tests and linting --- packages/core/test/lib/base.test.ts | 10 +++++----- packages/types/src/options.ts | 7 +++++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/core/test/lib/base.test.ts b/packages/core/test/lib/base.test.ts index 0f789e2da169..373c2d6424cc 100644 --- a/packages/core/test/lib/base.test.ts +++ b/packages/core/test/lib/base.test.ts @@ -1,4 +1,4 @@ -import type { Client, Envelope, Event } from '@sentry/types'; +import type { Client, Envelope, ErrorEvent, Event, TransactionEvent } from '@sentry/types'; import { SentryError, SyncPromise, dsnToString, logger } from '@sentry/utils'; import { Scope, addBreadcrumb, getCurrentScope, getIsolationScope, makeSession, setCurrentClient } from '../../src'; @@ -1065,7 +1065,7 @@ describe('BaseClient', () => { const beforeSend = jest.fn( async event => - new Promise(resolve => { + new Promise(resolve => { setTimeout(() => { resolve(event); }, 1); @@ -1095,7 +1095,7 @@ describe('BaseClient', () => { const beforeSendTransaction = jest.fn( async event => - new Promise(resolve => { + new Promise(resolve => { setTimeout(() => { resolve(event); }, 1); @@ -1125,7 +1125,7 @@ describe('BaseClient', () => { const beforeSend = jest.fn(async event => { event.message = 'changed2'; - return new Promise(resolve => { + return new Promise(resolve => { setTimeout(() => { resolve(event); }, 1); @@ -1155,7 +1155,7 @@ describe('BaseClient', () => { const beforeSendTransaction = jest.fn(async event => { event.transaction = '/adopt/dont/shop'; - return new Promise(resolve => { + return new Promise(resolve => { setTimeout(() => { resolve(event); }, 1); diff --git a/packages/types/src/options.ts b/packages/types/src/options.ts index b1e9c3486e73..c9c95140902d 100644 --- a/packages/types/src/options.ts +++ b/packages/types/src/options.ts @@ -1,5 +1,5 @@ import type { Breadcrumb, BreadcrumbHint } from './breadcrumb'; -import type { ErrorEvent, Event, EventHint, TransactionEvent } from './event'; +import type { ErrorEvent, EventHint, TransactionEvent } from './event'; import type { Integration } from './integration'; import type { CaptureContext } from './scope'; import type { SdkMetadata } from './sdkmetadata'; @@ -279,7 +279,10 @@ export interface ClientOptions PromiseLike | TransactionEvent | null; + beforeSendTransaction?: ( + event: TransactionEvent, + hint: EventHint, + ) => PromiseLike | TransactionEvent | null; /** * A callback invoked when adding a breadcrumb, allowing to optionally modify From a30bab28ab9f82547921ecb670b0e7027937aa47 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Sun, 31 Mar 2024 15:55:52 +0200 Subject: [PATCH 3/3] Fix more tests --- packages/browser/test/unit/index.test.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/browser/test/unit/index.test.ts b/packages/browser/test/unit/index.test.ts index e97046c3eb65..2aae1410d438 100644 --- a/packages/browser/test/unit/index.test.ts +++ b/packages/browser/test/unit/index.test.ts @@ -7,7 +7,6 @@ import { } from '@sentry/core'; import * as utils from '@sentry/utils'; -import type { Event } from '../../src'; import { setCurrentClient } from '../../src'; import { BrowserClient, @@ -213,7 +212,7 @@ describe('SentryBrowser', () => { it('should capture a message', done => { const options = getDefaultBrowserClientOptions({ - beforeSend: (event: Event): Event | null => { + beforeSend: event => { expect(event.message).toBe('test'); expect(event.exception).toBeUndefined(); done(); @@ -227,7 +226,7 @@ describe('SentryBrowser', () => { it('should capture an event', done => { const options = getDefaultBrowserClientOptions({ - beforeSend: (event: Event): Event | null => { + beforeSend: event => { expect(event.message).toBe('event'); expect(event.exception).toBeUndefined(); done(); @@ -241,7 +240,7 @@ describe('SentryBrowser', () => { it('should set `platform` on events', done => { const options = getDefaultBrowserClientOptions({ - beforeSend: (event: Event): Event | null => { + beforeSend: event => { expect(event.platform).toBe('javascript'); done(); return event;