rl-core-api 0.15.6 → 0.16.1

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 (65) hide show
  1. package/dist/core/bootstrap/bootstrapCore.util.js +1 -1
  2. package/dist/core/config/env.schema.d.ts +7 -0
  3. package/dist/core/config/env.schema.js +4 -0
  4. package/dist/core/database/migrations/1789171200000-NotificationDismissal.d.ts +6 -0
  5. package/dist/core/database/migrations/1789171200000-NotificationDismissal.js +16 -0
  6. package/dist/core/database/migrations/index.js +2 -0
  7. package/dist/core/images/imageCleanup.service.d.ts +9 -0
  8. package/dist/core/images/imageCleanup.service.js +50 -0
  9. package/dist/core/images/imageFetch.service.d.ts +11 -0
  10. package/dist/core/images/imageFetch.service.js +190 -0
  11. package/dist/core/images/imageProcessing.service.d.ts +9 -0
  12. package/dist/core/images/imageProcessing.service.js +74 -0
  13. package/dist/core/images/imageProfile.interface.d.ts +40 -0
  14. package/dist/core/images/imageProfile.interface.js +29 -0
  15. package/dist/core/images/imageProfile.registry.d.ts +14 -0
  16. package/dist/core/images/imageProfile.registry.js +61 -0
  17. package/dist/core/images/imageStorage.service.d.ts +28 -0
  18. package/dist/core/images/imageStorage.service.js +151 -0
  19. package/dist/core/images/images.controller.d.ts +16 -0
  20. package/dist/core/images/images.controller.js +142 -0
  21. package/dist/core/images/images.module.d.ts +2 -0
  22. package/dist/core/images/images.module.js +35 -0
  23. package/dist/core/images/images.processor.d.ts +18 -0
  24. package/dist/core/images/images.processor.js +75 -0
  25. package/dist/core/images/images.service.d.ts +34 -0
  26. package/dist/core/images/images.service.js +137 -0
  27. package/dist/core/images/imagesApi.module.d.ts +2 -0
  28. package/dist/core/images/imagesApi.module.js +25 -0
  29. package/dist/core/images/imagesWorker.module.d.ts +2 -0
  30. package/dist/core/images/imagesWorker.module.js +22 -0
  31. package/dist/core/images/responses/imageAccepted.response.d.ts +4 -0
  32. package/dist/core/images/responses/imageAccepted.response.js +28 -0
  33. package/dist/core/images/responses/imageProfile.response.d.ts +10 -0
  34. package/dist/core/images/responses/imageProfile.response.js +55 -0
  35. package/dist/core/images/responses/imageStatus.response.d.ts +7 -0
  36. package/dist/core/images/responses/imageStatus.response.js +36 -0
  37. package/dist/core/images/uploadImageFromUrl.command.d.ts +3 -0
  38. package/dist/core/images/uploadImageFromUrl.command.js +23 -0
  39. package/dist/core/queue/job.producer.d.ts +1 -1
  40. package/dist/core/queue/job.producer.js +7 -1
  41. package/dist/core/queue/queue.constants.d.ts +4 -1
  42. package/dist/core/queue/queue.constants.js +5 -2
  43. package/dist/features/notifications/domain/notifications.service.d.ts +2 -0
  44. package/dist/features/notifications/domain/notifications.service.js +12 -0
  45. package/dist/features/notifications/infra/repositories/notification.repository.d.ts +1 -0
  46. package/dist/features/notifications/infra/repositories/notification.repository.js +8 -0
  47. package/dist/features/notifications/infra/repositories/notificationRead.repository.d.ts +1 -0
  48. package/dist/features/notifications/infra/repositories/notificationRead.repository.js +17 -0
  49. package/dist/features/notifications/infra/schema/notificationRead.schema.d.ts +1 -0
  50. package/dist/features/notifications/infra/schema/notificationRead.schema.js +4 -0
  51. package/dist/features/notifications/presentation/notifications.controller.d.ts +2 -0
  52. package/dist/features/notifications/presentation/notifications.controller.js +23 -0
  53. package/dist/features/users/domain/avatarImage.profile.d.ts +13 -0
  54. package/dist/features/users/domain/avatarImage.profile.js +30 -0
  55. package/dist/features/users/domain/index.d.ts +1 -1
  56. package/dist/features/users/domain/index.js +1 -1
  57. package/dist/features/users/presentation/users.controller.d.ts +6 -5
  58. package/dist/features/users/presentation/users.controller.js +28 -15
  59. package/dist/features/users/users.module.js +3 -1
  60. package/dist/index.d.ts +17 -1
  61. package/dist/index.js +43 -2
  62. package/dist/rlCore.module.js +5 -1
  63. package/package.json +1 -1
  64. package/dist/features/users/domain/avatar.service.d.ts +0 -5
  65. package/dist/features/users/domain/avatar.service.js +0 -61
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.UsersModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const typeorm_1 = require("@nestjs/typeorm");
12
+ const imagesApi_module_1 = require("../../core/images/imagesApi.module");
12
13
  const token_module_1 = require("../auth/token.module");
