@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.
- package/WAProto/fix-import.js +29 -0
- package/WAProto/index.js +160 -201
- package/engine-requirements.js +1 -1
- package/lib/Defaults/baileys-version.json +3 -0
- package/lib/Defaults/index.d.ts +15 -37
- package/lib/Defaults/index.js +136 -119
- package/lib/Defaults/phonenumber-mcc.json +223 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +0 -1
- package/lib/Signal/Group/ciphertext-message.js +5 -2
- package/lib/Signal/Group/group-session-builder.d.ts +3 -4
- package/lib/Signal/Group/group-session-builder.js +41 -7
- package/lib/Signal/Group/group_cipher.d.ts +4 -4
- package/lib/Signal/Group/group_cipher.js +51 -37
- package/lib/Signal/Group/index.d.ts +11 -12
- package/lib/Signal/Group/index.js +57 -12
- package/lib/Signal/Group/keyhelper.d.ts +1 -2
- package/lib/Signal/Group/keyhelper.js +44 -7
- package/lib/Signal/Group/queue-job.d.ts +1 -0
- package/lib/Signal/Group/queue-job.js +57 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +2 -3
- package/lib/Signal/Group/sender-chain-key.js +15 -7
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +1 -2
- package/lib/Signal/Group/sender-key-distribution-message.js +11 -8
- package/lib/Signal/Group/sender-key-message.d.ts +1 -2
- package/lib/Signal/Group/sender-key-message.js +12 -9
- package/lib/Signal/Group/sender-key-name.d.ts +0 -1
- package/lib/Signal/Group/sender-key-name.js +5 -2
- package/lib/Signal/Group/sender-key-record.d.ts +2 -3
- package/lib/Signal/Group/sender-key-record.js +21 -9
- package/lib/Signal/Group/sender-key-state.d.ts +6 -7
- package/lib/Signal/Group/sender-key-state.js +42 -27
- package/lib/Signal/Group/sender-message-key.d.ts +0 -1
- package/lib/Signal/Group/sender-message-key.js +7 -4
- package/lib/Signal/libsignal.d.ts +3 -5
- package/lib/Signal/libsignal.js +90 -347
- package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +5 -4
- package/lib/Socket/Client/abstract-socket-client.js +13 -0
- package/lib/Socket/Client/index.d.ts +3 -3
- package/lib/Socket/Client/index.js +19 -3
- package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
- package/lib/Socket/Client/mobile-socket-client.js +65 -0
- package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +2 -3
- package/lib/Socket/Client/web-socket-client.js +62 -0
- package/lib/Socket/business.d.ts +108 -154
- package/lib/Socket/business.js +43 -162
- package/lib/Socket/chats.d.ts +239 -96
- package/lib/Socket/chats.js +427 -627
- package/lib/Socket/communities.d.ts +146 -239
- package/lib/Socket/communities.js +80 -90
- package/lib/Socket/groups.d.ts +57 -104
- package/lib/Socket/groups.js +161 -154
- package/lib/Socket/index.d.ts +115 -202
- package/lib/Socket/index.js +10 -11
- package/lib/Socket/luxu.d.ts +266 -22
- package/lib/Socket/luxu.js +465 -422
- package/lib/Socket/messages-recv.d.ts +84 -136
- package/lib/Socket/messages-recv.js +615 -1421
- package/lib/Socket/messages-send.d.ts +126 -142
- package/lib/Socket/messages-send.js +671 -878
- package/lib/Socket/newsletter.d.ts +85 -121
- package/lib/Socket/newsletter.js +272 -147
- package/lib/Socket/registration.d.ts +267 -0
- package/lib/Socket/registration.js +166 -0
- package/lib/Socket/socket.d.ts +19 -34
- package/lib/Socket/socket.js +313 -544
- package/lib/Socket/usync.d.ts +36 -0
- package/lib/Socket/usync.js +70 -0
- package/lib/Store/index.d.ts +3 -10
- package/lib/Store/index.js +10 -10
- package/lib/Store/make-cache-manager-store.d.ts +11 -17
- package/lib/Store/make-cache-manager-store.js +41 -43
- package/lib/Store/make-in-memory-store.d.ts +118 -39
- package/lib/Store/make-in-memory-store.js +341 -112
- package/lib/Store/make-ordered-dictionary.d.ts +10 -11
- package/lib/Store/make-ordered-dictionary.js +20 -14
- package/lib/Store/object-repository.d.ts +9 -10
- package/lib/Store/object-repository.js +6 -11
- package/lib/Types/Auth.d.ts +12 -19
- package/lib/Types/Auth.js +2 -2
- package/lib/Types/Call.d.ts +1 -3
- package/lib/Types/Call.js +2 -2
- package/lib/Types/Chat.d.ts +13 -35
- package/lib/Types/Chat.js +4 -8
- package/lib/Types/Contact.d.ts +1 -8
- package/lib/Types/Contact.js +2 -2
- package/lib/Types/Events.d.ts +17 -116
- package/lib/Types/Events.js +2 -2
- package/lib/Types/GroupMetadata.d.ts +5 -21
- package/lib/Types/GroupMetadata.js +2 -2
- package/lib/Types/Label.d.ts +0 -12
- package/lib/Types/Label.js +5 -3
- package/lib/Types/LabelAssociation.d.ts +0 -1
- package/lib/Types/LabelAssociation.js +5 -3
- package/lib/Types/Message.d.ts +58 -105
- package/lib/Types/Message.js +9 -11
- package/lib/Types/Newsletter.d.ts +103 -0
- package/lib/Types/Newsletter.js +38 -0
- package/lib/Types/Product.d.ts +1 -2
- package/lib/Types/Product.js +2 -2
- package/lib/Types/Signal.d.ts +2 -32
- package/lib/Types/Signal.js +2 -2
- package/lib/Types/Socket.d.ts +25 -50
- package/lib/Types/Socket.js +2 -3
- package/lib/Types/State.d.ts +2 -72
- package/lib/Types/State.js +2 -56
- package/lib/Types/USync.d.ts +2 -3
- package/lib/Types/USync.js +2 -2
- package/lib/Types/index.d.ts +14 -22
- package/lib/Types/index.js +31 -15
- package/lib/Utils/auth-utils.d.ts +6 -12
- package/lib/Utils/auth-utils.js +143 -239
- package/lib/Utils/baileys-event-stream.d.ts +16 -0
- package/lib/Utils/baileys-event-stream.js +63 -0
- package/lib/Utils/business.d.ts +2 -3
- package/lib/Utils/business.js +69 -66
- package/lib/Utils/chat-utils.d.ts +23 -52
- package/lib/Utils/chat-utils.js +253 -396
- package/lib/Utils/crypto.d.ts +22 -18
- package/lib/Utils/crypto.js +90 -57
- package/lib/Utils/decode-wa-message.d.ts +8 -55
- package/lib/Utils/decode-wa-message.js +84 -203
- package/lib/Utils/event-buffer.d.ts +8 -9
- package/lib/Utils/event-buffer.js +77 -185
- package/lib/Utils/generics.d.ts +29 -28
- package/lib/Utils/generics.js +210 -180
- package/lib/Utils/history.d.ts +9 -18
- package/lib/Utils/history.js +55 -93
- package/lib/Utils/index.d.ts +17 -22
- package/lib/Utils/index.js +33 -22
- package/lib/Utils/link-preview.d.ts +5 -5
- package/lib/Utils/link-preview.js +24 -16
- package/lib/Utils/logger.d.ts +3 -11
- package/lib/Utils/logger.js +7 -3
- package/lib/Utils/lt-hash.d.ts +12 -8
- package/lib/Utils/lt-hash.js +46 -3
- package/lib/Utils/make-mutex.d.ts +2 -4
- package/lib/Utils/make-mutex.js +34 -24
- package/lib/Utils/messages-media.d.ts +44 -61
- package/lib/Utils/messages-media.js +482 -451
- package/lib/Utils/messages.d.ts +18 -32
- package/lib/Utils/messages.js +369 -458
- package/lib/Utils/noise-handler.d.ts +14 -13
- package/lib/Utils/noise-handler.js +99 -145
- package/lib/Utils/process-message.d.ts +12 -31
- package/lib/Utils/process-message.js +150 -459
- package/lib/Utils/signal.d.ts +5 -20
- package/lib/Utils/signal.js +72 -120
- package/lib/Utils/use-multi-file-auth-state.d.ts +2 -2
- package/lib/Utils/use-multi-file-auth-state.js +27 -29
- package/lib/Utils/validate-connection.d.ts +7 -7
- package/lib/Utils/validate-connection.js +99 -73
- package/lib/WABinary/constants.d.ts +27 -25
- package/lib/WABinary/constants.js +20 -1281
- package/lib/WABinary/decode.d.ts +5 -5
- package/lib/WABinary/decode.js +42 -52
- package/lib/WABinary/encode.d.ts +3 -3
- package/lib/WABinary/encode.js +155 -110
- package/lib/WABinary/generic-utils.d.ts +7 -8
- package/lib/WABinary/generic-utils.js +49 -48
- package/lib/WABinary/index.d.ts +5 -6
- package/lib/WABinary/index.js +21 -6
- package/lib/WABinary/jid-utils.d.ts +8 -25
- package/lib/WABinary/jid-utils.js +40 -74
- package/lib/WABinary/types.d.ts +1 -2
- package/lib/WABinary/types.js +2 -2
- package/lib/WAM/BinaryInfo.d.ts +11 -3
- package/lib/WAM/BinaryInfo.js +5 -2
- package/lib/WAM/constants.d.ts +3 -5
- package/lib/WAM/constants.js +11958 -19461
- package/lib/WAM/encode.d.ts +3 -3
- package/lib/WAM/encode.js +22 -17
- package/lib/WAM/index.d.ts +3 -4
- package/lib/WAM/index.js +19 -4
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +3 -4
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +13 -33
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +14 -11
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +12 -9
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +13 -9
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +3 -4
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +22 -20
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +3 -5
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +8 -13
- package/lib/WAUSync/Protocols/index.d.ts +4 -6
- package/lib/WAUSync/Protocols/index.js +20 -6
- package/lib/WAUSync/USyncQuery.d.ts +4 -6
- package/lib/WAUSync/USyncQuery.js +35 -44
- package/lib/WAUSync/USyncUser.d.ts +5 -10
- package/lib/WAUSync/USyncUser.js +5 -10
- package/lib/WAUSync/index.js +19 -4
- package/lib/index.d.ts +9 -10
- package/lib/index.js +34 -12
- package/package.json +50 -83
- package/WAProto/GenerateStatics.sh +0 -3
- package/WAProto/WAProto.proto +0 -5479
- package/WAProto/fix-imports.js +0 -85
- package/WAProto/index.d.ts +0 -14017
- package/lib/Signal/lid-mapping.d.ts +0 -23
- package/lib/Signal/lid-mapping.js +0 -277
- package/lib/Socket/Client/types.js +0 -11
- package/lib/Socket/Client/websocket.js +0 -54
- package/lib/Socket/mex.d.ts +0 -3
- package/lib/Socket/mex.js +0 -42
- package/lib/Store/keyed-db.d.ts +0 -22
- package/lib/Store/keyed-db.js +0 -108
- package/lib/Types/Bussines.d.ts +0 -25
- package/lib/Types/Bussines.js +0 -2
- package/lib/Types/Mex.d.ts +0 -141
- package/lib/Types/Mex.js +0 -37
- package/lib/Utils/browser-utils.d.ts +0 -4
- package/lib/Utils/browser-utils.js +0 -28
- package/lib/Utils/companion-reg-client-utils.d.ts +0 -17
- package/lib/Utils/companion-reg-client-utils.js +0 -35
- package/lib/Utils/identity-change-handler.d.ts +0 -44
- package/lib/Utils/identity-change-handler.js +0 -50
- package/lib/Utils/message-retry-manager.d.ts +0 -115
- package/lib/Utils/message-retry-manager.js +0 -265
- package/lib/Utils/offline-node-processor.d.ts +0 -17
- package/lib/Utils/offline-node-processor.js +0 -40
- package/lib/Utils/pre-key-manager.d.ts +0 -28
- package/lib/Utils/pre-key-manager.js +0 -106
- package/lib/Utils/reporting-utils.d.ts +0 -11
- package/lib/Utils/reporting-utils.js +0 -258
- package/lib/Utils/stanza-ack.d.ts +0 -11
- package/lib/Utils/stanza-ack.js +0 -38
- package/lib/Utils/sync-action-utils.d.ts +0 -19
- package/lib/Utils/sync-action-utils.js +0 -49
- package/lib/Utils/tc-token-utils.d.ts +0 -37
- package/lib/Utils/tc-token-utils.js +0 -163
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +0 -10
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
- package/lib/WAUSync/index.d.ts +0 -4
|
@@ -1,203 +1,101 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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 (
|
|
72
|
+
else if ((0, WABinary_1.isJidNewsLetter)(from)) {
|
|
167
73
|
msgType = 'newsletter';
|
|
168
|
-
chatId = from;
|
|
169
74
|
author = from;
|
|
170
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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:
|
|
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(
|
|
267
|
-
msg = msg.deviceSentMessage
|
|
268
|
-
|
|
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
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
|
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
|
|
2
|
-
import
|
|
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:
|
|
34
|
+
export declare const makeEventBuffer: (logger: Logger) => BaileysBufferableEventEmitter;
|
|
35
35
|
export {};
|
|
36
|
-
//# sourceMappingURL=event-buffer.d.ts.map
|