@@ -65,154 +65,145 @@ export class ErrorHttpFilter implements ExceptionFilter {
6565 request . repoVersion ??
6666 this . configService . get < string > ( 'app.repoVersion' ) ;
6767
68+ // Debugger
69+ try {
70+ this . debuggerService . error (
71+ request ?. id ? request . id : ErrorHttpFilter . name ,
72+ {
73+ description :
74+ exception instanceof Error
75+ ? exception . message
76+ : exception . toString ( ) ,
77+ class : __class ?? ErrorHttpFilter . name ,
78+ function : __function ?? this . catch . name ,
79+ path : __path ,
80+ } ,
81+ exception
82+ ) ;
83+ } catch ( err : unknown ) { }
84+
85+ let statusHttp : HttpStatus = HttpStatus . INTERNAL_SERVER_ERROR ;
6886 if ( exception instanceof HttpException ) {
69- const statusHttp : number = exception . getStatus ( ) ;
87+ statusHttp = exception . getStatus ( ) ;
7088 const responseExpress : Response = ctx . getResponse < Response > ( ) ;
7189
72- // Debugger
73- try {
74- this . debuggerService . error (
75- request ?. id ? request . id : ErrorHttpFilter . name ,
76- {
77- description : exception . message ,
78- class : __class ,
79- function : __function ,
80- path : __path ,
81- } ,
82- exception
83- ) ;
84- } catch ( err : unknown ) { }
85-
8690 // Restructure
8791 const response = exception . getResponse ( ) ;
88-
89- if ( ! this . isErrorException ( response ) ) {
90- responseExpress . status ( statusHttp ) . json ( response ) ;
92+ if ( this . isErrorException ( response ) ) {
93+ const responseException = response as IErrorException ;
94+ const {
95+ statusCode,
96+ message,
97+ _errorType,
98+ data,
99+ properties,
100+ _metadata,
101+ } = responseException ;
102+
103+ let { errors, _error } = responseException ;
104+ if ( errors ?. length > 0 ) {
105+ errors =
106+ _errorType === ERROR_TYPE . IMPORT
107+ ? await this . messageService . getImportErrorsMessage (
108+ errors as IValidationErrorImport [ ] ,
109+ customLang
110+ )
111+ : await this . messageService . getRequestErrorsMessage (
112+ errors as ValidationError [ ] ,
113+ customLang
114+ ) ;
115+ }
116+
117+ if ( ! _error ) {
118+ _error =
119+ 'message' in exception ? exception . message : undefined ;
120+ } else if ( typeof _error !== 'string' ) {
121+ _error = JSON . stringify ( _error ) ;
122+ }
123+
124+ const mapMessage : string | IMessage =
125+ await this . messageService . get ( message , {
126+ customLanguages : customLang ,
127+ properties,
128+ } ) ;
129+
130+ const resMetadata : IErrorHttpFilterMetadata = {
131+ languages : customLang ,
132+ timestamp : __timestamp ,
133+ timezone : __timezone ,
134+ requestId : __requestId ,
135+ path : __path ,
136+ version : __version ,
137+ repoVersion : __repoVersion ,
138+ ..._metadata ,
139+ } ;
140+
141+ const resResponse : IErrorHttpFilter = {
142+ statusCode : statusCode ?? statusHttp ,
143+ message : mapMessage ,
144+ _error,
145+ errors : errors as IErrors [ ] | IErrorsImport [ ] ,
146+ _metadata : resMetadata ,
147+ data,
148+ } ;
149+
150+ responseExpress
151+ . setHeader ( 'x-custom-lang' , customLang )
152+ . setHeader ( 'x-timestamp' , __timestamp )
153+ . setHeader ( 'x-timezone' , __timezone )
154+ . setHeader ( 'x-request-id' , __requestId )
155+ . setHeader ( 'x-version' , __version )
156+ . setHeader ( 'x-repo-version' , __repoVersion )
157+ . status ( statusHttp )
158+ . json ( resResponse ) ;
91159
92160 return ;
93161 }
94-
95- const responseException = response as IErrorException ;
96- const {
97- statusCode,
98- message,
99- _errorType,
100- data,
101- properties,
102- _metadata,
103- } = responseException ;
104-
105- let { errors, _error } = responseException ;
106- if ( errors ?. length > 0 ) {
107- errors =
108- _errorType === ERROR_TYPE . IMPORT
109- ? await this . messageService . getImportErrorsMessage (
110- errors as IValidationErrorImport [ ] ,
111- customLang
112- )
113- : await this . messageService . getRequestErrorsMessage (
114- errors as ValidationError [ ] ,
115- customLang
116- ) ;
117- }
118-
119- if ( ! _error ) {
120- _error = 'message' in exception ? exception . message : undefined ;
121- } else if ( typeof _error !== 'string' ) {
122- _error = JSON . stringify ( _error ) ;
123- }
124-
125- const mapMessage : string | IMessage = await this . messageService . get (
126- message ,
127- { customLanguages : customLang , properties }
128- ) ;
129-
130- const resMetadata : IErrorHttpFilterMetadata = {
131- languages : customLang ,
132- timestamp : __timestamp ,
133- timezone : __timezone ,
134- requestId : __requestId ,
135- path : __path ,
136- version : __version ,
137- repoVersion : __repoVersion ,
138- ..._metadata ,
139- } ;
140-
141- const resResponse : IErrorHttpFilter = {
142- statusCode : statusCode ?? statusHttp ,
143- message : mapMessage ,
144- _error,
145- errors : errors as IErrors [ ] | IErrorsImport [ ] ,
146- _metadata : resMetadata ,
147- data,
148- } ;
149-
150- responseExpress
151- . setHeader ( 'x-custom-lang' , customLang )
152- . setHeader ( 'x-timestamp' , __timestamp )
153- . setHeader ( 'x-timezone' , __timezone )
154- . setHeader ( 'x-request-id' , __requestId )
155- . setHeader ( 'x-version' , __version )
156- . setHeader ( 'x-repo-version' , __repoVersion )
157- . status ( statusHttp )
158- . json ( resResponse ) ;
159- } else {
160- // In certain situations `httpAdapter` might not be available in the
161- // constructor method, thus we should resolve it here.
162- const message : string = ( await this . messageService . get (
163- 'http.serverError.internalServerError'
164- ) ) as string ;
165-
166- const _metadata : IErrorHttpFilterMetadata = {
167- languages : customLang ,
168- timestamp : __timestamp ,
169- timezone : __timezone ,
170- requestId : __requestId ,
171- path : __path ,
172- version : __version ,
173- repoVersion : __repoVersion ,
174- } ;
175-
176- const responseBody = {
177- statusCode : HttpStatus . INTERNAL_SERVER_ERROR ,
178- message,
179- _error :
180- exception instanceof Error && 'message' in exception
181- ? exception . message
182- : undefined ,
183- _metadata,
184- } ;
185-
186- // Debugger
187- try {
188- this . debuggerService . error (
189- ErrorHttpFilter . name ,
190- {
191- description : message ,
192- class : ErrorHttpFilter . name ,
193- function : 'catch' ,
194- path : __path ,
195- } ,
196- exception
197- ) ;
198- } catch ( err : unknown ) { }
199-
200- const responseExpress : Response = ctx . getResponse < Response > ( ) ;
201- responseExpress
202- . setHeader ( 'x-custom-lang' , customLang )
203- . setHeader ( 'x-timestamp' , __timestamp )
204- . setHeader ( 'x-timezone' , __timezone )
205- . setHeader ( 'x-request-id' , __requestId )
206- . setHeader ( 'x-version' , __version )
207- . setHeader ( 'x-repo-version' , __repoVersion )
208- . status ( HttpStatus . INTERNAL_SERVER_ERROR )
209- . json ( responseBody ) ;
210162 }
211163
164+ // In certain situations `httpAdapter` might not be available in the
165+ // constructor method, thus we should resolve it here.
166+ const message : string = await this . messageService . get (
167+ `http.${ statusHttp } `
168+ ) ;
169+
170+ const _metadata : IErrorHttpFilterMetadata = {
171+ languages : customLang ,
172+ timestamp : __timestamp ,
173+ timezone : __timezone ,
174+ requestId : __requestId ,
175+ path : __path ,
176+ version : __version ,
177+ repoVersion : __repoVersion ,
178+ } ;
179+
180+ const responseBody = {
181+ statusCode : statusHttp ,
182+ message,
183+ _error :
184+ exception instanceof Error && 'message' in exception
185+ ? exception . message
186+ : exception ,
187+ _metadata,
188+ } ;
189+
190+ const responseExpress : Response = ctx . getResponse < Response > ( ) ;
191+ responseExpress
192+ . setHeader ( 'x-custom-lang' , customLang )
193+ . setHeader ( 'x-timestamp' , __timestamp )
194+ . setHeader ( 'x-timezone' , __timezone )
195+ . setHeader ( 'x-request-id' , __requestId )
196+ . setHeader ( 'x-version' , __version )
197+ . setHeader ( 'x-repo-version' , __repoVersion )
198+ . status ( HttpStatus . INTERNAL_SERVER_ERROR )
199+ . json ( responseBody ) ;
200+
212201 return ;
213202 }
214203
215204 isErrorException ( obj : any ) : obj is IErrorException {
216- return 'statusCode' in obj && 'message' in obj ;
205+ return typeof obj === 'object'
206+ ? 'statusCode' in obj && 'message' in obj
207+ : false ;
217208 }
218209}
0 commit comments