@mrlegendbot/baileys 1.2.3 → 1.2.5
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/README.upstream.md +1312 -0
- package/WAProto/WAProto.json +1 -0
- package/WAProto/WAProto.proto +6275 -0
- package/WAProto/compiler.js +550 -0
- package/WAProto/index.js +2 -97691
- package/lib/Defaults/index.js +89 -92
- package/lib/Signal/Group/ciphertext-message.js +9 -10
- package/lib/Signal/Group/group-session-builder.js +21 -22
- package/lib/Signal/Group/group_cipher.js +75 -69
- package/lib/Signal/Group/index.js +0 -1
- package/lib/Signal/Group/keyhelper.js +9 -10
- package/lib/Signal/Group/sender-chain-key.js +21 -22
- package/lib/Signal/Group/sender-key-distribution-message.js +51 -60
- package/lib/Signal/Group/sender-key-message.js +56 -62
- package/lib/Signal/Group/sender-key-name.js +38 -40
- package/lib/Signal/Group/sender-key-record.js +33 -34
- package/lib/Signal/Group/sender-key-state.js +72 -76
- package/lib/Signal/Group/sender-message-key.js +22 -23
- package/lib/Signal/libsignal.js +506 -405
- package/lib/Signal/lid-mapping.js +276 -258
- package/lib/Socket/Client/index.js +0 -1
- package/lib/Socket/Client/types.js +6 -7
- package/lib/Socket/Client/websocket.js +48 -49
- package/lib/Socket/business.js +349 -369
- package/lib/Socket/chats.js +1172 -1148
- package/lib/Socket/communities.js +473 -413
- package/lib/Socket/groups.js +387 -331
- package/lib/Socket/index.js +6 -8
- package/lib/Socket/messages-recv.js +1782 -1719
- package/lib/Socket/messages-send.js +1554 -2450
- package/lib/Socket/mex.js +40 -35
- package/lib/Socket/newsletter.js +239 -191
- package/lib/Socket/socket.js +992 -923
- package/lib/Store/index.js +8 -0
- package/lib/Store/keyed-db.js +108 -0
- package/lib/Store/make-cache-manager-store.js +70 -0
- package/lib/Store/make-in-memory-store.js +417 -0
- package/lib/Store/make-ordered-dictionary.js +69 -0
- package/lib/Store/object-repository.js +27 -0
- package/lib/Types/Auth.js +0 -1
- package/lib/Types/Bussines.js +0 -1
- package/lib/Types/Call.js +0 -1
- package/lib/Types/Chat.js +1 -8
- package/lib/Types/Contact.js +0 -1
- package/lib/Types/Events.js +1 -2
- package/lib/Types/GroupMetadata.js +0 -1
- package/lib/Types/Label.js +20 -22
- package/lib/Types/LabelAssociation.js +2 -4
- package/lib/Types/Message.js +3 -5
- package/lib/Types/Mex.js +26 -31
- package/lib/Types/Product.js +0 -1
- package/lib/Types/Signal.js +1 -2
- package/lib/Types/Socket.js +2 -3
- package/lib/Types/State.js +4 -52
- package/lib/Types/USync.js +0 -1
- package/lib/Types/index.js +10 -11
- package/lib/Utils/auth-utils.js +240 -277
- package/lib/Utils/browser-utils.js +20 -23
- package/lib/Utils/business.js +200 -204
- package/lib/Utils/chat-utils.js +836 -810
- package/lib/Utils/companion-reg-client-utils.js +23 -25
- package/lib/Utils/crypto.js +70 -86
- package/lib/Utils/decode-wa-message.js +277 -284
- package/lib/Utils/event-buffer.js +592 -595
- package/lib/Utils/generics.js +312 -335
- package/lib/Utils/history.js +123 -115
- package/lib/Utils/index.js +1 -2
- package/lib/Utils/link-preview.js +74 -73
- package/lib/Utils/logger.js +3 -2
- package/lib/Utils/lt-hash.js +0 -6
- package/lib/Utils/make-mutex.js +27 -27
- package/lib/Utils/message-retry-manager.js +213 -254
- package/lib/Utils/messages-media.js +741 -715
- package/lib/Utils/messages.js +791 -827
- package/lib/Utils/noise-handler.js +215 -187
- package/lib/Utils/pre-key-manager.js +69 -98
- package/lib/Utils/process-message.js +617 -586
- package/lib/Utils/reporting-utils.js +553 -234
- package/lib/Utils/signal.js +217 -170
- package/lib/Utils/stanza-ack.js +27 -35
- package/lib/Utils/sync-action-utils.js +37 -41
- package/lib/Utils/tc-token-utils.js +120 -141
- package/lib/Utils/use-multi-file-auth-state.js +87 -105
- package/lib/Utils/use-sqlite-auth-state.js +162 -0
- package/lib/Utils/validate-connection.js +190 -188
- package/lib/WABinary/constants.js +28 -1294
- package/lib/WABinary/decode.js +245 -249
- package/lib/WABinary/encode.js +201 -206
- package/lib/WABinary/generic-utils.js +86 -89
- package/lib/WABinary/index.js +0 -1
- package/lib/WABinary/jid-utils.js +68 -77
- package/lib/WABinary/types.js +0 -1
- package/lib/WAM/BinaryInfo.js +7 -8
- package/lib/WAM/constants.js +19892 -22853
- package/lib/WAM/encode.js +121 -132
- package/lib/WAM/index.js +0 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +46 -43
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +47 -48
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +22 -23
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +30 -33
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +19 -20
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -44
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -24
- package/lib/WAUSync/Protocols/index.js +0 -1
- package/lib/WAUSync/USyncQuery.js +79 -88
- package/lib/WAUSync/USyncUser.js +28 -29
- package/lib/WAUSync/index.js +0 -1
- package/lib/index.js +2 -2
- package/package.json +22 -86
- package/WAProto/GenerateStatics.sh +0 -3
- package/WAProto/fix-imports.js +0 -85
- package/WAProto/index.d.ts +0 -14017
- package/lib/Defaults/index.d.ts +0 -75
- package/lib/Signal/Group/ciphertext-message.d.ts +0 -10
- package/lib/Signal/Group/group-session-builder.d.ts +0 -15
- package/lib/Signal/Group/group_cipher.d.ts +0 -17
- package/lib/Signal/Group/index.d.ts +0 -12
- package/lib/Signal/Group/keyhelper.d.ts +0 -11
- package/lib/Signal/Group/sender-chain-key.d.ts +0 -14
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -17
- package/lib/Signal/Group/sender-key-message.d.ts +0 -19
- package/lib/Signal/Group/sender-key-name.d.ts +0 -18
- package/lib/Signal/Group/sender-key-record.d.ts +0 -31
- package/lib/Signal/Group/sender-key-state.d.ts +0 -39
- package/lib/Signal/Group/sender-message-key.d.ts +0 -12
- package/lib/Signal/libsignal.d.ts +0 -5
- package/lib/Signal/lid-mapping.d.ts +0 -23
- package/lib/Socket/Client/index.d.ts +0 -3
- package/lib/Socket/Client/types.d.ts +0 -16
- package/lib/Socket/Client/websocket.d.ts +0 -13
- package/lib/Socket/business.d.ts +0 -217
- package/lib/Socket/chats.d.ts +0 -125
- package/lib/Socket/communities.d.ts +0 -273
- package/lib/Socket/groups.d.ts +0 -161
- package/lib/Socket/index.d.ts +0 -260
- package/lib/Socket/messages-recv.d.ts +0 -203
- package/lib/Socket/messages-send.d.ts +0 -199
- package/lib/Socket/mex.d.ts +0 -3
- package/lib/Socket/newsletter.d.ts +0 -170
- package/lib/Socket/socket.d.ts +0 -59
- package/lib/Types/Auth.d.ts +0 -117
- package/lib/Types/Bussines.d.ts +0 -25
- package/lib/Types/Call.d.ts +0 -15
- package/lib/Types/Chat.d.ts +0 -124
- package/lib/Types/Contact.d.ts +0 -26
- package/lib/Types/Events.d.ts +0 -256
- package/lib/Types/GroupMetadata.d.ts +0 -71
- package/lib/Types/Label.d.ts +0 -47
- package/lib/Types/LabelAssociation.d.ts +0 -30
- package/lib/Types/Message.d.ts +0 -320
- package/lib/Types/Mex.d.ts +0 -141
- package/lib/Types/Product.d.ts +0 -79
- package/lib/Types/Signal.d.ts +0 -87
- package/lib/Types/Socket.d.ts +0 -136
- package/lib/Types/State.d.ts +0 -97
- package/lib/Types/USync.d.ts +0 -26
- package/lib/Types/index.d.ts +0 -66
- package/lib/Utils/auth-utils.d.ts +0 -24
- package/lib/Utils/browser-utils.d.ts +0 -4
- package/lib/Utils/business.d.ts +0 -23
- package/lib/Utils/chat-utils.d.ts +0 -100
- package/lib/Utils/companion-reg-client-utils.d.ts +0 -17
- package/lib/Utils/crypto.d.ts +0 -37
- package/lib/Utils/decode-wa-message.d.ts +0 -66
- package/lib/Utils/event-buffer.d.ts +0 -36
- package/lib/Utils/generics.d.ts +0 -92
- package/lib/Utils/history.d.ts +0 -24
- package/lib/Utils/identity-change-handler.d.ts +0 -44
- package/lib/Utils/identity-change-handler.js +0 -50
- package/lib/Utils/index.d.ts +0 -22
- package/lib/Utils/link-preview.d.ts +0 -21
- package/lib/Utils/logger.d.ts +0 -12
- package/lib/Utils/lt-hash.d.ts +0 -8
- package/lib/Utils/make-mutex.d.ts +0 -9
- package/lib/Utils/message-retry-manager.d.ts +0 -115
- package/lib/Utils/messages-media.d.ts +0 -133
- package/lib/Utils/messages.d.ts +0 -91
- package/lib/Utils/noise-handler.d.ts +0 -20
- 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/process-message.d.ts +0 -60
- package/lib/Utils/reporting-utils.d.ts +0 -11
- package/lib/Utils/signal.d.ts +0 -47
- package/lib/Utils/stanza-ack.d.ts +0 -11
- package/lib/Utils/sync-action-utils.d.ts +0 -19
- package/lib/Utils/tc-token-utils.d.ts +0 -37
- package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
- package/lib/Utils/validate-connection.d.ts +0 -11
- package/lib/WABinary/constants.d.ts +0 -28
- package/lib/WABinary/decode.d.ts +0 -7
- package/lib/WABinary/encode.d.ts +0 -3
- package/lib/WABinary/generic-utils.d.ts +0 -15
- package/lib/WABinary/index.d.ts +0 -6
- package/lib/WABinary/jid-utils.d.ts +0 -48
- package/lib/WABinary/types.d.ts +0 -19
- package/lib/WAM/BinaryInfo.d.ts +0 -9
- package/lib/WAM/constants.d.ts +0 -40
- package/lib/WAM/encode.d.ts +0 -3
- package/lib/WAM/index.d.ts +0 -4
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -10
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -23
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -13
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -13
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +0 -10
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -26
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -10
- package/lib/WAUSync/Protocols/index.d.ts +0 -6
- package/lib/WAUSync/USyncQuery.d.ts +0 -30
- package/lib/WAUSync/USyncUser.d.ts +0 -17
- package/lib/WAUSync/index.d.ts +0 -4
- package/lib/index.d.ts +0 -12
package/lib/Utils/history.js
CHANGED
|
@@ -1,134 +1,142 @@
|
|
|
1
1
|
import { pipeline } from 'stream/promises';
|
|
2
2
|
import { promisify } from 'util';
|
|
3
3
|
import { createInflate, inflate } from 'zlib';
|
|
4
|
-
import { proto } from '../../WAProto/
|
|
4
|
+
import { proto } from '../../WAProto/compiler.js';
|
|
5
5
|
import { WAMessageStubType } from '../Types/index.js';
|
|
6
6
|
import { isHostedLidUser, isHostedPnUser, isLidUser, isPnUser } from '../WABinary/index.js';
|
|
7
7
|
import { toNumber } from './generics.js';
|
|
8
8
|
import { normalizeMessageContent } from './messages.js';
|
|
9
9
|
import { downloadContentFromMessage } from './messages-media.js';
|
|
10
10
|
const inflatePromise = promisify(inflate);
|
|
11
|
-
const extractPnFromMessages =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (userJid && (isPnUser(userJid) || isHostedPnUser(userJid))) {
|
|
21
|
-
return userJid;
|
|
22
|
-
}
|
|
11
|
+
const extractPnFromMessages = messages => {
|
|
12
|
+
for (const msgItem of messages) {
|
|
13
|
+
const message = msgItem.message;
|
|
14
|
+
if (!message?.key?.fromMe || !message.userReceipt?.length) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const userJid = message.userReceipt[0]?.userJid;
|
|
18
|
+
if (userJid && (isPnUser(userJid) || isHostedPnUser(userJid))) {
|
|
19
|
+
return userJid;
|
|
23
20
|
}
|
|
24
|
-
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
25
23
|
};
|
|
26
24
|
export const downloadHistory = async (msg, options) => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
25
|
+
const stream = await downloadContentFromMessage(msg, 'md-msg-hist', {
|
|
26
|
+
options
|
|
27
|
+
});
|
|
28
|
+
const inflater = createInflate();
|
|
29
|
+
const chunks = [];
|
|
30
|
+
inflater.on('data', chunk => chunks.push(chunk));
|
|
31
|
+
await pipeline(stream, inflater);
|
|
32
|
+
const buffer = Buffer.concat(chunks);
|
|
33
|
+
const syncData = proto.HistorySync.decode(buffer);
|
|
34
|
+
return syncData;
|
|
37
35
|
};
|
|
38
36
|
export const processHistoryMessage = (item, logger) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
case proto.HistorySync.HistorySyncType.RECENT:
|
|
53
|
-
case proto.HistorySync.HistorySyncType.FULL:
|
|
54
|
-
case proto.HistorySync.HistorySyncType.ON_DEMAND:
|
|
55
|
-
for (const chat of item.conversations) {
|
|
56
|
-
contacts.push({
|
|
57
|
-
id: chat.id,
|
|
58
|
-
name: chat.displayName || chat.name || chat.username || undefined,
|
|
59
|
-
username: chat.username || undefined,
|
|
60
|
-
lid: chat.lidJid || chat.accountLid || undefined,
|
|
61
|
-
phoneNumber: chat.pnJid || undefined
|
|
62
|
-
});
|
|
63
|
-
const chatId = chat.id;
|
|
64
|
-
const isLid = isLidUser(chatId) || isHostedLidUser(chatId);
|
|
65
|
-
const isPn = isPnUser(chatId) || isHostedPnUser(chatId);
|
|
66
|
-
if (isLid && chat.pnJid) {
|
|
67
|
-
lidPnMappings.push({ lid: chatId, pn: chat.pnJid });
|
|
68
|
-
}
|
|
69
|
-
else if (isPn && chat.lidJid) {
|
|
70
|
-
lidPnMappings.push({ lid: chat.lidJid, pn: chatId });
|
|
71
|
-
}
|
|
72
|
-
else if (isLid && !chat.pnJid) {
|
|
73
|
-
// Fallback: extract PN from userReceipt in messages when pnJid is missing
|
|
74
|
-
const pnFromReceipt = extractPnFromMessages(chat.messages || []);
|
|
75
|
-
if (pnFromReceipt) {
|
|
76
|
-
lidPnMappings.push({ lid: chatId, pn: pnFromReceipt });
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
const msgs = chat.messages || [];
|
|
80
|
-
delete chat.messages;
|
|
81
|
-
for (const item of msgs) {
|
|
82
|
-
const message = item.message;
|
|
83
|
-
messages.push(message);
|
|
84
|
-
if (!chat.messages?.length) {
|
|
85
|
-
// keep only the most recent message in the chat array
|
|
86
|
-
chat.messages = [{ message }];
|
|
87
|
-
}
|
|
88
|
-
if (!message.key.fromMe && !chat.lastMessageRecvTimestamp) {
|
|
89
|
-
chat.lastMessageRecvTimestamp = toNumber(message.messageTimestamp);
|
|
90
|
-
}
|
|
91
|
-
if ((message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_BSP ||
|
|
92
|
-
message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_FB) &&
|
|
93
|
-
message.messageStubParameters?.[0]) {
|
|
94
|
-
contacts.push({
|
|
95
|
-
id: message.key.participant || message.key.remoteJid,
|
|
96
|
-
verifiedName: message.messageStubParameters?.[0]
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
chats.push(chat);
|
|
101
|
-
}
|
|
102
|
-
break;
|
|
103
|
-
case proto.HistorySync.HistorySyncType.PUSH_NAME:
|
|
104
|
-
for (const c of item.pushnames) {
|
|
105
|
-
contacts.push({ id: c.id, notify: c.pushname });
|
|
106
|
-
}
|
|
107
|
-
break;
|
|
37
|
+
const messages = [];
|
|
38
|
+
const contacts = [];
|
|
39
|
+
const chats = [];
|
|
40
|
+
const lidPnMappings = [];
|
|
41
|
+
logger?.trace({
|
|
42
|
+
progress: item.progress
|
|
43
|
+
}, 'processing history of type ' + item.syncType?.toString());
|
|
44
|
+
for (const m of item.phoneNumberToLidMappings || []) {
|
|
45
|
+
if (m.lidJid && m.pnJid) {
|
|
46
|
+
lidPnMappings.push({
|
|
47
|
+
lid: m.lidJid,
|
|
48
|
+
pn: m.pnJid
|
|
49
|
+
});
|
|
108
50
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
51
|
+
}
|
|
52
|
+
switch (item.syncType) {
|
|
53
|
+
case proto.HistorySync.HistorySyncType.INITIAL_BOOTSTRAP:
|
|
54
|
+
case proto.HistorySync.HistorySyncType.RECENT:
|
|
55
|
+
case proto.HistorySync.HistorySyncType.FULL:
|
|
56
|
+
case proto.HistorySync.HistorySyncType.ON_DEMAND:
|
|
57
|
+
for (const chat of item.conversations) {
|
|
58
|
+
contacts.push({
|
|
59
|
+
id: chat.id,
|
|
60
|
+
name: chat.displayName || chat.name || chat.username || undefined,
|
|
61
|
+
username: chat.username || undefined,
|
|
62
|
+
lid: chat.lidJid || chat.accountLid || undefined,
|
|
63
|
+
phoneNumber: chat.pnJid || undefined
|
|
64
|
+
});
|
|
65
|
+
const chatId = chat.id;
|
|
66
|
+
const isLid = isLidUser(chatId) || isHostedLidUser(chatId);
|
|
67
|
+
const isPn = isPnUser(chatId) || isHostedPnUser(chatId);
|
|
68
|
+
if (isLid && chat.pnJid) {
|
|
69
|
+
lidPnMappings.push({
|
|
70
|
+
lid: chatId,
|
|
71
|
+
pn: chat.pnJid
|
|
72
|
+
});
|
|
73
|
+
} else if (isPn && chat.lidJid) {
|
|
74
|
+
lidPnMappings.push({
|
|
75
|
+
lid: chat.lidJid,
|
|
76
|
+
pn: chatId
|
|
77
|
+
});
|
|
78
|
+
} else if (isLid && !chat.pnJid) {
|
|
79
|
+
const pnFromReceipt = extractPnFromMessages(chat.messages || []);
|
|
80
|
+
if (pnFromReceipt) {
|
|
81
|
+
lidPnMappings.push({
|
|
82
|
+
lid: chatId,
|
|
83
|
+
pn: pnFromReceipt
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const msgs = chat.messages || [];
|
|
88
|
+
delete chat.messages;
|
|
89
|
+
for (const item of msgs) {
|
|
90
|
+
const message = item.message;
|
|
91
|
+
messages.push(message);
|
|
92
|
+
if (!chat.messages?.length) {
|
|
93
|
+
chat.messages = [{
|
|
94
|
+
message
|
|
95
|
+
}];
|
|
96
|
+
}
|
|
97
|
+
if (!message.key.fromMe && !chat.lastMessageRecvTimestamp) {
|
|
98
|
+
chat.lastMessageRecvTimestamp = toNumber(message.messageTimestamp);
|
|
99
|
+
}
|
|
100
|
+
if ((message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_BSP || message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_FB) && message.messageStubParameters?.[0]) {
|
|
101
|
+
contacts.push({
|
|
102
|
+
id: message.key.participant || message.key.remoteJid,
|
|
103
|
+
verifiedName: message.messageStubParameters?.[0]
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
chats.push(chat);
|
|
108
|
+
}
|
|
109
|
+
break;
|
|
110
|
+
case proto.HistorySync.HistorySyncType.PUSH_NAME:
|
|
111
|
+
for (const c of item.pushnames) {
|
|
112
|
+
contacts.push({
|
|
113
|
+
id: c.id,
|
|
114
|
+
notify: c.pushname
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
chats,
|
|
121
|
+
contacts,
|
|
122
|
+
messages,
|
|
123
|
+
lidPnMappings,
|
|
124
|
+
pastParticipants: item.pastParticipants,
|
|
125
|
+
syncType: item.syncType,
|
|
126
|
+
progress: item.progress
|
|
127
|
+
};
|
|
118
128
|
};
|
|
119
129
|
export const downloadAndProcessHistorySyncNotification = async (msg, options, logger) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return processHistoryMessage(historyMsg, logger);
|
|
130
|
+
let historyMsg;
|
|
131
|
+
if (msg.initialHistBootstrapInlinePayload) {
|
|
132
|
+
historyMsg = proto.HistorySync.decode(await inflatePromise(msg.initialHistBootstrapInlinePayload));
|
|
133
|
+
} else {
|
|
134
|
+
historyMsg = await downloadHistory(msg, options);
|
|
135
|
+
}
|
|
136
|
+
return processHistoryMessage(historyMsg, logger);
|
|
128
137
|
};
|
|
129
|
-
export const getHistoryMsg =
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
138
|
+
export const getHistoryMsg = message => {
|
|
139
|
+
const normalizedContent = !!message ? normalizeMessageContent(message) : undefined;
|
|
140
|
+
const anyHistoryMsg = normalizedContent?.protocolMessage?.historySyncNotification;
|
|
141
|
+
return anyHistoryMsg;
|
|
133
142
|
};
|
|
134
|
-
//# sourceMappingURL=history.js.map
|
package/lib/Utils/index.js
CHANGED
|
@@ -17,6 +17,5 @@ export * from './process-message.js';
|
|
|
17
17
|
export * from './message-retry-manager.js';
|
|
18
18
|
export * from './browser-utils.js';
|
|
19
19
|
export * from './companion-reg-client-utils.js';
|
|
20
|
-
export * from './identity-change-handler.js';
|
|
21
20
|
export * from './stanza-ack.js';
|
|
22
|
-
|
|
21
|
+
export * from './use-sqlite-auth-state.js';
|
|
@@ -1,85 +1,86 @@
|
|
|
1
1
|
import { prepareWAMessageMedia } from './messages.js';
|
|
2
2
|
import { extractImageThumb, getHttpStream } from './messages-media.js';
|
|
3
3
|
const THUMBNAIL_WIDTH_PX = 192;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
const getCompressedJpegThumbnail = async (url, {
|
|
5
|
+
thumbnailWidth,
|
|
6
|
+
fetchOpts
|
|
7
|
+
}) => {
|
|
8
|
+
const stream = await getHttpStream(url, fetchOpts);
|
|
9
|
+
const result = await extractImageThumb(stream, thumbnailWidth);
|
|
10
|
+
return result;
|
|
9
11
|
};
|
|
10
|
-
/**
|
|
11
|
-
* Given a piece of text, checks for any URL present, generates link preview for the same and returns it
|
|
12
|
-
* Return undefined if the fetch failed or no URL was found
|
|
13
|
-
* @param text first matched URL in text
|
|
14
|
-
* @returns the URL info required to generate link preview
|
|
15
|
-
*/
|
|
16
12
|
export const getUrlInfo = async (text, opts = {
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
thumbnailWidth: THUMBNAIL_WIDTH_PX,
|
|
14
|
+
fetchOpts: {
|
|
15
|
+
timeout: 3000
|
|
16
|
+
}
|
|
19
17
|
}) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
try {
|
|
19
|
+
let retries = 0;
|
|
20
|
+
const maxRetry = 5;
|
|
21
|
+
const {
|
|
22
|
+
getLinkPreview
|
|
23
|
+
} = await import('link-preview-js');
|
|
24
|
+
let previewLink = text;
|
|
25
|
+
if (!text.startsWith('https://') && !text.startsWith('http://')) {
|
|
26
|
+
previewLink = 'https://' + previewLink;
|
|
27
|
+
}
|
|
28
|
+
const info = await getLinkPreview(previewLink, {
|
|
29
|
+
...opts.fetchOpts,
|
|
30
|
+
followRedirects: 'follow',
|
|
31
|
+
handleRedirects: (baseURL, forwardedURL) => {
|
|
32
|
+
const urlObj = new URL(baseURL);
|
|
33
|
+
const forwardedURLObj = new URL(forwardedURL);
|
|
34
|
+
if (retries >= maxRetry) {
|
|
35
|
+
return false;
|
|
28
36
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
if (forwardedURLObj.hostname === urlObj.hostname || forwardedURLObj.hostname === 'www.' + urlObj.hostname || 'www.' + forwardedURLObj.hostname === urlObj.hostname) {
|
|
38
|
+
retries += 1;
|
|
39
|
+
return true;
|
|
40
|
+
} else {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
headers: opts.fetchOpts?.headers
|
|
45
|
+
});
|
|
46
|
+
if (info && 'title' in info && info.title) {
|
|
47
|
+
const [image] = info.images;
|
|
48
|
+
const urlInfo = {
|
|
49
|
+
'canonical-url': info.url,
|
|
50
|
+
'matched-text': text,
|
|
51
|
+
title: info.title,
|
|
52
|
+
description: info.description,
|
|
53
|
+
originalThumbnailUrl: image
|
|
54
|
+
};
|
|
55
|
+
if (opts.uploadImage) {
|
|
56
|
+
const {
|
|
57
|
+
imageMessage
|
|
58
|
+
} = await prepareWAMessageMedia({
|
|
59
|
+
image: {
|
|
60
|
+
url: image
|
|
61
|
+
}
|
|
62
|
+
}, {
|
|
63
|
+
upload: opts.uploadImage,
|
|
64
|
+
mediaTypeOverride: 'thumbnail-link',
|
|
65
|
+
options: opts.fetchOpts
|
|
49
66
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const { imageMessage } = await prepareWAMessageMedia({ image: { url: image } }, {
|
|
61
|
-
upload: opts.uploadImage,
|
|
62
|
-
mediaTypeOverride: 'thumbnail-link',
|
|
63
|
-
options: opts.fetchOpts
|
|
64
|
-
});
|
|
65
|
-
urlInfo.jpegThumbnail = imageMessage?.jpegThumbnail ? Buffer.from(imageMessage.jpegThumbnail) : undefined;
|
|
66
|
-
urlInfo.highQualityThumbnail = imageMessage || undefined;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
try {
|
|
70
|
-
urlInfo.jpegThumbnail = image ? (await getCompressedJpegThumbnail(image, opts)).buffer : undefined;
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
opts.logger?.debug({ err: error.stack, url: previewLink }, 'error in generating thumbnail');
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return urlInfo;
|
|
67
|
+
urlInfo.jpegThumbnail = imageMessage?.jpegThumbnail ? Buffer.from(imageMessage.jpegThumbnail) : undefined;
|
|
68
|
+
urlInfo.highQualityThumbnail = imageMessage || undefined;
|
|
69
|
+
} else {
|
|
70
|
+
try {
|
|
71
|
+
urlInfo.jpegThumbnail = image ? (await getCompressedJpegThumbnail(image, opts)).buffer : undefined;
|
|
72
|
+
} catch (error) {
|
|
73
|
+
opts.logger?.debug({
|
|
74
|
+
err: error.stack,
|
|
75
|
+
url: previewLink
|
|
76
|
+
}, 'error in generating thumbnail');
|
|
77
77
|
}
|
|
78
|
+
}
|
|
79
|
+
return urlInfo;
|
|
78
80
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
if (!error.message.includes('receive a valid')) {
|
|
83
|
+
throw error;
|
|
83
84
|
}
|
|
85
|
+
}
|
|
84
86
|
};
|
|
85
|
-
//# sourceMappingURL=link-preview.js.map
|
package/lib/Utils/logger.js
CHANGED
package/lib/Utils/lt-hash.js
CHANGED
|
@@ -1,8 +1,2 @@
|
|
|
1
1
|
import { LTHashAntiTampering } from 'whatsapp-rust-bridge';
|
|
2
|
-
/**
|
|
3
|
-
* LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data
|
|
4
|
-
* over a series of mutations. You can add/remove mutations and it'll return a hash equal to
|
|
5
|
-
* if the same series of mutations was made sequentially.
|
|
6
|
-
*/
|
|
7
2
|
export const LT_HASH_ANTI_TAMPERING = new LTHashAntiTampering();
|
|
8
|
-
//# sourceMappingURL=lt-hash.js.map
|
package/lib/Utils/make-mutex.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import { Mutex as AsyncMutex } from 'async-mutex';
|
|
2
2
|
export const makeMutex = () => {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
const mutex = new AsyncMutex();
|
|
4
|
+
return {
|
|
5
|
+
mutex(code) {
|
|
6
|
+
return mutex.runExclusive(code);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
9
|
};
|
|
10
10
|
export const makeKeyedMutex = () => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
11
|
+
const map = new Map();
|
|
12
|
+
return {
|
|
13
|
+
async mutex(key, task) {
|
|
14
|
+
let entry = map.get(key);
|
|
15
|
+
if (!entry) {
|
|
16
|
+
entry = {
|
|
17
|
+
mutex: new AsyncMutex(),
|
|
18
|
+
refCount: 0
|
|
19
|
+
};
|
|
20
|
+
map.set(key, entry);
|
|
21
|
+
}
|
|
22
|
+
entry.refCount++;
|
|
23
|
+
try {
|
|
24
|
+
return await entry.mutex.runExclusive(task);
|
|
25
|
+
} finally {
|
|
26
|
+
entry.refCount--;
|
|
27
|
+
if (entry.refCount === 0 && map.get(key) === entry) {
|
|
28
|
+
map.delete(key);
|
|
30
29
|
}
|
|
31
|
-
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
32
33
|
};
|
|
33
|
-
//# sourceMappingURL=make-mutex.js.map
|