@builderbot/provider-baileys 1.3.15-alpha.2 → 1.3.15-alpha.20

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
@@ -13,6 +13,7 @@ declare class BaileysProvider extends ProviderClass<WASocket> {
13
13
  private reconnectDelay;
14
14
  msgRetryCounterCache?: NodeCache;
15
15
  userDevicesCache?: NodeCache;
16
+ messageCache?: NodeCache;
16
17
  private logger;
17
18
  private logStream;
18
19
  private idsDuplicates;
@@ -38,7 +39,7 @@ declare class BaileysProvider extends ProviderClass<WASocket> {
38
39
  protected getMessage: (key: {
39
40
  remoteJid: string;
40
41
  id: string;
41
- }) => Promise<proto.Message>;
42
+ }) => Promise<proto.IMessage | undefined>;
42
43
  protected saveCredsGlobal: (() => Promise<void>) | null;
43
44
  /**
44
45
  * Iniciar todo Bailey
@@ -77,20 +78,25 @@ declare class BaileysProvider extends ProviderClass<WASocket> {
77
78
  * @example await getOrderDetails('order-id', 'order-token')
78
79
  */
79
80
  getOrderDetails: (orderId: string, orderToken: string) => Promise<import("baileys").OrderDetails>;
81
+ /**
82
+ * Accede al lidMapping del signalRepository de Baileys.
83
+ */
84
+ private get lidMapping();
80
85
  /**
81
86
  * Obtener LID (Local Identifier) para un número de teléfono (PN)
82
- * @param {string} phoneNumber - Número de teléfono en formato JID (e.g., '1234567890@s.whatsapp.net')
83
- * @returns {Promise<string|null>} - El LID correspondiente o null si no se encuentra
84
- * @example await getLIDForPN('1234567890@s.whatsapp.net')
87
+ * @param phoneNumber - JID con formato '1234567890@s.whatsapp.net'
85
88
  */
86
- getLIDForPN: (phoneNumber: string) => Promise<any>;
89
+ getLIDForPN: (phoneNumber: string) => Promise<string | null>;
87
90
  /**
88
91
  * Obtener número de teléfono (PN) para un LID (Local Identifier)
89
- * @param {string} lid - Local Identifier
90
- * @returns {Promise<string|null>} - El número de teléfono correspondiente o null si no se encuentra
91
- * @example await getPNForLID('lid:xxxxxx')
92
+ * @param lid - JID con formato '16424005304394@lid'
93
+ */
94
+ getPNForLID: (lid: string) => Promise<string | null>;
95
+ /**
96
+ * Normaliza un número entrante a un JID válido para envío.
97
+ * Si es un @lid, intenta resolver a @s.whatsapp.net; si falla, envía al LID directamente.
92
98
  */
