@jkt48connect-corp/baileys 7.2.7 → 7.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +838 -94
  3. package/WAProto/WAProto.proto +969 -88
  4. package/WAProto/index.d.ts +13199 -1260
  5. package/WAProto/index.js +124901 -74525
  6. package/lib/Defaults/baileys-version.json +1 -1
  7. package/lib/Defaults/index.d.ts +7 -8
  8. package/lib/Defaults/index.js +5 -3
  9. package/lib/Defaults/phonenumber-mcc.json +221 -221
  10. package/lib/Signal/libsignal.js +18 -9
  11. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -2
  12. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -1
  13. package/lib/Socket/business.d.ts +40 -40
  14. package/lib/Socket/chats.d.ts +13 -14
  15. package/lib/Socket/groups.d.ts +20 -21
  16. package/lib/Socket/groups.js +1 -1
  17. package/lib/Socket/index.d.ts +49 -49
  18. package/lib/Socket/messages-recv.d.ts +39 -39
  19. package/lib/Socket/messages-recv.js +310 -151
  20. package/lib/Socket/messages-send.d.ts +33 -31
  21. package/lib/Socket/messages-send.js +269 -36
  22. package/lib/Socket/newsletter.d.ts +24 -25
  23. package/lib/Socket/newsletter.js +3 -3
  24. package/lib/Socket/registration.d.ts +49 -52
  25. package/lib/Socket/registration.js +7 -7
  26. package/lib/Socket/socket.d.ts +6 -7
  27. package/lib/Socket/socket.js +7 -3
  28. package/lib/Store/make-cache-manager-store.d.ts +1 -0
  29. package/lib/Store/make-in-memory-store.d.ts +3 -4
  30. package/lib/Store/make-in-memory-store.js +13 -11
  31. package/lib/Store/make-ordered-dictionary.d.ts +1 -1
  32. package/lib/Types/Auth.d.ts +0 -1
  33. package/lib/Types/Call.d.ts +1 -1
  34. package/lib/Types/Chat.d.ts +12 -7
  35. package/lib/Types/Events.d.ts +17 -2
  36. package/lib/Types/GroupMetadata.d.ts +3 -1
  37. package/lib/Types/Label.d.ts +11 -0
  38. package/lib/Types/Label.js +1 -1
  39. package/lib/Types/LabelAssociation.js +1 -1
  40. package/lib/Types/Message.d.ts +164 -13
  41. package/lib/Types/Newsletter.js +3 -3
  42. package/lib/Types/Socket.d.ts +7 -2
  43. package/lib/Types/index.d.ts +9 -0
  44. package/lib/Types/index.js +1 -1
  45. package/lib/Utils/auth-utils.js +3 -3
  46. package/lib/Utils/business.d.ts +1 -1
  47. package/lib/Utils/business.js +2 -2
  48. package/lib/Utils/chat-utils.d.ts +11 -12
  49. package/lib/Utils/chat-utils.js +41 -20
  50. package/lib/Utils/crypto.d.ts +15 -16
  51. package/lib/Utils/crypto.js +35 -23
  52. package/lib/Utils/decode-wa-message.d.ts +17 -0
  53. package/lib/Utils/decode-wa-message.js +43 -15
  54. package/lib/Utils/generics.d.ts +10 -19
  55. package/lib/Utils/generics.js +32 -16
  56. package/lib/Utils/history.d.ts +6 -2
  57. package/lib/Utils/history.js +3 -0
  58. package/lib/Utils/index.d.ts +0 -1
  59. package/lib/Utils/index.js +0 -1
  60. package/lib/Utils/logger.d.ts +1 -3
  61. package/lib/Utils/make-mutex.d.ts +2 -2
  62. package/lib/Utils/messages-media.d.ts +25 -28
  63. package/lib/Utils/messages-media.js +38 -47
  64. package/lib/Utils/messages.d.ts +5 -8
  65. package/lib/Utils/messages.js +430 -12
  66. package/lib/Utils/noise-handler.d.ts +4 -5
  67. package/lib/Utils/process-message.js +2 -2
  68. package/lib/Utils/use-multi-file-auth-state.js +17 -3
  69. package/lib/Utils/validate-connection.d.ts +2 -2
  70. package/lib/Utils/validate-connection.js +12 -23
  71. package/lib/WABinary/decode.d.ts +1 -2
  72. package/lib/WABinary/decode.js +17 -7
  73. package/lib/WABinary/encode.d.ts +1 -2
  74. package/lib/WABinary/encode.js +33 -17
  75. package/lib/WABinary/generic-utils.d.ts +2 -3
  76. package/lib/WABinary/generic-utils.js +2 -2
  77. package/lib/WABinary/jid-utils.d.ts +1 -1
  78. package/lib/WAM/BinaryInfo.d.ts +2 -11
  79. package/lib/WAM/encode.d.ts +1 -2
  80. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  81. package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
  82. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  83. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
  84. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  85. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
  86. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  87. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  88. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  89. package/lib/WAUSync/Protocols/index.js +20 -0
  90. package/lib/WAUSync/USyncQuery.d.ts +26 -0
  91. package/lib/WAUSync/USyncQuery.js +79 -0
  92. package/lib/WAUSync/USyncUser.d.ts +10 -0
  93. package/lib/WAUSync/USyncUser.js +22 -0
  94. package/lib/WAUSync/index.d.ts +3 -0
  95. package/lib/WAUSync/index.js +19 -0
  96. package/lib/index.js +4 -1
  97. package/package.json +15 -10
  98. package/lib/Socket/community.d.ts +0 -219
  99. package/lib/Socket/community.js +0 -354
  100. package/lib/Utils/use-single-file-auth-statev2.d.ts +0 -12
  101. package/lib/Utils/use-single-file-auth-statev2.js +0 -75
  102. package/lib/index.d.ts +0 -11
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.getAggregateVotesInPollMessage = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
6
+ exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
7
+ exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
7
8
  const boom_1 = require("@hapi/boom");
