alipclutch-baileys 8.5.3 → 8.5.5

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 (112) hide show
  1. package/engine-requirements.js +10 -0
  2. package/lib/Defaults/baileys-version.json +2 -2
  3. package/lib/Defaults/index.d.ts +7 -16
  4. package/lib/Defaults/index.js +119 -90
  5. package/lib/Defaults/phonenumber-mcc.json +223 -0
  6. package/lib/Socket/Client/abstract-socket-client.d.ts +17 -0
  7. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  8. package/lib/Socket/Client/index.d.ts +3 -2
  9. package/lib/Socket/Client/index.js +3 -2
  10. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  11. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  12. package/lib/Socket/Client/web-socket-client.d.ts +12 -0
  13. package/lib/Socket/Client/web-socket-client.js +62 -0
  14. package/lib/Socket/business.d.ts +58 -59
  15. package/lib/Socket/chats.d.ts +230 -45
  16. package/lib/Socket/chats.js +238 -139
  17. package/lib/Socket/groups.d.ts +32 -41
  18. package/lib/Socket/groups.js +23 -38
  19. package/lib/Socket/index.d.ts +64 -63
  20. package/lib/Socket/index.js +3 -2
  21. package/lib/Socket/messages-recv.js +65 -9
  22. package/lib/Socket/messages-send.d.ts +47 -49
  23. package/lib/Socket/messages-send.js +395 -543
  24. package/lib/Socket/newsletter.d.ts +37 -39
  25. package/lib/Socket/newsletter.js +123 -88
  26. package/lib/Socket/registration.d.ts +267 -0
  27. package/lib/Socket/registration.js +166 -0
  28. package/lib/Socket/setup.d.ts +253 -0
  29. package/lib/Socket/setup.js +4 -5
  30. package/lib/Socket/socket.d.ts +43 -270
  31. package/lib/Socket/socket.js +19 -8
  32. package/lib/Socket/usync.d.ts +3 -3
  33. package/lib/Store/index.d.ts +2 -1
  34. package/lib/Store/index.js +3 -1
  35. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  36. package/lib/Store/make-cache-manager-store.js +83 -0
  37. package/lib/Store/make-in-memory-store.d.ts +24 -24
  38. package/lib/Store/make-in-memory-store.js +14 -26
  39. package/lib/Store/make-ordered-dictionary.d.ts +1 -1
  40. package/lib/Store/make-ordered-dictionary.js +2 -2
  41. package/lib/Types/Auth.d.ts +7 -0
  42. package/lib/Types/Call.d.ts +1 -1
  43. package/lib/Types/Chat.d.ts +7 -14
  44. package/lib/Types/Contact.d.ts +1 -5
  45. package/lib/Types/Events.d.ts +2 -44
  46. package/lib/Types/GroupMetadata.d.ts +2 -11
  47. package/lib/Types/Label.js +1 -1
  48. package/lib/Types/LabelAssociation.js +1 -1
  49. package/lib/Types/Message.d.ts +21 -148
  50. package/lib/Types/Message.js +2 -0
  51. package/lib/Types/Newsletter.d.ts +97 -73
  52. package/lib/Types/Newsletter.js +38 -18
  53. package/lib/Types/Socket.d.ts +9 -17
  54. package/lib/Types/index.d.ts +1 -8
  55. package/lib/Types/index.js +2 -2
  56. package/lib/Utils/auth-utils.d.ts +3 -3
  57. package/lib/Utils/auth-utils.js +13 -6
  58. package/lib/Utils/business.js +2 -2
  59. package/lib/Utils/chat-utils.d.ts +16 -15
  60. package/lib/Utils/chat-utils.js +35 -36
  61. package/lib/Utils/crypto.d.ts +16 -15
  62. package/lib/Utils/crypto.js +29 -71
  63. package/lib/Utils/decode-wa-message.d.ts +6 -22
  64. package/lib/Utils/decode-wa-message.js +56 -65
  65. package/lib/Utils/event-buffer.d.ts +2 -2
  66. package/lib/Utils/event-buffer.js +7 -11
  67. package/lib/Utils/generics.d.ts +20 -17
  68. package/lib/Utils/generics.js +75 -95
  69. package/lib/Utils/history.d.ts +0 -4
  70. package/lib/Utils/history.js +6 -4
  71. package/lib/Utils/link-preview.d.ts +2 -2
  72. package/lib/Utils/link-preview.js +1 -34
  73. package/lib/Utils/logger.d.ts +3 -10
  74. package/lib/Utils/lt-hash.d.ts +2 -2
  75. package/lib/Utils/lt-hash.js +6 -6
  76. package/lib/Utils/make-mutex.d.ts +2 -2
  77. package/lib/Utils/messages-media.d.ts +24 -28
  78. package/lib/Utils/messages-media.js +111 -272
  79. package/lib/Utils/messages.d.ts +10 -13
  80. package/lib/Utils/messages.js +51 -336
  81. package/lib/Utils/noise-handler.d.ts +12 -10
  82. package/lib/Utils/noise-handler.js +23 -18
  83. package/lib/Utils/process-message.d.ts +4 -5
  84. package/lib/Utils/process-message.js +25 -108
  85. package/lib/Utils/signal.d.ts +1 -2
  86. package/lib/Utils/signal.js +26 -26
  87. package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
  88. package/lib/Utils/use-multi-file-auth-state.js +0 -6
  89. package/lib/Utils/validate-connection.d.ts +4 -3
  90. package/lib/Utils/validate-connection.js +1 -1
  91. package/lib/WABinary/constants.d.ts +27 -24
  92. package/lib/WABinary/constants.js +13 -1276
  93. package/lib/WABinary/decode.d.ts +4 -3
  94. package/lib/WABinary/decode.js +13 -26
  95. package/lib/WABinary/encode.d.ts +2 -1
  96. package/lib/WABinary/encode.js +152 -137
  97. package/lib/WABinary/generic-utils.d.ts +4 -1
  98. package/lib/WABinary/generic-utils.js +125 -37
  99. package/lib/WABinary/jid-utils.d.ts +5 -11
  100. package/lib/WABinary/jid-utils.js +5 -28
  101. package/lib/WAM/BinaryInfo.d.ts +11 -2
  102. package/lib/WAM/encode.d.ts +2 -1
  103. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
  104. package/lib/index.d.ts +1 -0
  105. package/lib/index.js +15 -27
  106. package/package.json +31 -18
  107. package/WAProto/GenerateStatics.sh +0 -4
  108. package/WAProto/WAProto.proto +0 -4775
  109. package/WAProto/index.d.ts +0 -55057
  110. package/WAProto/index.ts.ts +0 -53473
  111. package/lib/Socket/setup.ts +0 -623
  112. package/lib/WABinary/jid-utils.js.bak +0 -83
