@mondart/nestjs-common-module-core 3.2.8 → 3.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -23,6 +23,14 @@ app.useGlobalPipes(new I18nValidationPipe(validationOptions));
|
|
|
23
23
|
app.useGlobalFilters(new GlobalExceptionFilter(true)); // true = report to Sentry
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
+
By default, Sentry reporting ignores HTTP status codes `400`, `401`, `403`,
|
|
27
|
+
`404`, and `422`. Pass a second argument to replace that list (including an
|
|
28
|
+
empty array to report every non-validation exception):
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
app.useGlobalFilters(new GlobalExceptionFilter(true, [400, 404]));
|
|
32
|
+
```
|
|
33
|
+
|
|
26
34
|
`GlobalExceptionFilter` catches everything — Nest's built-in exceptions,
|
|
27
35
|
package-local exceptions (e.g. `TooManyRequestsException`), plain errors, and
|
|
28
36
|
`I18nValidationException` — and always responds with the same `ErrorResponse`
|
|
@@ -3,10 +3,12 @@ import { Response } from 'express';
|
|
|
3
3
|
export declare class GlobalExceptionFilter implements ExceptionFilter {
|
|
4
4
|
private readonly logger;
|
|
5
5
|
private readonly sentryEnable;
|
|
6
|
-
|
|
6
|
+
private readonly sentryIgnoredExceptionCodes;
|
|
7
|
+
constructor(sentryEnable?: boolean, sentryIgnoredExceptionCodes?: readonly number[]);
|
|
7
8
|
catch(exception: any, host: ArgumentsHost): import("rxjs").Observable<never> | Response<any, Record<string, any>>;
|
|
8
9
|
private isObject;
|
|
9
10
|
private isArray;
|
|
11
|
+
private isExpectedHealthCheckFailure;
|
|
10
12
|
private handleI18nValidationException;
|
|
11
13
|
private flattenValidationErrors;
|
|
12
14
|
private translateValidationConstraints;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-exception.filter.d.ts","sourceRoot":"","sources":["../../src/filters/global-exception.filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,eAAe,EAKhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"global-exception.filter.d.ts","sourceRoot":"","sources":["../../src/filters/global-exception.filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,eAAe,EAKhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAmCnC,qBACa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAEpB;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAsB;gBAOhE,YAAY,GAAE,OAAe,EAC7B,2BAA2B,GAAE,SAAS,MAAM,EACX;IAMnC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa;IAyIzC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,4BAA4B;IAoBpC,OAAO,CAAC,6BAA6B;IA4BrC,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,8BAA8B;IAatC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,kBAAkB;CAiC3B"}
|
|
@@ -52,20 +52,32 @@ const exceptions = __importStar(require("@nestjs/common/exceptions"));
|
|
|
52
52
|
const customExceptions = __importStar(require("../exceptions"));
|
|
53
53
|
const Sentry = __importStar(require("@sentry/nestjs"));
|
|
54
54
|
const nestjs_i18n_1 = require("nestjs-i18n");
|
|
55
|
+
const DEFAULT_IGNORED_EXCEPTION_CODES = [
|
|
56
|
+
common_1.HttpStatus.BAD_REQUEST,
|
|
57
|
+
common_1.HttpStatus.UNAUTHORIZED,
|
|
58
|
+
common_1.HttpStatus.FORBIDDEN,
|
|
59
|
+
common_1.HttpStatus.NOT_FOUND,
|
|
60
|
+
common_1.HttpStatus.UNPROCESSABLE_ENTITY,
|
|
61
|
+
];
|
|
55
62
|
let GlobalExceptionFilter = class GlobalExceptionFilter {
|
|
56
|
-
constructor(sentryEnable = false) {
|
|
63
|
+
constructor(sentryEnable = false, sentryIgnoredExceptionCodes = DEFAULT_IGNORED_EXCEPTION_CODES) {
|
|
57
64
|
this.logger = new common_1.Logger('GlobalExceptionFilter', {
|
|
58
65
|
timestamp: true,
|
|
59
66
|
});
|
|
60
67
|
this.sentryEnable = sentryEnable;
|
|
68
|
+
this.sentryIgnoredExceptionCodes = new Set(sentryIgnoredExceptionCodes);
|
|
61
69
|
}
|
|
62
70
|
catch(exception, host) {
|
|
63
71
|
const type = host?.getType();
|
|
64
72
|
const isI18nValidationException = exception instanceof nestjs_i18n_1.I18nValidationException;
|
|
73
|
+
const isExpectedHealthCheckFailure = this.isExpectedHealthCheckFailure(exception, host);
|
|
65
74
|
const messageKey = isI18nValidationException
|
|
66
75
|
? undefined
|
|
67
76
|
: this.translateException(exception, host);
|
|
68
|
-
if (this.sentryEnable &&
|
|
77
|
+
if (this.sentryEnable &&
|
|
78
|
+
!isI18nValidationException &&
|
|
79
|
+
!isExpectedHealthCheckFailure &&
|
|
80
|
+
!this.sentryIgnoredExceptionCodes.has(exception?.getStatus?.()))
|
|
69
81
|
Sentry.captureException(exception, exception?.response);
|
|
70
82
|
const context = host.switchToHttp();
|
|
71
83
|
const message = typeof exception?.message === 'string'
|
|
@@ -78,8 +90,10 @@ let GlobalExceptionFilter = class GlobalExceptionFilter {
|
|
|
78
90
|
exception?.message?.length !== 0)
|
|
79
91
|
? JSON.stringify(exception?.message)
|
|
80
92
|
: 'Unknown exception occurred.';
|
|
81
|
-
|
|
82
|
-
|
|
93
|
+
if (!isExpectedHealthCheckFailure) {
|
|
94
|
+
this.logger.error(`exceptionName: ${exception?.name} - ${message}`);
|
|
95
|
+
this.logger.debug(exception?.stack);
|
|
96
|
+
}
|
|
83
97
|
const nestExceptionsArray = Object.values(exceptions);
|
|
84
98
|
const customExceptionsArray = Object.values(customExceptions);
|
|
85
99
|
const exceptionsName = [
|
|
@@ -161,6 +175,14 @@ let GlobalExceptionFilter = class GlobalExceptionFilter {
|
|
|
161
175
|
isArray(value) {
|
|
162
176
|
return value !== null && typeof value === 'object' && Array.isArray(value);
|
|
163
177
|
}
|
|
178
|
+
isExpectedHealthCheckFailure(exception, host) {
|
|
179
|
+
if (host?.getType() !== 'http' || exception?.getStatus?.() !== 503) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
const request = host.switchToHttp().getRequest();
|
|
183
|
+
const path = request?.originalUrl ?? request?.url ?? '';
|
|
184
|
+
return /\/health-check\/(?:live|ready|database|http|redis|bull|kafka)(?:[/?#]|$)/.test(path);
|
|
185
|
+
}
|
|
164
186
|
handleI18nValidationException(exception, host, response) {
|
|
165
187
|
const i18n = nestjs_i18n_1.I18nContext.current(host) ?? nestjs_i18n_1.I18nContext.current();
|
|
166
188
|
const status = exception.getStatus?.() ?? common_1.HttpStatus.BAD_REQUEST;
|
|
@@ -226,6 +248,6 @@ let GlobalExceptionFilter = class GlobalExceptionFilter {
|
|
|
226
248
|
exports.GlobalExceptionFilter = GlobalExceptionFilter;
|
|
227
249
|
exports.GlobalExceptionFilter = GlobalExceptionFilter = __decorate([
|
|
228
250
|
(0, common_1.Catch)(),
|
|
229
|
-
__metadata("design:paramtypes", [Boolean])
|
|
251
|
+
__metadata("design:paramtypes", [Boolean, Array])
|
|
230
252
|
], GlobalExceptionFilter);
|
|
231
253
|
//# sourceMappingURL=global-exception.filter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-exception.filter.js","sourceRoot":"","sources":["../../src/filters/global-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAQwB;AAExB,+BAAkC;AAClC,gCAAuC;AACvC,oCAAgE;AAChE,wCAIoB;AACpB,sEAAwD;AACxD,gEAAkD;AAClD,uDAAyC;AACzC,6CAIqB;
|
|
1
|
+
{"version":3,"file":"global-exception.filter.js","sourceRoot":"","sources":["../../src/filters/global-exception.filter.ts"],"names":[],"mappings":"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"}
|