-
-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy patherror-formatters.ts
More file actions
69 lines (64 loc) · 2.22 KB
/
error-formatters.ts
File metadata and controls
69 lines (64 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import {FastifyError, FastifyRequest} from 'fastify';
export class ErrorDataFormatter {
static formatValidationError(error: FastifyError, request: FastifyRequest) {
return {
err: {
message: error.message,
name: error.name,
code: error.code,
stack: error.stack,
validationContext: error.validationContext as 'body' | 'headers' | 'params',
validation: error.validation
},
httpRequest: this.formatHttpRequest(request, error.statusCode),
headers: this.formatHeaders(request),
query: request.query,
requestBody: request.body,
type: 'validation_error'
};
}
static formatUnhandledError(error: FastifyError, request: FastifyRequest) {
return {
err: {
message: error.message,
name: error.name,
code: error.code,
stack: error.stack,
statusCode: error.statusCode
},
httpRequest: this.formatHttpRequest(request),
headers: this.formatHeaders(request),
query: request.query,
requestBody: request.body,
type: 'unhandled_error'
};
}
private static formatHttpRequest(request: FastifyRequest, status?: number) {
return {
requestMethod: request.method,
requestUrl: request.url,
userAgent: request.headers['user-agent'],
remoteIp: request.ip,
referer: request.headers.referer,
...(status && {status})
};
}
private static formatHeaders(request: FastifyRequest) {
return {
'content-type': request.headers['content-type'],
'x-site-uuid': request.headers['x-site-uuid'],
'user-agent': request.headers['user-agent'],
referer: request.headers.referer
};
}
}
export class ErrorResponseFormatter {
static formatResponse(error: FastifyError) {
return {
error: 'Bad Request',
message: error.message,
statusCode: error.statusCode,
validation: error.validation
};
}
}