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.
- package/dist/core/bootstrap/bootstrapCore.util.js +1 -1
- package/dist/core/config/env.schema.d.ts +7 -0
- package/dist/core/config/env.schema.js +4 -0
- package/dist/core/database/migrations/1789171200000-NotificationDismissal.d.ts +6 -0
- package/dist/core/database/migrations/1789171200000-NotificationDismissal.js +16 -0
- package/dist/core/database/migrations/index.js +2 -0
- package/dist/core/images/imageCleanup.service.d.ts +9 -0
- package/dist/core/images/imageCleanup.service.js +50 -0
- package/dist/core/images/imageFetch.service.d.ts +11 -0
- package/dist/core/images/imageFetch.service.js +190 -0
- package/dist/core/images/imageProcessing.service.d.ts +9 -0
- package/dist/core/images/imageProcessing.service.js +74 -0
- package/dist/core/images/imageProfile.interface.d.ts +40 -0
- package/dist/core/images/imageProfile.interface.js +29 -0
- package/dist/core/images/imageProfile.registry.d.ts +14 -0
- package/dist/core/images/imageProfile.registry.js +61 -0
- package/dist/core/images/imageStorage.service.d.ts +28 -0
- package/dist/core/images/imageStorage.service.js +151 -0
- package/dist/core/images/images.controller.d.ts +16 -0
- package/dist/core/images/images.controller.js +142 -0
- package/dist/core/images/images.module.d.ts +2 -0
- package/dist/core/images/images.module.js +35 -0
- package/dist/core/images/images.processor.d.ts +18 -0
- package/dist/core/images/images.processor.js +75 -0
- package/dist/core/images/images.service.d.ts +34 -0
- package/dist/core/images/images.service.js +137 -0
- package/dist/core/images/imagesApi.module.d.ts +2 -0
- package/dist/core/images/imagesApi.module.js +25 -0
- package/dist/core/images/imagesWorker.module.d.ts +2 -0
- package/dist/core/images/imagesWorker.module.js +22 -0
- package/dist/core/images/responses/imageAccepted.response.d.ts +4 -0
- package/dist/core/images/responses/imageAccepted.response.js +28 -0
- package/dist/core/images/responses/imageProfile.response.d.ts +10 -0
- package/dist/core/images/responses/imageProfile.response.js +55 -0
- package/dist/core/images/responses/imageStatus.response.d.ts +7 -0
- package/dist/core/images/responses/imageStatus.response.js +36 -0
- package/dist/core/images/uploadImageFromUrl.command.d.ts +3 -0
- package/dist/core/images/uploadImageFromUrl.command.js +23 -0
- package/dist/core/queue/job.producer.d.ts +1 -1
- package/dist/core/queue/job.producer.js +7 -1
- package/dist/core/queue/queue.constants.d.ts +4 -1
- package/dist/core/queue/queue.constants.js +5 -2
- package/dist/features/notifications/domain/notifications.service.d.ts +2 -0
- package/dist/features/notifications/domain/notifications.service.js +12 -0
- package/dist/features/notifications/infra/repositories/notification.repository.d.ts +1 -0
- package/dist/features/notifications/infra/repositories/notification.repository.js +8 -0
- package/dist/features/notifications/infra/repositories/notificationRead.repository.d.ts +1 -0
- package/dist/features/notifications/infra/repositories/notificationRead.repository.js +17 -0
- package/dist/features/notifications/infra/schema/notificationRead.schema.d.ts +1 -0
- package/dist/features/notifications/infra/schema/notificationRead.schema.js +4 -0
- package/dist/features/notifications/presentation/notifications.controller.d.ts +2 -0
- package/dist/features/notifications/presentation/notifications.controller.js +23 -0
- package/dist/features/users/domain/avatarImage.profile.d.ts +13 -0
- package/dist/features/users/domain/avatarImage.profile.js +30 -0
- package/dist/features/users/domain/index.d.ts +1 -1
- package/dist/features/users/domain/index.js +1 -1
- package/dist/features/users/presentation/users.controller.d.ts +6 -5
- package/dist/features/users/presentation/users.controller.js +28 -15
- package/dist/features/users/users.module.js +3 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +43 -2
- package/dist/rlCore.module.js +5 -1
- package/package.json +1 -1
- package/dist/features/users/domain/avatar.service.d.ts +0 -5
- 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.
|
|
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.
|
|
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");
|
package/dist/rlCore.module.js
CHANGED
|
@@ -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,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);
|