93
- getPNForLID: (lid: string) => Promise<any>;
99
+ private resolveNumber;
94
100
  /**
95
101
  * @param {string} number
96
102
  * @param {string} message
@@ -1 +1 @@
1
- {"version":3,"file":"bailey.d.ts","sourceRoot":"","sources":["../src/bailey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAS,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAA;AAI9C,OAAO,SAAS,MAAM,YAAY,CAAA;AAIlC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAG3D,OAAO,EAGH,eAAe,EACf,SAAS,EACT,QAAQ,EASR,KAAK,EAKR,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAA;AAGpD,cAAM,eAAgB,SAAQ,aAAa,CAAC,QAAQ,CAAC;IAC1C,gBAAgB,EAAE,sBAAsB,CAgB9C;IAED,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,cAAc,CAAO;IAE7B,oBAAoB,CAAC,EAAE,SAAS,CAAA;IAChC,gBAAgB,CAAC,EAAE,SAAS,CAAA;IAE5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAuB;IAExC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAAY;gBAEd,IAAI,EAAE,OAAO,CAAC,sBAAsB,CAAC;IAwCjD;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,OAAO;IAyBF,mBAAmB;IAMhC,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAStC,SAAS,CAAC,mBAAmB,IAAI,IAAI;IAE9B,SAAS,EAAE,KAAK,CAAC,UAAU,CAsBjC;IAED,SAAS,CAAC,UAAU,GAAU,KAAK;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,4BAGnE;IAED,SAAS,CAAC,eAAe,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAO;IAE9D;;OAEG;IACH,SAAS,CAAC,UAAU;;;0DAqHkD,GAAG,0BACzD,GAAH;;;OAwCZ;IAED;;;;OAIG;IACH,SAAS,CAAC,SAAS,QAAO;QACtB,KAAK,EAAE,MAAM,eAAe,CAAA;QAC5B,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAA;KACvC,EAAE,CAuRF;IAED;;;;;;;OAOG;IAEH,QAAQ,GAAU,UAAU,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,GAAG,CAAA;KAAE,gCAa9F;IAED;;;;OAIG;IACH,eAAe,GAAU,SAAS,MAAM,EAAE,YAAY,MAAM,6CAG3D;IAED;;;;;OAKG;IACH,WAAW,GAAU,aAAa,MAAM,kBAWvC;IAED;;;;;OAKG;IACH,WAAW,GAAU,KAAK,MAAM,kBAW/B;IAED;;;;OAIG;IAEH,SAAS,GAAU,QAAQ,MAAM,EAAE,UAAU,MAAM,EAAE,MAAM,MAAM,wBAUhE;IAED;;;;;;OAMG;IACH,SAAS,GAAU,QAAQ,MAAM,EAAE,UAAU,MAAM,EAAE,MAAM,GAAG,wBAM7D;IAED;;;;;;OAMG;IACH,SAAS,GAAU,QAAQ,MAAM,EAAE,UAAU,oBAAoB,EAAE,MAAM,GAAG,wBAO3E;IAED;;;;;;;OAOG;IAEH,SAAS,GAAU,QAAQ,MAAM,EAAE,UAAU,MAAM,wBAMlD;IAED;;;;;OAKG;IACH,QAAQ,GAAU,QAAQ,MAAM,EAAE,SAAS,MAAM,wBAGhD;IAED;;;;;OAKG;IAEH,QAAQ,GAAU,QAAQ,MAAM,EAAE,UAAU,MAAM,EAAE,MAAM,MAAM,wBAY/D;IAED;;;;;;;;OAQG;IAEH,WAAW,GAAU,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,wBAuBnE;IAED;;;;;;OAMG;IAEH,WAAW,GAAU,UAAU,MAAM,EAAE,SAAS,MAAM,EAAE,UAAU,WAAW,KAAG,OAAO,CAAC,GAAG,CAAC,CAM3F;IAED;;;;;;OAMG;IAEH,YAAY,GAAU,WAAW,MAAM,EAAE,UAAU,GAAG,EAAE,WAAW,GAAG,EAAE,WAAU,GAAU;;OAa3F;IAED;;;;;;;OAOG;IAEH,WAAW,GACP,WAAW,GAAG,EACd,eAAe;QAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,GAAG,CAAA;KAAE,EAClE,aAAa,MAAM,EACnB,SAAS,MAAM,EACf,WAAU,GAAU;;OAyBvB;IAED;;;;OAIG;IACH,kBAAkB,GAAU,WAAW,GAAG,EAAE,YAAY,GAAG,mBAE1D;IAED;;;;;;OAMG;IAEH,WAAW,GACP,WAAW,GAAG,EACd,KAAK,MAAM,GAAG,MAAM,EACpB,gBAAgB,OAAO,CAAC,eAAe,CAAC,EACxC,WAAU,GAAU,mBAWvB;IAED,OAAO,CAAC,WAAW,CAYlB;IAED,OAAO,CAAC,gBAAgB,CAAmE;IAE3F;;;;;OAKG;IACH,QAAQ,GAAU,KAAK,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,UAAU;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,MAAM,CAAC,CAUnG;IAED,OAAO,CAAC,eAAe;YAmBT,gBAAgB;CA+BjC;AAED,OAAO,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"bailey.d.ts","sourceRoot":"","sources":["../src/bailey.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import makeWASocketOther, { useMultiFileAuthState, DisconnectReason, proto, makeCacheableSignalKeyStore, getAggregateVotesInPollMessage, WASocket, BaileysEventMap, AnyMediaMessageContent, AnyMessageContent, downloadMediaMessage, WAMessage, MessageUpsertType, isJidGroup, isJidBroadcast, PollMessageOptions, WAVersion, WABrowserDescription } from 'baileys';
2
- export { makeWASocketOther, useMultiFileAuthState, DisconnectReason, proto, makeCacheableSignalKeyStore, getAggregateVotesInPollMessage, WASocket, BaileysEventMap, AnyMediaMessageContent, AnyMessageContent, downloadMediaMessage, WAMessage, MessageUpsertType, isJidGroup, isJidBroadcast, PollMessageOptions, WAVersion, WABrowserDescription, };
1
+ import makeWASocketOther, { useMultiFileAuthState, DisconnectReason, proto, makeCacheableSignalKeyStore, getAggregateVotesInPollMessage, WASocket, BaileysEventMap, AnyMediaMessageContent, AnyMessageContent, downloadMediaMessage, WAMessage, MessageUpsertType, isJidGroup, isJidBroadcast, isLidUser, PollMessageOptions, WAVersion, WABrowserDescription } from 'baileys';
2
+ export { makeWASocketOther, useMultiFileAuthState, DisconnectReason, proto, makeCacheableSignalKeyStore, getAggregateVotesInPollMessage, WASocket, BaileysEventMap, AnyMediaMessageContent, AnyMessageContent, downloadMediaMessage, WAMessage, MessageUpsertType, isJidGroup, isJidBroadcast, isLidUser, PollMessageOptions, WAVersion, WABrowserDescription, };
3
3
  //# sourceMappingURL=baileyWrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"baileyWrapper.d.ts","sourceRoot":"","sources":["../src/baileyWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,EAAE,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,QAAQ,EACR,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACvB,MAAM,SAAS,CAAA;AAEhB,OAAO,EACH,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,QAAQ,EACR,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,oBAAoB,GACvB,CAAA"}
1
+ {"version":3,"file":"baileyWrapper.d.ts","sourceRoot":"","sources":["../src/baileyWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,EAAE,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,QAAQ,EACR,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACvB,MAAM,SAAS,CAAA;AAEhB,OAAO,EACH,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,QAAQ,EACR,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,oBAAoB,GACvB,CAAA"}
package/dist/index.cjs CHANGED
@@ -4226,19 +4226,24 @@ const emptyDirSessions = async (pathBase) => new Promise((resolve, reject) => {
4226
4226
  });
4227
4227
  });
4228
4228
  /**
4229
- * Cleans the WhatsApp number format.
4230
- * @param number The WhatsApp number to be cleaned.
4231
- * @param full Whether to return the full number format or not.
4232
- * @returns The cleaned number.
4229
+ * Cleans and normalizes a WhatsApp JID.
4230
+ * Supports @s.whatsapp.net, @g.us (groups), and @lid (Local Identifiers).
4231
+ * @param number - Raw JID or phone number
4232
+ * @param full - If true, strips the suffix and returns only the number/id part
4233
4233
  */