13
14
  const role_repository_1 = require("../rbac/infra/repositories/role.repository");
14
15
  const role_schema_1 = require("../rbac/infra/schema/role.schema");
@@ -25,6 +26,7 @@ exports.UsersModule = UsersModule = __decorate([
25
26
  typeorm_1.TypeOrmModule.forFeature([infra_1.User, infra_1.PasswordHistory, role_schema_1.Role]),
26
27
  token_module_1.TokenModule,
27
28
  rbac_module_1.RbacModule,
29
+ imagesApi_module_1.ImagesApiModule,
28
30
  ],
29
31
  controllers: [presentation_1.UsersController],
30
32
  providers: [
@@ -32,7 +34,7 @@ exports.UsersModule = UsersModule = __decorate([
32
34
  infra_1.PasswordHistoryRepository,
33
35
  role_repository_1.RoleRepository,
34
36
  domain_1.UsersService,
35
- domain_1.AvatarService,
37
+ domain_1.AvatarImageProfile,
36
38
  ],
37
39
  exports: [
38
40
  infra_1.UserRepository,
package/dist/index.d.ts CHANGED
@@ -70,7 +70,7 @@ export { JOB_EVENTS_PUBLISHER, JobEventsPublisher, } from "./core/queue/jobEvent
70
70
  export { JobEventsService } from "./core/queue/jobEvents.service";
71
71
  export { JobErrorResponse, JobProgressResponse, JobStatusResponse, } from "./core/queue/jobStatus.response";
72
72
  export { JobWorkerHost, toSafeError } from "./core/queue/jobWorkerHost";
73
- export { COMPLETED_RETENTION_SECONDS, EXPORT_CONCURRENCY, EXPORT_LOCK_DURATION_MS, EXPORTS_QUEUE, FAILED_RETENTION_SECONDS, isQueueName, isRedisConfigured, JOB_ATTEMPTS, JOB_BACKOFF_DELAY_MS, JOB_COMPLETED_EVENT, JOB_CONCURRENCY, JOB_FAILED_EVENT, JOB_PROGRESS_EVENT, JOBS_QUEUE, QUEUE_NAMES, QueueName, queuePrefix, } from "./core/queue/queue.constants";
73
+ export { COMPLETED_RETENTION_SECONDS, EXPORT_CONCURRENCY, EXPORT_LOCK_DURATION_MS, EXPORTS_QUEUE, FAILED_RETENTION_SECONDS, IMAGE_CONCURRENCY, IMAGE_LOCK_DURATION_MS, IMAGES_QUEUE, isQueueName, isRedisConfigured, JOB_ATTEMPTS, JOB_BACKOFF_DELAY_MS, JOB_COMPLETED_EVENT, JOB_CONCURRENCY, JOB_FAILED_EVENT, JOB_PROGRESS_EVENT, JOBS_QUEUE, QUEUE_NAMES, QueueName, queuePrefix, } from "./core/queue/queue.constants";
74
74
  export { QueueModule } from "./core/queue/queue.module";
75
75
  export { buildRedisOptions } from "./core/queue/redisConnection";
76
76
  export { RedisJobEventsBridge } from "./core/queue/redisJobEvents.bridge";
@@ -90,6 +90,22 @@ export { ExportStatusResponse } from "./core/export/exportStatus.response";
90
90
  export { ExportStorageService } from "./core/export/exportStorage.service";
91
91
  export { ExportWorkerModule } from "./core/export/exportWorker.module";
92
92
  export { RequestExportCommand } from "./core/export/requestExport.command";
93
+ export { ImageCleanupService } from "./core/images/imageCleanup.service";
94
+ export { ImageFetchService, isBlockedAddress } from "./core/images/imageFetch.service";
95
+ export { ImageProcessingService } from "./core/images/imageProcessing.service";
96
+ export { EXTENSION_BY_FORMAT, IMAGE_PROFILE, ImageFit, ImageFormat, ImageJobPayload, ImageJobSummary, ImageProfile, ImageSourceKind, ImageUploadProfile, } from "./core/images/imageProfile.interface";
97
+ export { ImageProfileRegistry } from "./core/images/imageProfile.registry";
98
+ export { ImagesController } from "./core/images/images.controller";
99
+ export { ImagesModule } from "./core/images/images.module";
100
+ export { ImagesProcessor } from "./core/images/images.processor";
101
+ export { ImageAccepted, ImagesService } from "./core/images/images.service";
102
+ export { ImagesApiModule } from "./core/images/imagesApi.module";
103
+ export { ImageStorageService, StoredImageRef } from "./core/images/imageStorage.service";
104
+ export { ImagesWorkerModule } from "./core/images/imagesWorker.module";
105
+ export { ImageAcceptedResponse } from "./core/images/responses/imageAccepted.response";
106
+ export { ImageProfileResponse } from "./core/images/responses/imageProfile.response";
107
+ export { ImageStatusResponse } from "./core/images/responses/imageStatus.response";
108
+ export { UploadImageFromUrlCommand } from "./core/images/uploadImageFromUrl.command";
93
109
  export { BaseGateway, SocketData } from "./core/websocket/baseGateway";
94
110
  export { NOTIFICATIONS_NAMESPACE, roleRoom, SESSION_REFRESH_EVENT, userRoom, } from "./core/websocket/socket.constants";
95
111
  export { SOCKET_EVENT_VERSION, SocketEvent, wrapSocketEvent, } from "./core/websocket/socketEvent.envelope";
package/dist/index.js CHANGED
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Paginated = exports.parseFilter = exports.paginateWithFilter = exports.applySearch = 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.bootstrapWorker = exports.bootstrapCore = void 0;
4
4
  exports.EXPORT_CONCURRENCY = 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 = exports.resolveOrder = exports.PaginationQuery = void 0;
5
- 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.RequestExportCommand = exports.ExportWorkerModule = exports.ExportStorageService = exports.ExportStatusResponse = exports.ExportHandlerRegistry = exports.ExportReport = exports.EXPORT_HANDLER = exports.ExportEngineService = exports.ExportColumnFormat = exports.ExportCleanupService = exports.ExportApiModule = exports.ExportAcceptedResponse = exports.ExportService = exports.ExportProcessor = exports.ExportModule = exports.ExportController = exports.RedisJobEventsPublisher = exports.jobEventsChannel = exports.RedisJobEventsBridge = exports.buildRedisOptions = exports.QueueModule = exports.queuePrefix = exports.QUEUE_NAMES = exports.JOBS_QUEUE = exports.JOB_PROGRESS_EVENT = exports.JOB_FAILED_EVENT = exports.JOB_CONCURRENCY = exports.JOB_COMPLETED_EVENT = exports.JOB_BACKOFF_DELAY_MS = exports.JOB_ATTEMPTS = exports.isRedisConfigured = exports.isQueueName = exports.FAILED_RETENTION_SECONDS = exports.EXPORTS_QUEUE = exports.EXPORT_LOCK_DURATION_MS = void 0;
6
- exports.normalizeIp = exports.sha256 = exports.randomToken = void 0;
5
+ exports.ImagesController = exports.ImageProfileRegistry = exports.ImageUploadProfile = exports.ImageSourceKind = exports.ImageFormat = exports.ImageFit = exports.IMAGE_PROFILE = exports.EXTENSION_BY_FORMAT = exports.ImageProcessingService = exports.isBlockedAddress = exports.ImageFetchService = exports.ImageCleanupService = exports.RequestExportCommand = exports.ExportWorkerModule = exports.ExportStorageService = exports.ExportStatusResponse = exports.ExportHandlerRegistry = exports.ExportReport = exports.EXPORT_HANDLER = exports.ExportEngineService = exports.ExportColumnFormat = exports.ExportCleanupService = exports.ExportApiModule = exports.ExportAcceptedResponse = exports.ExportService = exports.ExportProcessor = exports.ExportModule = exports.ExportController = exports.RedisJobEventsPublisher = exports.jobEventsChannel = exports.RedisJobEventsBridge = exports.buildRedisOptions = exports.QueueModule = exports.queuePrefix = exports.QUEUE_NAMES = exports.JOBS_QUEUE = exports.JOB_PROGRESS_EVENT = exports.JOB_FAILED_EVENT = exports.JOB_CONCURRENCY = exports.JOB_COMPLETED_EVENT = exports.JOB_BACKOFF_DELAY_MS = exports.JOB_ATTEMPTS = exports.isRedisConfigured = exports.isQueueName = exports.IMAGES_QUEUE = exports.IMAGE_LOCK_DURATION_MS = exports.IMAGE_CONCURRENCY = exports.FAILED_RETENTION_SECONDS = exports.EXPORTS_QUEUE = exports.EXPORT_LOCK_DURATION_MS = void 0;
6
+ 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.UploadImageFromUrlCommand = exports.ImageStatusResponse = exports.ImageProfileResponse = exports.ImageAcceptedResponse = exports.ImagesWorkerModule = exports.ImageStorageService = exports.ImagesApiModule = exports.ImagesService = exports.ImagesProcessor = exports.ImagesModule = void 0;
7
7
  var bootstrapCore_util_1 = require("./core/bootstrap/bootstrapCore.util");
8
8
  Object.defineProperty(exports, "bootstrapCore", { enumerable: true, get: function () { return bootstrapCore_util_1.bootstrapCore; } });
9
9
  var bootstrapWorker_util_1 = require("./core/bootstrap/bootstrapWorker.util");
@@ -175,6 +175,9 @@ Object.defineProperty(exports, "EXPORT_CONCURRENCY", { enumerable: true, get: fu
175
175
  Object.defineProperty(exports, "EXPORT_LOCK_DURATION_MS", { enumerable: true, get: function () { return queue_constants_1.EXPORT_LOCK_DURATION_MS; } });
176
176
  Object.defineProperty(exports, "EXPORTS_QUEUE", { enumerable: true, get: function () { return queue_constants_1.EXPORTS_QUEUE; } });
177
177
  Object.defineProperty(exports, "FAILED_RETENTION_SECONDS", { enumerable: true, get: function () { return queue_constants_1.FAILED_RETENTION_SECONDS; } });
178
+ Object.defineProperty(exports, "IMAGE_CONCURRENCY", { enumerable: true, get: function () { return queue_constants_1.IMAGE_CONCURRENCY; } });
179
+ Object.defineProperty(exports, "IMAGE_LOCK_DURATION_MS", { enumerable: true, get: function () { return queue_constants_1.IMAGE_LOCK_DURATION_MS; } });
180
+ Object.defineProperty(exports, "IMAGES_QUEUE", { enumerable: true, get: function () { return queue_constants_1.IMAGES_QUEUE; } });
178
181
  Object.defineProperty(exports, "isQueueName", { enumerable: true, get: function () { return queue_constants_1.isQueueName; } });
179
182
  Object.defineProperty(exports, "isRedisConfigured", { enumerable: true, get: function () { return queue_constants_1.isRedisConfigured; } });
180
183
  Object.defineProperty(exports, "JOB_ATTEMPTS", { enumerable: true, get: function () { return queue_constants_1.JOB_ATTEMPTS; } });
@@ -226,6 +229,44 @@ var exportWorker_module_1 = require("./core/export/exportWorker.module");
226
229
  Object.defineProperty(exports, "ExportWorkerModule", { enumerable: true, get: function () { return exportWorker_module_1.ExportWorkerModule; } });
227
230
  var requestExport_command_1 = require("./core/export/requestExport.command");
228
231
  Object.defineProperty(exports, "RequestExportCommand", { enumerable: true, get: function () { return requestExport_command_1.RequestExportCommand; } });
232
+ var imageCleanup_service_1 = require("./core/images/imageCleanup.service");
233
+ Object.defineProperty(exports, "ImageCleanupService", { enumerable: true, get: function () { return imageCleanup_service_1.ImageCleanupService; } });
234
+ var imageFetch_service_1 = require("./core/images/imageFetch.service");
235
+ Object.defineProperty(exports, "ImageFetchService", { enumerable: true, get: function () { return imageFetch_service_1.ImageFetchService; } });
236
+ Object.defineProperty(exports, "isBlockedAddress", { enumerable: true, get: function () { return imageFetch_service_1.isBlockedAddress; } });
237
+ var imageProcessing_service_1 = require("./core/images/imageProcessing.service");
238
+ Object.defineProperty(exports, "ImageProcessingService", { enumerable: true, get: function () { return imageProcessing_service_1.ImageProcessingService; } });
239
+ var imageProfile_interface_1 = require("./core/images/imageProfile.interface");
240
+ Object.defineProperty(exports, "EXTENSION_BY_FORMAT", { enumerable: true, get: function () { return imageProfile_interface_1.EXTENSION_BY_FORMAT; } });
241
+ Object.defineProperty(exports, "IMAGE_PROFILE", { enumerable: true, get: function () { return imageProfile_interface_1.IMAGE_PROFILE; } });
242
+ Object.defineProperty(exports, "ImageFit", { enumerable: true, get: function () { return imageProfile_interface_1.ImageFit; } });
243
+ Object.defineProperty(exports, "ImageFormat", { enumerable: true, get: function () { return imageProfile_interface_1.ImageFormat; } });
244
+ Object.defineProperty(exports, "ImageSourceKind", { enumerable: true, get: function () { return imageProfile_interface_1.ImageSourceKind; } });
245
+ Object.defineProperty(exports, "ImageUploadProfile", { enumerable: true, get: function () { return imageProfile_interface_1.ImageUploadProfile; } });
246
+ var imageProfile_registry_1 = require("./core/images/imageProfile.registry");
247
+ Object.defineProperty(exports, "ImageProfileRegistry", { enumerable: true, get: function () { return imageProfile_registry_1.ImageProfileRegistry; } });
248
+ var images_controller_1 = require("./core/images/images.controller");
249
+ Object.defineProperty(exports, "ImagesController", { enumerable: true, get: function () { return images_controller_1.ImagesController; } });
250
+ var images_module_1 = require("./core/images/images.module");
251
+ Object.defineProperty(exports, "ImagesModule", { enumerable: true, get: function () { return images_module_1.ImagesModule; } });
252
+ var images_processor_1 = require("./core/images/images.processor");
253
+ Object.defineProperty(exports, "ImagesProcessor", { enumerable: true, get: function () { return images_processor_1.ImagesProcessor; } });
254
+ var images_service_1 = require("./core/images/images.service");
255
+ Object.defineProperty(exports, "ImagesService", { enumerable: true, get: function () { return images_service_1.ImagesService; } });
256
+ var imagesApi_module_1 = require("./core/images/imagesApi.module");
257
+ Object.defineProperty(exports, "ImagesApiModule", { enumerable: true, get: function () { return imagesApi_module_1.ImagesApiModule; } });
258
+ var imageStorage_service_1 = require("./core/images/imageStorage.service");
259
+ Object.defineProperty(exports, "ImageStorageService", { enumerable: true, get: function () { return imageStorage_service_1.ImageStorageService; } });
260
+ var imagesWorker_module_1 = require("./core/images/imagesWorker.module");
261
+ Object.defineProperty(exports, "ImagesWorkerModule", { enumerable: true, get: function () { return imagesWorker_module_1.ImagesWorkerModule; } });
262
+ var imageAccepted_response_1 = require("./core/images/responses/imageAccepted.response");
263
+ Object.defineProperty(exports, "ImageAcceptedResponse", { enumerable: true, get: function () { return imageAccepted_response_1.ImageAcceptedResponse; } });
264
+ var imageProfile_response_1 = require("./core/images/responses/imageProfile.response");
265
+ Object.defineProperty(exports, "ImageProfileResponse", { enumerable: true, get: function () { return imageProfile_response_1.ImageProfileResponse; } });
266
+ var imageStatus_response_1 = require("./core/images/responses/imageStatus.response");
267
+ Object.defineProperty(exports, "ImageStatusResponse", { enumerable: true, get: function () { return imageStatus_response_1.ImageStatusResponse; } });
268
+ var uploadImageFromUrl_command_1 = require("./core/images/uploadImageFromUrl.command");
269
+ Object.defineProperty(exports, "UploadImageFromUrlCommand", { enumerable: true, get: function () { return uploadImageFromUrl_command_1.UploadImageFromUrlCommand; } });
229
270
  var baseGateway_1 = require("./core/websocket/baseGateway");
230
271
  Object.defineProperty(exports, "BaseGateway", { enumerable: true, get: function () { return baseGateway_1.BaseGateway; } });
231
272
  var socket_constants_1 = require("./core/websocket/socket.constants");
@@ -12,6 +12,8 @@ const common_1 = require("@nestjs/common");
12
12
  const core_module_1 = require("./core/core.module");
13
13
  const exportApi_module_1 = require("./core/export/exportApi.module");
14
14
  const exportWorker_module_1 = require("./core/export/exportWorker.module");
15
+ const imagesApi_module_1 = require("./core/images/imagesApi.module");
16
+ const imagesWorker_module_1 = require("./core/images/imagesWorker.module");
15
17
  const jobEvents_interface_1 = require("./core/queue/jobEvents.interface");
16
18
  const queue_constants_1 = require("./core/queue/queue.constants");
17
19
  const redisJobEvents_bridge_1 = require("./core/queue/redisJobEvents.bridge");
@@ -40,6 +42,7 @@ let RlCoreModule = RlCoreModule_1 = class RlCoreModule {
40
42
  maintenance_module_1.MaintenanceModule,
41
43
  notifications_module_1.NotificationsModule,
42
44
  exportApi_module_1.ExportApiModule,
45
+ imagesApi_module_1.ImagesApiModule,
43
46
  ],
44
47
  providers: [
45
48
  {
@@ -48,7 +51,7 @@ let RlCoreModule = RlCoreModule_1 = class RlCoreModule {
48
51
  },
49
52
  ...((0, queue_constants_1.isRedisConfigured)() ? [redisJobEvents_bridge_1.RedisJobEventsBridge] : []),
50
53
  ],
51
- exports: [notifications_module_1.NotificationsModule],
54
+ exports: [notifications_module_1.NotificationsModule, imagesApi_module_1.ImagesApiModule],
52
55
  };
53
56
  }
54
57
  static forWorker(options = {}) {
@@ -60,6 +63,7 @@ let RlCoreModule = RlCoreModule_1 = class RlCoreModule {
60
63
  validateEnv: options.validateEnv,
61
64
  }),
62
65
  exportWorker_module_1.ExportWorkerModule,
66
+ imagesWorker_module_1.ImagesWorkerModule,
63
67
  ],
64
68
  providers: [
65
69
  ...((0, queue_constants_1.isRedisConfigured)()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rl-core-api",
3
- "version": "0.15.6",
3
+ "version": "0.16.1",
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",
@@ -1,5 +0,0 @@
1
- export declare const AVATAR_MAX_BYTES: number;
2
- export declare class AvatarService {
3
- processAndStore(userId: string, file?: Express.Multer.File): Promise<string>;
4
- remove(userId: string): Promise<void>;
5
- }
@@ -1,61 +0,0 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AvatarService = exports.AVATAR_MAX_BYTES = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const fs_1 = require("fs");
15
- const path_1 = require("path");
16
- const sharp_1 = __importDefault(require("sharp"));
17
- const UPLOAD_DIR = (0, path_1.join)(process.cwd(), "uploads", "avatars");
18
- const ALLOWED = ["image/jpeg", "image/png", "image/webp"];
19
- exports.AVATAR_MAX_BYTES = 5 * 1024 * 1024;
20
- const MAGIC_BYTES_CHECK = {
21
- "image/jpeg": (buf) => buf.length >= 3 && buf[0] === 0xff && buf[1] === 0xd8 && buf[2] === 0xff,
22
- "image/png": (buf) => buf.length >= 8 &&
23
- buf
24
- .subarray(0, 8)
25
- .equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])),
26
- "image/webp": (buf) => buf.length >= 12 &&
27
- buf.subarray(0, 4).toString("ascii") === "RIFF" &&
28
- buf.subarray(8, 12).toString("ascii") === "WEBP",
29
- };
30
- let AvatarService = class AvatarService {
31
- async processAndStore(userId, file) {
32
- if (!file) {
33
- throw new common_1.BadRequestException("Arquivo de imagem é obrigatório");
34
- }
35
- if (!ALLOWED.includes(file.mimetype)) {
36
- throw new common_1.BadRequestException("Formato inválido (use JPEG, PNG ou WebP)");
37
- }
38
- if (!MAGIC_BYTES_CHECK[file.mimetype]?.(file.buffer)) {
39
- throw new common_1.BadRequestException("O conteúdo do arquivo não corresponde ao formato declarado");
40
- }
41
- if (file.size > exports.AVATAR_MAX_BYTES) {
42
- throw new common_1.BadRequestException("Imagem excede o limite de 5MB");
43
- }
44
- await fs_1.promises.mkdir(UPLOAD_DIR, { recursive: true });
45
- const filename = `${userId}.webp`;
46
- const fullPath = (0, path_1.join)(UPLOAD_DIR, filename);
47
- await (0, sharp_1.default)(file.buffer)
48
- .resize(256, 256, { fit: "cover" })
49
- .webp({ quality: 85 })
50
- .toFile(fullPath);
51
- return `/uploads/avatars/${filename}?v=${Date.now()}`;
52
- }
53
- async remove(userId) {
54
- const fullPath = (0, path_1.join)(UPLOAD_DIR, `${userId}.webp`);
55
- await fs_1.promises.rm(fullPath, { force: true });
56
- }
57
- };
58
- exports.AvatarService = AvatarService;
59
- exports.AvatarService = AvatarService = __decorate([
60
- (0, common_1.Injectable)()
61
- ], AvatarService);