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.
- package/README.md +54 -0
- package/dist/core/auth/ownershipScope.util.d.ts +10 -0
- package/dist/core/auth/ownershipScope.util.js +14 -0
- package/dist/core/auth/permissionScope.util.d.ts +2 -0
- package/dist/core/auth/permissionScope.util.js +7 -1
- package/dist/core/config/env.schema.d.ts +3 -0
- package/dist/core/config/env.schema.js +3 -0
- package/dist/core/core.module.js +3 -1
- package/dist/core/database/migrations/1710000000000-InitialSchema.js +8 -1
- package/dist/core/database/migrations/index.js +0 -2
- package/dist/core/database/seeds/seedPermissions.d.ts +20 -1
- package/dist/core/database/seeds/seedPermissions.js +31 -38
- package/dist/core/events/appEvent.enum.d.ts +6 -0
- package/dist/core/events/appEvent.enum.js +1 -0
- package/dist/core/health/health.controller.d.ts +4 -1
- package/dist/core/health/health.controller.js +9 -3
- package/dist/core/query/applyOwnershipScope.util.d.ts +7 -0
- package/dist/core/query/applyOwnershipScope.util.js +16 -0
- package/dist/core/queue/bullConnection.module.d.ts +2 -0
- package/dist/core/queue/bullConnection.module.js +27 -0
- package/dist/core/queue/job.interface.d.ts +70 -0
- package/dist/core/queue/job.interface.js +2 -0
- package/dist/core/queue/job.producer.d.ts +15 -0
- package/dist/core/queue/job.producer.js +124 -0
- package/dist/core/queue/jobEvents.interface.d.ts +4 -0
- package/dist/core/queue/jobEvents.interface.js +4 -0
- package/dist/core/queue/jobEvents.service.d.ts +12 -0
- package/dist/core/queue/jobEvents.service.js +53 -0
- package/dist/core/queue/jobStatus.controller.d.ts +8 -0
- package/dist/core/queue/jobStatus.controller.js +44 -0
- package/dist/core/queue/jobStatus.response.d.ts +20 -0
- package/dist/core/queue/jobStatus.response.js +84 -0
- package/dist/core/queue/jobWorkerHost.d.ts +17 -0
- package/dist/core/queue/jobWorkerHost.js +72 -0
- package/dist/core/queue/queue.constants.d.ts +11 -0
- package/dist/core/queue/queue.constants.js +18 -0
- package/dist/core/queue/queue.module.d.ts +2 -0
- package/dist/core/queue/queue.module.js +38 -0
- package/dist/core/queue/queueAdmin.controller.d.ts +11 -0
- package/dist/core/queue/queueAdmin.controller.js +93 -0
- package/dist/core/queue/queueAdmin.response.d.ts +23 -0
- package/dist/core/queue/queueAdmin.response.js +87 -0
- package/dist/core/queue/queueAdmin.service.d.ts +15 -0
- package/dist/core/queue/queueAdmin.service.js +85 -0
- package/dist/core/queue/redisConnection.d.ts +2 -0
- package/dist/core/queue/redisConnection.js +11 -0
- package/dist/core/websocket/baseGateway.d.ts +1 -0
- package/dist/core/websocket/baseGateway.js +3 -0
- package/dist/features/audit/audit.module.js +1 -0
- package/dist/features/audit/presentation/index.d.ts +1 -0
- package/dist/features/audit/presentation/index.js +1 -0
- package/dist/features/audit/presentation/userPermissionsChanged.listener.d.ts +7 -0
- package/dist/features/audit/presentation/userPermissionsChanged.listener.js +43 -0
- package/dist/features/notifications/notifications.module.js +1 -1
- package/dist/features/notifications/presentation/domainEvents.listener.d.ts +2 -1
- package/dist/features/notifications/presentation/domainEvents.listener.js +19 -0
- package/dist/features/rbac/domain/rbac.catalog.js +19 -16
- package/dist/features/rbac/domain/rbac.service.d.ts +11 -1
- package/dist/features/rbac/domain/rbac.service.js +76 -3
- package/dist/features/rbac/domain/teamScope.service.d.ts +1 -0
- package/dist/features/rbac/domain/teamScope.service.js +10 -4
- package/dist/features/rbac/infra/schema/scope.schema.js +1 -1
- package/dist/features/rbac/presentation/commands/createScope.command.js +1 -1
- package/dist/features/rbac/presentation/commands/setUserPermissions.command.d.ts +3 -0
- package/dist/features/rbac/presentation/commands/setUserPermissions.command.js +24 -0
- package/dist/features/rbac/presentation/index.d.ts +1 -0
- package/dist/features/rbac/presentation/index.js +1 -0
- package/dist/features/rbac/presentation/rbac.controller.d.ts +5 -0
- package/dist/features/rbac/presentation/rbac.controller.js +57 -0
- package/dist/index.d.ts +17 -3
- package/dist/index.js +48 -2
- package/dist/rlCore.module.js +8 -0
- package/package.json +4 -1
- package/dist/core/database/migrations/1787270400000-GroupManager.d.ts +0 -6
- 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 |
|
|
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,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 {
|
|
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.
|
|
4
|
-
exports.
|
|
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");
|
package/dist/rlCore.module.js
CHANGED
|
@@ -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.
|
|
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,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;
|