Skip to content

Commit b140f74

Browse files
lforstAbhiPrasad
authored andcommitted
ref: Remove unneeded logic from transports (#5002)
1 parent 7415120 commit b140f74

30 files changed

+100
-304
lines changed

packages/browser/src/exports.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ export type {
55
SdkInfo,
66
Event,
77
EventHint,
8-
EventStatus,
98
Exception,
10-
Response,
119
// eslint-disable-next-line deprecation/deprecation
1210
Severity,
1311
SeverityLevel,

packages/browser/src/transports/fetch.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,12 @@ export function makeFetchTransport(
2222
...options.requestOptions,
2323
};
2424

25-
return nativeFetch(options.url, requestOptions).then(response => {
26-
return response.text().then(body => ({
27-
body,
28-
headers: {
29-
'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),
30-
'retry-after': response.headers.get('Retry-After'),
31-
},
32-
reason: response.statusText,
33-
statusCode: response.status,
34-
}));
35-
});
25+
return nativeFetch(options.url, requestOptions).then(response => ({
26+
headers: {
27+
'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),
28+
'retry-after': response.headers.get('Retry-After'),
29+
},
30+
}));
3631
}
3732

3833
return createTransport({ bufferSize: options.bufferSize }, makeRequest);

packages/browser/src/transports/xhr.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,12 @@ export function makeXHRTransport(options: XHRTransportOptions): Transport {
2626

2727
xhr.onreadystatechange = (): void => {
2828
if (xhr.readyState === XHR_READYSTATE_DONE) {
29-
const response = {
30-
body: xhr.response,
29+
resolve({
3130
headers: {
3231
'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),
3332
'retry-after': xhr.getResponseHeader('Retry-After'),
3433
},
35-
reason: xhr.statusText,
36-
statusCode: xhr.status,
37-
};
38-
resolve(response);
34+
});
3935
}
4036
};
4137

packages/browser/test/unit/helper/browser-client-options.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { BrowserClientOptions } from '../../../src/client';
66
export function getDefaultBrowserClientOptions(options: Partial<BrowserClientOptions> = {}): BrowserClientOptions {
77
return {
88
integrations: [],
9-
transport: () => createTransport({}, _ => resolvedSyncPromise({ statusCode: 200 })),
9+
transport: () => createTransport({}, _ => resolvedSyncPromise({})),
1010
stackParser: () => [],
1111
...options,
1212
};

packages/browser/test/unit/mocks/simpletransport.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ import { createTransport } from '@sentry/core';
22
import { resolvedSyncPromise } from '@sentry/utils';
33

44
export function makeSimpleTransport() {
5-
return createTransport({}, () => resolvedSyncPromise({ statusCode: 200 }));
5+
return createTransport({}, () => resolvedSyncPromise({}));
66
}

packages/browser/test/unit/sdk.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const PUBLIC_DSN = 'https://username@domain/123';
1515
function getDefaultBrowserOptions(options: Partial<BrowserOptions> = {}): BrowserOptions {
1616
return {
1717
integrations: [],
18-
transport: () => createTransport({}, _ => resolvedSyncPromise({ statusCode: 200 })),
18+
transport: () => createTransport({}, _ => resolvedSyncPromise({})),
1919
stackParser: () => [],
2020
...options,
2121
};

packages/browser/test/unit/transports/fetch.test.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,9 @@ describe('NewFetchTransport', () => {
3434
const transport = makeFetchTransport(DEFAULT_FETCH_TRANSPORT_OPTIONS, mockFetch);
3535

3636
expect(mockFetch).toHaveBeenCalledTimes(0);
37-
const res = await transport.send(ERROR_ENVELOPE);
37+
await transport.send(ERROR_ENVELOPE);
3838
expect(mockFetch).toHaveBeenCalledTimes(1);
3939

40-
expect(res.status).toBe('success');
41-
4240
expect(mockFetch).toHaveBeenLastCalledWith(DEFAULT_FETCH_TRANSPORT_OPTIONS.url, {
4341
body: serializeEnvelope(ERROR_ENVELOPE),
4442
method: 'POST',

packages/browser/test/unit/transports/xhr.test.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,6 @@ describe('NewXHRTransport', () => {
6565
expect(xhrMock.send).toHaveBeenCalledWith(serializeEnvelope(ERROR_ENVELOPE));
6666
});
6767

68-
it('returns the correct response', async () => {
69-
const transport = makeXHRTransport(DEFAULT_XHR_TRANSPORT_OPTIONS);
70-
71-
const [res] = await Promise.all([
72-
transport.send(ERROR_ENVELOPE),
73-
(xhrMock as XMLHttpRequest).onreadystatechange!({} as Event),
74-
]);
75-
76-
expect(res).toBeDefined();
77-
expect(res.status).toEqual('success');
78-
});
79-
8068
it('sets rate limit response headers', async () => {
8169
const transport = makeXHRTransport(DEFAULT_XHR_TRANSPORT_OPTIONS);
8270

packages/core/src/transports/base.ts

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,14 @@ import {
33
InternalBaseTransportOptions,
44
Transport,
55
TransportCategory,
6-
TransportRequest,
76
TransportRequestExecutor,
8-
TransportResponse,
97
} from '@sentry/types';
108
import {
11-
disabledUntil,
12-
eventStatusFromHttpCode,
139
getEnvelopeType,
1410
isRateLimited,
1511
makePromiseBuffer,
1612
PromiseBuffer,
1713
RateLimits,
18-
rejectedSyncPromise,
1914
resolvedSyncPromise,
2015
serializeEnvelope,
2116
updateRateLimits,
@@ -32,44 +27,26 @@ export const DEFAULT_TRANSPORT_BUFFER_SIZE = 30;
3227
export function createTransport(
3328
options: InternalBaseTransportOptions,
3429
makeRequest: TransportRequestExecutor,
35-
buffer: PromiseBuffer<TransportResponse> = makePromiseBuffer(options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE),
30+
buffer: PromiseBuffer<void> = makePromiseBuffer(options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE),
3631
): Transport {
3732
let rateLimits: RateLimits = {};
3833

3934
const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);
4035

41-
function send(envelope: Envelope): PromiseLike<TransportResponse> {
36+
function send(envelope: Envelope): PromiseLike<void> {
4237
const envCategory = getEnvelopeType(envelope);
4338
const category = envCategory === 'event' ? 'error' : (envCategory as TransportCategory);
44-
const request: TransportRequest = {
45-
category,
46-
body: serializeEnvelope(envelope),
47-
};
4839

4940
// Don't add to buffer if transport is already rate-limited
5041
if (isRateLimited(rateLimits, category)) {
51-
return rejectedSyncPromise({
52-
status: 'rate_limit',
53-
reason: getRateLimitReason(rateLimits, category),
54-
});
42+
return resolvedSyncPromise();
5543
}
5644

57-
const requestTask = (): PromiseLike<TransportResponse> =>
58-
makeRequest(request).then(({ body, headers, reason, statusCode }): PromiseLike<TransportResponse> => {
59-
const status = eventStatusFromHttpCode(statusCode);
45+
const requestTask = (): PromiseLike<void> =>
46+
makeRequest({ body: serializeEnvelope(envelope) }).then(({ headers }): void => {
6047
if (headers) {
6148
rateLimits = updateRateLimits(rateLimits, headers);
6249
}
63-
if (status === 'success') {
64-
return resolvedSyncPromise({ status, reason });
65-
}
66-
return rejectedSyncPromise({
67-
status,
68-
reason:
69-
reason ||
70-
body ||
71-
(status === 'rate_limit' ? getRateLimitReason(rateLimits, category) : 'Unknown transport error'),
72-
});
7350
});
7451

7552
return buffer.add(requestTask);
@@ -80,9 +57,3 @@ export function createTransport(
8057
flush,
8158
};
8259
}
83-
84-
function getRateLimitReason(rateLimits: RateLimits, category: TransportCategory): string {
85-
return `Too many ${category} requests, backing off until: ${new Date(
86-
disabledUntil(rateLimits, category),
87-
).toISOString()}`;
88-
}

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

Lines changed: 25 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
1-
import { EventEnvelope, EventItem, Transport, TransportMakeRequestResponse, TransportResponse } from '@sentry/types';
1+
import { EventEnvelope, EventItem, Transport, TransportMakeRequestResponse } from '@sentry/types';
22
import { createEnvelope, PromiseBuffer, resolvedSyncPromise, serializeEnvelope } from '@sentry/utils';
33

44
import { createTransport } from '../../../src/transports/base';
55

6-
const ERROR_TRANSPORT_CATEGORY = 'error';
7-
8-
const TRANSACTION_TRANSPORT_CATEGORY = 'transaction';
9-
106
const ERROR_ENVELOPE = createEnvelope<EventEnvelope>({ event_id: 'aa3ff046696b4bc6b609ce6d28fde9e2', sent_at: '123' }, [
117
[{ type: 'event' }, { event_id: 'aa3ff046696b4bc6b609ce6d28fde9e2' }] as EventItem,
128
]);
@@ -18,12 +14,12 @@ const TRANSACTION_ENVELOPE = createEnvelope<EventEnvelope>(
1814

1915
describe('createTransport', () => {
2016
it('flushes the buffer', async () => {
21-
const mockBuffer: PromiseBuffer<TransportResponse> = {
17+
const mockBuffer: PromiseBuffer<void> = {
2218
$: [],
2319
add: jest.fn(),
2420
drain: jest.fn(),
2521
};
26-
const transport = createTransport({}, _ => resolvedSyncPromise({ statusCode: 200 }), mockBuffer);
22+
const transport = createTransport({}, _ => resolvedSyncPromise({}), mockBuffer);
2723
/* eslint-disable @typescript-eslint/unbound-method */
2824
expect(mockBuffer.drain).toHaveBeenCalledTimes(0);
2925
await transport.flush(1000);
@@ -34,45 +30,29 @@ describe('createTransport', () => {
3430

3531
describe('send', () => {
3632
it('constructs a request to send to Sentry', async () => {
33+
expect.assertions(1);
3734
const transport = createTransport({}, req => {
38-
expect(req.category).toEqual(ERROR_TRANSPORT_CATEGORY);
3935
expect(req.body).toEqual(serializeEnvelope(ERROR_ENVELOPE));
40-
return resolvedSyncPromise({ statusCode: 200, reason: 'OK' });
36+
return resolvedSyncPromise({});
4137
});
42-
const res = await transport.send(ERROR_ENVELOPE);
43-
expect(res.status).toBe('success');
44-
expect(res.reason).toBe('OK');
38+
await transport.send(ERROR_ENVELOPE);
4539
});
4640

47-
it('returns an error if request failed', async () => {
41+
it('does throw if request fails', async () => {
42+
expect.assertions(2);
43+
4844
const transport = createTransport({}, req => {
49-
expect(req.category).toEqual(ERROR_TRANSPORT_CATEGORY);
5045
expect(req.body).toEqual(serializeEnvelope(ERROR_ENVELOPE));
51-
return resolvedSyncPromise({ statusCode: 400, reason: 'Bad Request' });
46+
throw new Error();
5247
});
53-
try {
54-
await transport.send(ERROR_ENVELOPE);
55-
} catch (res) {
56-
expect(res.status).toBe('invalid');
57-
expect(res.reason).toBe('Bad Request');
58-
}
59-
});
6048

61-
it('returns a default reason if reason not provided and request failed', async () => {
62-
const transport = createTransport({}, req => {
63-
expect(req.category).toEqual(TRANSACTION_TRANSPORT_CATEGORY);
64-
expect(req.body).toEqual(serializeEnvelope(TRANSACTION_ENVELOPE));
65-
return resolvedSyncPromise({ statusCode: 500 });
66-
});
67-
try {
68-
await transport.send(TRANSACTION_ENVELOPE);
69-
} catch (res) {
70-
expect(res.status).toBe('failed');
71-
expect(res.reason).toBe('Unknown transport error');
72-
}
49+
expect(() => {
50+
void transport.send(ERROR_ENVELOPE);
51+
}).toThrow();
7352
});
7453

75-
describe('Rate-limiting', () => {
54+
// TODO(v7): Add tests back in and test by using client report logic
55+
describe.skip('Rate-limiting', () => {
7656
function setRateLimitTimes(): {
7757
retryAfterSeconds: number;
7858
beforeLimit: number;
@@ -123,7 +103,6 @@ describe('createTransport', () => {
123103
'x-sentry-rate-limits': null,
124104
'retry-after': `${retryAfterSeconds}`,
125105
},
126-
statusCode: 429,
127106
});
128107

129108
try {
@@ -133,7 +112,7 @@ describe('createTransport', () => {
133112
expect(res.reason).toBe(`Too many error requests, backing off until: ${new Date(afterLimit).toISOString()}`);
134113
}
135114

136-
setTransportResponse({ statusCode: 200 });
115+
setTransportResponse({});
137116

138117
try {
139118
await transport.send(ERROR_ENVELOPE);
@@ -142,8 +121,7 @@ describe('createTransport', () => {
142121
expect(res.reason).toBe(`Too many error requests, backing off until: ${new Date(afterLimit).toISOString()}`);
143122
}
144123

145-
const res = await transport.send(ERROR_ENVELOPE);
146-
expect(res.status).toBe('success');
124+
await transport.send(ERROR_ENVELOPE);
147125
});
148126

149127
it('back-off using X-Sentry-Rate-Limits with single category', async () => {
@@ -169,7 +147,6 @@ describe('createTransport', () => {
169147
'x-sentry-rate-limits': `${retryAfterSeconds}:error:scope`,
170148
'retry-after': null,
171149
},
172-
statusCode: 429,
173150
});
174151

175152
try {
@@ -179,7 +156,7 @@ describe('createTransport', () => {
179156
expect(res.reason).toBe(`Too many error requests, backing off until: ${new Date(afterLimit).toISOString()}`);
180157
}
181158

182-
setTransportResponse({ statusCode: 200 });
159+
setTransportResponse({});
183160

184161
try {
185162
await transport.send(TRANSACTION_ENVELOPE);
@@ -195,8 +172,7 @@ describe('createTransport', () => {
195172
expect(res.reason).toBe(`Too many error requests, backing off until: ${new Date(afterLimit).toISOString()}`);
196173
}
197174

198-
const res = await transport.send(TRANSACTION_ENVELOPE);
199-
expect(res.status).toBe('success');
175+
await transport.send(TRANSACTION_ENVELOPE);
200176
});
201177

202178
it('back-off using X-Sentry-Rate-Limits with multiple categories', async () => {
@@ -222,7 +198,6 @@ describe('createTransport', () => {
222198
'x-sentry-rate-limits': `${retryAfterSeconds}:error;transaction:scope`,
223199
'retry-after': null,
224200
},
225-
statusCode: 429,
226201
});
227202

228203
try {
@@ -248,13 +223,10 @@ describe('createTransport', () => {
248223
);
249224
}
250225

251-
setTransportResponse({ statusCode: 200 });
226+
setTransportResponse({});
252227

253-
const eventRes = await transport.send(ERROR_ENVELOPE);
254-
expect(eventRes.status).toBe('success');
255-
256-
const transactionRes = await transport.send(TRANSACTION_ENVELOPE);
257-
expect(transactionRes.status).toBe('success');
228+
await transport.send(ERROR_ENVELOPE);
229+
await transport.send(TRANSACTION_ENVELOPE);
258230
});
259231

260232
it('back-off using X-Sentry-Rate-Limits with missing categories should lock them all', async () => {
@@ -284,7 +256,6 @@ describe('createTransport', () => {
284256
'x-sentry-rate-limits': `${retryAfterSeconds}::scope`,
285257
'retry-after': null,
286258
},
287-
statusCode: 429,
288259
});
289260

290261
try {
@@ -310,13 +281,10 @@ describe('createTransport', () => {
310281
);
311282
}
312283

313-
setTransportResponse({ statusCode: 200 });
314-
315-
const eventRes = await transport.send(ERROR_ENVELOPE);
316-
expect(eventRes.status).toBe('success');
284+
setTransportResponse({});
317285

318-
const transactionRes = await transport.send(TRANSACTION_ENVELOPE);
319-
expect(transactionRes.status).toBe('success');
286+
await transport.send(ERROR_ENVELOPE);
287+
await transport.send(TRANSACTION_ENVELOPE);
320288
});
321289

322290
it('back-off using X-Sentry-Rate-Limits should also trigger for 200 responses', async () => {
@@ -340,7 +308,6 @@ describe('createTransport', () => {
340308
'x-sentry-rate-limits': `${retryAfterSeconds}:error;transaction:scope`,
341309
'retry-after': null,
342310
},
343-
statusCode: 200,
344311
});
345312

346313
try {

packages/core/test/mocks/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { createTransport } from '../../src/transports/base';
1313
export function getDefaultTestClientOptions(options: Partial<TestClientOptions> = {}): TestClientOptions {
1414
return {
1515
integrations: [],
16-
transport: () => createTransport({}, _ => resolvedSyncPromise({ statusCode: 200 })),
16+
transport: () => createTransport({}, _ => resolvedSyncPromise({})),
1717
stackParser: () => [],
1818
...options,
1919
};

0 commit comments

Comments
 (0)