@skyzopedia/baileys-mod 5.0.8 → 6.0.1

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 (212) hide show
  1. package/WAProto/index.js +133384 -57814
  2. package/engine-requirements.js +10 -0
  3. package/lib/Defaults/baileys-version.json +3 -0
  4. package/lib/Defaults/index.d.ts +53 -0
  5. package/lib/Defaults/index.js +141 -117
  6. package/lib/Defaults/phonenumber-mcc.json +223 -0
  7. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  8. package/lib/Signal/Group/ciphertext-message.js +14 -12
  9. package/lib/Signal/Group/group-session-builder.d.ts +14 -0
  10. package/lib/Signal/Group/group-session-builder.js +42 -10
  11. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  12. package/lib/Signal/Group/group_cipher.js +87 -75
  13. package/lib/Signal/Group/index.d.ts +11 -0
  14. package/lib/Signal/Group/index.js +57 -13
  15. package/lib/Signal/Group/keyhelper.d.ts +10 -0
  16. package/lib/Signal/Group/keyhelper.js +52 -17
  17. package/lib/Signal/Group/queue-job.d.ts +1 -0
  18. package/lib/Signal/Group/queue-job.js +57 -0
  19. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  20. package/lib/Signal/Group/sender-chain-key.js +33 -27
  21. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  22. package/lib/Signal/Group/sender-key-distribution-message.js +63 -62
  23. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  24. package/lib/Signal/Group/sender-key-message.js +66 -65
  25. package/lib/Signal/Group/sender-key-name.d.ts +17 -0
  26. package/lib/Signal/Group/sender-key-name.js +44 -45
  27. package/lib/Signal/Group/sender-key-record.d.ts +30 -0
  28. package/lib/Signal/Group/sender-key-record.js +49 -39
  29. package/lib/Signal/Group/sender-key-state.d.ts +38 -0
  30. package/lib/Signal/Group/sender-key-state.js +93 -80
  31. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  32. package/lib/Signal/Group/sender-message-key.js +28 -27
  33. package/lib/Signal/libsignal.d.ts +3 -0
  34. package/lib/Signal/libsignal.js +163 -313
  35. package/lib/Socket/Client/abstract-socket-client.d.ts +17 -0
  36. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  37. package/lib/Socket/Client/index.d.ts +3 -0
  38. package/lib/Socket/Client/index.js +19 -4
  39. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  40. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  41. package/lib/Socket/Client/web-socket-client.d.ts +12 -0
  42. package/lib/Socket/Client/web-socket-client.js +62 -0
  43. package/lib/Socket/business.d.ts +171 -0
  44. package/lib/Socket/business.js +242 -359
  45. package/lib/Socket/chats.d.ts +267 -0
  46. package/lib/Socket/chats.js +935 -846
  47. package/lib/Socket/dugong.d.ts +254 -0
  48. package/lib/Socket/dugong.js +484 -0
  49. package/lib/Socket/groups.d.ts +115 -0
  50. package/lib/Socket/groups.js +309 -304
  51. package/lib/Socket/index.d.ts +173 -0
  52. package/lib/Socket/index.js +10 -15
  53. package/lib/Socket/messages-recv.d.ts +161 -0
  54. package/lib/Socket/messages-recv.js +1054 -1107
  55. package/lib/Socket/messages-send.d.ts +149 -0
  56. package/lib/Socket/messages-send.js +447 -706
  57. package/lib/Socket/newsletter.d.ts +134 -0
  58. package/lib/Socket/newsletter.js +314 -199
  59. package/lib/Socket/registration.d.ts +267 -0
  60. package/lib/Socket/registration.js +166 -0
  61. package/lib/Socket/socket.d.ts +43 -0
  62. package/lib/Socket/socket.js +650 -777
  63. package/lib/Socket/usync.d.ts +36 -0
  64. package/lib/Socket/usync.js +70 -0
  65. package/lib/Store/index.d.ts +3 -0
  66. package/lib/Store/index.js +10 -6
  67. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  68. package/lib/Store/make-cache-manager-store.js +81 -73
  69. package/lib/Store/make-in-memory-store.d.ts +118 -0
  70. package/lib/Store/make-in-memory-store.js +423 -286
  71. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  72. package/lib/Store/make-ordered-dictionary.js +79 -77
  73. package/lib/Store/object-repository.d.ts +10 -0
  74. package/lib/Store/object-repository.js +26 -24
  75. package/lib/Types/Auth.d.ts +110 -0
  76. package/lib/Types/Auth.js +2 -3
  77. package/lib/Types/Call.d.ts +13 -0
  78. package/lib/Types/Call.js +2 -3
  79. package/lib/Types/Chat.d.ts +102 -0
  80. package/lib/Types/Chat.js +4 -9
  81. package/lib/Types/Contact.d.ts +19 -0
  82. package/lib/Types/Contact.js +2 -3
  83. package/lib/Types/Events.d.ts +157 -0
  84. package/lib/Types/Events.js +2 -3
  85. package/lib/Types/GroupMetadata.d.ts +55 -0
  86. package/lib/Types/GroupMetadata.js +2 -3
  87. package/lib/Types/Label.d.ts +35 -0
  88. package/lib/Types/Label.js +26 -24
  89. package/lib/Types/LabelAssociation.d.ts +29 -0
  90. package/lib/Types/LabelAssociation.js +8 -6
  91. package/lib/Types/Message.d.ts +273 -0
  92. package/lib/Types/Message.js +9 -12
  93. package/lib/Types/Newsletter.d.ts +103 -0
  94. package/lib/Types/Newsletter.js +38 -33
  95. package/lib/Types/Product.d.ts +78 -0
  96. package/lib/Types/Product.js +2 -3
  97. package/lib/Types/Signal.d.ts +57 -0
  98. package/lib/Types/Signal.js +2 -3
  99. package/lib/Types/Socket.d.ts +111 -0
  100. package/lib/Types/Socket.js +2 -4
  101. package/lib/Types/State.d.ts +27 -0
  102. package/lib/Types/State.js +2 -11
  103. package/lib/Types/USync.d.ts +25 -0
  104. package/lib/Types/USync.js +2 -3
  105. package/lib/Types/index.d.ts +57 -0
  106. package/lib/Types/index.js +41 -27
  107. package/lib/Utils/auth-utils.d.ts +18 -0
  108. package/lib/Utils/auth-utils.js +198 -211
  109. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  110. package/lib/Utils/baileys-event-stream.js +61 -42
  111. package/lib/Utils/business.d.ts +22 -0
  112. package/lib/Utils/business.js +214 -213
  113. package/lib/Utils/chat-utils.d.ts +71 -0
  114. package/lib/Utils/chat-utils.js +687 -710
  115. package/lib/Utils/crypto.d.ts +41 -0
  116. package/lib/Utils/crypto.js +133 -112
  117. package/lib/Utils/decode-wa-message.d.ts +19 -0
  118. package/lib/Utils/decode-wa-message.js +183 -252
  119. package/lib/Utils/event-buffer.d.ts +35 -0
  120. package/lib/Utils/event-buffer.js +496 -510
  121. package/lib/Utils/generics.d.ts +92 -0
  122. package/lib/Utils/generics.js +392 -319
  123. package/lib/Utils/generics.js.bak +433 -0
  124. package/lib/Utils/history.d.ts +15 -0
  125. package/lib/Utils/history.js +92 -83
  126. package/lib/Utils/index.d.ts +17 -0
  127. package/lib/Utils/index.js +33 -21
  128. package/lib/Utils/link-preview.d.ts +21 -0
  129. package/lib/Utils/link-preview.js +83 -71
  130. package/lib/Utils/logger.d.ts +4 -0
  131. package/lib/Utils/logger.js +7 -5
  132. package/lib/Utils/lt-hash.d.ts +12 -0
  133. package/lib/Utils/lt-hash.js +46 -40
  134. package/lib/Utils/make-mutex.d.ts +7 -0
  135. package/lib/Utils/make-mutex.js +41 -34
  136. package/lib/Utils/messages-media.d.ts +116 -0
  137. package/lib/Utils/messages-media.js +768 -550
  138. package/lib/Utils/messages.d.ts +77 -0
  139. package/lib/Utils/messages.js +263 -362
  140. package/lib/Utils/noise-handler.d.ts +21 -0
  141. package/lib/Utils/noise-handler.js +149 -138
  142. package/lib/Utils/process-message.d.ts +41 -0
  143. package/lib/Utils/process-message.js +303 -323
  144. package/lib/Utils/signal.d.ts +32 -0
  145. package/lib/Utils/signal.js +141 -149
  146. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  147. package/lib/Utils/use-multi-file-auth-state.js +103 -95
  148. package/lib/Utils/validate-connection.d.ts +11 -0
  149. package/lib/Utils/validate-connection.js +214 -183
  150. package/lib/Utils/validate-connection.js.bak +237 -0
  151. package/lib/WABinary/constants.d.ts +30 -0
  152. package/lib/WABinary/constants.js +35 -1298
  153. package/lib/WABinary/decode.d.ts +7 -0
  154. package/lib/WABinary/decode.js +249 -237
  155. package/lib/WABinary/encode.d.ts +3 -0
  156. package/lib/WABinary/encode.js +260 -213
  157. package/lib/WABinary/generic-utils.d.ts +17 -0
  158. package/lib/WABinary/generic-utils.js +65 -56
  159. package/lib/WABinary/index.d.ts +5 -0
  160. package/lib/WABinary/index.js +21 -7
  161. package/lib/WABinary/jid-utils.d.ts +31 -0
  162. package/lib/WABinary/jid-utils.js +58 -89
  163. package/lib/WABinary/types.d.ts +18 -0
  164. package/lib/WABinary/types.js +2 -3
  165. package/lib/WAM/BinaryInfo.d.ts +17 -0
  166. package/lib/WAM/BinaryInfo.js +12 -10
  167. package/lib/WAM/constants.d.ts +38 -0
  168. package/lib/WAM/constants.js +15348 -22851
  169. package/lib/WAM/encode.d.ts +3 -0
  170. package/lib/WAM/encode.js +136 -135
  171. package/lib/WAM/index.d.ts +3 -0
  172. package/lib/WAM/index.js +19 -5
  173. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  174. package/lib/WAUSync/Protocols/USyncContactProtocol.js +30 -28
  175. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  176. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +53 -49
  177. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  178. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +28 -27
  179. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  180. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +39 -36
  181. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  182. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +50 -50
  183. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  184. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +20 -26
  185. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  186. package/lib/WAUSync/Protocols/index.js +20 -6
  187. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  188. package/lib/WAUSync/USyncQuery.js +85 -86
  189. package/lib/WAUSync/USyncUser.d.ts +12 -0
  190. package/lib/WAUSync/USyncUser.js +25 -23
  191. package/lib/WAUSync/index.d.ts +3 -0
  192. package/lib/WAUSync/index.js +19 -5
  193. package/lib/index.d.ts +12 -0
  194. package/lib/index.js +36 -24
  195. package/package.json +106 -98
  196. package/LICENSE +0 -21
  197. package/WAProto/WAProto.proto +0 -5311
  198. package/lib/KeyDB/BinarySearch.js +0 -20
  199. package/lib/KeyDB/KeyedDB.js +0 -167
  200. package/lib/KeyDB/index.js +0 -4
  201. package/lib/Signal/lid-mapping.js +0 -155
  202. package/lib/Socket/Client/types.js +0 -13
  203. package/lib/Socket/Client/websocket.js +0 -52
  204. package/lib/Socket/Client/websocket.js.bak +0 -53
  205. package/lib/Socket/communities.js +0 -413
  206. package/lib/Socket/mex.js +0 -45
  207. package/lib/Types/Bussines.js +0 -3
  208. package/lib/Types/Newsletter.js.bak +0 -33
  209. package/lib/Utils/browser-utils.js +0 -25
  210. package/lib/Utils/message-retry-manager.js +0 -113
  211. package/lib/Utils/messages.js.bak +0 -907
  212. package/lib/Utils/pre-key-manager.js +0 -85
