cuki-bailx 1.1.2 → 1.2.3

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 (116) hide show
  1. package/WAProto/index.js +79296 -118676
  2. package/engine-requirements.js +1 -1
  3. package/lib/Defaults/baileys-version.json +1 -1
  4. package/lib/Defaults/index.d.ts +6 -4
  5. package/lib/Defaults/index.js +102 -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} +2 -12
  14. package/lib/Socket/business.d.ts +58 -59
  15. package/lib/Socket/chats.d.ts +27 -29
  16. package/lib/Socket/chats.js +90 -97
  17. package/lib/Socket/dugong.d.ts +219 -0
  18. package/lib/Socket/dugong.js +441 -0
  19. package/lib/Socket/groups.d.ts +32 -41
  20. package/lib/Socket/groups.js +5 -20
  21. package/lib/Socket/index.d.ts +64 -63
  22. package/lib/Socket/index.js +2 -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 +312 -379
  26. package/lib/Socket/newsletter.d.ts +37 -39
  27. package/lib/Socket/newsletter.js +40 -54
  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 +32 -39
  32. package/lib/Socket/socket.js.bak +630 -0
  33. package/lib/Socket/usync.d.ts +3 -3
  34. package/lib/Store/index.d.ts +2 -1
  35. package/lib/Store/index.js +3 -1
  36. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  37. package/lib/Store/make-cache-manager-store.js +83 -0
  38. package/lib/Store/make-in-memory-store.d.ts +24 -24
  39. package/lib/Store/make-in-memory-store.js +11 -13
  40. package/lib/Store/make-ordered-dictionary.d.ts +1 -1
  41. package/lib/Store/make-ordered-dictionary.js +2 -2
  42. package/lib/Types/Auth.d.ts +7 -0
  43. package/lib/Types/Call.d.ts +1 -1
  44. package/lib/Types/Chat.d.ts +7 -14
  45. package/lib/Types/Contact.d.ts +1 -5
  46. package/lib/Types/Events.d.ts +2 -44
  47. package/lib/Types/GroupMetadata.d.ts +2 -11
  48. package/lib/Types/Label.js +1 -1
  49. package/lib/Types/LabelAssociation.js +1 -1
  50. package/lib/Types/Message.d.ts +21 -148
  51. package/lib/Types/Message.js +2 -0
  52. package/lib/Types/Newsletter.d.ts +13 -0
  53. package/lib/Types/Newsletter.js +17 -3
  54. package/lib/Types/Socket.d.ts +9 -17
  55. package/lib/Types/index.d.ts +1 -8
  56. package/lib/Types/index.js +2 -2
  57. package/lib/Utils/auth-utils.d.ts +3 -3
  58. package/lib/Utils/auth-utils.js +13 -6
  59. package/lib/Utils/business.js +2 -2
  60. package/lib/Utils/chat-utils.d.ts +16 -15
  61. package/lib/Utils/chat-utils.js +35 -36
  62. package/lib/Utils/crypto.d.ts +16 -15
  63. package/lib/Utils/crypto.js +29 -71
  64. package/lib/Utils/decode-wa-message.d.ts +6 -22
  65. package/lib/Utils/decode-wa-message.js +56 -65
  66. package/lib/Utils/event-buffer.d.ts +2 -2
  67. package/lib/Utils/event-buffer.js +7 -11
  68. package/lib/Utils/generics.d.ts +20 -17
  69. package/lib/Utils/generics.js +23 -73
  70. package/lib/Utils/history.d.ts +0 -4
  71. package/lib/Utils/history.js +6 -4
  72. package/lib/Utils/link-preview.d.ts +2 -2
  73. package/lib/Utils/link-preview.js +1 -34
  74. package/lib/Utils/logger.d.ts +3 -10
  75. package/lib/Utils/lt-hash.d.ts +2 -2
  76. package/lib/Utils/lt-hash.js +6 -6
  77. package/lib/Utils/make-mutex.d.ts +2 -2
  78. package/lib/Utils/messages-media.d.ts +24 -28
  79. package/lib/Utils/messages-media.js +115 -263
  80. package/lib/Utils/messages.d.ts +10 -8
  81. package/lib/Utils/messages.js +72 -298
  82. package/lib/Utils/noise-handler.d.ts +12 -10
  83. package/lib/Utils/noise-handler.js +23 -18
  84. package/lib/Utils/process-message.d.ts +4 -5
  85. package/lib/Utils/process-message.js +23 -74
  86. package/lib/Utils/signal.d.ts +1 -2
  87. package/lib/Utils/signal.js +35 -37
  88. package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
  89. package/lib/Utils/use-multi-file-auth-state.js +6 -51
  90. package/lib/Utils/validate-connection.d.ts +4 -3
  91. package/lib/Utils/validate-connection.js +52 -20
  92. package/lib/WABinary/constants.d.ts +4 -4
  93. package/lib/WABinary/constants.js +13 -1276
  94. package/lib/WABinary/decode.d.ts +4 -3
  95. package/lib/WABinary/decode.js +13 -26
  96. package/lib/WABinary/encode.d.ts +2 -1
  97. package/lib/WABinary/encode.js +17 -39
  98. package/lib/WABinary/generic-utils.d.ts +3 -1
  99. package/lib/WABinary/generic-utils.js +85 -2
  100. package/lib/WABinary/jid-utils.d.ts +5 -10
  101. package/lib/WABinary/jid-utils.js +5 -26
  102. package/lib/WAM/BinaryInfo.d.ts +11 -2
  103. package/lib/WAM/encode.d.ts +2 -1
  104. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
  105. package/lib/index.d.ts +2 -6
  106. package/lib/index.js +7 -21
  107. package/lib/index.js.bak +48 -0
  108. package/package.json +103 -111
  109. package/LICENSE +0 -21
  110. package/WAProto/GenerateStatics.sh +0 -4
  111. package/WAProto/WAProto.proto +0 -4775
  112. package/WAProto/index.d.ts +0 -55057
  113. package/WAProto/index.ts.ts +0 -53473
  114. package/WAProto/p.html +0 -1
  115. package/lib/WABinary/jid-utils.js.bak +0 -83
  116. /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");
