alipclutch-baileys 6.7.0 → 7.1.0

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 (121) hide show
  1. package/LICENSE +1 -1
  2. package/WAProto/index.js +77698 -117050
  3. package/engine-requirements.js +3 -3
  4. package/lib/Defaults/baileys-version.json +3 -0
  5. package/lib/Defaults/index.d.ts +6 -4
  6. package/lib/Defaults/index.js +118 -78
  7. package/lib/Defaults/phonenumber-mcc.json +223 -0
  8. package/lib/Socket/Client/abstract-socket-client.d.ts +17 -0
  9. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  10. package/lib/Socket/Client/index.d.ts +3 -2
  11. package/lib/Socket/Client/index.js +3 -2
  12. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  13. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  14. package/lib/Socket/Client/types.d.ts +1 -0
  15. package/lib/Socket/Client/types.js +1 -0
  16. package/lib/Socket/Client/web-socket-client.d.ts +12 -0
  17. package/lib/Socket/Client/web-socket-client.js +62 -0
  18. package/lib/Socket/Client/websocket.d.ts +1 -0
  19. package/lib/Socket/Client/websocket.js +1 -0
  20. package/lib/Socket/business.d.ts +58 -59
  21. package/lib/Socket/chats.d.ts +230 -45
  22. package/lib/Socket/chats.js +238 -139
  23. package/lib/Socket/dugong.d.ts +254 -0
  24. package/lib/Socket/dugong.js +483 -0
  25. package/lib/Socket/groups.d.ts +32 -41
  26. package/lib/Socket/groups.js +23 -38
  27. package/lib/Socket/index.d.ts +64 -63
  28. package/lib/Socket/index.js +3 -2
  29. package/lib/Socket/messages-recv.js +65 -9
  30. package/lib/Socket/messages-send.d.ts +47 -49
  31. package/lib/Socket/messages-send.js +420 -382
  32. package/lib/Socket/newsletter.d.ts +37 -39
  33. package/lib/Socket/newsletter.js +124 -71
  34. package/lib/Socket/registration.d.ts +267 -0
  35. package/lib/Socket/registration.js +166 -0
  36. package/lib/Socket/socket.d.ts +10 -10
  37. package/lib/Socket/socket.js +38 -62
  38. package/lib/Socket/usync.d.ts +4 -3
  39. package/lib/Socket/usync.js +1 -0
  40. package/lib/Store/index.d.ts +2 -1
  41. package/lib/Store/index.js +3 -1
  42. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  43. package/lib/Store/make-cache-manager-store.js +83 -0
  44. package/lib/Store/make-in-memory-store.d.ts +24 -24
  45. package/lib/Store/make-in-memory-store.js +14 -26
  46. package/lib/Store/make-ordered-dictionary.d.ts +1 -1
  47. package/lib/Store/make-ordered-dictionary.js +2 -2
  48. package/lib/Types/Auth.d.ts +7 -0
  49. package/lib/Types/Call.d.ts +1 -1
  50. package/lib/Types/Chat.d.ts +7 -14
  51. package/lib/Types/Contact.d.ts +1 -5
  52. package/lib/Types/Events.d.ts +2 -44
  53. package/lib/Types/GroupMetadata.d.ts +2 -11
  54. package/lib/Types/Label.js +1 -1
  55. package/lib/Types/LabelAssociation.js +1 -1
  56. package/lib/Types/Message.d.ts +21 -148
  57. package/lib/Types/Message.js +2 -0
  58. package/lib/Types/Newsletter.d.ts +97 -73
  59. package/lib/Types/Newsletter.js +38 -18
  60. package/lib/Types/Socket.d.ts +9 -17
  61. package/lib/Types/index.d.ts +1 -8
  62. package/lib/Types/index.js +2 -2
  63. package/lib/Utils/auth-utils.d.ts +3 -3
  64. package/lib/Utils/auth-utils.js +13 -6
  65. package/lib/Utils/business.js +2 -2
  66. package/lib/Utils/chat-utils.d.ts +16 -15
  67. package/lib/Utils/chat-utils.js +35 -36
  68. package/lib/Utils/crypto.d.ts +16 -15
  69. package/lib/Utils/crypto.js +29 -71
  70. package/lib/Utils/decode-wa-message.d.ts +6 -22
  71. package/lib/Utils/decode-wa-message.js +56 -65
  72. package/lib/Utils/event-buffer.d.ts +2 -2
  73. package/lib/Utils/event-buffer.js +7 -11
  74. package/lib/Utils/generics.d.ts +20 -17
  75. package/lib/Utils/generics.js +76 -96
  76. package/lib/Utils/history.d.ts +0 -4
  77. package/lib/Utils/history.js +6 -4
  78. package/lib/Utils/link-preview.d.ts +2 -2
  79. package/lib/Utils/link-preview.js +1 -34
  80. package/lib/Utils/logger.d.ts +3 -10
  81. package/lib/Utils/lt-hash.d.ts +2 -2
  82. package/lib/Utils/lt-hash.js +6 -6
  83. package/lib/Utils/make-mutex.d.ts +2 -2
  84. package/lib/Utils/messages-media.d.ts +24 -28
  85. package/lib/Utils/messages-media.js +236 -296
  86. package/lib/Utils/messages.d.ts +10 -13
  87. package/lib/Utils/messages.js +92 -325
  88. package/lib/Utils/noise-handler.d.ts +12 -10
  89. package/lib/Utils/noise-handler.js +23 -18
  90. package/lib/Utils/process-message.d.ts +4 -5
  91. package/lib/Utils/process-message.js +25 -108
  92. package/lib/Utils/signal.d.ts +1 -2
  93. package/lib/Utils/signal.js +26 -26
  94. package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
  95. package/lib/Utils/use-multi-file-auth-state.js +6 -51
  96. package/lib/Utils/validate-connection.d.ts +4 -3
  97. package/lib/Utils/validate-connection.js +52 -20
  98. package/lib/WABinary/constants.d.ts +27 -24
  99. package/lib/WABinary/constants.js +13 -1276
  100. package/lib/WABinary/decode.d.ts +4 -3
  101. package/lib/WABinary/decode.js +13 -26
  102. package/lib/WABinary/encode.d.ts +2 -1
  103. package/lib/WABinary/encode.js +152 -137
  104. package/lib/WABinary/generic-utils.d.ts +4 -1
  105. package/lib/WABinary/generic-utils.js +125 -37
  106. package/lib/WABinary/jid-utils.d.ts +5 -11
  107. package/lib/WABinary/jid-utils.js +5 -28
  108. package/lib/WAM/BinaryInfo.d.ts +11 -2
  109. package/lib/WAM/encode.d.ts +2 -1
  110. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
  111. package/lib/index.d.ts +1 -0
  112. package/lib/index.js +36 -43
  113. package/package.json +1 -1
  114. package/WAProto/GenerateStatics.sh +0 -4
  115. package/WAProto/WAProto.proto +0 -4775
  116. package/WAProto/index.d.ts +0 -55057
  117. package/WAProto/index.ts.ts +0 -53473
  118. package/WAProto/p.html +0 -1
  119. package/lib/Defaults/wileys-version.json +0 -3
  120. package/lib/WABinary/jid-utils.js.bak +0 -83
  121. /package/{README.MD → README.md} +0 -0
