UNPKG

@bitwild/rockets-auth

Version:

Rockets Auth - Complete authentication and authorization solution for NestJS with JWT, OAuth, OTP, role-based access control, and more

235 lines 11.7 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 __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var RocketsAuthAdminModule_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.RocketsAuthAdminModule = void 0; const nestjs_crud_1 = require("@concepta/nestjs-crud"); const common_1 = require("@nestjs/common"); const swagger_1 = require("@nestjs/swagger"); const rockets_auth_user_update_dto_1 = require("../dto/rockets-auth-user-update.dto"); const rockets_auth_user_dto_1 = require("../dto/rockets-auth-user.dto"); const admin_guard_1 = require("../../../guards/admin.guard"); const rockets_auth_constants_1 = require("../../../shared/constants/rockets-auth.constants"); const class_transformer_1 = require("class-transformer"); const rockets_auth_user_metadata_model_service_1 = require("../services/rockets-auth-user-metadata.model.service"); const rockets_auth_user_metadata_dto_1 = require("../dto/rockets-auth-user-metadata.dto"); const nestjs_common_1 = require("@concepta/nestjs-common"); const user_metadata_constants_1 = require("../constants/user-metadata.constants"); const crud_api_param_decorator_1 = require("@concepta/nestjs-crud/dist/crud/decorators/openapi/crud-api-param.decorator"); const crud_relations_decorator_1 = require("@concepta/nestjs-crud/dist/crud/decorators/routes/crud-relations.decorator"); const nestjs_typeorm_ext_1 = require("@concepta/nestjs-typeorm-ext"); let RocketsAuthAdminModule = RocketsAuthAdminModule_1 = class RocketsAuthAdminModule { static register(admin) { var _a; const ModelDto = admin.model || rockets_auth_user_dto_1.RocketsAuthUserDto; const UpdateDto = ((_a = admin.dto) === null || _a === void 0 ? void 0 : _a.updateOne) || rockets_auth_user_update_dto_1.RocketsAuthUserUpdateDto; let PaginatedDto = class PaginatedDto extends nestjs_crud_1.CrudResponsePaginatedDto { constructor() { super(...arguments); this.data = []; } }; __decorate([ (0, class_transformer_1.Expose)(), (0, swagger_1.ApiProperty)({ type: ModelDto, isArray: true, description: 'Array of Orgs', }), (0, class_transformer_1.Type)(() => ModelDto), __metadata("design:type", Array) ], PaginatedDto.prototype, "data", void 0); PaginatedDto = __decorate([ (0, class_transformer_1.Exclude)() ], PaginatedDto); let UserMetadataCrudService = class UserMetadataCrudService extends nestjs_crud_1.CrudService { constructor(metadataAdapter) { super(metadataAdapter); } }; UserMetadataCrudService = __decorate([ (0, common_1.Injectable)(), __param(0, (0, common_1.Inject)(rockets_auth_constants_1.ROCKETS_ADMIN_USER_METADATA_ADAPTER)), __metadata("design:paramtypes", [nestjs_crud_1.CrudAdapter]) ], UserMetadataCrudService); const builder = new nestjs_crud_1.ConfigurableCrudBuilder({ service: { adapter: admin.adapter, injectionToken: rockets_auth_constants_1.ADMIN_USER_CRUD_SERVICE_TOKEN, }, controller: { path: admin.path || 'admin/users', model: { type: ModelDto, paginatedType: PaginatedDto, }, extraDecorators: [ (0, swagger_1.ApiTags)('admin'), (0, common_1.UseGuards)(admin_guard_1.AdminGuard), (0, swagger_1.ApiBearerAuth)(), (0, crud_relations_decorator_1.CrudRelations)({ rootKey: 'id', relations: [ { join: 'LEFT', cardinality: 'one', service: UserMetadataCrudService, property: 'userMetadata', primaryKey: 'id', foreignKey: 'userId', }, ], }), ], }, getMany: {}, getOne: {}, updateOne: { dto: UpdateDto, extraDecorators: [ (0, common_1.applyDecorators)((0, crud_api_param_decorator_1.CrudApiParam)({ name: 'id', required: true, description: 'User id', })), ], }, }); const { ConfigurableControllerClass } = builder.build(); let AdminUserCrudService = class AdminUserCrudService extends nestjs_crud_1.CrudService { constructor(crudAdapter, relationRegistry, userMetadataService) { super(crudAdapter, relationRegistry); this.crudAdapter = crudAdapter; this.relationRegistry = relationRegistry; this.userMetadataService = userMetadataService; } async updateOne(req, dto) { const { userMetadata } = dto, userDto = __rest(dto, ["userMetadata"]); if (userMetadata && Object.keys(userMetadata).length > 0) { const MetadataDto = admin.userMetadataConfig.updateDto; const metadataInstance = (0, class_transformer_1.plainToInstance)(MetadataDto, userMetadata); const pipe = new common_1.ValidationPipe({ transform: true, whitelist: true, forbidNonWhitelisted: false, forbidUnknownValues: true, }); try { await pipe.transform(metadataInstance, { type: 'body', metatype: MetadataDto, }); } catch (error) { const message = error instanceof Error ? error.message : 'Invalid metadata'; throw new common_1.BadRequestException(message); } } const result = await super.updateOne(req, userDto); if (userMetadata) { try { await this.userMetadataService.createOrUpdate(result.id, userMetadata); } catch (metadataError) { } } const updatedUser = await super.getOne(req); return updatedUser; } }; AdminUserCrudService = __decorate([ __param(0, (0, common_1.Inject)(admin.adapter)), __param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => rockets_auth_constants_1.ROCKETS_ADMIN_USER_RELATION_REGISTRY))), __param(2, (0, common_1.Inject)(user_metadata_constants_1.AuthUserMetadataModelService)), __metadata("design:paramtypes", [nestjs_crud_1.CrudAdapter, nestjs_crud_1.CrudRelationRegistry, rockets_auth_user_metadata_model_service_1.GenericUserMetadataModelService]) ], AdminUserCrudService); class AdminUserCrudController extends ConfigurableControllerClass { } return { module: RocketsAuthAdminModule_1, imports: [ ...(admin.imports || []), ...(admin.userMetadataConfig.entity ? [ nestjs_typeorm_ext_1.TypeOrmExtModule.forFeature({ [user_metadata_constants_1.AUTH_USER_METADATA_MODULE_ENTITY_KEY]: { entity: admin.userMetadataConfig.entity, }, }), ] : []), ], controllers: [AdminUserCrudController], providers: [ admin.adapter, admin.userMetadataConfig.adapter, { provide: rockets_auth_constants_1.ROCKETS_ADMIN_USER_METADATA_ADAPTER, useExisting: admin.userMetadataConfig.adapter, }, { provide: user_metadata_constants_1.AuthUserMetadataModelService, useFactory: (repo) => { const { createDto, updateDto } = admin.userMetadataConfig || { createDto: rockets_auth_user_metadata_dto_1.RocketsAuthUserMetadataDto, updateDto: rockets_auth_user_metadata_dto_1.RocketsAuthUserMetadataDto, }; return new rockets_auth_user_metadata_model_service_1.GenericUserMetadataModelService(repo, createDto, updateDto); }, inject: [ (0, nestjs_common_1.getDynamicRepositoryToken)(user_metadata_constants_1.AUTH_USER_METADATA_MODULE_ENTITY_KEY), ], }, UserMetadataCrudService, { provide: rockets_auth_constants_1.ROCKETS_ADMIN_USER_RELATION_REGISTRY, inject: [UserMetadataCrudService], useFactory: (userMetadataCrudService) => { const registry = new nestjs_crud_1.CrudRelationRegistry(); registry.register(userMetadataCrudService); return registry; }, }, AdminUserCrudService, { provide: rockets_auth_constants_1.ADMIN_USER_CRUD_SERVICE_TOKEN, useClass: AdminUserCrudService, }, ], exports: [ AdminUserCrudService, admin.adapter, admin.userMetadataConfig.adapter, ], }; } }; exports.RocketsAuthAdminModule = RocketsAuthAdminModule; exports.RocketsAuthAdminModule = RocketsAuthAdminModule = RocketsAuthAdminModule_1 = __decorate([ (0, common_1.Module)({}) ], RocketsAuthAdminModule); //# sourceMappingURL=rockets-auth-admin.module.js.map