@alannxd/baileys 6.0.5 → 6.0.6

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 (234) hide show
  1. package/WAProto/fix-import.js +29 -0
  2. package/WAProto/index.js +160 -201
  3. package/engine-requirements.js +1 -1
  4. package/lib/Defaults/baileys-version.json +3 -0
  5. package/lib/Defaults/index.d.ts +15 -37
  6. package/lib/Defaults/index.js +136 -119
  7. package/lib/Defaults/phonenumber-mcc.json +223 -0
  8. package/lib/Signal/Group/ciphertext-message.d.ts +0 -1
  9. package/lib/Signal/Group/ciphertext-message.js +5 -2
  10. package/lib/Signal/Group/group-session-builder.d.ts +3 -4
  11. package/lib/Signal/Group/group-session-builder.js +41 -7
  12. package/lib/Signal/Group/group_cipher.d.ts +4 -4
  13. package/lib/Signal/Group/group_cipher.js +51 -37
  14. package/lib/Signal/Group/index.d.ts +11 -12
  15. package/lib/Signal/Group/index.js +57 -12
  16. package/lib/Signal/Group/keyhelper.d.ts +1 -2
  17. package/lib/Signal/Group/keyhelper.js +44 -7
  18. package/lib/Signal/Group/queue-job.d.ts +1 -0
  19. package/lib/Signal/Group/queue-job.js +57 -0
  20. package/lib/Signal/Group/sender-chain-key.d.ts +2 -3
  21. package/lib/Signal/Group/sender-chain-key.js +15 -7
  22. package/lib/Signal/Group/sender-key-distribution-message.d.ts +1 -2
  23. package/lib/Signal/Group/sender-key-distribution-message.js +11 -8
  24. package/lib/Signal/Group/sender-key-message.d.ts +1 -2
  25. package/lib/Signal/Group/sender-key-message.js +12 -9
  26. package/lib/Signal/Group/sender-key-name.d.ts +0 -1
  27. package/lib/Signal/Group/sender-key-name.js +5 -2
  28. package/lib/Signal/Group/sender-key-record.d.ts +2 -3
  29. package/lib/Signal/Group/sender-key-record.js +21 -9
  30. package/lib/Signal/Group/sender-key-state.d.ts +6 -7
  31. package/lib/Signal/Group/sender-key-state.js +42 -27
  32. package/lib/Signal/Group/sender-message-key.d.ts +0 -1
  33. package/lib/Signal/Group/sender-message-key.js +7 -4
  34. package/lib/Signal/libsignal.d.ts +3 -5
  35. package/lib/Signal/libsignal.js +90 -347
  36. package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +5 -4
  37. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  38. package/lib/Socket/Client/index.d.ts +3 -3
  39. package/lib/Socket/Client/index.js +19 -3
  40. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  41. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  42. package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +2 -3
  43. package/lib/Socket/Client/web-socket-client.js +62 -0
  44. package/lib/Socket/business.d.ts +108 -154
  45. package/lib/Socket/business.js +43 -162
  46. package/lib/Socket/chats.d.ts +239 -96
  47. package/lib/Socket/chats.js +427 -627
  48. package/lib/Socket/communities.d.ts +146 -239
  49. package/lib/Socket/communities.js +80 -90
  50. package/lib/Socket/groups.d.ts +57 -104
  51. package/lib/Socket/groups.js +161 -154
  52. package/lib/Socket/index.d.ts +115 -202
  53. package/lib/Socket/index.js +10 -11
  54. package/lib/Socket/luxu.d.ts +266 -22
  55. package/lib/Socket/luxu.js +465 -422
  56. package/lib/Socket/messages-recv.d.ts +84 -136
  57. package/lib/Socket/messages-recv.js +615 -1421
  58. package/lib/Socket/messages-send.d.ts +126 -142
  59. package/lib/Socket/messages-send.js +671 -878
  60. package/lib/Socket/newsletter.d.ts +85 -121
  61. package/lib/Socket/newsletter.js +272 -147
  62. package/lib/Socket/registration.d.ts +267 -0
  63. package/lib/Socket/registration.js +166 -0
  64. package/lib/Socket/socket.d.ts +19 -34
  65. package/lib/Socket/socket.js +313 -544
  66. package/lib/Socket/usync.d.ts +36 -0
  67. package/lib/Socket/usync.js +70 -0
  68. package/lib/Store/index.d.ts +3 -10
  69. package/lib/Store/index.js +10 -10
  70. package/lib/Store/make-cache-manager-store.d.ts +11 -17
  71. package/lib/Store/make-cache-manager-store.js +41 -43
  72. package/lib/Store/make-in-memory-store.d.ts +118 -39
  73. package/lib/Store/make-in-memory-store.js +341 -112
  74. package/lib/Store/make-ordered-dictionary.d.ts +10 -11
  75. package/lib/Store/make-ordered-dictionary.js +20 -14
  76. package/lib/Store/object-repository.d.ts +9 -10
  77. package/lib/Store/object-repository.js +6 -11
  78. package/lib/Types/Auth.d.ts +12 -19
  79. package/lib/Types/Auth.js +2 -2
  80. package/lib/Types/Call.d.ts +1 -3
  81. package/lib/Types/Call.js +2 -2
  82. package/lib/Types/Chat.d.ts +13 -35
  83. package/lib/Types/Chat.js +4 -8
  84. package/lib/Types/Contact.d.ts +1 -8
  85. package/lib/Types/Contact.js +2 -2
  86. package/lib/Types/Events.d.ts +17 -116
  87. package/lib/Types/Events.js +2 -2
  88. package/lib/Types/GroupMetadata.d.ts +5 -21
  89. package/lib/Types/GroupMetadata.js +2 -2
  90. package/lib/Types/Label.d.ts +0 -12
  91. package/lib/Types/Label.js +5 -3
  92. package/lib/Types/LabelAssociation.d.ts +0 -1
  93. package/lib/Types/LabelAssociation.js +5 -3
  94. package/lib/Types/Message.d.ts +58 -105
  95. package/lib/Types/Message.js +9 -11
  96. package/lib/Types/Newsletter.d.ts +103 -0
  97. package/lib/Types/Newsletter.js +38 -0
  98. package/lib/Types/Product.d.ts +1 -2
  99. package/lib/Types/Product.js +2 -2
  100. package/lib/Types/Signal.d.ts +2 -32
  101. package/lib/Types/Signal.js +2 -2
  102. package/lib/Types/Socket.d.ts +25 -50
  103. package/lib/Types/Socket.js +2 -3
  104. package/lib/Types/State.d.ts +2 -72
  105. package/lib/Types/State.js +2 -56
  106. package/lib/Types/USync.d.ts +2 -3
  107. package/lib/Types/USync.js +2 -2
  108. package/lib/Types/index.d.ts +14 -22
  109. package/lib/Types/index.js +31 -15
  110. package/lib/Utils/auth-utils.d.ts +6 -12
  111. package/lib/Utils/auth-utils.js +143 -239
  112. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  113. package/lib/Utils/baileys-event-stream.js +63 -0
  114. package/lib/Utils/business.d.ts +2 -3
  115. package/lib/Utils/business.js +69 -66
  116. package/lib/Utils/chat-utils.d.ts +23 -52
  117. package/lib/Utils/chat-utils.js +253 -396
  118. package/lib/Utils/crypto.d.ts +22 -18
  119. package/lib/Utils/crypto.js +90 -57
  120. package/lib/Utils/decode-wa-message.d.ts +8 -55
  121. package/lib/Utils/decode-wa-message.js +84 -203
  122. package/lib/Utils/event-buffer.d.ts +8 -9
  123. package/lib/Utils/event-buffer.js +77 -185
  124. package/lib/Utils/generics.d.ts +29 -28
  125. package/lib/Utils/generics.js +210 -180
  126. package/lib/Utils/history.d.ts +9 -18
  127. package/lib/Utils/history.js +55 -93
  128. package/lib/Utils/index.d.ts +17 -22
  129. package/lib/Utils/index.js +33 -22
  130. package/lib/Utils/link-preview.d.ts +5 -5
  131. package/lib/Utils/link-preview.js +24 -16
  132. package/lib/Utils/logger.d.ts +3 -11
  133. package/lib/Utils/logger.js +7 -3
  134. package/lib/Utils/lt-hash.d.ts +12 -8
  135. package/lib/Utils/lt-hash.js +46 -3
  136. package/lib/Utils/make-mutex.d.ts +2 -4
  137. package/lib/Utils/make-mutex.js +34 -24
  138. package/lib/Utils/messages-media.d.ts +44 -61
  139. package/lib/Utils/messages-media.js +482 -451
  140. package/lib/Utils/messages.d.ts +18 -32
  141. package/lib/Utils/messages.js +369 -458
  142. package/lib/Utils/noise-handler.d.ts +14 -13
  143. package/lib/Utils/noise-handler.js +99 -145
  144. package/lib/Utils/process-message.d.ts +12 -31
  145. package/lib/Utils/process-message.js +150 -459
  146. package/lib/Utils/signal.d.ts +5 -20
  147. package/lib/Utils/signal.js +72 -120
  148. package/lib/Utils/use-multi-file-auth-state.d.ts +2 -2
  149. package/lib/Utils/use-multi-file-auth-state.js +27 -29
  150. package/lib/Utils/validate-connection.d.ts +7 -7
  151. package/lib/Utils/validate-connection.js +99 -73
  152. package/lib/WABinary/constants.d.ts +27 -25
  153. package/lib/WABinary/constants.js +20 -1281
  154. package/lib/WABinary/decode.d.ts +5 -5
  155. package/lib/WABinary/decode.js +42 -52
  156. package/lib/WABinary/encode.d.ts +3 -3
  157. package/lib/WABinary/encode.js +155 -110
  158. package/lib/WABinary/generic-utils.d.ts +7 -8
  159. package/lib/WABinary/generic-utils.js +49 -48
  160. package/lib/WABinary/index.d.ts +5 -6
  161. package/lib/WABinary/index.js +21 -6
  162. package/lib/WABinary/jid-utils.d.ts +8 -25
  163. package/lib/WABinary/jid-utils.js +40 -74
  164. package/lib/WABinary/types.d.ts +1 -2
  165. package/lib/WABinary/types.js +2 -2
  166. package/lib/WAM/BinaryInfo.d.ts +11 -3
  167. package/lib/WAM/BinaryInfo.js +5 -2
  168. package/lib/WAM/constants.d.ts +3 -5
  169. package/lib/WAM/constants.js +11958 -19461
  170. package/lib/WAM/encode.d.ts +3 -3
  171. package/lib/WAM/encode.js +22 -17
  172. package/lib/WAM/index.d.ts +3 -4
  173. package/lib/WAM/index.js +19 -4
  174. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +3 -4
  175. package/lib/WAUSync/Protocols/USyncContactProtocol.js +13 -33
  176. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +2 -3
  177. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +14 -11
  178. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +2 -3
  179. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +12 -9
  180. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +2 -3
  181. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +13 -9
  182. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +3 -4
  183. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +22 -20
  184. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +3 -5
  185. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +8 -13
  186. package/lib/WAUSync/Protocols/index.d.ts +4 -6
  187. package/lib/WAUSync/Protocols/index.js +20 -6
  188. package/lib/WAUSync/USyncQuery.d.ts +4 -6
  189. package/lib/WAUSync/USyncQuery.js +35 -44
  190. package/lib/WAUSync/USyncUser.d.ts +5 -10
  191. package/lib/WAUSync/USyncUser.js +5 -10
  192. package/lib/WAUSync/index.js +19 -4
  193. package/lib/index.d.ts +9 -10
  194. package/lib/index.js +34 -12
  195. package/package.json +50 -83
  196. package/WAProto/GenerateStatics.sh +0 -3
  197. package/WAProto/WAProto.proto +0 -5479
  198. package/WAProto/fix-imports.js +0 -85
  199. package/WAProto/index.d.ts +0 -14017
  200. package/lib/Signal/lid-mapping.d.ts +0 -23
  201. package/lib/Signal/lid-mapping.js +0 -277
  202. package/lib/Socket/Client/types.js +0 -11
  203. package/lib/Socket/Client/websocket.js +0 -54
  204. package/lib/Socket/mex.d.ts +0 -3
  205. package/lib/Socket/mex.js +0 -42
  206. package/lib/Store/keyed-db.d.ts +0 -22
  207. package/lib/Store/keyed-db.js +0 -108
  208. package/lib/Types/Bussines.d.ts +0 -25
  209. package/lib/Types/Bussines.js +0 -2
  210. package/lib/Types/Mex.d.ts +0 -141
  211. package/lib/Types/Mex.js +0 -37
  212. package/lib/Utils/browser-utils.d.ts +0 -4
  213. package/lib/Utils/browser-utils.js +0 -28
  214. package/lib/Utils/companion-reg-client-utils.d.ts +0 -17
  215. package/lib/Utils/companion-reg-client-utils.js +0 -35
  216. package/lib/Utils/identity-change-handler.d.ts +0 -44
  217. package/lib/Utils/identity-change-handler.js +0 -50
  218. package/lib/Utils/message-retry-manager.d.ts +0 -115
  219. package/lib/Utils/message-retry-manager.js +0 -265
  220. package/lib/Utils/offline-node-processor.d.ts +0 -17
  221. package/lib/Utils/offline-node-processor.js +0 -40
  222. package/lib/Utils/pre-key-manager.d.ts +0 -28
  223. package/lib/Utils/pre-key-manager.js +0 -106
  224. package/lib/Utils/reporting-utils.d.ts +0 -11
  225. package/lib/Utils/reporting-utils.js +0 -258
  226. package/lib/Utils/stanza-ack.d.ts +0 -11
  227. package/lib/Utils/stanza-ack.js +0 -38
  228. package/lib/Utils/sync-action-utils.d.ts +0 -19
  229. package/lib/Utils/sync-action-utils.js +0 -49
  230. package/lib/Utils/tc-token-utils.d.ts +0 -37
  231. package/lib/Utils/tc-token-utils.js +0 -163
  232. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +0 -10
  233. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
  234. package/lib/WAUSync/index.d.ts +0 -4
