rl-core-api 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +54 -0
  2. package/dist/core/auth/ownershipScope.util.d.ts +10 -0
  3. package/dist/core/auth/ownershipScope.util.js +14 -0
  4. package/dist/core/auth/permissionScope.util.d.ts +2 -0
  5. package/dist/core/auth/permissionScope.util.js +7 -1
  6. package/dist/core/config/env.schema.d.ts +3 -0
  7. package/dist/core/config/env.schema.js +3 -0
  8. package/dist/core/core.module.js +3 -1
  9. package/dist/core/database/migrations/1710000000000-InitialSchema.js +8 -1
  10. package/dist/core/database/migrations/index.js +0 -2
  11. package/dist/core/database/seeds/seedPermissions.d.ts +20 -1
  12. package/dist/core/database/seeds/seedPermissions.js +31 -38
  13. package/dist/core/events/appEvent.enum.d.ts +6 -0
  14. package/dist/core/events/appEvent.enum.js +1 -0
  15. package/dist/core/health/health.controller.d.ts +4 -1
  16. package/dist/core/health/health.controller.js +9 -3
  17. package/dist/core/query/applyOwnershipScope.util.d.ts +7 -0
  18. package/dist/core/query/applyOwnershipScope.util.js +16 -0
  19. package/dist/core/queue/bullConnection.module.d.ts +2 -0
  20. package/dist/core/queue/bullConnection.module.js +27 -0
  21. package/dist/core/queue/job.interface.d.ts +70 -0
  22. package/dist/core/queue/job.interface.js +2 -0
  23. package/dist/core/queue/job.producer.d.ts +15 -0
  24. package/dist/core/queue/job.producer.js +124 -0
  25. package/dist/core/queue/jobEvents.interface.d.ts +4 -0
  26. package/dist/core/queue/jobEvents.interface.js +4 -0
  27. package/dist/core/queue/jobEvents.service.d.ts +12 -0
  28. package/dist/core/queue/jobEvents.service.js +53 -0
  29. package/dist/core/queue/jobStatus.controller.d.ts +8 -0
  30. package/dist/core/queue/jobStatus.controller.js +44 -0
  31. package/dist/core/queue/jobStatus.response.d.ts +20 -0
  32. package/dist/core/queue/jobStatus.response.js +84 -0
  33. package/dist/core/queue/jobWorkerHost.d.ts +17 -0
  34. package/dist/core/queue/jobWorkerHost.js +72 -0
  35. package/dist/core/queue/queue.constants.d.ts +11 -0
  36. package/dist/core/queue/queue.constants.js +18 -0
  37. package/dist/core/queue/queue.module.d.ts +2 -0
  38. package/dist/core/queue/queue.module.js +38 -0
  39. package/dist/core/queue/queueAdmin.controller.d.ts +11 -0
  40. package/dist/core/queue/queueAdmin.controller.js +93 -0
  41. package/dist/core/queue/queueAdmin.response.d.ts +23 -0
  42. package/dist/core/queue/queueAdmin.response.js +87 -0
  43. package/dist/core/queue/queueAdmin.service.d.ts +15 -0
  44. package/dist/core/queue/queueAdmin.service.js +85 -0
  45. package/dist/core/queue/redisConnection.d.ts +2 -0
  46. package/dist/core/queue/redisConnection.js +11 -0
  47. package/dist/core/websocket/baseGateway.d.ts +1 -0
  48. package/dist/core/websocket/baseGateway.js +3 -0
  49. package/dist/features/audit/audit.module.js +1 -0
  50. package/dist/features/audit/presentation/index.d.ts +1 -0
  51. package/dist/features/audit/presentation/index.js +1 -0
  52. package/dist/features/audit/presentation/userPermissionsChanged.listener.d.ts +7 -0
  53. package/dist/features/audit/presentation/userPermissionsChanged.listener.js +43 -0
  54. package/dist/features/notifications/notifications.module.js +1 -1
  55. package/dist/features/notifications/presentation/domainEvents.listener.d.ts +2 -1
  56. package/dist/features/notifications/presentation/domainEvents.listener.js +19 -0
  57. package/dist/features/rbac/domain/rbac.catalog.js +19 -16
  58. package/dist/features/rbac/domain/rbac.service.d.ts +11 -1
  59. package/dist/features/rbac/domain/rbac.service.js +76 -3
  60. package/dist/features/rbac/domain/teamScope.service.d.ts +1 -0
  61. package/dist/features/rbac/domain/teamScope.service.js +10 -4
  62. package/dist/features/rbac/infra/schema/scope.schema.js +1 -1
  63. package/dist/features/rbac/presentation/commands/createScope.command.js +1 -1
  64. package/dist/features/rbac/presentation/commands/setUserPermissions.command.d.ts +3 -0
  65. package/dist/features/rbac/presentation/commands/setUserPermissions.command.js +24 -0
  66. package/dist/features/rbac/presentation/index.d.ts +1 -0
  67. package/dist/features/rbac/presentation/index.js +1 -0
  68. package/dist/features/rbac/presentation/rbac.controller.d.ts +5 -0
  69. package/dist/features/rbac/presentation/rbac.controller.js +57 -0
  70. package/dist/index.d.ts +17 -3
  71. package/dist/index.js +48 -2
  72. package/dist/rlCore.module.js +8 -0
  73. package/package.json +4 -1
  74. package/dist/core/database/migrations/1787270400000-GroupManager.d.ts +0 -6
  75. package/dist/core/database/migrations/1787270400000-GroupManager.js +0 -26
