@hbmodsofc/baileys 1.5.2 → 1.7.7
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/LICENSE +1 -1
- package/WAProto/index.js +19671 -152026
- package/lib/Defaults/index.d.ts +12 -8
- package/lib/Defaults/index.js +90 -124
- package/lib/Signal/Group/group_cipher.d.ts +0 -1
- package/lib/Signal/Group/group_cipher.js +28 -39
- package/lib/Signal/Group/sender-chain-key.d.ts +1 -1
- package/lib/Signal/Group/sender-chain-key.js +9 -2
- package/lib/Signal/Group/sender-key-distribution-message.js +3 -3
- package/lib/Signal/Group/sender-key-message.js +3 -3
- package/lib/Signal/Group/sender-key-state.d.ts +4 -4
- package/lib/Signal/Group/sender-key-state.js +47 -16
- package/lib/Signal/libsignal.d.ts +7 -3
- package/lib/Signal/libsignal.js +224 -39
- package/lib/Signal/lid-mapping.d.ts +26 -0
- package/lib/Signal/lid-mapping.js +146 -0
- package/lib/Socket/Client/index.d.ts +2 -3
- package/lib/Socket/Client/index.js +2 -3
- package/lib/Socket/Client/{abstract-socket-client.d.ts → types.d.ts} +1 -3
- package/lib/Socket/Client/{web-socket-client.d.ts → websocket.d.ts} +1 -1
- package/lib/Socket/Client/{web-socket-client.js → websocket.js} +10 -16
- package/lib/Socket/business.d.ts +94 -78
- package/lib/Socket/business.js +130 -11
- package/lib/Socket/chats.d.ts +63 -233
- package/lib/Socket/chats.js +234 -184
- package/lib/Socket/communities.d.ts +232 -0
- package/lib/Socket/communities.js +402 -0
- package/lib/Socket/groups.d.ts +62 -41
- package/lib/Socket/groups.js +76 -64
- package/lib/Socket/index.d.ts +129 -83
- package/lib/Socket/index.js +13 -6
- package/lib/Socket/messages-recv.d.ts +59 -48
- package/lib/Socket/messages-recv.js +516 -371
- package/lib/Socket/messages-send.d.ts +86 -67
- package/lib/Socket/messages-send.js +1091 -1
- package/lib/Socket/mex.d.ts +2 -0
- package/lib/Socket/mex.js +45 -0
- package/lib/Socket/newsletter.d.ts +76 -64
- package/lib/Socket/newsletter.js +184 -1
- package/lib/Socket/socket.d.ts +19 -13
- package/lib/Socket/socket.js +805 -1
- package/lib/Types/Auth.d.ts +4 -10
- package/lib/Types/Bussines.d.ts +24 -0
- package/lib/Types/Bussines.js +2 -0
- package/lib/Types/Call.d.ts +1 -1
- package/lib/Types/Chat.d.ts +29 -9
- package/lib/Types/Chat.js +7 -1
- package/lib/Types/Contact.d.ts +5 -1
- package/lib/Types/Events.d.ts +55 -14
- package/lib/Types/GroupMetadata.d.ts +15 -5
- package/lib/Types/Label.d.ts +11 -0
- package/lib/Types/Label.js +1 -1
- package/lib/Types/LabelAssociation.js +1 -1
- package/lib/Types/Message.d.ts +75 -49
- package/lib/Types/Message.js +10 -7
- package/lib/Types/Newsletter.d.ts +129 -98
- package/lib/Types/Newsletter.js +33 -38
- package/lib/Types/Product.d.ts +1 -1
- package/lib/Types/Signal.d.ts +29 -1
- package/lib/Types/Socket.d.ts +48 -22
- package/lib/Types/State.d.ts +13 -2
- package/lib/Types/State.js +12 -0
- package/lib/Types/USync.d.ts +1 -1
- package/lib/Types/index.d.ts +10 -3
- package/lib/Types/index.js +2 -2
- package/lib/Utils/auth-utils.d.ts +3 -3
- package/lib/Utils/auth-utils.js +378 -102
- package/lib/Utils/baileys-event-stream.js +1 -1
- package/lib/Utils/business.d.ts +2 -2
- package/lib/Utils/business.js +19 -13
- package/lib/Utils/chat-utils.d.ts +21 -22
- package/lib/Utils/chat-utils.js +201 -154
- package/lib/Utils/crypto.d.ts +18 -19
- package/lib/Utils/crypto.js +78 -37
- package/lib/Utils/decode-wa-message.d.ts +34 -7
- package/lib/Utils/decode-wa-message.js +138 -66
- package/lib/Utils/event-buffer.d.ts +6 -8
- package/lib/Utils/event-buffer.js +81 -43
- package/lib/Utils/generics.d.ts +27 -27
- package/lib/Utils/generics.js +128 -133
- package/lib/Utils/history.d.ts +9 -5
- package/lib/Utils/history.js +17 -23
- package/lib/Utils/index.d.ts +2 -0
- package/lib/Utils/index.js +2 -0
- package/lib/Utils/lidToJid-test.d.ts +11 -0
- package/lib/Utils/lidToJid-test.js +27 -0
- package/lib/Utils/link-preview.d.ts +4 -4
- package/lib/Utils/link-preview.js +40 -12
- package/lib/Utils/logger.d.ts +11 -3
- package/lib/Utils/lt-hash.d.ts +8 -8
- package/lib/Utils/lt-hash.js +23 -24
- package/lib/Utils/make-mutex.d.ts +2 -2
- package/lib/Utils/make-mutex.js +3 -2
- package/lib/Utils/message-retry-manager.d.ts +81 -0
- package/lib/Utils/message-retry-manager.js +152 -0
- package/lib/Utils/messages-media.d.ts +37 -41
- package/lib/Utils/messages-media.js +252 -368
- package/lib/Utils/messages.d.ts +13 -15
- package/lib/Utils/messages.js +274 -261
- package/lib/Utils/noise-handler.d.ts +13 -15
- package/lib/Utils/noise-handler.js +20 -26
- package/lib/Utils/process-message.d.ts +9 -8
- package/lib/Utils/process-message.js +157 -93
- package/lib/Utils/signal.d.ts +6 -5
- package/lib/Utils/signal.js +37 -29
- package/lib/Utils/use-multi-file-auth-state.d.ts +1 -2
- package/lib/Utils/use-multi-file-auth-state.js +12 -7
- package/lib/Utils/validate-connection.d.ts +5 -6
- package/lib/Utils/validate-connection.js +39 -97
- package/lib/WABinary/constants.d.ts +24 -27
- package/lib/WABinary/constants.js +1276 -13
- package/lib/WABinary/decode.d.ts +3 -4
- package/lib/WABinary/decode.js +28 -14
- package/lib/WABinary/encode.d.ts +1 -2
- package/lib/WABinary/encode.js +134 -147
- package/lib/WABinary/generic-utils.d.ts +4 -7
- package/lib/WABinary/generic-utils.js +40 -125
- package/lib/WABinary/jid-utils.d.ts +13 -8
- package/lib/WABinary/jid-utils.js +27 -16
- package/lib/WAM/BinaryInfo.d.ts +2 -11
- package/lib/WAM/constants.d.ts +3 -2
- package/lib/WAM/constants.js +2252 -2359
- package/lib/WAM/encode.d.ts +1 -2
- package/lib/WAM/encode.js +8 -11
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +2 -2
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +3 -4
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +2 -2
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +5 -5
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +2 -2
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +5 -5
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +2 -2
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +5 -6
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +2 -2
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +1 -1
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +4 -3
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +11 -3
- package/lib/WAUSync/USyncQuery.d.ts +2 -2
- package/lib/WAUSync/USyncQuery.js +19 -15
- package/lib/WAUSync/USyncUser.d.ts +5 -5
- package/lib/WAUSync/index.d.ts +1 -1
- package/lib/WAUSync/index.js +1 -1
- package/package.json +102 -102
- package/lib/Defaults/baileys-version.json +0 -3
- package/lib/Defaults/phonenumber-mcc.json +0 -223
- package/lib/Signal/Group/queue-job.d.ts +0 -1
- package/lib/Signal/Group/queue-job.js +0 -57
- package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
- package/lib/Socket/Client/mobile-socket-client.js +0 -65
- package/lib/Socket/hbmods.d.ts +0 -253
- package/lib/Socket/hbmods.js +0 -1
- package/lib/Socket/registration.d.ts +0 -267
- package/lib/Socket/registration.js +0 -166
- package/lib/Socket/usync.d.ts +0 -36
- package/lib/Socket/usync.js +0 -70
- /package/lib/Socket/Client/{abstract-socket-client.js → types.js} +0 -0
package/lib/Utils/signal.js
CHANGED
|
@@ -4,8 +4,14 @@ exports.getNextPreKeysNode = exports.getNextPreKeys = exports.extractDeviceJids
|
|
|
4
4
|
const Defaults_1 = require("../Defaults");
|
|
5
5
|
const WABinary_1 = require("../WABinary");
|
|
6
6
|
const crypto_1 = require("./crypto");
|
|
7
|
-
const lodash_1 = require("lodash")
|
|
8
7
|
const generics_1 = require("./generics");
|
|
8
|
+
function chunk(array, size) {
|
|
9
|
+
const chunks = [];
|
|
10
|
+
for (let i = 0; i < array.length; i += size) {
|
|
11
|
+
chunks.push(array.slice(i, i + size));
|
|
12
|
+
}
|
|
13
|
+
return chunks;
|
|
14
|
+
}
|
|
9
15
|
const createSignalIdentity = (wid, accountSignatureKey) => {
|
|
10
16
|
return {
|
|
11
17
|
identifier: { name: wid, deviceId: 0 },
|
|
@@ -34,7 +40,7 @@ const generateOrGetPreKeys = (creds, range) => {
|
|
|
34
40
|
return {
|
|
35
41
|
newPreKeys,
|
|
36
42
|
lastPreKeyId,
|
|
37
|
-
preKeysRange: [creds.firstUnuploadedPreKeyId, range]
|
|
43
|
+
preKeysRange: [creds.firstUnuploadedPreKeyId, range]
|
|
38
44
|
};
|
|
39
45
|
};
|
|
40
46
|
exports.generateOrGetPreKeys = generateOrGetPreKeys;
|
|
@@ -58,62 +64,64 @@ const xmppPreKey = (pair, id) => ({
|
|
|
58
64
|
});
|
|
59
65
|
exports.xmppPreKey = xmppPreKey;
|
|
60
66
|
const parseAndInjectE2ESessions = async (node, repository) => {
|
|
61
|
-
const extractKey = (key) =>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
const extractKey = (key) => key
|
|
68
|
+
? {
|
|
69
|
+
keyId: (0, WABinary_1.getBinaryNodeChildUInt)(key, 'id', 3),
|
|
70
|
+
publicKey: (0, crypto_1.generateSignalPubKey)((0, WABinary_1.getBinaryNodeChildBuffer)(key, 'value')),
|
|
71
|
+
signature: (0, WABinary_1.getBinaryNodeChildBuffer)(key, 'signature')
|
|
72
|
+
}
|
|
73
|
+
: undefined;
|
|
74
|
+
const nodes = (0, WABinary_1.getBinaryNodeChildren)((0, WABinary_1.getBinaryNodeChild)(node, 'list'), 'user');
|
|
67
75
|
for (const node of nodes) {
|
|
68
|
-
WABinary_1.assertNodeErrorFree(node)
|
|
76
|
+
(0, WABinary_1.assertNodeErrorFree)(node);
|
|
69
77
|
}
|
|
70
78
|
// Most of the work in repository.injectE2ESession is CPU intensive, not IO
|
|
71
79
|
// So Promise.all doesn't really help here,
|
|
72
80
|
// but blocks even loop if we're using it inside keys.transaction, and it makes it "sync" actually
|
|
73
81
|
// This way we chunk it in smaller parts and between those parts we can yield to the event loop
|
|
74
82
|
// It's rare case when you need to E2E sessions for so many users, but it's possible
|
|
75
|
-
const chunkSize = 100
|
|
76
|
-
const chunks =
|
|
83
|
+
const chunkSize = 100;
|
|
84
|
+
const chunks = chunk(nodes, chunkSize);
|
|
77
85
|
for (const nodesChunk of chunks) {
|
|
78
86
|
await Promise.all(nodesChunk.map(async (node) => {
|
|
79
|
-
const signedKey = WABinary_1.getBinaryNodeChild(node, 'skey')
|
|
80
|
-
const key = WABinary_1.getBinaryNodeChild(node, 'key')
|
|
81
|
-
const identity = WABinary_1.getBinaryNodeChildBuffer(node, 'identity')
|
|
82
|
-
const jid = node.attrs.jid
|
|
83
|
-
const registrationId = WABinary_1.getBinaryNodeChildUInt(node, 'registration', 4)
|
|
87
|
+
const signedKey = (0, WABinary_1.getBinaryNodeChild)(node, 'skey');
|
|
88
|
+
const key = (0, WABinary_1.getBinaryNodeChild)(node, 'key');
|
|
89
|
+
const identity = (0, WABinary_1.getBinaryNodeChildBuffer)(node, 'identity');
|
|
90
|
+
const jid = node.attrs.jid;
|
|
91
|
+
const registrationId = (0, WABinary_1.getBinaryNodeChildUInt)(node, 'registration', 4);
|
|
84
92
|
await repository.injectE2ESession({
|
|
85
93
|
jid,
|
|
86
94
|
session: {
|
|
87
95
|
registrationId: registrationId,
|
|
88
|
-
identityKey: crypto_1.generateSignalPubKey(identity),
|
|
96
|
+
identityKey: (0, crypto_1.generateSignalPubKey)(identity),
|
|
89
97
|
signedPreKey: extractKey(signedKey),
|
|
90
98
|
preKey: extractKey(key)
|
|
91
99
|
}
|
|
92
|
-
})
|
|
93
|
-
}))
|
|
100
|
+
});
|
|
101
|
+
}));
|
|
94
102
|
}
|
|
95
|
-
}
|
|
103
|
+
};
|
|
96
104
|
exports.parseAndInjectE2ESessions = parseAndInjectE2ESessions;
|
|
97
105
|
const extractDeviceJids = (result, myJid, excludeZeroDevices) => {
|
|
98
|
-
const { user: myUser, device: myDevice } = WABinary_1.jidDecode(myJid)
|
|
99
|
-
const extracted = []
|
|
106
|
+
const { user: myUser, device: myDevice } = (0, WABinary_1.jidDecode)(myJid);
|
|
107
|
+
const extracted = [];
|
|
100
108
|
for (const userResult of result) {
|
|
101
|
-
const { devices, id } = userResult
|
|
102
|
-
const { user } = WABinary_1.jidDecode(id)
|
|
103
|
-
const deviceList = devices?.deviceList
|
|
109
|
+
const { devices, id } = userResult;
|
|
110
|
+
const { user } = (0, WABinary_1.jidDecode)(id);
|
|
111
|
+
const deviceList = devices?.deviceList;
|
|
104
112
|
if (Array.isArray(deviceList)) {
|
|
105
113
|
for (const { id: device, keyIndex } of deviceList) {
|
|
106
114
|
if ((!excludeZeroDevices || device !== 0) && // if zero devices are not-excluded, or device is non zero
|
|
107
115
|
(myUser !== user || myDevice !== device) && // either different user or if me user, not this device
|
|
108
116
|
(device === 0 || !!keyIndex) // ensure that "key-index" is specified for "non-zero" devices, produces a bad req otherwise
|
|
109
117
|
) {
|
|
110
|
-
extracted.push({ user, device })
|
|
118
|
+
extracted.push({ user, device });
|
|
111
119
|
}
|
|
112
120
|
}
|
|
113
121
|
}
|
|
114
122
|
}
|
|
115
|
-
return extracted
|
|
116
|
-
}
|
|
123
|
+
return extracted;
|
|
124
|
+
};
|
|
117
125
|
exports.extractDeviceJids = extractDeviceJids;
|
|
118
126
|
/**
|
|
119
127
|
* get the next N keys for upload or processing
|
|
@@ -138,7 +146,7 @@ const getNextPreKeysNode = async (state, count) => {
|
|
|
138
146
|
attrs: {
|
|
139
147
|
xmlns: 'encrypt',
|
|
140
148
|
type: 'set',
|
|
141
|
-
to: WABinary_1.S_WHATSAPP_NET
|
|
149
|
+
to: WABinary_1.S_WHATSAPP_NET
|
|
142
150
|
},
|
|
143
151
|
content: [
|
|
144
152
|
{ tag: 'registration', attrs: {}, content: (0, generics_1.encodeBigEndian)(creds.registrationId) },
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthenticationState } from '../Types';
|
|
1
|
+
import type { AuthenticationState } from '../Types';
|
|
2
2
|
/**
|
|
3
3
|
* stores the full authentication state in a single folder.
|
|
4
4
|
* Far more efficient than singlefileauthstate
|
|
@@ -10,4 +10,3 @@ export declare const useMultiFileAuthState: (folder: string) => Promise<{
|
|
|
10
10
|
state: AuthenticationState;
|
|
11
11
|
saveCreds: () => Promise<void>;
|
|
12
12
|
}>;
|
|
13
|
-
|
|
@@ -4,10 +4,15 @@ exports.useMultiFileAuthState = void 0;
|
|
|
4
4
|
const async_mutex_1 = require("async-mutex");
|
|
5
5
|
const promises_1 = require("fs/promises");
|
|
6
6
|
const path_1 = require("path");
|
|
7
|
-
const
|
|
7
|
+
const index_js_1 = require("../../WAProto/index.js");
|
|
8
8
|
const auth_utils_1 = require("./auth-utils");
|
|
9
9
|
const generics_1 = require("./generics");
|
|
10
|
+
// We need to lock files due to the fact that we are using async functions to read and write files
|
|
11
|
+
// https://github.com/WhiskeySockets/Baileys/issues/794
|
|
12
|
+
// https://github.com/nodejs/node/issues/26338
|
|
13
|
+
// Use a Map to store mutexes for each file path
|
|
10
14
|
const fileLocks = new Map();
|
|
15
|
+
// Get or create a mutex for a specific file path
|
|
11
16
|
const getFileLock = (path) => {
|
|
12
17
|
let mutex = fileLocks.get(path);
|
|
13
18
|
if (!mutex) {
|
|
@@ -24,6 +29,7 @@ const getFileLock = (path) => {
|
|
|
24
29
|
* Would recommend writing an auth state for use with a proper SQL or No-SQL DB
|
|
25
30
|
* */
|
|
26
31
|
const useMultiFileAuthState = async (folder) => {
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
33
|
const writeData = async (data, file) => {
|
|
28
34
|
const filePath = (0, path_1.join)(folder, fixFileName(file));
|
|
29
35
|
const mutex = getFileLock(filePath);
|
|
@@ -62,15 +68,14 @@ const useMultiFileAuthState = async (folder) => {
|
|
|
62
68
|
try {
|
|
63
69
|
await (0, promises_1.unlink)(filePath);
|
|
64
70
|
}
|
|
65
|
-
catch
|
|
71
|
+
catch {
|
|
66
72
|
}
|
|
67
73
|
finally {
|
|
68
74
|
release();
|
|
69
75
|
}
|
|
70
76
|
});
|
|
71
77
|
}
|
|
72
|
-
catch
|
|
73
|
-
}
|
|
78
|
+
catch { }
|
|
74
79
|
};
|
|
75
80
|
const folderInfo = await (0, promises_1.stat)(folder).catch(() => { });
|
|
76
81
|
if (folderInfo) {
|
|
@@ -81,8 +86,8 @@ const useMultiFileAuthState = async (folder) => {
|
|
|
81
86
|
else {
|
|
82
87
|
await (0, promises_1.mkdir)(folder, { recursive: true });
|
|
83
88
|
}
|
|
84
|
-
const fixFileName = (file) =>
|
|
85
|
-
const creds = await readData('creds.json') || (0, auth_utils_1.initAuthCreds)();
|
|
89
|
+
const fixFileName = (file) => file?.replace(/\//g, '__')?.replace(/:/g, '-');
|
|
90
|
+
const creds = (await readData('creds.json')) || (0, auth_utils_1.initAuthCreds)();
|
|
86
91
|
return {
|
|
87
92
|
state: {
|
|
88
93
|
creds,
|
|
@@ -92,7 +97,7 @@ const useMultiFileAuthState = async (folder) => {
|
|
|
92
97
|
await Promise.all(ids.map(async (id) => {
|
|
93
98
|
let value = await readData(`${type}-${id}.json`);
|
|
94
99
|
if (type === 'app-state-sync-key' && value) {
|
|
95
|
-
value =
|
|
100
|
+
value = index_js_1.proto.Message.AppStateSyncKeyData.create(value);
|
|
96
101
|
}
|
|
97
102
|
data[id] = value;
|
|
98
103
|
}));
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { proto } from '../../WAProto';
|
|
1
|
+
import { proto } from '../../WAProto/index.js';
|
|
2
2
|
import type { AuthenticationCreds, SignalCreds, SocketConfig } from '../Types';
|
|
3
|
-
import { BinaryNode } from '../WABinary';
|
|
4
|
-
export declare const generateMobileNode: (config: SocketConfig) => proto.IClientPayload;
|
|
3
|
+
import { type BinaryNode } from '../WABinary';
|
|
5
4
|
export declare const generateLoginNode: (userJid: string, config: SocketConfig) => proto.IClientPayload;
|
|
6
5
|
export declare const generateRegistrationNode: ({ registrationId, signedPreKey, signedIdentityKey }: SignalCreds, config: SocketConfig) => proto.ClientPayload;
|
|
7
|
-
export declare const configureSuccessfulPairing: (stanza: BinaryNode, { advSecretKey, signedIdentityKey, signalIdentities }: Pick<AuthenticationCreds,
|
|
6
|
+
export declare const configureSuccessfulPairing: (stanza: BinaryNode, { advSecretKey, signedIdentityKey, signalIdentities }: Pick<AuthenticationCreds, "advSecretKey" | "signedIdentityKey" | "signalIdentities">) => {
|
|
8
7
|
creds: Partial<AuthenticationCreds>;
|
|
9
8
|
reply: BinaryNode;
|
|
10
|
-
};
|
|
11
|
-
export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => Uint8Array
|
|
9
|
+
};
|
|
10
|
+
export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => Uint8Array<ArrayBufferLike>;
|
|
@@ -3,109 +3,79 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.encodeSignedDeviceIdentity = exports.configureSuccessfulPairing = exports.generateRegistrationNode = exports.generateLoginNode = void 0;
|
|
4
4
|
const boom_1 = require("@hapi/boom");
|
|
5
5
|
const crypto_1 = require("crypto");
|
|
6
|
-
const
|
|
6
|
+
const index_js_1 = require("../../WAProto/index.js");
|
|
7
7
|
const Defaults_1 = require("../Defaults");
|
|
8
8
|
const WABinary_1 = require("../WABinary");
|
|
9
9
|
const crypto_2 = require("./crypto");
|
|
10
10
|
const generics_1 = require("./generics");
|
|
11
11
|
const signal_1 = require("./signal");
|
|
12
|
-
|
|
13
12
|
const getUserAgent = (config) => {
|
|
14
13
|
return {
|
|
15
14
|
appVersion: {
|
|
16
15
|
primary: config.version[0],
|
|
17
16
|
secondary: config.version[1],
|
|
18
|
-
tertiary: config.version[2]
|
|
17
|
+
tertiary: config.version[2]
|
|
19
18
|
},
|
|
20
|
-
platform:
|
|
21
|
-
releaseChannel:
|
|
19
|
+
platform: index_js_1.proto.ClientPayload.UserAgent.Platform.WEB,
|
|
20
|
+
releaseChannel: index_js_1.proto.ClientPayload.UserAgent.ReleaseChannel.RELEASE,
|
|
22
21
|
osVersion: '0.1',
|
|
23
22
|
device: 'Desktop',
|
|
24
23
|
osBuildNumber: '0.1',
|
|
25
24
|
localeLanguageIso6391: 'en',
|
|
26
25
|
mnc: '000',
|
|
27
26
|
mcc: '000',
|
|
28
|
-
localeCountryIso31661Alpha2: config.countryCode
|
|
27
|
+
localeCountryIso31661Alpha2: config.countryCode
|
|
29
28
|
};
|
|
30
29
|
};
|
|
31
|
-
|
|
32
30
|
const PLATFORM_MAP = {
|
|
33
|
-
'Mac OS':
|
|
34
|
-
|
|
31
|
+
'Mac OS': index_js_1.proto.ClientPayload.WebInfo.WebSubPlatform.DARWIN,
|
|
32
|
+
Windows: index_js_1.proto.ClientPayload.WebInfo.WebSubPlatform.WIN32
|
|
35
33
|
};
|
|
36
|
-
|
|
37
34
|
const getWebInfo = (config) => {
|
|
38
|
-
let webSubPlatform =
|
|
39
|
-
if (config.syncFullHistory && PLATFORM_MAP[config.browser[0]]
|
|
35
|
+
let webSubPlatform = index_js_1.proto.ClientPayload.WebInfo.WebSubPlatform.WEB_BROWSER;
|
|
36
|
+
if (config.syncFullHistory && PLATFORM_MAP[config.browser[0]]) {
|
|
40
37
|
webSubPlatform = PLATFORM_MAP[config.browser[0]];
|
|
41
38
|
}
|
|
42
39
|
return { webSubPlatform };
|
|
43
40
|
};
|
|
44
|
-
|
|
45
41
|
const getClientPayload = (config) => {
|
|
46
42
|
const payload = {
|
|
47
|
-
connectType:
|
|
48
|
-
connectReason:
|
|
49
|
-
userAgent: getUserAgent(config)
|
|
43
|
+
connectType: index_js_1.proto.ClientPayload.ConnectType.WIFI_UNKNOWN,
|
|
44
|
+
connectReason: index_js_1.proto.ClientPayload.ConnectReason.USER_ACTIVATED,
|
|
45
|
+
userAgent: getUserAgent(config)
|
|
50
46
|
};
|
|
51
47
|
payload.webInfo = getWebInfo(config);
|
|
52
48
|
return payload;
|
|
53
49
|
};
|
|
54
|
-
|
|
55
50
|
const generateLoginNode = (userJid, config) => {
|
|
56
51
|
const { user, device } = (0, WABinary_1.jidDecode)(userJid);
|
|
57
52
|
const payload = {
|
|
58
53
|
...getClientPayload(config),
|
|
59
|
-
passive:
|
|
54
|
+
passive: false,
|
|
60
55
|
pull: true,
|
|
61
56
|
username: +user,
|
|
62
|
-
device: device
|
|
63
|
-
lidDbMigrated: false
|
|
57
|
+
device: device
|
|
64
58
|
};
|
|
65
|
-
return
|
|
59
|
+
return index_js_1.proto.ClientPayload.create(payload);
|
|
66
60
|
};
|
|
67
61
|
exports.generateLoginNode = generateLoginNode;
|
|
68
|
-
|
|
69
62
|
const getPlatformType = (platform) => {
|
|
70
63
|
const platformType = platform.toUpperCase();
|
|
71
|
-
return
|
|
64
|
+
return (index_js_1.proto.DeviceProps.PlatformType[platformType] ||
|
|
65
|
+
index_js_1.proto.DeviceProps.PlatformType.DESKTOP);
|
|
72
66
|
};
|
|
73
|
-
|
|
74
67
|
const generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentityKey }, config) => {
|
|
68
|
+
// the app version needs to be md5 hashed
|
|
69
|
+
// and passed in
|
|
75
70
|
const appVersionBuf = (0, crypto_1.createHash)('md5')
|
|
76
|
-
.update(config.version.join('.'))
|
|
71
|
+
.update(config.version.join('.')) // join as string
|
|
77
72
|
.digest();
|
|
78
|
-
|
|
79
73
|
const companion = {
|
|
80
74
|
os: config.browser[0],
|
|
81
75
|
platformType: getPlatformType(config.browser[1]),
|
|
82
|
-
requireFullSync: config.syncFullHistory
|
|
83
|
-
historySyncConfig: {
|
|
84
|
-
storageQuotaMb: 10240,
|
|
85
|
-
inlineInitialPayloadInE2EeMsg: true,
|
|
86
|
-
recentSyncDaysLimit: undefined,
|
|
87
|
-
supportCallLogHistory: false,
|
|
88
|
-
supportBotUserAgentChatHistory: true,
|
|
89
|
-
supportCagReactionsAndPolls: true,
|
|
90
|
-
supportBizHostedMsg: true,
|
|
91
|
-
supportRecentSyncChunkMessageCountTuning: true,
|
|
92
|
-
supportHostedGroupMsg: true,
|
|
93
|
-
supportFbidBotChatHistory: true,
|
|
94
|
-
supportAddOnHistorySyncMigration: undefined,
|
|
95
|
-
supportMessageAssociation: true,
|
|
96
|
-
supportGroupHistory: false,
|
|
97
|
-
onDemandReady: undefined,
|
|
98
|
-
supportGuestChat: undefined
|
|
99
|
-
},
|
|
100
|
-
version: {
|
|
101
|
-
primary: 10,
|
|
102
|
-
secondary: 15,
|
|
103
|
-
tertiary: 7
|
|
104
|
-
}
|
|
76
|
+
requireFullSync: config.syncFullHistory
|
|
105
77
|
};
|
|
106
|
-
|
|
107
|
-
const companionProto = WAProto_1.proto.DeviceProps.encode(companion).finish();
|
|
108
|
-
|
|
78
|
+
const companionProto = index_js_1.proto.DeviceProps.encode(companion).finish();
|
|
109
79
|
const registerPayload = {
|
|
110
80
|
...getClientPayload(config),
|
|
111
81
|
passive: false,
|
|
@@ -118,13 +88,12 @@ const generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentity
|
|
|
118
88
|
eIdent: signedIdentityKey.public,
|
|
119
89
|
eSkeyId: (0, generics_1.encodeBigEndian)(signedPreKey.keyId, 3),
|
|
120
90
|
eSkeyVal: signedPreKey.keyPair.public,
|
|
121
|
-
eSkeySig: signedPreKey.signature
|
|
122
|
-
}
|
|
91
|
+
eSkeySig: signedPreKey.signature
|
|
92
|
+
}
|
|
123
93
|
};
|
|
124
|
-
return
|
|
94
|
+
return index_js_1.proto.ClientPayload.create(registerPayload);
|
|
125
95
|
};
|
|
126
96
|
exports.generateRegistrationNode = generateRegistrationNode;
|
|
127
|
-
|
|
128
97
|
const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, signalIdentities }) => {
|
|
129
98
|
const msgId = stanza.attrs.id;
|
|
130
99
|
const pairSuccessNode = (0, WABinary_1.getBinaryNodeChild)(stanza, 'pair-success');
|
|
@@ -132,58 +101,37 @@ const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, s
|
|
|
132
101
|
const platformNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'platform');
|
|
133
102
|
const deviceNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'device');
|
|
134
103
|
const businessNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'biz');
|
|
135
|
-
|
|
136
104
|
if (!deviceIdentityNode || !deviceNode) {
|
|
137
105
|
throw new boom_1.Boom('Missing device-identity or device in pair success node', { data: stanza });
|
|
138
106
|
}
|
|
139
|
-
|
|
140
107
|
const bizName = businessNode?.attrs.name;
|
|
141
108
|
const jid = deviceNode.attrs.jid;
|
|
142
109
|
const lid = deviceNode.attrs.lid;
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
let hmacPrefix = Buffer.from([]);
|
|
147
|
-
if (accountType !== undefined && accountType === WAProto_1.proto.ADVEncryptionType.HOSTED) {
|
|
148
|
-
hmacPrefix = Buffer.from([0x06, 0x05]);
|
|
149
|
-
}
|
|
150
|
-
|
|
110
|
+
const { details, hmac, accountType } = index_js_1.proto.ADVSignedDeviceIdentityHMAC.decode(deviceIdentityNode.content);
|
|
111
|
+
const isHostedAccount = accountType !== undefined && accountType === index_js_1.proto.ADVEncryptionType.HOSTED;
|
|
112
|
+
const hmacPrefix = isHostedAccount ? Buffer.from([6, 5]) : Buffer.alloc(0);
|
|
151
113
|
const advSign = (0, crypto_2.hmacSign)(Buffer.concat([hmacPrefix, details]), Buffer.from(advSecretKey, 'base64'));
|
|
152
114
|
if (Buffer.compare(hmac, advSign) !== 0) {
|
|
153
115
|
throw new boom_1.Boom('Invalid account signature');
|
|
154
116
|
}
|
|
155
|
-
|
|
156
|
-
const account = WAProto_1.proto.ADVSignedDeviceIdentity.decode(details);
|
|
117
|
+
const account = index_js_1.proto.ADVSignedDeviceIdentity.decode(details);
|
|
157
118
|
const { accountSignatureKey, accountSignature, details: deviceDetails } = account;
|
|
158
|
-
|
|
159
|
-
const deviceIdentity = WAProto_1.proto.ADVDeviceIdentity.decode(deviceDetails);
|
|
160
|
-
|
|
161
|
-
const accountSignaturePrefix = deviceIdentity.deviceType === WAProto_1.proto.ADVEncryptionType.HOSTED
|
|
162
|
-
? Buffer.from([0x06, 0x05])
|
|
163
|
-
: Buffer.from([0x06, 0x00]);
|
|
164
|
-
const accountMsg = Buffer.concat([accountSignaturePrefix, deviceDetails, signedIdentityKey.public]);
|
|
165
|
-
|
|
119
|
+
const accountMsg = Buffer.concat([Buffer.from([6, 0]), deviceDetails, signedIdentityKey.public]);
|
|
166
120
|
if (!crypto_2.Curve.verify(accountSignatureKey, accountMsg, accountSignature)) {
|
|
167
121
|
throw new boom_1.Boom('Failed to verify account signature');
|
|
168
122
|
}
|
|
169
|
-
|
|
170
|
-
const deviceMsg = Buffer.concat([
|
|
171
|
-
Buffer.from([0x06, 0x01]),
|
|
172
|
-
deviceDetails,
|
|
173
|
-
signedIdentityKey.public,
|
|
174
|
-
accountSignatureKey
|
|
175
|
-
]);
|
|
123
|
+
const devicePrefix = isHostedAccount ? Buffer.from([6, 6]) : Buffer.from([6, 1]);
|
|
124
|
+
const deviceMsg = Buffer.concat([devicePrefix, deviceDetails, signedIdentityKey.public, accountSignatureKey]);
|
|
176
125
|
account.deviceSignature = crypto_2.Curve.sign(signedIdentityKey.private, deviceMsg);
|
|
177
|
-
|
|
178
|
-
const identity = (0, signal_1.createSignalIdentity)(jid, accountSignatureKey);
|
|
126
|
+
const identity = (0, signal_1.createSignalIdentity)(lid, accountSignatureKey);
|
|
179
127
|
const accountEnc = (0, exports.encodeSignedDeviceIdentity)(account, false);
|
|
180
|
-
|
|
128
|
+
const deviceIdentity = index_js_1.proto.ADVDeviceIdentity.decode(account.details);
|
|
181
129
|
const reply = {
|
|
182
130
|
tag: 'iq',
|
|
183
131
|
attrs: {
|
|
184
132
|
to: WABinary_1.S_WHATSAPP_NET,
|
|
185
133
|
type: 'result',
|
|
186
|
-
id: msgId
|
|
134
|
+
id: msgId
|
|
187
135
|
},
|
|
188
136
|
content: [
|
|
189
137
|
{
|
|
@@ -199,31 +147,25 @@ const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, s
|
|
|
199
147
|
}
|
|
200
148
|
]
|
|
201
149
|
};
|
|
202
|
-
|
|
203
150
|
const authUpdate = {
|
|
204
151
|
account,
|
|
205
152
|
me: { id: jid, name: bizName, lid },
|
|
206
|
-
signalIdentities: [
|
|
207
|
-
...(signalIdentities || []),
|
|
208
|
-
identity
|
|
209
|
-
],
|
|
153
|
+
signalIdentities: [...(signalIdentities || []), identity],
|
|
210
154
|
platform: platformNode?.attrs.name
|
|
211
155
|
};
|
|
212
|
-
|
|
213
156
|
return {
|
|
214
157
|
creds: authUpdate,
|
|
215
158
|
reply
|
|
216
159
|
};
|
|
217
160
|
};
|
|
218
161
|
exports.configureSuccessfulPairing = configureSuccessfulPairing;
|
|
219
|
-
|
|
220
162
|
const encodeSignedDeviceIdentity = (account, includeSignatureKey) => {
|
|
221
163
|
account = { ...account };
|
|
164
|
+
// set to null if we are not to include the signature key
|
|
165
|
+
// or if we are including the signature key but it is empty
|
|
222
166
|
if (!includeSignatureKey || !account.accountSignatureKey?.length) {
|
|
223
167
|
account.accountSignatureKey = null;
|
|
224
168
|
}
|
|
225
|
-
return
|
|
226
|
-
.encode(account)
|
|
227
|
-
.finish();
|
|
169
|
+
return index_js_1.proto.ADVSignedDeviceIdentity.encode(account).finish();
|
|
228
170
|
};
|
|
229
171
|
exports.encodeSignedDeviceIdentity = encodeSignedDeviceIdentity;
|
|
@@ -1,30 +1,27 @@
|
|
|
1
1
|
export declare const TAGS: {
|
|
2
|
-
LIST_EMPTY: number
|
|
3
|
-
DICTIONARY_0: number
|
|
4
|
-
DICTIONARY_1: number
|
|
5
|
-
DICTIONARY_2: number
|
|
6
|
-
DICTIONARY_3: number
|
|
7
|
-
INTEROP_JID: number
|
|
8
|
-
FB_JID: number
|
|
9
|
-
AD_JID: number
|
|
10
|
-
LIST_8: number
|
|
11
|
-
LIST_16: number
|
|
12
|
-
JID_PAIR: number
|
|
13
|
-
HEX_8: number
|
|
14
|
-
BINARY_8: number
|
|
15
|
-
BINARY_20: number
|
|
16
|
-
BINARY_32: number
|
|
17
|
-
NIBBLE_8: number
|
|
18
|
-
PACKED_MAX: number
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export declare const
|
|
22
|
-
|
|
23
|
-
export declare const SINGLE_BYTE_TOKENS: (string | null)[]
|
|
24
|
-
|
|
2
|
+
LIST_EMPTY: number;
|
|
3
|
+
DICTIONARY_0: number;
|
|
4
|
+
DICTIONARY_1: number;
|
|
5
|
+
DICTIONARY_2: number;
|
|
6
|
+
DICTIONARY_3: number;
|
|
7
|
+
INTEROP_JID: number;
|
|
8
|
+
FB_JID: number;
|
|
9
|
+
AD_JID: number;
|
|
10
|
+
LIST_8: number;
|
|
11
|
+
LIST_16: number;
|
|
12
|
+
JID_PAIR: number;
|
|
13
|
+
HEX_8: number;
|
|
14
|
+
BINARY_8: number;
|
|
15
|
+
BINARY_20: number;
|
|
16
|
+
BINARY_32: number;
|
|
17
|
+
NIBBLE_8: number;
|
|
18
|
+
PACKED_MAX: number;
|
|
19
|
+
};
|
|
20
|
+
export declare const DOUBLE_BYTE_TOKENS: readonly [readonly ["read-self", "active", "fbns", "protocol", "reaction", "screen_width", "heartbeat", "deviceid", "2:47DEQpj8", "uploadfieldstat", "voip_settings", "retry", "priority", "longitude", "conflict", "false", "ig_professional", "replaced", "preaccept", "cover_photo", "uncompressed", "encopt", "ppic", "04", "passive", "status-revoke-drop", "keygen", "540", "offer", "rate", "opus", "latitude", "w:gp2", "ver", "4", "business_profile", "medium", "sender", "prev_v_id", "email", "website", "invited", "sign_credential", "05", "transport", "skey", "reason", "peer_abtest_bucket", "America/Sao_Paulo", "appid", "refresh", "100", "06", "404", "101", "104", "107", "102", "109", "103", "member_add_mode", "105", "transaction-id", "110", "106", "outgoing", "108", "111", "tokens", "followers", "ig_handle", "self_pid", "tue", "dec", "thu", "joinable", "peer_pid", "mon", "features", "wed", "peer_device_presence", "pn", "delete", "07", "fri", "audio_duration", "admin", "connected", "delta", "rcat", "disable", "collection", "08", "480", "sat", "phash", "all", "invite", "accept", "critical_unblock_low", "group_update", "signed_credential", "blinded_credential", "eph_setting", "net", "09", "background_location", "refresh_id", "Asia/Kolkata", "privacy_mode_ts", "account_sync", "voip_payload_type", "service_areas", "acs_public_key", "v_id", "0a", "fallback_class", "relay", "actual_actors", "metadata", "w:biz", "5", "connected-limit", "notice", "0b", "host_storage", "fb_page", "subject", "privatestats", "invis", "groupadd", "010", "note.m4r", "uuid", "0c", "8000", "sun", "372", "1020", "stage", "1200", "720", "canonical", "fb", "011", "video_duration", "0d", "1140", "superadmin", "012", "Opening.m4r", "keystore_attestation", "dleq_proof", "013", "timestamp", "ab_key", "w:sync:app:state", "0e", "vertical", "600", "p_v_id", "6", "likes", "014", "500", "1260", "creator", "0f", "rte", "destination", "group", "group_info", "syncd_anti_tampering_fatal_exception_enabled", "015", "dl_bw", "Asia/Jakarta", "vp8/h.264", "online", "1320", "fb:multiway", "10", "timeout", "016", "nse_retry", "urn:xmpp:whatsapp:dirty", "017", "a_v_id", "web_shops_chat_header_button_enabled", "nse_call", "inactive-upgrade", "none", "web", "groups", "2250", "mms_hot_content_timespan_in_seconds", "contact_blacklist", "nse_read", "suspended_group_deletion_notification", "binary_version", "018", "https://www.whatsapp.com/otp/copy/", "reg_push", "shops_hide_catalog_attachment_entrypoint", "server_sync", ".", "ephemeral_messages_allowed_values", "019", "mms_vcache_aggregation_enabled", "iphone", "America/Argentina/Buenos_Aires", "01a", "mms_vcard_autodownload_size_kb", "nse_ver", "shops_header_dropdown_menu_item", "dhash", "catalog_status", "communities_mvp_new_iqs_serverprop", "blocklist", "default", "11", "ephemeral_messages_enabled", "01b", "original_dimensions", "8", "mms4_media_retry_notification_encryption_enabled", "mms4_server_error_receipt_encryption_enabled", "original_image_url", "sync", "multiway", "420", "companion_enc_static", "shops_profile_drawer_entrypoint", "01c", "vcard_as_document_size_kb", "status_video_max_duration", "request_image_url", "01d", "regular_high", "s_t", "abt", "share_ext_min_preliminary_image_quality", "01e", "32", "syncd_key_rotation_enabled", "data_namespace", "md_downgrade_read_receipts2", "patch", "polltype", "ephemeral_messages_setting", "userrate", "15", "partial_pjpeg_bw_threshold", "played-self", "catalog_exists", "01f", "mute_v2"], readonly ["reject", "dirty", "announcement", "020", "13", "9", "status_video_max_bitrate", "fb:thrift_iq", "offline_batch", "022", "full", "ctwa_first_business_reply_logging", "h.264", "smax_id", "group_description_length", "https://www.whatsapp.com/otp/code", "status_image_max_edge", "smb_upsell_business_profile_enabled", "021", "web_upgrade_to_md_modal", "14", "023", "s_o", "smaller_video_thumbs_status_enabled", "media_max_autodownload", "960", "blocking_status", "peer_msg", "joinable_group_call_client_version", "group_call_video_maximization_enabled", "return_snapshot", "high", "America/Mexico_City", "entry_point_block_logging_enabled", "pop", "024", "1050", "16", "1380", "one_tap_calling_in_group_chat_size", "regular_low", "inline_joinable_education_enabled", "hq_image_max_edge", "locked", "America/Bogota", "smb_biztools_deeplink_enabled", "status_image_quality", "1088", "025", "payments_upi_intent_transaction_limit", "voip", "w:g2", "027", "md_pin_chat_enabled", "026", "multi_scan_pjpeg_download_enabled", "shops_product_grid", "transaction_id", "ctwa_context_enabled", "20", "fna", "hq_image_quality", "alt_jpeg_doc_detection_quality", "group_call_max_participants", "pkey", "America/Belem", "image_max_kbytes", "web_cart_v1_1_order_message_changes_enabled", "ctwa_context_enterprise_enabled", "urn:xmpp:whatsapp:account", "840", "Asia/Kuala_Lumpur", "max_participants", "video_remux_after_repair_enabled", "stella_addressbook_restriction_type", "660", "900", "780", "context_menu_ios13_enabled", "mute-state", "ref", "payments_request_messages", "029", "frskmsg", "vcard_max_size_kb", "sample_buffer_gif_player_enabled", "match_last_seen", "510", "4983", "video_max_bitrate", "028", "w:comms:chat", "17", "frequently_forwarded_max", "groups_privacy_blacklist", "Asia/Karachi", "02a", "web_download_document_thumb_mms_enabled", "02b", "hist_sync", "biz_block_reasons_version", "1024", "18", "web_is_direct_connection_for_plm_transparent", "view_once_write", "file_max_size", "paid_convo_id", "online_privacy_setting", "video_max_edge", "view_once_read", "enhanced_storage_management", "multi_scan_pjpeg_encoding_enabled", "ctwa_context_forward_enabled", "video_transcode_downgrade_enable", "template_doc_mime_types", "hq_image_bw_threshold", "30", "body", "u_aud_limit_sil_restarts_ctrl", "other", "participating", "w:biz:directory", "1110", "vp8", "4018", "meta", "doc_detection_image_max_edge", "image_quality", "1170", "02c", "smb_upsell_chat_banner_enabled", "key_expiry_time_second", "pid", "stella_interop_enabled", "19", "linked_device_max_count", "md_device_sync_enabled", "02d", "02e", "360", "enhanced_block_enabled", "ephemeral_icon_in_forwarding", "paid_convo_status", "gif_provider", "project_name", "server-error", "canonical_url_validation_enabled", "wallpapers_v2", "syncd_clear_chat_delete_chat_enabled", "medianotify", "02f", "shops_required_tos_version", "vote", "reset_skey_on_id_change", "030", "image_max_edge", "multicast_limit_global", "ul_bw", "21", "25", "5000", "poll", "570", "22", "031", "1280", "WhatsApp", "032", "bloks_shops_enabled", "50", "upload_host_switching_enabled", "web_ctwa_context_compose_enabled", "ptt_forwarded_features_enabled", "unblocked", "partial_pjpeg_enabled", "fbid:devices", "height", "ephemeral_group_query_ts", "group_join_permissions", "order", "033", "alt_jpeg_status_quality", "migrate", "popular-bank", "win_uwp_deprecation_killswitch_enabled", "web_download_status_thumb_mms_enabled", "blocking", "url_text", "035", "web_forwarding_limit_to_groups", "1600", "val", "1000", "syncd_msg_date_enabled", "bank-ref-id", "max_subject", "payments_web_enabled", "web_upload_document_thumb_mms_enabled", "size", "request", "ephemeral", "24", "receipt_agg", "ptt_remember_play_position", "sampling_weight", "enc_rekey", "mute_always", "037", "034", "23", "036", "action", "click_to_chat_qr_enabled", "width", "disabled", "038", "md_blocklist_v2", "played_self_enabled", "web_buttons_message_enabled", "flow_id", "clear", "450", "fbid:thread", "bloks_session_state", "America/Lima", "attachment_picker_refresh", "download_host_switching_enabled", "1792", "u_aud_limit_sil_restarts_test2", "custom_urls", "device_fanout", "optimistic_upload", "2000", "key_cipher_suite", "web_smb_upsell_in_biz_profile_enabled", "e", "039", "siri_post_status_shortcut", "pair-device", "lg", "lc", "stream_attribution_url", "model", "mspjpeg_phash_gen", "catalog_send_all", "new_multi_vcards_ui", "share_biz_vcard_enabled", "-", "clean", "200", "md_blocklist_v2_server", "03b", "03a", "web_md_migration_experience", "ptt_conversation_waveform", "u_aud_limit_sil_restarts_test1"], readonly ["64", "ptt_playback_speed_enabled", "web_product_list_message_enabled", "paid_convo_ts", "27", "manufacturer", "psp-routing", "grp_uii_cleanup", "ptt_draft_enabled", "03c", "business_initiated", "web_catalog_products_onoff", "web_upload_link_thumb_mms_enabled", "03e", "mediaretry", "35", "hfm_string_changes", "28", "America/Fortaleza", "max_keys", "md_mhfs_days", "streaming_upload_chunk_size", "5541", "040", "03d", "2675", "03f", "...", "512", "mute", "48", "041", "alt_jpeg_quality", "60", "042", "md_smb_quick_reply", "5183", "c", "1343", "40", "1230", "043", "044", "mms_cat_v1_forward_hot_override_enabled", "user_notice", "ptt_waveform_send", "047", "Asia/Calcutta", "250", "md_privacy_v2", "31", "29", "128", "md_messaging_enabled", "046", "crypto", "690", "045", "enc_iv", "75", "failure", "ptt_oot_playback", "AIzaSyDR5yfaG7OG8sMTUj8kfQEb8T9pN8BM6Lk", "w", "048", "2201", "web_large_files_ui", "Asia/Makassar", "812", "status_collapse_muted", "1334", "257", "2HP4dm", "049", "patches", "1290", "43cY6T", "America/Caracas", "web_sticker_maker", "campaign", "ptt_pausable_enabled", "33", "42", "attestation", "biz", "04b", "query_linked", "s", "125", "04a", "810", "availability", "1411", "responsiveness_v2_m1", "catalog_not_created", "34", "America/Santiago", "1465", "enc_p", "04d", "status_info", "04f", "key_version", "..", "04c", "04e", "md_group_notification", "1598", "1215", "web_cart_enabled", "37", "630", "1920", "2394", "-1", "vcard", "38", "elapsed", "36", "828", "peer", "pricing_category", "1245", "invalid", "stella_ios_enabled", "2687", "45", "1528", "39", "u_is_redial_audio_1104_ctrl", "1025", "1455", "58", "2524", "2603", "054", "bsp_system_message_enabled", "web_pip_redesign", "051", "verify_apps", "1974", "1272", "1322", "1755", "052", "70", "050", "1063", "1135", "1361", "80", "1096", "1828", "1851", "1251", "1921", "key_config_id", "1254", "1566", "1252", "2525", "critical_block", "1669", "max_available", "w:auth:backup:token", "product", "2530", "870", "1022", "participant_uuid", "web_cart_on_off", "1255", "1432", "1867", "41", "1415", "1440", "240", "1204", "1608", "1690", "1846", "1483", "1687", "1749", "69", "url_number", "053", "1325", "1040", "365", "59", "Asia/Riyadh", "1177", "test_recommended", "057", "1612", "43", "1061", "1518", "1635", "055", "1034", "1375", "750", "1430", "event_code", "1682", "503", "55", "865", "78", "1309", "1365", "44", "America/Guayaquil", "535", "LIMITED", "1377", "1613", "1420", "1599", "1822", "05a", "1681", "password", "1111", "1214", "1376", "1478", "47", "1082", "4282", "Europe/Istanbul", "1307", "46", "058", "1124", "256", "rate-overlimit", "retail", "u_a_socket_err_fix_succ_test", "1292", "1370", "1388", "520", "861", "psa", "regular", "1181", "1766", "05b", "1183", "1213", "1304", "1537"], readonly ["1724", "profile_picture", "1071", "1314", "1605", "407", "990", "1710", "746", "pricing_model", "056", "059", "061", "1119", "6027", "65", "877", "1607", "05d", "917", "seen", "1516", "49", "470", "973", "1037", "1350", "1394", "1480", "1796", "keys", "794", "1536", "1594", "2378", "1333", "1524", "1825", "116", "309", "52", "808", "827", "909", "495", "1660", "361", "957", "google", "1357", "1565", "1967", "996", "1775", "586", "736", "1052", "1670", "bank", "177", "1416", "2194", "2222", "1454", "1839", "1275", "53", "997", "1629", "6028", "smba", "1378", "1410", "05c", "1849", "727", "create", "1559", "536", "1106", "1310", "1944", "670", "1297", "1316", "1762", "en", "1148", "1295", "1551", "1853", "1890", "1208", "1784", "7200", "05f", "178", "1283", "1332", "381", "643", "1056", "1238", "2024", "2387", "179", "981", "1547", "1705", "05e", "290", "903", "1069", "1285", "2436", "062", "251", "560", "582", "719", "56", "1700", "2321", "325", "448", "613", "777", "791", "51", "488", "902", "Asia/Almaty", "is_hidden", "1398", "1527", "1893", "1999", "2367", "2642", "237", "busy", "065", "067", "233", "590", "993", "1511", "54", "723", "860", "363", "487", "522", "605", "995", "1321", "1691", "1865", "2447", "2462", "NON_TRANSACTIONAL", "433", "871", "432", "1004", "1207", "2032", "2050", "2379", "2446", "279", "636", "703", "904", "248", "370", "691", "700", "1068", "1655", "2334", "060", "063", "364", "533", "534", "567", "1191", "1210", "1473", "1827", "069", "701", "2531", "514", "prev_dhash", "064", "496", "790", "1046", "1139", "1505", "1521", "1108", "207", "544", "637", "final", "1173", "1293", "1694", "1939", "1951", "1993", "2353", "2515", "504", "601", "857", "modify", "spam_request", "p_121_aa_1101_test4", "866", "1427", "1502", "1638", "1744", "2153", "068", "382", "725", "1704", "1864", "1990", "2003", "Asia/Dubai", "508", "531", "1387", "1474", "1632", "2307", "2386", "819", "2014", "066", "387", "1468", "1706", "2186", "2261", "471", "728", "1147", "1372", "1961"]];
|
|
21
|
+
export declare const SINGLE_BYTE_TOKENS: string[];
|
|
25
22
|
export declare const TOKEN_MAP: {
|
|
26
23
|
[token: string]: {
|
|
27
|
-
dict?: number
|
|
28
|
-
index: number
|
|
29
|
-
}
|
|
30
|
-
}
|
|
24
|
+
dict?: number;
|
|
25
|
+
index: number;
|
|
26
|
+
};
|
|
27
|
+
};
|