@@ -1,6 +1,8 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { Logger } from 'pino';
1
4
  import { type Transform } from 'stream';
2
5
  import { proto } from '../../WAProto';
3
- import { ILogger } from './logger';
4
6
  import { AnyMediaMessageContent, AnyMessageContent, MediaGenerationOptions, MessageContentGenerationOptions, MessageGenerationOptions, MessageGenerationOptionsFromContent, MessageUserReceipt, WAMessage, WAMessageContent, WAProto } from '../Types';
5
7
  import { MediaDownloadOptions } from './messages-media';
6
8
  /**
@@ -9,7 +11,7 @@ import { MediaDownloadOptions } from './messages-media';
9
11
  * @returns the URL, eg. https://google.com
10
12
  */
11
13
  export declare const extractUrlFromText: (text: string) => string | undefined;
12
- export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions["getUrlInfo"], logger: MessageGenerationOptions["logger"]) => Promise<import("../Types").WAUrlInfo | undefined>;
14
+ export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions['getUrlInfo'], logger: MessageGenerationOptions['logger']) => Promise<import("../Types").WAUrlInfo | undefined>;
13
15
  export declare const prepareWAMessageMedia: (message: AnyMediaMessageContent, options: MediaGenerationOptions) => Promise<proto.Message>;
14
16
  export declare const prepareDisappearingMessageSettingContent: (ephemeralExpiration?: number) => proto.Message;
15
17
  /**
@@ -38,13 +40,13 @@ export declare const extractMessageContent: (content: WAMessageContent | undefin
38
40
  /**
39
41
  * Returns the device predicted by message ID
40
42
  */
41
- export declare const getDevice: (id: string) => "web" | "unknown" | "android" | "ios" | "desktop";
43
+ export declare const getDevice: (id: string) => "android" | "unknown" | "web" | "ios" | "desktop";
42
44
  /** Upserts a receipt in the message */
