@builderbot/provider-baileys 1.2.10-alpha.0 → 1.2.10-alpha.1

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/dist/bailey.d.ts CHANGED
@@ -9,6 +9,9 @@ import { BaileysEventMap, WAMessage, WASocket, proto } from './baileyWrapper';
9
9
  import type { BaileyGlobalVendorArgs } from './type';
10
10
  declare class BaileysProvider extends ProviderClass<WASocket> {
11
11
  globalVendorArgs: BaileyGlobalVendorArgs;
12
+ private reconnectAttempts;
13
+ private maxReconnectAttempts;
14
+ private reconnectDelay;
12
15
  msgRetryCounterCache?: NodeCache;
13
16
  userDevicesCache?: NodeCache;
14
17
  private logger;
@@ -16,7 +19,18 @@ declare class BaileysProvider extends ProviderClass<WASocket> {
16
19
  private idsDuplicates;
17
20
  private mapSet;
18
21
  constructor(args: Partial<BaileyGlobalVendorArgs>);
22
+ /**
23
+ * Setup cleanup handlers
24
+ * @description
25
+ * - Remove existing listeners to prevent duplicates
26
+ * - Add new listeners
27
+ * - Add cleanup function to all listeners
28
+ * - Add cleanup function to uncaughtException and unhandledRejection
29
+ * - Add cleanup function to SIGINT, SIGTERM, SIGUSR1, SIGUSR2
30
+ * - Add cleanup function to process.exit
31
+ */
19
32
  private setupCleanupHandlers;
33
+ private setupPeriodicCleanup;
20
34
  private cleanup;
21
35
  releaseSessionFiles(): Promise<void>;
22
36
  protected beforeHttpServerInit(): void;
@@ -169,6 +183,8 @@ declare class BaileysProvider extends ProviderClass<WASocket> {
169
183
  saveFile: (ctx: Partial<WAMessage & BotContext>, options?: {
170
184
  path: string;
171
185
  }) => Promise<string>;
186
+ private shouldReconnect;
187
+ private delayedReconnect;
172
188
  }
173
189
  export { BaileysProvider };
174
190
  //# sourceMappingURL=bailey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bailey.d.ts","sourceRoot":"","sources":["../src/bailey.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bailey.d.ts","sourceRoot":"","sources":["../src/bailey.ts"],"names":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -30954,7 +30954,11 @@ class BaileysProvider extends bot.ProviderClass {
30954
30954
  experimentalStore: false,
30955
30955
  autoRefresh: 0,
30956
30956
  experimentalSyncMessage: undefined,
30957
+ fallBackAction: undefined,
30957
30958
  };
30959
+ this.reconnectAttempts = 0;
30960
+ this.maxReconnectAttempts = 10;
30961
+ this.reconnectDelay = 1000; // 1 segundo inicial
30958
30962
  this.idsDuplicates = [];
30959
30963
  this.mapSet = new Set();
30960
30964
  this.indexHome = (req, res) => {
@@ -31020,10 +31024,14 @@ class BaileysProvider extends bot.ProviderClass {
31020
31024
  generateHighQualityLinkPreview: true,
31021
31025
  getMessage: this.getMessage,
31022
31026
  msgRetryCounterCache: this.msgRetryCounterCache,
31023
- retryRequestDelayMs: 350,
31024
- maxMsgRetryCount: 4,
31025
- connectTimeoutMs: 20_000,
31026
- keepAliveIntervalMs: 30_000,
31027
+ userDevicesCache: this.userDevicesCache,
31028
+ retryRequestDelayMs: 1000, // Mayor delay entre reintentos
31029
+ maxMsgRetryCount: 8, // Más intentos de reenvío
31030
+ connectTimeoutMs: 60_000, // 1 minuto timeout conexión
31031
+ keepAliveIntervalMs: 10_000, // Keep alive cada 10 segundos
31032
+ qrTimeout: 40_000, // 40 segundos para QR
31033
+ defaultQueryTimeoutMs: 60_000, // 1 minuto para queries
31034
+ emitOwnEvents: false, // No emitir eventos propios
31027
31035
  shouldIgnoreJid: (jid) => {
31028
31036
  if (this.globalVendorArgs.groupsIgnore) {
31029
31037
  return baileys.isJidGroup(jid) || baileys.isJidBroadcast(jid);
@@ -31072,22 +31080,40 @@ class BaileysProvider extends bot.ProviderClass {
31072
31080
  }
31073
31081
  sock.ev.on('connection.update', async (update) => {
31074
31082
  const { connection, lastDisconnect, qr } = update;
31083
+ this.logger.log(`[${new Date().toISOString()}] Connection update: ${connection}`);
31075
31084
  const statusCode = lastDisconnect?.error?.output?.statusCode;
31085
+ const reason = lastDisconnect?.error?.message;
31076
31086
  /** Connection closed for various reasons */
31077
31087
  if (connection === 'close') {
31078
- if (statusCode !== baileys.DisconnectReason.loggedOut) {
31079
- this.initVendor().then((v) => this.listenOnEvents(v));
31080
- return;
31081
- }
31088
+ this.logger.log(`[${new Date().toISOString()}] Connection closed. Status: ${statusCode}, Reason: ${reason}`);
31089
+ // Casos donde NO debemos reconectar
31082
31090
  if (statusCode === baileys.DisconnectReason.loggedOut) {
31083
- const PATH_BASE = require$$1$1.join(process.cwd(), NAME_DIR_SESSION);
31091
+ this.logger.log(`[${new Date().toISOString()}] Logged out, clearing session and restarting...`);
31092
+ const PATH_BASE = require$$1$1.join(process.cwd(), `${this.globalVendorArgs.name}_sessions`);
31084
31093
  await emptyDirSessions(PATH_BASE);
31085
- this.initVendor().then((v) => this.listenOnEvents(v));
31094
+ this.reconnectAttempts = 0;
31095
+ await this.delayedReconnect();
31086
31096
  return;
31087
31097
  }
31098
+ // Casos donde debemos reconectar con backoff
31099
+ if (this.shouldReconnect(statusCode)) {
31100
+ await this.delayedReconnect();
31101
+ return;
31102
+ }
31103
+ // Casos críticos - emitir error
31104
+ this.logger.log(`[${new Date().toISOString()}] Critical error, stopping reconnection attempts`);
31105
+ this.emit('auth_failure', [
31106
+ `Critical connection error: ${reason}`,
31107
+ `Status code: ${statusCode}`,
31108
+ `Check baileys.log for details`,
31109
+ `Need help: https://link.codigoencasa.com/DISCORD`,
31110
+ ]);
31088
31111
  }
31089
31112
  /** Connection opened successfully */
31090
31113
  if (connection === 'open') {
31114
+ this.logger.log(`[${new Date().toISOString()}] Connection opened successfully`);
31115
+ this.reconnectAttempts = 0; // Reset counter on successful connection
31116
+ this.reconnectDelay = 1000; // Reset delay
31091
31117
  const parseNumber = `${sock?.user?.id}`.split(':').shift();
31092
31118
  const host = { ...sock?.user, phone: parseNumber };
31093
31119
  this.globalVendorArgs.host = host;
@@ -31096,6 +31122,7 @@ class BaileysProvider extends bot.ProviderClass {
31096
31122
  }
31097
31123
  /** QR Code */
31098
31124
  if (qr && !this.globalVendorArgs.usePairingCode) {
31125
+ this.logger.log(`[${new Date().toISOString()}] QR Code received`);
31099
31126
  this.emit('require_action', {
31100
31127
  title: '⚡⚡ ACTION REQUIRED ⚡⚡',
31101
31128
  instructions: [
@@ -31148,108 +31175,140 @@ class BaileysProvider extends bot.ProviderClass {
31148
31175
  }
31149
31176
  }
31150
31177
  };
31151
- const [messageCtx] = messages;
31152
- if (messageCtx?.messageStubParameters?.length && messageCtx.messageStubParameters[0].includes('absent'))
31153
- return;
31154
- if (messageCtx?.messageStubParameters?.length &&
31155
- messageCtx.messageStubParameters[0].includes('No session'))
31156
- return;
31157
- if (messageCtx?.messageStubParameters?.length &&
31158
- messageCtx.messageStubParameters[0].includes('Bad MAC'))
31159
- return;
31160
- if (messageCtx?.messageStubParameters?.length &&
31161
- messageCtx.messageStubParameters[0].includes('Invalid')) {
31162
- if (this.globalVendorArgs.experimentalSyncMessage &&
31163
- this.globalVendorArgs.experimentalSyncMessage.length) {
31164
- if (baileyIsValidNumber(messageCtx?.key?.remoteJid)) {
31165
- await pingMessageSync(messageCtx);
31178
+ for (const messageCtx of messages) {
31179
+ if (messageCtx?.messageStubParameters?.length && messageCtx.messageStubParameters[0].includes('absent'))
31180
+ continue;
31181
+ if (messageCtx?.messageStubParameters?.length &&
31182
+ messageCtx.messageStubParameters[0].includes('No session'))
31183
+ continue;
31184
+ if (messageCtx?.messageStubParameters?.length &&
31185
+ messageCtx.messageStubParameters[0].includes('Bad MAC'))
31186
+ continue;
31187
+ if (messageCtx?.messageStubParameters?.length &&
31188
+ messageCtx.messageStubParameters[0].includes('Invalid')) {
31189
+ if (this.globalVendorArgs.fallBackAction) {
31190
+ try {
31191
+ await this.globalVendorArgs.fallBackAction(messageCtx);
31192
+ }
31193
+ catch (error) {
31194
+ continue;
31195
+ }
31196
+ continue;
31166
31197
  }
31198
+ if (this.globalVendorArgs.experimentalSyncMessage &&
31199
+ this.globalVendorArgs.experimentalSyncMessage.length) {
31200
+ if (baileyIsValidNumber(messageCtx?.key?.remoteJid)) {
31201
+ await pingMessageSync(messageCtx);
31202
+ }
31203
+ continue;
31204
+ }
31205
+ continue;
31167
31206
  }
31168
- return;
31169
- }
31170
- // if (((messageCtx?.message?.protocolMessage?.type) as unknown as string) === 'EPHEMERAL_SETTING') return
31171
- const textToBody = messageCtx?.message?.ephemeralMessage?.message?.extendedTextMessage?.text ??
31172
- messageCtx?.message?.extendedTextMessage?.text ??
31173
- messageCtx?.message?.conversation;
31174
- // if (idWs) this.idsDuplicates.push(idWs)
31175
- let payload = {
31176
- ...messageCtx,
31177
- body: textToBody,
31178
- name: messageCtx?.pushName,
31179
- from: messageCtx?.key?.remoteJid,
31180
- };
31181
- //Detectar location
31182
- if (messageCtx.message?.locationMessage) {
31183
- const { degreesLatitude, degreesLongitude } = messageCtx.message.locationMessage;
31184
- if (typeof degreesLatitude === 'number' && typeof degreesLongitude === 'number') {
31185
- payload = {
31186
- ...payload,
31187
- body: bot.utils.generateRefProvider('_event_location_'),
31188
- };
31207
+ // if (((messageCtx?.message?.protocolMessage?.type) as unknown as string) === 'EPHEMERAL_SETTING') continue
31208
+ const textToBody = messageCtx?.message?.ephemeralMessage?.message?.extendedTextMessage?.text ??
31209
+ messageCtx?.message?.extendedTextMessage?.text ??
31210
+ messageCtx?.message?.conversation;
31211
+ if (textToBody) {
31212
+ if (textToBody === 'requestPlaceholder' && !messageCtx.requestId) {
31213
+ try {
31214
+ if (this.vendor.requestPlaceholderResend) {
31215
+ const messageId = await this.vendor.requestPlaceholderResend(messageCtx.key);
31216
+ this.logger.log(`[${new Date().toISOString()}] Requested placeholder resync, id=${messageId}`);
31217
+ }
31218
+ continue; // No procesar como mensaje normal
31219
+ }
31220
+ catch (e) {
31221
+ this.logger.log(`[${new Date().toISOString()}] Error requesting placeholder resync:`, e);
31222
+ }
31223
+ }
31224
+ if (textToBody === 'onDemandHistSync') {
31225
+ try {
31226
+ if (this.vendor.fetchMessageHistory) {
31227
+ const messageId = await this.vendor.fetchMessageHistory(50, messageCtx.key, messageCtx.messageTimestamp);
31228
+ this.logger.log(`[${new Date().toISOString()}] Requested on-demand sync, id=${messageId}`);
31229
+ }
31230
+ continue; // No procesar como mensaje normal
31231
+ }
31232
+ catch (e) {
31233
+ this.logger.log(`[${new Date().toISOString()}] Error requesting history sync:`, e);
31234
+ }
31235
+ }
31236
+ if (messageCtx.requestId) {
31237
+ this.logger.log(`[${new Date().toISOString()}] Message received from phone, id=${messageCtx.requestId}`, messageCtx);
31238
+ }
31189
31239
  }
31190
- }
31191
- //Detectar video
31192
- if (messageCtx.message?.videoMessage) {
31193
- payload = { ...payload, body: bot.utils.generateRefProvider('_event_media_') };
31194
- }
31195
- //Detectar Sticker
31196
- if (messageCtx.message?.stickerMessage) {
31197
- payload = { ...payload, body: bot.utils.generateRefProvider('_event_media_') };
31198
- }
31199
- //Detectar media
31200
- if (messageCtx.message?.imageMessage) {
31201
- payload = { ...payload, body: bot.utils.generateRefProvider('_event_media_') };
31202
- }
31203
- //Detectar file
31204
- if (messageCtx.message?.documentMessage || messageCtx.message?.documentWithCaptionMessage) {
31205
- payload = { ...payload, body: bot.utils.generateRefProvider('_event_document_') };
31206
- }
31207
- //Detectar voice note
31208
- if (messageCtx.message?.audioMessage) {
31209
- payload = { ...payload, body: bot.utils.generateRefProvider('_event_voice_note_') };
31210
- }
31211
- //Detectar order message
31212
- if (messageCtx.message?.orderMessage) {
31213
- payload = { ...payload, body: bot.utils.generateRefProvider('_event_order_') };
31214
- }
31215
- if (payload.from === 'status@broadcast')
31216
- return;
31217
- payload.from = baileyCleanNumber(payload.from, true);
31218
- if (this.globalVendorArgs.writeMyself === 'none' && payload?.key?.fromMe)
31219
- return;
31220
- if (this.globalVendorArgs.host?.phone !== payload.from &&
31221
- payload?.key?.fromMe &&
31222
- !['both'].includes(this.globalVendorArgs.writeMyself))
31223
- return;
31224
- if (this.globalVendorArgs.host?.phone === payload.from &&
31225
- !['both', 'host'].includes(this.globalVendorArgs.writeMyself))
31226
- return;
31227
- if (!baileyIsValidNumber(payload.from)) {
31228
- return;
31229
- }
31230
- const btnCtx = payload?.message?.buttonsResponseMessage?.selectedDisplayText;
31231
- if (btnCtx)
31232
- payload.body = btnCtx;
31233
- const listRowId = payload?.message?.listResponseMessage?.title;
31234
- if (listRowId)
31235
- payload.body = listRowId;
31236
- const processDuplicate = () => {
31237
- if (messageCtx?.key?.id) {
31238
- const idWs = `${messageCtx.key.id}__${payload.from}`;
31239
- const isDuplicate = this.idsDuplicates.includes(idWs);
31240
- if (isDuplicate) {
31241
- this.idsDuplicates = [];
31242
- return false;
31240
+ let payload = {
31241
+ ...messageCtx,
31242
+ body: textToBody,
31243
+ name: messageCtx?.pushName,
31244
+ from: messageCtx?.key?.remoteJid,
31245
+ };
31246
+ if (messageCtx.message?.locationMessage) {
31247
+ const { degreesLatitude, degreesLongitude } = messageCtx.message.locationMessage;
31248
+ if (typeof degreesLatitude === 'number' && typeof degreesLongitude === 'number') {
31249
+ payload = {
31250
+ ...payload,
31251
+ body: bot.utils.generateRefProvider('_event_location_'),
31252
+ };
31243
31253
  }
31244
- if (this.idsDuplicates.length > 10) {
31245
- this.idsDuplicates = [];
31254
+ }
31255
+ if (messageCtx.message?.videoMessage) {
31256
+ payload = { ...payload, body: bot.utils.generateRefProvider('_event_media_') };
31257
+ }
31258
+ if (messageCtx.message?.stickerMessage) {
31259
+ payload = { ...payload, body: bot.utils.generateRefProvider('_event_media_') };
31260
+ }
31261
+ if (messageCtx.message?.imageMessage) {
31262
+ payload = { ...payload, body: bot.utils.generateRefProvider('_event_media_') };
31263
+ }
31264
+ if (messageCtx.message?.documentMessage || messageCtx.message?.documentWithCaptionMessage) {
31265
+ payload = { ...payload, body: bot.utils.generateRefProvider('_event_document_') };
31266
+ }
31267
+ if (messageCtx.message?.audioMessage) {
31268
+ payload = { ...payload, body: bot.utils.generateRefProvider('_event_voice_note_') };
31269
+ }
31270
+ if (messageCtx.message?.orderMessage) {
31271
+ payload = { ...payload, body: bot.utils.generateRefProvider('_event_order_') };
31272
+ }
31273
+ if (payload.from === 'status@broadcast')
31274
+ continue;
31275
+ payload.from = baileyCleanNumber(payload.from, true);
31276
+ if (this.globalVendorArgs.writeMyself === 'none' && payload?.key?.fromMe)
31277
+ continue;
31278
+ if (this.globalVendorArgs.host?.phone !== payload.from &&
31279
+ payload?.key?.fromMe &&
31280
+ !['both'].includes(this.globalVendorArgs.writeMyself))
31281
+ continue;
31282
+ if (this.globalVendorArgs.host?.phone === payload.from &&
31283
+ !['both', 'host'].includes(this.globalVendorArgs.writeMyself))
31284
+ continue;
31285
+ if (!baileyIsValidNumber(payload.from)) {
31286
+ continue;
31287
+ }
31288
+ const btnCtx = payload?.message?.buttonsResponseMessage?.selectedDisplayText;
31289
+ if (btnCtx)
31290
+ payload.body = btnCtx;
31291
+ const listRowId = payload?.message?.listResponseMessage?.title;
31292
+ if (listRowId)
31293
+ payload.body = listRowId;
31294
+ const processDuplicate = () => {
31295
+ if (messageCtx?.key?.id) {
31296
+ const idWs = `${messageCtx.key.id}__${payload.from}`;
31297
+ const isDuplicate = this.idsDuplicates.includes(idWs);
31298
+ if (isDuplicate) {
31299
+ this.idsDuplicates = [];
31300
+ return false;
31301
+ }
31302
+ if (this.idsDuplicates.length > 10) {
31303
+ this.idsDuplicates = [];
31304
+ }
31305
+ this.idsDuplicates.push(idWs);
31246
31306
  }
31247
- this.idsDuplicates.push(idWs);
31307
+ return true;
31308
+ };
31309
+ if (processDuplicate()) {
31310
+ this.emit('message', payload);
31248
31311
  }
31249
- return true;
31250
- };
31251
- if (processDuplicate()) {
31252
- this.emit('message', payload);
31253
31312
  }
31254
31313
  },
31255
31314
  },
@@ -31563,11 +31622,11 @@ class BaileysProvider extends bot.ProviderClass {
31563
31622
  this.logStream = require$$0$5.createWriteStream(`${process.cwd()}/baileys.log`, {
31564
31623
  flags: 'a',
31565
31624
  autoClose: true,
31566
- emitClose: true
31625
+ emitClose: true,
31567
31626
  });
31568
31627
  this.logger = new console$1.Console({
31569
31628
  stdout: this.logStream,
31570
- stderr: this.logStream
31629
+ stderr: this.logStream,
31571
31630
  });
31572
31631
  this.msgRetryCounterCache = new NodeCache({
31573
31632
  stdTTL: 1800, // 30 minutos (más tiempo para reintentos)
@@ -31576,7 +31635,7 @@ class BaileysProvider extends bot.ProviderClass {
31576
31635
  deleteOnExpire: true,
31577
31636
  useClones: false,
31578
31637
  forceString: false,
31579
- errorOnMissing: false
31638
+ errorOnMissing: false,
31580
31639
  });
31581
31640
  this.userDevicesCache = new NodeCache({
31582
31641
  stdTTL: 7200, // 2 horas (dispositivos cambian poco)
@@ -31585,16 +31644,34 @@ class BaileysProvider extends bot.ProviderClass {
31585
31644
  deleteOnExpire: true,
31586
31645
  useClones: false,
31587
31646
  forceString: false,
31588
- errorOnMissing: false
31647
+ errorOnMissing: false,
31589
31648
  });
31590
31649
  this.globalVendorArgs = { ...this.globalVendorArgs, ...args };
31591
31650
  this.setupCleanupHandlers();
31592
- }
31651
+ this.setupPeriodicCleanup();
31652
+ }
31653
+ /**
31654
+ * Setup cleanup handlers
31655
+ * @description
31656
+ * - Remove existing listeners to prevent duplicates
31657
+ * - Add new listeners
31658
+ * - Add cleanup function to all listeners
31659
+ * - Add cleanup function to uncaughtException and unhandledRejection
31660
+ * - Add cleanup function to SIGINT, SIGTERM, SIGUSR1, SIGUSR2
31661
+ * - Add cleanup function to process.exit
31662
+ */
31593
31663
  setupCleanupHandlers() {
31594
31664
  const cleanup = () => {
31595
31665
  this.logger.log(`[${new Date().toISOString()}] Iniciando limpieza de recursos...`);
31596
31666
  this.cleanup();
31597
31667
  };
31668
+ // Remove existing listeners to prevent duplicates
31669
+ process.removeAllListeners('SIGINT');
31670
+ process.removeAllListeners('SIGTERM');
31671
+ process.removeAllListeners('SIGUSR1');
31672
+ process.removeAllListeners('SIGUSR2');
31673
+ process.removeAllListeners('uncaughtException');
31674
+ process.removeAllListeners('unhandledRejection');
31598
31675
  process.on('SIGINT', cleanup);
31599
31676
  process.on('SIGTERM', cleanup);
31600
31677
  process.on('SIGUSR1', cleanup);
@@ -31608,6 +31685,21 @@ class BaileysProvider extends bot.ProviderClass {
31608
31685
  this.logger.log(`[${new Date().toISOString()}] Unhandled Rejection at:`, promise, 'reason:', reason);
31609
31686
  });
31610
31687
  }
31688
+ setupPeriodicCleanup() {
31689
+ // Limpiar duplicados cada 10 minutos para evitar memory leaks
31690
+ setInterval(() => {
31691
+ const maxSize = 1000;
31692
+ if (this.idsDuplicates.length > maxSize) {
31693
+ this.logger.log(`[${new Date().toISOString()}] Cleaning duplicates array: ${this.idsDuplicates.length} -> ${maxSize}`);
31694
+ this.idsDuplicates = this.idsDuplicates.slice(-1e3); // Mantener solo los últimos 1000
31695
+ }
31696
+ // Limpiar mapSet si tiene demasiadas entradas
31697
+ if (this.mapSet.size > maxSize) {
31698
+ this.logger.log(`[${new Date().toISOString()}] Cleaning mapSet: ${this.mapSet.size} -> 0`);
31699
+ this.mapSet.clear();
31700
+ }
31701
+ }, 600000); // 10 minutos
31702
+ }
31611
31703
  cleanup() {
31612
31704
  try {
31613
31705
  if (this.msgRetryCounterCache) {
@@ -31643,6 +31735,46 @@ class BaileysProvider extends bot.ProviderClass {
31643
31735
  .get('/', this.indexHome);
31644
31736
  }
31645
31737
  afterHttpServerInit() { }
31738
+ shouldReconnect(statusCode) {
31739
+ // Lista de códigos donde SÍ debemos reconectar
31740
+ const reconnectableCodes = [
31741
+ baileys.DisconnectReason.connectionClosed,
31742
+ baileys.DisconnectReason.connectionLost,
31743
+ baileys.DisconnectReason.connectionReplaced,
31744
+ baileys.DisconnectReason.timedOut,
31745
+ baileys.DisconnectReason.badSession,
31746
+ baileys.DisconnectReason.restartRequired,
31747
+ 429, // Rate limited
31748
+ 500, // Server error
31749
+ 502, // Bad gateway
31750
+ 503, // Service unavailable
31751
+ 504, // Gateway timeout
31752
+ ];
31753
+ return reconnectableCodes.includes(statusCode) && this.reconnectAttempts < this.maxReconnectAttempts;
31754
+ }
31755
+ async delayedReconnect() {
31756
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
31757
+ this.logger.log(`[${new Date().toISOString()}] Max reconnection attempts reached (${this.maxReconnectAttempts})`);
31758
+ this.emit('auth_failure', [
31759
+ `Maximum reconnection attempts reached`,
31760
+ `Please check your internet connection`,
31761
+ `Check baileys.log for details`,
31762
+ `Need help: https://link.codigoencasa.com/DISCORD`,
31763
+ ]);
31764
+ return;
31765
+ }
31766
+ this.reconnectAttempts++;
31767
+ const delay = Math.min(this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1), 30000); // Max 30 segundos
31768
+ this.logger.log(`[${new Date().toISOString()}] Reconnection attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts} in ${delay}ms`);
31769
+ setTimeout(async () => {
31770
+ try {
31771
+ this.initVendor().then((v) => this.listenOnEvents(v));
31772
+ }
31773
+ catch (error) {
31774
+ this.logger.log(`[${new Date().toISOString()}] Reconnection failed:`, error);
31775
+ }
31776
+ }, delay);
31777
+ }
31646
31778
  }
31647
31779
 
31648
31780
  exports.BaileysProvider = BaileysProvider;
package/dist/type.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import type { GlobalVendorArgs } from '@builderbot/bot/dist/types';
2
+ import { proto } from 'baileys';
2
3
  export interface BaileyGlobalVendorArgs extends GlobalVendorArgs {
3
4
  gifPlayback: boolean;
4
5
  usePairingCode: boolean;
5
6
  phoneNumber: string | null;
6
7
  browser: string[];
7
8
  experimentalSyncMessage?: string;
9
+ fallBackAction?: (ctx: proto.IWebMessageInfo) => Promise<void>;
8
10
  useBaileysStore: boolean;
9
11
  timeRelease?: number;
10
12
  experimentalStore?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAElE,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC5D,WAAW,EAAE,OAAO,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,eAAe,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,GAAG,CAAA;CACb"}
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC5D,WAAW,EAAE,OAAO,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9D,eAAe,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,GAAG,CAAA;CACb"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builderbot/provider-baileys",
3
- "version": "1.2.10-alpha.0",
3
+ "version": "1.2.10-alpha.1",
4
4
  "description": "Now I'm the model of a modern major general / The venerated Virginian veteran whose men are all / Lining up, to put me up on a pedestal / Writin' letters to relatives / Embellishin' my elegance and eloquence / But the elephant is in the room / The truth is in ya face when ya hear the British cannons go / BOOM",
5
5
  "keywords": [],
6
6
  "author": "Leifer Mendez <leifer33@gmail.com>",
@@ -30,7 +30,7 @@
30
30
  },
31
31
  "homepage": "https://github.com/codigoencasa/bot-whatsapp#readme",
32
32
  "devDependencies": {
33
- "@builderbot/bot": "^1.2.10-alpha.0",
33
+ "@builderbot/bot": "^1.2.10-alpha.1",
34
34
  "@hapi/boom": "^10.0.1",
35
35
  "@jest/globals": "^29.7.0",
36
36
  "@rollup/plugin-commonjs": "^25.0.7",
@@ -66,5 +66,5 @@
66
66
  "fs-extra": "^11.2.0",
67
67
  "node-cache": "^5.1.2"
68
68
  },
69
- "gitHead": "24ee1e15176ed4ad251a6b2aef8866fccb35c71e"
69
+ "gitHead": "b001fc4062debf8ff3beb913c6c3a012ca311803"
70
70
  }