1
1
import { eventToSentryRequest , sessionToSentryRequest } from '@sentry/core' ;
2
- import { Event , Response , SentryRequest , Session } from '@sentry/types' ;
3
- import { SyncPromise } from '@sentry/utils' ;
2
+ import { Event , Outcome , Response , SentryRequest , Session } from '@sentry/types' ;
3
+ import { SentryError , SyncPromise } from '@sentry/utils' ;
4
4
5
5
import { BaseTransport } from './base' ;
6
6
@@ -26,6 +26,8 @@ export class XHRTransport extends BaseTransport {
26
26
*/
27
27
private _sendRequest ( sentryRequest : SentryRequest , originalPayload : Event | Session ) : PromiseLike < Response > {
28
28
if ( this . _isRateLimited ( sentryRequest . type ) ) {
29
+ this . recordLostEvent ( Outcome . RateLimit ) ;
30
+
29
31
return Promise . reject ( {
30
32
event : originalPayload ,
31
33
type : sentryRequest . type ,
@@ -36,29 +38,38 @@ export class XHRTransport extends BaseTransport {
36
38
} ) ;
37
39
}
38
40
39
- return this . _buffer . add (
40
- ( ) =>
41
- new SyncPromise < Response > ( ( resolve , reject ) => {
42
- const request = new XMLHttpRequest ( ) ;
41
+ return this . _buffer
42
+ . add (
43
+ ( ) =>
44
+ new SyncPromise < Response > ( ( resolve , reject ) => {
45
+ const request = new XMLHttpRequest ( ) ;
43
46
44
- request . onreadystatechange = ( ) : void => {
45
- if ( request . readyState === 4 ) {
46
- const headers = {
47
- 'x-sentry-rate-limits' : request . getResponseHeader ( 'X-Sentry-Rate-Limits' ) ,
48
- 'retry-after' : request . getResponseHeader ( 'Retry-After' ) ,
49
- } ;
50
- this . _handleResponse ( { requestType : sentryRequest . type , response : request , headers, resolve, reject } ) ;
51
- }
52
- } ;
47
+ request . onreadystatechange = ( ) : void => {
48
+ if ( request . readyState === 4 ) {
49
+ const headers = {
50
+ 'x-sentry-rate-limits' : request . getResponseHeader ( 'X-Sentry-Rate-Limits' ) ,
51
+ 'retry-after' : request . getResponseHeader ( 'Retry-After' ) ,
52
+ } ;
53
+ this . _handleResponse ( { requestType : sentryRequest . type , response : request , headers, resolve, reject } ) ;
54
+ }
55
+ } ;
53
56
54
- request . open ( 'POST' , sentryRequest . url ) ;
55
- for ( const header in this . options . headers ) {
56
- if ( this . options . headers . hasOwnProperty ( header ) ) {
57
- request . setRequestHeader ( header , this . options . headers [ header ] ) ;
57
+ request . open ( 'POST' , sentryRequest . url ) ;
58
+ for ( const header in this . options . headers ) {
59
+ if ( this . options . headers . hasOwnProperty ( header ) ) {
60
+ request . setRequestHeader ( header , this . options . headers [ header ] ) ;
61
+ }
58
62
}
59
- }
60
- request . send ( sentryRequest . body ) ;
61
- } ) ,
62
- ) ;
63
+ request . send ( sentryRequest . body ) ;
64
+ } ) ,
65
+ )
66
+ . then ( undefined , reason => {
67
+ if ( reason instanceof SentryError ) {
68
+ this . recordLostEvent ( Outcome . QueueSize ) ;
69
+ } else {
70
+ this . recordLostEvent ( Outcome . NetworkError ) ;
71
+ }
72
+ throw reason ;
73
+ } ) ;
63
74
}
64
75
}
0 commit comments