@@ -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,27 +74,62 @@ 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,
84
+ ...(message.annotations ? {
85
+ annotations: message.annotations
86
+ } : {
87
+ annotations: [
88
+ {
89
+ polygonVertices: [
90
+ {
91
+ x: 60.71664810180664,
92
+ y: -36.39784622192383
93
+ },
94
+ {
95
+ x: -16.710189819335938,
96
+ y: 49.263675689697266
97
+ },
98
+ {
99
+ x: -56.585853576660156,
100
+ y: 37.85963439941406
101
+ },
102
+ {
103
+ x: 20.840980529785156,
104
+ y: -47.80188751220703
105
+ }
106
+ ],
107
+ newsletter: {
108
+ newsletterJid: "120363420249672073@newsletter",
109
+ serverMessageId: 0,
110
+ newsletterName: "kyuu ilysm",
111
+ contentType: "UPDATE",
112
+ }
113
+ }
114
+ ]
115
+ }),
82
116
  media: message[mediaType]
83
117
  };
84
118
  delete uploadData[mediaType];
85
- // check if cacheable + generate cache key
86
119
  const cacheableKey = typeof uploadData.media === 'object' &&
87
120
  ('url' in uploadData.media) &&
88
121
  !!uploadData.media.url &&
89
122
  !!options.mediaCache && (
90
- // generate the key
91
123
  mediaType + ':' + uploadData.media.url.toString());