43
- export declare const updateMessageWithReceipt: (msg: Pick<WAMessage, "userReceipt">, receipt: MessageUserReceipt) => void;
45
+ export declare const updateMessageWithReceipt: (msg: Pick<WAMessage, 'userReceipt'>, receipt: MessageUserReceipt) => void;
44
46
  /** Update the message with a new reaction */
45
- export declare const updateMessageWithReaction: (msg: Pick<WAMessage, "reactions">, reaction: proto.IReaction) => void;
47
+ export declare const updateMessageWithReaction: (msg: Pick<WAMessage, 'reactions'>, reaction: proto.IReaction) => void;
46
48
  /** Update the message with a new poll update */
47
- export declare const updateMessageWithPollUpdate: (msg: Pick<WAMessage, "pollUpdates">, update: proto.IPollUpdate) => void;
49
+ export declare const updateMessageWithPollUpdate: (msg: Pick<WAMessage, 'pollUpdates'>, update: proto.IPollUpdate) => void;
48
50
  type VoteAggregation = {
49
51
  name: string;
50
52
  voters: string[];
@@ -64,17 +66,12 @@ export declare const aggregateMessageKeysNotFromMe: (keys: proto.IMessageKey[])
64
66
  }[];
65
67
  type DownloadMediaMessageContext = {
66
68
  reuploadRequest: (msg: WAMessage) => Promise<WAMessage>;
67
- logger: ILogger;
69
+ logger: Logger;
68
70
  };
69
71
  /**
70
72
  * Downloads the given message. Throws an error if it's not a media message
71
73
  */
72
- export declare const downloadMediaMessage: <Type extends "buffer" | "stream">(message: WAMessage, type: Type, options: MediaDownloadOptions, ctx?: DownloadMediaMessageContext) => Promise<Type extends "buffer" ? Buffer<ArrayBufferLike> : Transform>;
74
+ export declare const downloadMediaMessage: <Type extends "stream" | "buffer">(message: WAMessage, type: Type, options: MediaDownloadOptions, ctx?: DownloadMediaMessageContext) => Promise<Type extends "buffer" ? Buffer : Transform>;
73
75
  /** Checks whether the given message is a media message; if it is returns the inner content */
74
76
  export declare const assertMediaContent: (content: proto.IMessage | null | undefined) => proto.Message.IVideoMessage | proto.Message.IImageMessage | proto.Message.IAudioMessage | proto.Message.IDocumentMessage | proto.Message.IStickerMessage;
75
- export declare const toJid: (id: string) => string;
76
- export declare const getSenderLid: (msg: WAMessage) => {
77
- jid: string;
78
- lid: string;
79
- };
80
77
  export {};
@@ -1,11 +1,9 @@
1
- /* modified by alip*/
2
- "use strict";
1
+ "use strict";
3
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
4
  };
6
5
  Object.defineProperty(exports, "__esModule", { value: true });
7
- 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;
8
- exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
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;
9
7
  const boom_1 = require("@hapi/boom");
10
8
  const axios_1 = __importDefault(require("axios"));
11
9
  const crypto_1 = require("crypto");
@@ -76,8 +74,11 @@ const prepareWAMessageMedia = async (message, options) => {
76
74
  }
77
75
  }
78
76
  if (!mediaType) {
79
- throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
77
+ throw new boom_1.Boom('Invalid media type', {
78
+ statusCode: 400
79
+ });
80
80
  }