@@ -1,87 +1,33 @@
1
- import { Boom } from '@hapi/boom';
2
- import { proto } from '../../WAProto/index.js';
3
- import { WAMessageStubType } from '../Types/index.js';
4
- import { getContentType, normalizeMessageContent } from '../Utils/messages.js';
5
- import { areJidsSameUser, isHostedLidUser, isHostedPnUser, isJidBroadcast, isJidStatusBroadcast, isLidUser, jidDecode, jidEncode, jidNormalizedUser } from '../WABinary/index.js';
6
- import { aesDecryptGCM, hmacSign } from './crypto.js';
7
- import { getKeyAuthor, toNumber } from './generics.js';
8
- import { downloadAndProcessHistorySyncNotification } from './history.js';
9
- import { buildMergedTcTokenIndexWrite, resolveTcTokenJid } from './tc-token-utils.js';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decryptPollVote = exports.getChatId = exports.shouldIncrementChatUnread = exports.isRealMessage = exports.cleanMessage = void 0;
4
+ const WAProto_1 = require("../../WAProto");
5
+ const Types_1 = require("../Types");
6
+ const messages_1 = require("../Utils/messages");
7
+ const WABinary_1 = require("../WABinary");
8
+ const crypto_1 = require("./crypto");
9
+ const generics_1 = require("./generics");
10
+ const history_1 = require("./history");
10
11
  const REAL_MSG_STUB_TYPES = new Set([
11
- WAMessageStubType.CALL_MISSED_GROUP_VIDEO,
12
- WAMessageStubType.CALL_MISSED_GROUP_VOICE,
13
- WAMessageStubType.CALL_MISSED_VIDEO,
14
- WAMessageStubType.CALL_MISSED_VOICE
12
+ Types_1.WAMessageStubType.CALL_MISSED_GROUP_VIDEO,
13
+ Types_1.WAMessageStubType.CALL_MISSED_GROUP_VOICE,
14
+ Types_1.WAMessageStubType.CALL_MISSED_VIDEO,
15
+ Types_1.WAMessageStubType.CALL_MISSED_VOICE
16
+ ]);
17
+ const REAL_MSG_REQ_ME_STUB_TYPES = new Set([
18
+ Types_1.WAMessageStubType.GROUP_PARTICIPANT_ADD
15
19
  ]);
