@omnizap-system/omnizap 2.6.1 → 2.6.3

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 (172) hide show
  1. package/.env.example +78 -9
  2. package/.github/workflows/ci.yml +3 -3
  3. package/.github/workflows/security-runner-hardening.yml +1 -1
  4. package/.github/workflows/security-zap-full-scan.yml +1 -0
  5. package/app/config/index.js +6 -0
  6. package/app/configParts/adminIdentity.js +36 -7
  7. package/app/configParts/baileysConfig.js +343 -56
  8. package/app/configParts/groupUtils.js +226 -0
  9. package/app/configParts/loggerConfig.js +185 -0
  10. package/app/configParts/messagePersistenceService.js +307 -5
  11. package/app/configParts/sessionConfig.js +242 -0
  12. package/app/connection/baileysCompatibility.test.js +10 -1
  13. package/app/connection/baileysDbAuthState.js +205 -9
  14. package/app/connection/baileysLibsignalPatch.js +210 -0
  15. package/app/connection/groupOwnerWriteStateResolver.js +141 -0
  16. package/app/connection/socketController.js +694 -123
  17. package/app/connection/socketController.multiSession.test.js +128 -0
  18. package/app/controllers/messageController.js +1 -1
  19. package/app/controllers/messagePipeline/commandMiddleware.js +12 -10
  20. package/app/controllers/messagePipeline/conversationMiddleware.js +2 -1
  21. package/app/controllers/messagePipeline/messagePipelineMiddlewares.test.js +104 -0
  22. package/app/controllers/messagePipeline/preProcessingMiddlewares.js +96 -4
  23. package/app/controllers/messageProcessingPipeline.js +90 -9
  24. package/app/controllers/messageProcessingPipeline.test.js +202 -0
  25. package/app/modules/adminModule/AGENT.md +1 -1
  26. package/app/modules/adminModule/commandConfig.json +3318 -1347
  27. package/app/modules/adminModule/groupCommandHandlers.js +856 -14
  28. package/app/modules/adminModule/groupCommandHandlers.test.js +375 -9
  29. package/app/modules/adminModule/groupWarningRepository.js +152 -0
  30. package/app/modules/aiModule/AGENT.md +47 -30
  31. package/app/modules/aiModule/aiConfigRuntime.js +1 -0
  32. package/app/modules/aiModule/catCommand.js +132 -25
  33. package/app/modules/aiModule/commandConfig.json +114 -28
  34. package/app/modules/analyticsModule/messageAnalysisEventRepository.js +54 -6
  35. package/app/modules/gameModule/AGENT.md +1 -1
  36. package/app/modules/gameModule/commandConfig.json +29 -0
  37. package/app/modules/menuModule/AGENT.md +1 -1
  38. package/app/modules/menuModule/commandConfig.json +45 -10
  39. package/app/modules/menuModule/menuCatalogService.js +190 -0
  40. package/app/modules/menuModule/menuCommandUsageRepository.js +109 -0
  41. package/app/modules/menuModule/menuDynamicService.js +511 -0
  42. package/app/modules/menuModule/menuDynamicService.test.js +141 -0
  43. package/app/modules/menuModule/menus.js +36 -5
  44. package/app/modules/playModule/AGENT.md +10 -5
  45. package/app/modules/playModule/commandConfig.json +74 -16
  46. package/app/modules/playModule/playCommandConstants.js +13 -7
  47. package/app/modules/playModule/playCommandCore.js +4 -6
  48. package/app/modules/playModule/{playCommandYtDlpClient.js → playCommandMediaClient.js} +684 -332
  49. package/app/modules/playModule/playConfigRuntime.js +5 -6
  50. package/app/modules/playModule/playModuleCriticalFlows.test.js +44 -59
  51. package/app/modules/quoteModule/AGENT.md +1 -1
  52. package/app/modules/quoteModule/commandConfig.json +29 -0
  53. package/app/modules/rpgPokemonModule/AGENT.md +1 -1
  54. package/app/modules/rpgPokemonModule/commandConfig.json +29 -0
  55. package/app/modules/statsModule/AGENT.md +1 -1
  56. package/app/modules/statsModule/commandConfig.json +58 -0
  57. package/app/modules/stickerModule/AGENT.md +1 -1
  58. package/app/modules/stickerModule/commandConfig.json +145 -0
  59. package/app/modules/stickerPackModule/AGENT.md +1 -1
  60. package/app/modules/stickerPackModule/autoPackCollectorService.js +5 -1
  61. package/app/modules/stickerPackModule/commandConfig.json +29 -0
  62. package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +1 -1
  63. package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +78 -57
  64. package/app/modules/stickerPackModule/stickerPackService.js +13 -6
  65. package/app/modules/systemMetricsModule/AGENT.md +1 -1
  66. package/app/modules/systemMetricsModule/commandConfig.json +29 -0
  67. package/app/modules/tiktokModule/AGENT.md +1 -1
  68. package/app/modules/tiktokModule/commandConfig.json +29 -0
  69. package/app/modules/userModule/AGENT.md +1 -1
  70. package/app/modules/userModule/commandConfig.json +29 -0
  71. package/app/modules/waifuPicsModule/AGENT.md +57 -27
  72. package/app/modules/waifuPicsModule/commandConfig.json +87 -0
  73. package/app/observability/metrics.js +136 -0
  74. package/app/services/ai/commandConfigEnrichmentService.js +229 -47
  75. package/app/services/ai/geminiService.js +131 -7
  76. package/app/services/ai/geminiService.test.js +59 -2
  77. package/app/services/ai/moduleAiHelpCoreService.js +33 -4
  78. package/app/services/group/groupMetadataService.js +24 -1
  79. package/app/services/infra/dbWriteQueue.js +51 -21
  80. package/app/services/messaging/newsBroadcastService.js +843 -27
  81. package/app/services/multiSession/assignmentBalancerService.js +452 -0
  82. package/app/services/multiSession/groupOwnershipRepository.js +346 -0
  83. package/app/services/multiSession/groupOwnershipService.js +809 -0
  84. package/app/services/multiSession/groupOwnershipService.test.js +317 -0
  85. package/app/services/multiSession/sessionRegistryService.js +239 -0
  86. package/app/store/aiPromptStore.js +36 -19
  87. package/app/store/groupConfigStore.js +41 -5
  88. package/app/store/premiumUserStore.js +21 -7
  89. package/app/utils/antiLink/antiLinkModule.js +391 -25
  90. package/app/workers/aiHelperContinuousLearningWorker.js +512 -0
  91. package/database/index.js +6 -0
  92. package/database/migrations/20260307_d0_hardening_down.sql +1 -1
  93. package/database/migrations/20260314_d7_canonical_sender_down.sql +1 -1
  94. package/database/migrations/20260406_d30_security_analytics_down.sql +1 -1
  95. package/database/migrations/20260411_d35_group_community_metadata_down.sql +59 -0
  96. package/database/migrations/20260411_d35_group_community_metadata_up.sql +62 -0
  97. package/database/migrations/20260412_d36_system_config_tables_down.sql +32 -0
  98. package/database/migrations/20260412_d36_system_config_tables_up.sql +66 -0
  99. package/database/migrations/20260413_d37_group_user_warnings_down.sql +11 -0
  100. package/database/migrations/20260413_d37_group_user_warnings_up.sql +24 -0
  101. package/database/migrations/20260414_d38_multi_session_foundation_down.sql +72 -0
  102. package/database/migrations/20260414_d38_multi_session_foundation_up.sql +125 -0
  103. package/database/migrations/20260414_d39_multi_session_cutover_down.sql +103 -0
  104. package/database/migrations/20260414_d39_multi_session_cutover_up.sql +83 -0
  105. package/database/schema.sql +102 -1
  106. package/docker-compose.yml +4 -1
  107. package/docs/compliance/acceptable-use-policy-2026-03-07.md +1 -1
  108. package/docs/compliance/privacy-policy-2026-03-07.md +2 -2
  109. package/docs/security/dsar-lgpd-runbook-2026-03-07.md +1 -1
  110. package/docs/security/network-hardening-runbook-2026-03-07.md +53 -0
  111. package/docs/security/omnizap-static-security-headers.conf +25 -0
  112. package/ecosystem.prod.config.cjs +31 -11
  113. package/index.js +52 -18
  114. package/observability/alert-rules.yml +20 -0
  115. package/observability/grafana/dashboards/omnizap-system-admin.json +229 -0
  116. package/observability/mysql-setup.sql +4 -4
  117. package/observability/system-admin-observability.md +26 -0
  118. package/package.json +14 -6
  119. package/public/comandos/commands-catalog.json +2253 -78
  120. package/public/css/payments-react.css +478 -0
  121. package/public/js/apps/commandsReactApp.js +267 -87
  122. package/public/js/apps/createPackApp.js +3 -3
  123. package/public/js/apps/homeReactApp.js +2 -2
  124. package/public/js/apps/paymentsCancelReactApp.js +45 -0
  125. package/public/js/apps/paymentsReactApp.js +399 -0
  126. package/public/js/apps/paymentsSuccessReactApp.js +148 -0
  127. package/public/js/apps/stickersApp.js +255 -103
  128. package/public/js/apps/termsReactApp.js +57 -8
  129. package/public/js/apps/userPasswordResetReactApp.js +406 -0
  130. package/public/js/apps/userReactApp.js +96 -47
  131. package/public/js/apps/userSystemAdmReactApp.js +1506 -0
  132. package/public/pages/pagamentos-cancelado.html +21 -0
  133. package/public/pages/pagamentos-sucesso.html +21 -0
  134. package/public/pages/pagamentos.html +30 -0
  135. package/public/pages/politica-de-privacidade.html +1 -1
  136. package/public/pages/stickers.html +5 -5
  137. package/public/pages/termos-de-uso-texto-integral.html +1 -1
  138. package/public/pages/termos-de-uso.html +1 -1
  139. package/public/pages/user-password-reset.html +3 -4
  140. package/public/pages/user-systemadm.html +8 -462
  141. package/public/pages/user.html +1 -1
  142. package/scripts/clear-whatsapp-session.sh +123 -0
  143. package/scripts/core-ai-mode.mjs +163 -0
  144. package/scripts/deploy.sh +13 -0
  145. package/scripts/enrich-command-config-ux-openai.mjs +492 -0
  146. package/scripts/generate-commands-catalog.mjs +155 -0
  147. package/scripts/new-whatsapp-session.sh +564 -0
  148. package/scripts/security-web-surface-check.mjs +218 -0
  149. package/server/controllers/admin/adminPanelHandlers.js +253 -3
  150. package/server/controllers/admin/systemAdminController.js +254 -0
  151. package/server/controllers/payments/paymentsController.js +731 -0
  152. package/server/controllers/sticker/stickerCatalogController.js +9 -23
  153. package/server/controllers/system/contactController.js +9 -17
  154. package/server/controllers/system/stickerCatalogSystemContext.js +27 -6
  155. package/server/controllers/system/systemController.js +228 -1
  156. package/server/controllers/userController.js +6 -0
  157. package/server/email/emailAutomationRuntime.js +36 -1
  158. package/server/email/emailAutomationService.js +42 -1
  159. package/server/email/emailTemplateService.js +140 -33
  160. package/server/http/httpRequestUtils.js +18 -14
  161. package/server/http/httpServer.js +8 -4
  162. package/server/middleware/securityHeaders.js +35 -3
  163. package/server/routes/admin/systemAdminRouter.js +6 -0
  164. package/server/routes/indexRouter.js +50 -6
  165. package/server/routes/observability/grafanaProxyRouter.js +254 -0
  166. package/server/routes/payments/paymentsRouter.js +47 -0
  167. package/server/routes/static/staticPageRouter.js +30 -1
  168. package/server/utils/publicContact.js +31 -0
  169. package/utils/whatsapp/contactEnv.js +39 -0
  170. package/vite.config.mjs +5 -1
  171. package/app/modules/playModule/local/installYtDlp.js +0 -25
  172. package/app/modules/playModule/local/ytDlpInstaller.js +0 -28
