@heavstaltech/baileys 2.3.4 → 3.2.4

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 (133) hide show
  1. package/README.md +226 -53
  2. package/WAProto/index.js +14270 -302
  3. package/engine-requirements.js +10 -0
  4. package/lib/Defaults/baileys-version.json +1 -1
  5. package/lib/Defaults/index.js +118 -79
  6. package/lib/Defaults/phonenumber-mcc.json +223 -0
  7. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  8. package/lib/Signal/Group/ciphertext-message.js +15 -0
  9. package/lib/Signal/Group/group-session-builder.d.ts +14 -0
  10. package/lib/Signal/Group/group-session-builder.js +64 -0
  11. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  12. package/lib/Signal/Group/group_cipher.js +96 -0
  13. package/lib/Signal/Group/index.d.ts +11 -0
  14. package/lib/Signal/Group/index.js +57 -0
  15. package/lib/Signal/Group/keyhelper.d.ts +10 -0
  16. package/lib/Signal/Group/keyhelper.js +55 -0
  17. package/lib/Signal/Group/queue-job.d.ts +1 -0
  18. package/lib/Signal/Group/queue-job.js +57 -0
  19. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  20. package/lib/Signal/Group/sender-chain-key.js +34 -0
  21. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  22. package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
  23. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  24. package/lib/Signal/Group/sender-key-message.js +69 -0
  25. package/lib/Signal/Group/sender-key-name.d.ts +17 -0
  26. package/lib/Signal/Group/sender-key-name.js +51 -0
  27. package/lib/Signal/Group/sender-key-record.d.ts +30 -0
  28. package/lib/Signal/Group/sender-key-record.js +53 -0
  29. package/lib/Signal/Group/sender-key-state.d.ts +38 -0
  30. package/lib/Signal/Group/sender-key-state.js +99 -0
  31. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  32. package/{WASignalGroup/sender_message_key.js → lib/Signal/Group/sender-message-key.js} +6 -16
  33. package/lib/Signal/libsignal.js +51 -29
  34. package/lib/Socket/business.d.ts +43 -42
  35. package/lib/Socket/chats.d.ts +222 -36
  36. package/lib/Socket/chats.js +186 -153
  37. package/lib/Socket/dugong.d.ts +254 -0
  38. package/lib/Socket/dugong.js +484 -0
  39. package/lib/Socket/groups.d.ts +7 -7
  40. package/lib/Socket/groups.js +37 -35
  41. package/lib/Socket/index.d.ts +52 -51
  42. package/lib/Socket/index.js +1 -0
  43. package/lib/Socket/messages-recv.d.ts +37 -34
  44. package/lib/Socket/messages-recv.js +175 -37
  45. package/lib/Socket/messages-send.d.ts +12 -18
  46. package/lib/Socket/messages-send.js +396 -574
  47. package/lib/Socket/newsletter.d.ts +28 -26
  48. package/lib/Socket/newsletter.js +140 -25
  49. package/lib/Socket/registration.d.ts +52 -49
  50. package/lib/Socket/registration.js +7 -7
  51. package/lib/Socket/socket.d.ts +0 -1
  52. package/lib/Socket/socket.js +47 -198
  53. package/lib/Socket/usync.d.ts +10 -11
  54. package/lib/Store/make-cache-manager-store.d.ts +1 -2
  55. package/lib/Store/make-in-memory-store.d.ts +2 -2
  56. package/lib/Store/make-in-memory-store.js +1 -5
  57. package/lib/Store/make-ordered-dictionary.js +2 -2
  58. package/lib/Types/Auth.d.ts +1 -0
  59. package/lib/Types/Call.d.ts +1 -1
  60. package/lib/Types/Chat.d.ts +7 -12
  61. package/lib/Types/Events.d.ts +2 -17
  62. package/lib/Types/GroupMetadata.d.ts +2 -3
  63. package/lib/Types/Label.d.ts +0 -11
  64. package/lib/Types/Label.js +1 -1
  65. package/lib/Types/LabelAssociation.js +1 -1
  66. package/lib/Types/Message.d.ts +10 -170
  67. package/lib/Types/Newsletter.d.ts +97 -86
  68. package/lib/Types/Newsletter.js +38 -32
  69. package/lib/Types/Socket.d.ts +2 -7
  70. package/lib/Types/index.d.ts +0 -9
  71. package/lib/Types/index.js +1 -1
  72. package/lib/Utils/auth-utils.js +14 -35
  73. package/lib/Utils/business.d.ts +1 -1
  74. package/lib/Utils/business.js +2 -2
  75. package/lib/Utils/chat-utils.d.ts +12 -11
  76. package/lib/Utils/chat-utils.js +36 -52
  77. package/lib/Utils/crypto.d.ts +16 -15
  78. package/lib/Utils/crypto.js +26 -74
  79. package/lib/Utils/decode-wa-message.d.ts +0 -17
  80. package/lib/Utils/decode-wa-message.js +17 -53
  81. package/lib/Utils/event-buffer.js +7 -10
  82. package/lib/Utils/generics.d.ts +17 -13
  83. package/lib/Utils/generics.js +79 -58
  84. package/lib/Utils/history.d.ts +2 -6
  85. package/lib/Utils/history.js +6 -4
  86. package/lib/Utils/logger.d.ts +3 -1
  87. package/lib/Utils/lt-hash.js +12 -12
  88. package/lib/Utils/make-mutex.d.ts +2 -2
  89. package/lib/Utils/messages-media.d.ts +28 -25
  90. package/lib/Utils/messages-media.js +201 -103
  91. package/lib/Utils/messages.js +36 -473
  92. package/lib/Utils/noise-handler.d.ts +5 -4
  93. package/lib/Utils/noise-handler.js +14 -19
  94. package/lib/Utils/process-message.d.ts +5 -5
  95. package/lib/Utils/process-message.js +23 -75
  96. package/lib/Utils/signal.d.ts +1 -2
  97. package/lib/Utils/signal.js +26 -32
  98. package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
  99. package/lib/Utils/use-multi-file-auth-state.js +66 -242
  100. package/lib/Utils/validate-connection.d.ts +1 -1
  101. package/lib/Utils/validate-connection.js +88 -64
  102. package/lib/WABinary/constants.d.ts +27 -24
  103. package/lib/WABinary/decode.d.ts +2 -1
  104. package/lib/WABinary/decode.js +11 -23
  105. package/lib/WABinary/encode.d.ts +2 -1
  106. package/lib/WABinary/encode.js +147 -134
  107. package/lib/WABinary/generic-utils.d.ts +5 -2
  108. package/lib/WABinary/generic-utils.js +125 -37
  109. package/lib/WABinary/jid-utils.d.ts +1 -1
  110. package/lib/WAM/BinaryInfo.d.ts +11 -2
  111. package/lib/WAM/encode.d.ts +2 -1
  112. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +3 -3
  113. package/lib/WAUSync/USyncUser.d.ts +2 -0
  114. package/lib/index.d.ts +12 -0
  115. package/lib/index.js +12 -0
  116. package/package.json +102 -98
  117. package/WAProto/index.d.ts +0 -50383
  118. package/WASignalGroup/GroupProtocol.js +0 -1697
  119. package/WASignalGroup/ciphertext_message.js +0 -16
  120. package/WASignalGroup/group_cipher.js +0 -120
  121. package/WASignalGroup/group_session_builder.js +0 -46
  122. package/WASignalGroup/index.js +0 -5
  123. package/WASignalGroup/keyhelper.js +0 -21
  124. package/WASignalGroup/protobufs.js +0 -3
  125. package/WASignalGroup/queue_job.js +0 -69
  126. package/WASignalGroup/sender_chain_key.js +0 -50
  127. package/WASignalGroup/sender_key_distribution_message.js +0 -78
  128. package/WASignalGroup/sender_key_message.js +0 -92
  129. package/WASignalGroup/sender_key_name.js +0 -70
  130. package/WASignalGroup/sender_key_record.js +0 -56
  131. package/WASignalGroup/sender_key_state.js +0 -129
  132. package/lib/Utils/use-single-file-auth-state.d.ts +0 -12
  133. package/lib/Utils/use-single-file-auth-state.js +0 -75
