@@ -47,6 +47,14 @@ class Client {
4747 const responseStream = request . post ( optionsToUse )
4848
4949 responseStream . on ( 'error' , ( err ) => {
50+ const error = new Error ( 'Error while executing request to remote server' )
51+
52+ addStack ( error , err . stack , {
53+ stackPrefix : 'Request Error stack:'
54+ } )
55+
56+ error . message = `${ error . message } . ${ err . message } `
57+
5058 reject ( err )
5159 } )
5260
@@ -60,10 +68,21 @@ class Client {
6068 try {
6169 const errorMessage = JSON . parse ( data . toString ( ) )
6270 const error = new Error ( errorMessage . message )
71+
72+ addStack ( error , errorMessage . stack , {
73+ stripMessage : true ,
74+ stackPrefix : 'Remote stack: '
75+ } )
76+
6377 error . remoteStack = errorMessage . stack
6478 reject ( error )
6579 } catch ( e ) {
66- const err = new Error ( 'Unknown error, status code ' + response . statusCode )
80+ const err = new Error ( `Error while executing request to remote server: Unknown error, status code ${ response . statusCode } ` )
81+
82+ addStack ( err , e . stack , {
83+ stackPrefix : 'Parsing Error stack:'
84+ } )
85+
6786 err . response = response
6887 reject ( err )
6988 }
@@ -117,3 +136,28 @@ function extractDataFromResponse (response, cb) {
117136 response . on ( 'error' , ( err ) => cb ( err ) )
118137 response . pipe ( writeStream )
119138}
139+
140+ function addStack ( err , stack , { stackPrefix = '' , stripMessage = false } = { } ) {
141+ if ( stack != null && stack !== '' ) {
142+ let newStack = stack
143+ let originalStack = ''
144+
145+ if ( err . stack != null && err . stack !== '' ) {
146+ originalStack = `${ err . stack } \n`
147+ }
148+
149+ if ( stripMessage ) {
150+ // to avoid duplicating message we strip the message
151+ // from the stack if it is equals to the message of error
152+ newStack = newStack . replace ( / ( \S + : ) ( .+ ) ( \r ? \n ) / , ( match , gLabel , gMessage , gRest ) => {
153+ if ( err . message === gMessage ) {
154+ return `${ gLabel } ${ gRest } `
155+ }
156+
157+ return match
158+ } )
159+ }
160+
161+ err . stack = `${ originalStack } ${ stackPrefix } ${ newStack } `
162+ }
163+ }
0 commit comments