16
- const REAL_MSG_REQ_ME_STUB_TYPES = new Set([WAMessageStubType.GROUP_PARTICIPANT_ADD]);
17
- async function storeTcTokensFromHistorySync(chats, signalRepository, keyStore, logger) {
18
- const getLIDForPN = signalRepository.lidMapping.getLIDForPN.bind(signalRepository.lidMapping);
19
- const candidates = [];
20
- for (const chat of chats) {
21
- const ts = chat.tcTokenTimestamp ? toNumber(chat.tcTokenTimestamp) : 0;
22
- if (chat.tcToken?.length && ts > 0) {
23
- const jid = jidNormalizedUser(chat.id);
24
- const storageJid = await resolveTcTokenJid(jid, getLIDForPN);
25
- candidates.push({
26
- storageJid,
27
- token: Buffer.from(chat.tcToken),
28
- ts,
29
- senderTs: chat.tcTokenSenderTimestamp ? toNumber(chat.tcTokenSenderTimestamp) : undefined
30
- });
31
- }
32
- }
33
- if (!candidates.length) {
34
- return;
35
- }
36
- const jids = candidates.map(c => c.storageJid);
37
- const existing = await keyStore.get('tctoken', jids);
38
- const entries = {};
39
- for (const c of candidates) {
40
- const existingEntry = existing[c.storageJid];
41
- const existingTs = existingEntry?.timestamp ? Number(existingEntry.timestamp) : 0;
42
- if (existingTs > 0 && existingTs >= c.ts) {
43
- continue;
44
- }
45
- entries[c.storageJid] = {
46
- ...existingEntry,
47
- token: c.token,
48
- timestamp: String(c.ts),
49
- ...(c.senderTs !== undefined ? { senderTimestamp: c.senderTs } : {})
50
- };
51
- }
52
- if (Object.keys(entries).length) {
53
- logger?.debug({ count: Object.keys(entries).length }, 'storing tctokens from history sync');
54
- try {
55
- // Include updated __index so cross-session pruning picks these JIDs up.
56
- const indexWrite = await buildMergedTcTokenIndexWrite(keyStore, Object.keys(entries));
57
- await keyStore.set({ tctoken: { ...entries, ...indexWrite } });
58
- }
59
- catch (err) {
60
- logger?.warn({ err }, 'failed to store tctokens from history sync');
61
- }
62
- }
63
- }
64
20
  /** Cleans a received message to further processing */
