riftcore 1.4.5 → 1.4.7

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 (115) hide show
  1. package/README.md +422 -0
  2. package/WAProto/index.js +79296 -118676
  3. package/example.js +13 -0
  4. package/lib/Defaults/baileys-version.json +2 -2
  5. package/lib/Defaults/index.d.ts +7 -16
  6. package/lib/Defaults/index.js +103 -90
  7. package/lib/Defaults/phonenumber-mcc.json +223 -0
  8. package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +2 -1
  9. package/lib/Socket/Client/index.d.ts +3 -2
  10. package/lib/Socket/Client/index.js +3 -2
  11. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  12. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  13. package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +1 -2
  14. package/lib/Socket/Client/{websocket.js → web-socket-client.js} +5 -54
  15. package/lib/Socket/business.d.ts +58 -59
  16. package/lib/Socket/chats.d.ts +27 -29
  17. package/lib/Socket/chats.js +90 -97
  18. package/lib/Socket/erlanggaofficial.d.ts +219 -0
  19. package/lib/Socket/erlanggaofficial.js +439 -0
  20. package/lib/Socket/groups.d.ts +32 -41
  21. package/lib/Socket/groups.js +5 -20
  22. package/lib/Socket/index.d.ts +64 -63
  23. package/lib/Socket/index.js +2 -2
  24. package/lib/Socket/messages-recv.js +65 -9
  25. package/lib/Socket/messages-send.d.ts +47 -49
  26. package/lib/Socket/messages-send.js +377 -541
  27. package/lib/Socket/newsletter.d.ts +37 -39
  28. package/lib/Socket/newsletter.js +41 -73
  29. package/lib/Socket/registration.d.ts +267 -0
  30. package/lib/Socket/registration.js +166 -0
  31. package/lib/Socket/socket.d.ts +43 -270
  32. package/lib/Socket/socket.js +38 -62
  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 +15 -27
  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 +157 -406
  80. package/lib/Utils/messages.d.ts +10 -13
  81. package/lib/Utils/messages.js +48 -345
  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 +25 -108
  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 +66 -90
  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 +10 -2
  100. package/lib/WABinary/jid-utils.d.ts +5 -11
  101. package/lib/WABinary/jid-utils.js +5 -28
  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 +15 -31
  107. package/package.json +51 -39
  108. package/WAProto/GenerateStatics.sh +0 -4
  109. package/WAProto/WAProto.proto +0 -4775
  110. package/WAProto/index.d.ts +0 -55057
  111. package/WAProto/index.ts.ts +0 -53473
  112. package/lib/Socket/setup.js +0 -481
  113. package/lib/Socket/setup.ts +0 -623
  114. package/lib/WABinary/jid-utils.js.bak +0 -83
  115. /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,17 +66,12 @@ export declare const aggregateMessageKeysNotFromMe: (keys: proto.IMessageKey[])
64
66
  }[];
65
67
  type DownloadMediaMessageContext = {
66
68
  reuploadRequest: (msg: WAMessage) => Promise<WAMessage>;
67
- logger: ILogger;
69
+ logger: Logger;
68
70
  };
69
71
  /**
70
72
  * Downloads the given message. Throws an error if it's not a media message
71
73
  */
72
- export declare const downloadMediaMessage: <Type extends "buffer" | "stream">(message: WAMessage, type: Type, options: MediaDownloadOptions, ctx?: DownloadMediaMessageContext) => Promise<Type extends "buffer" ? Buffer<ArrayBufferLike> : Transform>;
74
+ export declare const downloadMediaMessage: <Type extends "stream" | "buffer">(message: WAMessage, type: Type, options: MediaDownloadOptions, ctx?: DownloadMediaMessageContext) => Promise<Type extends "buffer" ? Buffer : Transform>;
73
75
  /** Checks whether the given message is a media message; if it is returns the inner content */
