@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.
- package/.env.example +78 -9
- package/.github/workflows/ci.yml +3 -3
- package/.github/workflows/security-runner-hardening.yml +1 -1
- package/.github/workflows/security-zap-full-scan.yml +1 -0
- package/app/config/index.js +6 -0
- package/app/configParts/adminIdentity.js +36 -7
- package/app/configParts/baileysConfig.js +343 -56
- package/app/configParts/groupUtils.js +226 -0
- package/app/configParts/loggerConfig.js +185 -0
- package/app/configParts/messagePersistenceService.js +307 -5
- package/app/configParts/sessionConfig.js +242 -0
- package/app/connection/baileysCompatibility.test.js +10 -1
- package/app/connection/baileysDbAuthState.js +205 -9
- package/app/connection/baileysLibsignalPatch.js +210 -0
- package/app/connection/groupOwnerWriteStateResolver.js +141 -0
- package/app/connection/socketController.js +694 -123
- package/app/connection/socketController.multiSession.test.js +128 -0
- package/app/controllers/messageController.js +1 -1
- package/app/controllers/messagePipeline/commandMiddleware.js +12 -10
- package/app/controllers/messagePipeline/conversationMiddleware.js +2 -1
- package/app/controllers/messagePipeline/messagePipelineMiddlewares.test.js +104 -0
- package/app/controllers/messagePipeline/preProcessingMiddlewares.js +96 -4
- package/app/controllers/messageProcessingPipeline.js +90 -9
- package/app/controllers/messageProcessingPipeline.test.js +202 -0
- package/app/modules/adminModule/AGENT.md +1 -1
- package/app/modules/adminModule/commandConfig.json +3318 -1347
- package/app/modules/adminModule/groupCommandHandlers.js +856 -14
- package/app/modules/adminModule/groupCommandHandlers.test.js +375 -9
- package/app/modules/adminModule/groupWarningRepository.js +152 -0
- package/app/modules/aiModule/AGENT.md +47 -30
- package/app/modules/aiModule/aiConfigRuntime.js +1 -0
- package/app/modules/aiModule/catCommand.js +132 -25
- package/app/modules/aiModule/commandConfig.json +114 -28
- package/app/modules/analyticsModule/messageAnalysisEventRepository.js +54 -6
- package/app/modules/gameModule/AGENT.md +1 -1
- package/app/modules/gameModule/commandConfig.json +29 -0
- package/app/modules/menuModule/AGENT.md +1 -1
- package/app/modules/menuModule/commandConfig.json +45 -10
- package/app/modules/menuModule/menuCatalogService.js +190 -0
- package/app/modules/menuModule/menuCommandUsageRepository.js +109 -0
- package/app/modules/menuModule/menuDynamicService.js +511 -0
- package/app/modules/menuModule/menuDynamicService.test.js +141 -0
- package/app/modules/menuModule/menus.js +36 -5
- package/app/modules/playModule/AGENT.md +10 -5
- package/app/modules/playModule/commandConfig.json +74 -16
- package/app/modules/playModule/playCommandConstants.js +13 -7
- package/app/modules/playModule/playCommandCore.js +4 -6
- package/app/modules/playModule/{playCommandYtDlpClient.js → playCommandMediaClient.js} +684 -332
- package/app/modules/playModule/playConfigRuntime.js +5 -6
- package/app/modules/playModule/playModuleCriticalFlows.test.js +44 -59
- package/app/modules/quoteModule/AGENT.md +1 -1
- package/app/modules/quoteModule/commandConfig.json +29 -0
- package/app/modules/rpgPokemonModule/AGENT.md +1 -1
- package/app/modules/rpgPokemonModule/commandConfig.json +29 -0
- package/app/modules/statsModule/AGENT.md +1 -1
- package/app/modules/statsModule/commandConfig.json +58 -0
- package/app/modules/stickerModule/AGENT.md +1 -1
- package/app/modules/stickerModule/commandConfig.json +145 -0
- package/app/modules/stickerPackModule/AGENT.md +1 -1
- package/app/modules/stickerPackModule/autoPackCollectorService.js +5 -1
- package/app/modules/stickerPackModule/commandConfig.json +29 -0
- package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +1 -1
- package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +78 -57
- package/app/modules/stickerPackModule/stickerPackService.js +13 -6
- package/app/modules/systemMetricsModule/AGENT.md +1 -1
- package/app/modules/systemMetricsModule/commandConfig.json +29 -0
- package/app/modules/tiktokModule/AGENT.md +1 -1
- package/app/modules/tiktokModule/commandConfig.json +29 -0
- package/app/modules/userModule/AGENT.md +1 -1
- package/app/modules/userModule/commandConfig.json +29 -0
- package/app/modules/waifuPicsModule/AGENT.md +57 -27
- package/app/modules/waifuPicsModule/commandConfig.json +87 -0
- package/app/observability/metrics.js +136 -0
- package/app/services/ai/commandConfigEnrichmentService.js +229 -47
- package/app/services/ai/geminiService.js +131 -7
- package/app/services/ai/geminiService.test.js +59 -2
- package/app/services/ai/moduleAiHelpCoreService.js +33 -4
- package/app/services/group/groupMetadataService.js +24 -1
- package/app/services/infra/dbWriteQueue.js +51 -21
- package/app/services/messaging/newsBroadcastService.js +843 -27
- package/app/services/multiSession/assignmentBalancerService.js +452 -0
- package/app/services/multiSession/groupOwnershipRepository.js +346 -0
- package/app/services/multiSession/groupOwnershipService.js +809 -0
- package/app/services/multiSession/groupOwnershipService.test.js +317 -0
- package/app/services/multiSession/sessionRegistryService.js +239 -0
- package/app/store/aiPromptStore.js +36 -19
- package/app/store/groupConfigStore.js +41 -5
- package/app/store/premiumUserStore.js +21 -7
- package/app/utils/antiLink/antiLinkModule.js +391 -25
- package/app/workers/aiHelperContinuousLearningWorker.js +512 -0
- package/database/index.js +6 -0
- package/database/migrations/20260307_d0_hardening_down.sql +1 -1
- package/database/migrations/20260314_d7_canonical_sender_down.sql +1 -1
- package/database/migrations/20260406_d30_security_analytics_down.sql +1 -1
- package/database/migrations/20260411_d35_group_community_metadata_down.sql +59 -0
- package/database/migrations/20260411_d35_group_community_metadata_up.sql +62 -0
- package/database/migrations/20260412_d36_system_config_tables_down.sql +32 -0
- package/database/migrations/20260412_d36_system_config_tables_up.sql +66 -0
- package/database/migrations/20260413_d37_group_user_warnings_down.sql +11 -0
- package/database/migrations/20260413_d37_group_user_warnings_up.sql +24 -0
- package/database/migrations/20260414_d38_multi_session_foundation_down.sql +72 -0
- package/database/migrations/20260414_d38_multi_session_foundation_up.sql +125 -0
- package/database/migrations/20260414_d39_multi_session_cutover_down.sql +103 -0
- package/database/migrations/20260414_d39_multi_session_cutover_up.sql +83 -0
- package/database/schema.sql +102 -1
- package/docker-compose.yml +4 -1
- package/docs/compliance/acceptable-use-policy-2026-03-07.md +1 -1
- package/docs/compliance/privacy-policy-2026-03-07.md +2 -2
- package/docs/security/dsar-lgpd-runbook-2026-03-07.md +1 -1
- package/docs/security/network-hardening-runbook-2026-03-07.md +53 -0
- package/docs/security/omnizap-static-security-headers.conf +25 -0
- package/ecosystem.prod.config.cjs +31 -11
- package/index.js +52 -18
- package/observability/alert-rules.yml +20 -0
- package/observability/grafana/dashboards/omnizap-system-admin.json +229 -0
- package/observability/mysql-setup.sql +4 -4
- package/observability/system-admin-observability.md +26 -0
- package/package.json +14 -6
- package/public/comandos/commands-catalog.json +2253 -78
- package/public/css/payments-react.css +478 -0
- package/public/js/apps/commandsReactApp.js +267 -87
- package/public/js/apps/createPackApp.js +3 -3
- package/public/js/apps/homeReactApp.js +2 -2
- package/public/js/apps/paymentsCancelReactApp.js +45 -0
- package/public/js/apps/paymentsReactApp.js +399 -0
- package/public/js/apps/paymentsSuccessReactApp.js +148 -0
- package/public/js/apps/stickersApp.js +255 -103
- package/public/js/apps/termsReactApp.js +57 -8
- package/public/js/apps/userPasswordResetReactApp.js +406 -0
- package/public/js/apps/userReactApp.js +96 -47
- package/public/js/apps/userSystemAdmReactApp.js +1506 -0
- package/public/pages/pagamentos-cancelado.html +21 -0
- package/public/pages/pagamentos-sucesso.html +21 -0
- package/public/pages/pagamentos.html +30 -0
- package/public/pages/politica-de-privacidade.html +1 -1
- package/public/pages/stickers.html +5 -5
- package/public/pages/termos-de-uso-texto-integral.html +1 -1
- package/public/pages/termos-de-uso.html +1 -1
- package/public/pages/user-password-reset.html +3 -4
- package/public/pages/user-systemadm.html +8 -462
- package/public/pages/user.html +1 -1
- package/scripts/clear-whatsapp-session.sh +123 -0
- package/scripts/core-ai-mode.mjs +163 -0
- package/scripts/deploy.sh +13 -0
- package/scripts/enrich-command-config-ux-openai.mjs +492 -0
- package/scripts/generate-commands-catalog.mjs +155 -0
- package/scripts/new-whatsapp-session.sh +564 -0
- package/scripts/security-web-surface-check.mjs +218 -0
- package/server/controllers/admin/adminPanelHandlers.js +253 -3
- package/server/controllers/admin/systemAdminController.js +254 -0
- package/server/controllers/payments/paymentsController.js +731 -0
- package/server/controllers/sticker/stickerCatalogController.js +9 -23
- package/server/controllers/system/contactController.js +9 -17
- package/server/controllers/system/stickerCatalogSystemContext.js +27 -6
- package/server/controllers/system/systemController.js +228 -1
- package/server/controllers/userController.js +6 -0
- package/server/email/emailAutomationRuntime.js +36 -1
- package/server/email/emailAutomationService.js +42 -1
- package/server/email/emailTemplateService.js +140 -33
- package/server/http/httpRequestUtils.js +18 -14
- package/server/http/httpServer.js +8 -4
- package/server/middleware/securityHeaders.js +35 -3
- package/server/routes/admin/systemAdminRouter.js +6 -0
- package/server/routes/indexRouter.js +50 -6
- package/server/routes/observability/grafanaProxyRouter.js +254 -0
- package/server/routes/payments/paymentsRouter.js +47 -0
- package/server/routes/static/staticPageRouter.js +30 -1
- package/server/utils/publicContact.js +31 -0
- package/utils/whatsapp/contactEnv.js +39 -0
- package/vite.config.mjs +5 -1
- package/app/modules/playModule/local/installYtDlp.js +0 -25
- 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) {
|