@multiversx/sdk-nestjs-http
Version:
Multiversx SDK Nestjs http package
45 lines • 2.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ComplexityInterceptor = void 0;
const tslib_1 = require("tslib");
const common_1 = require("@nestjs/common");
const sdk_nestjs_common_1 = require("@multiversx/sdk-nestjs-common");
let ComplexityInterceptor = class ComplexityInterceptor {
complexityThreshold;
constructor(complexityThreshold = 10000) {
this.complexityThreshold = complexityThreshold;
}
intercept(context, next) {
const contextType = context.getType();
if (!["http", "https"].includes(contextType)) {
return next.handle();
}
const complexityMetadata = sdk_nestjs_common_1.DecoratorUtils.getMethodDecorator(sdk_nestjs_common_1.ApplyComplexityOptions, context.getHandler());
if (!complexityMetadata) {
return next.handle();
}
this.handleHttpRequest(complexityMetadata.target, context);
return next.handle();
}
handleHttpRequest(target, context) {
const query = context.switchToHttp().getRequest().query;
const fields = query.fields?.split(",") ?? [];
for (const [field, value] of Object.entries(query)) {
if (value === "true") {
fields.push(field);
}
}
const complexityTree = sdk_nestjs_common_1.ComplexityUtils.updateComplexityTree(undefined, target, fields, query.size ?? 25);
const complexity = complexityTree.getComplexity();
if (complexity > this.complexityThreshold) {
throw new sdk_nestjs_common_1.ComplexityExceededException(complexity, this.complexityThreshold);
}
context.switchToHttp().getRequest().res.set('X-Request-Complexity', complexity);
}
};
exports.ComplexityInterceptor = ComplexityInterceptor;
exports.ComplexityInterceptor = ComplexityInterceptor = tslib_1.__decorate([
(0, common_1.Injectable)(),
tslib_1.__metadata("design:paramtypes", [Number])
], ComplexityInterceptor);
//# sourceMappingURL=complexity.interceptor.js.map