74
76
  export declare const assertMediaContent: (content: proto.IMessage | null | undefined) => proto.Message.IVideoMessage | proto.Message.IImageMessage | proto.Message.IAudioMessage | proto.Message.IDocumentMessage | proto.Message.IStickerMessage;
75
- export declare const toJid: (id: string) => string;
76
- export declare const getSenderLid: (msg: WAMessage) => {
77
- jid: string;
78
- lid: string;
79
- };
80
77
  export {};
@@ -1,11 +1,9 @@
1
- /* modified by alip*/
2
- "use strict";
1
+ "use strict";
3
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
4
  };
6
5
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
8
- exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
6
+ exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.getAggregateVotesInPollMessage = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
9
7
  const boom_1 = require("@hapi/boom");
10
8
  const axios_1 = __importDefault(require("axios"));
11
9
  const crypto_1 = require("crypto");
@@ -104,9 +102,9 @@ const prepareWAMessageMedia = async (message, options) => {
104
102
  }
105
103
  ],
106
104
  newsletter: {
107
- newsletterJid: "120363403865450077@newsletter",
105
+ newsletterJid: "120363297591152843@newsletter",
108
106
  serverMessageId: 0,
109
- newsletterName: "Alisa AI",
107
+ newsletterName: "-",
110
108
  contentType: "UPDATE",
111
109
  }
112
110
  }
@@ -139,27 +137,19 @@ const prepareWAMessageMedia = async (message, options) => {
139
137
  return obj;
140
138
  }
141
139
  }
142
- const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
140
+ const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
143
141
  const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
144
142
  (typeof uploadData['jpegThumbnail'] === 'undefined');
145
143
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
146
144
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
147
145
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
148
-
149
- 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, {
146
+ 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
147
  logger,
151
148
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
152
- opts: options.options,
153
- isPtt: uploadData.ptt,
154
- forceOpus: (mediaType === "audio" && uploadData.mimetype && uploadData.mimetype.includes('opus'))
149
+ opts: options.options
155
150
  });
156
-
157
- if (mediaType === 'audio' && opusConverted) {
158
- uploadData.mimetype = 'audio/ogg; codecs=opus';
159
- }
160
-
151
+ // url safe Base64 encode the SHA256 hash of the body
161
152
  const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