@@ -16,7 +16,7 @@ class CreateScopeCommand {
16
16
  }
17
17
  exports.CreateScopeCommand = CreateScopeCommand;
18
18
  __decorate([
19
- (0, swagger_1.ApiProperty)({ example: "own", description: "own | team | department | any" }),
19
+ (0, swagger_1.ApiProperty)({ example: "own", description: "own | team | any" }),
20
20
  (0, class_validator_1.IsString)(),
21
21
  (0, class_validator_1.Matches)(/^[a-z-]+$/, {
22
22
  message: "name deve conter só letras minúsculas e hífen",
@@ -0,0 +1,3 @@
1
+ export declare class SetUserPermissionsCommand {
2
+ permissionIds: string[];
3
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SetUserPermissionsCommand = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ class SetUserPermissionsCommand {
16
+ }
17
+ exports.SetUserPermissionsCommand = SetUserPermissionsCommand;
18
+ __decorate([
19
+ (0, swagger_1.ApiProperty)({ type: [String], format: "uuid" }),
20
+ (0, class_validator_1.IsArray)(),
21
+ (0, class_validator_1.ArrayUnique)(),
22
+ (0, class_validator_1.IsUUID)("all", { each: true }),
23
+ __metadata("design:type", Array)
24
+ ], SetUserPermissionsCommand.prototype, "permissionIds", void 0);
@@ -4,6 +4,7 @@ export * from "./commands/createPermission.command";
4
4
  export * from "./commands/createResource.command";
5
5
  export * from "./commands/createRole.command";
6
6
  export * from "./commands/createScope.command";
7
+ export * from "./commands/setUserPermissions.command";
7
8
  export * from "./commands/updateAction.command";
8
9
  export * from "./commands/updateGroup.command";
9
10
  export * from "./commands/updatePermission.command";
@@ -20,6 +20,7 @@ __exportStar(require("./commands/createPermission.command"), exports);
20
20
  __exportStar(require("./commands/createResource.command"), exports);
21
21
  __exportStar(require("./commands/createRole.command"), exports);
22
22
  __exportStar(require("./commands/createScope.command"), exports);
23
+ __exportStar(require("./commands/setUserPermissions.command"), exports);
23
24
  __exportStar(require("./commands/updateAction.command"), exports);
24
25
  __exportStar(require("./commands/updateGroup.command"), exports);
25
26
  __exportStar(require("./commands/updatePermission.command"), exports);
@@ -12,6 +12,7 @@ import { CreatePermissionCommand } from "./commands/createPermission.command";
12
12
  import { CreateResourceCommand } from "./commands/createResource.command";
13
13
  import { CreateRoleCommand } from "./commands/createRole.command";
14
14
  import { CreateScopeCommand } from "./commands/createScope.command";
15
+ import { SetUserPermissionsCommand } from "./commands/setUserPermissions.command";
15
16
  import { UpdateActionCommand } from "./commands/updateAction.command";
16
17
  import { UpdateGroupCommand } from "./commands/updateGroup.command";
17
18
  import { UpdatePermissionCommand } from "./commands/updatePermission.command";
@@ -52,4 +53,8 @@ export declare class RbacController {
52
53
  deleteRole(id: string): Promise<void>;
53
54
  addPermissionToRole(id: string, permissionId: string, actor: AuthenticatedUser): Promise<Role>;
54
55
  removePermissionFromRole(id: string, permissionId: string): Promise<Role>;
56
+ userPermissions(userId: string): Promise<Permission[]>;
57
+ setUserPermissions(userId: string, dto: SetUserPermissionsCommand, actor: AuthenticatedUser): Promise<Permission[]>;
58
+ grantUserPermission(userId: string, permissionId: string, actor: AuthenticatedUser): Promise<Permission[]>;
59
+ revokeUserPermission(userId: string, permissionId: string): Promise<Permission[]>;
55
60
  }
@@ -26,6 +26,7 @@ const createPermission_command_1 = require("./commands/createPermission.command"
26
26
  const createResource_command_1 = require("./commands/createResource.command");
27
27
  const createRole_command_1 = require("./commands/createRole.command");
28
28
  const createScope_command_1 = require("./commands/createScope.command");
29
+ const setUserPermissions_command_1 = require("./commands/setUserPermissions.command");
29
30
  const updateAction_command_1 = require("./commands/updateAction.command");
30
31
  const updateGroup_command_1 = require("./commands/updateGroup.command");
31
32
  const updatePermission_command_1 = require("./commands/updatePermission.command");
@@ -130,6 +131,18 @@ let RbacController = class RbacController {
130
131
  removePermissionFromRole(id, permissionId) {
131
132
  return this.rbac.removePermissionFromRole(id, permissionId);
132
133
  }
134
+ userPermissions(userId) {
135
+ return this.rbac.listUserDirectPermissions(userId);
136
+ }
137
+ setUserPermissions(userId, dto, actor) {
138
+ return this.rbac.setUserDirectPermissions(userId, dto.permissionIds, actor.permissions);
139
+ }
140
+ grantUserPermission(userId, permissionId, actor) {
141
+ return this.rbac.grantDirectPermission(userId, permissionId, actor.permissions);
142
+ }
143
+ revokeUserPermission(userId, permissionId) {
144
+ return this.rbac.revokeDirectPermission(userId, permissionId);
145
+ }
133
146
  };
134
147
  exports.RbacController = RbacController;
135
148
  __decorate([
@@ -420,6 +433,50 @@ __decorate([
420
433
  __metadata("design:paramtypes", [String, String]),
421
434
  __metadata("design:returntype", Promise)
422
435
  ], RbacController.prototype, "removePermissionFromRole", null);
436
+ __decorate([
437
+ (0, common_1.Get)("users/:userId/permissions"),
438
+ (0, requirePermission_decorator_1.RequirePermission)("users:read:any"),
439
+ (0, swagger_1.ApiOkResponse)({ type: rbac_response_1.PermissionResponse, isArray: true }),
440
+ __param(0, (0, common_1.Param)("userId", common_1.ParseUUIDPipe)),
441
+ __metadata("design:type", Function),
442
+ __metadata("design:paramtypes", [String]),
443
+ __metadata("design:returntype", Promise)
444
+ ], RbacController.prototype, "userPermissions", null);
445
+ __decorate([
446
+ (0, auditable_decorator_1.Auditable)("Permissões avulsas do usuário redefinidas"),
447
+ (0, common_1.Put)("users/:userId/permissions"),
448
+ (0, requirePermission_decorator_1.RequirePermission)("users:grant:any"),
449
+ (0, swagger_1.ApiOkResponse)({ type: rbac_response_1.PermissionResponse, isArray: true }),
450
+ __param(0, (0, common_1.Param)("userId", common_1.ParseUUIDPipe)),
451
+ __param(1, (0, common_1.Body)()),
452
+ __param(2, (0, currentUser_decorator_1.CurrentUser)()),
453
+ __metadata("design:type", Function),
454
+ __metadata("design:paramtypes", [String, setUserPermissions_command_1.SetUserPermissionsCommand, Object]),
455
+ __metadata("design:returntype", Promise)
456
+ ], RbacController.prototype, "setUserPermissions", null);
457
+ __decorate([
458
+ (0, auditable_decorator_1.Auditable)("Permissão avulsa concedida ao usuário"),
459
+ (0, common_1.Post)("users/:userId/permissions/:permissionId"),
460
+ (0, requirePermission_decorator_1.RequirePermission)("users:grant:any"),
461
+ (0, swagger_1.ApiOkResponse)({ type: rbac_response_1.PermissionResponse, isArray: true }),
462
+ __param(0, (0, common_1.Param)("userId", common_1.ParseUUIDPipe)),
463
+ __param(1, (0, common_1.Param)("permissionId", common_1.ParseUUIDPipe)),
464
+ __param(2, (0, currentUser_decorator_1.CurrentUser)()),
465
+ __metadata("design:type", Function),
466
+ __metadata("design:paramtypes", [String, String, Object]),
467
+ __metadata("design:returntype", Promise)
468
+ ], RbacController.prototype, "grantUserPermission", null);
469
+ __decorate([
470
+ (0, auditable_decorator_1.Auditable)("Permissão avulsa revogada do usuário"),
471
+ (0, common_1.Delete)("users/:userId/permissions/:permissionId"),
472
+ (0, requirePermission_decorator_1.RequirePermission)("users:grant:any"),
473
+ (0, swagger_1.ApiOkResponse)({ type: rbac_response_1.PermissionResponse, isArray: true }),
474
+ __param(0, (0, common_1.Param)("userId", common_1.ParseUUIDPipe)),
475
+ __param(1, (0, common_1.Param)("permissionId", common_1.ParseUUIDPipe)),
476
+ __metadata("design:type", Function),
477
+ __metadata("design:paramtypes", [String, String]),
478
+ __metadata("design:returntype", Promise)
479
+ ], RbacController.prototype, "revokeUserPermission", null);
423
480
  exports.RbacController = RbacController = __decorate([
424
481
  (0, swagger_1.ApiTags)("RBAC"),
425
482
  (0, swagger_1.ApiBearerAuth)(),
package/dist/index.d.ts CHANGED
@@ -18,8 +18,10 @@ export { AppThrottlerGuard } from "./core/auth/guards/appThrottler.guard";
18
18
  export { CsrfGuard } from "./core/auth/guards/csrf.guard";
19
19
  export { JwtAuthGuard } from "./core/auth/guards/jwtAuth.guard";
20
20
  export { PermissionsGuard } from "./core/auth/guards/permissions.guard";
21
- export { anyOrTeam, SCOPE_ANY, SCOPE_TEAM, } from "./core/auth/permissionScope.util";
21
+ export { OwnershipScope, resolveOwnershipScope, } from "./core/auth/ownershipScope.util";
22
+ export { anyOrOwn, anyOrTeam, SCOPE_ANY, SCOPE_OWN, SCOPE_TEAM, } from "./core/auth/permissionScope.util";
22
23
  export { applyFilter, FilterSql } from "./core/query/applyFilter.util";
24
+ export { applyOwnershipScope, OwnershipScopeOptions, } from "./core/query/applyOwnershipScope.util";
23
25
  export { DEFAULT_OPERATORS, FILTER_MAX_DEPTH, FILTER_MAX_IN_ITEMS, FILTER_MAX_LENGTH, FILTER_MAX_NODES, } from "./core/query/filter.constants";
24
26
  export { FilterCatalog, FilterCondition, FilterFieldDefinition, FilterGroup, FilterNode, FilterOption, FilterRelation, } from "./core/query/filterField.interface";
25
27
  export { FilterFieldType } from "./core/query/filterFieldType.enum";
@@ -32,16 +34,18 @@ export { Paginated, PaginationMeta, PaginationQuery, resolveOrder, SortDir, } fr
32
34
  export { PaginationMetaResponse } from "./core/utils/paginationMeta.response";
33
35
  export { BaseEntity } from "./core/database/base.schema";
34
36
  export { seedAdmin } from "./core/database/seeds/seedAdmin";
35
- export { seedPermissions } from "./core/database/seeds/seedPermissions";
37
+ export { RbacCatalogExtension, seedPermissions, } from "./core/database/seeds/seedPermissions";
36
38
  export { AuditDataChange } from "./features/audit/infra/schema/auditDataChange.schema";
37
39
  export { RequestLog } from "./features/audit/infra/schema/requestLog.schema";
38
40
  export { AuthToken } from "./features/auth/infra/schema/authToken.schema";
41
+ export { ACTIONS, PERMISSIONS, RESOURCES, ROLES, SCOPES, } from "./features/rbac/domain/rbac.catalog";
39
42
  export { NotificationType } from "./features/notifications/domain/enums/notificationType.enum";
40
43
  export { ScopeType } from "./features/notifications/domain/enums/scopeType.enum";
41
44
  export { NotificationsService, NotificationTarget, PublishNotificationParams, UserNotification, } from "./features/notifications/domain/notifications.service";
42
45
  export { Notification } from "./features/notifications/infra/schema/notification.schema";
43
46
  export { NotificationRead } from "./features/notifications/infra/schema/notificationRead.schema";
44
47
  export { NotificationScope } from "./features/notifications/infra/schema/notificationScope.schema";
48
+ export { NotificationsModule } from "./features/notifications/notifications.module";
45
49
  export { NotificationsPublisher } from "./features/notifications/presentation/notifications.publisher";
46
50
  export { Action } from "./features/rbac/infra/schema/action.schema";
47
51
  export { Group } from "./features/rbac/infra/schema/group.schema";
@@ -52,12 +56,22 @@ export { Scope } from "./features/rbac/infra/schema/scope.schema";
52
56
  export { PasswordHistory } from "./features/users/infra/schema/passwordHistory.schema";
53
57
  export { User } from "./features/users/infra/schema/user.schema";
54
58
  export { auditContext, AuditContextStore } from "./core/context/auditContext";
55
- export { AppEvent, HttpErrorEvent, SystemCleanupFailedEvent, UserLockedEvent, UserPasswordExpiringEvent, UserPasswordResetRequestedEvent, UserRolesChangedEvent, UserTwoFactorResetEvent, } from "./core/events/appEvent.enum";
59
+ export { AppEvent, HttpErrorEvent, SystemCleanupFailedEvent, UserLockedEvent, UserPasswordExpiringEvent, UserPasswordResetRequestedEvent, UserPermissionsChangedEvent, UserRolesChangedEvent, UserTwoFactorResetEvent, } from "./core/events/appEvent.enum";
56
60
  export { AppErrorCode } from "./core/filters/appErrorCode.enum";
57
61
  export { codedBadRequest, codedTooManyRequests, codedUnauthorized, } from "./core/utils/codedError.util";
58
62
  export { ErrorType } from "./features/audit/domain/enums/errorType.enum";
59
63
  export { RequestOutcome } from "./features/audit/domain/enums/requestOutcome.enum";
60
64
  export { Auditable } from "./features/audit/presentation/decorators/auditable.decorator";
65
+ export { BullConnectionModule } from "./core/queue/bullConnection.module";
66
+ export { EnqueueOptions, JobCompleted, JobContext, JobEnvelope, JobFailed, JobProgress, JobRef, JobState, JobStatus, QueueCounts, QueueJobSummary, } from "./core/queue/job.interface";
67
+ export { JobProducer } from "./core/queue/job.producer";
68
+ export { JOB_EVENTS_PUBLISHER, JobEventsPublisher, } from "./core/queue/jobEvents.interface";
69
+ export { JobEventsService } from "./core/queue/jobEvents.service";
70
+ export { JobErrorResponse, JobProgressResponse, JobStatusResponse, } from "./core/queue/jobStatus.response";
71
+ export { JobWorkerHost, toSafeError } from "./core/queue/jobWorkerHost";
72
+ export { COMPLETED_RETENTION_SECONDS, FAILED_RETENTION_SECONDS, isRedisConfigured, JOB_ATTEMPTS, JOB_BACKOFF_DELAY_MS, JOB_COMPLETED_EVENT, JOB_CONCURRENCY, JOB_FAILED_EVENT, JOB_PROGRESS_EVENT, JOBS_QUEUE, queuePrefix, } from "./core/queue/queue.constants";
73
+ export { QueueModule } from "./core/queue/queue.module";
74
+ export { buildRedisOptions } from "./core/queue/redisConnection";
61
75
  export { BaseGateway, SocketData } from "./core/websocket/baseGateway";
62
76
  export { NOTIFICATIONS_NAMESPACE, roleRoom, SESSION_REFRESH_EVENT, userRoom, } from "./core/websocket/socket.constants";
63
77
  export { SOCKET_EVENT_VERSION, SocketEvent, wrapSocketEvent, } from "./core/websocket/socketEvent.envelope";
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.seedPermissions = exports.seedAdmin = exports.BaseEntity = exports.PaginationMetaResponse = exports.resolveOrder = exports.PaginationQuery = exports.Paginated = exports.parseFilter = exports.paginateWithFilter = exports.resolveCatalogOrder = exports.toFilterSchema = exports.FilterOptionResponse = exports.FilterFieldResponse = exports.FilterOperator = exports.FilterCombinator = exports.FilterFieldType = exports.FILTER_MAX_NODES = exports.FILTER_MAX_LENGTH = exports.FILTER_MAX_IN_ITEMS = exports.FILTER_MAX_DEPTH = exports.DEFAULT_OPERATORS = exports.applyFilter = exports.SCOPE_TEAM = exports.SCOPE_ANY = exports.anyOrTeam = exports.PermissionsGuard = exports.JwtAuthGuard = exports.CsrfGuard = exports.AppThrottlerGuard = exports.RequirePermission = exports.RequireAnyPermission = exports.PERMISSIONS_KEY = exports.ANY_PERMISSIONS_KEY = exports.Public = exports.IS_PUBLIC_KEY = exports.CurrentUser = exports.setAuthCookies = exports.REFRESH_COOKIE = exports.clearAuthCookies = exports.ACCESS_COOKIE = exports.EnvService = exports.validateEnv = exports.envSchema = exports.ConfigModule = exports.RlCoreModule = exports.coreEntities = exports.coreMigrations = exports.createCoreDataSource = exports.CoreModule = exports.bootstrapCore = void 0;
4
- exports.normalizeIp = exports.sha256 = exports.randomToken = exports.numericCode = exports.backupCode = exports.encryptSecret = exports.decryptSecret = exports.MailerService = exports.createAppLogger = exports.WS_USER_RESOLVER = exports.WsAuthService = exports.wrapSocketEvent = exports.SOCKET_EVENT_VERSION = exports.userRoom = exports.SESSION_REFRESH_EVENT = exports.roleRoom = exports.NOTIFICATIONS_NAMESPACE = exports.BaseGateway = exports.Auditable = exports.RequestOutcome = exports.ErrorType = exports.codedUnauthorized = exports.codedTooManyRequests = exports.codedBadRequest = exports.AppErrorCode = exports.AppEvent = exports.auditContext = exports.User = exports.PasswordHistory = exports.Scope = exports.Role = exports.Resource = exports.Permission = exports.Group = exports.Action = exports.NotificationsPublisher = exports.NotificationScope = exports.NotificationRead = exports.Notification = exports.NotificationsService = exports.ScopeType = exports.NotificationType = exports.AuthToken = exports.RequestLog = exports.AuditDataChange = void 0;
3
+ exports.resolveOrder = exports.PaginationQuery = exports.Paginated = exports.parseFilter = exports.paginateWithFilter = exports.resolveCatalogOrder = exports.toFilterSchema = exports.FilterOptionResponse = exports.FilterFieldResponse = exports.FilterOperator = exports.FilterCombinator = exports.FilterFieldType = exports.FILTER_MAX_NODES = exports.FILTER_MAX_LENGTH = exports.FILTER_MAX_IN_ITEMS = exports.FILTER_MAX_DEPTH = exports.DEFAULT_OPERATORS = exports.applyOwnershipScope = exports.applyFilter = exports.SCOPE_TEAM = exports.SCOPE_OWN = exports.SCOPE_ANY = exports.anyOrTeam = exports.anyOrOwn = exports.resolveOwnershipScope = exports.PermissionsGuard = exports.JwtAuthGuard = exports.CsrfGuard = exports.AppThrottlerGuard = exports.RequirePermission = exports.RequireAnyPermission = exports.PERMISSIONS_KEY = exports.ANY_PERMISSIONS_KEY = exports.Public = exports.IS_PUBLIC_KEY = exports.CurrentUser = exports.setAuthCookies = exports.REFRESH_COOKIE = exports.clearAuthCookies = exports.ACCESS_COOKIE = exports.EnvService = exports.validateEnv = exports.envSchema = exports.ConfigModule = exports.RlCoreModule = exports.coreEntities = exports.coreMigrations = exports.createCoreDataSource = exports.CoreModule = exports.bootstrapCore = void 0;
4
+ exports.JOB_ATTEMPTS = exports.isRedisConfigured = exports.FAILED_RETENTION_SECONDS = exports.COMPLETED_RETENTION_SECONDS = exports.toSafeError = exports.JobWorkerHost = exports.JobStatusResponse = exports.JobProgressResponse = exports.JobErrorResponse = exports.JobEventsService = exports.JOB_EVENTS_PUBLISHER = exports.JobProducer = exports.BullConnectionModule = exports.Auditable = exports.RequestOutcome = exports.ErrorType = exports.codedUnauthorized = exports.codedTooManyRequests = exports.codedBadRequest = exports.AppErrorCode = exports.AppEvent = exports.auditContext = exports.User = exports.PasswordHistory = exports.Scope = exports.Role = exports.Resource = exports.Permission = exports.Group = exports.Action = exports.NotificationsPublisher = exports.NotificationsModule = exports.NotificationScope = exports.NotificationRead = exports.Notification = exports.NotificationsService = exports.ScopeType = exports.NotificationType = exports.SCOPES = exports.ROLES = exports.RESOURCES = exports.PERMISSIONS = exports.ACTIONS = exports.AuthToken = exports.RequestLog = exports.AuditDataChange = exports.seedPermissions = exports.seedAdmin = exports.BaseEntity = exports.PaginationMetaResponse = void 0;
5
+ exports.normalizeIp = exports.sha256 = exports.randomToken = exports.numericCode = exports.backupCode = exports.encryptSecret = exports.decryptSecret = exports.MailerService = exports.createAppLogger = exports.WS_USER_RESOLVER = exports.WsAuthService = exports.wrapSocketEvent = exports.SOCKET_EVENT_VERSION = exports.userRoom = exports.SESSION_REFRESH_EVENT = exports.roleRoom = exports.NOTIFICATIONS_NAMESPACE = exports.BaseGateway = exports.buildRedisOptions = exports.QueueModule = exports.queuePrefix = exports.JOBS_QUEUE = exports.JOB_PROGRESS_EVENT = exports.JOB_FAILED_EVENT = exports.JOB_CONCURRENCY = exports.JOB_COMPLETED_EVENT = exports.JOB_BACKOFF_DELAY_MS = void 0;
5
6
  var bootstrapCore_util_1 = require("./core/bootstrap/bootstrapCore.util");
6
7
  Object.defineProperty(exports, "bootstrapCore", { enumerable: true, get: function () { return bootstrapCore_util_1.bootstrapCore; } });
7
8
  var core_module_1 = require("./core/core.module");
@@ -44,12 +45,18 @@ var jwtAuth_guard_1 = require("./core/auth/guards/jwtAuth.guard");
44
45
  Object.defineProperty(exports, "JwtAuthGuard", { enumerable: true, get: function () { return jwtAuth_guard_1.JwtAuthGuard; } });
45
46
  var permissions_guard_1 = require("./core/auth/guards/permissions.guard");
46
47
  Object.defineProperty(exports, "PermissionsGuard", { enumerable: true, get: function () { return permissions_guard_1.PermissionsGuard; } });
48
+ var ownershipScope_util_1 = require("./core/auth/ownershipScope.util");
49
+ Object.defineProperty(exports, "resolveOwnershipScope", { enumerable: true, get: function () { return ownershipScope_util_1.resolveOwnershipScope; } });
47
50
  var permissionScope_util_1 = require("./core/auth/permissionScope.util");
51
+ Object.defineProperty(exports, "anyOrOwn", { enumerable: true, get: function () { return permissionScope_util_1.anyOrOwn; } });
48
52
  Object.defineProperty(exports, "anyOrTeam", { enumerable: true, get: function () { return permissionScope_util_1.anyOrTeam; } });
49
53
  Object.defineProperty(exports, "SCOPE_ANY", { enumerable: true, get: function () { return permissionScope_util_1.SCOPE_ANY; } });
54
+ Object.defineProperty(exports, "SCOPE_OWN", { enumerable: true, get: function () { return permissionScope_util_1.SCOPE_OWN; } });
50
55
  Object.defineProperty(exports, "SCOPE_TEAM", { enumerable: true, get: function () { return permissionScope_util_1.SCOPE_TEAM; } });
51
56
  var applyFilter_util_1 = require("./core/query/applyFilter.util");
52
57
  Object.defineProperty(exports, "applyFilter", { enumerable: true, get: function () { return applyFilter_util_1.applyFilter; } });
58
+ var applyOwnershipScope_util_1 = require("./core/query/applyOwnershipScope.util");
59
+ Object.defineProperty(exports, "applyOwnershipScope", { enumerable: true, get: function () { return applyOwnershipScope_util_1.applyOwnershipScope; } });
53
60
  var filter_constants_1 = require("./core/query/filter.constants");
54
61
  Object.defineProperty(exports, "DEFAULT_OPERATORS", { enumerable: true, get: function () { return filter_constants_1.DEFAULT_OPERATORS; } });
55
62
  Object.defineProperty(exports, "FILTER_MAX_DEPTH", { enumerable: true, get: function () { return filter_constants_1.FILTER_MAX_DEPTH; } });
@@ -89,6 +96,12 @@ var requestLog_schema_1 = require("./features/audit/infra/schema/requestLog.sche
89
96
  Object.defineProperty(exports, "RequestLog", { enumerable: true, get: function () { return requestLog_schema_1.RequestLog; } });
90
97
  var authToken_schema_1 = require("./features/auth/infra/schema/authToken.schema");
91
98
  Object.defineProperty(exports, "AuthToken", { enumerable: true, get: function () { return authToken_schema_1.AuthToken; } });
99
+ var rbac_catalog_1 = require("./features/rbac/domain/rbac.catalog");
100
+ Object.defineProperty(exports, "ACTIONS", { enumerable: true, get: function () { return rbac_catalog_1.ACTIONS; } });
101
+ Object.defineProperty(exports, "PERMISSIONS", { enumerable: true, get: function () { return rbac_catalog_1.PERMISSIONS; } });
102
+ Object.defineProperty(exports, "RESOURCES", { enumerable: true, get: function () { return rbac_catalog_1.RESOURCES; } });
103
+ Object.defineProperty(exports, "ROLES", { enumerable: true, get: function () { return rbac_catalog_1.ROLES; } });
104
+ Object.defineProperty(exports, "SCOPES", { enumerable: true, get: function () { return rbac_catalog_1.SCOPES; } });
92
105
  var notificationType_enum_1 = require("./features/notifications/domain/enums/notificationType.enum");
93
106
  Object.defineProperty(exports, "NotificationType", { enumerable: true, get: function () { return notificationType_enum_1.NotificationType; } });
94
107
  var scopeType_enum_1 = require("./features/notifications/domain/enums/scopeType.enum");
@@ -101,6 +114,8 @@ var notificationRead_schema_1 = require("./features/notifications/infra/schema/n
101
114
  Object.defineProperty(exports, "NotificationRead", { enumerable: true, get: function () { return notificationRead_schema_1.NotificationRead; } });
102
115
  var notificationScope_schema_1 = require("./features/notifications/infra/schema/notificationScope.schema");
103
116
  Object.defineProperty(exports, "NotificationScope", { enumerable: true, get: function () { return notificationScope_schema_1.NotificationScope; } });
117
+ var notifications_module_1 = require("./features/notifications/notifications.module");
118
+ Object.defineProperty(exports, "NotificationsModule", { enumerable: true, get: function () { return notifications_module_1.NotificationsModule; } });
104
119
  var notifications_publisher_1 = require("./features/notifications/presentation/notifications.publisher");
105
120
  Object.defineProperty(exports, "NotificationsPublisher", { enumerable: true, get: function () { return notifications_publisher_1.NotificationsPublisher; } });
106
121
  var action_schema_1 = require("./features/rbac/infra/schema/action.schema");
@@ -135,6 +150,37 @@ var requestOutcome_enum_1 = require("./features/audit/domain/enums/requestOutcom
135
150
  Object.defineProperty(exports, "RequestOutcome", { enumerable: true, get: function () { return requestOutcome_enum_1.RequestOutcome; } });
136
151
  var auditable_decorator_1 = require("./features/audit/presentation/decorators/auditable.decorator");
137
152
  Object.defineProperty(exports, "Auditable", { enumerable: true, get: function () { return auditable_decorator_1.Auditable; } });
153
+ var bullConnection_module_1 = require("./core/queue/bullConnection.module");
154
+ Object.defineProperty(exports, "BullConnectionModule", { enumerable: true, get: function () { return bullConnection_module_1.BullConnectionModule; } });
155
+ var job_producer_1 = require("./core/queue/job.producer");
156
+ Object.defineProperty(exports, "JobProducer", { enumerable: true, get: function () { return job_producer_1.JobProducer; } });
157
+ var jobEvents_interface_1 = require("./core/queue/jobEvents.interface");
158
+ Object.defineProperty(exports, "JOB_EVENTS_PUBLISHER", { enumerable: true, get: function () { return jobEvents_interface_1.JOB_EVENTS_PUBLISHER; } });
159
+ var jobEvents_service_1 = require("./core/queue/jobEvents.service");
160
+ Object.defineProperty(exports, "JobEventsService", { enumerable: true, get: function () { return jobEvents_service_1.JobEventsService; } });
161
+ var jobStatus_response_1 = require("./core/queue/jobStatus.response");
162
+ Object.defineProperty(exports, "JobErrorResponse", { enumerable: true, get: function () { return jobStatus_response_1.JobErrorResponse; } });
163
+ Object.defineProperty(exports, "JobProgressResponse", { enumerable: true, get: function () { return jobStatus_response_1.JobProgressResponse; } });
164
+ Object.defineProperty(exports, "JobStatusResponse", { enumerable: true, get: function () { return jobStatus_response_1.JobStatusResponse; } });
165
+ var jobWorkerHost_1 = require("./core/queue/jobWorkerHost");
166
+ Object.defineProperty(exports, "JobWorkerHost", { enumerable: true, get: function () { return jobWorkerHost_1.JobWorkerHost; } });
167
+ Object.defineProperty(exports, "toSafeError", { enumerable: true, get: function () { return jobWorkerHost_1.toSafeError; } });
168
+ var queue_constants_1 = require("./core/queue/queue.constants");
169
+ Object.defineProperty(exports, "COMPLETED_RETENTION_SECONDS", { enumerable: true, get: function () { return queue_constants_1.COMPLETED_RETENTION_SECONDS; } });
170
+ Object.defineProperty(exports, "FAILED_RETENTION_SECONDS", { enumerable: true, get: function () { return queue_constants_1.FAILED_RETENTION_SECONDS; } });
171
+ Object.defineProperty(exports, "isRedisConfigured", { enumerable: true, get: function () { return queue_constants_1.isRedisConfigured; } });
172
+ Object.defineProperty(exports, "JOB_ATTEMPTS", { enumerable: true, get: function () { return queue_constants_1.JOB_ATTEMPTS; } });
173
+ Object.defineProperty(exports, "JOB_BACKOFF_DELAY_MS", { enumerable: true, get: function () { return queue_constants_1.JOB_BACKOFF_DELAY_MS; } });
174
+ Object.defineProperty(exports, "JOB_COMPLETED_EVENT", { enumerable: true, get: function () { return queue_constants_1.JOB_COMPLETED_EVENT; } });
175
+ Object.defineProperty(exports, "JOB_CONCURRENCY", { enumerable: true, get: function () { return queue_constants_1.JOB_CONCURRENCY; } });
176
+ Object.defineProperty(exports, "JOB_FAILED_EVENT", { enumerable: true, get: function () { return queue_constants_1.JOB_FAILED_EVENT; } });
177
+ Object.defineProperty(exports, "JOB_PROGRESS_EVENT", { enumerable: true, get: function () { return queue_constants_1.JOB_PROGRESS_EVENT; } });
178
+ Object.defineProperty(exports, "JOBS_QUEUE", { enumerable: true, get: function () { return queue_constants_1.JOBS_QUEUE; } });
179
+ Object.defineProperty(exports, "queuePrefix", { enumerable: true, get: function () { return queue_constants_1.queuePrefix; } });
180
+ var queue_module_1 = require("./core/queue/queue.module");
181
+ Object.defineProperty(exports, "QueueModule", { enumerable: true, get: function () { return queue_module_1.QueueModule; } });
182
+ var redisConnection_1 = require("./core/queue/redisConnection");
183
+ Object.defineProperty(exports, "buildRedisOptions", { enumerable: true, get: function () { return redisConnection_1.buildRedisOptions; } });
138
184
  var baseGateway_1 = require("./core/websocket/baseGateway");
139
185
  Object.defineProperty(exports, "BaseGateway", { enumerable: true, get: function () { return baseGateway_1.BaseGateway; } });
140
186
  var socket_constants_1 = require("./core/websocket/socket.constants");
@@ -10,11 +10,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.RlCoreModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
12
  const core_module_1 = require("./core/core.module");
13
+ const jobEvents_interface_1 = require("./core/queue/jobEvents.interface");
13
14
  const coreEntities_1 = require("./coreEntities");
14
15
  const audit_module_1 = require("./features/audit/audit.module");
15
16
  const auth_module_1 = require("./features/auth/auth.module");
16
17
  const maintenance_module_1 = require("./features/maintenance/maintenance.module");
17
18
  const notifications_module_1 = require("./features/notifications/notifications.module");
19
+ const notifications_gateway_1 = require("./features/notifications/presentation/notifications.gateway");
18
20
  const rbac_module_1 = require("./features/rbac/rbac.module");
19
21
  const users_module_1 = require("./features/users/users.module");
20
22
  let RlCoreModule = RlCoreModule_1 = class RlCoreModule {
@@ -33,6 +35,12 @@ let RlCoreModule = RlCoreModule_1 = class RlCoreModule {
33
35
  maintenance_module_1.MaintenanceModule,
34
36
  notifications_module_1.NotificationsModule,
35
37
  ],
38
+ providers: [
39
+ {
40
+ provide: jobEvents_interface_1.JOB_EVENTS_PUBLISHER,
41
+ useExisting: notifications_gateway_1.NotificationsGateway,
42
+ },
43
+ ],
36
44
  exports: [notifications_module_1.NotificationsModule],
37
45
  };
38
46
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rl-core-api",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "Core NestJS: autenticação com 2FA, RBAC, auditoria, notificações e listagens com filtro dinâmico",
5
5
  "author": "Rodrigo Liberti",
6
6
  "license": "MIT",
@@ -69,6 +69,7 @@
69
69
  "zod": "^4.4.3"
70
70
  },
71
71
  "dependencies": {
72
+ "@nestjs/bullmq": "^11.0.5",
72
73
  "@nestjs/config": "^4.0.4",
73
74
  "@nestjs/event-emitter": "^3.1.0",
74
75
  "@nestjs/jwt": "^11.0.2",
@@ -78,9 +79,11 @@
78
79
  "@nestjs/throttler": "^6.5.0",
79
80
  "@nestjs/websockets": "^11.2.1",
80
81
  "argon2": "^0.45.1",
82
+ "bullmq": "^5.81.4",
81
83
  "cookie-parser": "^1.4.7",
82
84
  "dotenv": "^17.4.2",
83
85
  "helmet": "^8.3.0",
86
+ "ioredis": "^5.11.1",
84
87
  "mysql2": "^3.23.2",
85
88
  "nest-winston": "^1.10.2",
86
89
  "nodemailer": "^9.0.5",
@@ -1,6 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from "typeorm";
2
- export declare class GroupManager1787270400000 implements MigrationInterface {
3
- name: string;
4
- up(queryRunner: QueryRunner): Promise<void>;
5
- down(queryRunner: QueryRunner): Promise<void>;
6
- }
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GroupManager1787270400000 = void 0;
4
- class GroupManager1787270400000 {
5
- constructor() {
6
- this.name = "GroupManager1787270400000";
7
- }
8
- async up(queryRunner) {
9
- await queryRunner.query(`
10
- ALTER TABLE \`groups\`
11
- ADD COLUMN manager_id char(36) NULL AFTER parent_id,
12
- ADD KEY IDX_groups_manager (manager_id),
13
- ADD CONSTRAINT FK_groups_manager FOREIGN KEY (manager_id)
14
- REFERENCES users (id) ON DELETE SET NULL;
15
- `);
16
- }
17
- async down(queryRunner) {
18
- await queryRunner.query(`
19
- ALTER TABLE \`groups\`
20
- DROP FOREIGN KEY FK_groups_manager,
21
- DROP KEY IDX_groups_manager,
22
- DROP COLUMN manager_id;
23
- `);
24
- }
25
- }
26
- exports.GroupManager1787270400000 = GroupManager1787270400000;