11import { 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' ;
44
55import { BaseTransport } from './base' ;
66
@@ -26,6 +26,8 @@ export class XHRTransport extends BaseTransport {
2626 */
2727 private _sendRequest ( sentryRequest : SentryRequest , originalPayload : Event | Session ) : PromiseLike < Response > {
2828 if ( this . _isRateLimited ( sentryRequest . type ) ) {
29+ this . recordLostEvent ( Outcome . RateLimit ) ;
30+
2931 return Promise . reject ( {
3032 event : originalPayload ,
3133 type : sentryRequest . type ,
@@ -36,29 +38,38 @@ export class XHRTransport extends BaseTransport {
3638 } ) ;
3739 }
3840
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 ( ) ;
4346
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+ } ;
5356
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+ }
5862 }
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+ } ) ;
6374 }
6475}
0 commit comments