@@ -1,4 +1,4 @@
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
  };
@@ -74,27 +74,30 @@ const prepareWAMessageMedia = async (message, options) => {
74
74
  }
75
75
  }
76
76
  if (!mediaType) {
77
- throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
77
+ throw new boom_1.Boom('Invalid media type', {
78
+ statusCode: 400
79
+ });
78
80
  }
81
+
79
82
  const uploadData = {
80
83
  ...message,
81
84
  media: message[mediaType]
82
85
  };
83
86
  delete uploadData[mediaType];
84
- // check if cacheable + generate cache key
85
87
  const cacheableKey = typeof uploadData.media === 'object' &&
86
88
  ('url' in uploadData.media) &&
87
89
  !!uploadData.media.url &&
88
90
  !!options.mediaCache && (
89
- // generate the key
90
91
  mediaType + ':' + uploadData.media.url.toString());
92
+
91
93
  if (mediaType === 'document' && !uploadData.fileName) {
92
94
  uploadData.fileName = 'file';
93
95
  }
96
+
94
97
  if (!uploadData.mimetype) {
95
98
  uploadData.mimetype = MIMETYPE_MAP[mediaType];
96
99
  }
97
- // check for cache hit
100
+
98
101
  if (cacheableKey) {
99
102
  const mediaBuff = options.mediaCache.get(cacheableKey);
100
103
  if (mediaBuff) {
@@ -105,19 +108,28 @@ const prepareWAMessageMedia = async (message, options) => {
105
108
  return obj;
106
109
  }
107
110
  }
111
+
108
112
  const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
109
113
  const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
110
114
  (typeof uploadData['jpegThumbnail'] === 'undefined');
111
115
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
112
116
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
113
117
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
114
- const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
118
+
119
+ 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, {
115
120
  logger,
116
121
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
117
- opts: options.options
122
+ opts: options.options,
123
+ isPtt: uploadData.ptt,
124
+ forceOpus: (mediaType === "audio" && uploadData.mimetype && uploadData.mimetype.includes('opus'))
118
125
  });