4234
4234
  const baileyCleanNumber = (number, full = false) => {
4235
- const regexGroup = /\@g.us\b/gm;
4236
- const exist = number.match(regexGroup);
4237
- if (exist)
4235
+ if (!number)
4236
+ return '';
4237
+ // Groups: always return as-is
4238
+ if (number.includes('@g.us'))
4239
+ return number;
4240
+ // LID (Local Identifiers): always preserve the @lid suffix
4241
+ // so sendMessage/resolveNumber can detect and route correctly
4242
+ if (number.includes('@lid'))
4238
4243
  return number;
4239
- number = number.replace('@s.whatsapp.net', '').replace('+', '').replace(/\s/g, '');
4240
- number = !full ? `${number}@s.whatsapp.net` : number;
4241
- return number;
4244
+ // Standard phone numbers
4245
+ const raw = number.replace('@s.whatsapp.net', '').replace('+', '').replace(/\s/g, '');
4246
+ return full ? raw : `${raw}@s.whatsapp.net`;
4242
4247
  };
4243
4248
  /**
4244
4249
  * Generates an image from a base64 string.
@@ -33756,8 +33761,14 @@ class BaileysProvider extends bot.ProviderClass {
33756
33761
  }
33757
33762
  };
33758
33763
  this.getMessage = async (key) => {
33759
- // only if store is present
33760
- return makeWASocketOther.proto.Message.create({});
33764
+ if (!key.id)
33765
+ return {};
33766
+ // Intentar recuperar el mensaje del cache
33767
+ const cachedMessage = this.messageCache?.get(`msg:${key.id}`);
33768
+ if (cachedMessage) {
33769
+ return cachedMessage;
33770
+ }
33771
+ return {};
33761
33772
  };
33762
33773
  this.saveCredsGlobal = null;
33763
33774
  /**
@@ -33935,6 +33946,10 @@ class BaileysProvider extends bot.ProviderClass {
33935
33946
  }
33936
33947
  };
33937
33948
  for (const messageCtx of messages) {
33949
+ // Almacenar mensaje en cache para poder recuperarlo en getMessage (soluciona iOS "this message can take a while")
33950
+ if (messageCtx?.key?.id && messageCtx?.message) {
33951
+ this.messageCache?.set(`msg:${messageCtx.key.id}`, messageCtx.message);
33952
+ }
33938
33953
  if (messageCtx?.messageStubParameters?.length &&
33939
33954
  messageCtx.messageStubParameters[0].includes('absent'))
33940
33955
  continue;
@@ -33997,10 +34012,9 @@ class BaileysProvider extends bot.ProviderClass {
33997
34012
  this.logger.log(`[${new Date().toISOString()}] Message received from phone, id=${messageCtx.requestId}`, messageCtx);
33998
34013
  }
33999
34014
  }
34000
- // Buscar siempre el que tenga formato @s.whatsapp.net (puede estar en remoteJid o remoteJidAlt)
34001
- const remoteJid = messageCtx?.key?.remoteJid;
34002
- const remoteJidAlt = messageCtx?.key?.remoteJidAlt;
34003
- const fromParse = remoteJid?.includes('@lid') ? remoteJidAlt : remoteJid;
34015
+ // Preferir @s.whatsapp.net (remoteJidAlt) sobre @lid cuando esté disponible
34016
+ const { remoteJid, remoteJidAlt } = (messageCtx?.key ?? {});
34017
+ const fromParse = remoteJid?.includes('@lid') ? remoteJidAlt || remoteJid : remoteJid;
34004
34018
  let payload = {
34005
34019
  ...messageCtx,
34006
34020
  body: textToBody,
@@ -34173,17 +34187,11 @@ class BaileysProvider extends bot.ProviderClass {
34173
34187
  };
34174
34188
  /**
34175
34189
  * Obtener LID (Local Identifier) para un número de teléfono (PN)
34176
- * @param {string} phoneNumber - Número de teléfono en formato JID (e.g., '1234567890@s.whatsapp.net')
34177
- * @returns {Promise<string|null>} - El LID correspondiente o null si no se encuentra
34178
- * @example await getLIDForPN('1234567890@s.whatsapp.net')
34190
+ * @param phoneNumber - JID con formato '1234567890@s.whatsapp.net'
34179
34191
  */
