Skip to content

Commit 44e0841

Browse files
authored
ref(browser): Consolidate transport methods (#4340)
Now browser transports only override a protected `_sendRequest`. Removes duplication of `sendEvent`.
1 parent c36de75 commit 44e0841

File tree

5 files changed

+23
-37
lines changed

5 files changed

+23
-37
lines changed

packages/browser/src/transports/base.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
import {
22
APIDetails,
3+
eventToSentryRequest,
34
getEnvelopeEndpointWithUrlEncodedAuth,
45
getStoreEndpointWithUrlEncodedAuth,
56
initAPIDetails,
7+
sessionToSentryRequest,
68
} from '@sentry/core';
79
import {
810
Event,
911
Outcome,
1012
Response as SentryResponse,
13+
SentryRequest,
1114
SentryRequestType,
15+
Session,
1216
Transport,
1317
TransportOptions,
1418
} from '@sentry/types';
@@ -21,7 +25,6 @@ import {
2125
makePromiseBuffer,
2226
parseRetryAfterHeader,
2327
PromiseBuffer,
24-
SentryError,
2528
} from '@sentry/utils';
2629

2730
import { sendReport } from './utils';
@@ -68,8 +71,15 @@ export abstract class BaseTransport implements Transport {
6871
/**
6972
* @inheritDoc
7073
*/
71-
public sendEvent(_: Event): PromiseLike<SentryResponse> {
72-
throw new SentryError('Transport Class has to implement `sendEvent` method');
74+
public sendEvent(event: Event): PromiseLike<SentryResponse> {
75+
return this._sendRequest(eventToSentryRequest(event, this._api), event);
76+
}
77+
78+
/**
79+
* @inheritDoc
80+
*/
81+
public sendSession(session: Session): PromiseLike<SentryResponse> {
82+
return this._sendRequest(sessionToSentryRequest(session, this._api), session);
7383
}
7484

7585
/**
@@ -223,4 +233,9 @@ export abstract class BaseTransport implements Transport {
223233
}
224234
return false;
225235
}
236+
237+
protected abstract _sendRequest(
238+
sentryRequest: SentryRequest,
239+
originalPayload: Event | Session,
240+
): PromiseLike<SentryResponse>;
226241
}

packages/browser/src/transports/fetch.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { eventToSentryRequest, sessionToSentryRequest } from '@sentry/core';
21
import { Event, Response, SentryRequest, Session, TransportOptions } from '@sentry/types';
32
import { SentryError, supportsReferrerPolicy, SyncPromise } from '@sentry/utils';
43

@@ -17,25 +16,11 @@ export class FetchTransport extends BaseTransport {
1716
this._fetch = fetchImpl;
1817
}
1918

20-
/**
21-
* @inheritDoc
22-
*/
23-
public sendEvent(event: Event): PromiseLike<Response> {
24-
return this._sendRequest(eventToSentryRequest(event, this._api), event);
25-
}
26-
27-
/**
28-
* @inheritDoc
29-
*/
30-
public sendSession(session: Session): PromiseLike<Response> {
31-
return this._sendRequest(sessionToSentryRequest(session, this._api), session);
32-
}
33-
3419
/**
3520
* @param sentryRequest Prepared SentryRequest to be delivered
3621
* @param originalPayload Original payload used to create SentryRequest
3722
*/
38-
private _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike<Response> {
23+
protected _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike<Response> {
3924
if (this._isRateLimited(sentryRequest.type)) {
4025
this.recordLostEvent('ratelimit_backoff', sentryRequest.type);
4126

packages/browser/src/transports/xhr.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,15 @@
1-
import { eventToSentryRequest, sessionToSentryRequest } from '@sentry/core';
21
import { Event, Response, SentryRequest, Session } from '@sentry/types';
32
import { SentryError, SyncPromise } from '@sentry/utils';
43

54
import { BaseTransport } from './base';
65

76
/** `XHR` based transport */
87
export class XHRTransport extends BaseTransport {
9-
/**
10-
* @inheritDoc
11-
*/
12-
public sendEvent(event: Event): PromiseLike<Response> {
13-
return this._sendRequest(eventToSentryRequest(event, this._api), event);
14-
}
15-
16-
/**
17-
* @inheritDoc
18-
*/
19-
public sendSession(session: Session): PromiseLike<Response> {
20-
return this._sendRequest(sessionToSentryRequest(session, this._api), session);
21-
}
22-
238
/**
249
* @param sentryRequest Prepared SentryRequest to be delivered
2510
* @param originalPayload Original payload used to create SentryRequest
2611
*/
27-
private _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike<Response> {
12+
protected _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike<Response> {
2813
if (this._isRateLimited(sentryRequest.type)) {
2914
this.recordLostEvent('ratelimit_backoff', sentryRequest.type);
3015

packages/browser/test/unit/integrations/helpers.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { WrappedFunction } from '@sentry/types';
2-
import { SinonSpy, spy } from 'sinon';
2+
import { spy } from 'sinon';
33

44
import { wrap } from '../../../src/helpers';
55

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,13 @@ describe('BaseTransport', () => {
112112
});
113113

114114
it('doesnt provide sendEvent() implementation', () => {
115+
expect.assertions(1);
115116
const transport = new SimpleTransport({ dsn: testDsn });
116117

117118
try {
118119
void transport.sendEvent({});
119120
} catch (e) {
120-
expect(e.message).toBe('Transport Class has to implement `sendEvent` method');
121+
expect(e).toBeDefined();
121122
}
122123
});
123124

0 commit comments

Comments
 (0)