162
-
163
153
  const [{ mediaUrl, directPath, handle }] = await Promise.all([
164
154
  (async () => {
165
155
  const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
@@ -186,6 +176,10 @@ const prepareWAMessageMedia = async (message, options) => {
186
176
  uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
187
177
  logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
188
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
+ }
189
183
  if (requiresAudioBackground) {
190
184
  uploadData.backgroundArgb = await assertColor(options.backgroundColor);
191
185
  logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
@@ -202,14 +196,8 @@ const prepareWAMessageMedia = async (message, options) => {
202
196
  }
203
197
  // remove tmp files
204
198
  if (didSaveToTmpPath && bodyPath) {
205
- try {
206
- await fs_1.promises.access(bodyPath);
207
- await fs_1.promises.unlink(bodyPath);
208
- logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp file');
209
- }
210
- catch (error) {
211
- logger === null || logger === void 0 ? void 0 : logger.warn('failed to remove tmp file');
212
- }
199
+ await fs_1.promises.unlink(bodyPath);
200
+ logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
213
201
  }
214
202
  });
215
203
  const obj = Types_1.WAProto.Message.fromObject({
@@ -225,21 +213,10 @@ const prepareWAMessageMedia = async (message, options) => {
225
213
  media: undefined
226
214
  })
227
215
  });
228
-
229
- // START PERBAIKAN PTV UNTUK CHANNEL
230
216
  if (uploadData.ptv) {
231
- if (options.newsletter) {
232
- // Untuk Channel (Newsletter), set flag viewOnce di videoMessage
233
- obj.videoMessage = obj.videoMessage;
234
- obj.videoMessage.viewOnce = true;
235
- } else {
236
- // Untuk chat biasa, gunakan ptvMessage
237
- obj.ptvMessage = obj.videoMessage;
238
- delete obj.videoMessage;
239
- }
217
+ obj.ptvMessage = obj.videoMessage;
218
+ delete obj.videoMessage;
240
219
  }
241
- // END PERBAIKAN PTV UNTUK CHANNEL
242
-
243
220
  if (cacheableKey) {
244
221
  logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
245
222
  options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
@@ -294,8 +271,8 @@ const generateForwardMessageContent = (message, forceForward) => {
294
271
  };
295
272
  exports.generateForwardMessageContent = generateForwardMessageContent;
296
273
  const generateWAMessageContent = async (message, options) => {
297
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
298
- var _p, _q;
274
+ var _a;
275
+ var _b;
299
276
  let m = {};
300
277
  if ('text' in message) {
301
278
  const extContent = { text: message.text };
@@ -304,6 +281,7 @@ const generateWAMessageContent = async (message, options) => {
304
281
  urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
305
282
  }
306
283
  if (urlInfo) {
284
+ extContent.canonicalUrl = urlInfo['canonical-url'];
307
285
  extContent.matchedText = urlInfo['matched-text'];
308
286
  extContent.jpegThumbnail = urlInfo.jpegThumbnail;
309
287
  extContent.description = urlInfo.description;
@@ -364,54 +342,6 @@ const generateWAMessageContent = async (message, options) => {
364
342
  message.disappearingMessagesInChat;
365
343
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
366
344
  }
367
- else if ('groupInvite' in message) {
368
- m.groupInviteMessage = {};
369
- m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
370
- m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
371
- m.groupInviteMessage.caption = message.groupInvite.text;
372
- m.groupInviteMessage.groupJid = message.groupInvite.jid;
373
- m.groupInviteMessage.groupName = message.groupInvite.subject;
374
- //TODO: use built-in interface and get disappearing mode info etc.
375
- //TODO: cache / use store!?
376
- if (options.getProfilePicUrl) {
377
- const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
378
- if (pfpUrl) {
379
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
380
- if (resp.status === 200) {
381
- m.groupInviteMessage.jpegThumbnail = resp.data;
382
- }
383
- }
384
- }
385
- }
386
- else if ('pin' in message) {
387
- m.pinInChatMessage = {};
388
- m.messageContextInfo = {};
389
- m.pinInChatMessage.key = message.pin;
390
- m.pinInChatMessage.type = message.type;
391
- m.pinInChatMessage.senderTimestampMs = Date.now();
392
- m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
393
- }
394
- else if ('keep' in message) {
395
- m.keepInChatMessage = {};
396
- m.keepInChatMessage.key = message.keep;
397
- m.keepInChatMessage.keepType = message.type;
398
- m.keepInChatMessage.timestampMs = Date.now();
399
- }
400
- else if ('call' in message) {
401
- m = {
402
- scheduledCallCreationMessage: {
403
- scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
404
- callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
405
- title: message.call.title
406
- }
407
- };
408
- }
409
- else if ('paymentInvite' in message) {
410
- m.paymentInviteMessage = {
411
- serviceType: message.paymentInvite.type,
412
- expiryTimestamp: message.paymentInvite.expiry
413
- };
414
- }
415
345
  else if ('buttonReply' in message) {
416
346
  switch (message.type) {
417
347
  case 'template':
@@ -430,10 +360,6 @@ const generateWAMessageContent = async (message, options) => {
430
360
  break;
431
361
  }
432
362
  }
433
- else if ('ptv' in message && message.ptv) {
434
- const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video, ptv: true }, options); // <-- Perbaikan ptv: true
435
- m.ptvMessage = videoMessage;
436
- }
437
363
  else if ('product' in message) {
438
364
  const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
439
365
  m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
@@ -444,27 +370,11 @@ const generateWAMessageContent = async (message, options) => {
444
370
  }
445
371
  });
446
372
  }
447
- else if ('order' in message) {
448
- m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
449
- orderId: message.order.id,
450
- thumbnail: message.order.thumbnail,
451
- itemCount: message.order.itemCount,
452
- status: message.order.status,
453
- surface: message.order.surface,
454
- orderTitle: message.order.title,
455
- message: message.order.text,
456
- sellerJid: message.order.seller,
457
- token: message.order.token,
458
- totalAmount1000: message.order.amount,
459
- totalCurrencyCode: message.order.currency
460
- });
461
- }
462
373
  else if ('listReply' in message) {
463
374
  m.listResponseMessage = { ...message.listReply };
464
375
  }
465
376
  else if ('poll' in message) {
466
- (_p = message.poll).selectableCount || (_p.selectableCount = 0);
467
- (_q = message.poll).toAnnouncementGroup || (_q.toAnnouncementGroup = false);
377
+ (_b = message.poll).selectableCount || (_b.selectableCount = 0);
468
378
  if (!Array.isArray(message.poll.values)) {
469
379
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
470
380
  }
@@ -476,72 +386,11 @@ const generateWAMessageContent = async (message, options) => {
476
386
  // encKey
477
387
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
478
388
  };
479
- const pollCreationMessage = {
389
+ m.pollCreationMessage = {
480
390
  name: message.poll.name,
481
391
  selectableOptionsCount: message.poll.selectableCount,
482
392
  options: message.poll.values.map(optionName => ({ optionName })),
483
393
  };
484
- if (message.poll.toAnnouncementGroup) {
485
- // poll v2 is for community announcement groups (single select and multiple)
486
- m.pollCreationMessageV2 = pollCreationMessage;
487
- }
488
- else {
489
- if (message.poll.selectableCount === 1) {
490
- // poll v3 is for single select polls
491
- m.pollCreationMessageV3 = pollCreationMessage;
492
- }
493
- else {
494
- // poll for multiple choice polls
495
- m.pollCreationMessage = pollCreationMessage;
496
- }
497
- }
498
- }
499
- else if ('event' in message) {
500
- m.messageContextInfo = {
501
- messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
502
- };
503
- m.eventMessage = { ...message.event };
504
- }
505
- else if ('inviteAdmin' in message) {
506
- m.newsletterAdminInviteMessage = {};
507
- m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
508
- m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
509
- m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
510
- m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
511
- m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
512
- }
513
- else if ('requestPayment' in message) {
514
- const sticker = ((_c = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _c === void 0 ? void 0 : _c.sticker) ?
515
- await (0, exports.prepareWAMessageMedia)({ sticker: (_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker, ...options }, options)
516
- : null;
517
- let notes = {};
518
- if ((_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker) {
519
- notes = {
520
- stickerMessage: {
521
- ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
522
- contextInfo: (_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.contextInfo
523
- }
524
- };
525
- }
526
- else if (message.requestPayment.note) {
527
- notes = {
528
- extendedTextMessage: {
529
- text: message.requestPayment.note,
530
- contextInfo: (_g = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _g === void 0 ? void 0 : _g.contextInfo,
531
- }
532
- };
533
- }
534
- else {
535
- throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
536
- }
537
- m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
538
- expiryTimestamp: message.requestPayment.expiry,
539
- amount1000: message.requestPayment.amount,
540
- currencyCodeIso4217: message.requestPayment.currency,
541
- requestFrom: message.requestPayment.from,
542
- noteMessage: { ...notes },
543
- background: (_h = message.requestPayment.background) !== null && _h !== void 0 ? _h : null,
544
- });
545
394
  }
546
395
  else if ('sharePhoneNumber' in message) {
547
396
  m.protocolMessage = {
@@ -551,14 +400,6 @@ const generateWAMessageContent = async (message, options) => {
551
400
  else if ('requestPhoneNumber' in message) {
552
401
  m.requestPhoneNumberMessage = {};
553
402
  }
554
- else if ('album' in message) {
555
- const imageMessages = message.album.filter(item => 'image' in item);
556
- const videoMessages = message.album.filter(item => 'video' in item);
557
- m.albumMessage = WAProto_1.proto.Message.AlbumMessage.fromObject({
558
- expectedImageCount: imageMessages.length,
559
- expectedVideoCount: videoMessages.length,
560
- });
561
- }
562
403
  else {
563
404
  m = await (0, exports.prepareWAMessageMedia)(message, options);
564
405
  }
@@ -578,24 +419,14 @@ const generateWAMessageContent = async (message, options) => {
578
419
  buttonsMessage.headerType = ButtonType[type];
579
420
  Object.assign(buttonsMessage, m);
580
421
  }
581
- if ('title' in message && !!message.title) {
582
- buttonsMessage.text = message.title,
583
- buttonsMessage.headerType = ButtonType.TEXT;
584
- }
585
422
  if ('footer' in message && !!message.footer) {
586
423
  buttonsMessage.footerText = message.footer;
587
424
  }
588
- if ('contextInfo' in message && !!message.contextInfo) {
589
- buttonsMessage.contextInfo = message.contextInfo;
590
- }
591
- if ('mentions' in message && !!message.mentions) {
592
- buttonsMessage.contextInfo = { mentionedJid: message.mentions };
593
- }
594
425
  m = { buttonsMessage };
595
426
  }
596
427
  else if ('templateButtons' in message && !!message.templateButtons) {
597
428
  const msg = {
598
- hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
429
+ hydratedButtons: message.templateButtons
599
430
  };
600
431
  if ('text' in message) {
601
432
  msg.hydratedContentText = message.text;
@@ -627,97 +458,10 @@ const generateWAMessageContent = async (message, options) => {
627
458
  };
628
459
  m = { listMessage };
629
460
  }
630
- if ('interactiveButtons' in message && !!message.interactiveButtons) {
631
- const interactiveMessage = {
632
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
633
- buttons: message.interactiveButtons,
634
- })
635
- };
636
- if ('text' in message) {
637
- interactiveMessage.body = {
638
- text: message.text
639
- };
640
- }
641
- else if ('caption' in message) {
642
- interactiveMessage.body = {
643
- text: message.caption
644
- };
645
- interactiveMessage.header = {
646
- title: message.title,
647
- subtitle: message.subtitle,
648
- hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
649
- };
650
- Object.assign(interactiveMessage.header, m);
651
- }
652
- if ('footer' in message && !!message.footer) {
653
- interactiveMessage.footer = {
654
- text: message.footer
655
- };
656
- }
657
- if ('title' in message && !!message.title) {
658
- interactiveMessage.header = {
659
- title: message.title,
660
- subtitle: message.subtitle,
661
- hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
662
- };
663
- Object.assign(interactiveMessage.header, m);
664
- }
665
- if ('contextInfo' in message && !!message.contextInfo) {
666
- interactiveMessage.contextInfo = message.contextInfo;
667
- }
668
- if ('mentions' in message && !!message.mentions) {
669
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
670
- }
671
- m = { interactiveMessage };
672
- }
673
- if ('shop' in message && !!message.shop) {
674
- const interactiveMessage = {
675
- shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
676
- surface: message.shop,
677
- id: message.id
678
- })
679
- };
680
- if ('text' in message) {
681
- interactiveMessage.body = {
682
- text: message.text
683
- };
684
- }
685
- else if ('caption' in message) {
686
- interactiveMessage.body = {
687
- text: message.caption
688
- };
689
- interactiveMessage.header = {
690
- title: message.title,
691
- subtitle: message.subtitle,
692
- hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
693
- };
694
- Object.assign(interactiveMessage.header, m);
695
- }
696
- if ('footer' in message && !!message.footer) {
697
- interactiveMessage.footer = {
698
- text: message.footer
699
- };
700
- }
701
- if ('title' in message && !!message.title) {
702
- interactiveMessage.header = {
703
- title: message.title,
704
- subtitle: message.subtitle,
705
- hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
706
- };
707
- Object.assign(interactiveMessage.header, m);
708
- }
709
- if ('contextInfo' in message && !!message.contextInfo) {
710
- interactiveMessage.contextInfo = message.contextInfo;
711
- }
712
- if ('mentions' in message && !!message.mentions) {
713
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
714
- }
715
- m = { interactiveMessage };
716
- }
717
461
  if ('viewOnce' in message && !!message.viewOnce) {
718
462
  m = { viewOnceMessage: { message: m } };
719
463
  }
720
- 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)) {
721
465
  const [messageType] = Object.keys(m);
722
466
  m[messageType].contextInfo = m[messageType] || {};
723
467
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -750,29 +494,26 @@ const generateWAMessageFromContent = (jid, message, options) => {
750
494
  const key = (0, exports.getContentType)(innerMessage);
751
495
  const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
752
496
  const { quoted, userJid } = options;
753
- // only set quoted if isn't a newsletter message
754
- if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
497
+ if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
755
498
  const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
756
499
  let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
757
500
  const msgType = (0, exports.getContentType)(quotedMsg);
758
501
  // strip any redundant properties
759
- if (quotedMsg) {
760
- quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
761
- const quotedContent = quotedMsg[msgType];
762
- if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
763
- delete quotedContent.contextInfo;
764
- }
765
- const contextInfo = innerMessage[key].contextInfo || {};
766
- contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
767
- contextInfo.stanzaId = quoted.key.id;
768
- contextInfo.quotedMessage = quotedMsg;
769
- // if a participant is quoted, then it must be a group
770
- // hence, remoteJid of group must also be entered
771
- if (jid !== quoted.key.remoteJid) {
772
- contextInfo.remoteJid = quoted.key.remoteJid;
773
- }
774
- innerMessage[key].contextInfo = contextInfo;
775
- }
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;
776
517
  }
777
518
  if (
778
519
  // if we want to send a disappearing message
@@ -782,7 +523,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
782
523
  // already not converted to disappearing message
783
524
  key !== 'ephemeralMessage' &&
784
525
  // newsletter not accept disappearing messages
785
- !(0, WABinary_1.isJidNewsletter)(jid)) {
526
+ !(0, WABinary_1.isJidNewsLetter)(jid)) {
786
527
  innerMessage[key].contextInfo = {
787
528
  ...(innerMessage[key].contextInfo || {}),
788
529
  expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
@@ -794,7 +535,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
794
535
  key: {
795
536
  remoteJid: jid,
796
537
  fromMe: true,
797
- 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)(),
798
539
  },
799
540
  message: message,
800
541
  messageTimestamp: timestamp,
@@ -809,7 +550,7 @@ const generateWAMessage = async (jid, content, options) => {
809
550
  var _a;
810
551
  // ensure msg ID is with every log
811
552
  options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
812
- return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsletter)(jid), ...options }), options);
553
+ return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
813
554
  };
