@dooor-ai/trust
Version:
TEE Attestation and Confidential Computing utilities for Dooor OS
89 lines • 4.22 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 __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