81
+
81
82
  const uploadData = {
82
83
  ...message,
83
84
  ...(message.annotations ? {
@@ -115,20 +116,20 @@ const prepareWAMessageMedia = async (message, options) => {
115
116
  media: message[mediaType]
116
117
  };
117
118
  delete uploadData[mediaType];
118
- // check if cacheable + generate cache key
119
119
  const cacheableKey = typeof uploadData.media === 'object' &&
120
120
  ('url' in uploadData.media) &&
121
121
  !!uploadData.media.url &&
122
122
  !!options.mediaCache && (
123
- // generate the key
124
123
  mediaType + ':' + uploadData.media.url.toString());
124
+
125
125
  if (mediaType === 'document' && !uploadData.fileName) {
126
126
  uploadData.fileName = 'file';
127
127
  }
128
+
128
129
  if (!uploadData.mimetype) {
129
130
  uploadData.mimetype = MIMETYPE_MAP[mediaType];
130
131
  }
131
- // check for cache hit
132
+
132
133
  if (cacheableKey) {
133
134
  const mediaBuff = options.mediaCache.get(cacheableKey);
134
135
  if (mediaBuff) {
@@ -139,7 +140,8 @@ const prepareWAMessageMedia = async (message, options) => {
139
140
  return obj;
140
141
  }
141
142
  }
142
- const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
143
+
144
+ const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
143
145
  const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
144
146
  (typeof uploadData['jpegThumbnail'] === 'undefined');
145
147
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
@@ -200,18 +202,13 @@ const prepareWAMessageMedia = async (message, options) => {
200
202
  if (!Buffer.isBuffer(encWriteStream)) {
201
203
  encWriteStream.destroy();
202
204
  }
203
- // remove tmp files
205
+
204
206
  if (didSaveToTmpPath && bodyPath) {
205
- try {
206
- await fs_1.promises.access(bodyPath);
207
- await fs_1.promises.unlink(bodyPath);
208
- logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp file');
209
- }
210
- catch (error) {
211
- logger === null || logger === void 0 ? void 0 : logger.warn('failed to remove tmp file');
212
- }
207
+ await fs_1.promises.unlink(bodyPath);
208
+ logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
213
209
  }
214
210
  });
211
+
215
212
  const obj = Types_1.WAProto.Message.fromObject({
216
213
  [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
217
214
  url: handle ? undefined : mediaUrl,
@@ -225,25 +222,17 @@ const prepareWAMessageMedia = async (message, options) => {
225
222
  media: undefined
226
223
  })
227
224
  });
228
-
229
- // START PERBAIKAN PTV UNTUK CHANNEL
225
+
230
226
  if (uploadData.ptv) {
231
- if (options.newsletter) {
232
- // Untuk Channel (Newsletter), set flag viewOnce di videoMessage
233
- obj.videoMessage = obj.videoMessage;
234
- obj.videoMessage.viewOnce = true;
235
- } else {
236
- // Untuk chat biasa, gunakan ptvMessage
237
- obj.ptvMessage = obj.videoMessage;
238
- delete obj.videoMessage;
239
- }
227
+ obj.ptvMessage = obj.videoMessage;
228
+ delete obj.videoMessage;
240
229
  }
241
- // END PERBAIKAN PTV UNTUK CHANNEL
242
230
 
243
231
  if (cacheableKey) {
244
232
  logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
245
233
  options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
246
234
  }
235
+
247
236
  return obj;
248
237
  };
249
238
  exports.prepareWAMessageMedia = prepareWAMessageMedia;
@@ -294,8 +283,8 @@ const generateForwardMessageContent = (message, forceForward) => {
294
283
  };
295
284
  exports.generateForwardMessageContent = generateForwardMessageContent;
296
285
  const generateWAMessageContent = async (message, options) => {
297
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
298
- var _p, _q;
286
+ var _a;
287
+ var _b;
299
288
  let m = {};
300
289
  if ('text' in message) {
301
290
  const extContent = { text: message.text };
@@ -304,6 +293,7 @@ const generateWAMessageContent = async (message, options) => {
304
293
  urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
305
294
  }
306
295
  if (urlInfo) {
296
+ extContent.canonicalUrl = urlInfo['canonical-url'];
307
297
  extContent.matchedText = urlInfo['matched-text'];
308
298
  extContent.jpegThumbnail = urlInfo.jpegThumbnail;
309
299
  extContent.description = urlInfo.description;
@@ -364,54 +354,6 @@ const generateWAMessageContent = async (message, options) => {
364
354
  message.disappearingMessagesInChat;
365
355
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
366
356
  }
367
- else if ('groupInvite' in message) {
368
- m.groupInviteMessage = {};
369
- m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
370
- m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
371
- m.groupInviteMessage.caption = message.groupInvite.text;
372
- m.groupInviteMessage.groupJid = message.groupInvite.jid;
373
- m.groupInviteMessage.groupName = message.groupInvite.subject;
374
- //TODO: use built-in interface and get disappearing mode info etc.
375
- //TODO: cache / use store!?
376
- if (options.getProfilePicUrl) {
377
- const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
378
- if (pfpUrl) {
379
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
380
- if (resp.status === 200) {
381
- m.groupInviteMessage.jpegThumbnail = resp.data;
382
- }
383
- }
384
- }
385
- }
386
- else if ('pin' in message) {
387
- m.pinInChatMessage = {};
388
- m.messageContextInfo = {};
389
- m.pinInChatMessage.key = message.pin;
390
- m.pinInChatMessage.type = message.type;
391
- m.pinInChatMessage.senderTimestampMs = Date.now();
392
- m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
393
- }
394
- else if ('keep' in message) {
395
- m.keepInChatMessage = {};
396
- m.keepInChatMessage.key = message.keep;
397
- m.keepInChatMessage.keepType = message.type;
398
- m.keepInChatMessage.timestampMs = Date.now();
399
- }
400
- else if ('call' in message) {
401
- m = {
402
- scheduledCallCreationMessage: {
403
- scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
404
- callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
405
- title: message.call.title
406
- }
407
- };
408
- }
409
- else if ('paymentInvite' in message) {
410
- m.paymentInviteMessage = {
411
- serviceType: message.paymentInvite.type,
412
- expiryTimestamp: message.paymentInvite.expiry
413
- };
414
- }
415
357
  else if ('buttonReply' in message) {
416
358
  switch (message.type) {
417
359
  case 'template':
@@ -430,10 +372,6 @@ const generateWAMessageContent = async (message, options) => {
430
372
  break;
431
373
  }
432
374
  }
433
- else if ('ptv' in message && message.ptv) {
434
- const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video, ptv: true }, options); // <-- Perbaikan ptv: true
435
- m.ptvMessage = videoMessage;
436
- }
437
375
  else if ('product' in message) {
438
376
  const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
439
377
  m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
@@ -444,27 +382,11 @@ const generateWAMessageContent = async (message, options) => {
444
382
  }
445
383
  });
446
384
  }
447
- else if ('order' in message) {
448
- m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
449
- orderId: message.order.id,
450
- thumbnail: message.order.thumbnail,
451
- itemCount: message.order.itemCount,
452
- status: message.order.status,
453
- surface: message.order.surface,
454
- orderTitle: message.order.title,
455
- message: message.order.text,
456
- sellerJid: message.order.seller,
457
- token: message.order.token,
458
- totalAmount1000: message.order.amount,
459
- totalCurrencyCode: message.order.currency
460
- });
461
- }
462
385
  else if ('listReply' in message) {
463
386
  m.listResponseMessage = { ...message.listReply };
464
387
  }
