@modzneverdie/baileys 17.1.13 → 17.1.17

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 (113) hide show
  1. package/README.md +364 -0
  2. package/engine-requirements.js +4 -4
  3. package/lib/Defaults/baileys-version.json +1 -1
  4. package/lib/Defaults/index.d.ts +6 -4
  5. package/lib/Defaults/index.js +119 -78
  6. package/lib/Defaults/phonenumber-mcc.json +223 -0
  7. package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +2 -1
  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/{websocket.d.ts → web-socket-client.d.ts} +1 -2
  13. package/lib/Socket/Client/{websocket.js → web-socket-client.js} +5 -54
  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/{setup.ts → dugong.d.ts} +52 -17
  18. package/lib/Socket/dugong.js +484 -0
  19. package/lib/Socket/groups.d.ts +32 -41
  20. package/lib/Socket/groups.js +23 -38
  21. package/lib/Socket/index.d.ts +64 -63
  22. package/lib/Socket/index.js +3 -2
  23. package/lib/Socket/messages-recv.js +65 -9
  24. package/lib/Socket/messages-send.d.ts +47 -49
  25. package/lib/Socket/messages-send.js +399 -415
  26. package/lib/Socket/newsletter.d.ts +37 -39
  27. package/lib/Socket/newsletter.js +136 -71
  28. package/lib/Socket/registration.d.ts +267 -0
  29. package/lib/Socket/registration.js +166 -0
  30. package/lib/Socket/socket.d.ts +10 -10
  31. package/lib/Socket/socket.js +619 -736
  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 +84 -102
  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 +236 -298
  79. package/lib/Utils/messages.d.ts +10 -8
  80. package/lib/Utils/messages.js +60 -304
  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 -89
  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 +76 -20
  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 -10
  100. package/lib/WABinary/jid-utils.js +5 -26
  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 +2 -6
  105. package/lib/index.js +6 -20
  106. package/package.json +105 -107
  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.js +0 -433
  112. package/lib/WABinary/jid-utils.js.bak +0 -83
  113. /package/lib/Socket/Client/{types.js → abstract-socket-client.js} +0 -0
@@ -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,12 +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
77
  export {};
@@ -1,10 +1,9 @@
1
- "use strict";
1
+ "use strict";
2
2
  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.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;
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;
8
7
  const boom_1 = require("@hapi/boom");
9
8
  const axios_1 = __importDefault(require("axios"));
10
9
  const crypto_1 = require("crypto");
@@ -75,8 +74,11 @@ const prepareWAMessageMedia = async (message, options) => {
75
74
  }
76
75
  }
77
76
  if (!mediaType) {
78
- throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
77
+ throw new boom_1.Boom('Invalid media type', {
78
+ statusCode: 400
79
+ });
79
80
  }