@@ -1,267 +1,198 @@
1
- //=======================================================//
2
- import { areJidsSameUser, isHostedLidUser, isHostedPnUser, isJidBroadcast, isJidGroup, isJidMetaAI, isJidNewsletter, isJidStatusBroadcast, isLidUser, isPnUser } from "../WABinary/index.js";
3
- import { unpadRandomMax16 } from "./generics.js";
4
- import { proto } from "../../WAProto/index.js";
5
- import { Boom } from "@hapi/boom";
6
- //=======================================================//
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
- //=======================================================//
15
- const storeMappingFromEnvelope = async (stanza, sender, repository, decryptionJid, logger) => {
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
- //=======================================================//
29
- export const NO_MESSAGE_FOUND_ERROR_TEXT = "Message absent from node";
30
- export const MISSING_KEYS_ERROR_TEXT = "Key used already or never filled";
31
- //=======================================================//
32
- export const DECRYPTION_RETRY_CONFIG = {
33
- maxRetries: 3,
34
- baseDelayMs: 100,
35
- sessionRecordErrors: ["No session record", "SessionError: No session record"]
36
- };
37
- //=======================================================//
38
- export const NACK_REASONS = {
39
- ParsingError: 487,
40
- UnrecognizedStanza: 488,
41
- UnrecognizedStanzaClass: 489,
42
- UnrecognizedStanzaType: 490,
43
- InvalidProtobuf: 491,
44
- InvalidHostedCompanionStanza: 493,
45
- MissingMessageSecret: 495,
46
- SignalErrorOldCounter: 496,
47
- MessageDeletedOnPeer: 499,
48
- UnhandledError: 500,
49
- UnsupportedAdminRevoke: 550,
50
- UnsupportedLIDGroup: 551,
51
- DBOperationFailed: 552
52
- };
53
- //=======================================================//
54
- export const extractAddressingContext = (stanza) => {
55
- let senderAlt;
56
- let recipientAlt;
57
- const sender = stanza.attrs.participant || stanza.attrs.from;
58
- const addressingMode = stanza.attrs.addressing_mode || (sender?.endsWith("lid") ? "lid" : "pn");
59
- if (addressingMode === "lid") {
60
- senderAlt = stanza.attrs.participant_pn || stanza.attrs.sender_pn || stanza.attrs.peer_recipient_pn;
61
- recipientAlt = stanza.attrs.recipient_pn;
62
- }
63
- else {
64
- senderAlt = stanza.attrs.participant_lid || stanza.attrs.sender_lid || stanza.attrs.peer_recipient_lid;
65
- recipientAlt = stanza.attrs.recipient_lid;
66
- }
67
- return {
68
- addressingMode,
69
- senderAlt,
70
- recipientAlt
71
- };
72
- };
73
- //=======================================================//
74
- export function decodeMessageNode(stanza, meId, meLid) {
75
- let msgType;
76
- let chatId;
77
- let author;
78
- let fromMe = false;
79
- const msgId = stanza.attrs.id;
80
- const from = stanza.attrs.from;
81
- const participant = stanza.attrs.participant;
82
- const recipient = stanza.attrs.recipient;
83
- const addressingContext = extractAddressingContext(stanza);
84
- const isMe = (jid) => areJidsSameUser(jid, meId);
85
- const isMeLid = (jid) => areJidsSameUser(jid, meLid);
86
- if (isPnUser(from) || isLidUser(from) || isHostedLidUser(from) || isHostedPnUser(from)) {
87
- if (recipient && !isJidMetaAI(recipient)) {
88
- if (!isMe(from) && !isMeLid(from)) {
89
- throw new Boom("receipient present, but msg not from me", { data: stanza });
90
- }
91
- if (isMe(from) || isMeLid(from)) {
92
- fromMe = true;
93
- }
94
- chatId = recipient;
95
- }
96
- else {
97
- chatId = from;
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';
9
+ /**
10
+ * Decode the received node as a message.
11
+ * @note this will only parse the message, not decrypt it
12
+ */
13
+ function decodeMessageNode(stanza, meId, meLid) {
14
+ var _a, _b;
15
+ let msgType;
16
+ let chatId;
17
+ let author;
18
+ const msgId = stanza.attrs.id;
19
+ const from = stanza.attrs.from;
20
+ const participant = stanza.attrs.participant;
21
+ const recipient = stanza.attrs.recipient;
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 });
28
+ }
29
+ chatId = recipient;
30
+ }
31
+ else {
32
+ chatId = from;
33
+ }
34
+ msgType = 'chat';
35
+ author = from;
98
36
  }