465
388
  else if ('poll' in message) {
466
- (_p = message.poll).selectableCount || (_p.selectableCount = 0);
467
- (_q = message.poll).toAnnouncementGroup || (_q.toAnnouncementGroup = false);
389
+ (_b = message.poll).selectableCount || (_b.selectableCount = 0);
468
390
  if (!Array.isArray(message.poll.values)) {
469
391
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
470
392
  }
@@ -476,72 +398,11 @@ const generateWAMessageContent = async (message, options) => {
476
398
  // encKey
477
399
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
478
400
  };
479
- const pollCreationMessage = {
401
+ m.pollCreationMessage = {
480
402
  name: message.poll.name,
481
403
  selectableOptionsCount: message.poll.selectableCount,
482
404
  options: message.poll.values.map(optionName => ({ optionName })),
483
405
  };
484
- if (message.poll.toAnnouncementGroup) {
485
- // poll v2 is for community announcement groups (single select and multiple)
486
- m.pollCreationMessageV2 = pollCreationMessage;
487
- }
488
- else {
489
- if (message.poll.selectableCount === 1) {
490
- // poll v3 is for single select polls
491
- m.pollCreationMessageV3 = pollCreationMessage;
492
- }
493
- else {
494
- // poll for multiple choice polls
495
- m.pollCreationMessage = pollCreationMessage;
496
- }
497
- }
498
- }
499
- else if ('event' in message) {
500
- m.messageContextInfo = {
501
- messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
502
- };
503
- m.eventMessage = { ...message.event };
504
- }
505
- else if ('inviteAdmin' in message) {
506
- m.newsletterAdminInviteMessage = {};
507
- m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
508
- m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
509
- m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
510
- m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
511
- m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
512
- }
513
- else if ('requestPayment' in message) {
514
- const sticker = ((_c = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _c === void 0 ? void 0 : _c.sticker) ?
515
- await (0, exports.prepareWAMessageMedia)({ sticker: (_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker, ...options }, options)
516
- : null;
517
- let notes = {};
518
- if ((_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker) {
519
- notes = {
520
- stickerMessage: {
521
- ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
522
- contextInfo: (_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.contextInfo
523
- }
524
- };
525
- }
526
- else if (message.requestPayment.note) {
527
- notes = {
528
- extendedTextMessage: {
529
- text: message.requestPayment.note,
530
- contextInfo: (_g = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _g === void 0 ? void 0 : _g.contextInfo,
531
- }
532
- };
533
- }
534
- else {
535
- throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
536
- }
537
- m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
538
- expiryTimestamp: message.requestPayment.expiry,
539
- amount1000: message.requestPayment.amount,
540
- currencyCodeIso4217: message.requestPayment.currency,
541
- requestFrom: message.requestPayment.from,
542
- noteMessage: { ...notes },
543
- background: (_h = message.requestPayment.background) !== null && _h !== void 0 ? _h : null,
544
- });
545
406
  }
546
407
  else if ('sharePhoneNumber' in message) {
547
408
  m.protocolMessage = {
@@ -551,14 +412,6 @@ const generateWAMessageContent = async (message, options) => {
551
412
  else if ('requestPhoneNumber' in message) {
552
413
  m.requestPhoneNumberMessage = {};
553
414
  }
554
- else if ('album' in message) {
555
- const imageMessages = message.album.filter(item => 'image' in item);
556
- const videoMessages = message.album.filter(item => 'video' in item);
557
- m.albumMessage = WAProto_1.proto.Message.AlbumMessage.fromObject({
558
- expectedImageCount: imageMessages.length,
559
- expectedVideoCount: videoMessages.length,
560
- });
561
- }
562
415
  else {
563
416
  m = await (0, exports.prepareWAMessageMedia)(message, options);
564
417
  }
@@ -578,24 +431,14 @@ const generateWAMessageContent = async (message, options) => {
578
431
  buttonsMessage.headerType = ButtonType[type];
579
432
  Object.assign(buttonsMessage, m);
580
433
  }
581
- if ('title' in message && !!message.title) {
582
- buttonsMessage.text = message.title,
583
- buttonsMessage.headerType = ButtonType.TEXT;
584
- }
585
434
  if ('footer' in message && !!message.footer) {
586
435
  buttonsMessage.footerText = message.footer;
587
436
  }
588
- if ('contextInfo' in message && !!message.contextInfo) {
589
- buttonsMessage.contextInfo = message.contextInfo;
590
- }
591
- if ('mentions' in message && !!message.mentions) {
592
- buttonsMessage.contextInfo = { mentionedJid: message.mentions };
593
- }
594
437
  m = { buttonsMessage };
595
438
  }
596
439
  else if ('templateButtons' in message && !!message.templateButtons) {
597
440
  const msg = {
598
- hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
441
+ hydratedButtons: message.templateButtons
599
442
  };
600
443
  if ('text' in message) {
601
444
  msg.hydratedContentText = message.text;
@@ -627,97 +470,10 @@ const generateWAMessageContent = async (message, options) => {
627
470
  };
628
471
  m = { listMessage };
629
472
  }
630
- if ('interactiveButtons' in message && !!message.interactiveButtons) {
631
- const interactiveMessage = {
632
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
633
- buttons: message.interactiveButtons,
634
- })
635
- };
636
- if ('text' in message) {
637
- interactiveMessage.body = {
638
- text: message.text
639
- };
640
- }
641
- else if ('caption' in message) {
642
- interactiveMessage.body = {
643
- text: message.caption
644
- };
645
- interactiveMessage.header = {
646
- title: message.title,
647
- subtitle: message.subtitle,
648
- hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
649
- };
650
- Object.assign(interactiveMessage.header, m);
651
- }
652
- if ('footer' in message && !!message.footer) {
653
- interactiveMessage.footer = {
654
- text: message.footer
655
- };
656
- }
657
- if ('title' in message && !!message.title) {
658
- interactiveMessage.header = {
659
- title: message.title,
660
- subtitle: message.subtitle,
661
- hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
662
- };
663
- Object.assign(interactiveMessage.header, m);
664
- }
665
- if ('contextInfo' in message && !!message.contextInfo) {
666
- interactiveMessage.contextInfo = message.contextInfo;
667
- }
668
- if ('mentions' in message && !!message.mentions) {
669
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
670
- }
671
- m = { interactiveMessage };
672
- }
673
- if ('shop' in message && !!message.shop) {
674
- const interactiveMessage = {
675
- shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
676
- surface: message.shop,
677
- id: message.id
678
- })
679
- };
680
- if ('text' in message) {
681
- interactiveMessage.body = {
682
- text: message.text
683
- };
684
- }
685
- else if ('caption' in message) {
686
- interactiveMessage.body = {
687
- text: message.caption
688
- };
689
- interactiveMessage.header = {
690
- title: message.title,
691
- subtitle: message.subtitle,
692
- hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
693
- };
694
- Object.assign(interactiveMessage.header, m);
695
- }
696
- if ('footer' in message && !!message.footer) {
697
- interactiveMessage.footer = {
698
- text: message.footer
699
- };
700
- }
701
- if ('title' in message && !!message.title) {
702
- interactiveMessage.header = {
703
- title: message.title,
704
- subtitle: message.subtitle,
705
- hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
706
- };
707
- Object.assign(interactiveMessage.header, m);
708
- }
709
- if ('contextInfo' in message && !!message.contextInfo) {
710
- interactiveMessage.contextInfo = message.contextInfo;
711
- }
712
- if ('mentions' in message && !!message.mentions) {
713
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
714
- }
715
- m = { interactiveMessage };
716
- }
717
473
  if ('viewOnce' in message && !!message.viewOnce) {
718
474
  m = { viewOnceMessage: { message: m } };
719
475
  }
720
- if ('mentions' in message && ((_o = message.mentions) === null || _o === void 0 ? void 0 : _o.length)) {
476
+ if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
721
477
  const [messageType] = Object.keys(m);
722
478
  m[messageType].contextInfo = m[messageType] || {};
723
479
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -750,29 +506,26 @@ const generateWAMessageFromContent = (jid, message, options) => {
750
506
  const key = (0, exports.getContentType)(innerMessage);
751
507
  const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
752
508
  const { quoted, userJid } = options;
753
- // only set quoted if isn't a newsletter message
754
- if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
509
+ if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
755
510
  const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
756
511
  let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
757
512
  const msgType = (0, exports.getContentType)(quotedMsg);
758
513
  // strip any redundant properties
759
- if (quotedMsg) {
760
- quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
761
- const quotedContent = quotedMsg[msgType];
762
- if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
763
- delete quotedContent.contextInfo;
764
- }
765
- const contextInfo = innerMessage[key].contextInfo || {};
766
- contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
767
- contextInfo.stanzaId = quoted.key.id;
768
- contextInfo.quotedMessage = quotedMsg;
769
- // if a participant is quoted, then it must be a group
770
- // hence, remoteJid of group must also be entered
771
- if (jid !== quoted.key.remoteJid) {
772
- contextInfo.remoteJid = quoted.key.remoteJid;
773
- }
774
- innerMessage[key].contextInfo = contextInfo;
775
- }
514
+ quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
515
+ const quotedContent = quotedMsg[msgType];
516
+ if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
517
+ delete quotedContent.contextInfo;
518
+ }
519
+ const contextInfo = innerMessage[key].contextInfo || {};
520
+ contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
521
+ contextInfo.stanzaId = quoted.key.id;
522
+ contextInfo.quotedMessage = quotedMsg;
523
+ // if a participant is quoted, then it must be a group
524
+ // hence, remoteJid of group must also be entered
525
+ if (jid !== quoted.key.remoteJid) {
526
+ contextInfo.remoteJid = quoted.key.remoteJid;
527
+ }
528
+ innerMessage[key].contextInfo = contextInfo;
776
529
  }
777
530
  if (
778
531
  // if we want to send a disappearing message
@@ -782,7 +535,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
782
535
  // already not converted to disappearing message
783
536
  key !== 'ephemeralMessage' &&
784
537
  // newsletter not accept disappearing messages
785
- !(0, WABinary_1.isJidNewsletter)(jid)) {
538
+ !(0, WABinary_1.isJidNewsLetter)(jid)) {
786
539
  innerMessage[key].contextInfo = {
787
540
  ...(innerMessage[key].contextInfo || {}),
788
541
  expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
@@ -794,7 +547,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
794
547
  key: {
795
548
  remoteJid: jid,
796
549
  fromMe: true,
797
- id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageIDV2)(),
550
+ id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageID)(),
798
551
  },
799
552
  message: message,
800
553
  messageTimestamp: timestamp,
@@ -809,7 +562,7 @@ const generateWAMessage = async (jid, content, options) => {
809
562
  var _a;
810
563
  // ensure msg ID is with every log
811
564
  options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
812
- return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsletter)(jid), ...options }), options);
565
+ return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
813
566
  };
