@kaikybrofc/omnizap-system 2.2.3 → 2.2.5

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 (55) hide show
  1. package/.env.example +13 -0
  2. package/README.md +29 -85
  3. package/app/controllers/messageController.js +133 -1
  4. package/app/modules/stickerPackModule/catalogHandlers/catalogAdminHttp.js +68 -0
  5. package/app/modules/stickerPackModule/catalogHandlers/catalogAuthHttp.js +34 -0
  6. package/app/modules/stickerPackModule/catalogHandlers/catalogPublicHttp.js +179 -0
  7. package/app/modules/stickerPackModule/catalogHandlers/catalogUploadHttp.js +92 -0
  8. package/app/modules/stickerPackModule/catalogRouter.js +79 -0
  9. package/app/modules/stickerPackModule/domainEventOutboxRepository.js +243 -0
  10. package/app/modules/stickerPackModule/domainEvents.js +61 -0
  11. package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +21 -0
  12. package/app/modules/stickerPackModule/stickerAssetRepository.js +19 -0
  13. package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +55 -15
  14. package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +238 -0
  15. package/app/modules/stickerPackModule/stickerDomainEventBus.js +71 -0
  16. package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +198 -0
  17. package/app/modules/stickerPackModule/stickerObjectStorageService.js +285 -0
  18. package/app/modules/stickerPackModule/stickerPackCatalogHttp.js +1090 -659
  19. package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +19 -1
  20. package/app/modules/stickerPackModule/stickerPackEngagementRepository.js +44 -0
  21. package/app/modules/stickerPackModule/stickerPackItemRepository.js +18 -0
  22. package/app/modules/stickerPackModule/stickerPackRepository.js +51 -0
  23. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +191 -0
  24. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +301 -0
  25. package/app/modules/stickerPackModule/stickerStorageService.js +111 -10
  26. package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +21 -0
  27. package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +59 -7
  28. package/app/observability/metrics.js +169 -0
  29. package/app/services/featureFlagService.js +137 -0
  30. package/app/services/lidMapService.js +4 -1
  31. package/app/services/whatsappLoginLinkService.js +232 -0
  32. package/database/index.js +5 -0
  33. package/database/migrations/20260228_0021_sticker_web_google_owner_phone.sql +83 -0
  34. package/database/migrations/20260228_0022_sticker_scale_indexes.sql +16 -0
  35. package/database/migrations/20260228_0023_sticker_pack_score_snapshot.sql +25 -0
  36. package/database/migrations/20260228_0024_domain_event_outbox.sql +42 -0
  37. package/database/migrations/20260228_0025_sticker_worker_task_idempotency_dlq.sql +23 -0
  38. package/database/migrations/20260228_0026_feature_flags.sql +21 -0
  39. package/ecosystem.prod.config.cjs +70 -9
  40. package/index.js +26 -0
  41. package/package.json +5 -1
  42. package/public/index.html +128 -10
  43. package/public/js/apps/createPackApp.js +59 -272
  44. package/public/js/apps/homeApp.js +106 -0
  45. package/public/js/apps/loginApp.js +459 -0
  46. package/public/js/apps/stickersApp.js +34 -37
  47. package/public/js/apps/userApp.js +244 -0
  48. package/public/js/runtime/react-runtime.js +1 -0
  49. package/public/login/index.html +333 -0
  50. package/public/stickers/create/index.html +2 -1
  51. package/public/stickers/index.html +2 -1
  52. package/public/user/index.html +367 -0
  53. package/scripts/cache-bust.mjs +65 -11
  54. package/scripts/sticker-catalog-loadtest.mjs +208 -0
  55. package/scripts/sticker-worker-task.mjs +122 -0
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+
4
+ import logger from '../app/utils/logger/loggerModule.js';
5
+ import initializeDatabase from '../database/init.js';
6
+ import { closePool } from '../database/index.js';
7
+ import {
8
+ isSupportedStickerWorkerTaskType,
9
+ startDedicatedStickerWorker,
10
+ } from '../app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js';
11
+
12
+ const parseCliArgs = (argv = []) => {
13
+ const args = new Map();
14
+ for (let index = 0; index < argv.length; index += 1) {
15
+ const token = argv[index];
16
+ if (!token.startsWith('--')) continue;
17
+ const next = argv[index + 1];
18
+ if (!next || next.startsWith('--')) {
19
+ args.set(token, true);
20
+ continue;
21
+ }
22
+ args.set(token, next);
23
+ index += 1;
24
+ }
25
+ return args;
26
+ };
27
+
28
+ const args = parseCliArgs(process.argv.slice(2));
29
+ const workerTaskType = String(args.get('--task-type') || process.env.STICKER_WORKER_TASK_TYPE || '')
30
+ .trim()
31
+ .toLowerCase();
32
+
33
+ if (!isSupportedStickerWorkerTaskType(workerTaskType)) {
34
+ logger.error('Tipo de task inválido para worker dedicado.', {
35
+ action: 'sticker_worker_task_invalid_type',
36
+ task_type: workerTaskType || null,
37
+ });
38
+ process.exit(1);
39
+ }
40
+
41
+ let shuttingDown = false;
42
+ let workerHandle = null;
43
+
44
+ const shutdown = async (signal, error = null) => {
45
+ if (shuttingDown) return;
46
+ shuttingDown = true;
47
+
48
+ logger.warn('Encerrando worker dedicado de sticker.', {
49
+ action: 'sticker_worker_task_shutdown',
50
+ signal,
51
+ task_type: workerTaskType,
52
+ error: error?.message || null,
53
+ });
54
+
55
+ try {
56
+ workerHandle?.stop?.();
57
+ } catch (stopError) {
58
+ logger.warn('Falha ao encerrar loop do worker dedicado.', {
59
+ action: 'sticker_worker_task_stop_failed',
60
+ task_type: workerTaskType,
61
+ error: stopError?.message,
62
+ });
63
+ }
64
+
65
+ try {
66
+ await closePool();
67
+ } catch (poolError) {
68
+ logger.warn('Falha ao encerrar pool MySQL no worker dedicado.', {
69
+ action: 'sticker_worker_task_pool_close_failed',
70
+ task_type: workerTaskType,
71
+ error: poolError?.message,
72
+ });
73
+ }
74
+
75
+ process.exit(error ? 1 : 0);
76
+ };
77
+
78
+ process.on('SIGINT', () => {
79
+ void shutdown('SIGINT');
80
+ });
81
+
82
+ process.on('SIGTERM', () => {
83
+ void shutdown('SIGTERM');
84
+ });
85
+
86
+ process.on('uncaughtException', (error) => {
87
+ logger.error('Exceção não capturada no worker dedicado de sticker.', {
88
+ action: 'sticker_worker_task_uncaught_exception',
89
+ task_type: workerTaskType,
90
+ error: error?.message,
91
+ stack: error?.stack,
92
+ });
93
+ void shutdown('uncaughtException', error);
94
+ });
95
+
96
+ process.on('unhandledRejection', (reason) => {
97
+ const message = reason instanceof Error ? reason.message : String(reason || '');
98
+ logger.error('Promise rejeitada sem tratamento no worker dedicado de sticker.', {
99
+ action: 'sticker_worker_task_unhandled_rejection',
100
+ task_type: workerTaskType,
101
+ error: message,
102
+ });
103
+ void shutdown('unhandledRejection', reason instanceof Error ? reason : new Error(message));
104
+ });
105
+
106
+ const start = async () => {
107
+ await initializeDatabase();
108
+ workerHandle = startDedicatedStickerWorker({
109
+ taskType: workerTaskType,
110
+ label: `process:${process.pid}`,
111
+ });
112
+ };
113
+
114
+ start().catch((error) => {
115
+ logger.error('Falha ao inicializar worker dedicado de sticker.', {
116
+ action: 'sticker_worker_task_start_failed',
117
+ task_type: workerTaskType,
118
+ error: error?.message,
119
+ stack: error?.stack,
120
+ });
121
+ void shutdown('startup_error', error);
122
+ });