@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,203 +1,101 @@
1
- import { Boom } from '@hapi/boom';
2
- import { proto } from '../../WAProto/index.js';
3
- import { areJidsSameUser, isHostedLidUser, isHostedPnUser, isJidBroadcast, isJidGroup, isJidMetaAI, isJidNewsletter, isJidStatusBroadcast, isLidUser, isPnUser
4
- // transferDevice
5
- } from '../WABinary/index.js';
6
- import { unpadRandomMax16 } from './generics.js';
7
- export const getDecryptionJid = async (sender, repository) => {
8
- if (isLidUser(sender) || isHostedLidUser(sender)) {
9
- return sender;
10
- }
11
- const mapped = await repository.lidMapping.getLIDForPN(sender);
12
- return mapped || sender;
13
- };
14
- const storeMappingFromEnvelope = async (stanza, sender, repository, decryptionJid, logger) => {
15
- // TODO: Handle hosted IDs
16
- const { senderAlt } = extractAddressingContext(stanza);
17
- if (senderAlt && isLidUser(senderAlt) && isPnUser(sender) && decryptionJid === sender) {
18
- try {
19
- await repository.lidMapping.storeLIDPNMappings([{ lid: senderAlt, pn: sender }]);
20
- await repository.migrateSession(sender, senderAlt);
21
- logger.debug({ sender, senderAlt }, 'Stored LID mapping from envelope');
22
- }
23
- catch (error) {
24
- logger.warn({ sender, senderAlt, error }, 'Failed to store LID mapping');
25
- }
26
- }
27
- };
28
- export const NO_MESSAGE_FOUND_ERROR_TEXT = 'Message absent from node';
29
- export const MISSING_KEYS_ERROR_TEXT = 'Key used already or never filled';
30
- export const ACCOUNT_RESTRICTED_TEXT = 'Your account has been restricted';
31
- // Retry configuration for failed decryption
32
- export const DECRYPTION_RETRY_CONFIG = {
33
- maxRetries: 3,
34
- baseDelayMs: 100,
35
- sessionRecordErrors: ['No session record', 'SessionError: No session record']
36
- };
37
- /** NACK reason codes we send to the server (client → server) */
38
- export const NACK_REASONS = {
39
- SenderReachoutTimelocked: 463,
40
- ParsingError: 487,
41
- UnrecognizedStanza: 488,
42
- UnrecognizedStanzaClass: 489,
43
- UnrecognizedStanzaType: 490,
44
- InvalidProtobuf: 491,
45
- InvalidHostedCompanionStanza: 493,
46
- MissingMessageSecret: 495,
47
- SignalErrorOldCounter: 496,
48
- MessageDeletedOnPeer: 499,
49
- UnhandledError: 500,
50
- UnsupportedAdminRevoke: 550,
51
- UnsupportedLIDGroup: 551,
52
- DBOperationFailed: 552
53
- };
54
- /**
55
- * Server-side error codes returned in ack stanzas (server → client) that we
56
- * currently have dedicated handlers for. Extend as more handlers are added.
57
- * Distinct from the client-side NackReason enum (WAWebCreateNackFromStanza).
58
- */
59
- export const SERVER_ERROR_CODES = {
60
- /**
61
- * 1:1 message missing privacy token (tctoken). Usually means the account is
62
- * restricted: WhatsApp blocks starting new chats but preserves existing ones,
63
- * since established chats already carry a tctoken.
64
- */
65
- MessageAccountRestriction: '463',
66
- /** Stanza validation failure (SMAX_INVALID) — likely stale device session */
67
- SmaxInvalid: '479'
68
- };
69
- export const extractAddressingContext = (stanza) => {
70
- let senderAlt;
71
- let recipientAlt;
72
- const sender = stanza.attrs.participant || stanza.attrs.from;
73
- const addressingMode = stanza.attrs.addressing_mode || (sender?.endsWith('lid') ? 'lid' : 'pn');
74
- if (addressingMode === 'lid') {
75
- // Message is LID-addressed: sender is LID, extract corresponding PN
76
- // without device data
77
- senderAlt = stanza.attrs.participant_pn || stanza.attrs.sender_pn || stanza.attrs.peer_recipient_pn;
78
- recipientAlt = stanza.attrs.recipient_pn;
79
- // with device data
80
- //if (sender && senderAlt) senderAlt = transferDevice(sender, senderAlt)
81
- }
82
- else {
83
- // Message is PN-addressed: sender is PN, extract corresponding LID
84
- // without device data
85
- senderAlt = stanza.attrs.participant_lid || stanza.attrs.sender_lid || stanza.attrs.peer_recipient_lid;
86
- recipientAlt = stanza.attrs.recipient_lid;
87
- //with device data
88
- //if (sender && senderAlt) senderAlt = transferDevice(sender, senderAlt)
89
- }
90
- return {
91
- addressingMode,
92
- senderAlt,
93
- recipientAlt
94
- };
95
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decryptMessageNode = exports.decodeMessageNode = void 0;
4
+ const boom_1 = require("@hapi/boom");
5
+ const WAProto_1 = require("../../WAProto");
6
+ const WABinary_1 = require("../WABinary");
7
+ const generics_1 = require("./generics");
8
+ const NO_MESSAGE_FOUND_ERROR_TEXT = 'Message absent from node';
96
9
  /**
97
10
  * Decode the received node as a message.
98
11
  * @note this will only parse the message, not decrypt it
99
12
  */
100
- export function decodeMessageNode(stanza, meId, meLid) {
13
+ function decodeMessageNode(stanza, meId, meLid) {
14
+ var _a, _b;
101
15
  let msgType;
102
16
  let chatId;
103
17
  let author;
104
- let fromMe = false;
105
18
  const msgId = stanza.attrs.id;
106
19
  const from = stanza.attrs.from;
107
20
  const participant = stanza.attrs.participant;
108
21
  const recipient = stanza.attrs.recipient;
109
- if (!msgId) {
110
- throw new Boom('Invalid message stanza: missing id attribute', { data: stanza });
111
- }
112
- if (!from) {
113
- throw new Boom('Invalid message stanza: missing from attribute', { data: stanza });
114
- }
115
- const addressingContext = extractAddressingContext(stanza);
116
- const isMe = (jid) => areJidsSameUser(jid, meId);
117
- const isMeLid = (jid) => areJidsSameUser(jid, meLid);
118
- if (isPnUser(from) || isLidUser(from) || isHostedLidUser(from) || isHostedPnUser(from)) {
119
- if (recipient && !isJidMetaAI(recipient)) {
120
- if (!isMe(from) && !isMeLid(from)) {
121
- throw new Boom('receipient present, but msg not from me', { data: stanza });
122
- }
123
- if (isMe(from) || isMeLid(from)) {
124
- fromMe = true;
22
+ const isMe = (jid) => (0, WABinary_1.areJidsSameUser)(jid, meId);
23
+ const isMeLid = (jid) => (0, WABinary_1.areJidsSameUser)(jid, meLid);
24
+ if ((0, WABinary_1.isJidUser)(from)) {
25
+ if (recipient) {
26
+ if (!isMe(from)) {
27
+ throw new boom_1.Boom('receipient present, but msg not from me', { data: stanza });
125
28
  }
126
29
  chatId = recipient;
127
30
  }
128
31
  else {
129
- // Peer-routed self stanzas (history sync, app-state sync, etc.) arrive
130
- // with `from` set to our own device but no `recipient` attribute —
131
- // still mark as fromMe so self-only protocolMessage handlers run.
132
- if (isMe(from) || isMeLid(from)) {
133
- fromMe = true;
32
+ chatId = from;
33
+ }
34
+ msgType = 'chat';
35
+ author = from;
36
+ }
37
+ else if ((0, WABinary_1.isLidUser)(from)) {
38
+ if (recipient) {
39
+ if (!isMeLid(from)) {
40
+ throw new boom_1.Boom('receipient present, but msg not from me', { data: stanza });
134
41
  }
42
+ chatId = recipient;
43
+ }
44
+ else {
135
45
  chatId = from;
136
46
  }
137
47
  msgType = 'chat';
138
48
  author = from;
139
49
  }
140
- else if (isJidGroup(from)) {
50
+ else if ((0, WABinary_1.isJidGroup)(from)) {
141
51
  if (!participant) {
142
- throw new Boom('No participant in group message');
143
- }
144
- if (isMe(participant) || isMeLid(participant)) {
145
- fromMe = true;
52
+ throw new boom_1.Boom('No participant in group message');
146
53
  }
147
54
  msgType = 'group';
148
55
  author = participant;
149
56
  chatId = from;
150
57
  }
151
- else if (isJidBroadcast(from)) {
58
+ else if ((0, WABinary_1.isJidBroadcast)(from)) {
152
59
  if (!participant) {
153
- throw new Boom('No participant in group message');
60
+ throw new boom_1.Boom('No participant in group message');
154
61
  }
155
62
  const isParticipantMe = isMe(participant);
156
- if (isJidStatusBroadcast(from)) {
63
+ if ((0, WABinary_1.isJidStatusBroadcast)(from)) {
157
64
  msgType = isParticipantMe ? 'direct_peer_status' : 'other_status';
158
65
  }
159
66
  else {
160
67
  msgType = isParticipantMe ? 'peer_broadcast' : 'other_broadcast';
161
68
  }
162
- fromMe = isParticipantMe;
163
69
  chatId = from;
164
70
  author = participant;
165
71
  }
166
- else if (isJidNewsletter(from)) {
72
+ else if ((0, WABinary_1.isJidNewsLetter)(from)) {
167
73
  msgType = 'newsletter';
168
- chatId = from;
169
74
  author = from;
170
- if (isMe(from) || isMeLid(from)) {
171
- fromMe = true;
172
- }
75
+ chatId = from;
173
76
  }
174
77
  else {
175
- throw new Boom('Unknown message type', { data: stanza });
78
+ throw new boom_1.Boom('Unknown message type', { data: stanza });
176
79
  }
177
- const pushname = stanza?.attrs?.notify;
80
+ const fromMe = (0, WABinary_1.isJidNewsLetter)(from) ? !!((_a = stanza.attrs) === null || _a === void 0 ? void 0 : _a.is_sender) : ((0, WABinary_1.isLidUser)(from) ? isMeLid : isMe)(stanza.attrs.participant || stanza.attrs.from);
81
+ const pushname = stanza.attrs.notify;
178
82
  const key = {
179
83
  remoteJid: chatId,
180
- remoteJidAlt: !isJidGroup(chatId) ? addressingContext.senderAlt : undefined,
181
- remoteJidUsername: !isJidGroup(chatId)
182
- ? stanza.attrs.peer_recipient_username || stanza.attrs.recipient_username
183
- : undefined,
184
84
  fromMe,
185
85
  id: msgId,
186
- participant,
187
- participantAlt: isJidGroup(chatId) ? addressingContext.senderAlt : undefined,
188
- participantUsername: stanza.attrs.participant ? stanza.attrs.participant_username : undefined,
189
- addressingMode: addressingContext.addressingMode,
190
- ...(msgType === 'newsletter' && stanza.attrs.server_id ? { server_id: stanza.attrs.server_id } : {})
86
+ participant
191
87
  };
192
88
  const fullMessage = {
193
89
  key,
194
- category: stanza.attrs.category,
195
90
  messageTimestamp: +stanza.attrs.t,
196
91
  pushName: pushname,
197
- broadcast: isJidBroadcast(from)
92
+ broadcast: (0, WABinary_1.isJidBroadcast)(from)
198
93
  };
94
+ if (msgType === 'newsletter') {
95
+ fullMessage.newsletterServerId = +((_b = stanza.attrs) === null || _b === void 0 ? void 0 : _b.server_id);
96
+ }
199
97
  if (key.fromMe) {
200
- fullMessage.status = proto.WebMessageInfo.Status.SERVER_ACK;
98
+ fullMessage.status = WAProto_1.proto.WebMessageInfo.Status.SERVER_ACK;
201
99
  }
202
100
  return {
203
101
  fullMessage,
@@ -205,28 +103,44 @@ export function decodeMessageNode(stanza, meId, meLid) {
205
103
  sender: msgType === 'chat' ? author : chatId
206
104
  };
207
105
  }
208
- export const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
106
+ exports.decodeMessageNode = decodeMessageNode;
107
+ const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
209
108
  const { fullMessage, author, sender } = decodeMessageNode(stanza, meId, meLid);
210
109
  return {
211
110
  fullMessage,
212
111
  category: stanza.attrs.category,
213
112
  author,
214
113
  async decrypt() {
114
+ var _a;
215
115
  let decryptables = 0;
216
- if (Array.isArray(stanza.content)) {
116
+ async function processSenderKeyDistribution(msg) {
117
+ if (msg.senderKeyDistributionMessage) {
118
+ try {
119
+ await repository.processSenderKeyDistributionMessage({
120
+ authorJid: author,
121
+ item: msg.senderKeyDistributionMessage
122
+ });
123
+ }
124
+ catch (err) {
125
+ logger.error({ key: fullMessage.key, err }, 'failed to process senderKeyDistribution');
126
+ }
127
+ }
128
+ }
129
+ if ((0, WABinary_1.isJidNewsLetter)(fullMessage.key.remoteJid)) {
130
+ const node = (0, WABinary_1.getBinaryNodeChild)(stanza, 'plaintext');
131
+ const msg = WAProto_1.proto.Message.decode(node === null || node === void 0 ? void 0 : node.content);
132
+ await processSenderKeyDistribution(msg);
133
+ fullMessage.message = msg;
134
+ decryptables += 1;
135
+ }
136
+ else if (Array.isArray(stanza.content)) {
217
137
  for (const { tag, attrs, content } of stanza.content) {
218
138
  if (tag === 'verified_name' && content instanceof Uint8Array) {
219
- const cert = proto.VerifiedNameCertificate.decode(content);
220
- const details = proto.VerifiedNameCertificate.Details.decode(cert.details);
139
+ const cert = WAProto_1.proto.VerifiedNameCertificate.decode(content);
140
+ const details = WAProto_1.proto.VerifiedNameCertificate.Details.decode(cert.details);
221
141
  fullMessage.verifiedBizName = details.verifiedName;
222
142
  }
223
- if (tag === 'unavailable' && attrs.type === 'view_once') {
224
- fullMessage.key.isViewOnce = true; // TODO: remove from here and add a STUB TYPE
225
- }
226
- if (attrs.count && tag === 'enc') {
227
- fullMessage.retryCount = Number(attrs.count);
228
- }
229
- if (tag !== 'enc' && tag !== 'plaintext') {
143
+ if (tag !== 'enc') {
230
144
  continue;
231
145
  }
232
146
  if (!(content instanceof Uint8Array)) {
@@ -234,13 +148,8 @@ export const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
234
148
  }
235
149
  decryptables += 1;
236
150
  let msgBuffer;
237
- const decryptionJid = await getDecryptionJid(author, repository);
238
- if (tag !== 'plaintext') {
239
- // TODO: Handle hosted devices
240
- await storeMappingFromEnvelope(stanza, author, repository, decryptionJid, logger);
241
- }
242
151
  try {
243
- const e2eType = tag === 'plaintext' ? 'plaintext' : attrs.type;
152
+ const e2eType = attrs.type;
244
153
  switch (e2eType) {
245
154
  case 'skmsg':
246
155
  msgBuffer = await repository.decryptGroupMessage({
@@ -251,32 +160,19 @@ export const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
251
160
  break;
252
161
  case 'pkmsg':
253
162
  case 'msg':
163
+ const user = (0, WABinary_1.isJidUser)(sender) ? sender : author;
254
164
  msgBuffer = await repository.decryptMessage({
255
- jid: decryptionJid,
165
+ jid: user,
256
166
  type: e2eType,
257
167
  ciphertext: content
258
168
  });
259
169
  break;
260
- case 'plaintext':
261
- msgBuffer = content;
262
- break;
263
170
  default:
264
171
  throw new Error(`Unknown e2e type: ${e2eType}`);
265
172
  }
266
- let msg = proto.Message.decode(e2eType !== 'plaintext' ? unpadRandomMax16(msgBuffer) : msgBuffer);
267
- msg = msg.deviceSentMessage?.message || msg;
268
- if (msg.senderKeyDistributionMessage) {
269
- //eslint-disable-next-line max-depth
270
- try {
271
- await repository.processSenderKeyDistributionMessage({
272
- authorJid: author,
273
- item: msg.senderKeyDistributionMessage
274
- });
275
- }
276
- catch (err) {
277
- logger.error({ key: fullMessage.key, err }, 'failed to process sender key distribution message');
278
- }
279
- }
173
+ let msg = WAProto_1.proto.Message.decode((0, generics_1.unpadRandomMax16)(msgBuffer));
174
+ msg = ((_a = msg.deviceSentMessage) === null || _a === void 0 ? void 0 : _a.message) || msg;
175
+ await processSenderKeyDistribution(msg);
280
176
  if (fullMessage.message) {
281
177
  Object.assign(fullMessage.message, msg);
282
178
  }
@@ -285,33 +181,18 @@ export const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
285
181
  }
286
182
  }
287
183
  catch (err) {
288
- const errorContext = {
289
- key: fullMessage.key,
290
- err,
291
- messageType: tag === 'plaintext' ? 'plaintext' : attrs.type,
292
- sender,
293
- author,
294
- isSessionRecordError: isSessionRecordError(err)
295
- };
296
- logger.error(errorContext, 'failed to decrypt message');
297
- fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT;
298
- fullMessage.messageStubParameters = [err.message.toString()];
184
+ logger.error({ key: fullMessage.key, err }, 'failed to decrypt message');
185
+ fullMessage.messageStubType = WAProto_1.proto.WebMessageInfo.StubType.CIPHERTEXT;
186
+ fullMessage.messageStubParameters = [err.message];
299
187
  }
300
188
  }
301
189
  }
302
190
  // if nothing was found to decrypt
303
- if (!decryptables && !fullMessage.key?.isViewOnce) {
304
- fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT;
305
- fullMessage.messageStubParameters = [NO_MESSAGE_FOUND_ERROR_TEXT];
191
+ if (!decryptables) {
192
+ fullMessage.messageStubType = WAProto_1.proto.WebMessageInfo.StubType.CIPHERTEXT;
193
+ fullMessage.messageStubParameters = [NO_MESSAGE_FOUND_ERROR_TEXT, JSON.stringify(stanza, generics_1.BufferJSON.replacer)];
306
194
  }
307
195
  }
308
196
  };
309
197
  };
310
- /**
311
- * Utility function to check if an error is related to missing session record
312
- */
313
- function isSessionRecordError(error) {
314
- const errorMessage = error?.message || error?.toString() || '';
315
- return DECRYPTION_RETRY_CONFIG.sessionRecordErrors.some(errorPattern => errorMessage.includes(errorPattern));
316
- }
317
- //# sourceMappingURL=decode-wa-message.js.map
198
+ exports.decryptMessageNode = decryptMessageNode;
@@ -1,5 +1,5 @@
1
- import type { BaileysEventEmitter, BaileysEventMap } from '../Types/index.js';
2
- import type { ILogger } from './logger.js';
1
+ import { Logger } from 'pino';
2
+ import { BaileysEventEmitter, BaileysEventMap } from '../Types';
3
3
  /**
4
4
  * A map that contains a list of all events that have been triggered
5
5
  *
@@ -10,27 +10,26 @@ import type { ILogger } from './logger.js';
10
10
  type BaileysEventData = Partial<BaileysEventMap>;
11
11
  type BaileysBufferableEventEmitter = BaileysEventEmitter & {
12
12
  /** Use to process events in a batch */
13
- process(handler: (events: BaileysEventData) => void | Promise<void>): () => void;
13
+ process(handler: (events: BaileysEventData) => void | Promise<void>): (() => void);
14
14
  /**
15
15
  * starts buffering events, call flush() to release them
16
16
  * */
17
17
  buffer(): void;
18
18
  /** buffers all events till the promise completes */
19
- createBufferedFunction<A extends any[], T>(work: (...args: A) => Promise<T>): (...args: A) => Promise<T>;
19
+ createBufferedFunction<A extends any[], T>(work: (...args: A) => Promise<T>): ((...args: A) => Promise<T>);
20
20
  /**
21
21
  * flushes all buffered events
22
+ * @param force if true, will flush all data regardless of any pending buffers
22
23
  * @returns returns true if the flush actually happened, otherwise false
23
24
  */
24
- flush(): boolean;
25
+ flush(force?: boolean): boolean;
25
26
  /** is there an ongoing buffer */
26
27
  isBuffering(): boolean;
27
- /** destroy the event buffer, clearing all resources */
28
- destroy(): void;
29
28
  };
30
29
  /**
31
30
  * The event buffer logically consolidates different events into a single event
32
31
  * making the data processing more efficient.
32
+ * @param ev the baileys event emitter
33
33
  */
34
- export declare const makeEventBuffer: (logger: ILogger) => BaileysBufferableEventEmitter;
34
+ export declare const makeEventBuffer: (logger: Logger) => BaileysBufferableEventEmitter;
35
35
  export {};
36
- //# sourceMappingURL=event-buffer.d.ts.map