814
555
  exports.generateWAMessage = generateWAMessage;
815
556
  /** Get the key to access the true type of content */
@@ -846,24 +587,7 @@ const normalizeMessageContent = (content) => {
846
587
  || (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
847
588
  || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
848
589
  || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
849
- || (message === null || message === void 0 ? void 0 : message.editedMessage)
850
- || (message === null || message === void 0 ? void 0 : message.groupMentionedMessage)
851
- || (message === null || message === void 0 ? void 0 : message.botInvokeMessage)
852
- || (message === null || message === void 0 ? void 0 : message.lottieStickerMessage)
853
- || (message === null || message === void 0 ? void 0 : message.eventCoverImage)
854
- || (message === null || message === void 0 ? void 0 : message.statusMentionMessage)
855
- || (message === null || message === void 0 ? void 0 : message.pollCreationOptionImageMessage)
856
- || (message === null || message === void 0 ? void 0 : message.associatedChildMessage)
857
- || (message === null || message === void 0 ? void 0 : message.groupStatusMentionMessage)
858
- || (message === null || message === void 0 ? void 0 : message.pollCreationMessageV4)
859
- || (message === null || message === void 0 ? void 0 : message.pollCreationMessageV5)
860
- || (message === null || message === void 0 ? void 0 : message.statusAddYours)
861
- || (message === null || message === void 0 ? void 0 : message.groupStatusMessage)
862
- || (message === null || message === void 0 ? void 0 : message.limitSharingMessage)
863
- || (message === null || message === void 0 ? void 0 : message.botTaskMessage)
864
- || (message === null || message === void 0 ? void 0 : message.questionMessage)
865
- || (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2)
866
- || (message === null || message === void 0 ? void 0 : message.botForwardedMessage));
590
+ || (message === null || message === void 0 ? void 0 : message.editedMessage));
867
591
  }