124
+
92
125
  if (mediaType === 'document' && !uploadData.fileName) {
93
126
  uploadData.fileName = 'file';
94
127
  }
128
+
95
129
  if (!uploadData.mimetype) {
96
130
  uploadData.mimetype = MIMETYPE_MAP[mediaType];
97
131
  }
98
- // check for cache hit
132
+
99
133
  if (cacheableKey) {
100
134
  const mediaBuff = options.mediaCache.get(cacheableKey);
101
135
  if (mediaBuff) {
@@ -106,19 +140,28 @@ const prepareWAMessageMedia = async (message, options) => {
106
140
  return obj;
107
141
  }
108
142
  }
143
+
109
144
  const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
110
145
  const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
111
146
  (typeof uploadData['jpegThumbnail'] === 'undefined');
112
147
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
113
148
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
114
149
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
115
- 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, {
116
152
  logger,
117
153
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
118
- opts: options.options
154
+ opts: options.options,
155
+ isPtt: uploadData.ptt,
156
+ forceOpus: (mediaType === "audio" && uploadData.mimetype && uploadData.mimetype.includes('opus'))
119
157
  });
120
- // 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
+
121
163
  const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
164
+
122
165
  const [{ mediaUrl, directPath, handle }] = await Promise.all([
123
166
  (async () => {
124
167
  const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
@@ -159,18 +202,13 @@ const prepareWAMessageMedia = async (message, options) => {
159
202
  if (!Buffer.isBuffer(encWriteStream)) {
160
203
  encWriteStream.destroy();
161
204
  }
162
- // remove tmp files
205
+
163
206
  if (didSaveToTmpPath && bodyPath) {
164
- try {
165
- await fs_1.promises.access(bodyPath);
166
- await fs_1.promises.unlink(bodyPath);
167
- logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp file');
168
- }
169
- catch (error) {
170
- logger === null || logger === void 0 ? void 0 : logger.warn('failed to remove tmp file');
171
- }
207
+ await fs_1.promises.unlink(bodyPath);
208
+ logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
172
209
  }
173
210
  });
211
+
174
212
  const obj = Types_1.WAProto.Message.fromObject({
175
213
  [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
176
214
  url: handle ? undefined : mediaUrl,
@@ -184,14 +222,17 @@ const prepareWAMessageMedia = async (message, options) => {
184
222
  media: undefined
185
223
  })
186
224
  });
225
+
187
226
  if (uploadData.ptv) {
188
227
  obj.ptvMessage = obj.videoMessage;
189
228
  delete obj.videoMessage;
190
229
  }
230
+
191
231
  if (cacheableKey) {
192
232
  logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
193
233
  options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
194
234
  }
235
+
195
236
  return obj;
196
237
  };
197
238
  exports.prepareWAMessageMedia = prepareWAMessageMedia;
@@ -242,8 +283,8 @@ const generateForwardMessageContent = (message, forceForward) => {
242
283
  };
243
284
  exports.generateForwardMessageContent = generateForwardMessageContent;
244
285
  const generateWAMessageContent = async (message, options) => {
245
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
246
- var _p, _q;
286
+ var _a;
287
+ var _b;
247
288
  let m = {};
248
289
  if ('text' in message) {
249
290
  const extContent = { text: message.text };
@@ -252,6 +293,7 @@ const generateWAMessageContent = async (message, options) => {
252
293
  urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
253
294
  }
254
295
  if (urlInfo) {
296
+ extContent.canonicalUrl = urlInfo['canonical-url'];
255
297
  extContent.matchedText = urlInfo['matched-text'];
256
298
  extContent.jpegThumbnail = urlInfo.jpegThumbnail;
257
299
  extContent.description = urlInfo.description;
@@ -312,54 +354,6 @@ const generateWAMessageContent = async (message, options) => {
312
354
  message.disappearingMessagesInChat;
313
355
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
314
356
  }
315
- else if ('groupInvite' in message) {
316
- m.groupInviteMessage = {};
317
- m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
318
- m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
319
- m.groupInviteMessage.caption = message.groupInvite.text;
320
- m.groupInviteMessage.groupJid = message.groupInvite.jid;
321
- m.groupInviteMessage.groupName = message.groupInvite.subject;
322
- //TODO: use built-in interface and get disappearing mode info etc.
323
- //TODO: cache / use store!?
324
- if (options.getProfilePicUrl) {
325
- const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
326
- if (pfpUrl) {
327
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
328
- if (resp.status === 200) {
329
- m.groupInviteMessage.jpegThumbnail = resp.data;
330
- }
331
- }
332
- }
333
- }
334
- else if ('pin' in message) {
335
- m.pinInChatMessage = {};
336
- m.messageContextInfo = {};
337
- m.pinInChatMessage.key = message.pin;
338
- m.pinInChatMessage.type = message.type;
339
- m.pinInChatMessage.senderTimestampMs = Date.now();
340
- m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
341
- }
342
- else if ('keep' in message) {
343
- m.keepInChatMessage = {};
344
- m.keepInChatMessage.key = message.keep;
345
- m.keepInChatMessage.keepType = message.type;
346
- m.keepInChatMessage.timestampMs = Date.now();
347
- }
348
- else if ('call' in message) {
349
- m = {
350
- scheduledCallCreationMessage: {
351
- scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
352
- callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
353
- title: message.call.title
354
- }
355
- };
356
- }
357
- else if ('paymentInvite' in message) {
358
- m.paymentInviteMessage = {
359
- serviceType: message.paymentInvite.type,
360
- expiryTimestamp: message.paymentInvite.expiry
361
- };
362
- }
363
357
  else if ('buttonReply' in message) {
364
358
  switch (message.type) {
365
359
  case 'template':
@@ -378,10 +372,6 @@ const generateWAMessageContent = async (message, options) => {
378
372
  break;
379
373
  }
380
374
  }
381
- else if ('ptv' in message && message.ptv) {
382
- const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
383
- m.ptvMessage = videoMessage;
384
- }
385
375
  else if ('product' in message) {
386
376
  const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
387
377
  m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
@@ -392,27 +382,11 @@ const generateWAMessageContent = async (message, options) => {
392
382
  }
393
383
  });
394
384
  }
395
- else if ('order' in message) {
396
- m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
397
- orderId: message.order.id,
398
- thumbnail: message.order.thumbnail,
399
- itemCount: message.order.itemCount,
400
- status: message.order.status,
401
- surface: message.order.surface,
402
- orderTitle: message.order.title,
403
- message: message.order.text,
404
- sellerJid: message.order.seller,
405
- token: message.order.token,
406
- totalAmount1000: message.order.amount,
407
- totalCurrencyCode: message.order.currency
408
- });
409
- }
410
385
  else if ('listReply' in message) {
411
386
  m.listResponseMessage = { ...message.listReply };
412
387
  }
413
388
  else if ('poll' in message) {
414
- (_p = message.poll).selectableCount || (_p.selectableCount = 0);
415
- (_q = message.poll).toAnnouncementGroup || (_q.toAnnouncementGroup = false);
389
+ (_b = message.poll).selectableCount || (_b.selectableCount = 0);
416
390
  if (!Array.isArray(message.poll.values)) {
417
391
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
418
392
  }
@@ -424,72 +398,11 @@ const generateWAMessageContent = async (message, options) => {
424
398
  // encKey
425
399
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
426
400
  };
427
- const pollCreationMessage = {
401
+ m.pollCreationMessage = {
428
402
  name: message.poll.name,
429
403
  selectableOptionsCount: message.poll.selectableCount,
430
404
  options: message.poll.values.map(optionName => ({ optionName })),
431
405
  };
432
- if (message.poll.toAnnouncementGroup) {
433
- // poll v2 is for community announcement groups (single select and multiple)
434
- m.pollCreationMessageV2 = pollCreationMessage;
435
- }
436
- else {
437
- if (message.poll.selectableCount === 1) {
438
- // poll v3 is for single select polls
439
- m.pollCreationMessageV3 = pollCreationMessage;
440
- }
441
- else {
442
- // poll for multiple choice polls
443
- m.pollCreationMessage = pollCreationMessage;
444
- }
445
- }
446
- }
447
- else if ('event' in message) {
448
- m.messageContextInfo = {
449
- messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
450
- };
451
- m.eventMessage = { ...message.event };
452
- }
453
- else if ('inviteAdmin' in message) {
454
- m.newsletterAdminInviteMessage = {};
455
- m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
456
- m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
457
- m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
458
- m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
459
- m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
460
- }
461
- else if ('requestPayment' in message) {
462
- const sticker = ((_c = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _c === void 0 ? void 0 : _c.sticker) ?
463
- 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)
464
- : null;
465
- let notes = {};
466
- if ((_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker) {
467
- notes = {
468
- stickerMessage: {
469
- ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
470
- contextInfo: (_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.contextInfo
471
- }
472
- };
473
- }
474
- else if (message.requestPayment.note) {
475
- notes = {
476
- extendedTextMessage: {
477
- text: message.requestPayment.note,
478
- contextInfo: (_g = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _g === void 0 ? void 0 : _g.contextInfo,
479
- }
480
- };
481
- }
482
- else {
483
- throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
484
- }
485
- m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
486
- expiryTimestamp: message.requestPayment.expiry,
487
- amount1000: message.requestPayment.amount,
488
- currencyCodeIso4217: message.requestPayment.currency,
489
- requestFrom: message.requestPayment.from,
490
- noteMessage: { ...notes },
491
- background: (_h = message.requestPayment.background) !== null && _h !== void 0 ? _h : null,
492
- });
493
406
  }
494
407
  else if ('sharePhoneNumber' in message) {
495
408
  m.protocolMessage = {
@@ -499,14 +412,6 @@ const generateWAMessageContent = async (message, options) => {
499
412
  else if ('requestPhoneNumber' in message) {
500
413
  m.requestPhoneNumberMessage = {};
501
414
  }
502
- else if ('album' in message) {
503
- const imageMessages = message.album.filter(item => 'image' in item);
504
- const videoMessages = message.album.filter(item => 'video' in item);
505
- m.albumMessage = WAProto_1.proto.Message.AlbumMessage.fromObject({
506
- expectedImageCount: imageMessages.length,
507
- expectedVideoCount: videoMessages.length,
508
- });
509
- }
510
415
  else {
511
416
  m = await (0, exports.prepareWAMessageMedia)(message, options);
512
417
  }
@@ -526,24 +431,14 @@ const generateWAMessageContent = async (message, options) => {
526
431
  buttonsMessage.headerType = ButtonType[type];
527
432
  Object.assign(buttonsMessage, m);
528
433
  }
529
- if ('title' in message && !!message.title) {
530
- buttonsMessage.text = message.title,
531
- buttonsMessage.headerType = ButtonType.TEXT;
532
- }
533
434
  if ('footer' in message && !!message.footer) {
534
435
  buttonsMessage.footerText = message.footer;
535
436
  }
536
- if ('contextInfo' in message && !!message.contextInfo) {
537
- buttonsMessage.contextInfo = message.contextInfo;
538
- }
539
- if ('mentions' in message && !!message.mentions) {
540
- buttonsMessage.contextInfo = { mentionedJid: message.mentions };
541
- }
542
437
  m = { buttonsMessage };
543
438
  }
544
439
  else if ('templateButtons' in message && !!message.templateButtons) {
545
440
  const msg = {
546
- hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
441
+ hydratedButtons: message.templateButtons
547
442
  };
548
443
  if ('text' in message) {
549
444
  msg.hydratedContentText = message.text;
@@ -575,97 +470,10 @@ const generateWAMessageContent = async (message, options) => {
575
470
  };
576
471
  m = { listMessage };
577
472
  }
578
- if ('interactiveButtons' in message && !!message.interactiveButtons) {
579
- const interactiveMessage = {
580
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
581
- buttons: message.interactiveButtons,
582
- })
583
- };
584
- if ('text' in message) {
585
- interactiveMessage.body = {
586
- text: message.text
587
- };
588
- }
589
- else if ('caption' in message) {
590
- interactiveMessage.body = {
591
- text: message.caption
592
- };
593
- interactiveMessage.header = {
594
- title: message.title,
595
- subtitle: message.subtitle,
596
- hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
597
- };
598
- Object.assign(interactiveMessage.header, m);
599
- }
600
- if ('footer' in message && !!message.footer) {
601
- interactiveMessage.footer = {
602
- text: message.footer
603
- };
604
- }
605
- if ('title' in message && !!message.title) {
606
- interactiveMessage.header = {
607
- title: message.title,
608
- subtitle: message.subtitle,
609
- hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
610
- };
611
- Object.assign(interactiveMessage.header, m);
612
- }
613
- if ('contextInfo' in message && !!message.contextInfo) {
614
- interactiveMessage.contextInfo = message.contextInfo;
615
- }
616
- if ('mentions' in message && !!message.mentions) {
617
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
618
- }
619
- m = { interactiveMessage };
620
- }
621
- if ('shop' in message && !!message.shop) {
622
- const interactiveMessage = {
623
- shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
624
- surface: message.shop,
625
- id: message.id
626
- })
627
- };
628
- if ('text' in message) {
629
- interactiveMessage.body = {
630
- text: message.text
631
- };
632
- }
633
- else if ('caption' in message) {
634
- interactiveMessage.body = {
635
- text: message.caption
636
- };
637
- interactiveMessage.header = {
638
- title: message.title,
639
- subtitle: message.subtitle,
640
- hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
641
- };
642
- Object.assign(interactiveMessage.header, m);
643
- }
644
- if ('footer' in message && !!message.footer) {
645
- interactiveMessage.footer = {
646
- text: message.footer
647
- };
648
- }
649
- if ('title' in message && !!message.title) {
650
- interactiveMessage.header = {
651
- title: message.title,
652
- subtitle: message.subtitle,
653
- hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
654
- };
655
- Object.assign(interactiveMessage.header, m);
656
- }
657
- if ('contextInfo' in message && !!message.contextInfo) {
658
- interactiveMessage.contextInfo = message.contextInfo;
659
- }
660
- if ('mentions' in message && !!message.mentions) {
661
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
662
- }
663
- m = { interactiveMessage };
664
- }
665
473
  if ('viewOnce' in message && !!message.viewOnce) {
666
474
  m = { viewOnceMessage: { message: m } };
667
475
  }
668
- 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)) {
669
477
  const [messageType] = Object.keys(m);
670
478
  m[messageType].contextInfo = m[messageType] || {};
671
479
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -698,29 +506,26 @@ const generateWAMessageFromContent = (jid, message, options) => {
698
506
  const key = (0, exports.getContentType)(innerMessage);
699
507
  const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
700
508
  const { quoted, userJid } = options;
701
- // only set quoted if isn't a newsletter message
702
- if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
509
+ if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
703
510
  const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
704
511
  let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
705
512
  const msgType = (0, exports.getContentType)(quotedMsg);
706
513
  // strip any redundant properties
707
- if (quotedMsg) {
708
- quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
709
- const quotedContent = quotedMsg[msgType];
710
- if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
711
- delete quotedContent.contextInfo;
712
- }
713
- const contextInfo = innerMessage[key].contextInfo || {};
714
- contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
715
- contextInfo.stanzaId = quoted.key.id;
716
- contextInfo.quotedMessage = quotedMsg;
717
- // if a participant is quoted, then it must be a group
718
- // hence, remoteJid of group must also be entered
719
- if (jid !== quoted.key.remoteJid) {
720
- contextInfo.remoteJid = quoted.key.remoteJid;
721
- }
722
- innerMessage[key].contextInfo = contextInfo;
723
- }
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;
724
529
  }
725
530
  if (
726
531
  // if we want to send a disappearing message
@@ -730,7 +535,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
730
535
  // already not converted to disappearing message
731
536
  key !== 'ephemeralMessage' &&
732
537
  // newsletter not accept disappearing messages
733
- !(0, WABinary_1.isJidNewsletter)(jid)) {
538
+ !(0, WABinary_1.isJidNewsLetter)(jid)) {
734
539
  innerMessage[key].contextInfo = {
735
540
  ...(innerMessage[key].contextInfo || {}),
736
541
  expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
@@ -742,7 +547,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
742
547
  key: {
743
548
  remoteJid: jid,
744
549
  fromMe: true,
745
- 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)(),
746
551
  },
747
552
  message: message,
748
553
  messageTimestamp: timestamp,
@@ -757,7 +562,7 @@ const generateWAMessage = async (jid, content, options) => {
757
562
  var _a;
758
563
  // ensure msg ID is with every log
759
564
  options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
760
- 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);
761
566
  };
762
567
  exports.generateWAMessage = generateWAMessage;
763
568
  /** Get the key to access the true type of content */
@@ -794,24 +599,7 @@ const normalizeMessageContent = (content) => {
794
599
  || (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
795
600
  || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
796
601
  || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
797
- || (message === null || message === void 0 ? void 0 : message.editedMessage)
798
- || (message === null || message === void 0 ? void 0 : message.groupMentionedMessage)
799
- || (message === null || message === void 0 ? void 0 : message.botInvokeMessage)
800
- || (message === null || message === void 0 ? void 0 : message.lottieStickerMessage)
801
- || (message === null || message === void 0 ? void 0 : message.eventCoverImage)
802
- || (message === null || message === void 0 ? void 0 : message.statusMentionMessage)
803
- || (message === null || message === void 0 ? void 0 : message.pollCreationOptionImageMessage)
804
- || (message === null || message === void 0 ? void 0 : message.associatedChildMessage)
805
- || (message === null || message === void 0 ? void 0 : message.groupStatusMentionMessage)
806
- || (message === null || message === void 0 ? void 0 : message.pollCreationMessageV4)
807
- || (message === null || message === void 0 ? void 0 : message.pollCreationMessageV5)
808
- || (message === null || message === void 0 ? void 0 : message.statusAddYours)
809
- || (message === null || message === void 0 ? void 0 : message.groupStatusMessage)
810
- || (message === null || message === void 0 ? void 0 : message.limitSharingMessage)
811
- || (message === null || message === void 0 ? void 0 : message.botTaskMessage)
812
- || (message === null || message === void 0 ? void 0 : message.questionMessage)
813
- || (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2)
814
- || (message === null || message === void 0 ? void 0 : message.botForwardedMessage));
602
+ || (message === null || message === void 0 ? void 0 : message.editedMessage));
815
603
  }