@@ -2,14 +2,50 @@ import pino from 'pino';
2
2
  import { criarInstanciaLogger } from '@kaikybrofc/logger-module';
3
3
  import baseLogger from '#logger';
4
4
 
5
+ /**
6
+ * Label padrão para logger do Baileys.
7
+ * @type {string}
8
+ */
5
9
  const DEFAULT_BAILEYS_LABEL = 'baileys';
10
+ /**
11
+ * Modo padrão de logger raiz.
12
+ * @type {'child'|'instance'}
13
+ */
6
14
  const DEFAULT_BAILEYS_LOGGER_MODE = 'child';
15
+ /**
16
+ * Modos aceitos de logger raiz.
17
+ * @type {Set<string>}
18
+ */
7
19
  const BAILEYS_LOGGER_MODES = new Set(['child', 'instance']);
20
+ /**
21
+ * Modo padrão do logger de socket.
22
+ * @type {'silent'|'pino'|'bridge'}
23
+ */
8
24
  const DEFAULT_BAILEYS_SOCKET_LOGGER_MODE = 'silent';
25
+ /**
26
+ * Modos aceitos de logger de socket.
27
+ * @type {Set<string>}
28
+ */
9
29
  const BAILEYS_SOCKET_LOGGER_MODES = new Set(['silent', 'pino', 'bridge']);
