@@ -26,7 +26,7 @@ function extractTransaction(req: { [key: string]: any }, type: boolean | Transac
2626 stack : [
2727 {
2828 name : string ;
29- } ,
29+ }
3030 ] ;
3131 } ;
3232 } ;
@@ -50,8 +50,14 @@ function extractTransaction(req: { [key: string]: any }, type: boolean | Transac
5050 }
5151}
5252
53+ /** Default request keys that'll be used to extract data from the request */
54+ const DEFAULT_REQUEST_KEYS = [ 'cookies' , 'data' , 'headers' , 'method' , 'query_string' , 'url' ] ;
55+
5356/** JSDoc */
5457function extractRequestData ( req : { [ key : string ] : any } , keys : boolean | string [ ] ) : { [ key : string ] : string } {
58+ const request : { [ key : string ] : any } = { } ;
59+ const attributes = Array . isArray ( keys ) ? keys : DEFAULT_REQUEST_KEYS ;
60+
5561 // headers:
5662 // node, express: req.headers
5763 // koa: req.header
@@ -80,48 +86,50 @@ function extractRequestData(req: { [key: string]: any }, keys: boolean | string[
8086 const originalUrl = ( req . originalUrl || req . url ) as string ;
8187 // absolute url
8288 const absoluteUrl = `${ protocol } ://${ host } ${ originalUrl } ` ;
83- // query string:
84- // node: req.url (raw)
85- // express, koa: req.query
86- const query = url . parse ( originalUrl || '' , false ) . query ;
87- // cookies:
88- // node, express, koa: req.headers.cookie
89- const cookies = cookie . parse ( headers . cookie || '' ) ;
90- // body data:
91- // node, express, koa: req.body
92- let data = req . body ;
93- if ( method === 'GET' || method === 'HEAD' ) {
94- if ( typeof data === 'undefined' ) {
95- data = '<unavailable>' ;
96- }
97- }
98- if ( data && ! isString ( data ) ) {
99- // Make sure the request body is a string
100- data = JSON . stringify ( normalize ( data ) ) ;
101- }
102-
103- // request interface
104- const request : {
105- [ key : string ] : any ;
106- } = {
107- cookies,
108- data,
109- headers,
110- method,
111- query_string : query ,
112- url : absoluteUrl ,
113- } ;
114-
115- const attributes = Array . isArray ( keys ) ? keys : [ ] ;
11689
117- if ( attributes . length ) {
118- Object . keys ( request ) . forEach ( key => {
119- /** Remove any of the unspecified keys in the options from the request interface */
120- if ( ! attributes . includes ( key ) ) {
121- delete request [ key ] ;
122- }
123- } ) ;
124- }
90+ attributes . forEach ( key => {
91+ switch ( key ) {
92+ case 'headers' :
93+ request . headers = headers ;
94+ break ;
95+ case 'method' :
96+ request . method = method ;
97+ break ;
98+ case 'url' :
99+ request . url = absoluteUrl ;
100+ break ;
101+ case 'cookies' :
102+ // cookies:
103+ // node, express, koa: req.headers.cookie
104+ request . cookies = cookie . parse ( headers . cookie || '' ) ;
105+ break ;
106+ case 'query_string' :
107+ // query string:
108+ // node: req.url (raw)
109+ // express, koa: req.query
110+ request . query_string = url . parse ( originalUrl || '' , false ) . query ;
111+ break ;
112+ case 'data' :
113+ // body data:
114+ // node, express, koa: req.body
115+ let data = req . body ;
116+ if ( method === 'GET' || method === 'HEAD' ) {
117+ if ( typeof data === 'undefined' ) {
118+ data = '<unavailable>' ;
119+ }
120+ }
121+ if ( data && ! isString ( data ) ) {
122+ // Make sure the request body is a string
123+ data = JSON . stringify ( normalize ( data ) ) ;
124+ }
125+ request . data = data ;
126+ break ;
127+ default :
128+ if ( { } . hasOwnProperty . call ( req , key ) ) {
129+ request [ key ] = ( req as { [ key : string ] : any } ) [ key ] ;
130+ }
131+ }
132+ } ) ;
125133
126134 return request ;
127135}
0 commit comments