816
604
  };
817
605
  exports.normalizeMessageContent = normalizeMessageContent;
@@ -861,11 +649,7 @@ exports.extractMessageContent = extractMessageContent;
861
649
  /**
862
650
  * Returns the device predicted by message ID
863
651
  */
864
- const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
865
- /^3E.{20}$/.test(id) ? 'web' :
866
- /^(.{21}|.{32})$/.test(id) ? 'android' :
867
- /^(3F|.{18}$)/.test(id) ? 'desktop' :
868
- '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';
869
653
  exports.getDevice = getDevice;
870
654
  /** Upserts a receipt in the message */
871
655
  const updateMessageWithReceipt = (msg, receipt) => {
@@ -884,8 +668,9 @@ const updateMessageWithReaction = (msg, reaction) => {
884
668
  const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
885
669
  const reactions = (msg.reactions || [])
886
670
  .filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
887
- reaction.text = reaction.text || '';
888
- reactions.push(reaction);
671
+ if (reaction.text) {
672
+ reactions.push(reaction);
673
+ }
889
674
  msg.reactions = reactions;
890
675
  };
891
676
  exports.updateMessageWithReaction = updateMessageWithReaction;
@@ -938,6 +723,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
938
723
  }
939
724
  return Object.values(voteHashMap);