65
- export const cleanMessage = (message, meId, meLid) => {
21
+ const cleanMessage = (message, meId) => {
66
22
  // ensure remoteJid and participant doesn't have device or agent in it
67
- if (isHostedPnUser(message.key.remoteJid) || isHostedLidUser(message.key.remoteJid)) {
68
- message.key.remoteJid = jidEncode(jidDecode(message.key?.remoteJid)?.user, isHostedPnUser(message.key.remoteJid) ? 's.whatsapp.net' : 'lid');
69
- }
70
- else {
71
- message.key.remoteJid = jidNormalizedUser(message.key.remoteJid);
72
- }
73
- if (isHostedPnUser(message.key.participant) || isHostedLidUser(message.key.participant)) {
74
- message.key.participant = jidEncode(jidDecode(message.key.participant)?.user, isHostedPnUser(message.key.participant) ? 's.whatsapp.net' : 'lid');
75
- }
76
- else {
77
- message.key.participant = jidNormalizedUser(message.key.participant);
78
- }
79
- const content = normalizeMessageContent(message.message);
23
+ message.key.remoteJid = (0, WABinary_1.jidNormalizedUser)(message.key.remoteJid);
24
+ message.key.participant = message.key.participant ? (0, WABinary_1.jidNormalizedUser)(message.key.participant) : undefined;
25
+ const content = (0, messages_1.normalizeMessageContent)(message.message);
80
26
  // if the message has a reaction, ensure fromMe & remoteJid are from our perspective
81
- if (content?.reactionMessage) {
27
+ if (content === null || content === void 0 ? void 0 : content.reactionMessage) {
82
28
  normaliseKey(content.reactionMessage.key);
83
29
  }
84
- if (content?.pollUpdateMessage) {
30
+ if (content === null || content === void 0 ? void 0 : content.pollUpdateMessage) {
85
31
  normaliseKey(content.pollUpdateMessage.pollCreationMessageKey);
86
32
  }
87
33
  function normaliseKey(msgKey) {
@@ -91,59 +37,54 @@ export const cleanMessage = (message, meId, meLid) => {
91
37
  // if the sender believed the message being reacted to is not from them
92
38
  // we've to correct the key to be from them, or some other participant
93
39
  msgKey.fromMe = !msgKey.fromMe
94
- ? areJidsSameUser(msgKey.participant || msgKey.remoteJid, meId) ||
95
- areJidsSameUser(msgKey.participant || msgKey.remoteJid, meLid)
96
- : // if the message being reacted to, was from them
97
- // fromMe automatically becomes false
98
- false;
40
+ ? (0, WABinary_1.areJidsSameUser)(msgKey.participant || msgKey.remoteJid, meId)
41
+ // if the message being reacted to, was from them
42
+ // fromMe automatically becomes false
43
+ : false;
99
44
  // set the remoteJid to being the same as the chat the message came from
100
- // TODO: investigate inconsistencies
101
45
  msgKey.remoteJid = message.key.remoteJid;
102
46
  // set participant of the message
103
47
  msgKey.participant = msgKey.participant || message.key.participant;
104
48
  }
105
49
  }
106
50
  };
107
- // TODO: target:audit AUDIT THIS FUNCTION AGAIN
108
- export const isRealMessage = (message) => {
109
- const normalizedContent = normalizeMessageContent(message.message);
110
- const hasSomeContent = !!getContentType(normalizedContent);
111
- return ((!!normalizedContent ||
112
- REAL_MSG_STUB_TYPES.has(message.messageStubType) ||
113
- REAL_MSG_REQ_ME_STUB_TYPES.has(message.messageStubType)) &&
114
- hasSomeContent &&
115
- !normalizedContent?.protocolMessage &&
116
- !normalizedContent?.reactionMessage &&
117
- !normalizedContent?.pollUpdateMessage);
51
+ exports.cleanMessage = cleanMessage;
52
+ const isRealMessage = (message, meId) => {
53
+ var _a;
54
+ const normalizedContent = (0, messages_1.normalizeMessageContent)(message.message);
55
+ const hasSomeContent = !!(0, messages_1.getContentType)(normalizedContent);
56
+ return (!!normalizedContent
57
+ || REAL_MSG_STUB_TYPES.has(message.messageStubType)
58
+ || (REAL_MSG_REQ_ME_STUB_TYPES.has(message.messageStubType)
59
+ && ((_a = message.messageStubParameters) === null || _a === void 0 ? void 0 : _a.some(p => (0, WABinary_1.areJidsSameUser)(meId, p)))))
60
+ && hasSomeContent
61
+ && !(normalizedContent === null || normalizedContent === void 0 ? void 0 : normalizedContent.protocolMessage)
62
+ && !(normalizedContent === null || normalizedContent === void 0 ? void 0 : normalizedContent.reactionMessage)
63
+ && !(normalizedContent === null || normalizedContent === void 0 ? void 0 : normalizedContent.pollUpdateMessage);
118
64
  };
119
- export const shouldIncrementChatUnread = (message) => !message.key.fromMe && !message.messageStubType;
65
+ exports.isRealMessage = isRealMessage;
66
+ const shouldIncrementChatUnread = (message) => (!message.key.fromMe && !message.messageStubType);
67
+ exports.shouldIncrementChatUnread = shouldIncrementChatUnread;
120
68
  /**
121
69
  * Get the ID of the chat from the given key.
122
70
  * Typically -- that'll be the remoteJid, but for broadcasts, it'll be the participant
123
71
  */
124
- export const getChatId = ({ remoteJid, participant, fromMe }) => {
125
- if (!remoteJid) {
126
- throw new Boom('Cannot derive chat id: message key is missing remoteJid', {
127
- data: { remoteJid, participant, fromMe }
128
- });
129
- }
130
- if (isJidBroadcast(remoteJid) && !isJidStatusBroadcast(remoteJid) && !fromMe) {
131
- if (!participant) {
132
- throw new Boom('Cannot derive chat id: broadcast message key is missing participant', {
133
- data: { remoteJid, fromMe }
134
- });
135
- }
72
+ const getChatId = ({ remoteJid, participant, fromMe }) => {
73
+ if ((0, WABinary_1.isJidBroadcast)(remoteJid)
74
+ && !(0, WABinary_1.isJidStatusBroadcast)(remoteJid)
75
+ && !fromMe) {
136
76
  return participant;
137
77
  }
138
78
  return remoteJid;
139
79
  };
80
+ exports.getChatId = getChatId;
140
81
  /**
141
82
  * Decrypt a poll vote
142
83
  * @param vote encrypted vote
143
84
  * @param ctx additional info about the poll required for decryption
144
85
  * @returns list of SHA256 options
145
86
  */
146
- export function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pollEncKey, voterJid }) {
87
+ function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pollEncKey, voterJid, }) {
147
88
  const sign = Buffer.concat([
148
89
  toBinary(pollMsgId),
149
90
  toBinary(pollCreatorJid),
@@ -151,133 +92,64 @@ export function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsg
151
92
  toBinary('Poll Vote'),
152
93
  new Uint8Array([1])
153
94
  ]);
154
- const key0 = hmacSign(pollEncKey, new Uint8Array(32), 'sha256');
155
- const decKey = hmacSign(sign, key0, 'sha256');
95
+ const key0 = (0, crypto_1.hmacSign)(pollEncKey, new Uint8Array(32), 'sha256');
96
+ const decKey = (0, crypto_1.hmacSign)(sign, key0, 'sha256');
156
97
  const aad = toBinary(`${pollMsgId}\u0000${voterJid}`);
157
- const decrypted = aesDecryptGCM(encPayload, decKey, encIv, aad);
158
- return proto.Message.PollVoteMessage.decode(decrypted);
98
+ const decrypted = (0, crypto_1.aesDecryptGCM)(encPayload, decKey, encIv, aad);
99
+ return WAProto_1.proto.Message.PollVoteMessage.decode(decrypted);
159
100
  function toBinary(txt) {
160
101
  return Buffer.from(txt);
161
102
  }
162
103
  }
163
- /**
164
- * Decrypt an event response
165
- * @param response encrypted event response
166
- * @param ctx additional info about the event required for decryption
167
- * @returns event response message
168
- */
169
- export function decryptEventResponse({ encPayload, encIv }, { eventCreatorJid, eventMsgId, eventEncKey, responderJid }) {
170
- const sign = Buffer.concat([
171
- toBinary(eventMsgId),
172
- toBinary(eventCreatorJid),
173
- toBinary(responderJid),
174
- toBinary('Event Response'),
175
- new Uint8Array([1])
176
- ]);
177
- const key0 = hmacSign(eventEncKey, new Uint8Array(32), 'sha256');
178
- const decKey = hmacSign(sign, key0, 'sha256');
179
- const aad = toBinary(`${eventMsgId}\u0000${responderJid}`);
180
- const decrypted = aesDecryptGCM(encPayload, decKey, encIv, aad);
181
- return proto.Message.EventResponseMessage.decode(decrypted);
182
- function toBinary(txt) {
183
- return Buffer.from(txt);
184
- }
185
- }
186
- const processMessage = async (message, { shouldProcessHistoryMsg, placeholderResendCache, ev, creds, signalRepository, keyStore, logger, options, getMessage }) => {
104
+ exports.decryptPollVote = decryptPollVote;
105
+ const processMessage = async (message, { shouldProcessHistoryMsg, ev, creds, keyStore, logger, options, getMessage }) => {
106
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
187
107
  const meId = creds.me.id;
188
108
  const { accountSettings } = creds;
189
- const chat = { id: jidNormalizedUser(getChatId(message.key)) };
190
- const isRealMsg = isRealMessage(message);
109
+ const chat = { id: (0, WABinary_1.jidNormalizedUser)((0, exports.getChatId)(message.key)) };
110
+ const isRealMsg = (0, exports.isRealMessage)(message, meId);
191
111
  if (isRealMsg) {
192
- chat.messages = [{ message }];
193
- chat.conversationTimestamp = toNumber(message.messageTimestamp);
112
+ chat.conversationTimestamp = (0, generics_1.toNumber)(message.messageTimestamp);
194
113
  // only increment unread count if not CIPHERTEXT and from another person
195
- if (shouldIncrementChatUnread(message)) {
114
+ if ((0, exports.shouldIncrementChatUnread)(message)) {
196
115
  chat.unreadCount = (chat.unreadCount || 0) + 1;
197
116
  }
198
117
  }
199
- const content = normalizeMessageContent(message.message);
118
+ const content = (0, messages_1.normalizeMessageContent)(message.message);
200
119
  // unarchive chat if it's a real message, or someone reacted to our message
201
120
  // and we've the unarchive chats setting on
202
- if ((isRealMsg || content?.reactionMessage?.key?.fromMe) && accountSettings?.unarchiveChats) {
121
+ if ((isRealMsg || ((_b = (_a = content === null || content === void 0 ? void 0 : content.reactionMessage) === null || _a === void 0 ? void 0 : _a.key) === null || _b === void 0 ? void 0 : _b.fromMe))
122
+ && (accountSettings === null || accountSettings === void 0 ? void 0 : accountSettings.unarchiveChats)) {
203
123
  chat.archived = false;
204
124
  chat.readOnly = false;
205
125
  }
206
- const protocolMsg = content?.protocolMessage;
126
+ const protocolMsg = content === null || content === void 0 ? void 0 : content.protocolMessage;
207
127
  if (protocolMsg) {
208
- // Mirror whatsmeow's `handleProtocolMessage` guard, but applied only to
209
- // the protocol message types that originate from our own device — an
210
- // attacker could otherwise spoof any of these to manipulate local state.
211
- //
212
- // Self-only types (drop if `!fromMe`):
213
- // - HISTORY_SYNC_NOTIFICATION (our phone driving history sync)
214
- // - APP_STATE_SYNC_KEY_SHARE (key share between our devices)
215
- // - LID_MIGRATION_MAPPING_SYNC (server-initiated via our phone)
216
- // - PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE (response from our phone to our PDO request)
217
- //
218
- // Cross-user types (must NOT be dropped — legitimately arrive from others):
219
- // - REVOKE
220
- // - MESSAGE_EDIT
221
- // - EPHEMERAL_SETTING
222
- // - GROUP_MEMBER_LABEL_CHANGE
223
- //
224
- // See https://github.com/tulir/whatsmeow/blob/8d3700152a/message.go#L842-L845
225
- // for the reference architecture — whatsmeow's `handleProtocolMessage`
226
- // only contains self-only types because edits are unwrapped from
227
- // `EditedMessage` BEFORE this dispatch and revokes aren't routed here.
228
- const SELF_ONLY_TYPES = new Set([
229
- proto.Message.ProtocolMessage.Type.HISTORY_SYNC_NOTIFICATION,
230
- proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_SHARE,
231
- proto.Message.ProtocolMessage.Type.LID_MIGRATION_MAPPING_SYNC,
232
- proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE
233
- ]);
234
- if (protocolMsg.type !== null &&
235
- protocolMsg.type !== undefined &&
236
- SELF_ONLY_TYPES.has(protocolMsg.type) &&
237
- !message.key.fromMe) {
238
- logger?.warn({ msgId: message.key.id, type: protocolMsg.type, from: message.key.participant || message.key.remoteJid }, 'dropping spoofed self-only protocolMessage from non-self origin');
239
- return;
240
- }
241
128
  switch (protocolMsg.type) {
242
- case proto.Message.ProtocolMessage.Type.HISTORY_SYNC_NOTIFICATION:
129
+ case WAProto_1.proto.Message.ProtocolMessage.Type.HISTORY_SYNC_NOTIFICATION:
243
130
  const histNotification = protocolMsg.historySyncNotification;
244
131
  const process = shouldProcessHistoryMsg;
245
- const isLatest = !creds.processedHistoryMessages?.length;
246
- logger?.info({
132
+ const isLatest = !((_c = creds.processedHistoryMessages) === null || _c === void 0 ? void 0 : _c.length);
133
+ logger === null || logger === void 0 ? void 0 : logger.info({
247
134
  histNotification,
248
135
  process,
249
136
  id: message.key.id,
250
- isLatest
137
+ isLatest,
251
138
  }, 'got history notification');
252
139
  if (process) {
253
- // TODO: investigate
254
- if (histNotification.syncType !== proto.HistorySync.HistorySyncType.ON_DEMAND) {
255
- ev.emit('creds.update', {
256
- processedHistoryMessages: [
257
- ...(creds.processedHistoryMessages || []),
258
- { key: message.key, messageTimestamp: message.messageTimestamp }
259
- ]
260
- });
261
- }
262
- const data = await downloadAndProcessHistorySyncNotification(histNotification, options, logger);
263
- if (data.lidPnMappings?.length) {
264
- logger?.debug({ count: data.lidPnMappings.length }, 'processing LID-PN mappings from history sync');
265
- await signalRepository.lidMapping
266
- .storeLIDPNMappings(data.lidPnMappings)
267
- .catch(err => logger?.warn({ err }, 'failed to store LID-PN mappings from history sync'));
268
- }
269
- await storeTcTokensFromHistorySync(data.chats, signalRepository, keyStore, logger);
270
- ev.emit('messaging-history.set', {
271
- ...data,
272
- isLatest: histNotification.syncType !== proto.HistorySync.HistorySyncType.ON_DEMAND ? isLatest : undefined,
273
- chunkOrder: histNotification.chunkOrder,
274
- peerDataRequestSessionId: histNotification.peerDataRequestSessionId
140
+ ev.emit('creds.update', {
141
+ processedHistoryMessages: [
142
+ ...(creds.processedHistoryMessages || []),
143
+ { key: message.key, messageTimestamp: message.messageTimestamp }
144
+ ]
275
145
  });
146
+ const data = await (0, history_1.downloadAndProcessHistorySyncNotification)(histNotification, options);
147
+ ev.emit('messaging-history.set', { ...data, isLatest });
276
148
  }
277
149
  break;
278
- case proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_SHARE:
150
+ case WAProto_1.proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_SHARE:
279
151
  const keys = protocolMsg.appStateSyncKeyShare.keys;
280
- if (keys?.length) {
152
+ if (keys === null || keys === void 0 ? void 0 : keys.length) {
281
153
  let newAppStateSyncKeyId = '';
282
154
  await keyStore.transaction(async () => {
283
155
  const newKeys = [];
@@ -287,314 +159,138 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
287
159
  await keyStore.set({ 'app-state-sync-key': { [strKeyId]: keyData } });
288
160
  newAppStateSyncKeyId = strKeyId;
289
161
  }
290
- logger?.info({ newAppStateSyncKeyId, newKeys }, 'injecting new app state sync keys');
291
- }, meId);
162
+ logger === null || logger === void 0 ? void 0 : logger.info({ newAppStateSyncKeyId, newKeys }, 'injecting new app state sync keys');
163
+ });
292
164
  ev.emit('creds.update', { myAppStateKeyId: newAppStateSyncKeyId });
293
165
  }
294
166
  else {
295
- logger?.info({ protocolMsg }, 'recv app state sync with 0 keys');
167
+ logger === null || logger === void 0 ? void 0 : logger.info({ protocolMsg }, 'recv app state sync with 0 keys');
296
168
  }
297
169
  break;
298
- case proto.Message.ProtocolMessage.Type.REVOKE:
170
+ case WAProto_1.proto.Message.ProtocolMessage.Type.REVOKE:
299
171
  ev.emit('messages.update', [
300
172
  {
301
173
  key: {
302
174
  ...message.key,
303
175
  id: protocolMsg.key.id
304
176
  },
305
- update: { message: null, messageStubType: WAMessageStubType.REVOKE, key: message.key }
177
+ update: { message: null, messageStubType: Types_1.WAMessageStubType.REVOKE, key: message.key }
306
178
  }
307
179
  ]);
308
180
  break;
309
- case proto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING:
181
+ case WAProto_1.proto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING:
310
182
  Object.assign(chat, {
311
- ephemeralSettingTimestamp: toNumber(message.messageTimestamp),
183
+ ephemeralSettingTimestamp: (0, generics_1.toNumber)(message.messageTimestamp),
312
184
  ephemeralExpiration: protocolMsg.ephemeralExpiration || null
313
185
  });
314
186
  break;
315
- case proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE:
187
+ case WAProto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE:
316
188
  const response = protocolMsg.peerDataOperationRequestResponseMessage;
317
189
  if (response) {
318
- // TODO: IMPLEMENT HISTORY SYNC ETC (sticker uploads etc.).
319
- const peerDataOperationResult = response.peerDataOperationResult || [];
190
+ const { peerDataOperationResult } = response;
320
191
  for (const result of peerDataOperationResult) {
321
- const retryResponse = result?.placeholderMessageResendResponse;
322
- //eslint-disable-next-line max-depth
323
- if (!retryResponse?.webMessageInfoBytes) {
324
- continue;
325
- }
326
- //eslint-disable-next-line max-depth
327
- try {
328
- const webMessageInfo = proto.WebMessageInfo.decode(retryResponse.webMessageInfoBytes);
329
- const msgId = webMessageInfo.key?.id;
330
- // Retrieve cached original message data (preserves LID details,
331
- // timestamps, etc. that the phone may omit in its PDO response)
332
- const cachedData = msgId ? await placeholderResendCache?.get(msgId) : undefined;
333
- //eslint-disable-next-line max-depth
334
- if (msgId) {
335
- await placeholderResendCache?.del(msgId);
336
- }
337
- let finalMsg;
338
- //eslint-disable-next-line max-depth
339
- if (cachedData && typeof cachedData === 'object') {
340
- // Apply decoded message content onto cached metadata (preserves LID etc.)
341
- cachedData.message = webMessageInfo.message;
342
- //eslint-disable-next-line max-depth
343
- if (webMessageInfo.messageTimestamp) {
344
- cachedData.messageTimestamp = webMessageInfo.messageTimestamp;
345
- }
346
- finalMsg = cachedData;
347
- }
348
- else {
349
- finalMsg = webMessageInfo;
350
- }
351
- logger?.debug({ msgId, requestId: response.stanzaId }, 'received placeholder resend');
352
- ev.emit('messages.upsert', {
353
- messages: [finalMsg],
354
- type: 'notify',
355
- requestId: response.stanzaId
356
- });
357
- }
358
- catch (err) {
359
- logger?.warn({ err, stanzaId: response.stanzaId }, 'failed to decode placeholder resend response');
192
+ const { placeholderMessageResendResponse: retryResponse } = result;
193
+ if (retryResponse) {
194
+ const webMessageInfo = WAProto_1.proto.WebMessageInfo.decode(retryResponse.webMessageInfoBytes);
195
+ ev.emit('messages.update', [
196
+ { key: webMessageInfo.key, update: { message: webMessageInfo.message } }
197
+ ]);
360
198
  }
361
199
  }
362
200
  }
363
201
  break;
364
- case proto.Message.ProtocolMessage.Type.MESSAGE_EDIT:
365
- ev.emit('messages.update', [
366
- {
367
- // flip the sender / fromMe properties because they're in the perspective of the sender
368
- key: { ...message.key, id: protocolMsg.key?.id },
369
- update: {
370
- message: {
371
- editedMessage: {
372
- message: protocolMsg.editedMessage
373
- }
374
- },
375
- messageTimestamp: protocolMsg.timestampMs
376
- ? Math.floor(toNumber(protocolMsg.timestampMs) / 1000)
377
- : message.messageTimestamp
378
- }
379
- }
380
- ]);
381
- break;
382
- case proto.Message.ProtocolMessage.Type.GROUP_MEMBER_LABEL_CHANGE:
383
- const labelAssociationMsg = protocolMsg.memberLabel;
384
- if (labelAssociationMsg?.label) {
385
- ev.emit('group.member-tag.update', {
386
- groupId: chat.id,
387
- label: labelAssociationMsg.label,
388
- participant: message.key.participant,
389
- participantAlt: message.key.participantAlt,
390
- messageTimestamp: Number(message.messageTimestamp)
391
- });
392
- }
393
- break;
394
- case proto.Message.ProtocolMessage.Type.LID_MIGRATION_MAPPING_SYNC:
395
- const encodedPayload = protocolMsg.lidMigrationMappingSyncMessage?.encodedMappingPayload;
396
- const { pnToLidMappings, chatDbMigrationTimestamp } = proto.LIDMigrationMappingSyncPayload.decode(encodedPayload);
397
- logger?.debug({ pnToLidMappings, chatDbMigrationTimestamp }, 'got lid mappings and chat db migration timestamp');
398
- const pairs = [];
399
- for (const { pn, latestLid, assignedLid } of pnToLidMappings) {
400
- const lid = latestLid || assignedLid;
401
- pairs.push({ lid: `${lid}@lid`, pn: `${pn}@s.whatsapp.net` });
402
- }
403
- await signalRepository.lidMapping.storeLIDPNMappings(pairs);
404
- if (pairs.length) {
405
- for (const { pn, lid } of pairs) {
406
- await signalRepository.migrateSession(pn, lid);
407
- }
408
- }
409
202
  }
410
203
  }
411
- else if (content?.reactionMessage) {
204
+ else if (content === null || content === void 0 ? void 0 : content.reactionMessage) {
412
205
  const reaction = {
413
206
  ...content.reactionMessage,
414
- key: message.key
207
+ key: message.key,
415
208
  };
416
- ev.emit('messages.reaction', [
417
- {
209
+ ev.emit('messages.reaction', [{
418
210
  reaction,
419
- key: content.reactionMessage?.key
420
- }
421
- ]);
422
- }
423
- else if (content?.encEventResponseMessage) {
424
- const encEventResponse = content.encEventResponseMessage;
425
- const creationMsgKey = encEventResponse.eventCreationMessageKey;
426
- // we need to fetch the event creation message to get the event enc key
427
- const eventMsg = await getMessage(creationMsgKey);
428
- if (eventMsg) {
429
- try {
430
- const meIdNormalised = jidNormalizedUser(meId);
431
- // all jids need to be PN
432
- const eventCreatorKey = creationMsgKey.participant || creationMsgKey.remoteJid;
433
- const eventCreatorPn = isLidUser(eventCreatorKey)
434
- ? await signalRepository.lidMapping.getPNForLID(eventCreatorKey)
435
- : eventCreatorKey;
436
- const eventCreatorJid = getKeyAuthor({ remoteJid: jidNormalizedUser(eventCreatorPn), fromMe: meIdNormalised === eventCreatorPn }, meIdNormalised);
437
- const responderJid = getKeyAuthor(message.key, meIdNormalised);
438
- const eventEncKey = eventMsg?.messageContextInfo?.messageSecret;
439
- if (!eventEncKey) {
440
- logger?.warn({ creationMsgKey }, 'event response: missing messageSecret for decryption');
441
- }
442
- else {
443
- const responseMsg = decryptEventResponse(encEventResponse, {
444
- eventEncKey,
445
- eventCreatorJid,
446
- eventMsgId: creationMsgKey.id,
447
- responderJid
448
- });
449
- const eventResponse = {
450
- eventResponseMessageKey: message.key,
451
- senderTimestampMs: responseMsg.timestampMs,
452
- response: responseMsg
453
- };
454
- ev.emit('messages.update', [
455
- {
456
- key: creationMsgKey,
457
- update: {
458
- eventResponses: [eventResponse]
459
- }
460
- }
461
- ]);
462
- }
463
- }
464
- catch (err) {
465
- logger?.warn({ err, creationMsgKey }, 'failed to decrypt event response');
466
- }
467
- }
468
- else {
469
- logger?.warn({ creationMsgKey }, 'event creation message not found, cannot decrypt response');
470
- }
211
+ key: content.reactionMessage.key,
212
+ }]);
471
213
  }
472
214
  else if (message.messageStubType) {
473
- const jid = message.key?.remoteJid;
215
+ const jid = message.key.remoteJid;
474
216
  //let actor = whatsappID (message.participant)
475
217
  let participants;
476
- const emitParticipantsUpdate = (action) => ev.emit('group-participants.update', {
477
- id: jid,
478
- author: message.key.participant,
479
- authorPn: message.key.participantAlt,
480
- authorUsername: message.key.participantUsername,
481
- participants,
482
- action
483
- });
218
+ const emitParticipantsUpdate = (action) => (ev.emit('group-participants.update', { id: jid, author: message.participant, participants, action }));
484
219
  const emitGroupUpdate = (update) => {
485
- ev.emit('groups.update', [
486
- {
487
- id: jid,
488
- ...update,
489
- author: message.key.participant ?? undefined,
490
- authorPn: message.key.participantAlt,
491
- authorUsername: message.key.participantUsername
492
- }
493
- ]);
220
+ var _a;
221
+ ev.emit('groups.update', [{ id: jid, ...update, author: (_a = message.participant) !== null && _a !== void 0 ? _a : undefined }]);
494
222
  };
495
- const emitGroupRequestJoin = (participant, action, method) => {
496
- ev.emit('group.join-request', {
497
- id: jid,
498
- author: message.key.participant,
499
- authorPn: message.key.participantAlt,
500
- authorUsername: message.key.participantUsername,
501
- participant: participant.lid,
502
- participantPn: participant.pn,
503
- action,
504
- method: method
505
- });
506
- };
507
- const participantsIncludesMe = () => participants.find(jid => areJidsSameUser(meId, jid.phoneNumber)); // ADD SUPPORT FOR LID
223
+ const participantsIncludesMe = () => participants.find(jid => (0, WABinary_1.areJidsSameUser)(meId, jid));
508
224
  switch (message.messageStubType) {
509
- case WAMessageStubType.GROUP_PARTICIPANT_CHANGE_NUMBER:
510
- participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
511
- emitParticipantsUpdate('modify');
512
- break;
513
- case WAMessageStubType.GROUP_PARTICIPANT_LEAVE:
514
- case WAMessageStubType.GROUP_PARTICIPANT_REMOVE:
515
- participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
225
+ case Types_1.WAMessageStubType.GROUP_PARTICIPANT_LEAVE:
226
+ case Types_1.WAMessageStubType.GROUP_PARTICIPANT_REMOVE:
227
+ participants = message.messageStubParameters || [];
516
228
  emitParticipantsUpdate('remove');
517
229
  // mark the chat read only if you left the group
518
230
  if (participantsIncludesMe()) {
519
231
  chat.readOnly = true;
520
232
  }
521
233
  break;
522
- case WAMessageStubType.GROUP_PARTICIPANT_ADD:
523
- case WAMessageStubType.GROUP_PARTICIPANT_INVITE:
524
- case WAMessageStubType.GROUP_PARTICIPANT_ADD_REQUEST_JOIN:
525
- participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
234
+ case Types_1.WAMessageStubType.GROUP_PARTICIPANT_ADD:
235
+ case Types_1.WAMessageStubType.GROUP_PARTICIPANT_INVITE:
236
+ case Types_1.WAMessageStubType.GROUP_PARTICIPANT_ADD_REQUEST_JOIN:
237
+ participants = message.messageStubParameters || [];
526
238
  if (participantsIncludesMe()) {
527
239
  chat.readOnly = false;
528
240
  }
529
241
  emitParticipantsUpdate('add');
530
242
  break;
531
- case WAMessageStubType.GROUP_PARTICIPANT_DEMOTE:
532
- participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
243
+ case Types_1.WAMessageStubType.GROUP_PARTICIPANT_DEMOTE:
244
+ participants = message.messageStubParameters || [];
533
245
  emitParticipantsUpdate('demote');
534
246
  break;
535
- case WAMessageStubType.GROUP_PARTICIPANT_PROMOTE:
536
- participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
247
+ case Types_1.WAMessageStubType.GROUP_PARTICIPANT_PROMOTE:
248
+ participants = message.messageStubParameters || [];
537
249
  emitParticipantsUpdate('promote');
538
250
  break;
539
- case WAMessageStubType.GROUP_CHANGE_ANNOUNCE:
540
- const announceValue = message.messageStubParameters?.[0];
251
+ case Types_1.WAMessageStubType.GROUP_CHANGE_ANNOUNCE:
252
+ const announceValue = (_d = message.messageStubParameters) === null || _d === void 0 ? void 0 : _d[0];
541
253
  emitGroupUpdate({ announce: announceValue === 'true' || announceValue === 'on' });
542
254
  break;
543
- case WAMessageStubType.GROUP_CHANGE_RESTRICT:
544
- const restrictValue = message.messageStubParameters?.[0];
255
+ case Types_1.WAMessageStubType.GROUP_CHANGE_RESTRICT:
256
+ const restrictValue = (_e = message.messageStubParameters) === null || _e === void 0 ? void 0 : _e[0];
545
257
  emitGroupUpdate({ restrict: restrictValue === 'true' || restrictValue === 'on' });
546
258
  break;
547
- case WAMessageStubType.GROUP_CHANGE_SUBJECT:
548
- const name = message.messageStubParameters?.[0];
259
+ case Types_1.WAMessageStubType.GROUP_CHANGE_SUBJECT:
260
+ const name = (_f = message.messageStubParameters) === null || _f === void 0 ? void 0 : _f[0];
549
261
  chat.name = name;
550
262
  emitGroupUpdate({ subject: name });
551
263
  break;
552
- case WAMessageStubType.GROUP_CHANGE_DESCRIPTION:
553
- const description = message.messageStubParameters?.[0];
554
- chat.description = description;
555
- emitGroupUpdate({ desc: description });
556
- break;
557
- case WAMessageStubType.GROUP_CHANGE_INVITE_LINK:
558
- const code = message.messageStubParameters?.[0];
264
+ case Types_1.WAMessageStubType.GROUP_CHANGE_INVITE_LINK:
265
+ const code = (_g = message.messageStubParameters) === null || _g === void 0 ? void 0 : _g[0];
559
266
  emitGroupUpdate({ inviteCode: code });
560
267
  break;
561
- case WAMessageStubType.GROUP_MEMBER_ADD_MODE:
562
- const memberAddValue = message.messageStubParameters?.[0];
268
+ case Types_1.WAMessageStubType.GROUP_MEMBER_ADD_MODE:
269
+ const memberAddValue = (_h = message.messageStubParameters) === null || _h === void 0 ? void 0 : _h[0];
563
270
  emitGroupUpdate({ memberAddMode: memberAddValue === 'all_member_add' });
564
271
  break;
565
- case WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE:
566
- const approvalMode = message.messageStubParameters?.[0];
272
+ case Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE:
273
+ const approvalMode = (_j = message.messageStubParameters) === null || _j === void 0 ? void 0 : _j[0];
567
274
  emitGroupUpdate({ joinApprovalMode: approvalMode === 'on' });
568
275
  break;
569
- case WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD: // TODO: Add other events
570
- const participant = JSON.parse(message.messageStubParameters?.[0]);
571
- const action = message.messageStubParameters?.[1];
572
- const method = message.messageStubParameters?.[2];
573
- emitGroupRequestJoin(participant, action, method);
574
- break;
575
276
  }
576
- } /* else if(content?.pollUpdateMessage) {
577
- const creationMsgKey = content.pollUpdateMessage.pollCreationMessageKey!
277
+ }
278
+ else if (content === null || content === void 0 ? void 0 : content.pollUpdateMessage) {
279
+ const creationMsgKey = content.pollUpdateMessage.pollCreationMessageKey;
578
280
  // we need to fetch the poll creation message to get the poll enc key
579
- // TODO: make standalone, remove getMessage reference
580
- // TODO: Remove entirely
581
- const pollMsg = await getMessage(creationMsgKey)
582
- if(pollMsg) {
583
- const meIdNormalised = jidNormalizedUser(meId)
584
- const pollCreatorJid = getKeyAuthor(creationMsgKey, meIdNormalised)
585
- const voterJid = getKeyAuthor(message.key, meIdNormalised)
586
- const pollEncKey = pollMsg.messageContextInfo?.messageSecret!
587
-
281
+ const pollMsg = await getMessage(creationMsgKey);
282
+ if (pollMsg) {
283
+ const meIdNormalised = (0, WABinary_1.jidNormalizedUser)(meId);
284
+ const pollCreatorJid = (0, generics_1.getKeyAuthor)(creationMsgKey, meIdNormalised);
285
+ const voterJid = (0, generics_1.getKeyAuthor)(message.key, meIdNormalised);
286
+ const pollEncKey = (_k = pollMsg.messageContextInfo) === null || _k === void 0 ? void 0 : _k.messageSecret;
588
287
  try {
589
- const voteMsg = decryptPollVote(
590
- content.pollUpdateMessage.vote!,
591
- {
592
- pollEncKey,
593
- pollCreatorJid,
594
- pollMsgId: creationMsgKey.id!,
595
- voterJid,
596
- }
597
- )
288
+ const voteMsg = decryptPollVote(content.pollUpdateMessage.vote, {
289
+ pollEncKey,
290
+ pollCreatorJid,
291
+ pollMsgId: creationMsgKey.id,
292
+ voterJid,
293
+ });
598
294
  ev.emit('messages.update', [
599
295
  {
600
296
  key: creationMsgKey,
@@ -603,28 +299,23 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
603
299
  {
604
300
  pollUpdateMessageKey: message.key,
605
301
  vote: voteMsg,
606
- senderTimestampMs: (content.pollUpdateMessage.senderTimestampMs! as Long).toNumber(),
302
+ senderTimestampMs: content.pollUpdateMessage.senderTimestampMs.toNumber(),
607
303
  }
608
304
  ]
609
305
  }
610
306
  }
611
- ])
612
- } catch(err) {
613
- logger?.warn(
614
- { err, creationMsgKey },
615
- 'failed to decrypt poll vote'
616
- )
307
+ ]);
617
308
  }
618
- } else {
619
- logger?.warn(
620
- { creationMsgKey },
621
- 'poll creation message not found, cannot decrypt update'
622
- )
309
+ catch (err) {
310
+ logger === null || logger === void 0 ? void 0 : logger.warn({ err, creationMsgKey }, 'failed to decrypt poll vote');
311
+ }
312
+ }
313
+ else {
314
+ logger === null || logger === void 0 ? void 0 : logger.warn({ creationMsgKey }, 'poll creation message not found, cannot decrypt update');
623
315
  }
624
- } */
316
+ }
625
317
  if (Object.keys(chat).length > 1) {
626
318
  ev.emit('chats.update', [chat]);
627
319
  }
628
320
  };
629
- export default processMessage;
630
- //# sourceMappingURL=process-message.js.map
321
+ exports.default = processMessage;