119
- // url safe Base64 encode the SHA256 hash of the body
126
+
127
+ if (mediaType === 'audio' && opusConverted) {
128
+ uploadData.mimetype = 'audio/ogg; codecs=opus';
129
+ }
130
+
120
131
  const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
132
+
121
133
  const [{ mediaUrl, directPath, handle }] = await Promise.all([
122
134
  (async () => {
123
135
  const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
@@ -144,10 +156,6 @@ const prepareWAMessageMedia = async (message, options) => {
144
156
  uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
145
157
  logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
146
158
  }
147
- if (requiresWaveformProcessing) {
148
- uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
149
- logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
150
- }
151
159
  if (requiresAudioBackground) {
152
160
  uploadData.backgroundArgb = await assertColor(options.backgroundColor);
153
161
  logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
@@ -162,12 +170,13 @@ const prepareWAMessageMedia = async (message, options) => {
162
170
  if (!Buffer.isBuffer(encWriteStream)) {
163
171
  encWriteStream.destroy();
164
172
  }
165
- // remove tmp files
173
+
166
174
  if (didSaveToTmpPath && bodyPath) {
167
175
  await fs_1.promises.unlink(bodyPath);
168
176
  logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
169
177
  }
170
178
  });
179
+
171
180
  const obj = Types_1.WAProto.Message.fromObject({
172
181
  [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
173
182
  url: handle ? undefined : mediaUrl,
@@ -181,14 +190,17 @@ const prepareWAMessageMedia = async (message, options) => {
181
190
  media: undefined
182
191
  })
183
192
  });
193
+
184
194
  if (uploadData.ptv) {
185
195
  obj.ptvMessage = obj.videoMessage;
186
196
  delete obj.videoMessage;
187
197
  }
198
+
188
199
  if (cacheableKey) {
189
200
  logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
190
201
  options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
191
202
  }
203
+
192
204
  return obj;
193
205
  };
194
206
  exports.prepareWAMessageMedia = prepareWAMessageMedia;
@@ -239,8 +251,8 @@ const generateForwardMessageContent = (message, forceForward) => {
239
251
  };
240
252
  exports.generateForwardMessageContent = generateForwardMessageContent;
241
253
  const generateWAMessageContent = async (message, options) => {
242
- 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;
243
- var _6, _7;
254
+ var _a;
255
+ var _b;
244
256
  let m = {};
245
257
  if ('text' in message) {
246
258
  const extContent = { text: message.text };
@@ -288,15 +300,6 @@ const generateWAMessageContent = async (message, options) => {
288
300
  }
289
301
  else if ('location' in message) {
290
302
  m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
291
- if ('contextInfo' in message && !!message.contextInfo) {
292
- m.locationMessage.contextInfo = message.contextInfo;
293
- }
294
- }
295
- else if ('liveLocation' in message) {
296
- m.liveLocationMessage = Types_1.WAProto.Message.LiveLocationMessage.fromObject(message.liveLocation);
297
- if ('contextInfo' in message && !!message.contextInfo) {
298
- m.liveLocationMessage.contextInfo = message.contextInfo;
299
- }
300
303
  }
301
304
  else if ('react' in message) {
302
305
  if (!message.react.senderTimestampMs) {
@@ -319,64 +322,6 @@ const generateWAMessageContent = async (message, options) => {
319
322
  message.disappearingMessagesInChat;
320
323
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
321
324
  }
322
- else if ('groupInvite' in message) {
323
- m.groupInviteMessage = {};
324
- m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
325
- m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
326
- m.groupInviteMessage.caption = message.groupInvite.text;
327
- m.groupInviteMessage.groupJid = message.groupInvite.jid;
328
- m.groupInviteMessage.groupName = message.groupInvite.subject;
329
- m.groupInviteMessage.jpegThumbnail = message.groupInvite.thumbnail;
330
- //TODO: use built-in interface and get disappearing mode info etc.
331
- //TODO: cache / use store!?
332
- if (options.getProfilePicUrl) {
333
- let pfpUrl;
334
- try {
335
- pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
336
- }
337
- catch (_8) {
338
- pfpUrl = null;
339
- }
340
- if (pfpUrl) {
341
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
342
- if (resp.status === 200) {
343
- m.groupInviteMessage.jpegThumbnail = resp.data;
344
- }
345
- }
346
- else {
347
- m.groupInviteMessage.jpegThumbnail = null;
348
- }
349
- }
350
- }
351
- else if ('pin' in message) {
352
- m.pinInChatMessage = {};
353
- m.messageContextInfo = {};
354
- m.pinInChatMessage.key = message.pin;
355
- m.pinInChatMessage.type = message.type;
356
- m.pinInChatMessage.senderTimestampMs = Date.now();
357
- m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
358
- }
359
- else if ('keep' in message) {
360
- m.keepInChatMessage = {};
361
- m.keepInChatMessage.key = message.keep;
362
- m.keepInChatMessage.keepType = message.type;
363
- m.keepInChatMessage.timestampMs = Date.now();
364
- }
365
- else if ('call' in message) {
366
- m = {
367
- scheduledCallCreationMessage: {
368
- scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
369
- callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
370
- title: message.call.title
371
- }
372
- };
373
- }
374
- else if ('paymentInvite' in message) {
375
- m.paymentInviteMessage = {
376
- serviceType: message.paymentInvite.type,
377
- expiryTimestamp: message.paymentInvite.expiry
378
- };
379
- }
380
325
  else if ('buttonReply' in message) {
381
326
  switch (message.type) {
382
327
  case 'template':
@@ -393,27 +338,10 @@ const generateWAMessageContent = async (message, options) => {
393
338
  type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
394
339
  };
395
340
  break;
396
- case 'interactive':
397
- m.interactiveResponseMessage = {
398
- body: {
399
- text: message.buttonReply.text,
400
- format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1
401
- },
402
- nativeFlowResponseMessage: {
403
- name: message.buttonReply.nativeFlow.name,
404
- paramsJson: message.buttonReply.nativeFlow.paramsJson,
405
- version: message.buttonReply.nativeFlow.version
406
- }
407
- };
408
- break;
409
341
  }
410
342
  }
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
343
  else if ('product' in message) {
416
- 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);
344
+ const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
417
345
  m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
418
346
  ...message,
419
347
  product: {
@@ -421,34 +349,12 @@ const generateWAMessageContent = async (message, options) => {
421
349
  productImage: imageMessage,
422
350
  }
423
351
  });
424
- if ('contextInfo' in message && !!message.contextInfo) {
425
- m.productMessage.contextInfo = message.contextInfo;
426
- }
427
- if ('mentions' in message && !!message.mentions) {
428
- m.productMessage.contextInfo = { mentionedJid: message.mentions };
429
- }
430
- }
431
- else if ('order' in message) {
432
- m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
433
- orderId: message.order.id,
434
- thumbnail: message.order.thumbnail,
435
- itemCount: message.order.itemCount,
436
- status: message.order.status,
437
- surface: message.order.surface,
438
- orderTitle: message.order.title,
439
- message: message.order.text,
440
- sellerJid: message.order.seller,
441
- token: message.order.token,
442
- totalAmount1000: message.order.amount,
443
- totalCurrencyCode: message.order.currency
444
- });
445
352
  }
446
353
  else if ('listReply' in message) {
447
354
  m.listResponseMessage = { ...message.listReply };
448
355
  }
449
356
  else if ('poll' in message) {
450
- (_6 = message.poll).selectableCount || (_6.selectableCount = 0);
451
- (_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
357
+ (_b = message.poll).selectableCount || (_b.selectableCount = 0);
452
358
  if (!Array.isArray(message.poll.values)) {
453
359
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
454
360
  }
@@ -460,125 +366,11 @@ const generateWAMessageContent = async (message, options) => {
460
366
  // encKey
461
367
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
462
368
  };
463
- const pollCreationMessage = {
369
+ m.pollCreationMessage = {
464
370
  name: message.poll.name,
465
371
  selectableOptionsCount: message.poll.selectableCount,
466
372
  options: message.poll.values.map(optionName => ({ optionName })),
467
373
  };
468
- if (message.poll.toAnnouncementGroup) {
469
- // poll v2 is for community announcement groups (single select and multiple)
470
- m.pollCreationMessageV2 = pollCreationMessage;
471
- }
472
- else {
473
- if (message.poll.selectableCount > 0) {
474
- //poll v3 is for single select polls
475
- m.pollCreationMessageV3 = pollCreationMessage;
476
- }
477
- else {
478
- // poll v3 for multiple choice polls
479
- m.pollCreationMessage = pollCreationMessage;
480
- }
481
- }
482
- if ('contextInfo' in message && !!message.contextInfo) {
483
- pollCreationMessage.contextInfo = message.contextInfo;
484
- }
485
- }
486
- else if ('pollResult' in message) {
487
- if (!Array.isArray(message.pollResult.votes)) {
488
- throw new boom_1.Boom('Invalid poll votes result', { statusCode: 400 });
489
- }
490
- m.messageContextInfo = {
491
- // encKey
492
- messageSecret: message.pollResult.messageSecret || (0, crypto_1.randomBytes)(32),
493
- };
494
- const pollResultSnapshotMessage = {
495
- name: message.pollResult.name,
496
- pollVotes: message.pollResult.votes.map((option) => ({
497
- optionName: option[0],
498
- optionVoteCount: option[1]
499
- })),
500
- };
501
- if ('contextInfo' in message && !!message.contextInfo) {
502
- pollResultSnapshotMessage.contextInfo = message.contextInfo;
503
- }
504
- if ('mentions' in message && !!message.mentions) {
505
- pollResultSnapshotMessage.contextInfo = { mentionedJid: message.mentions };
506
- }
507
- m.pollResultSnapshotMessage = pollResultSnapshotMessage;
508
- }
509
- else if ('event' in message) {
510
- m.messageContextInfo = {
511
- messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
512
- };
513
- m.eventMessage = { ...message.event };
514
- }
515
- else if ('inviteAdmin' in message) {
516
- m.newsletterAdminInviteMessage = {};
517
- m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
518
- m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
519
- m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
520
- m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
521
- m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
522
- //TODO: use built-in interface and get disappearing mode info etc.
523
- //TODO: cache / use store!?
524
- if (options.getProfilePicUrl) {
525
- let pfpUrl;
526
- try {
527
- pfpUrl = await options.getProfilePicUrl(message.inviteAdmin.jid, 'preview');
528
- }
529
- catch (_9) {
530
- pfpUrl = null;
531
- }
532
- if (pfpUrl) {
533
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
534
- if (resp.status === 200) {
535
- m.newsletterAdminInviteMessage.jpegThumbnail = resp.data;
536
- }
537
- }
538
- else {
539
- m.newsletterAdminInviteMessage.jpegThumbnail = null;
540
- }
541
- }
542
- }
543
- else if ('requestPayment' in message) {
544
- const sticker = ((_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker) ?
545
- 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)
546
- : null;
547
- let notes = {};
548
- if ((_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.sticker) {
549
- notes = {
550
- stickerMessage: {
551
- ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
552
- contextInfo: {
553
- 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,
554
- 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,
555
- quotedMessage: (_l = options === null || options === void 0 ? void 0 : options.quoted) === null || _l === void 0 ? void 0 : _l.message,
556
- ...(_m = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _m === void 0 ? void 0 : _m.contextInfo,
557
- }
558
- }
559
- };
560
- }
561
- else if (message.requestPayment.note) {
562
- notes = {
563
- extendedTextMessage: {
564
- text: message.requestPayment.note,
565
- contextInfo: {
566
- 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,
567
- 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,
568
- quotedMessage: (_s = options === null || options === void 0 ? void 0 : options.quoted) === null || _s === void 0 ? void 0 : _s.message,
569
- ...(_t = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _t === void 0 ? void 0 : _t.contextInfo,
570
- }
571
- }
572
- };
573
- }
574
- m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
575
- expiryTimestamp: message.requestPayment.expiry,
576
- amount1000: message.requestPayment.amount,
577
- currencyCodeIso4217: message.requestPayment.currency,
578
- requestFrom: message.requestPayment.from,
579
- noteMessage: { ...notes },
580
- background: (_u = message.requestPayment.background) !== null && _u !== void 0 ? _u : null,
581
- });
582
374
  }
583
375
  else if ('sharePhoneNumber' in message) {
584
376
  m.protocolMessage = {
@@ -610,21 +402,11 @@ const generateWAMessageContent = async (message, options) => {
610
402
  if ('footer' in message && !!message.footer) {
611
403
  buttonsMessage.footerText = message.footer;
612
404
  }
613
- if ('title' in message && !!message.title) {
614
- buttonsMessage.text = message.title,
615
- buttonsMessage.headerType = ButtonType.TEXT;
616
- }
617
- if ('contextInfo' in message && !!message.contextInfo) {
618
- buttonsMessage.contextInfo = message.contextInfo;
619
- }
620
- if ('mentions' in message && !!message.mentions) {
621
- buttonsMessage.contextInfo = { mentionedJid: message.mentions };
622
- }
623
405
  m = { buttonsMessage };
624
406
  }
625
407
  else if ('templateButtons' in message && !!message.templateButtons) {
626
408
  const msg = {
627
- hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
409
+ hydratedButtons: message.templateButtons
628
410
  };
629
411
  if ('text' in message) {
630
412
  msg.hydratedContentText = message.text;
@@ -645,230 +427,21 @@ const generateWAMessageContent = async (message, options) => {
645
427
  }
646
428
  };
647
429
  }
648
- if ('interactiveButtons' in message && !!message.interactiveButtons) {
649
- const interactiveMessage = {
650
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
651
- buttons: message.interactiveButtons,
652
- })
653
- };
654
- if ('text' in message) {
655
- body: interactiveMessage.body = {
656
- text: message.text
657
- };
658
- header: interactiveMessage.header = {
659
- title: message.title,
660
- subtitle: message.subtitle,
661
- hasMediaAttachment: (_v = message === null || message === void 0 ? void 0 : message.media) !== null && _v !== void 0 ? _v : false,
662
- };
663
- }
664
- else {
665
- if ('caption' in message) {
666
- body: interactiveMessage.body = {
667
- text: message.caption
668
- };
669
- header: interactiveMessage.header = {
670
- title: message.title,
671
- subtitle: message.subtitle,
672
- hasMediaAttachment: (_w = message === null || message === void 0 ? void 0 : message.media) !== null && _w !== void 0 ? _w : false,
673
- };
674
- Object.assign(interactiveMessage.header, m);
675
- }
676
- }
677
- if ('footer' in message && !!message.footer) {
678
- footer: interactiveMessage.footer = {
679
- text: message.footer
680
- };
681
- }
682
- if ('contextInfo' in message && !!message.contextInfo) {
683
- interactiveMessage.contextInfo = message.contextInfo;
684
- }
685
- if ('mentions' in message && !!message.mentions) {
686
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
687
- }
688
- m = { interactiveMessage };
689
- }
690
- if ('shop' in message && !!message.shop) {
691
- const interactiveMessage = {
692
- shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
693
- surface: message.shop,
694
- id: message.id
695
- })
696
- };
697
- if ('text' in message) {
698
- body: interactiveMessage.body = {
699
- text: message.text
700
- };
701
- header: interactiveMessage.header = {
702
- title: message.title,
703
- subtitle: message.subtitle,
704
- hasMediaAttachment: (_x = message === null || message === void 0 ? void 0 : message.media) !== null && _x !== void 0 ? _x : false,
705
- };
706
- }
707
- else {
708
- if ('caption' in message) {
709
- body: interactiveMessage.body = {
710
- text: message.caption
711
- };
712
- header: interactiveMessage.header = {
713
- title: message.title,
714
- subtitle: message.subtitle,
715
- hasMediaAttachment: (_y = message === null || message === void 0 ? void 0 : message.media) !== null && _y !== void 0 ? _y : false,
716
- };
717
- Object.assign(interactiveMessage.header, m);
718
- }
719
- }
720
- if ('footer' in message && !!message.footer) {
721
- footer: interactiveMessage.footer = {
722
- text: message.footer
723
- };
724
- }
725
- if ('contextInfo' in message && !!message.contextInfo) {
726
- interactiveMessage.contextInfo = message.contextInfo;
727
- }
728
- if ('mentions' in message && !!message.mentions) {
729
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
730
- }
731
- m = { interactiveMessage };
732
- }
733
- if ('collection' in message && !!message.shop) {
734
- const interactiveMessage = {
735
- collectionMessage: Types_1.WAProto.Message.InteractiveMessage.CollectionMessage.fromObject({
736
- bizJid: (_z = message === null || message === void 0 ? void 0 : message.collection) === null || _z === void 0 ? void 0 : _z.bizJid,
737
- id: (_0 = message === null || message === void 0 ? void 0 : message.collection) === null || _0 === void 0 ? void 0 : _0.id,
738
- messageVersion: (_1 = message === null || message === void 0 ? void 0 : message.collection) === null || _1 === void 0 ? void 0 : _1.version
739
- })
740
- };
741
- if ('text' in message) {
742
- body: interactiveMessage.body = {
743
- text: message.text
744
- };
745
- header: interactiveMessage.header = {
746
- title: message.title,
747
- subtitle: message.subtitle,
748
- hasMediaAttachment: (_2 = message === null || message === void 0 ? void 0 : message.media) !== null && _2 !== void 0 ? _2 : false,
749
- };
750
- }
751
- else {
752
- if ('caption' in message) {
753
- body: interactiveMessage.body = {
754
- text: message.caption
755
- };
756
- header: interactiveMessage.header = {
757
- title: message.title,
758
- subtitle: message.subtitle,
759
- hasMediaAttachment: (_3 = message === null || message === void 0 ? void 0 : message.media) !== null && _3 !== void 0 ? _3 : false,
760
- };
761
- Object.assign(interactiveMessage.header, m);
762
- }
763
- }
764
- if ('footer' in message && !!message.footer) {
765
- footer: interactiveMessage.footer = {
766
- text: message.footer
767
- };
768
- }
769
- if ('contextInfo' in message && !!message.contextInfo) {
770
- interactiveMessage.contextInfo = message.contextInfo;
771
- }
772
- if ('mentions' in message && !!message.mentions) {
773
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
774
- }
775
- m = { interactiveMessage };
776
- }
777
- if ('cards' in message && !!message.cards) {
778
- const slides = await Promise.all(message.cards.map(async (slide) => {
779
- const { image, video, product, title, caption, footer, buttons } = slide;
780
- let header;
781
- if (product) {
782
- const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: product.productImage, ...options }, options);
783
- header = {
784
- productMesage: Types_1.WAProto.Message.ProductMessage.fromObject({
785
- product: {
786
- ...product,
787
- productImage: imageMessage,
788
- },
789
- ...slide
790
- })
791
- };
792
- }
793
- else if (image) {
794
- header = await (0, exports.prepareWAMessageMedia)({ image: image, ...options }, options);
795
- }
796
- else if (video) {
797
- header = await (0, exports.prepareWAMessageMedia)({ video: video, ...options }, options);
798
- }
799
- const msg = {
800
- header: Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
801
- title,
802
- hasMediaAttachment: true,
803
- ...header
804
- }),
805
- body: Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
806
- text: caption
807
- }),
808
- footer: Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
809
- text: footer
810
- }),
811
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
812
- buttons,
813
- }),
814
- };
815
- return msg;
816
- }));
817
- const interactiveMessage = {
818
- carouselMessage: Types_1.WAProto.Message.InteractiveMessage.CarouselMessage.fromObject({
819
- cards: slides
820
- })
821
- };
822
- if ('text' in message) {
823
- interactiveMessage.body = Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
824
- text: message.text
825
- });
826
- interactiveMessage.header = Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
827
- title: message.title,
828
- subtitle: message.subtitle,
829
- hasMediaAttachment: (_4 = message === null || message === void 0 ? void 0 : message.media) !== null && _4 !== void 0 ? _4 : false,
830
- });
831
- }
832
- if ('footer' in message && !!message.footer) {
833
- interactiveMessage.footer = Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
834
- text: message.footer
835
- });
836
- }
837
- if ('contextInfo' in message && !!message.contextInfo) {
838
- interactiveMessage.contextInfo = message.contextInfo;
839
- }
840
- if ('mentions' in message && !!message.mentions) {
841
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
842
- }
843
- m = { interactiveMessage };
844
- }
845
430
  if ('sections' in message && !!message.sections) {
846
- const listMessage = WAProto_1.proto.Message.ListMessage.fromObject({
431
+ const listMessage = {
847
432
  sections: message.sections,
848
433
  buttonText: message.buttonText,
849
434
  title: message.title,
850
435
  footerText: message.footer,
851
436
  description: message.text,
852
- listType: WAProto_1.proto.Message.ListMessage.ListType.PRODUCT_LIST
853
- });
437
+ listType: WAProto_1.proto.Message.ListMessage.ListType.SINGLE_SELECT
438
+ };
854
439
  m = { listMessage };
855
440
  }