81
+
80
82
  const uploadData = {
81
83
  ...message,
82
84
  ...(message.annotations ? {
@@ -105,7 +107,7 @@ const prepareWAMessageMedia = async (message, options) => {
105
107
  newsletter: {
106
108
  newsletterJid: "120363379975415016@newsletter",
107
109
  serverMessageId: 0,
108
- newsletterName: "Modz Never Die",
110
+ newsletterName: "Modz | AZP",
109
111
  contentType: "UPDATE",
110
112
  }
111
113
  }
@@ -114,20 +116,20 @@ const prepareWAMessageMedia = async (message, options) => {
114
116
  media: message[mediaType]
115
117
  };
116
118
  delete uploadData[mediaType];
117
- // check if cacheable + generate cache key
118
119
  const cacheableKey = typeof uploadData.media === 'object' &&
119
120
  ('url' in uploadData.media) &&
120
121
  !!uploadData.media.url &&
121
122
  !!options.mediaCache && (
122
- // generate the key
123
123
  mediaType + ':' + uploadData.media.url.toString());
124
+
124
125
  if (mediaType === 'document' && !uploadData.fileName) {
125
126
  uploadData.fileName = 'file';
126
127
  }
128
+
127
129
  if (!uploadData.mimetype) {
128
130
  uploadData.mimetype = MIMETYPE_MAP[mediaType];
129
131
  }
130
- // check for cache hit
132
+
131
133
  if (cacheableKey) {
132
134
  const mediaBuff = options.mediaCache.get(cacheableKey);
133
135
  if (mediaBuff) {
@@ -138,19 +140,28 @@ const prepareWAMessageMedia = async (message, options) => {
138
140
  return obj;
139
141
  }
140
142
  }
143
+
141
144
  const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
142
145
  const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
143
146
  (typeof uploadData['jpegThumbnail'] === 'undefined');
144
147
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
145
148
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
146
149
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
147
- const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
150
+
151
+ const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, opusConverted } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
148
152
  logger,
149
153
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
150
- opts: options.options
154
+ opts: options.options,
155
+ isPtt: uploadData.ptt,
156
+ forceOpus: (mediaType === "audio" && uploadData.mimetype && uploadData.mimetype.includes('opus'))
151
157
  });
152
- // url safe Base64 encode the SHA256 hash of the body
158
+
159
+ if (mediaType === 'audio' && opusConverted) {
160
+ uploadData.mimetype = 'audio/ogg; codecs=opus';
161
+ }
162
+
153
163
  const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
164
+
154
165
  const [{ mediaUrl, directPath, handle }] = await Promise.all([
155
166
  (async () => {
156
167
  const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
@@ -177,10 +188,6 @@ const prepareWAMessageMedia = async (message, options) => {
177
188
  uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
178
189
  logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
179
190
  }
180
- if (requiresWaveformProcessing) {
181
- uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
182
- logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
183
- }
184
191
  if (requiresAudioBackground) {
185
192
  uploadData.backgroundArgb = await assertColor(options.backgroundColor);
186
193
  logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
@@ -195,12 +202,13 @@ const prepareWAMessageMedia = async (message, options) => {
195
202
  if (!Buffer.isBuffer(encWriteStream)) {
196
203
  encWriteStream.destroy();
197
204
  }
198
- // remove tmp files
205
+
199
206
  if (didSaveToTmpPath && bodyPath) {
200
207
  await fs_1.promises.unlink(bodyPath);
201
208
  logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
202
209
  }
203
210
  });
211
+
204
212
  const obj = Types_1.WAProto.Message.fromObject({
205
213
  [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
206
214
  url: handle ? undefined : mediaUrl,
@@ -214,14 +222,17 @@ const prepareWAMessageMedia = async (message, options) => {
214
222
  media: undefined
215
223
  })
216
224
  });
225
+
217
226
  if (uploadData.ptv) {
218
227
  obj.ptvMessage = obj.videoMessage;
219
228
  delete obj.videoMessage;
220
229
  }
230
+
221
231
  if (cacheableKey) {
222
232
  logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
223
233
  options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
224
234
  }
235
+
225
236
  return obj;
226
237
  };
227
238
  exports.prepareWAMessageMedia = prepareWAMessageMedia;
@@ -272,8 +283,8 @@ const generateForwardMessageContent = (message, forceForward) => {
272
283
  };
273
284
  exports.generateForwardMessageContent = generateForwardMessageContent;
274
285
  const generateWAMessageContent = async (message, options) => {
275
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
276
- var _p, _q;
286
+ var _a;
287
+ var _b;
277
288
  let m = {};
278
289
  if ('text' in message) {
279
290
  const extContent = { text: message.text };
@@ -282,6 +293,7 @@ const generateWAMessageContent = async (message, options) => {
282
293
  urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
283
294
  }
284
295
  if (urlInfo) {
296
+ extContent.canonicalUrl = urlInfo['canonical-url'];
285
297
  extContent.matchedText = urlInfo['matched-text'];
286
298
  extContent.jpegThumbnail = urlInfo.jpegThumbnail;
287
299
  extContent.description = urlInfo.description;
@@ -342,54 +354,6 @@ const generateWAMessageContent = async (message, options) => {
342
354
  message.disappearingMessagesInChat;
343
355
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
344
356
  }
345
- else if ('groupInvite' in message) {
346
- m.groupInviteMessage = {};
347
- m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
348
- m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
349
- m.groupInviteMessage.caption = message.groupInvite.text;
350
- m.groupInviteMessage.groupJid = message.groupInvite.jid;
351
- m.groupInviteMessage.groupName = message.groupInvite.subject;
352
- //TODO: use built-in interface and get disappearing mode info etc.
353
- //TODO: cache / use store!?
354
- if (options.getProfilePicUrl) {
355
- const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
356
- if (pfpUrl) {
357
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
358
- if (resp.status === 200) {
359
- m.groupInviteMessage.jpegThumbnail = resp.data;
360
- }
361
- }
362
- }
363
- }
364
- else if ('pin' in message) {
365
- m.pinInChatMessage = {};
366
- m.messageContextInfo = {};
367
- m.pinInChatMessage.key = message.pin;
368
- m.pinInChatMessage.type = message.type;
369
- m.pinInChatMessage.senderTimestampMs = Date.now();
370
- m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
371
- }
372
- else if ('keep' in message) {
373
- m.keepInChatMessage = {};
374
- m.keepInChatMessage.key = message.keep;
375
- m.keepInChatMessage.keepType = message.type;
376
- m.keepInChatMessage.timestampMs = Date.now();
377
- }
378
- else if ('call' in message) {
379
- m = {
380
- scheduledCallCreationMessage: {
381
- scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
382
- callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
383
- title: message.call.title
384
- }
385
- };
386
- }
387
- else if ('paymentInvite' in message) {
388
- m.paymentInviteMessage = {
389
- serviceType: message.paymentInvite.type,
390
- expiryTimestamp: message.paymentInvite.expiry
391
- };
392
- }
393
357
  else if ('buttonReply' in message) {
394
358
  switch (message.type) {
395
359
  case 'template':
@@ -408,10 +372,6 @@ const generateWAMessageContent = async (message, options) => {
408
372
  break;
409
373
  }
410
374
  }
411
- else if ('ptv' in message && message.ptv) {
412
- const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
413
- m.ptvMessage = videoMessage;
414
- }
415
375
  else if ('product' in message) {
416
376
  const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
417
377
  m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
@@ -422,27 +382,11 @@ const generateWAMessageContent = async (message, options) => {
422
382
  }
423
383
  });
424
384
  }
425
- else if ('order' in message) {
426
- m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
427
- orderId: message.order.id,
428
- thumbnail: message.order.thumbnail,
429
- itemCount: message.order.itemCount,
430
- status: message.order.status,
431
- surface: message.order.surface,
432
- orderTitle: message.order.title,
433
- message: message.order.text,
434
- sellerJid: message.order.seller,
435
- token: message.order.token,
436
- totalAmount1000: message.order.amount,
437
- totalCurrencyCode: message.order.currency
438
- });
439
- }
440
385
  else if ('listReply' in message) {
441
386
  m.listResponseMessage = { ...message.listReply };
442
387
  }
443
388
  else if ('poll' in message) {
444
- (_p = message.poll).selectableCount || (_p.selectableCount = 0);
445
- (_q = message.poll).toAnnouncementGroup || (_q.toAnnouncementGroup = false);
389
+ (_b = message.poll).selectableCount || (_b.selectableCount = 0);
446
390
  if (!Array.isArray(message.poll.values)) {
447
391
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
448
392
  }
@@ -454,72 +398,11 @@ const generateWAMessageContent = async (message, options) => {
454
398
  // encKey
455
399
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
456
400
  };
457
- const pollCreationMessage = {
401
+ m.pollCreationMessage = {
458
402
  name: message.poll.name,
459
403
  selectableOptionsCount: message.poll.selectableCount,
460
404
  options: message.poll.values.map(optionName => ({ optionName })),
461
405
  };
462
- if (message.poll.toAnnouncementGroup) {
463
- // poll v2 is for community announcement groups (single select and multiple)
464
- m.pollCreationMessageV2 = pollCreationMessage;
465
- }
466
- else {
467
- if (message.poll.selectableCount === 1) {
468
- // poll v3 is for single select polls
469
- m.pollCreationMessageV3 = pollCreationMessage;
470
- }
471
- else {
472
- // poll for multiple choice polls
473
- m.pollCreationMessage = pollCreationMessage;
474
- }
475
- }
476
- }
477
- else if ('event' in message) {
478
- m.messageContextInfo = {
479
- messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
480
- };
481
- m.eventMessage = { ...message.event };
482
- }
483
- else if ('inviteAdmin' in message) {
484
- m.newsletterAdminInviteMessage = {};
485
- m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
486
- m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
487
- m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
488
- m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
489
- m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
490
- }
491
- else if ('requestPayment' in message) {
492
- const sticker = ((_c = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _c === void 0 ? void 0 : _c.sticker) ?
493
- 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)
494
- : null;
495
- let notes = {};
496
- if ((_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker) {
497
- notes = {
498
- stickerMessage: {
499
- ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
500
- contextInfo: (_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.contextInfo
501
- }
502
- };
503
- }
504
- else if (message.requestPayment.note) {
505
- notes = {
506
- extendedTextMessage: {
507
- text: message.requestPayment.note,
508
- contextInfo: (_g = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _g === void 0 ? void 0 : _g.contextInfo,
509
- }
510
- };
511
- }
512
- else {
513
- throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
514
- }
515
- m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
516
- expiryTimestamp: message.requestPayment.expiry,
517
- amount1000: message.requestPayment.amount,
518
- currencyCodeIso4217: message.requestPayment.currency,
519
- requestFrom: message.requestPayment.from,
520
- noteMessage: { ...notes },
521
- background: (_h = message.requestPayment.background) !== null && _h !== void 0 ? _h : null,
522
- });
523
406
  }
524
407
  else if ('sharePhoneNumber' in message) {
525
408
  m.protocolMessage = {
@@ -529,14 +412,6 @@ const generateWAMessageContent = async (message, options) => {
529
412
  else if ('requestPhoneNumber' in message) {
530
413
  m.requestPhoneNumberMessage = {};
531
414
  }
532
- else if ('album' in message) {
533
- const imageMessages = message.album.filter(item => 'image' in item);
534
- const videoMessages = message.album.filter(item => 'video' in item);
535
- m.albumMessage = WAProto_1.proto.Message.AlbumMessage.fromObject({
536
- expectedImageCount: imageMessages.length,
537
- expectedVideoCount: videoMessages.length,
538
- });
539
- }
540
415
  else {
541
416
  m = await (0, exports.prepareWAMessageMedia)(message, options);
542
417
  }
@@ -556,24 +431,14 @@ const generateWAMessageContent = async (message, options) => {
556
431
  buttonsMessage.headerType = ButtonType[type];
557
432
  Object.assign(buttonsMessage, m);
558
433
  }
559
- if ('title' in message && !!message.title) {
560
- buttonsMessage.text = message.title,
561
- buttonsMessage.headerType = ButtonType.TEXT;
562
- }
563
434
  if ('footer' in message && !!message.footer) {
564
435
  buttonsMessage.footerText = message.footer;
565
436
  }
566
- if ('contextInfo' in message && !!message.contextInfo) {
567
- buttonsMessage.contextInfo = message.contextInfo;
568
- }
569
- if ('mentions' in message && !!message.mentions) {
570
- buttonsMessage.contextInfo = { mentionedJid: message.mentions };
571
- }
572
437
  m = { buttonsMessage };
573
438
  }
574
439
  else if ('templateButtons' in message && !!message.templateButtons) {
575
440
  const msg = {
576
- hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
441
+ hydratedButtons: message.templateButtons
577
442
  };
578
443
  if ('text' in message) {
579
444
  msg.hydratedContentText = message.text;
@@ -605,97 +470,10 @@ const generateWAMessageContent = async (message, options) => {
605
470
  };
606
471
  m = { listMessage };
607
472
  }
608
- if ('interactiveButtons' in message && !!message.interactiveButtons) {
609
- const interactiveMessage = {
610
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
611
- buttons: message.interactiveButtons,
612
- })
613
- };
614
- if ('text' in message) {
615
- interactiveMessage.body = {
616
- text: message.text
617
- };
618
- }
619
- else if ('caption' in message) {
620
- interactiveMessage.body = {
621
- text: message.caption
622
- };
623
- interactiveMessage.header = {
624
- title: message.title,
625
- subtitle: message.subtitle,
626
- hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
627
- };
628
- Object.assign(interactiveMessage.header, m);
629
- }
630
- if ('footer' in message && !!message.footer) {
631
- interactiveMessage.footer = {
632
- text: message.footer
633
- };
634
- }
635
- if ('title' in message && !!message.title) {
636
- interactiveMessage.header = {
637
- title: message.title,
638
- subtitle: message.subtitle,
639
- hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
640
- };
641
- Object.assign(interactiveMessage.header, m);
642
- }
643
- if ('contextInfo' in message && !!message.contextInfo) {
644
- interactiveMessage.contextInfo = message.contextInfo;
645
- }
646
- if ('mentions' in message && !!message.mentions) {
647
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
648
- }
649
- m = { interactiveMessage };
650
- }
651
- if ('shop' in message && !!message.shop) {
652
- const interactiveMessage = {
653
- shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
654
- surface: message.shop,
655
- id: message.id
656
- })
657
- };
658
- if ('text' in message) {
659
- interactiveMessage.body = {
660
- text: message.text
661
- };
662
- }
663
- else if ('caption' in message) {
664
- interactiveMessage.body = {
665
- text: message.caption
666
- };
667
- interactiveMessage.header = {
668
- title: message.title,
669
- subtitle: message.subtitle,
670
- hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
671
- };
672
- Object.assign(interactiveMessage.header, m);
673
- }
674
- if ('footer' in message && !!message.footer) {
675
- interactiveMessage.footer = {
676
- text: message.footer
677
- };
678
- }
679
- if ('title' in message && !!message.title) {
680
- interactiveMessage.header = {
681
- title: message.title,
682
- subtitle: message.subtitle,
683
- hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
684
- };
685
- Object.assign(interactiveMessage.header, m);
686
- }
687
- if ('contextInfo' in message && !!message.contextInfo) {
688
- interactiveMessage.contextInfo = message.contextInfo;
689
- }
690
- if ('mentions' in message && !!message.mentions) {
691
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
692
- }
693
- m = { interactiveMessage };
694
- }
695
473
  if ('viewOnce' in message && !!message.viewOnce) {
696
474
  m = { viewOnceMessage: { message: m } };
697
475
  }
698
- 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)) {
699
477
  const [messageType] = Object.keys(m);
700
478
  m[messageType].contextInfo = m[messageType] || {};
701
479
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -728,29 +506,26 @@ const generateWAMessageFromContent = (jid, message, options) => {
728
506
  const key = (0, exports.getContentType)(innerMessage);
729
507
  const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
730
508
  const { quoted, userJid } = options;
731
- // only set quoted if isn't a newsletter message
732
- if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
509
+ if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
733
510
  const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
734
511
  let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
735
512
  const msgType = (0, exports.getContentType)(quotedMsg);
736
513
  // strip any redundant properties
737
- if (quotedMsg) {
738
- quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
739
- const quotedContent = quotedMsg[msgType];
740
- if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
741
- delete quotedContent.contextInfo;
742
- }
743
- const contextInfo = innerMessage[key].contextInfo || {};
744
- contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
745
- contextInfo.stanzaId = quoted.key.id;
746
- contextInfo.quotedMessage = quotedMsg;
747
- // if a participant is quoted, then it must be a group
748
- // hence, remoteJid of group must also be entered
749
- if (jid !== quoted.key.remoteJid) {
750
- contextInfo.remoteJid = quoted.key.remoteJid;
751
- }
752
- innerMessage[key].contextInfo = contextInfo;
753
- }
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;
754
529
  }
755
530
  if (
756
531
  // if we want to send a disappearing message
@@ -760,7 +535,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
760
535
  // already not converted to disappearing message
761
536
  key !== 'ephemeralMessage' &&
762
537
  // newsletter not accept disappearing messages
763
- !(0, WABinary_1.isJidNewsletter)(jid)) {
538
+ !(0, WABinary_1.isJidNewsLetter)(jid)) {
764
539
  innerMessage[key].contextInfo = {
765
540
  ...(innerMessage[key].contextInfo || {}),
766
541
  expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
@@ -772,7 +547,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
772
547
  key: {
773
548
  remoteJid: jid,
774
549
  fromMe: true,
775
- 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)(),
776
551
  },
777
552
  message: message,
778
553
  messageTimestamp: timestamp,
@@ -787,7 +562,7 @@ const generateWAMessage = async (jid, content, options) => {
787
562
  var _a;
788
563
  // ensure msg ID is with every log
789
564
  options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
790
- 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);
791
566
  };
792
567
  exports.generateWAMessage = generateWAMessage;
793
568
  /** Get the key to access the true type of content */
@@ -824,24 +599,7 @@ const normalizeMessageContent = (content) => {
824
599
  || (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
825
600
  || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
826
601
  || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
827
- || (message === null || message === void 0 ? void 0 : message.editedMessage)
828
- || (message === null || message === void 0 ? void 0 : message.groupMentionedMessage)
829
- || (message === null || message === void 0 ? void 0 : message.botInvokeMessage)
830
- || (message === null || message === void 0 ? void 0 : message.lottieStickerMessage)
831
- || (message === null || message === void 0 ? void 0 : message.eventCoverImage)
832
- || (message === null || message === void 0 ? void 0 : message.statusMentionMessage)
833
- || (message === null || message === void 0 ? void 0 : message.pollCreationOptionImageMessage)
834
- || (message === null || message === void 0 ? void 0 : message.associatedChildMessage)
835
- || (message === null || message === void 0 ? void 0 : message.groupStatusMentionMessage)
836
- || (message === null || message === void 0 ? void 0 : message.pollCreationMessageV4)
837
- || (message === null || message === void 0 ? void 0 : message.pollCreationMessageV5)
838
- || (message === null || message === void 0 ? void 0 : message.statusAddYours)
839
- || (message === null || message === void 0 ? void 0 : message.groupStatusMessage)
840
- || (message === null || message === void 0 ? void 0 : message.limitSharingMessage)
841
- || (message === null || message === void 0 ? void 0 : message.botTaskMessage)
842
- || (message === null || message === void 0 ? void 0 : message.questionMessage)
843
- || (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2)
844
- || (message === null || message === void 0 ? void 0 : message.botForwardedMessage));
602
+ || (message === null || message === void 0 ? void 0 : message.editedMessage));
845
603
  }
846
604
  };
847
605
  exports.normalizeMessageContent = normalizeMessageContent;
@@ -891,11 +649,7 @@ exports.extractMessageContent = extractMessageContent;
891
649
  /**
892
650
  * Returns the device predicted by message ID
893
651
  */
894
- const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
895
- /^3E.{20}$/.test(id) ? 'web' :
896
- /^(.{21}|.{32})$/.test(id) ? 'android' :
897
- /^(3F|.{18}$)/.test(id) ? 'desktop' :
898
- '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';
899
653
  exports.getDevice = getDevice;
900
654
  /** Upserts a receipt in the message */
901
655
  const updateMessageWithReceipt = (msg, receipt) => {
@@ -914,8 +668,9 @@ const updateMessageWithReaction = (msg, reaction) => {
914
668
  const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
915
669
  const reactions = (msg.reactions || [])
916
670
  .filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
917
- reaction.text = reaction.text || '';
918
- reactions.push(reaction);
671
+ if (reaction.text) {
672
+ reactions.push(reaction);
673
+ }
919
674
  msg.reactions = reactions;
920
675
  };
921
676
  exports.updateMessageWithReaction = updateMessageWithReaction;
@@ -968,6 +723,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
968
723
  }
969
724
  return Object.values(voteHashMap);
970
725
  }
726
+ exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
971
727
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
972
728
  const aggregateMessageKeysNotFromMe = (keys) => {
973
729
  const keyMap = {};
@@ -1057,4 +813,4 @@ const assertMediaContent = (content) => {
1057
813
  }
1058
814
  return mediaContent;
1059
815
  };
1060
- exports.assertMediaContent = assertMediaContent;
816
+ exports.assertMediaContent = assertMediaContent;