UNPKG

@dooor-ai/trust

Version:

TEE Attestation and Confidential Computing utilities for Dooor OS

89 lines 4.22 kB
"use strict"; 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 __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TEEOperationInterceptor = void 0; const common_1 = require("@nestjs/common"); const operators_1 = require("rxjs/operators"); const tee_operation_logger_service_1 = require("../services/tee-operation-logger.service"); let TEEOperationInterceptor = class TEEOperationInterceptor { constructor(teeOperationLogger) { this.teeOperationLogger = teeOperationLogger; this.logger = new common_1.Logger('TEE-OPERATION-INTERCEPTOR'); } intercept(context, next) { if (context.getType() !== 'http') { return next.handle(); } const request = context.switchToHttp().getRequest(); const response = context.switchToHttp().getResponse(); const startTime = Date.now(); if (this.shouldSkipLogging(request.url)) { return next.handle(); } const method = request.method; const endpoint = request.route?.path || request.url; const userId = this.extractUserId(request); return next.handle().pipe((0, operators_1.tap)({ next: (responseData) => { const executionTime = Date.now() - startTime; const statusCode = response.statusCode || 200; const operationLog = this.teeOperationLogger.logOperation(method, endpoint, executionTime, statusCode, userId); }, error: (error) => { const executionTime = Date.now() - startTime; const statusCode = response.statusCode || error.status || 500; const operationLog = this.teeOperationLogger.logOperation(method, endpoint, executionTime, statusCode, userId); this.logger.debug(`[TEE] ${method} ${endpoint} - Failed (${executionTime}ms) - Status: ${statusCode} - Hash: ${operationLog.operation_hash}`); } })); } shouldSkipLogging(url) { const skipPatterns = [ '/v1/tee/', '/health', '/favicon.ico', '/metrics' ]; return skipPatterns.some(pattern => url.includes(pattern)); } extractUserId(request) { try { if (request.user?.id) { return request.user.id.toString(); } if (request.user?.sub) { return request.user.sub.toString(); } if (request.user?.userId) { return request.user.userId.toString(); } if (request.user && typeof request.user === 'object') { const keys = Object.keys(request.user); const idKey = keys.find(key => key.toLowerCase().includes('id') || key.toLowerCase().includes('user')); if (idKey && request.user[idKey]) { return request.user[idKey].toString(); } } return 'anonymous'; } catch (error) { this.logger.warn(`[extractUserId] Could not extract user ID: ${error.message}`); return 'anonymous'; } } }; exports.TEEOperationInterceptor = TEEOperationInterceptor; exports.TEEOperationInterceptor = TEEOperationInterceptor = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [tee_operation_logger_service_1.TEEOperationLoggerService]) ], TEEOperationInterceptor); //# sourceMappingURL=tee-operation.interceptor.js.map