99
- msgType = "chat";
100
- author = from;
101
- }
102
- else if (isJidGroup(from)) {
103
- if (!participant) {
104
- throw new Boom("No participant in group message");
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 });
41
+ }
42
+ chatId = recipient;
43
+ }
44
+ else {
45
+ chatId = from;
46
+ }
47
+ msgType = 'chat';
48
+ author = from;
105
49
  }
106
- if (isMe(participant) || isMeLid(participant)) {
107
- fromMe = true;
50
+ else if ((0, WABinary_1.isJidGroup)(from)) {
51
+ if (!participant) {
52
+ throw new boom_1.Boom('No participant in group message');
53
+ }
54
+ msgType = 'group';
55
+ author = participant;
56
+ chatId = from;
108
57
  }
109
- msgType = "group";
110
- author = participant;
111
- chatId = from;
112
- }
113
- else if (isJidBroadcast(from)) {
114
- if (!participant) {
115
- throw new Boom("No participant in group message");
58
+ else if ((0, WABinary_1.isJidBroadcast)(from)) {
59
+ if (!participant) {
60
+ throw new boom_1.Boom('No participant in group message');
61
+ }
62
+ const isParticipantMe = isMe(participant);
63
+ if ((0, WABinary_1.isJidStatusBroadcast)(from)) {
64
+ msgType = isParticipantMe ? 'direct_peer_status' : 'other_status';
65
+ }
66
+ else {
67
+ msgType = isParticipantMe ? 'peer_broadcast' : 'other_broadcast';
68
+ }
69
+ chatId = from;
70
+ author = participant;
116
71
  }
117
- const isParticipantMe = isMe(participant);
118
- if (isJidStatusBroadcast(from)) {
119
- msgType = isParticipantMe ? "direct_peer_status" : "other_status";
72
+ else if ((0, WABinary_1.isJidNewsLetter)(from)) {
73
+ msgType = 'newsletter';
74
+ author = from;
75
+ chatId = from;
120
76
  }
121
77
  else {
122
- msgType = isParticipantMe ? "peer_broadcast" : "other_broadcast";
78
+ throw new boom_1.Boom('Unknown message type', { data: stanza });
79
+ }
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;
82
+ const key = {
83
+ remoteJid: chatId,
84
+ fromMe,
85
+ id: msgId,
86
+ participant
87
+ };
88
+ const fullMessage = {
89
+ key,
90
+ messageTimestamp: +stanza.attrs.t,
91
+ pushName: pushname,
92
+ broadcast: (0, WABinary_1.isJidBroadcast)(from)
93
+ };
94
+ if (msgType === 'newsletter') {
95
+ fullMessage.newsletterServerId = +((_b = stanza.attrs) === null || _b === void 0 ? void 0 : _b.server_id);
123
96
  }
124
- fromMe = isParticipantMe;
125
- chatId = from;
126
- author = participant;
127
- }
128
- else if (isJidNewsletter(from)) {
129
- msgType = "newsletter";
130
- chatId = from;
131
- author = from;
132
- if (isMe(from) || isMeLid(from)) {
133
- fromMe = true;
97
+ if (key.fromMe) {
98
+ fullMessage.status = WAProto_1.proto.WebMessageInfo.Status.SERVER_ACK;
134
99
  }
135
- }
136
- else {
137
- throw new Boom("Unknown message type", { data: stanza });
138
- }
139
- const pushname = stanza?.attrs?.notify;
140
- const key = {
141
- remoteJid: chatId,
142
- remoteJidAlt: !isJidGroup(chatId) ? addressingContext.senderAlt : undefined,
143
- fromMe,
144
- id: msgId,
145
- participant,
146
- participantAlt: isJidGroup(chatId) ? addressingContext.senderAlt : undefined,
147
- addressingMode: addressingContext.addressingMode,
148
- ...(msgType === "newsletter" && stanza.attrs.server_id ? { server_id: stanza.attrs.server_id } : {})
149
- };
150
- const fullMessage = {
151
- key,
152
- messageTimestamp: +stanza.attrs.t,
153
- pushName: pushname,
154
- broadcast: isJidBroadcast(from)
155
- };
156
- if (key.fromMe) {
157
- fullMessage.status = proto.WebMessageInfo.Status.SERVER_ACK;
158
- }
159
- return {
160
- fullMessage,
161
- author,
162
- sender: msgType === "chat" ? author : chatId
163
- };
100
+ return {
101
+ fullMessage,
102
+ author,
103
+ sender: msgType === 'chat' ? author : chatId
104
+ };
164
105
  }
165
- //=======================================================//
166
- export const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
167
- const { fullMessage, author, sender } = decodeMessageNode(stanza, meId, meLid);
168
- return {
169
- fullMessage,
170
- category: stanza.attrs.category,
171
- author,
172
- async decrypt() {
173
- let decryptables = 0;
174
- if (Array.isArray(stanza.content)) {
175
- for (const { tag, attrs, content } of stanza.content) {
176
- if (tag === "verified_name" && content instanceof Uint8Array) {
177
- const cert = proto.VerifiedNameCertificate.decode(content);
178
- const details = proto.VerifiedNameCertificate.Details.decode(cert.details);
179
- fullMessage.verifiedBizName = details.verifiedName;
180
- }
181
- if (tag === "unavailable" && attrs.type === "view_once") {
182
- fullMessage.key.isViewOnce = true;
183
- }
184
- if (tag !== "enc" && tag !== "plaintext") {
185
- continue;
186
- }
187
- if (!(content instanceof Uint8Array)) {
188
- continue;
189
- }
190
- decryptables += 1;
191
- let msgBuffer;
192
- const decryptionJid = await getDecryptionJid(author, repository);
193
- if (tag !== "plaintext") {
194
- await storeMappingFromEnvelope(stanza, author, repository, decryptionJid, logger);
195
- }
196
- try {
197
- const e2eType = tag === "plaintext" ? "plaintext" : attrs.type;
198
- switch (e2eType) {
199
- case "skmsg":
200
- msgBuffer = await repository.decryptGroupMessage({
201
- group: sender,
202
- authorJid: author,
203
- msg: content
204
- });
205
- break;
206
- case "pkmsg":
207
- case "msg":
208
- msgBuffer = await repository.decryptMessage({
209
- jid: decryptionJid,
210
- type: e2eType,
211
- ciphertext: content
212
- });
213
- break;
214
- case "plaintext":
215
- msgBuffer = content;
216
- break;
217
- default:
218
- throw new Error(`Unknown e2e type: ${e2eType}`);
106
+ exports.decodeMessageNode = decodeMessageNode;
107
+ const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
108
+ const { fullMessage, author, sender } = decodeMessageNode(stanza, meId, meLid);
109
+ return {
110
+ fullMessage,
111
+ category: stanza.attrs.category,
112
+ author,
113
+ async decrypt() {
114
+ var _a;
115
+ let decryptables = 0;
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
+ }
219
128
  }
220
- let msg = proto.Message.decode(e2eType !== "plaintext" ? unpadRandomMax16(msgBuffer) : msgBuffer);
221
- msg = msg.deviceSentMessage?.message || msg;
222
- if (msg.senderKeyDistributionMessage) {
223
- try {
224
- await repository.processSenderKeyDistributionMessage({
225
- authorJid: author,
226
- item: msg.senderKeyDistributionMessage
227
- });
228
- }
229
- catch (err) {
230
- logger.error({ key: fullMessage.key, err }, "failed to process sender key distribution message");
231
- }
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;
232
135
  }
233
- if (fullMessage.message) {
234
- Object.assign(fullMessage.message, msg);
136
+ else if (Array.isArray(stanza.content)) {
137
+ for (const { tag, attrs, content } of stanza.content) {
138
+ if (tag === 'verified_name' && content instanceof Uint8Array) {
139
+ const cert = WAProto_1.proto.VerifiedNameCertificate.decode(content);
140
+ const details = WAProto_1.proto.VerifiedNameCertificate.Details.decode(cert.details);
141
+ fullMessage.verifiedBizName = details.verifiedName;
142
+ }
143
+ if (tag !== 'enc') {
144
+ continue;
145
+ }
146
+ if (!(content instanceof Uint8Array)) {
147
+ continue;
148
+ }
149
+ decryptables += 1;
150
+ let msgBuffer;
151
+ try {
152
+ const e2eType = attrs.type;
153
+ switch (e2eType) {
154
+ case 'skmsg':
155
+ msgBuffer = await repository.decryptGroupMessage({
156
+ group: sender,
157
+ authorJid: author,
158
+ msg: content
159
+ });
160
+ break;
161
+ case 'pkmsg':
162
+ case 'msg':
163
+ const user = (0, WABinary_1.isJidUser)(sender) ? sender : author;
164
+ msgBuffer = await repository.decryptMessage({
165
+ jid: user,
166
+ type: e2eType,
167
+ ciphertext: content
168
+ });
169
+ break;
170
+ default:
171
+ throw new Error(`Unknown e2e type: ${e2eType}`);
172
+ }
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);
176
+ if (fullMessage.message) {
177
+ Object.assign(fullMessage.message, msg);
178
+ }
179
+ else {
180
+ fullMessage.message = msg;
181
+ }
182
+ }
183
+ catch (err) {
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];
187
+ }
188
+ }
235
189
  }
236
- else {
237
- fullMessage.message = msg;
190
+ // if nothing was found to decrypt
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)];
238
194
  }
239
- }
240
- catch (err) {
241
- const errorContext = {
242
- key: fullMessage.key,
243
- err,
244
- messageType: tag === "plaintext" ? "plaintext" : attrs.type,
245
- sender,
246
- author,
247
- isSessionRecordError: isSessionRecordError(err)
248
- };
249
- logger.error(errorContext, "failed to decrypt message");
250
- fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT;
251
- fullMessage.messageStubParameters = [err.message.toString()];
252
- }
253
195
  }
254
- }
255
- if (!decryptables) {
256
- fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT;
257
- fullMessage.messageStubParameters = [NO_MESSAGE_FOUND_ERROR_TEXT];
258
- }
259
- }
260
- };
196
+ };
261
197
  };
