@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
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);
};
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