@@ -79,6 +78,38 @@ const prepareWAMessageMedia = async (message, options) => {
79
78
  }
80
79
  const uploadData = {
81
80
  ...message,
81
+ ...(message.annotations ? {
82
+ annotations: message.annotations
83
+ } : {
84
+ annotations: [
85
+ {
86
+ polygonVertices: [
87
+ {
88
+ x: 60.71664810180664,
89
+ y: -36.39784622192383
90
+ },
91
+ {
92
+ x: -16.710189819335938,
93
+ y: 49.263675689697266
94
+ },
95
+ {
96
+ x: -56.585853576660156,
97
+ y: 37.85963439941406
98
+ },
99
+ {
100
+ x: 20.840980529785156,
101
+ y: -47.80188751220703
102
+ }
103
+ ],
104
+ newsletter: {
105
+ newsletterJid: "120363297591152843@newsletter",
106
+ serverMessageId: 0,
107
+ newsletterName: "-",
108
+ contentType: "UPDATE",
109
+ }
110
+ }
111
+ ]
112
+ }),
82
113
  media: message[mediaType]
83
114
  };
84
115
  delete uploadData[mediaType];
@@ -145,6 +176,10 @@ const prepareWAMessageMedia = async (message, options) => {
145
176
  uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
146
177
  logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
147
178
  }
179
+ if (requiresWaveformProcessing) {
180
+ uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
181
+ logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
182
+ }
148
183
  if (requiresAudioBackground) {
149
184
  uploadData.backgroundArgb = await assertColor(options.backgroundColor);
150
185
  logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
@@ -161,14 +196,8 @@ const prepareWAMessageMedia = async (message, options) => {
161
196
  }
162
197
  // remove tmp files
163
198
  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
- }
199
+ await fs_1.promises.unlink(bodyPath);
200
+ logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
172
201
  }
173
202
  });