856
441
  if ('viewOnce' in message && !!message.viewOnce) {
857
442
  m = { viewOnceMessage: { message: m } };
858
443
  }
859
- if ('viewOnceV2' in message && !!message.viewOnceV2) {
860
- m = { viewOnceMessageV2: { message: m } };
861
- }
862
- if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
863
- m = { viewOnceMessageV2Extension: { message: m } };
864
- }
865
- if ('ephemeral' in message && !!message.ephemeral) {
866
- m = { ephemeralMessage: { message: m } };
867
- }
868
- if ('lottie' in message && !!message.lottie) {
869
- m = { lottieStickerMessage: { message: m } };
870
- }
871
- if ('mentions' in message && ((_5 = message.mentions) === null || _5 === void 0 ? void 0 : _5.length)) {
444
+ if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
872
445
  const [messageType] = Object.keys(m);
873
446
  m[messageType].contextInfo = m[messageType] || {};
874
447
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -892,7 +465,6 @@ const generateWAMessageContent = async (message, options) => {
892
465
  };
893
466
  exports.generateWAMessageContent = generateWAMessageContent;
894
467
  const generateWAMessageFromContent = (jid, message, options) => {
895
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
896
468
  // set timestamp to now
897
469
  // if not specified
898
470
  if (!options.timestamp) {
@@ -912,16 +484,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
912
484
  if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
913
485
  delete quotedContent.contextInfo;
914
486
  }
915
- let requestPayment;
916
- if (key === 'requestPaymentMessage') {
917
- if (((_a = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _a === void 0 ? void 0 : _a.noteMessage) && ((_c = (_b = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _b === void 0 ? void 0 : _b.noteMessage) === null || _c === void 0 ? void 0 : _c.extendedTextMessage)) {
918
- requestPayment = (_e = (_d = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _d === void 0 ? void 0 : _d.noteMessage) === null || _e === void 0 ? void 0 : _e.extendedTextMessage;
919
- }
920
- else if (((_f = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _f === void 0 ? void 0 : _f.noteMessage) && ((_h = (_g = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _g === void 0 ? void 0 : _g.noteMessage) === null || _h === void 0 ? void 0 : _h.stickerMessage)) {
921
- requestPayment = (_k = (_j = innerMessage.requestPaymentMessage) === null || _j === void 0 ? void 0 : _j.noteMessage) === null || _k === void 0 ? void 0 : _k.stickerMessage;
922
- }
923
- }
924
- const contextInfo = (key === 'requestPaymentMessage' ? requestPayment.contextInfo : innerMessage[key].contextInfo) || {};
487
+ const contextInfo = innerMessage[key].contextInfo || {};
925
488
  contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
926
489
  contextInfo.stanzaId = quoted.key.id;
927
490
  contextInfo.quotedMessage = quotedMsg;