trompot 1.5.0 → 1.6.2

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 (144) hide show
  1. package/README.md +195 -20
  2. package/lib/bot/BotEvents.d.ts +2 -0
  3. package/lib/bot/BotEvents.js.map +1 -1
  4. package/lib/client/Client.js +93 -28
  5. package/lib/client/Client.js.map +1 -1
  6. package/lib/client/ClientFunctionHandler.js +39 -3
  7. package/lib/client/ClientFunctionHandler.js.map +1 -1
  8. package/lib/telegram/TelegramAuth.js +36 -1
  9. package/lib/telegram/TelegramAuth.js.map +1 -1
  10. package/lib/telegram/TelegramBot.d.ts +11 -0
  11. package/lib/telegram/TelegramBot.js +101 -15
  12. package/lib/telegram/TelegramBot.js.map +1 -1
  13. package/lib/telegram/TelegramEvents.d.ts +8 -1
  14. package/lib/telegram/TelegramEvents.js +67 -30
  15. package/lib/telegram/TelegramEvents.js.map +1 -1
  16. package/lib/telegram/TelegramSendingController.js +59 -17
  17. package/lib/telegram/TelegramSendingController.js.map +1 -1
  18. package/lib/telegram/TelegramToRompotConverter.js +44 -14
  19. package/lib/telegram/TelegramToRompotConverter.js.map +1 -1
  20. package/lib/wa/Auth.js +17 -5
  21. package/lib/wa/Auth.js.map +1 -1
  22. package/lib/wa/ConfigWAEvents.d.ts +6 -10
  23. package/lib/wa/ConfigWAEvents.js +220 -426
  24. package/lib/wa/ConfigWAEvents.js.map +1 -1
  25. package/lib/wa/ConvertWAMessage.js +28 -19
  26. package/lib/wa/ConvertWAMessage.js.map +1 -1
  27. package/lib/wa/ID.d.ts +10 -1
  28. package/lib/wa/ID.js +22 -2
  29. package/lib/wa/ID.js.map +1 -1
  30. package/lib/wa/WhatsAppBot.d.ts +58 -11
  31. package/lib/wa/WhatsAppBot.js +365 -648
  32. package/lib/wa/WhatsAppBot.js.map +1 -1
  33. package/lib/wa/constants/ConfigDefaults.d.ts +23 -0
  34. package/lib/wa/constants/ConfigDefaults.js +27 -0
  35. package/lib/wa/constants/ConfigDefaults.js.map +1 -0
  36. package/lib/wa/constants/DisconnectReasons.d.ts +24 -0
  37. package/lib/wa/constants/DisconnectReasons.js +36 -0
  38. package/lib/wa/constants/DisconnectReasons.js.map +1 -0
  39. package/lib/wa/constants/ErrorCodes.d.ts +28 -0
  40. package/lib/wa/constants/ErrorCodes.js +32 -0
  41. package/lib/wa/constants/ErrorCodes.js.map +1 -0
  42. package/lib/wa/constants/JIDPatterns.d.ts +23 -0
  43. package/lib/wa/constants/JIDPatterns.js +38 -0
  44. package/lib/wa/constants/JIDPatterns.js.map +1 -0
  45. package/lib/wa/constants/Timeouts.d.ts +11 -0
  46. package/lib/wa/constants/Timeouts.js +15 -0
  47. package/lib/wa/constants/Timeouts.js.map +1 -0
  48. package/lib/wa/core/ConnectionManager.d.ts +84 -0
  49. package/lib/wa/core/ConnectionManager.js +256 -0
  50. package/lib/wa/core/ConnectionManager.js.map +1 -0
  51. package/lib/wa/core/SessionManager.d.ts +29 -0
  52. package/lib/wa/core/SessionManager.js +155 -0
  53. package/lib/wa/core/SessionManager.js.map +1 -0
  54. package/lib/wa/core/StateManager.d.ts +49 -0
  55. package/lib/wa/core/StateManager.js +135 -0
  56. package/lib/wa/core/StateManager.js.map +1 -0
  57. package/lib/wa/events/CallEventHandler.d.ts +17 -0
  58. package/lib/wa/events/CallEventHandler.js +155 -0
  59. package/lib/wa/events/CallEventHandler.js.map +1 -0
  60. package/lib/wa/events/ChatEventHandler.d.ts +12 -0
  61. package/lib/wa/events/ChatEventHandler.js +74 -0
  62. package/lib/wa/events/ChatEventHandler.js.map +1 -0
  63. package/lib/wa/events/ConnectionEventHandler.d.ts +43 -0
  64. package/lib/wa/events/ConnectionEventHandler.js +305 -0
  65. package/lib/wa/events/ConnectionEventHandler.js.map +1 -0
  66. package/lib/wa/events/ContactEventHandler.d.ts +12 -0
  67. package/lib/wa/events/ContactEventHandler.js +55 -0
  68. package/lib/wa/events/ContactEventHandler.js.map +1 -0
  69. package/lib/wa/events/EventManager.d.ts +43 -0
  70. package/lib/wa/events/EventManager.js +198 -0
  71. package/lib/wa/events/EventManager.js.map +1 -0
  72. package/lib/wa/events/GroupEventHandler.d.ts +12 -0
  73. package/lib/wa/events/GroupEventHandler.js +74 -0
  74. package/lib/wa/events/GroupEventHandler.js.map +1 -0
  75. package/lib/wa/events/HistoryEventHandler.d.ts +16 -0
  76. package/lib/wa/events/HistoryEventHandler.js +101 -0
  77. package/lib/wa/events/HistoryEventHandler.js.map +1 -0
  78. package/lib/wa/events/LIDMappingEventHandler.d.ts +20 -0
  79. package/lib/wa/events/LIDMappingEventHandler.js +39 -0
  80. package/lib/wa/events/LIDMappingEventHandler.js.map +1 -0
  81. package/lib/wa/events/MessageEventHandler.d.ts +16 -0
  82. package/lib/wa/events/MessageEventHandler.js +218 -0
  83. package/lib/wa/events/MessageEventHandler.js.map +1 -0
  84. package/lib/wa/interfaces/ICacheService.d.ts +12 -0
  85. package/lib/wa/interfaces/ICacheService.js +3 -0
  86. package/lib/wa/interfaces/ICacheService.js.map +1 -0
  87. package/lib/wa/interfaces/IConnectionManager.d.ts +15 -0
  88. package/lib/wa/interfaces/IConnectionManager.js +3 -0
  89. package/lib/wa/interfaces/IConnectionManager.js.map +1 -0
  90. package/lib/wa/interfaces/IErrorHandler.d.ts +9 -0
  91. package/lib/wa/interfaces/IErrorHandler.js +3 -0
  92. package/lib/wa/interfaces/IErrorHandler.js.map +1 -0
  93. package/lib/wa/interfaces/ILoggerService.d.ts +13 -0
  94. package/lib/wa/interfaces/ILoggerService.js +3 -0
  95. package/lib/wa/interfaces/ILoggerService.js.map +1 -0
  96. package/lib/wa/interfaces/ISessionManager.d.ts +16 -0
  97. package/lib/wa/interfaces/ISessionManager.js +3 -0
  98. package/lib/wa/interfaces/ISessionManager.js.map +1 -0
  99. package/lib/wa/interfaces/IStateManager.d.ts +41 -0
  100. package/lib/wa/interfaces/IStateManager.js +3 -0
  101. package/lib/wa/interfaces/IStateManager.js.map +1 -0
  102. package/lib/wa/operations/ChatOperations.d.ts +117 -0
  103. package/lib/wa/operations/ChatOperations.js +349 -0
  104. package/lib/wa/operations/ChatOperations.js.map +1 -0
  105. package/lib/wa/operations/GroupOperations.d.ts +31 -0
  106. package/lib/wa/operations/GroupOperations.js +128 -0
  107. package/lib/wa/operations/GroupOperations.js.map +1 -0
  108. package/lib/wa/operations/MessageOperations.d.ts +69 -0
  109. package/lib/wa/operations/MessageOperations.js +335 -0
  110. package/lib/wa/operations/MessageOperations.js.map +1 -0
  111. package/lib/wa/operations/UserOperations.d.ts +100 -0
  112. package/lib/wa/operations/UserOperations.js +216 -0
  113. package/lib/wa/operations/UserOperations.js.map +1 -0
  114. package/lib/wa/services/CacheService.d.ts +45 -0
  115. package/lib/wa/services/CacheService.js +93 -0
  116. package/lib/wa/services/CacheService.js.map +1 -0
  117. package/lib/wa/services/ErrorHandler.d.ts +26 -0
  118. package/lib/wa/services/ErrorHandler.js +73 -0
  119. package/lib/wa/services/ErrorHandler.js.map +1 -0
  120. package/lib/wa/services/LIDMappingService.d.ts +42 -0
  121. package/lib/wa/services/LIDMappingService.js +132 -0
  122. package/lib/wa/services/LIDMappingService.js.map +1 -0
  123. package/lib/wa/services/LIDNormalizationService.d.ts +30 -0
  124. package/lib/wa/services/LIDNormalizationService.js +136 -0
  125. package/lib/wa/services/LIDNormalizationService.js.map +1 -0
  126. package/lib/wa/services/LoggerService.d.ts +44 -0
  127. package/lib/wa/services/LoggerService.js +85 -0
  128. package/lib/wa/services/LoggerService.js.map +1 -0
  129. package/lib/wa/services/PendingMessageQueue.d.ts +46 -0
  130. package/lib/wa/services/PendingMessageQueue.js +119 -0
  131. package/lib/wa/services/PendingMessageQueue.js.map +1 -0
  132. package/lib/wa/services/RetryService.d.ts +25 -0
  133. package/lib/wa/services/RetryService.js +59 -0
  134. package/lib/wa/services/RetryService.js.map +1 -0
  135. package/lib/wa/utils/ConfigValidator.d.ts +15 -0
  136. package/lib/wa/utils/ConfigValidator.js +66 -0
  137. package/lib/wa/utils/ConfigValidator.js.map +1 -0
  138. package/lib/wa/utils/ErrorUtils.d.ts +29 -0
  139. package/lib/wa/utils/ErrorUtils.js +66 -0
  140. package/lib/wa/utils/ErrorUtils.js.map +1 -0
  141. package/lib/wa/utils/Validation.d.ts +18 -0
  142. package/lib/wa/utils/Validation.js +40 -0
  143. package/lib/wa/utils/Validation.js.map +1 -0
  144. package/package.json +4 -3
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectionManager = void 0;
4
+ const baileys_1 = require("@whiskeysockets/baileys");
5
+ const ErrorCodes_1 = require("../constants/ErrorCodes");
6
+ const Timeouts_1 = require("../constants/Timeouts");
7
+ class ConnectionManager {
8
+ constructor(stateManager, sessionManager, retryService, errorHandler, logger) {
9
+ this.socket = null;
10
+ this.status = 'disconnected';
11
+ this.reconnectAttempts = 0;
12
+ this.maxReconnectAttempts = 10;
13
+ this.cleanupFunctions = [];
14
+ this.connectionConfig = null; // Tornado público para acesso em createSocket
15
+ this.stateManager = stateManager;
16
+ this.sessionManager = sessionManager;
17
+ this.retryService = retryService;
18
+ this.errorHandler = errorHandler;
19
+ this.logger = logger;
20
+ }
21
+ /**
22
+ * Conecta ao WhatsApp
23
+ */
24
+ async connect(config) {
25
+ if (this.status === 'connected' || this.status === 'connecting') {
26
+ throw new Error('Já está conectado ou conectando');
27
+ }
28
+ this.setStatus('connecting');
29
+ this.connectionConfig = config;
30
+ try {
31
+ // Valida sessão antes de conectar (se auth estiver disponível)
32
+ // Cria socket
33
+ this.socket = (0, baileys_1.makeWASocket)(config);
34
+ // Configura eventos
35
+ this.setupEventListeners();
36
+ // Aguarda conexão
37
+ await this.waitForConnection();
38
+ this.setStatus('connected');
39
+ this.reconnectAttempts = 0;
40
+ // Log removido - conexão bem-sucedida é indicada pelo evento 'open'
41
+ return this.socket;
42
+ }
43
+ catch (error) {
44
+ this.setStatus('disconnected');
45
+ this.errorHandler.handle(error, 'ConnectionManager.connect');
46
+ throw error;
47
+ }
48
+ }
49
+ /**
50
+ * Desconecta do WhatsApp
51
+ */
52
+ async disconnect(reason = baileys_1.DisconnectReason.connectionClosed) {
53
+ // Log removido - desconexão é indicada pelo evento 'close'
54
+ this.setStatus('disconnected');
55
+ // Limpa todos os listeners
56
+ this.cleanup();
57
+ // Fecha socket
58
+ if (this.socket) {
59
+ try {
60
+ // socket.end() não aceita número, apenas fecha a conexão
61
+ this.socket.end(undefined);
62
+ }
63
+ catch (error) {
64
+ this.errorHandler.handle(error, 'ConnectionManager.disconnect');
65
+ }
66
+ this.socket = null;
67
+ }
68
+ }
69
+ /**
70
+ * Reconecta ao WhatsApp
71
+ */
72
+ async reconnect(force = false) {
73
+ if (this.status === 'connecting' || this.status === 'reconnecting') {
74
+ return;
75
+ }
76
+ if (this.reconnectAttempts >= this.maxReconnectAttempts && !force) {
77
+ this.logger.error('Número máximo de tentativas de reconexão atingido');
78
+ this.setStatus('disconnected');
79
+ return;
80
+ }
81
+ if (!this.connectionConfig) {
82
+ this.logger.error('Não é possível reconectar: configuração não disponível');
83
+ return;
84
+ }
85
+ this.setStatus('reconnecting');
86
+ this.reconnectAttempts++;
87
+ const delay = this.retryService.getBackoffDelay(this.reconnectAttempts);
88
+ // Log removido - reconexão é indicada pelo evento 'reconnecting'
89
+ await new Promise(resolve => setTimeout(resolve, delay));
90
+ try {
91
+ // Limpa conexão anterior
92
+ await this.disconnect();
93
+ // Reconecta
94
+ await this.connect(this.connectionConfig);
95
+ }
96
+ catch (error) {
97
+ this.errorHandler.handle(error, 'ConnectionManager.reconnect');
98
+ // Tenta novamente após delay
99
+ if (this.reconnectAttempts < this.maxReconnectAttempts) {
100
+ await this.reconnect();
101
+ }
102
+ }
103
+ }
104
+ /**
105
+ * Configura listeners de eventos
106
+ * NOTA: Não escuta connection.update diretamente para evitar duplicação
107
+ * O ConfigWAEvents é o único responsável por escutar connection.update
108
+ * Este método pode ser usado para outros listeners se necessário
109
+ */
110
+ setupEventListeners() {
111
+ if (!this.socket)
112
+ return;
113
+ // REMOVIDO: Listener duplicado de connection.update
114
+ // O ConfigWAEvents já escuta este evento e gerencia toda a lógica
115
+ // ConnectionManager não precisa escutar diretamente para evitar processamento duplicado
116
+ // Nota: Baileys não tem evento 'error' direto no ev
117
+ // Erros são tratados através de connection.update com connection: 'close'
118
+ }
119
+ /**
120
+ * Trata atualizações de conexão
121
+ * NOTA: Este método não é mais chamado automaticamente
122
+ * Pode ser chamado manualmente se necessário, mas a lógica principal
123
+ * está no ConfigWAEvents para evitar duplicação
124
+ */
125
+ handleConnectionUpdate(update) {
126
+ var _a;
127
+ if (!update.connection)
128
+ return;
129
+ switch (update.connection) {
130
+ case 'connecting':
131
+ this.setStatus('connecting');
132
+ this.stateManager.setLastConnectionUpdateDate(Date.now());
133
+ break;
134
+ case 'open':
135
+ this.setStatus('connected');
136
+ this.reconnectAttempts = 0;
137
+ this.stateManager.setLastDisconnectError(undefined);
138
+ this.stateManager.setLastConnectionUpdateDate(Date.now());
139
+ break;
140
+ case 'close':
141
+ this.handleDisconnect((_a = update.lastDisconnect) === null || _a === void 0 ? void 0 : _a.error).catch(error => {
142
+ this.errorHandler.handle(error, 'ConnectionManager.handleDisconnect');
143
+ });
144
+ break;
145
+ }
146
+ // Atualiza estado global
147
+ this.stateManager.updateConnectionState(update);
148
+ }
149
+ /**
150
+ * Trata desconexões
151
+ */
152
+ async handleDisconnect(error) {
153
+ var _a;
154
+ const statusCode = ((_a = error === null || error === void 0 ? void 0 : error.output) === null || _a === void 0 ? void 0 : _a.statusCode) || baileys_1.DisconnectReason.connectionClosed;
155
+ // Log removido - desconexão é indicada pelo evento 'close'
156
+ // Atualiza estado
157
+ this.stateManager.setLastDisconnectError(statusCode);
158
+ this.setStatus('disconnected');
159
+ // Decide se deve reconectar
160
+ if (this.shouldReconnect(statusCode)) {
161
+ await this.reconnect();
162
+ }
163
+ // Log removido - decisão de reconexão é silenciosa
164
+ }
165
+ /**
166
+ * Decide se deve tentar reconectar baseado no código de erro
167
+ */
168
+ shouldReconnect(statusCode) {
169
+ // Não reconecta apenas para erros que indicam token expirado (sessão realmente inválida)
170
+ // 428 foi removido - é erro temporário que permite reconexão
171
+ const nonReconnectableErrors = [
172
+ baileys_1.DisconnectReason.loggedOut, // 401 - Token expirado
173
+ ErrorCodes_1.ErrorCodes.LOGGED_OUT_ALT, // 421 - Token expirado (alternativo)
174
+ ];
175
+ return !nonReconnectableErrors.includes(statusCode);
176
+ }
177
+ /**
178
+ * Aguarda conexão ser estabelecida
179
+ */
180
+ async waitForConnection() {
181
+ return new Promise((resolve, reject) => {
182
+ if (!this.socket) {
183
+ reject(new Error('Socket não inicializado'));
184
+ return;
185
+ }
186
+ const timeout = setTimeout(() => {
187
+ cleanup();
188
+ reject(new Error('Timeout ao aguardar conexão'));
189
+ }, Timeouts_1.Timeouts.CONNECTION_WAIT);
190
+ const cleanup = () => {
191
+ clearTimeout(timeout);
192
+ if (this.socket) {
193
+ this.socket.ev.off('connection.update', connectionHandler);
194
+ }
195
+ };
196
+ const connectionHandler = (update) => {
197
+ var _a;
198
+ if (update.connection === 'open') {
199
+ cleanup();
200
+ resolve();
201
+ }
202
+ else if (update.connection === 'close') {
203
+ cleanup();
204
+ const error = (_a = update.lastDisconnect) === null || _a === void 0 ? void 0 : _a.error;
205
+ reject(error || new Error('Conexão fechada'));
206
+ }
207
+ };
208
+ this.socket.ev.on('connection.update', connectionHandler);
209
+ // Se já estiver conectado
210
+ if (this.socket.ws.isOpen) {
211
+ cleanup();
212
+ resolve();
213
+ }
214
+ });
215
+ }
216
+ /**
217
+ * Limpa todos os listeners
218
+ */
219
+ cleanup() {
220
+ this.cleanupFunctions.forEach(cleanup => cleanup());
221
+ this.cleanupFunctions = [];
222
+ }
223
+ /**
224
+ * Atualiza status e notifica
225
+ */
226
+ setStatus(status) {
227
+ this.status = status;
228
+ this.stateManager.setConnectionStatus(status);
229
+ }
230
+ /**
231
+ * Retorna o socket atual
232
+ */
233
+ getSocket() {
234
+ return this.socket;
235
+ }
236
+ /**
237
+ * Retorna o status atual
238
+ */
239
+ getStatus() {
240
+ return this.status;
241
+ }
242
+ /**
243
+ * Retorna o número de tentativas de reconexão
244
+ */
245
+ getReconnectAttempts() {
246
+ return this.reconnectAttempts;
247
+ }
248
+ /**
249
+ * Reseta o número de tentativas de reconexão
250
+ */
251
+ resetReconnectAttempts() {
252
+ this.reconnectAttempts = 0;
253
+ }
254
+ }
255
+ exports.ConnectionManager = ConnectionManager;
256
+ //# sourceMappingURL=ConnectionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionManager.js","sourceRoot":"","sources":["../../../src/wa/core/ConnectionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { AuthenticationCreds } from '@whiskeysockets/baileys';
2
+ import IAuth from '../../client/IAuth';
3
+ import { ILoggerService } from '../interfaces/ILoggerService';
4
+ import { ISessionManager, SessionValidationResult } from '../interfaces/ISessionManager';
5
+ export declare class SessionManager implements ISessionManager {
6
+ private logger;
7
+ constructor(logger: ILoggerService);
8
+ /**
9
+ * Valida se a sessão é válida
10
+ */
11
+ validateSession(auth: IAuth): Promise<SessionValidationResult>;
12
+ /**
13
+ * Limpa sessão inválida completamente
14
+ * Remove creds.json e todas as keys relacionadas
15
+ */
16
+ clearInvalidSession(auth: IAuth): Promise<void>;
17
+ /**
18
+ * Salva credenciais
19
+ */
20
+ saveCredentials(auth: IAuth, creds: Partial<AuthenticationCreds>): Promise<void>;
21
+ /**
22
+ * Carrega credenciais
23
+ */
24
+ loadCredentials(auth: IAuth): Promise<AuthenticationCreds | null>;
25
+ /**
26
+ * Verifica se deve gerar QR code
27
+ */
28
+ shouldGenerateQR(creds: AuthenticationCreds | null): boolean;
29
+ }
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionManager = void 0;
4
+ const baileys_1 = require("@whiskeysockets/baileys");
5
+ const Auth_1 = require("../Auth");
6
+ class SessionManager {
7
+ constructor(logger) {
8
+ this.logger = logger;
9
+ }
10
+ /**
11
+ * Valida se a sessão é válida
12
+ */
13
+ async validateSession(auth) {
14
+ var _a;
15
+ try {
16
+ const creds = await auth.get('creds');
17
+ if (!creds) {
18
+ return {
19
+ isValid: false,
20
+ shouldGenerateQR: true,
21
+ reason: 'Nenhuma credencial encontrada'
22
+ };
23
+ }
24
+ // Verifica se está registrado
25
+ if (creds.registered === false) {
26
+ return {
27
+ isValid: false,
28
+ shouldGenerateQR: true,
29
+ reason: 'Sessão não registrada (registered: false)'
30
+ };
31
+ }
32
+ // Verifica se tem me.id (identificação do usuário)
33
+ if (!((_a = creds.me) === null || _a === void 0 ? void 0 : _a.id)) {
34
+ return {
35
+ isValid: false,
36
+ shouldGenerateQR: true,
37
+ reason: 'Sessão sem identificação do usuário'
38
+ };
39
+ }
40
+ // Verifica se tem credenciais básicas necessárias
41
+ if (!creds.noiseKey || !creds.signedIdentityKey) {
42
+ return {
43
+ isValid: false,
44
+ shouldGenerateQR: true,
45
+ reason: 'Credenciais incompletas'
46
+ };
47
+ }
48
+ return {
49
+ isValid: true,
50
+ shouldGenerateQR: false
51
+ };
52
+ }
53
+ catch (error) {
54
+ this.logger.error('Erro ao validar sessão', error);
55
+ return {
56
+ isValid: false,
57
+ shouldGenerateQR: true,
58
+ reason: `Erro: ${error instanceof Error ? error.message : 'Desconhecido'}`
59
+ };
60
+ }
61
+ }
62
+ /**
63
+ * Limpa sessão inválida completamente
64
+ * Remove creds.json e todas as keys relacionadas
65
+ */
66
+ async clearInvalidSession(auth) {
67
+ try {
68
+ // Obtém o diretório da sessão para logs (se disponível)
69
+ const sessionDir = auth.folder || auth.sessionsDir || 'desconhecido';
70
+ this.logger.debug(`Limpando sessão inválida do diretório: ${sessionDir}`);
71
+ // Lista todos os arquivos da sessão
72
+ const allFiles = await auth.listAll();
73
+ this.logger.debug(`Encontrados ${allFiles.length} arquivos na sessão`);
74
+ // Remove creds.json primeiro
75
+ try {
76
+ await auth.remove('creds');
77
+ this.logger.debug('creds.json removido');
78
+ }
79
+ catch (error) {
80
+ this.logger.warn('Erro ao remover creds.json (pode não existir)', error);
81
+ }
82
+ // Remove todas as keys relacionadas (pre-key, session, sender-key, app-state-sync-key, etc)
83
+ const keyPatterns = [
84
+ 'pre-key',
85
+ 'session',
86
+ 'sender-key',
87
+ 'app-state-sync-key',
88
+ 'sender-key-memory',
89
+ 'lid-mapping',
90
+ 'device-list',
91
+ 'tctoken',
92
+ ];
93
+ let removedCount = 0;
94
+ for (const pattern of keyPatterns) {
95
+ const matchingFiles = allFiles.filter(file => file.startsWith(pattern));
96
+ for (const file of matchingFiles) {
97
+ try {
98
+ await auth.remove(file);
99
+ removedCount++;
100
+ }
101
+ catch (error) {
102
+ // Ignora erros ao remover keys individuais
103
+ }
104
+ }
105
+ }
106
+ this.logger.info(`Sessão limpa: ${removedCount} arquivos removidos do diretório ${sessionDir}`);
107
+ }
108
+ catch (error) {
109
+ this.logger.error('Erro ao limpar sessão', error);
110
+ throw error;
111
+ }
112
+ }
113
+ /**
114
+ * Salva credenciais
115
+ */
116
+ async saveCredentials(auth, creds) {
117
+ try {
118
+ await auth.set('creds', creds);
119
+ // Log removido para reduzir verbosidade
120
+ }
121
+ catch (error) {
122
+ this.logger.error('Erro ao salvar credenciais', error);
123
+ throw error;
124
+ }
125
+ }
126
+ /**
127
+ * Carrega credenciais
128
+ */
129
+ async loadCredentials(auth) {
130
+ try {
131
+ const { state } = await (0, Auth_1.getBaileysAuth)(auth);
132
+ return state.creds;
133
+ }
134
+ catch (error) {
135
+ this.logger.error('Erro ao carregar credenciais', error);
136
+ // Retorna credenciais vazias se houver erro
137
+ return (0, baileys_1.initAuthCreds)();
138
+ }
139
+ }
140
+ /**
141
+ * Verifica se deve gerar QR code
142
+ */
143
+ shouldGenerateQR(creds) {
144
+ var _a;
145
+ if (!creds)
146
+ return true;
147
+ if (creds.registered === false)
148
+ return true;
149
+ if (!((_a = creds.me) === null || _a === void 0 ? void 0 : _a.id))
150
+ return true;
151
+ return false;
152
+ }
153
+ }
154
+ exports.SessionManager = SessionManager;
155
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/wa/core/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { BotStatus } from '../../bot/BotStatus';
2
+ import { ConnectionState } from '@whiskeysockets/baileys';
3
+ import { ILoggerService } from '../interfaces/ILoggerService';
4
+ import { IStateManager, BotState, ConnectionStatus } from '../interfaces/IStateManager';
5
+ export declare class StateManager implements IStateManager {
6
+ private state;
7
+ private observers;
8
+ private logger?;
9
+ constructor(logger?: ILoggerService);
10
+ /**
11
+ * Atualiza o estado e notifica observadores
12
+ */
13
+ private updateState;
14
+ /**
15
+ * Notifica todos os observadores
16
+ */
17
+ private notifyObservers;
18
+ get id(): string;
19
+ get status(): BotStatus;
20
+ get phoneNumber(): string;
21
+ get name(): string;
22
+ get profileUrl(): string;
23
+ get connectionStatus(): ConnectionStatus;
24
+ get lastConnectionUpdateDate(): number;
25
+ get lastDisconnectError(): number | undefined;
26
+ get connectionState(): Partial<ConnectionState> | undefined;
27
+ get fullState(): BotState;
28
+ setId(id: string): void;
29
+ setStatus(status: BotStatus): void;
30
+ setPhoneNumber(phoneNumber: string): void;
31
+ setName(name: string): void;
32
+ setProfileUrl(profileUrl: string): void;
33
+ setConnectionStatus(status: ConnectionStatus): void;
34
+ setLastConnectionUpdateDate(date: number): void;
35
+ setLastDisconnectError(error?: number): void;
36
+ updateConnectionState(state: Partial<ConnectionState>): void;
37
+ /**
38
+ * Reseta o estado para valores iniciais
39
+ */
40
+ reset(): void;
41
+ /**
42
+ * Registra um observador para mudanças de estado
43
+ */
44
+ observe(observer: (state: BotState) => void): () => void;
45
+ /**
46
+ * Remove todos os observadores
47
+ */
48
+ clearObservers(): void;
49
+ }
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StateManager = void 0;
4
+ const BotStatus_1 = require("../../bot/BotStatus");
5
+ class StateManager {
6
+ constructor(logger) {
7
+ this.state = {
8
+ id: '',
9
+ status: BotStatus_1.BotStatus.Offline,
10
+ phoneNumber: '',
11
+ name: '',
12
+ profileUrl: '',
13
+ connectionStatus: 'disconnected',
14
+ lastConnectionUpdateDate: Date.now(),
15
+ };
16
+ this.observers = new Set();
17
+ this.logger = logger;
18
+ }
19
+ /**
20
+ * Atualiza o estado e notifica observadores
21
+ */
22
+ updateState(updates) {
23
+ this.state = { ...this.state, ...updates };
24
+ this.notifyObservers();
25
+ }
26
+ /**
27
+ * Notifica todos os observadores
28
+ */
29
+ notifyObservers() {
30
+ this.observers.forEach(observer => {
31
+ try {
32
+ observer(this.state);
33
+ }
34
+ catch (error) {
35
+ // Ignora erros nos observadores para não quebrar o fluxo
36
+ if (this.logger) {
37
+ this.logger.error('Erro ao notificar observador', error);
38
+ }
39
+ // Removido console.error - sempre usa logger se disponível
40
+ }
41
+ });
42
+ }
43
+ // Getters
44
+ get id() {
45
+ return this.state.id;
46
+ }
47
+ get status() {
48
+ return this.state.status;
49
+ }
50
+ get phoneNumber() {
51
+ return this.state.phoneNumber;
52
+ }
53
+ get name() {
54
+ return this.state.name;
55
+ }
56
+ get profileUrl() {
57
+ return this.state.profileUrl;
58
+ }
59
+ get connectionStatus() {
60
+ return this.state.connectionStatus;
61
+ }
62
+ get lastConnectionUpdateDate() {
63
+ return this.state.lastConnectionUpdateDate;
64
+ }
65
+ get lastDisconnectError() {
66
+ return this.state.lastDisconnectError;
67
+ }
68
+ get connectionState() {
69
+ return this.state.connectionState;
70
+ }
71
+ get fullState() {
72
+ return { ...this.state };
73
+ }
74
+ // Setters
75
+ setId(id) {
76
+ this.updateState({ id });
77
+ }
78
+ setStatus(status) {
79
+ this.updateState({ status });
80
+ }
81
+ setPhoneNumber(phoneNumber) {
82
+ this.updateState({ phoneNumber });
83
+ }
84
+ setName(name) {
85
+ this.updateState({ name });
86
+ }
87
+ setProfileUrl(profileUrl) {
88
+ this.updateState({ profileUrl });
89
+ }
90
+ setConnectionStatus(status) {
91
+ this.updateState({ connectionStatus: status });
92
+ }
93
+ setLastConnectionUpdateDate(date) {
94
+ this.updateState({ lastConnectionUpdateDate: date });
95
+ }
96
+ setLastDisconnectError(error) {
97
+ this.updateState({ lastDisconnectError: error });
98
+ }
99
+ updateConnectionState(state) {
100
+ this.updateState({ connectionState: { ...this.state.connectionState, ...state } });
101
+ }
102
+ /**
103
+ * Reseta o estado para valores iniciais
104
+ */
105
+ reset() {
106
+ this.state = {
107
+ id: '',
108
+ status: BotStatus_1.BotStatus.Offline,
109
+ phoneNumber: '',
110
+ name: '',
111
+ profileUrl: '',
112
+ connectionStatus: 'disconnected',
113
+ lastConnectionUpdateDate: Date.now(),
114
+ };
115
+ this.notifyObservers();
116
+ }
117
+ /**
118
+ * Registra um observador para mudanças de estado
119
+ */
120
+ observe(observer) {
121
+ this.observers.add(observer);
122
+ // Retorna função de cleanup
123
+ return () => {
124
+ this.observers.delete(observer);
125
+ };
126
+ }
127
+ /**
128
+ * Remove todos os observadores
129
+ */
130
+ clearObservers() {
131
+ this.observers.clear();
132
+ }
133
+ }
134
+ exports.StateManager = StateManager;
135
+ //# sourceMappingURL=StateManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateManager.js","sourceRoot":"","sources":["../../../src/wa/core/StateManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { WASocket } from '@whiskeysockets/baileys';
2
+ import { ILoggerService } from '../interfaces/ILoggerService';
3
+ import WhatsAppBot from '../WhatsAppBot';
4
+ export declare class CallEventHandler {
5
+ private bot;
6
+ private logger;
7
+ constructor(bot: WhatsAppBot, logger: ILoggerService);
8
+ /**
9
+ * Converte um JID LID para um JID válido
10
+ * Tenta múltiplas vezes com delay, pois o mapeamento pode não estar disponível imediatamente
11
+ */
12
+ private normalizeJID;
13
+ /**
14
+ * Configura handler para eventos de chamadas
15
+ */
16
+ setup(socket: WASocket): void;
17
+ }