814
567
  exports.generateWAMessage = generateWAMessage;
815
568
  /** Get the key to access the true type of content */
@@ -846,24 +599,7 @@ const normalizeMessageContent = (content) => {
846
599
  || (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
847
600
  || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
848
601
  || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
849
- || (message === null || message === void 0 ? void 0 : message.editedMessage)
850
- || (message === null || message === void 0 ? void 0 : message.groupMentionedMessage)
851
- || (message === null || message === void 0 ? void 0 : message.botInvokeMessage)
852
- || (message === null || message === void 0 ? void 0 : message.lottieStickerMessage)
853
- || (message === null || message === void 0 ? void 0 : message.eventCoverImage)
854
- || (message === null || message === void 0 ? void 0 : message.statusMentionMessage)
855
- || (message === null || message === void 0 ? void 0 : message.pollCreationOptionImageMessage)
856
- || (message === null || message === void 0 ? void 0 : message.associatedChildMessage)
857
- || (message === null || message === void 0 ? void 0 : message.groupStatusMentionMessage)
858
- || (message === null || message === void 0 ? void 0 : message.pollCreationMessageV4)
859
- || (message === null || message === void 0 ? void 0 : message.pollCreationMessageV5)
860
- || (message === null || message === void 0 ? void 0 : message.statusAddYours)
861
- || (message === null || message === void 0 ? void 0 : message.groupStatusMessage)
862
- || (message === null || message === void 0 ? void 0 : message.limitSharingMessage)
863
- || (message === null || message === void 0 ? void 0 : message.botTaskMessage)
864
- || (message === null || message === void 0 ? void 0 : message.questionMessage)
865
- || (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2)
866
- || (message === null || message === void 0 ? void 0 : message.botForwardedMessage));
602
+ || (message === null || message === void 0 ? void 0 : message.editedMessage));
867
603
  }
