Skip to content

Commit 166bfc9

Browse files
authored
feat(v8/core): remove void from transport return (#10794)
Use `Promise<TransportMakeRequestResponse>` instead of `Promise<void | TransportMakeRequestResponse>`. As a result, remove `__sentry__baseTransport__` field from transports.
1 parent 76c4c26 commit 166bfc9

File tree

25 files changed

+79
-204
lines changed

25 files changed

+79
-204
lines changed

MIGRATION.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ Removed top-level exports: `tracingOrigins`, `MetricsAggregator`, `metricsAggreg
272272
- [Removal of `spanStatusfromHttpCode` in favour of `getSpanStatusFromHttpCode`](./MIGRATION.md#removal-of-spanstatusfromhttpcode-in-favour-of-getspanstatusfromhttpcode)
273273
- [Removal of `addGlobalEventProcessor` in favour of `addEventProcessor`](./MIGRATION.md#removal-of-addglobaleventprocessor-in-favour-of-addeventprocessor)
274274
- [Removal of `lastEventId()` method](./MIGRATION.md#deprecate-lasteventid)
275+
- [Remove `void` from transport return types](./MIGRATION.md#remove-void-from-transport-return-types)
275276

276277
#### Deprecation of `Hub` and `getCurrentHub()`
277278

@@ -435,6 +436,23 @@ addEventProcessor(event => {
435436

436437
The `lastEventId` function has been removed. See [below](./MIGRATION.md#deprecate-lasteventid) for more details.
437438

439+
#### Remove `void` from transport return types
440+
441+
The `send` method on the `Transport` interface now always requires a `TransportMakeRequestResponse` to be returned in
442+
the promise. This means that the `void` return type is no longer allowed.
443+
444+
```ts
445+
// Before (v7)
446+
interface Transport {
447+
send(event: Event): Promise<void | TransportMakeRequestResponse>;
448+
}
449+
450+
// After (v8)
451+
interface Transport {
452+
send(event: Event): Promise<TransportMakeRequestResponse>;
453+
}
454+
```
455+
438456
### Browser SDK (Browser, React, Vue, Angular, Ember, etc.)
439457

440458
Removed top-level exports: `Offline`, `makeXHRTransport`, `BrowserTracing`

dev-packages/browser-integration-tests/suites/replay/errors/errorModeCustomTransport/init.js

Lines changed: 0 additions & 23 deletions
This file was deleted.

dev-packages/browser-integration-tests/suites/replay/errors/errorModeCustomTransport/test.ts

Lines changed: 0 additions & 42 deletions
This file was deleted.

dev-packages/node-integration-tests/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { Express } from 'express';
77
*/
88
export function loggingTransport(_options: BaseTransportOptions): Transport {
99
return {
10-
send(request: Envelope): Promise<void | TransportMakeRequestResponse> {
10+
send(request: Envelope): Promise<TransportMakeRequestResponse> {
1111
// eslint-disable-next-line no-console
1212
console.log(JSON.stringify(request));
1313
return Promise.resolve({ statusCode: 200 });

packages/core/src/baseclient.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -432,10 +432,7 @@ export abstract class BaseClient<O extends ClientOptions> implements Client<O> {
432432
public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint) => void): void;
433433

434434
/** @inheritdoc */
435-
public on(
436-
hook: 'afterSendEvent',
437-
callback: (event: Event, sendResponse: TransportMakeRequestResponse | void) => void,
438-
): void;
435+
public on(hook: 'afterSendEvent', callback: (event: Event, sendResponse: TransportMakeRequestResponse) => void): void;
439436

440437
/** @inheritdoc */
441438
public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): void;
@@ -485,7 +482,7 @@ export abstract class BaseClient<O extends ClientOptions> implements Client<O> {
485482
public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;
486483

487484
/** @inheritdoc */
488-
public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse | void): void;
485+
public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse): void;
489486

490487
/** @inheritdoc */
491488
public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;
@@ -518,16 +515,17 @@ export abstract class BaseClient<O extends ClientOptions> implements Client<O> {
518515
/**
519516
* @inheritdoc
520517
*/
521-
public sendEnvelope(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> | void {
518+
public sendEnvelope(envelope: Envelope): PromiseLike<TransportMakeRequestResponse> | void {
522519
this.emit('beforeEnvelope', envelope);
523520

524521
if (this._isEnabled() && this._transport) {
525522
return this._transport.send(envelope).then(null, reason => {
526523
DEBUG_BUILD && logger.error('Error while sending event:', reason);
524+
return reason;
527525
});
528-
} else {
529-
DEBUG_BUILD && logger.error('Transport disabled');
530526
}
527+
528+
DEBUG_BUILD && logger.error('Transport disabled');
531529
}
532530

533531
/* eslint-enable @typescript-eslint/unified-signatures */

packages/core/src/transports/base.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ export const DEFAULT_TRANSPORT_BUFFER_SIZE = 30;
3737
export function createTransport(
3838
options: InternalBaseTransportOptions,
3939
makeRequest: TransportRequestExecutor,
40-
buffer: PromiseBuffer<void | TransportMakeRequestResponse> = makePromiseBuffer(
40+
buffer: PromiseBuffer<TransportMakeRequestResponse> = makePromiseBuffer(
4141
options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,
4242
),
4343
): Transport {
4444
let rateLimits: RateLimits = {};
4545
const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);
4646

47-
function send(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> {
47+
function send(envelope: Envelope): PromiseLike<TransportMakeRequestResponse> {
4848
const filteredEnvelopeItems: EnvelopeItem[] = [];
4949

5050
// Drop rate limited items from envelope
@@ -60,7 +60,7 @@ export function createTransport(
6060

6161
// Skip sending if envelope is empty after filtering out rate limited events
6262
if (filteredEnvelopeItems.length === 0) {
63-
return resolvedSyncPromise();
63+
return resolvedSyncPromise({});
6464
}
6565

6666
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -74,7 +74,7 @@ export function createTransport(
7474
});
7575
};
7676

77-
const requestTask = (): PromiseLike<void | TransportMakeRequestResponse> =>
77+
const requestTask = (): PromiseLike<TransportMakeRequestResponse> =>
7878
makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(
7979
response => {
8080
// We don't want to throw on NOK responses, but we want to at least log them
@@ -97,18 +97,14 @@ export function createTransport(
9797
if (error instanceof SentryError) {
9898
DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');
9999
recordEnvelopeLoss('queue_overflow');
100-
return resolvedSyncPromise();
100+
return resolvedSyncPromise({});
101101
} else {
102102
throw error;
103103
}
104104
},
105105
);
106106
}
107107

108-
// We use this to identifify if the transport is the base transport
109-
// TODO (v8): Remove this again as we'll no longer need it
110-
send.__sentry__baseTransport__ = true;
111-
112108
return {
113109
send,
114110
flush,

packages/core/src/transports/multiplexed.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ function makeOverrideReleaseTransport<TO extends BaseTransportOptions>(
5757
const transport = createTransport(options);
5858

5959
return {
60-
send: async (envelope: Envelope): Promise<void | TransportMakeRequestResponse> => {
60+
send: async (envelope: Envelope): Promise<TransportMakeRequestResponse> => {
6161
const event = eventFromEnvelope(envelope, ['event', 'transaction', 'profile', 'replay_event']);
6262

6363
if (event) {
@@ -101,7 +101,7 @@ export function makeMultiplexedTransport<TO extends BaseTransportOptions>(
101101
return otherTransports[key];
102102
}
103103

104-
async function send(envelope: Envelope): Promise<void | TransportMakeRequestResponse> {
104+
async function send(envelope: Envelope): Promise<TransportMakeRequestResponse> {
105105
function getEvent(types?: EnvelopeItemType[]): Event | undefined {
106106
const eventTypes: EnvelopeItemType[] = types && types.length ? types : ['event'];
107107
return eventFromEnvelope(envelope, eventTypes);

packages/core/src/transports/offline.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export function makeOfflineTransport<TO>(
113113
retryDelay = Math.min(retryDelay * 2, MAX_DELAY);
114114
}
115115

116-
async function send(envelope: Envelope): Promise<void | TransportMakeRequestResponse> {
116+
async function send(envelope: Envelope): Promise<TransportMakeRequestResponse> {
117117
try {
118118
const result = await transport.send(envelope);
119119

packages/core/test/lib/base.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1804,7 +1804,7 @@ describe('BaseClient', () => {
18041804

18051805
expect(mockSend).toBeCalledTimes(1);
18061806
expect(callback).toBeCalledTimes(1);
1807-
expect(callback).toBeCalledWith(errorEvent, undefined);
1807+
expect(callback).toBeCalledWith(errorEvent, 'send error');
18081808
});
18091809

18101810
it('passes the response to the hook', async () => {

packages/core/test/lib/transports/base.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const transportOptions = {
3535

3636
describe('createTransport', () => {
3737
it('flushes the buffer', async () => {
38-
const mockBuffer: PromiseBuffer<void> = {
38+
const mockBuffer: PromiseBuffer<TransportMakeRequestResponse> = {
3939
$: [],
4040
add: jest.fn(),
4141
drain: jest.fn(),

0 commit comments

Comments
 (0)