34180
34192
  this.getLIDForPN = async (phoneNumber) => {
34181
34193
  try {
34182
- const vendor = this.vendor;
34183
- if (vendor?.signalRepository?.lidMapping?.getLIDForPN) {
34184
- return await vendor.signalRepository.lidMapping.getLIDForPN(phoneNumber);
34185
- }
34186
- return null;
34194
+ return (await this.lidMapping?.getLIDForPN?.(phoneNumber)) ?? null;
34187
34195
  }
34188
34196
  catch (e) {
34189
34197
  this.logger.log(`[${new Date().toISOString()}] Error getting LID for PN:`, e);
@@ -34192,23 +34200,32 @@ class BaileysProvider extends bot.ProviderClass {
34192
34200
  };
34193
34201
  /**
34194
34202
  * Obtener número de teléfono (PN) para un LID (Local Identifier)
34195
- * @param {string} lid - Local Identifier
34196
- * @returns {Promise<string|null>} - El número de teléfono correspondiente o null si no se encuentra
34197
- * @example await getPNForLID('lid:xxxxxx')
34203
+ * @param lid - JID con formato '16424005304394@lid'
34198
34204
  */
34199
34205
  this.getPNForLID = async (lid) => {
34200
34206
  try {
34201
- const vendor = this.vendor;
34202
- if (vendor?.signalRepository?.lidMapping?.getPNForLID) {
34203
- return await vendor.signalRepository.lidMapping.getPNForLID(lid);
34204
- }
34205
- return null;
34207
+ return (await this.lidMapping?.getPNForLID?.(lid)) ?? null;
34206
34208
  }
34207
34209
  catch (e) {
34208
34210
  this.logger.log(`[${new Date().toISOString()}] Error getting PN for LID:`, e);
34209
34211
  return null;
34210
34212
  }
34211
34213
  };
34214
+ /**
34215
+ * Normaliza un número entrante a un JID válido para envío.
34216
+ * Si es un @lid, intenta resolver a @s.whatsapp.net; si falla, envía al LID directamente.
34217
+ */
34218
+ this.resolveNumber = async (numberIn) => {
34219
+ const jid = baileyCleanNumber(`${numberIn}`);
34220
+ if (!jid.includes('@lid'))
34221
+ return jid;
34222
+ const resolved = await this.getPNForLID(jid);
34223
+ if (resolved) {
34224
+ this.logger.log(`[${new Date().toISOString()}] LID resolved: ${jid} -> ${resolved}`);
34225
+ return baileyCleanNumber(resolved);
34226
+ }
34227
+ return jid;
34228
+ };
34212
34229
  /**
34213
34230
  * @param {string} number
34214
34231
  * @param {string} message
@@ -34338,7 +34355,7 @@ class BaileysProvider extends bot.ProviderClass {
34338
34355
  */
34339
34356
  this.sendMessage = async (numberIn, message, options) => {
34340
34357
  options = { ...options, ...options['options'] };
34341
- const number = baileyCleanNumber(`${numberIn}`);
34358
+ const number = await this.resolveNumber(numberIn);
34342
34359
  if (options.buttons?.length)
34343
34360
  return this.sendButtons(number, message, options.buttons);
34344
34361
  if (options.media)
@@ -34466,6 +34483,16 @@ class BaileysProvider extends bot.ProviderClass {
34466
34483
  forceString: false,
34467
34484
  errorOnMissing: false,
34468
34485
  });
34486
+ // Cache para almacenar mensajes enviados (soluciona el problema "this message can take a while" en iOS)
34487
+ this.messageCache = new NodeCache({
34488
+ stdTTL: 43200, // 12 horas (optimizado para alto volumen)
34489
+ checkperiod: 1800, // Limpieza cada 30 minutos
34490
+ maxKeys: 20000, // 20K mensajes
34491
+ deleteOnExpire: true,
34492
+ useClones: false,
34493
+ forceString: false,
34494
+ errorOnMissing: false,
34495
+ });
34469
34496
  this.globalVendorArgs = { ...this.globalVendorArgs, ...args };
34470
34497
  this.setupCleanupHandlers();
34471
34498
  this.setupPeriodicCleanup();
@@ -34530,6 +34557,10 @@ class BaileysProvider extends bot.ProviderClass {
34530
34557
  this.userDevicesCache.close();
34531
34558
  this.userDevicesCache = undefined;
34532
34559
  }
34560
+ if (this.messageCache) {
34561
+ this.messageCache.close();
34562
+ this.messageCache = undefined;
34563
+ }
34533
34564
  this.mapSet.clear();
34534
34565
  this.idsDuplicates.length = 0;
34535
34566
  if (this.logStream && typeof this.logStream.end === 'function') {
@@ -34555,6 +34586,12 @@ class BaileysProvider extends bot.ProviderClass {
34555
34586
  .get('/', this.indexHome);
34556
34587
  }
34557
34588
  afterHttpServerInit() { }
34589
+ /**
34590
+ * Accede al lidMapping del signalRepository de Baileys.
34591
+ */
34592
+ get lidMapping() {
34593
+ return this.vendor?.signalRepository?.lidMapping ?? null;
34594
+ }
34558
34595
  shouldReconnect(statusCode) {
34559
34596
  // Lista de códigos donde SÍ debemos reconectar
34560
34597
  const reconnectableCodes = [
@@ -34588,6 +34625,16 @@ class BaileysProvider extends bot.ProviderClass {
34588
34625
  this.logger.log(`[${new Date().toISOString()}] Reconnection attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts} in ${delay}ms`);
34589
34626
  setTimeout(async () => {
34590
34627
  try {
34628
+ // Cerrar el socket anterior para evitar conflictos de conexión (xml-not-well-formed)
34629
+ if (this.vendor) {
34630
+ try {
34631
+ this.vendor.ws?.close();
34632
+ this.vendor.end(new Error('Reconnecting'));
34633
+ }
34634
+ catch (e) {
34635
+ this.logger.log(`[${new Date().toISOString()}] Error closing previous socket:`, e);
34636
+ }
34637
+ }
34591
34638
  this.initVendor().then((v) => this.listenOnEvents(v));
34592
34639
  }
34593
34640
  catch (error) {
package/dist/index.mjs CHANGED
@@ -24,7 +24,7 @@ import require$$1$3 from 'tty';
24
24
  import require$$0$b from 'crypto';
25
25
  import require$$0$d from 'sharp';
26
26
  import require$$0$c from 'fluent-ffmpeg';
27
- import makeWASocketOther, { proto as proto$1, useMultiFileAuthState, isJidGroup, isJidBroadcast, makeCacheableSignalKeyStore, DisconnectReason, getAggregateVotesInPollMessage, downloadMediaMessage } from 'baileys';
27
+ import makeWASocketOther, { useMultiFileAuthState, isJidGroup, isJidBroadcast, makeCacheableSignalKeyStore, DisconnectReason, getAggregateVotesInPollMessage, downloadMediaMessage } from 'baileys';
28
28
 
29
29
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
30
30
 
@@ -4224,19 +4224,24 @@ const emptyDirSessions = async (pathBase) => new Promise((resolve, reject) => {
4224
4224
  });
4225
4225
  });
4226
4226
  /**
4227
- * Cleans the WhatsApp number format.
4228
- * @param number The WhatsApp number to be cleaned.
4229
- * @param full Whether to return the full number format or not.
4230
- * @returns The cleaned number.
4227
+ * Cleans and normalizes a WhatsApp JID.
4228
+ * Supports @s.whatsapp.net, @g.us (groups), and @lid (Local Identifiers).
4229
+ * @param number - Raw JID or phone number
4230
+ * @param full - If true, strips the suffix and returns only the number/id part
4231
4231
  */
4232
4232
  const baileyCleanNumber = (number, full = false) => {
4233
- const regexGroup = /\@g.us\b/gm;
4234
- const exist = number.match(regexGroup);
4235
- if (exist)
4233
+ if (!number)
4234
+ return '';
4235
+ // Groups: always return as-is
4236
+ if (number.includes('@g.us'))
4237
+ return number;
4238
+ // LID (Local Identifiers): always preserve the @lid suffix
4239
+ // so sendMessage/resolveNumber can detect and route correctly
4240
+ if (number.includes('@lid'))
4236
4241
  return number;
4237
- number = number.replace('@s.whatsapp.net', '').replace('+', '').replace(/\s/g, '');
4238
- number = !full ? `${number}@s.whatsapp.net` : number;
4239
- return number;
4242
+ // Standard phone numbers
4243
+ const raw = number.replace('@s.whatsapp.net', '').replace('+', '').replace(/\s/g, '');
4244
+ return full ? raw : `${raw}@s.whatsapp.net`;
4240
4245
  };
4241
4246
  /**
4242
4247
  * Generates an image from a base64 string.
@@ -33754,8 +33759,14 @@ class BaileysProvider extends ProviderClass {
33754
33759
  }
33755
33760
  };
33756
33761
  this.getMessage = async (key) => {
33757
- // only if store is present
33758
- return proto$1.Message.create({});
33762
+ if (!key.id)
33763
+ return {};
33764
+ // Intentar recuperar el mensaje del cache
33765
+ const cachedMessage = this.messageCache?.get(`msg:${key.id}`);
33766
+ if (cachedMessage) {
33767
+ return cachedMessage;
33768
+ }
33769
+ return {};
33759
33770
  };
33760
33771
  this.saveCredsGlobal = null;
33761
33772
  /**
@@ -33933,6 +33944,10 @@ class BaileysProvider extends ProviderClass {
33933
33944
  }
33934
33945
  };
33935
33946
  for (const messageCtx of messages) {
33947
+ // Almacenar mensaje en cache para poder recuperarlo en getMessage (soluciona iOS "this message can take a while")
33948
+ if (messageCtx?.key?.id && messageCtx?.message) {
33949
+ this.messageCache?.set(`msg:${messageCtx.key.id}`, messageCtx.message);
33950
+ }
33936
33951
  if (messageCtx?.messageStubParameters?.length &&
33937
33952
  messageCtx.messageStubParameters[0].includes('absent'))
33938
33953
  continue;
@@ -33995,10 +34010,9 @@ class BaileysProvider extends ProviderClass {
33995
34010
  this.logger.log(`[${new Date().toISOString()}] Message received from phone, id=${messageCtx.requestId}`, messageCtx);
33996
34011
  }
33997
34012
  }
33998
- // Buscar siempre el que tenga formato @s.whatsapp.net (puede estar en remoteJid o remoteJidAlt)
33999
- const remoteJid = messageCtx?.key?.remoteJid;
34000
- const remoteJidAlt = messageCtx?.key?.remoteJidAlt;
34001
- const fromParse = remoteJid?.includes('@lid') ? remoteJidAlt : remoteJid;
34013
+ // Preferir @s.whatsapp.net (remoteJidAlt) sobre @lid cuando esté disponible
34014
+ const { remoteJid, remoteJidAlt } = (messageCtx?.key ?? {});
34015
+ const fromParse = remoteJid?.includes('@lid') ? remoteJidAlt || remoteJid : remoteJid;
34002
34016
  let payload = {
34003
34017
  ...messageCtx,
34004
34018
  body: textToBody,
@@ -34171,17 +34185,11 @@ class BaileysProvider extends ProviderClass {
34171
34185
  };
34172
34186
  /**
34173
34187
  * Obtener LID (Local Identifier) para un número de teléfono (PN)
34174
- * @param {string} phoneNumber - Número de teléfono en formato JID (e.g., '1234567890@s.whatsapp.net')
34175
- * @returns {Promise<string|null>} - El LID correspondiente o null si no se encuentra
34176
- * @example await getLIDForPN('1234567890@s.whatsapp.net')
34188
+ * @param phoneNumber - JID con formato '1234567890@s.whatsapp.net'
34177
34189
  */
34178
34190
  this.getLIDForPN = async (phoneNumber) => {
34179
34191
  try {
34180
- const vendor = this.vendor;
34181
- if (vendor?.signalRepository?.lidMapping?.getLIDForPN) {
34182
- return await vendor.signalRepository.lidMapping.getLIDForPN(phoneNumber);
34183
- }
34184
- return null;
34192
+ return (await this.lidMapping?.getLIDForPN?.(phoneNumber)) ?? null;
34185
34193
  }
34186
34194
  catch (e) {
34187
34195
  this.logger.log(`[${new Date().toISOString()}] Error getting LID for PN:`, e);
@@ -34190,23 +34198,32 @@ class BaileysProvider extends ProviderClass {
34190
34198
  };
34191
34199
  /**
34192
34200
  * Obtener número de teléfono (PN) para un LID (Local Identifier)
34193
- * @param {string} lid - Local Identifier
34194
- * @returns {Promise<string|null>} - El número de teléfono correspondiente o null si no se encuentra
34195
- * @example await getPNForLID('lid:xxxxxx')
34201
+ * @param lid - JID con formato '16424005304394@lid'
34196
34202
  */
34197
34203
  this.getPNForLID = async (lid) => {
34198
34204
  try {
34199
- const vendor = this.vendor;
34200
- if (vendor?.signalRepository?.lidMapping?.getPNForLID) {
34201
- return await vendor.signalRepository.lidMapping.getPNForLID(lid);
34202
- }
34203
- return null;
34205
+ return (await this.lidMapping?.getPNForLID?.(lid)) ?? null;
34204
34206
  }
34205
34207
  catch (e) {
34206
34208
  this.logger.log(`[${new Date().toISOString()}] Error getting PN for LID:`, e);
34207
34209
  return null;
34208
34210
  }
34209
34211
  };
34212
+ /**
34213
+ * Normaliza un número entrante a un JID válido para envío.
34214
+ * Si es un @lid, intenta resolver a @s.whatsapp.net; si falla, envía al LID directamente.
34215
+ */
34216
+ this.resolveNumber = async (numberIn) => {
34217
+ const jid = baileyCleanNumber(`${numberIn}`);
34218
+ if (!jid.includes('@lid'))
34219
+ return jid;
34220
+ const resolved = await this.getPNForLID(jid);
34221
+ if (resolved) {
34222
+ this.logger.log(`[${new Date().toISOString()}] LID resolved: ${jid} -> ${resolved}`);
34223
+ return baileyCleanNumber(resolved);
34224
+ }
34225
+ return jid;
34226
+ };
34210
34227
  /**
34211
34228
  * @param {string} number
34212
34229
  * @param {string} message
@@ -34336,7 +34353,7 @@ class BaileysProvider extends ProviderClass {
34336
34353
  */
34337
34354
  this.sendMessage = async (numberIn, message, options) => {
34338
34355
  options = { ...options, ...options['options'] };
34339
- const number = baileyCleanNumber(`${numberIn}`);
34356
+ const number = await this.resolveNumber(numberIn);
34340
34357
  if (options.buttons?.length)
34341
34358
  return this.sendButtons(number, message, options.buttons);
34342
34359
  if (options.media)
@@ -34464,6 +34481,16 @@ class BaileysProvider extends ProviderClass {
34464
34481
  forceString: false,
34465
34482
  errorOnMissing: false,
34466
34483
  });
34484
+ // Cache para almacenar mensajes enviados (soluciona el problema "this message can take a while" en iOS)
34485
+ this.messageCache = new NodeCache({
34486
+ stdTTL: 43200, // 12 horas (optimizado para alto volumen)
34487
+ checkperiod: 1800, // Limpieza cada 30 minutos
34488
+ maxKeys: 20000, // 20K mensajes
34489
+ deleteOnExpire: true,
34490
+ useClones: false,
34491
+ forceString: false,
34492
+ errorOnMissing: false,
34493
+ });
34467
34494
  this.globalVendorArgs = { ...this.globalVendorArgs, ...args };
34468
34495
  this.setupCleanupHandlers();
34469
34496
  this.setupPeriodicCleanup();
@@ -34528,6 +34555,10 @@ class BaileysProvider extends ProviderClass {
34528
34555
  this.userDevicesCache.close();
34529
34556
  this.userDevicesCache = undefined;
34530
34557
  }
34558
+ if (this.messageCache) {
34559
+ this.messageCache.close();
34560
+ this.messageCache = undefined;
34561
+ }
34531
34562
  this.mapSet.clear();
34532
34563
  this.idsDuplicates.length = 0;
34533
34564
  if (this.logStream && typeof this.logStream.end === 'function') {
@@ -34553,6 +34584,12 @@ class BaileysProvider extends ProviderClass {
34553
34584
  .get('/', this.indexHome);
34554
34585
  }
34555
34586
  afterHttpServerInit() { }
34587
+ /**
34588
+ * Accede al lidMapping del signalRepository de Baileys.
34589
+ */
34590
+ get lidMapping() {
34591
+ return this.vendor?.signalRepository?.lidMapping ?? null;
34592
+ }
34556
34593
  shouldReconnect(statusCode) {
34557
34594
  // Lista de códigos donde SÍ debemos reconectar
34558
34595
  const reconnectableCodes = [
@@ -34586,6 +34623,16 @@ class BaileysProvider extends ProviderClass {
34586
34623
  this.logger.log(`[${new Date().toISOString()}] Reconnection attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts} in ${delay}ms`);
34587
34624
  setTimeout(async () => {
34588
34625
  try {
34626
+ // Cerrar el socket anterior para evitar conflictos de conexión (xml-not-well-formed)
34627
+ if (this.vendor) {
34628
+ try {
34629
+ this.vendor.ws?.close();
34630
+ this.vendor.end(new Error('Reconnecting'));
34631
+ }
34632
+ catch (e) {
34633
+ this.logger.log(`[${new Date().toISOString()}] Error closing previous socket:`, e);
34634
+ }
34635
+ }
34589
34636
  this.initVendor().then((v) => this.listenOnEvents(v));
34590
34637
  }
34591
34638
  catch (error) {
package/dist/utils.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  declare const emptyDirSessions: (pathBase: string) => Promise<unknown>;
2
2
  /**
3
- * Cleans the WhatsApp number format.
4
- * @param number The WhatsApp number to be cleaned.
5
- * @param full Whether to return the full number format or not.
6
- * @returns The cleaned number.
3
+ * Cleans and normalizes a WhatsApp JID.
4
+ * Supports @s.whatsapp.net, @g.us (groups), and @lid (Local Identifiers).
5
+ * @param number - Raw JID or phone number
6
+ * @param full - If true, strips the suffix and returns only the number/id part
7
7
  */
8
8
  declare const baileyCleanNumber: (number: string, full?: boolean) => string;
9
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,gBAAgB,GAAU,UAAU,MAAM,qBAM1C,CAAA;AACN;;;;;GAKG;AACH,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,OAAM,OAAe,KAAG,MAOlE,CAAA;AAED;;;;GAIG;AACH,QAAA,MAAM,mBAAmB,GAAU,QAAQ,MAAM,EAAE,OAAM,MAAiB,KAAG,OAAO,CAAC,IAAI,CAaxF,CAAA;AAED;;;;GAIG;AACH,QAAA,MAAM,mBAAmB,GAAI,WAAW,MAAM,KAAG,OAKhD,CAAA;AAED,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,gBAAgB,GAAU,UAAU,MAAM,qBAM1C,CAAA;AACN;;;;;GAKG;AACH,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,OAAM,OAAe,KAAG,MAalE,CAAA;AAED;;;;GAIG;AACH,QAAA,MAAM,mBAAmB,GAAU,QAAQ,MAAM,EAAE,OAAM,MAAiB,KAAG,OAAO,CAAC,IAAI,CAaxF,CAAA;AAED;;;;GAIG;AACH,QAAA,MAAM,mBAAmB,GAAI,WAAW,MAAM,KAAG,OAKhD,CAAA;AAED,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builderbot/provider-baileys",
3
- "version": "1.3.15-alpha.2",
3
+ "version": "1.3.15-alpha.20",
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>",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "homepage": "https://github.com/codigoencasa/bot-whatsapp#readme",
40
40
  "devDependencies": {
41
- "@builderbot/bot": "1.3.15-alpha.2",
41
+ "@builderbot/bot": "^1.3.15-alpha.20",
42
42
  "@hapi/boom": "^10.0.1",
43
43
  "@jest/globals": "^30.2.0",
44
44
  "@rollup/plugin-commonjs": "^29.0.0",
@@ -77,5 +77,5 @@
77
77
  "node-cache": "^5.1.2",
78
78
  "sharp": "0.33.3"
79
79
  },
80
- "gitHead": "6fe2b64bd3006f6f4805ac0ff36c616a3b91fa09"
80
+ "gitHead": "9e42f89f192af0c70931241e820e726f822dd9cc"
81
81
  }