UNPKG

@multiversx/sdk-nestjs-http

Version:
45 lines 2.14 kB
"use strict"; 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