nestjs-http-wrapper
Version:
A wrapper for NestJS HttpService to standardize requests and error handling.
95 lines • 4.68 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var HttpExceptionFilter_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpExceptionFilter = void 0;
const common_1 = require("@nestjs/common");
let HttpExceptionFilter = HttpExceptionFilter_1 = class HttpExceptionFilter {
constructor() {
this.logger = new common_1.Logger(HttpExceptionFilter_1.name);
}
catch(exception, host) {
var _a, _b;
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
let status;
let message;
let error;
let provider;
let additionalFields;
let customCode;
if (exception instanceof common_1.HttpException) {
status = exception.getStatus();
const errorResponse = exception.getResponse();
if (typeof errorResponse === 'string') {
message = errorResponse;
error = exception.message;
}
else if (this.isErrorResponseDto(errorResponse)) {
message = errorResponse.message;
error = `API Error from ${errorResponse.provider}`;
provider = errorResponse.provider;
const { code } = errorResponse;
customCode = code;
const { message: _message, status: _status, provider: _provider, response: _response, code: _code } = errorResponse, extraFields = __rest(errorResponse, ["message", "status", "provider", "response", "code"]);
if (Object.keys(extraFields).length > 0) {
additionalFields = extraFields;
}
}
else {
const errorObj = errorResponse;
message = (_a = errorObj['message']) !== null && _a !== void 0 ? _a : exception.message;
error = (_b = errorObj['error']) !== null && _b !== void 0 ? _b : 'Http Exception';
}
}
else {
status = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
message = 'Internal server error';
error = 'Internal Server Error';
}
const errorDetails = Object.assign({ statusCode: status, timestamp: new Date().toISOString(), path: request.url, method: request.method }, (provider && { provider }));
this.logger.error(`${request.method} ${request.url}`, JSON.stringify(Object.assign(Object.assign({}, errorDetails), { message, stack: exception instanceof Error ? exception.stack : undefined })));
const errorResponse = {
data: null,
error: Object.assign(Object.assign(Object.assign({ status, message: Array.isArray(message)
? message
: [
typeof message === 'object'
? JSON.stringify(message)
: String(message),
], error }, errorDetails), (customCode && { code: customCode })), (additionalFields && { additionalFields })),
success: false,
timestamp: errorDetails.timestamp,
};
response.status(status).json(errorResponse);
}
isErrorResponseDto(obj) {
return (obj !== null &&
typeof obj === 'object' &&
'message' in obj &&
'status' in obj &&
'provider' in obj);
}
};
exports.HttpExceptionFilter = HttpExceptionFilter;
exports.HttpExceptionFilter = HttpExceptionFilter = HttpExceptionFilter_1 = __decorate([
(0, common_1.Catch)()
], HttpExceptionFilter);
//# sourceMappingURL=http-exception.filter.js.map
;