8
9
  const axios_1 = __importDefault(require("axios"));
9
10
  const crypto_1 = require("crypto");
@@ -239,8 +240,8 @@ const generateForwardMessageContent = (message, forceForward) => {
239
240
  };
240
241
  exports.generateForwardMessageContent = generateForwardMessageContent;
241
242
  const generateWAMessageContent = async (message, options) => {
242
- var _a;
243
- var _b;
243
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
244
+ var _6, _7;
244
245
  let m = {};
245
246
  if ('text' in message) {
246
247
  const extContent = { text: message.text };
@@ -288,6 +289,15 @@ const generateWAMessageContent = async (message, options) => {
288
289
  }
289
290
  else if ('location' in message) {
290
291
  m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
292
+ if ('contextInfo' in message && !!message.contextInfo) {
293
+ m.locationMessage.contextInfo = message.contextInfo;
294
+ }
295
+ }
296
+ else if ('liveLocation' in message) {
297
+ m.liveLocationMessage = Types_1.WAProto.Message.LiveLocationMessage.fromObject(message.liveLocation);
298
+ if ('contextInfo' in message && !!message.contextInfo) {
299
+ m.liveLocationMessage.contextInfo = message.contextInfo;
300
+ }
291
301
  }
292
302
  else if ('react' in message) {
293
303
  if (!message.react.senderTimestampMs) {
@@ -310,6 +320,64 @@ const generateWAMessageContent = async (message, options) => {
310
320
  message.disappearingMessagesInChat;
311
321
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
312
322
  }
323
+ else if ('groupInvite' in message) {
324
+ m.groupInviteMessage = {};
325
+ m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
326
+ m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
327
+ m.groupInviteMessage.caption = message.groupInvite.text;
328
+ m.groupInviteMessage.groupJid = message.groupInvite.jid;
329
+ m.groupInviteMessage.groupName = message.groupInvite.subject;
330
+ m.groupInviteMessage.jpegThumbnail = message.groupInvite.thumbnail;
331
+ //TODO: use built-in interface and get disappearing mode info etc.
332
+ //TODO: cache / use store!?
333
+ if (options.getProfilePicUrl) {
334
+ let pfpUrl;
335
+ try {
336
+ pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
337
+ }
338
+ catch (_8) {
339
+ pfpUrl = null;
340
+ }
341
+ if (pfpUrl) {
342
+ const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
343
+ if (resp.status === 200) {
344
+ m.groupInviteMessage.jpegThumbnail = resp.data;
345
+ }
346
+ }
347
+ else {
348
+ m.groupInviteMessage.jpegThumbnail = null;
349
+ }
350
+ }
351
+ }
352
+ else if ('pin' in message) {
353
+ m.pinInChatMessage = {};
354
+ m.messageContextInfo = {};
355
+ m.pinInChatMessage.key = message.pin;
356
+ m.pinInChatMessage.type = message.type;
357
+ m.pinInChatMessage.senderTimestampMs = Date.now();
358
+ m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
359
+ }
360
+ else if ('keep' in message) {
361
+ m.keepInChatMessage = {};
362
+ m.keepInChatMessage.key = message.keep;
363
+ m.keepInChatMessage.keepType = message.type;
364
+ m.keepInChatMessage.timestampMs = Date.now();
365
+ }
366
+ else if ('call' in message) {
367
+ m = {
368
+ scheduledCallCreationMessage: {
369
+ scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
370
+ callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
371
+ title: message.call.title
372
+ }
373
+ };
374
+ }
375
+ else if ('paymentInvite' in message) {
376
+ m.paymentInviteMessage = {
377
+ serviceType: message.paymentInvite.type,
378
+ expiryTimestamp: message.paymentInvite.expiry
379
+ };
380
+ }
313
381
  else if ('buttonReply' in message) {
314
382
  switch (message.type) {
315
383
  case 'template':
@@ -326,10 +394,23 @@ const generateWAMessageContent = async (message, options) => {
326
394
  type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
327
395
  };
328
396
  break;
397
+ case 'interactive':
398
+ m.interactiveResponseMessage = {
399
+ body: {
400
+ text: message.buttonReply.text,
401
+ format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1
402
+ },
403
+ nativeFlowResponseMessage: {
404
+ name: message.buttonReply.nativeFlow.name,
405
+ paramsJson: message.buttonReply.nativeFlow.paramsJson,
406
+ version: message.buttonReply.nativeFlow.version
407
+ }
408
+ };
409
+ break;
329
410
  }
330
411
  }
331
412
  else if ('product' in message) {
332
- const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
413
+ const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: (_c = message === null || message === void 0 ? void 0 : message.product) === null || _c === void 0 ? void 0 : _c.productImage }, options);
333
414
  m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
334
415
  ...message,
335
416
  product: {
@@ -337,12 +418,34 @@ const generateWAMessageContent = async (message, options) => {
337
418
  productImage: imageMessage,
338
419
  }
339
420
  });
421
+ if ('contextInfo' in message && !!message.contextInfo) {
422
+ m.productMessage.contextInfo = message.contextInfo;
423
+ }
424
+ if ('mentions' in message && !!message.mentions) {
425
+ m.productMessage.contextInfo = { mentionedJid: message.mentions };
426
+ }
427
+ }
428
+ else if ('order' in message) {
429
+ m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
430
+ orderId: message.order.id,
431
+ thumbnail: message.order.thumbnail,
432
+ itemCount: message.order.itemCount,
433
+ status: message.order.status,
434
+ surface: message.order.surface,
435
+ orderTitle: message.order.title,
436
+ message: message.order.text,
437
+ sellerJid: message.order.seller,
438
+ token: message.order.token,
439
+ totalAmount1000: message.order.amount,
440
+ totalCurrencyCode: message.order.currency
441
+ });
340
442
  }
