@multiversx/sdk-nestjs-http
Version:
Multiversx SDK Nestjs http package
45 lines • 2.14 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 {
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) {
var _a, _b, _c;
const query = context.switchToHttp().getRequest().query;
const fields = (_b = (_a = query.fields) === null || _a === void 0 ? void 0 : _a.split(",")) !== null && _b !== void 0 ? _b : [];
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, (_c = query.size) !== null && _c !== void 0 ? _c : 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);
}
};
ComplexityInterceptor = tslib_1.__decorate([
(0, common_1.Injectable)(),
tslib_1.__metadata("design:paramtypes", [Number])
], ComplexityInterceptor);
exports.ComplexityInterceptor = ComplexityInterceptor;
//# sourceMappingURL=complexity.interceptor.js.map