1
1
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
2
2
import * as Sentry from '@sentry/node' ;
3
+ import { EnvelopeItemType } from '@sentry/types' ;
3
4
import { logger , parseSemver } from '@sentry/utils' ;
4
5
import axios from 'axios' ;
5
6
import { Express } from 'express' ;
@@ -24,8 +25,8 @@ export type DataCollectorOptions = {
24
25
// Whether to stop the server after the requests have been intercepted
25
26
endServer ?: boolean ;
26
27
27
- // Type of the envelopes to capture
28
- envelopeType ?: string ;
28
+ // Type(s) of the envelopes to capture
29
+ envelopeType ?: EnvelopeItemType | EnvelopeItemType [ ] ;
29
30
} ;
30
31
31
32
/**
@@ -97,11 +98,16 @@ export const getMultipleEnvelopeRequest = async (
97
98
config : TestServerConfig ,
98
99
options : DataCollectorOptions ,
99
100
) : Promise < Record < string , unknown > [ ] [ ] > => {
101
+ const envelopeTypeArray =
102
+ typeof options . envelopeType === 'string'
103
+ ? [ options . envelopeType ]
104
+ : options . envelopeType || ( [ 'event' ] as EnvelopeItemType [ ] ) ;
105
+
100
106
const resProm = setupNock (
101
107
config . server ,
102
108
options . count || 1 ,
103
109
typeof options . endServer === 'undefined' ? true : options . endServer ,
104
- options . envelopeType || 'event' ,
110
+ envelopeTypeArray ,
105
111
) ;
106
112
107
113
void makeRequest ( options . method || 'get' , config . url ) ;
@@ -112,7 +118,7 @@ const setupNock = async (
112
118
server : http . Server ,
113
119
count : number ,
114
120
endServer : boolean ,
115
- envelopeType : string ,
121
+ envelopeType : EnvelopeItemType [ ] ,
116
122
) : Promise < Record < string , unknown > [ ] [ ] > => {
117
123
return new Promise ( resolve => {
118
124
const envelopes : Record < string , unknown > [ ] [ ] = [ ] ;
@@ -121,17 +127,21 @@ const setupNock = async (
121
127
. post ( '/api/1337/envelope/' , body => {
122
128
const envelope = parseEnvelope ( body ) ;
123
129
124
- if ( envelope [ 1 ] . type === envelopeType ) {
130
+ if ( envelopeType . includes ( envelope [ 1 ] . type as EnvelopeItemType ) ) {
125
131
envelopes . push ( envelope ) ;
126
132
} else {
127
133
return false ;
128
134
}
129
135
130
136
if ( count === envelopes . length ) {
131
137
nock . removeInterceptor ( mock ) ;
132
- nock . cleanAll ( ) ;
133
138
134
139
if ( endServer ) {
140
+ // Cleaning nock only before the server is closed,
141
+ // not to break tests that use simultaneous requests to the server.
142
+ // Ex: Remix scope bleed tests.
143
+ nock . cleanAll ( ) ;
144
+
135
145
server . close ( ( ) => {
136
146
resolve ( envelopes ) ;
137
147
} ) ;
0 commit comments