341
443
  else if ('listReply' in message) {
342
444
  m.listResponseMessage = { ...message.listReply };
343
445
  }
344
446
  else if ('poll' in message) {
345
- (_b = message.poll).selectableCount || (_b.selectableCount = 0);
447
+ (_6 = message.poll).selectableCount || (_6.selectableCount = 0);
448
+ (_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
346
449
  if (!Array.isArray(message.poll.values)) {
347
450
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
348
451
  }
@@ -354,11 +457,105 @@ const generateWAMessageContent = async (message, options) => {
354
457
  // encKey
355
458
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
356
459
  };
357
- m.pollCreationMessage = {
460
+ const pollCreationMessage = {
358
461
  name: message.poll.name,
359
462
  selectableOptionsCount: message.poll.selectableCount,
360
463
  options: message.poll.values.map(optionName => ({ optionName })),
361
464
  };
465
+ if (message.poll.toAnnouncementGroup) {
466
+ // poll v2 is for community announcement groups (single select and multiple)
467
+ m.pollCreationMessageV2 = pollCreationMessage;
468
+ }
469
+ else {
470
+ if (message.poll.selectableCount > 0) {
471
+ //poll v3 is for single select polls
472
+ m.pollCreationMessageV3 = pollCreationMessage;
473
+ }
474
+ else {
475
+ // poll v3 for multiple choice polls
476
+ m.pollCreationMessage = pollCreationMessage;
477
+ }
478
+ }
479
+ if ('contextInfo' in message && !!message.contextInfo) {
480
+ pollCreationMessage.contextInfo = message.contextInfo;
481
+ }
482
+ }
483
+ else if ('pollResult' in message) {
484
+ if (!Array.isArray(message.pollResult.votes)) {
485
+ throw new boom_1.Boom('Invalid poll votes result', { statusCode: 400 });
486
+ }
487
+ m.messageContextInfo = {
488
+ // encKey
489
+ messageSecret: message.pollResult.messageSecret || (0, crypto_1.randomBytes)(32),
490
+ };
491
+ const pollResultSnapshotMessage = {
492
+ name: message.pollResult.name,
493
+ pollVotes: message.pollResult.votes.map((option) => ({
494
+ optionName: option[0],
495
+ optionVoteCount: option[1]
496
+ })),
497
+ };
498
+ if ('contextInfo' in message && !!message.contextInfo) {
499
+ pollResultSnapshotMessage.contextInfo = message.contextInfo;
500
+ }
501
+ if ('mentions' in message && !!message.mentions) {
502
+ pollResultSnapshotMessage.contextInfo = { mentionedJid: message.mentions };
503
+ }
504
+ m.pollResultSnapshotMessage = pollResultSnapshotMessage;
505
+ }
506
+ else if ('event' in message) {
507
+ m.messageContextInfo = {
508
+ messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
509
+ };
510
+ m.eventMessage = { ...message.event };
511
+ }
512
+ else if ('inviteAdmin' in message) {
513
+ m.newsletterAdminInviteMessage = {};
514
+ m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
515
+ m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
516
+ m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
517
+ m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
518
+ m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
519
+ }
520
+ else if ('requestPayment' in message) {
521
+ const sticker = ((_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker) ?
522
+ await (0, exports.prepareWAMessageMedia)({ sticker: (_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker, ...options }, options)
523
+ : null;
524
+ let notes = {};
525
+ if ((_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.sticker) {
526
+ notes = {
527
+ stickerMessage: {
528
+ ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
529
+ contextInfo: {
530
+ stanzaId: (_h = (_g = options === null || options === void 0 ? void 0 : options.quoted) === null || _g === void 0 ? void 0 : _g.key) === null || _h === void 0 ? void 0 : _h.id,
531
+ participant: (_k = (_j = options === null || options === void 0 ? void 0 : options.quoted) === null || _j === void 0 ? void 0 : _j.key) === null || _k === void 0 ? void 0 : _k.participant,
532
+ quotedMessage: (_l = options === null || options === void 0 ? void 0 : options.quoted) === null || _l === void 0 ? void 0 : _l.message,
533
+ ...(_m = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _m === void 0 ? void 0 : _m.contextInfo,
534
+ }
535
+ }
536
+ };
537
+ }
538
+ else if (message.requestPayment.note) {
539
+ notes = {
540
+ extendedTextMessage: {
541
+ text: message.requestPayment.note,
542
+ contextInfo: {
543
+ stanzaId: (_p = (_o = options === null || options === void 0 ? void 0 : options.quoted) === null || _o === void 0 ? void 0 : _o.key) === null || _p === void 0 ? void 0 : _p.id,
544
+ participant: (_r = (_q = options === null || options === void 0 ? void 0 : options.quoted) === null || _q === void 0 ? void 0 : _q.key) === null || _r === void 0 ? void 0 : _r.participant,
545
+ quotedMessage: (_s = options === null || options === void 0 ? void 0 : options.quoted) === null || _s === void 0 ? void 0 : _s.message,
546
+ ...(_t = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _t === void 0 ? void 0 : _t.contextInfo,
547
+ }
548
+ }
549
+ };
550
+ }
551
+ m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
552
+ expiryTimestamp: message.requestPayment.expiry,
553
+ amount1000: message.requestPayment.amount,
554
+ currencyCodeIso4217: message.requestPayment.currency,
555
+ requestFrom: message.requestPayment.from,
556
+ noteMessage: { ...notes },
557
+ background: (_u = message.requestPayment.background) !== null && _u !== void 0 ? _u : null,
558
+ });
362
559
  }
363
560
  else if ('sharePhoneNumber' in message) {
364
561
  m.protocolMessage = {
@@ -390,11 +587,21 @@ const generateWAMessageContent = async (message, options) => {
390
587
  if ('footer' in message && !!message.footer) {
391
588
  buttonsMessage.footerText = message.footer;
392
589
  }
590
+ if ('title' in message && !!message.title) {
591
+ buttonsMessage.text = message.title,
592
+ buttonsMessage.headerType = ButtonType.TEXT;
593
+ }
594
+ if ('contextInfo' in message && !!message.contextInfo) {
595
+ buttonsMessage.contextInfo = message.contextInfo;
596
+ }
597
+ if ('mentions' in message && !!message.mentions) {
598
+ buttonsMessage.contextInfo = { mentionedJid: message.mentions };
599
+ }
393
600
  m = { buttonsMessage };
394
601
  }
395
602
  else if ('templateButtons' in message && !!message.templateButtons) {
396
603
  const msg = {
397
- hydratedButtons: message.templateButtons
604
+ hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
398
605
  };
399
606
  if ('text' in message) {
400
607
  msg.hydratedContentText = message.text;
@@ -415,6 +622,203 @@ const generateWAMessageContent = async (message, options) => {
415
622
  }
416
623
  };
417
624
  }
625
+ if ('interactiveButtons' in message && !!message.interactiveButtons) {
626
+ const interactiveMessage = {
627
+ nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
628
+ buttons: message.interactiveButtons,
629
+ })
630
+ };
631
+ if ('text' in message) {
632
+ body: interactiveMessage.body = {
633
+ text: message.text
634
+ };
635
+ header: interactiveMessage.header = {
636
+ title: message.title,
637
+ subtitle: message.subtitle,
638
+ hasMediaAttachment: (_v = message === null || message === void 0 ? void 0 : message.media) !== null && _v !== void 0 ? _v : false,
639
+ };
640
+ }
641
+ else {
642
+ if ('caption' in message) {
643
+ body: interactiveMessage.body = {
644
+ text: message.caption
645
+ };
646
+ header: interactiveMessage.header = {
647
+ title: message.title,
648
+ subtitle: message.subtitle,
649
+ hasMediaAttachment: (_w = message === null || message === void 0 ? void 0 : message.media) !== null && _w !== void 0 ? _w : false,
650
+ };
651
+ Object.assign(interactiveMessage.header, m);
652
+ }
653
+ }
654
+ if ('footer' in message && !!message.footer) {
655
+ footer: interactiveMessage.footer = {
656
+ text: message.footer
657
+ };
658
+ }
659
+ if ('contextInfo' in message && !!message.contextInfo) {
660
+ interactiveMessage.contextInfo = message.contextInfo;
661
+ }
662
+ if ('mentions' in message && !!message.mentions) {
663
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
664
+ }
665
+ m = { interactiveMessage };
666
+ }
667
+ if ('shop' in message && !!message.shop) {
668
+ const interactiveMessage = {
669
+ shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
670
+ surface: message.shop,
671
+ id: message.id
672
+ })
673
+ };
674
+ if ('text' in message) {
675
+ body: interactiveMessage.body = {
676
+ text: message.text
677
+ };
678
+ header: interactiveMessage.header = {
679
+ title: message.title,
680
+ subtitle: message.subtitle,
681
+ hasMediaAttachment: (_x = message === null || message === void 0 ? void 0 : message.media) !== null && _x !== void 0 ? _x : false,
682
+ };
683
+ }
684
+ else {
685
+ if ('caption' in message) {
686
+ body: interactiveMessage.body = {
687
+ text: message.caption
688
+ };
689
+ header: interactiveMessage.header = {
690
+ title: message.title,
691
+ subtitle: message.subtitle,
692
+ hasMediaAttachment: (_y = message === null || message === void 0 ? void 0 : message.media) !== null && _y !== void 0 ? _y : false,
693
+ };
694
+ Object.assign(interactiveMessage.header, m);
695
+ }
696
+ }
697
+ if ('footer' in message && !!message.footer) {
698
+ footer: interactiveMessage.footer = {
699
+ text: message.footer
700
+ };
701
+ }
702
+ if ('contextInfo' in message && !!message.contextInfo) {
703
+ interactiveMessage.contextInfo = message.contextInfo;
704
+ }
705
+ if ('mentions' in message && !!message.mentions) {
706
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
707
+ }
708
+ m = { interactiveMessage };
709
+ }
710
+ if ('collection' in message && !!message.shop) {
711
+ const interactiveMessage = {
712
+ collectionMessage: Types_1.WAProto.Message.InteractiveMessage.CollectionMessage.fromObject({
713
+ bizJid: (_z = message === null || message === void 0 ? void 0 : message.collection) === null || _z === void 0 ? void 0 : _z.bizJid,
714
+ id: (_0 = message === null || message === void 0 ? void 0 : message.collection) === null || _0 === void 0 ? void 0 : _0.id,
715
+ messageVersion: (_1 = message === null || message === void 0 ? void 0 : message.collection) === null || _1 === void 0 ? void 0 : _1.version
716
+ })
717
+ };
718
+ if ('text' in message) {
719
+ body: interactiveMessage.body = {
720
+ text: message.text
721
+ };
722
+ header: interactiveMessage.header = {
723
+ title: message.title,
724
+ subtitle: message.subtitle,
725
+ hasMediaAttachment: (_2 = message === null || message === void 0 ? void 0 : message.media) !== null && _2 !== void 0 ? _2 : false,
726
+ };
727
+ }
728
+ else {
729
+ if ('caption' in message) {
730
+ body: interactiveMessage.body = {
731
+ text: message.caption
732
+ };
733
+ header: interactiveMessage.header = {
734
+ title: message.title,
735
+ subtitle: message.subtitle,
736
+ hasMediaAttachment: (_3 = message === null || message === void 0 ? void 0 : message.media) !== null && _3 !== void 0 ? _3 : false,
737
+ };
738
+ Object.assign(interactiveMessage.header, m);
739
+ }
740
+ }
741
+ if ('footer' in message && !!message.footer) {
742
+ footer: interactiveMessage.footer = {
743
+ text: message.footer
744
+ };
745
+ }
746
+ if ('contextInfo' in message && !!message.contextInfo) {
747
+ interactiveMessage.contextInfo = message.contextInfo;
748
+ }
749
+ if ('mentions' in message && !!message.mentions) {
750
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
751
+ }
752
+ m = { interactiveMessage };
753
+ }
754
+ if ('cards' in message && !!message.cards) {
755
+ const slides = await Promise.all(message.cards.map(async (slide) => {
756
+ const { image, video, product, title, caption, footer, buttons } = slide;
757
+ let header;
758
+ if (product) {
759
+ const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: product.productImage, ...options }, options);
760
+ header = {
761
+ productMesage: Types_1.WAProto.Message.ProductMessage.fromObject({
762
+ product: {
763
+ ...product,
764
+ productImage: imageMessage,
765
+ },
766
+ ...slide
767
+ })
768
+ };
769
+ }
770
+ else if (image) {
771
+ header = await (0, exports.prepareWAMessageMedia)({ image: image, ...options }, options);
772
+ }
773
+ else if (video) {
774
+ header = await (0, exports.prepareWAMessageMedia)({ video: video, ...options }, options);
775
+ }
776
+ const msg = {
777
+ header: Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
778
+ title,
779
+ hasMediaAttachment: true,
780
+ ...header
781
+ }),
782
+ body: Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
783
+ text: caption
784
+ }),
785
+ footer: Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
786
+ text: footer
787
+ }),
788
+ nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
789
+ buttons,
790
+ })
791
+ };
792
+ return msg;
793
+ }));
794
+ const interactiveMessage = {
795
+ carouselMessage: Types_1.WAProto.Message.InteractiveMessage.CarouselMessage.fromObject({
796
+ cards: slides
797
+ })
798
+ };
799
+ if ('text' in message) {
800
+ body: interactiveMessage.body = {
801
+ text: message.text
802
+ };
803
+ header: interactiveMessage.header = {
804
+ title: message.title,
805
+ subtitle: message.subtitle,
806
+ hasMediaAttachment: (_4 = message === null || message === void 0 ? void 0 : message.media) !== null && _4 !== void 0 ? _4 : false,
807
+ };
808
+ }
809
+ if ('footer' in message && !!message.footer) {
810
+ footer: interactiveMessage.footer = {
811
+ text: message.footer
812
+ };
813
+ }
814
+ if ('contextInfo' in message && !!message.contextInfo) {
815
+ interactiveMessage.contextInfo = message.contextInfo;
816
+ }
817
+ if ('mentions' in message && !!message.mentions) {
818
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
819
+ }
820
+ m = { interactiveMessage };
821
+ }
418
822
  if ('sections' in message && !!message.sections) {
419
823
  const listMessage = {
420
824
  sections: message.sections,
@@ -429,7 +833,19 @@ const generateWAMessageContent = async (message, options) => {
429
833
  if ('viewOnce' in message && !!message.viewOnce) {
430
834
  m = { viewOnceMessage: { message: m } };
431
835
  }
432
- if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
836
+ if ('viewOnceV2' in message && !!message.viewOnceV2) {
837
+ m = { viewOnceMessageV2: { message: m } };
838
+ }
839
+ if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
840
+ m = { viewOnceMessageV2Extension: { message: m } };
841
+ }
842
+ if ('ephemeral' in message && !!message.ephemeral) {
843
+ m = { ephemeralMessage: { message: m } };
844
+ }
845
+ if ('lottie' in message && !!message.lottie) {
846
+ m = { lottieStickerMessage: { message: m } };
847
+ }
848
+ if ('mentions' in message && ((_5 = message.mentions) === null || _5 === void 0 ? void 0 : _5.length)) {
433
849
  const [messageType] = Object.keys(m);
434
850
  m[messageType].contextInfo = m[messageType] || {};
435
851
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -453,6 +869,7 @@ const generateWAMessageContent = async (message, options) => {
453
869
  };
454
870
  exports.generateWAMessageContent = generateWAMessageContent;
455
871
  const generateWAMessageFromContent = (jid, message, options) => {
872
+ var _a, _b, _c, _d;
456
873
  // set timestamp to now
457
874
  // if not specified
458
875
  if (!options.timestamp) {
@@ -462,7 +879,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
462
879
  const key = (0, exports.getContentType)(innerMessage);
463
880
  const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
464
881
  const { quoted, userJid } = options;
465
- if (quoted) {
882
+ if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
466
883
  const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
467
884
  let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
468
885
  const msgType = (0, exports.getContentType)(quotedMsg);
@@ -472,7 +889,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
472
889
  if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
473
890
  delete quotedContent.contextInfo;
474
891
  }
475
- const contextInfo = innerMessage[key].contextInfo || {};
892
+ const contextInfo = (key === 'requestPaymentMessage' ? (((_b = (_a = innerMessage.requestPaymentMessage) === null || _a === void 0 ? void 0 : _a.noteMessage) === null || _b === void 0 ? void 0 : _b.extendedTextMessage) || ((_d = (_c = innerMessage.requestPaymentMessage) === null || _c === void 0 ? void 0 : _c.noteMessage) === null || _d === void 0 ? void 0 : _d.stickerMessage)).contextInfo : innerMessage[key].contextInfo) || {};
476
893
  contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
477
894
  contextInfo.stanzaId = quoted.key.id;
478
895
  contextInfo.quotedMessage = quotedMsg;
@@ -489,7 +906,9 @@ const generateWAMessageFromContent = (jid, message, options) => {
489
906
  // and it's not a protocol message -- delete, toggle disappear message
490
907
  key !== 'protocolMessage' &&
491
908
  // already not converted to disappearing message
492
- key !== 'ephemeralMessage') {
909
+ key !== 'ephemeralMessage' &&
910
+ // newsletter not accept disappearing messages
911
+ !(0, WABinary_1.isJidNewsLetter)(jid)) {
493
912
  innerMessage[key].contextInfo = {
494
913
  ...(innerMessage[key].contextInfo || {}),
495
914
  expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
@@ -677,7 +1096,6 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
677
1096
  }
678
1097
  return Object.values(voteHashMap);
679
1098
  }
680
- exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
681
1099
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
682
1100
  const aggregateMessageKeysNotFromMe = (keys) => {
683
1101
  const keyMap = {};
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Logger } from 'pino';
3
2
  import { proto } from '../../WAProto';
4
3
  import { KeyPair } from '../Types';
@@ -10,12 +9,12 @@ export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public
10
9
  logger: Logger;
11
10
  routingInfo?: Buffer | undefined;
12
11
  }) => {
13
- encrypt: (plaintext: Uint8Array) => Buffer;
14
- decrypt: (ciphertext: Uint8Array) => Buffer;
12
+ encrypt: (plaintext: Uint8Array) => any;
13
+ decrypt: (ciphertext: Uint8Array) => any;
15
14
  authenticate: (data: Uint8Array) => void;
16
15
  mixIntoKey: (data: Uint8Array) => void;
17
16
  finishInit: () => void;
18
- processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => Buffer;
19
- encodeFrame: (data: Buffer | Uint8Array) => Buffer;
17
+ processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => any;
18
+ encodeFrame: (data: Buffer | Uint8Array) => any;
20
19
  decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => void;
21
20
  };
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decryptPollVote = exports.getChatId = exports.shouldIncrementChatUnread = exports.isRealMessage = exports.cleanMessage = void 0;
3
+ exports.getChatId = exports.shouldIncrementChatUnread = exports.isRealMessage = exports.cleanMessage = void 0;
4
+ exports.decryptPollVote = decryptPollVote;
4
5
  const WAProto_1 = require("../../WAProto");
5
6
  const Types_1 = require("../Types");
6
7
  const messages_1 = require("../Utils/messages");
@@ -101,7 +102,6 @@ function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pol
101
102
  return Buffer.from(txt);
102
103
  }
103
104
  }
104
- exports.decryptPollVote = decryptPollVote;
105
105
  const processMessage = async (message, { shouldProcessHistoryMsg, ev, creds, keyStore, logger, options, getMessage }) => {
106
106
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
107
107
  const meId = creds.me.id;
@@ -1,11 +1,21 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.useMultiFileAuthState = void 0;
7
+ const async_lock_1 = __importDefault(require("async-lock"));
4
8
  const promises_1 = require("fs/promises");
5
9
  const path_1 = require("path");
6
10
  const WAProto_1 = require("../../WAProto");
7
11
  const auth_utils_1 = require("./auth-utils");
8
12
  const generics_1 = require("./generics");
13
+ // We need to lock files due to the fact that we are using async functions to read and write files
14
+ // https://github.com/WhiskeySockets/Baileys/issues/794
15
+ // https://github.com/nodejs/node/issues/26338
16
+ // Default pending is 1000, set it to infinity
17
+ // https://github.com/rogierschouten/async-lock/issues/63
18
+ const fileLock = new async_lock_1.default({ maxPending: Infinity });
9
19
  /**
10
20
  * stores the full authentication state in a single folder.
11
21
  * Far more efficient than singlefileauthstate
@@ -14,12 +24,15 @@ const generics_1 = require("./generics");
14
24
  * Would recommend writing an auth state for use with a proper SQL or No-SQL DB
15
25
  * */
16
26
  const useMultiFileAuthState = async (folder) => {
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
28
  const writeData = (data, file) => {
18
- return (0, promises_1.writeFile)((0, path_1.join)(folder, fixFileName(file)), JSON.stringify(data, generics_1.BufferJSON.replacer));
29
+ const filePath = (0, path_1.join)(folder, fixFileName(file));
30
+ return fileLock.acquire(filePath, () => (0, promises_1.writeFile)((0, path_1.join)(filePath), JSON.stringify(data, generics_1.BufferJSON.replacer)));
19
31
  };
20
32
  const readData = async (file) => {
21
33
  try {
22
- const data = await (0, promises_1.readFile)((0, path_1.join)(folder, fixFileName(file)), { encoding: 'utf-8' });
34
+ const filePath = (0, path_1.join)(folder, fixFileName(file));
35
+ const data = await fileLock.acquire(filePath, () => (0, promises_1.readFile)(filePath, { encoding: 'utf-8' }));
23
36
  return JSON.parse(data, generics_1.BufferJSON.reviver);
24
37
  }
25
38
  catch (error) {
@@ -28,7 +41,8 @@ const useMultiFileAuthState = async (folder) => {
28
41
  };
29
42
  const removeData = async (file) => {
30
43
  try {
31
- await (0, promises_1.unlink)((0, path_1.join)(folder, fixFileName(file)));
44
+ const filePath = (0, path_1.join)(folder, fixFileName(file));
45
+ await fileLock.acquire(filePath, () => (0, promises_1.unlink)(filePath));
32
46
  }
33
47
  catch (_a) {
34
48
  }
@@ -4,8 +4,8 @@ import { BinaryNode } from '../WABinary';
4
4
  export declare const generateMobileNode: (config: SocketConfig) => proto.IClientPayload;
5
5
  export declare const generateLoginNode: (userJid: string, config: SocketConfig) => proto.IClientPayload;
6
6
  export declare const generateRegistrationNode: ({ registrationId, signedPreKey, signedIdentityKey }: SignalCreds, config: SocketConfig) => proto.ClientPayload;
7
- export declare const configureSuccessfulPairing: (stanza: BinaryNode, { advSecretKey, signedIdentityKey, signalIdentities }: Pick<AuthenticationCreds, 'advSecretKey' | 'signedIdentityKey' | 'signalIdentities'>) => {
7
+ export declare const configureSuccessfulPairing: (stanza: BinaryNode, { advSecretKey, signedIdentityKey, signalIdentities }: Pick<AuthenticationCreds, "advSecretKey" | "signedIdentityKey" | "signalIdentities">) => {
8
8
  creds: Partial<AuthenticationCreds>;
9
9
  reply: BinaryNode;
10
10
  };
11
- export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => Uint8Array;
11
+ export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => any;