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.
- package/README.md +195 -20
- package/lib/bot/BotEvents.d.ts +2 -0
- package/lib/bot/BotEvents.js.map +1 -1
- package/lib/client/Client.js +93 -28
- package/lib/client/Client.js.map +1 -1
- package/lib/client/ClientFunctionHandler.js +39 -3
- package/lib/client/ClientFunctionHandler.js.map +1 -1
- package/lib/telegram/TelegramAuth.js +36 -1
- package/lib/telegram/TelegramAuth.js.map +1 -1
- package/lib/telegram/TelegramBot.d.ts +11 -0
- package/lib/telegram/TelegramBot.js +101 -15
- package/lib/telegram/TelegramBot.js.map +1 -1
- package/lib/telegram/TelegramEvents.d.ts +8 -1
- package/lib/telegram/TelegramEvents.js +67 -30
- package/lib/telegram/TelegramEvents.js.map +1 -1
- package/lib/telegram/TelegramSendingController.js +59 -17
- package/lib/telegram/TelegramSendingController.js.map +1 -1
- package/lib/telegram/TelegramToRompotConverter.js +44 -14
- package/lib/telegram/TelegramToRompotConverter.js.map +1 -1
- package/lib/wa/Auth.js +17 -5
- package/lib/wa/Auth.js.map +1 -1
- package/lib/wa/ConfigWAEvents.d.ts +6 -10
- package/lib/wa/ConfigWAEvents.js +220 -426
- package/lib/wa/ConfigWAEvents.js.map +1 -1
- package/lib/wa/ConvertWAMessage.js +28 -19
- package/lib/wa/ConvertWAMessage.js.map +1 -1
- package/lib/wa/ID.d.ts +10 -1
- package/lib/wa/ID.js +22 -2
- package/lib/wa/ID.js.map +1 -1
- package/lib/wa/WhatsAppBot.d.ts +58 -11
- package/lib/wa/WhatsAppBot.js +365 -648
- package/lib/wa/WhatsAppBot.js.map +1 -1
- package/lib/wa/constants/ConfigDefaults.d.ts +23 -0
- package/lib/wa/constants/ConfigDefaults.js +27 -0
- package/lib/wa/constants/ConfigDefaults.js.map +1 -0
- package/lib/wa/constants/DisconnectReasons.d.ts +24 -0
- package/lib/wa/constants/DisconnectReasons.js +36 -0
- package/lib/wa/constants/DisconnectReasons.js.map +1 -0
- package/lib/wa/constants/ErrorCodes.d.ts +28 -0
- package/lib/wa/constants/ErrorCodes.js +32 -0
- package/lib/wa/constants/ErrorCodes.js.map +1 -0
- package/lib/wa/constants/JIDPatterns.d.ts +23 -0
- package/lib/wa/constants/JIDPatterns.js +38 -0
- package/lib/wa/constants/JIDPatterns.js.map +1 -0
- package/lib/wa/constants/Timeouts.d.ts +11 -0
- package/lib/wa/constants/Timeouts.js +15 -0
- package/lib/wa/constants/Timeouts.js.map +1 -0
- package/lib/wa/core/ConnectionManager.d.ts +84 -0
- package/lib/wa/core/ConnectionManager.js +256 -0
- package/lib/wa/core/ConnectionManager.js.map +1 -0
- package/lib/wa/core/SessionManager.d.ts +29 -0
- package/lib/wa/core/SessionManager.js +155 -0
- package/lib/wa/core/SessionManager.js.map +1 -0
- package/lib/wa/core/StateManager.d.ts +49 -0
- package/lib/wa/core/StateManager.js +135 -0
- package/lib/wa/core/StateManager.js.map +1 -0
- package/lib/wa/events/CallEventHandler.d.ts +17 -0
- package/lib/wa/events/CallEventHandler.js +155 -0
- package/lib/wa/events/CallEventHandler.js.map +1 -0
- package/lib/wa/events/ChatEventHandler.d.ts +12 -0
- package/lib/wa/events/ChatEventHandler.js +74 -0
- package/lib/wa/events/ChatEventHandler.js.map +1 -0
- package/lib/wa/events/ConnectionEventHandler.d.ts +43 -0
- package/lib/wa/events/ConnectionEventHandler.js +305 -0
- package/lib/wa/events/ConnectionEventHandler.js.map +1 -0
- package/lib/wa/events/ContactEventHandler.d.ts +12 -0
- package/lib/wa/events/ContactEventHandler.js +55 -0
- package/lib/wa/events/ContactEventHandler.js.map +1 -0
- package/lib/wa/events/EventManager.d.ts +43 -0
- package/lib/wa/events/EventManager.js +198 -0
- package/lib/wa/events/EventManager.js.map +1 -0
- package/lib/wa/events/GroupEventHandler.d.ts +12 -0
- package/lib/wa/events/GroupEventHandler.js +74 -0
- package/lib/wa/events/GroupEventHandler.js.map +1 -0
- package/lib/wa/events/HistoryEventHandler.d.ts +16 -0
- package/lib/wa/events/HistoryEventHandler.js +101 -0
- package/lib/wa/events/HistoryEventHandler.js.map +1 -0
- package/lib/wa/events/LIDMappingEventHandler.d.ts +20 -0
- package/lib/wa/events/LIDMappingEventHandler.js +39 -0
- package/lib/wa/events/LIDMappingEventHandler.js.map +1 -0
- package/lib/wa/events/MessageEventHandler.d.ts +16 -0
- package/lib/wa/events/MessageEventHandler.js +218 -0
- package/lib/wa/events/MessageEventHandler.js.map +1 -0
- package/lib/wa/interfaces/ICacheService.d.ts +12 -0
- package/lib/wa/interfaces/ICacheService.js +3 -0
- package/lib/wa/interfaces/ICacheService.js.map +1 -0
- package/lib/wa/interfaces/IConnectionManager.d.ts +15 -0
- package/lib/wa/interfaces/IConnectionManager.js +3 -0
- package/lib/wa/interfaces/IConnectionManager.js.map +1 -0
- package/lib/wa/interfaces/IErrorHandler.d.ts +9 -0
- package/lib/wa/interfaces/IErrorHandler.js +3 -0
- package/lib/wa/interfaces/IErrorHandler.js.map +1 -0
- package/lib/wa/interfaces/ILoggerService.d.ts +13 -0
- package/lib/wa/interfaces/ILoggerService.js +3 -0
- package/lib/wa/interfaces/ILoggerService.js.map +1 -0
- package/lib/wa/interfaces/ISessionManager.d.ts +16 -0
- package/lib/wa/interfaces/ISessionManager.js +3 -0
- package/lib/wa/interfaces/ISessionManager.js.map +1 -0
- package/lib/wa/interfaces/IStateManager.d.ts +41 -0
- package/lib/wa/interfaces/IStateManager.js +3 -0
- package/lib/wa/interfaces/IStateManager.js.map +1 -0
- package/lib/wa/operations/ChatOperations.d.ts +117 -0
- package/lib/wa/operations/ChatOperations.js +349 -0
- package/lib/wa/operations/ChatOperations.js.map +1 -0
- package/lib/wa/operations/GroupOperations.d.ts +31 -0
- package/lib/wa/operations/GroupOperations.js +128 -0
- package/lib/wa/operations/GroupOperations.js.map +1 -0
- package/lib/wa/operations/MessageOperations.d.ts +69 -0
- package/lib/wa/operations/MessageOperations.js +335 -0
- package/lib/wa/operations/MessageOperations.js.map +1 -0
- package/lib/wa/operations/UserOperations.d.ts +100 -0
- package/lib/wa/operations/UserOperations.js +216 -0
- package/lib/wa/operations/UserOperations.js.map +1 -0
- package/lib/wa/services/CacheService.d.ts +45 -0
- package/lib/wa/services/CacheService.js +93 -0
- package/lib/wa/services/CacheService.js.map +1 -0
- package/lib/wa/services/ErrorHandler.d.ts +26 -0
- package/lib/wa/services/ErrorHandler.js +73 -0
- package/lib/wa/services/ErrorHandler.js.map +1 -0
- package/lib/wa/services/LIDMappingService.d.ts +42 -0
- package/lib/wa/services/LIDMappingService.js +132 -0
- package/lib/wa/services/LIDMappingService.js.map +1 -0
- package/lib/wa/services/LIDNormalizationService.d.ts +30 -0
- package/lib/wa/services/LIDNormalizationService.js +136 -0
- package/lib/wa/services/LIDNormalizationService.js.map +1 -0
- package/lib/wa/services/LoggerService.d.ts +44 -0
- package/lib/wa/services/LoggerService.js +85 -0
- package/lib/wa/services/LoggerService.js.map +1 -0
- package/lib/wa/services/PendingMessageQueue.d.ts +46 -0
- package/lib/wa/services/PendingMessageQueue.js +119 -0
- package/lib/wa/services/PendingMessageQueue.js.map +1 -0
- package/lib/wa/services/RetryService.d.ts +25 -0
- package/lib/wa/services/RetryService.js +59 -0
- package/lib/wa/services/RetryService.js.map +1 -0
- package/lib/wa/utils/ConfigValidator.d.ts +15 -0
- package/lib/wa/utils/ConfigValidator.js +66 -0
- package/lib/wa/utils/ConfigValidator.js.map +1 -0
- package/lib/wa/utils/ErrorUtils.d.ts +29 -0
- package/lib/wa/utils/ErrorUtils.js +66 -0
- package/lib/wa/utils/ErrorUtils.js.map +1 -0
- package/lib/wa/utils/Validation.d.ts +18 -0
- package/lib/wa/utils/Validation.js +40 -0
- package/lib/wa/utils/Validation.js.map +1 -0
- 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":";;;AAAA,qDAAkH;AAQlH,wDAAqD;AACrD,oDAAiD;AAEjD,MAAa,iBAAiB;IAc5B,YACE,YAA2B,EAC3B,cAA+B,EAC/B,YAA0B,EAC1B,YAA2B,EAC3B,MAAsB;QAlBhB,WAAM,GAAoB,IAAI,CAAC;QAC/B,WAAM,GAAqB,cAAc,CAAC;QAO1C,sBAAiB,GAAG,CAAC,CAAC;QACtB,yBAAoB,GAAG,EAAE,CAAC;QAC1B,qBAAgB,GAAmB,EAAE,CAAC;QACvC,qBAAgB,GAAwB,IAAI,CAAC,CAAC,8CAA8C;QASjG,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAoB;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAE/B,IAAI,CAAC;YACH,+DAA+D;YAE/D,cAAc;YACd,IAAI,CAAC,MAAM,GAAG,IAAA,sBAAY,EAAC,MAAM,CAAC,CAAC;YAEnC,oBAAoB;YACpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,kBAAkB;YAClB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE/B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;YAC3B,oEAAoE;YAEpE,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB,0BAAgB,CAAC,gBAAgB;QACjE,2DAA2D;QAE3D,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAE/B,2BAA2B;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,yDAAyD;gBACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,QAAiB,KAAK;QACpC,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YACnE,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC;YAClE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxE,iEAAiE;QAEjE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAEzD,IAAI,CAAC;YACH,yBAAyB;YACzB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,YAAY;YACZ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;YAC/D,6BAA6B;YAC7B,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACvD,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,oDAAoD;QACpD,kEAAkE;QAClE,wFAAwF;QAExF,oDAAoD;QACpD,0EAA0E;IAC5E,CAAC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,MAAuB;;QAC5C,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO;QAE/B,QAAQ,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1B,KAAK,YAAY;gBACf,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBAC7B,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC1D,MAAM;YAER,KAAK,MAAM;gBACT,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;gBACpD,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC1D,MAAM;YAER,KAAK,OAAO;gBACV,IAAI,CAAC,gBAAgB,CAAC,MAAA,MAAM,CAAC,cAAc,0CAAE,KAAa,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACxE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAC;gBACxE,CAAC,CAAC,CAAC;gBACH,MAAM;QACV,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAY;;QACjC,MAAM,UAAU,GAAG,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,UAAU,KAAI,0BAAgB,CAAC,gBAAgB,CAAC;QAElF,2DAA2D;QAE3D,kBAAkB;QAClB,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAE/B,4BAA4B;QAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,CAAC;QACD,mDAAmD;IACrD,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,UAAkB;QACxC,yFAAyF;QACzF,6DAA6D;QAC7D,MAAM,sBAAsB,GAAG;YAC7B,0BAAgB,CAAC,SAAS,EAAE,uBAAuB;YACnD,uBAAU,CAAC,cAAc,EAAE,qCAAqC;SACjE,CAAC;QAEF,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACnD,CAAC,EAAE,mBAAQ,CAAC,eAAe,CAAC,CAAC;YAE7B,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,iBAAiB,GAAG,CAAC,MAAuB,EAAE,EAAE;;gBACpD,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;oBACjC,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;oBACzC,OAAO,EAAE,CAAC;oBACV,MAAM,KAAK,GAAG,MAAA,MAAM,CAAC,cAAc,0CAAE,KAAa,CAAC;oBACnD,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;YAE1D,0BAA0B;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,OAAO;QACb,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,MAAwB;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF;AAzSD,8CAySC"}
|
|
@@ -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
|
+
}
|