174
203
  const obj = Types_1.WAProto.Message.fromObject({
@@ -242,8 +271,8 @@ const generateForwardMessageContent = (message, forceForward) => {
242
271
  };
243
272
  exports.generateForwardMessageContent = generateForwardMessageContent;
244
273
  const generateWAMessageContent = async (message, options) => {
245
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
246
- var _p, _q;
274
+ var _a;
275
+ var _b;
247
276
  let m = {};
248
277
  if ('text' in message) {
249
278
  const extContent = { text: message.text };
@@ -252,6 +281,7 @@ const generateWAMessageContent = async (message, options) => {
252
281
  urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
253
282
  }
254
283
  if (urlInfo) {
284
+ extContent.canonicalUrl = urlInfo['canonical-url'];
255
285
  extContent.matchedText = urlInfo['matched-text'];
256
286
  extContent.jpegThumbnail = urlInfo.jpegThumbnail;
257
287
  extContent.description = urlInfo.description;
@@ -312,54 +342,6 @@ const generateWAMessageContent = async (message, options) => {
312
342
  message.disappearingMessagesInChat;
313
343
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
314
344
  }
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
345
  else if ('buttonReply' in message) {
364
346
  switch (message.type) {
365
347
  case 'template':
@@ -378,10 +360,6 @@ const generateWAMessageContent = async (message, options) => {
378
360
  break;
379
361
  }
380
362
  }
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
363
  else if ('product' in message) {
386
364
  const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
387
365
  m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
@@ -392,27 +370,11 @@ const generateWAMessageContent = async (message, options) => {
392
370
  }
393
371
  });
394
372
  }
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
373
  else if ('listReply' in message) {
411
374
  m.listResponseMessage = { ...message.listReply };
412
375
  }
413
376
  else if ('poll' in message) {
414
- (_p = message.poll).selectableCount || (_p.selectableCount = 0);
415
- (_q = message.poll).toAnnouncementGroup || (_q.toAnnouncementGroup = false);
377
+ (_b = message.poll).selectableCount || (_b.selectableCount = 0);
416
378
  if (!Array.isArray(message.poll.values)) {
417
379
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
418
380
  }
@@ -424,72 +386,11 @@ const generateWAMessageContent = async (message, options) => {
424
386
  // encKey
425
387
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
426
388
  };
427
- const pollCreationMessage = {
389
+ m.pollCreationMessage = {
428
390
  name: message.poll.name,
429
391
  selectableOptionsCount: message.poll.selectableCount,
430
392
  options: message.poll.values.map(optionName => ({ optionName })),
431
393
  };
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
394
  }
494
395
  else if ('sharePhoneNumber' in message) {
495
396
  m.protocolMessage = {
@@ -499,14 +400,6 @@ const generateWAMessageContent = async (message, options) => {
499
400
  else if ('requestPhoneNumber' in message) {
500
401
  m.requestPhoneNumberMessage = {};
501
402
  }
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
403
  else {
511
404
  m = await (0, exports.prepareWAMessageMedia)(message, options);
512
405
  }
@@ -526,24 +419,14 @@ const generateWAMessageContent = async (message, options) => {
526
419
  buttonsMessage.headerType = ButtonType[type];
527
420
  Object.assign(buttonsMessage, m);
528
421
  }
529
- if ('title' in message && !!message.title) {
530
- buttonsMessage.text = message.title,
531
- buttonsMessage.headerType = ButtonType.TEXT;
532
- }
533
422
  if ('footer' in message && !!message.footer) {
534
423
  buttonsMessage.footerText = message.footer;
535
424
  }
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
425
  m = { buttonsMessage };
543
426
  }
544
427
  else if ('templateButtons' in message && !!message.templateButtons) {
545
428
  const msg = {
546
- hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
429
+ hydratedButtons: message.templateButtons
547
430
  };
548
431
  if ('text' in message) {
549
432
  msg.hydratedContentText = message.text;
@@ -575,97 +458,10 @@ const generateWAMessageContent = async (message, options) => {
575
458
  };
576
459
  m = { listMessage };
577
460
  }
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
461
  if ('viewOnce' in message && !!message.viewOnce) {
666
462
  m = { viewOnceMessage: { message: m } };
667
463
  }
668
- if ('mentions' in message && ((_o = message.mentions) === null || _o === void 0 ? void 0 : _o.length)) {
464
+ if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
669
465
  const [messageType] = Object.keys(m);
670
466
  m[messageType].contextInfo = m[messageType] || {};
671
467
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -698,29 +494,26 @@ const generateWAMessageFromContent = (jid, message, options) => {
698
494
  const key = (0, exports.getContentType)(innerMessage);
699
495
  const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
700
496
  const { quoted, userJid } = options;
701
- // only set quoted if isn't a newsletter message
702
- if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
497
+ if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
703
498
  const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
704
499
  let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
705
500
  const msgType = (0, exports.getContentType)(quotedMsg);
706
501
  // 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
- }
502
+ quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
503
+ const quotedContent = quotedMsg[msgType];
504
+ if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
505
+ delete quotedContent.contextInfo;
506
+ }
507
+ const contextInfo = innerMessage[key].contextInfo || {};
508
+ contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
509
+ contextInfo.stanzaId = quoted.key.id;
510
+ contextInfo.quotedMessage = quotedMsg;
511
+ // if a participant is quoted, then it must be a group
512
+ // hence, remoteJid of group must also be entered
513
+ if (jid !== quoted.key.remoteJid) {
514
+ contextInfo.remoteJid = quoted.key.remoteJid;
515
+ }
516
+ innerMessage[key].contextInfo = contextInfo;
724
517
  }
725
518
  if (
726
519
  // if we want to send a disappearing message
@@ -730,7 +523,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
730
523
  // already not converted to disappearing message
731
524
  key !== 'ephemeralMessage' &&
732
525
  // newsletter not accept disappearing messages
733
- !(0, WABinary_1.isJidNewsletter)(jid)) {
526
+ !(0, WABinary_1.isJidNewsLetter)(jid)) {
734
527
  innerMessage[key].contextInfo = {
735
528
  ...(innerMessage[key].contextInfo || {}),
736
529
  expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
@@ -742,7 +535,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
742
535
  key: {
743
536
  remoteJid: jid,
744
537
  fromMe: true,
745
- id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageIDV2)(),
538
+ id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageID)(),
746
539
  },
747
540
  message: message,
748
541
  messageTimestamp: timestamp,
@@ -757,7 +550,7 @@ const generateWAMessage = async (jid, content, options) => {
757
550
  var _a;
758
551
  // ensure msg ID is with every log
759
552
  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);
553
+ return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
761
554
  };
762
555
  exports.generateWAMessage = generateWAMessage;
763
556
  /** Get the key to access the true type of content */
@@ -794,24 +587,7 @@ const normalizeMessageContent = (content) => {
794
587
  || (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
795
588
  || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
796
589
  || (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));
590
+ || (message === null || message === void 0 ? void 0 : message.editedMessage));
815
591
  }
816
592
  };
817
593
  exports.normalizeMessageContent = normalizeMessageContent;
@@ -861,11 +637,7 @@ exports.extractMessageContent = extractMessageContent;
861
637
  /**
862
638
  * Returns the device predicted by message ID
863
639
  */
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';
640
+ const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' : /^3E.{20}$/.test(id) ? 'web' : /^(.{21}|.{32})$/.test(id) ? 'android' : /^.{18}$/.test(id) ? 'desktop' : 'unknown';
869
641
  exports.getDevice = getDevice;
870
642
  /** Upserts a receipt in the message */
871
643
  const updateMessageWithReceipt = (msg, receipt) => {
@@ -884,8 +656,9 @@ const updateMessageWithReaction = (msg, reaction) => {
884
656
  const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
885
657
  const reactions = (msg.reactions || [])
886
658
  .filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
887
- reaction.text = reaction.text || '';
888
- reactions.push(reaction);
659
+ if (reaction.text) {
660
+ reactions.push(reaction);
661
+ }
889
662
  msg.reactions = reactions;
890
663
  };
891
664
  exports.updateMessageWithReaction = updateMessageWithReaction;
@@ -938,6 +711,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
938
711
  }
939
712
  return Object.values(voteHashMap);
940
713
  }
714
+ exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
941
715
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
942
716
  const aggregateMessageKeysNotFromMe = (keys) => {
943
717
  const keyMap = {};
@@ -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
  };