UNPKG

bb-inspired

Version:

Core library for BB-inspired NestJS backend

142 lines 5.67 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); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var AuthService_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.AuthService = void 0; const common_1 = require("@nestjs/common"); const jwt_service_1 = require("./jwt.service"); const logger_1 = require("../../utils/logger"); const database_service_1 = require("../database/database.service"); const event_bus_service_1 = require("../messaging/event-bus.service"); let AuthService = AuthService_1 = class AuthService { constructor(options, jwtService, databaseService, eventBusService) { this.options = options; this.jwtService = jwtService; this.databaseService = databaseService; this.eventBusService = eventBusService; this.logger = new logger_1.AppLogger(AuthService_1.name); this.userService = options.userService; } async validateUser(username, password) { if (!this.userService) { this.logger.warn('No user service provided for validation'); return null; } try { return this.userService.validateCredentials(username, password); } catch (error) { this.logger.error(`User validation failed: ${error.message}`, error.stack); return null; } } async login(user) { const payload = { sub: user.id, username: user.username, email: user.email, roles: user.roles || [], permissions: user.permissions || [], tenantId: user.tenantId, }; const tokenResponse = await this.jwtService.generateTokenResponse(payload); if (this.eventBusService) { this.eventBusService.publish({ name: 'auth.login', payload: { userId: user.id, timestamp: new Date(), sessionId: payload.sessionId, }, timestamp: new Date(), }); } return tokenResponse; } async refreshToken(refreshToken) { return this.jwtService.refreshAccessToken(refreshToken); } async validateUserByJwt(payload) { if (!this.userService) { return { id: payload.sub, username: payload.username, email: payload.email, roles: payload.roles || [], permissions: payload.permissions || [], tenantId: payload.tenantId, sessionId: payload.sessionId, }; } try { const user = await this.userService.findById(payload.sub); if (!user) { this.logger.warn(`User with ID ${payload.sub} not found during JWT validation`); return null; } return { id: user.id, username: user.username, email: user.email, roles: user.roles || [], permissions: user.permissions || [], tenantId: user.tenantId, sessionId: payload.sessionId, }; } catch (error) { this.logger.error(`JWT user validation failed: ${error.message}`, error.stack); return null; } } hasRoles(user, requiredRoles) { if (!user || !user.roles || !requiredRoles.length) { return false; } return requiredRoles.some(role => user.roles.includes(role)); } hasPermissions(user, requiredPermissions) { if (!user || !user.permissions || !requiredPermissions.length) { return false; } return requiredPermissions.some(permission => user.permissions.includes(permission)); } async logout(userId, sessionId) { if (this.eventBusService) { this.eventBusService.publish({ name: 'auth.logout', payload: { userId, timestamp: new Date(), sessionId, }, timestamp: new Date(), }); } if (this.userService && typeof this.userService.logout === 'function') { await this.userService.logout(userId, sessionId); } } }; exports.AuthService = AuthService; exports.AuthService = AuthService = AuthService_1 = __decorate([ (0, common_1.Injectable)(), __param(0, (0, common_1.Inject)('AUTH_OPTIONS')), __param(2, (0, common_1.Optional)()), __param(3, (0, common_1.Optional)()), __metadata("design:paramtypes", [Object, jwt_service_1.JwtService, database_service_1.DatabaseService, event_bus_service_1.EventBusService]) ], AuthService); //# sourceMappingURL=auth.service.js.map