940
725
  }
726
+ exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
941
727
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
942
728
  const aggregateMessageKeysNotFromMe = (keys) => {
943
729
  const keyMap = {};
@@ -1028,22 +814,3 @@ const assertMediaContent = (content) => {
1028
814
  return mediaContent;
1029
815
  };
1030
816
  exports.assertMediaContent = assertMediaContent;
1031
-
1032
- const toJid = (id) => {
1033
- if (!id)
1034
- return '';
1035
- if (id.endsWith('@lid'))
1036
- return id.replace('@lid', '@s.whatsapp.net');
1037
- if (id.includes('@'))
1038
- return id;
1039
- return `${id}@s.whatsapp.net`;
1040
- };
1041
- exports.toJid = toJid;
1042
- const getSenderLid = (message) => {
1043
- const sender = message.key.participant || message.key.remoteJid;
1044
- const user = (0, WABinary_1.jidDecode)(sender)?.user || '';
1045
- const lid = (0, WABinary_1.jidEncode)(user, 'lid');
1046
- console.log('sender lid:', lid);
1047
- return { jid: sender, lid };
1048
- };
1049
- exports.getSenderLid = getSenderLid;
@@ -1,19 +1,21 @@
1
- import { ILogger } from './logger';
1
+ /// <reference types="node" />
2
+ import { Logger } from 'pino';
2
3
  import { proto } from '../../WAProto';
3
4
  import { KeyPair } from '../Types';
4
5
  import { BinaryNode } from '../WABinary';
5
- export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }: {
6
+ export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, mobile, logger, routingInfo }: {
6
7
  keyPair: KeyPair;
7
8
  NOISE_HEADER: Uint8Array;
8
- logger: ILogger;
9
+ mobile: boolean;
10
+ logger: Logger;
9
11
  routingInfo?: Buffer | undefined;
10
12
  }) => {
11
- encrypt: (plaintext: Uint8Array) => Buffer<ArrayBuffer>;
12
- decrypt: (ciphertext: Uint8Array) => Buffer<ArrayBuffer>;
13
+ encrypt: (plaintext: Uint8Array) => Buffer;
14
+ decrypt: (ciphertext: Uint8Array) => Buffer;
13
15
  authenticate: (data: Uint8Array) => void;
14
- mixIntoKey: (data: Uint8Array) => Promise<void>;
15
- finishInit: () => Promise<void>;
16
- processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => Promise<Buffer<ArrayBuffer>>;
17
- encodeFrame: (data: Buffer | Uint8Array) => Buffer<ArrayBuffer>;
18
- decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => Promise<void>;
16
+ mixIntoKey: (data: Uint8Array) => void;
17
+ finishInit: () => void;
18
+ processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => Buffer;
19
+ encodeFrame: (data: Buffer | Uint8Array) => Buffer;
20
+ decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => void;
19
21
  };