@@ -116,36 +116,56 @@ class VaultClient {
116116 const data = err . response ?. data ;
117117 const requestId = err . response ?. headers [ 'x-request-id' ] ;
118118
119+ const errorFromClientHeader = err . response ?. headers ?. [ 'error-from-client' ] ;
120+ const errorFromClient = errorFromClientHeader ? String ( errorFromClientHeader ) . toLowerCase ( ) === 'true' : undefined ;
121+
119122 if ( contentType ) {
120123 if ( contentType . includes ( 'application/json' ) ) {
121- this . handleJsonError ( err , data , requestId , reject ) ;
124+ this . handleJsonError ( err , data , requestId , reject , errorFromClient ) ;
122125 } else if ( contentType . includes ( 'text/plain' ) ) {
123- this . handleTextError ( err , data , requestId , reject ) ;
126+ this . handleTextError ( err , data , requestId , reject , errorFromClient ) ;
124127 } else {
125- this . handleGenericError ( err , requestId , reject ) ;
128+ this . handleGenericError ( err , requestId , reject , errorFromClient ) ;
126129 }
127130 } else {
128- this . handleGenericError ( err , requestId , reject ) ;
131+ this . handleGenericError ( err , requestId , reject , errorFromClient ) ;
129132 }
130133 } ) ;
131134
132- private handleJsonError ( err : any , data : any , requestId : string , reject : Function ) {
135+ private handleJsonError ( err : any , data : any , requestId : string , reject : Function , errorFromClient ?: boolean ) {
133136 let description = data ;
134137 const statusCode = description ?. error ?. http_status ;
135138 const grpcCode = description ?. error ?. grpc_code ;
136- const details = description ?. error ?. details ;
137-
139+ let details = description ?. error ?. details ;
140+
141+ if ( errorFromClient !== undefined ) {
142+ details = Array . isArray ( details )
143+ ? [ ...details , { errorFromClient : errorFromClient } ]
144+ : [ { errorFromClient : errorFromClient } ] ;
145+ }
146+
138147 description = description ?. error ?. message || description ;
139148 this . logAndRejectError ( description , err , requestId , reject , statusCode , grpcCode , details ) ;
140149 }
141150
142- private handleTextError ( err : any , data : any , requestId : string , reject : Function ) {
143- this . logAndRejectError ( data , err , requestId , reject ) ;
151+ private handleTextError ( err : any , data : any , requestId : string , reject : Function , errorFromClient ?: boolean ) {
152+ let details : any = [ ] ;
153+
154+ if ( errorFromClient !== undefined ) {
155+ details . push ( { errorFromClient } ) ;
156+ }
157+
158+ this . logAndRejectError ( data , err , requestId , reject , undefined , undefined , details ) ;
144159 }
145160
146- private handleGenericError ( err : any , requestId : string , reject : Function ) {
161+ private handleGenericError ( err : any , requestId : string , reject : Function , errorFromClient ?: boolean ) {
147162 const description = err ?. response ?. data || err ?. message || errorMessages . ERROR_OCCURRED ;
148- this . logAndRejectError ( description , err , requestId , reject ) ;
163+ let details : any = [ ] ;
164+
165+ if ( errorFromClient !== undefined ) {
166+ details . push ( { errorFromClient } ) ;
167+ }
168+ this . logAndRejectError ( description , err , requestId , reject , undefined , undefined , details ) ;
149169 }
150170
151171 private logAndRejectError (
0 commit comments