868
604
  };
869
605
  exports.normalizeMessageContent = normalizeMessageContent;
@@ -913,11 +649,7 @@ exports.extractMessageContent = extractMessageContent;
913
649
  /**
914
650
  * Returns the device predicted by message ID
915
651
  */
916
- const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
917
- /^3E.{20}$/.test(id) ? 'web' :
918
- /^(.{21}|.{32})$/.test(id) ? 'android' :
919
- /^(3F|.{18}$)/.test(id) ? 'desktop' :
920
- 'unknown';
652
+ const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' : /^3E.{20}$/.test(id) ? 'web' : /^(.{21}|.{32})$/.test(id) ? 'android' : /^.{18}$/.test(id) ? 'desktop' : 'unknown';
921
653
  exports.getDevice = getDevice;
922
654
  /** Upserts a receipt in the message */
923
655
  const updateMessageWithReceipt = (msg, receipt) => {
@@ -936,8 +668,9 @@ const updateMessageWithReaction = (msg, reaction) => {
936
668
  const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
937
669
  const reactions = (msg.reactions || [])
938
670
  .filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
939
- reaction.text = reaction.text || '';
940
- reactions.push(reaction);
671
+ if (reaction.text) {
672
+ reactions.push(reaction);
673
+ }
941
674
  msg.reactions = reactions;
942
675
  };
943
676
  exports.updateMessageWithReaction = updateMessageWithReaction;
@@ -990,6 +723,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
990
723
  }
991
724
  return Object.values(voteHashMap);
992
725
  }
726
+ exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
993
727
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
994
728
  const aggregateMessageKeysNotFromMe = (keys) => {
995
729
  const keyMap = {};
@@ -1080,22 +814,3 @@ const assertMediaContent = (content) => {
1080
814
  return mediaContent;
1081
815
  };
1082
816
  exports.assertMediaContent = assertMediaContent;
1083
-
1084
- const toJid = (id) => {
1085
- if (!id)
1086
- return '';
1087
- if (id.endsWith('@lid'))
1088
- return id.replace('@lid', '@s.whatsapp.net');
1089
- if (id.includes('@'))
1090
- return id;
1091
- return `${id}@s.whatsapp.net`;
1092
- };
1093
- exports.toJid = toJid;
1094
- const getSenderLid = (message) => {
1095
- const sender = message.key.participant || message.key.remoteJid;
1096
- const user = (0, WABinary_1.jidDecode)(sender)?.user || '';
1097
- const lid = (0, WABinary_1.jidEncode)(user, 'lid');
1098
- console.log('sender lid:', lid);
1099
- return { jid: sender, lid };
1100
- };
1101
- exports.getSenderLid = getSenderLid;