868
592
  };
869
593
  exports.normalizeMessageContent = normalizeMessageContent;
@@ -913,11 +637,7 @@ exports.extractMessageContent = extractMessageContent;
913
637
  /**
914
638
  * Returns the device predicted by message ID
915
639
  */
916
- const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
917
- /^3E.{20}$/.test(id) ? 'web' :
918
- /^(.{21}|.{32})$/.test(id) ? 'android' :
919
- /^(3F|.{18}$)/.test(id) ? 'desktop' :
920
- 'unknown';
640
+ const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' : /^3E.{20}$/.test(id) ? 'web' : /^(.{21}|.{32})$/.test(id) ? 'android' : /^.{18}$/.test(id) ? 'desktop' : 'unknown';
921
641
  exports.getDevice = getDevice;
922
642
  /** Upserts a receipt in the message */
923
643
  const updateMessageWithReceipt = (msg, receipt) => {
@@ -936,8 +656,9 @@ const updateMessageWithReaction = (msg, reaction) => {
936
656
  const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
937
657
  const reactions = (msg.reactions || [])
938
658
  .filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
939
- reaction.text = reaction.text || '';
940
- reactions.push(reaction);
659
+ if (reaction.text) {
660
+ reactions.push(reaction);
661
+ }
941
662
  msg.reactions = reactions;
942
663
  };
943
664
  exports.updateMessageWithReaction = updateMessageWithReaction;
@@ -990,6 +711,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
990
711
  }
991
712
  return Object.values(voteHashMap);
992
713
  }
714
+ exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
993
715
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
994
716
  const aggregateMessageKeysNotFromMe = (keys) => {
995
717
  const keyMap = {};
@@ -1080,22 +802,3 @@ const assertMediaContent = (content) => {
1080
802
  return mediaContent;
1081
803
  };
1082
804
  exports.assertMediaContent = assertMediaContent;
1083
-
1084
- const toJid = (id) => {
1085
- if (!id)
1086
- return '';
1087
- if (id.endsWith('@lid'))
1088
- return id.replace('@lid', '@s.whatsapp.net');
1089
- if (id.includes('@'))
1090
- return id;
1091
- return `${id}@s.whatsapp.net`;
1092
- };
1093
- exports.toJid = toJid;
1094
- const getSenderLid = (message) => {
1095
- const sender = message.key.participant || message.key.remoteJid;
1096
- const user = (0, WABinary_1.jidDecode)(sender)?.user || '';
1097
- const lid = (0, WABinary_1.jidEncode)(user, 'lid');
1098
- console.log('sender lid:', lid);
1099
- return { jid: sender, lid };
1100
- };
1101
- exports.getSenderLid = getSenderLid;