30
+ /**
31
+ * Nível padrão para pino.
32
+ * @type {string}
33
+ */
10
34
  const DEFAULT_PINO_LEVEL = 'info';
35
+ /**
36
+ * Nível pino para suprimir logs.
37
+ * @type {string}
38
+ */
11
39
  const DEFAULT_PINO_SILENT_LEVEL = 'silent';
40
+ /**
41
+ * Conjunto de níveis pino válidos.
42
+ * @type {Set<string>}
43
+ */
12
44
  const PINO_LEVELS = new Set(['trace', 'debug', 'info', 'warn', 'error', 'fatal', 'silent']);
45
+ /**
46
+ * Prioridade numérica dos níveis pino.
47
+ * @type {Readonly<Record<string, number>>}
48
+ */
13
49
  const PINO_LEVEL_PRIORITY = Object.freeze({
14
50
  trace: 10,
15
51
  debug: 20,
@@ -19,6 +55,10 @@ const PINO_LEVEL_PRIORITY = Object.freeze({
19
55
  fatal: 60,
20
56
  silent: Number.POSITIVE_INFINITY,
21
57
  });
58
+ /**
59
+ * Mapeamento de níveis do bridge pino->winston.
60
+ * @type {Readonly<Record<string, string>>}
61
+ */
22
62
  const BAILEYS_TO_WINSTON_LEVEL = Object.freeze({
23
63
  trace: 'debug',
24
64
  debug: 'debug',
@@ -26,6 +66,10 @@ const BAILEYS_TO_WINSTON_LEVEL = Object.freeze({
26
66
  warn: 'warn',
27
67
  error: 'error',
28
68
  });
69
+ /**
70
+ * Prioridade por método de log esperado pelo Baileys.
71
+ * @type {Readonly<Record<string, number>>}
72
+ */
29
73
  const BAILEYS_LOG_METHOD_PRIORITY = Object.freeze({
30
74
  trace: 10,
31
75
  debug: 20,
@@ -34,6 +78,12 @@ const BAILEYS_LOG_METHOD_PRIORITY = Object.freeze({
34
78
  error: 50,
35
79
  });
36
80
 
81
+ /**
82
+ * Interpreta valor de ambiente booleano.
83
+ * @param {unknown} value
84
+ * @param {boolean} fallback
85
+ * @returns {boolean}
86
+ */
37
87
  const parseEnvBool = (value, fallback) => {
38
88
  if (value === undefined || value === null || value === '') return fallback;
39
89
  const normalized = String(value).trim().toLowerCase();
@@ -42,6 +92,13 @@ const parseEnvBool = (value, fallback) => {
42
92
  return fallback;
43
93
  };
44
94
 
95
+ /**
96
+ * Faz parse de JSON objeto com fallback seguro.
97
+ * @param {unknown} value
98
+ * @param {Record<string, any>} [fallback={}]
99
+ * @param {string} [context='JSON']
100
+ * @returns {Record<string, any>}
101
+ */
45
102
  const parseJsonObject = (value, fallback = {}, context = 'JSON') => {
46
103
  if (value === undefined || value === null || String(value).trim() === '') {
47
104
  return { ...fallback };
@@ -61,6 +118,11 @@ const parseJsonObject = (value, fallback = {}, context = 'JSON') => {
61
118
  }
62
119
  };
63
120
 
121
+ /**
122
+ * Faz parse de definições de transportes customizados.
123
+ * @param {unknown} value
124
+ * @returns {Array<{type: string, options: Record<string, any>}>|undefined}
125
+ */
64
126
  const parseTransportDefinitions = (value) => {
65
127
  if (value === undefined || value === null || String(value).trim() === '') {
66
128
  return undefined;
@@ -80,6 +142,12 @@ const parseTransportDefinitions = (value) => {
80
142
  }
81
143
  };
82
144
 
145
+ /**
146
+ * Normaliza modo do logger raiz.
147
+ * @param {unknown} value
148
+ * @param {'child'|'instance'} [fallback=DEFAULT_BAILEYS_LOGGER_MODE]
149
+ * @returns {'child'|'instance'}
150
+ */
83
151
  const normalizeLoggerMode = (value, fallback = DEFAULT_BAILEYS_LOGGER_MODE) => {
84
152
  const normalized = String(value || '')
85
153
  .trim()
@@ -87,6 +155,12 @@ const normalizeLoggerMode = (value, fallback = DEFAULT_BAILEYS_LOGGER_MODE) => {
87
155
  return BAILEYS_LOGGER_MODES.has(normalized) ? normalized : fallback;
88
156
  };
89
157
 
158
+ /**
159
+ * Normaliza modo do logger de socket.
160
+ * @param {unknown} value
161
+ * @param {'silent'|'pino'|'bridge'} [fallback=DEFAULT_BAILEYS_SOCKET_LOGGER_MODE]
162
+ * @returns {'silent'|'pino'|'bridge'}
163
+ */
90
164
  const normalizeSocketLoggerMode = (value, fallback = DEFAULT_BAILEYS_SOCKET_LOGGER_MODE) => {
91
165
  const normalized = String(value || '')
92
166
  .trim()
@@ -94,6 +168,12 @@ const normalizeSocketLoggerMode = (value, fallback = DEFAULT_BAILEYS_SOCKET_LOGG
94
168
  return BAILEYS_SOCKET_LOGGER_MODES.has(normalized) ? normalized : fallback;
95
169
  };
96
170
 
171
+ /**
172
+ * Normaliza label de logger.
173
+ * @param {unknown} value
174
+ * @param {string} [fallback=DEFAULT_BAILEYS_LABEL]
175
+ * @returns {string}
176
+ */
97
177
  const normalizeLabel = (value, fallback = DEFAULT_BAILEYS_LABEL) => {
98
178
  const normalized = String(value || '')
99
179
  .trim()
@@ -101,6 +181,12 @@ const normalizeLabel = (value, fallback = DEFAULT_BAILEYS_LABEL) => {
101
181
  return normalized || fallback;
102
182
  };
103
183
 
184
+ /**
185
+ * Normaliza nível pino para um valor aceito.
186
+ * @param {unknown} value
187
+ * @param {string} [fallback=DEFAULT_PINO_LEVEL]
188
+ * @returns {string}
189
+ */
104
190
  const normalizePinoLevel = (value, fallback = DEFAULT_PINO_LEVEL) => {
105
191
  const normalized = String(value || '')
106
192
  .trim()
@@ -108,6 +194,11 @@ const normalizePinoLevel = (value, fallback = DEFAULT_PINO_LEVEL) => {
108
194
  return PINO_LEVELS.has(normalized) ? normalized : fallback;
109
195
  };
110
196
 
197
+ /**
198
+ * Converte nível estilo winston para nível pino.
199
+ * @param {unknown} value
200
+ * @returns {string}
201
+ */
111
202
  const mapWinstonLevelToPinoLevel = (value) => {
112
203
  const normalized = String(value || '')
113
204
  .trim()
@@ -123,6 +214,12 @@ const mapWinstonLevelToPinoLevel = (value) => {
123
214
  return DEFAULT_PINO_LEVEL;
124
215
  };
125
216
 
217
+ /**
218
+ * Verifica se um método de log deve ser emitido no nível atual.
219
+ * @param {string} level
220
+ * @param {string} method
221
+ * @returns {boolean}
222
+ */
126
223
  const shouldEmitByPinoLevel = (level, method) => {
127
224
  const normalizedLevel = normalizePinoLevel(level, DEFAULT_PINO_LEVEL);
128
225
  const threshold = PINO_LEVEL_PRIORITY[normalizedLevel] ?? PINO_LEVEL_PRIORITY[DEFAULT_PINO_LEVEL];
@@ -130,11 +227,21 @@ const shouldEmitByPinoLevel = (level, method) => {
130
227
  return methodPriority >= threshold;
131
228
  };
132
229
 
230
+ /**
231
+ * Resolve nome-base de serviço para metadados de logger.
232
+ * @returns {string}
233
+ */
133
234
  const resolveBaseServiceName = () => {
134
235
  const raw = String(process.env.name || process.env.ECOSYSTEM_NAME || '').trim();
135
236
  return raw || 'sistema';
136
237
  };
137
238
 
239
+ /**
240
+ * Cria child logger quando suportado.
241
+ * @param {any} logger
242
+ * @param {Record<string, any>} defaultMeta
243
+ * @returns {any}
244
+ */
138
245
  const createLoggerChild = (logger, defaultMeta) => {
139
246
  if (logger && typeof logger.child === 'function') {
140
247
  return logger.child(defaultMeta);
@@ -142,6 +249,20 @@ const createLoggerChild = (logger, defaultMeta) => {
142
249
  return logger || baseLogger;
143
250
  };
144
251
 
252
+ /**
253
+ * Resolve configuração do logger raiz do Baileys.
254
+ * @param {Record<string, any>} [overrides={}]
255
+ * @returns {{
256
+ * mode: 'child'|'instance',
257
+ * level?: string,
258
+ * label: string,
259
+ * service: string,
260
+ * defaultMeta: Record<string, any>,
261
+ * transportDefinitions?: Array<{type: string, options: Record<string, any>}>,
262
+ * transports?: any[],
263
+ * format?: any
264
+ * }}
265
+ */
145
266
  const resolveBaileysLoggerConfig = (overrides = {}) => {
146
267
  const mode = normalizeLoggerMode(overrides.mode ?? process.env.BAILEYS_LOGGER_MODE, DEFAULT_BAILEYS_LOGGER_MODE);
147
268
  const level = String(overrides.level ?? process.env.BAILEYS_LOGGER_LEVEL ?? '').trim() || undefined;
@@ -173,6 +294,11 @@ const resolveBaileysLoggerConfig = (overrides = {}) => {
173
294
  };
174
295
  };
175
296
 
297
+ /**
298
+ * Resolve configuração do logger de socket do Baileys.
299
+ * @param {Record<string, any>} [overrides={}]
300
+ * @returns {{mode: 'silent'|'pino'|'bridge', level: string, base: Record<string, any>, options: Record<string, any>}}
301
+ */
176
302
  const resolveBaileysSocketLoggerConfig = (overrides = {}) => {
177
303
  const mode = normalizeSocketLoggerMode(overrides.mode ?? process.env.BAILEYS_SOCKET_LOGGER_MODE, DEFAULT_BAILEYS_SOCKET_LOGGER_MODE);
178
304
  const fallbackLevel = mode === 'silent' ? DEFAULT_PINO_SILENT_LEVEL : DEFAULT_PINO_LEVEL;
@@ -199,6 +325,11 @@ const resolveBaileysSocketLoggerConfig = (overrides = {}) => {
199
325
  };
200
326
  };
201
327
 
328
+ /**
329
+ * Cria logger raiz conforme configuração resolvida.
330
+ * @param {Record<string, any>} [overrides={}]
331
+ * @returns {any}
332
+ */
202
333
  const createConfiguredBaileysLogger = (overrides = {}) => {
203
334
  const config = resolveBaileysLoggerConfig(overrides);
204
335
 
@@ -219,12 +350,23 @@ const createConfiguredBaileysLogger = (overrides = {}) => {
219
350
  return childLogger;
220
351
  };
221
352
 
353
+ /**
354
+ * Serializa erro para metadados seguros de log.
355
+ * @param {any} error
356
+ * @returns {{errorName: string, errorMessage: string, errorStack: string|undefined}}
357
+ */
222
358
  const serializeError = (error) => ({
223
359
  errorName: error?.name || 'Error',
224
360
  errorMessage: error?.message || String(error),
225
361
  errorStack: error?.stack,
226
362
  });
227
363
 
364
+ /**
365
+ * Resolve mensagem e metadados de uma chamada de log.
366
+ * @param {any} obj
367
+ * @param {any} msg
368
+ * @returns {{message: string, metadata?: Record<string, any>}}
369
+ */
228
370
  const resolveLogEntry = (obj, msg) => {
229
371
  const providedMessage = typeof msg === 'string' ? msg.trim() : '';
230
372
  let message = providedMessage;
@@ -259,6 +401,14 @@ const resolveLogEntry = (obj, msg) => {
259
401
  };
260
402
  };
261
403
 
404
+ /**
405
+ * Escreve log no logger alvo mapeando níveis do Baileys.
406
+ * @param {any} targetLogger
407
+ * @param {string} method
408
+ * @param {any} obj
409
+ * @param {any} msg
410
+ * @returns {void}
411
+ */
262
412
  const writeBridgeLog = (targetLogger, method, obj, msg) => {
263
413
  const methodName = BAILEYS_TO_WINSTON_LEVEL[method] || 'info';
264
414
  const { message, metadata } = resolveLogEntry(obj, msg);
@@ -282,11 +432,21 @@ const writeBridgeLog = (targetLogger, method, obj, msg) => {
282
432
  }
283
433
  };
284
434
 
435
+ /**
436
+ * Cria adaptador estilo pino sobre logger base (bridge).
437
+ * @param {any} rootLogger
438
+ * @param {string} level
439
+ * @returns {any}
440
+ */
285
441
  const createBaileysSocketBridgeLogger = (rootLogger, level) => {
286
442
  const sharedState = {
287
443
  level: normalizePinoLevel(level, mapWinstonLevelToPinoLevel(rootLogger?.level)),
288
444
  };
289
445
 
446
+ /**
447
+ * @param {any} targetLogger
448
+ * @returns {any}
449
+ */
290
450
  const createAdapter = (targetLogger) => ({
291
451
  get level() {
292
452
  return sharedState.level;
@@ -327,6 +487,10 @@ const createBaileysSocketBridgeLogger = (rootLogger, level) => {
327
487
  let cachedBaileysRootLogger = null;
328
488
  let cachedBaileysSocketLogger = null;
329
489
 
490
+ /**
491
+ * Retorna logger raiz default com cache por processo.
492
+ * @returns {any}
493
+ */
330
494
  const getDefaultBaileysRootLogger = () => {
331
495
  if (!cachedBaileysRootLogger) {
332
496
  cachedBaileysRootLogger = createConfiguredBaileysLogger();
@@ -334,6 +498,11 @@ const getDefaultBaileysRootLogger = () => {
334
498
  return cachedBaileysRootLogger;
335
499
  };
336
500
 
501
+ /**
502
+ * Cria logger de socket configurado.
503
+ * @param {Record<string, any>} [overrides={}]
504
+ * @returns {any}
505
+ */
337
506
  const createConfiguredBaileysSocketLogger = (overrides = {}) => {
338
507
  const config = resolveBaileysSocketLoggerConfig(overrides);
339
508
  const mergedBase = {
@@ -357,6 +526,11 @@ const createConfiguredBaileysSocketLogger = (overrides = {}) => {
357
526
  return pino(pinoOptions);
358
527
  };
359
528
 
529
+ /**
530
+ * Retorna logger raiz do Baileys.
531
+ * @param {Record<string, any>} [overrides={}]
532
+ * @returns {any}
533
+ */
360
534
  export const createBaileysLogger = (overrides = {}) => {
361
535
  if (!overrides || Object.keys(overrides).length === 0) {
362
536
  return getDefaultBaileysRootLogger();
@@ -364,6 +538,12 @@ export const createBaileysLogger = (overrides = {}) => {
364
538
  return createConfiguredBaileysLogger(overrides);
365
539
  };
366
540
 
541
+ /**
542
+ * Cria logger filho com escopo e metadados adicionais.
543
+ * @param {string} scope
544
+ * @param {Record<string, any>} [metadata={}]
545
+ * @returns {any}
546
+ */
367
547
  export const createBaileysScopedLogger = (scope, metadata = {}) => {
368
548
  const rootLogger = getDefaultBaileysRootLogger();
369
549
  const rootLabel = resolveBaileysLoggerConfig().label;
@@ -376,6 +556,11 @@ export const createBaileysScopedLogger = (scope, metadata = {}) => {
376
556
  return createLoggerChild(rootLogger, scopedMeta);
377
557
  };
378
558
 
559
+ /**
560
+ * Retorna logger de socket do Baileys.
561
+ * @param {Record<string, any>} [overrides={}]
562
+ * @returns {any}
563
+ */
379
564
  export const createBaileysSocketLogger = (overrides = {}) => {
380
565
  if (!overrides || Object.keys(overrides).length === 0) {
381
566
  if (!cachedBaileysSocketLogger) {