262
- //=======================================================//
263
- function isSessionRecordError(error) {
264
- const errorMessage = error?.message || error?.toString() || "";
265
- return DECRYPTION_RETRY_CONFIG.sessionRecordErrors.some(errorPattern => errorMessage.includes(errorPattern));
266
- }
267
- //=======================================================//
198
+ exports.decryptMessageNode = decryptMessageNode;
@@ -0,0 +1,35 @@
1
+ import { Logger } from 'pino';
2
+ import { BaileysEventEmitter, BaileysEventMap } from '../Types';
3
+ /**
4
+ * A map that contains a list of all events that have been triggered
5
+ *
6
+ * Note, this can contain different type of events
7
+ * this can make processing events extremely efficient -- since everything
8
+ * can be done in a single transaction
9
+ */
10
+ type BaileysEventData = Partial<BaileysEventMap>;
11
+ type BaileysBufferableEventEmitter = BaileysEventEmitter & {
12
+ /** Use to process events in a batch */
13
+ process(handler: (events: BaileysEventData) => void | Promise<void>): (() => void);
14
+ /**
15
+ * starts buffering events, call flush() to release them
16
+ * */
17
+ buffer(): void;
18
+ /** buffers all events till the promise completes */
19
+ createBufferedFunction<A extends any[], T>(work: (...args: A) => Promise<T>): ((...args: A) => Promise<T>);
20
+ /**
21
+ * flushes all buffered events
22
+ * @param force if true, will flush all data regardless of any pending buffers
23
+ * @returns returns true if the flush actually happened, otherwise false
24
+ */
25
+ flush(force?: boolean): boolean;
26
+ /** is there an ongoing buffer */
27
+ isBuffering(): boolean;
28
+ };
29
+ /**
30
+ * The event buffer logically consolidates different events into a single event
31
+ * making the data processing more efficient.
32
+ * @param ev the baileys event emitter
33
+ */
34
+ export declare const makeEventBuffer: (logger: Logger) => BaileysBufferableEventEmitter;
35
+ export {};