@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.
Files changed (155) hide show
  1. package/LICENSE +1 -1
  2. package/WAProto/index.js +19671 -152026
  3. package/lib/Defaults/index.d.ts +12 -8
  4. package/lib/Defaults/index.js +90 -124
  5. package/lib/Signal/Group/group_cipher.d.ts +0 -1
  6. package/lib/Signal/Group/group_cipher.js +28 -39
  7. package/lib/Signal/Group/sender-chain-key.d.ts +1 -1
  8. package/lib/Signal/Group/sender-chain-key.js +9 -2
  9. package/lib/Signal/Group/sender-key-distribution-message.js +3 -3
  10. package/lib/Signal/Group/sender-key-message.js +3 -3
  11. package/lib/Signal/Group/sender-key-state.d.ts +4 -4
  12. package/lib/Signal/Group/sender-key-state.js +47 -16
  13. package/lib/Signal/libsignal.d.ts +7 -3
  14. package/lib/Signal/libsignal.js +224 -39
  15. package/lib/Signal/lid-mapping.d.ts +26 -0
  16. package/lib/Signal/lid-mapping.js +146 -0
  17. package/lib/Socket/Client/index.d.ts +2 -3
  18. package/lib/Socket/Client/index.js +2 -3
  19. package/lib/Socket/Client/{abstract-socket-client.d.ts → types.d.ts} +1 -3
  20. package/lib/Socket/Client/{web-socket-client.d.ts → websocket.d.ts} +1 -1
  21. package/lib/Socket/Client/{web-socket-client.js → websocket.js} +10 -16
  22. package/lib/Socket/business.d.ts +94 -78
  23. package/lib/Socket/business.js +130 -11
  24. package/lib/Socket/chats.d.ts +63 -233
  25. package/lib/Socket/chats.js +234 -184
  26. package/lib/Socket/communities.d.ts +232 -0
  27. package/lib/Socket/communities.js +402 -0
  28. package/lib/Socket/groups.d.ts +62 -41
  29. package/lib/Socket/groups.js +76 -64
  30. package/lib/Socket/index.d.ts +129 -83
  31. package/lib/Socket/index.js +13 -6
  32. package/lib/Socket/messages-recv.d.ts +59 -48
  33. package/lib/Socket/messages-recv.js +516 -371
  34. package/lib/Socket/messages-send.d.ts +86 -67
  35. package/lib/Socket/messages-send.js +1091 -1
  36. package/lib/Socket/mex.d.ts +2 -0
  37. package/lib/Socket/mex.js +45 -0
  38. package/lib/Socket/newsletter.d.ts +76 -64
  39. package/lib/Socket/newsletter.js +184 -1
  40. package/lib/Socket/socket.d.ts +19 -13
  41. package/lib/Socket/socket.js +805 -1
  42. package/lib/Types/Auth.d.ts +4 -10
  43. package/lib/Types/Bussines.d.ts +24 -0
  44. package/lib/Types/Bussines.js +2 -0
  45. package/lib/Types/Call.d.ts +1 -1
  46. package/lib/Types/Chat.d.ts +29 -9
  47. package/lib/Types/Chat.js +7 -1
  48. package/lib/Types/Contact.d.ts +5 -1
  49. package/lib/Types/Events.d.ts +55 -14
  50. package/lib/Types/GroupMetadata.d.ts +15 -5
  51. package/lib/Types/Label.d.ts +11 -0
  52. package/lib/Types/Label.js +1 -1
  53. package/lib/Types/LabelAssociation.js +1 -1
  54. package/lib/Types/Message.d.ts +75 -49
  55. package/lib/Types/Message.js +10 -7
  56. package/lib/Types/Newsletter.d.ts +129 -98
  57. package/lib/Types/Newsletter.js +33 -38
  58. package/lib/Types/Product.d.ts +1 -1
  59. package/lib/Types/Signal.d.ts +29 -1
  60. package/lib/Types/Socket.d.ts +48 -22
  61. package/lib/Types/State.d.ts +13 -2
  62. package/lib/Types/State.js +12 -0
  63. package/lib/Types/USync.d.ts +1 -1
  64. package/lib/Types/index.d.ts +10 -3
  65. package/lib/Types/index.js +2 -2
  66. package/lib/Utils/auth-utils.d.ts +3 -3
  67. package/lib/Utils/auth-utils.js +378 -102
  68. package/lib/Utils/baileys-event-stream.js +1 -1
  69. package/lib/Utils/business.d.ts +2 -2
  70. package/lib/Utils/business.js +19 -13
  71. package/lib/Utils/chat-utils.d.ts +21 -22
  72. package/lib/Utils/chat-utils.js +201 -154
  73. package/lib/Utils/crypto.d.ts +18 -19
  74. package/lib/Utils/crypto.js +78 -37
  75. package/lib/Utils/decode-wa-message.d.ts +34 -7
  76. package/lib/Utils/decode-wa-message.js +138 -66
  77. package/lib/Utils/event-buffer.d.ts +6 -8
  78. package/lib/Utils/event-buffer.js +81 -43
  79. package/lib/Utils/generics.d.ts +27 -27
  80. package/lib/Utils/generics.js +128 -133
  81. package/lib/Utils/history.d.ts +9 -5
  82. package/lib/Utils/history.js +17 -23
  83. package/lib/Utils/index.d.ts +2 -0
  84. package/lib/Utils/index.js +2 -0
  85. package/lib/Utils/lidToJid-test.d.ts +11 -0
  86. package/lib/Utils/lidToJid-test.js +27 -0
  87. package/lib/Utils/link-preview.d.ts +4 -4
  88. package/lib/Utils/link-preview.js +40 -12
  89. package/lib/Utils/logger.d.ts +11 -3
  90. package/lib/Utils/lt-hash.d.ts +8 -8
  91. package/lib/Utils/lt-hash.js +23 -24
  92. package/lib/Utils/make-mutex.d.ts +2 -2
  93. package/lib/Utils/make-mutex.js +3 -2
  94. package/lib/Utils/message-retry-manager.d.ts +81 -0
  95. package/lib/Utils/message-retry-manager.js +152 -0
  96. package/lib/Utils/messages-media.d.ts +37 -41
  97. package/lib/Utils/messages-media.js +252 -368
  98. package/lib/Utils/messages.d.ts +13 -15
  99. package/lib/Utils/messages.js +274 -261
  100. package/lib/Utils/noise-handler.d.ts +13 -15
  101. package/lib/Utils/noise-handler.js +20 -26
  102. package/lib/Utils/process-message.d.ts +9 -8
  103. package/lib/Utils/process-message.js +157 -93
  104. package/lib/Utils/signal.d.ts +6 -5
  105. package/lib/Utils/signal.js +37 -29
  106. package/lib/Utils/use-multi-file-auth-state.d.ts +1 -2
  107. package/lib/Utils/use-multi-file-auth-state.js +12 -7
  108. package/lib/Utils/validate-connection.d.ts +5 -6
  109. package/lib/Utils/validate-connection.js +39 -97
  110. package/lib/WABinary/constants.d.ts +24 -27
  111. package/lib/WABinary/constants.js +1276 -13
  112. package/lib/WABinary/decode.d.ts +3 -4
  113. package/lib/WABinary/decode.js +28 -14
  114. package/lib/WABinary/encode.d.ts +1 -2
  115. package/lib/WABinary/encode.js +134 -147
  116. package/lib/WABinary/generic-utils.d.ts +4 -7
  117. package/lib/WABinary/generic-utils.js +40 -125
  118. package/lib/WABinary/jid-utils.d.ts +13 -8
  119. package/lib/WABinary/jid-utils.js +27 -16
  120. package/lib/WAM/BinaryInfo.d.ts +2 -11
  121. package/lib/WAM/constants.d.ts +3 -2
  122. package/lib/WAM/constants.js +2252 -2359
  123. package/lib/WAM/encode.d.ts +1 -2
  124. package/lib/WAM/encode.js +8 -11
  125. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +2 -2
  126. package/lib/WAUSync/Protocols/USyncContactProtocol.js +3 -4
  127. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +2 -2
  128. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +5 -5
  129. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +2 -2
  130. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +5 -5
  131. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +2 -2
  132. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +5 -6
  133. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +2 -2
  134. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +1 -1
  135. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +4 -3
  136. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +11 -3
  137. package/lib/WAUSync/USyncQuery.d.ts +2 -2
  138. package/lib/WAUSync/USyncQuery.js +19 -15
  139. package/lib/WAUSync/USyncUser.d.ts +5 -5
  140. package/lib/WAUSync/index.d.ts +1 -1
  141. package/lib/WAUSync/index.js +1 -1
  142. package/package.json +102 -102
  143. package/lib/Defaults/baileys-version.json +0 -3
  144. package/lib/Defaults/phonenumber-mcc.json +0 -223
  145. package/lib/Signal/Group/queue-job.d.ts +0 -1
  146. package/lib/Signal/Group/queue-job.js +0 -57
  147. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  148. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  149. package/lib/Socket/hbmods.d.ts +0 -253
  150. package/lib/Socket/hbmods.js +0 -1
  151. package/lib/Socket/registration.d.ts +0 -267
  152. package/lib/Socket/registration.js +0 -166
  153. package/lib/Socket/usync.d.ts +0 -36
  154. package/lib/Socket/usync.js +0 -70
  155. /package/lib/Socket/Client/{abstract-socket-client.js → types.js} +0 -0
@@ -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) => (key ? ({
62
- keyId: WABinary_1.getBinaryNodeChildUInt(key, 'id', 3),
63
- publicKey: crypto_1.generateSignalPubKey(WABinary_1.getBinaryNodeChildBuffer(key, 'value')),
64
- signature: WABinary_1.getBinaryNodeChildBuffer(key, 'signature')
65
- }) : undefined)
66
- const nodes = WABinary_1.getBinaryNodeChildren(WABinary_1.getBinaryNodeChild(node, 'list'), 'user')
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 = lodash_1.chunk(nodes, chunkSize)
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 WAProto_1 = require("../../WAProto");
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 (_a) {
71
+ catch {
66
72
  }
67
73
  finally {
68
74
  release();
69
75
  }
70
76
  });
71
77
  }
72
- catch (_a) {
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) => { var _a; return (_a = file === null || file === void 0 ? void 0 : file.replace(/\//g, '__')) === null || _a === void 0 ? void 0 : _a.replace(/:/g, '-'); };
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 = WAProto_1.proto.Message.AppStateSyncKeyData.fromObject(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, 'advSecretKey' | 'signedIdentityKey' | 'signalIdentities'>) => {
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 WAProto_1 = require("../../WAProto");
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: WAProto_1.proto.ClientPayload.UserAgent.Platform.WEB,
21
- releaseChannel: WAProto_1.proto.ClientPayload.UserAgent.ReleaseChannel.RELEASE,
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 || 'US'
27
+ localeCountryIso31661Alpha2: config.countryCode
29
28
  };
30
29
  };
31
-
32
30
  const PLATFORM_MAP = {
33
- 'Mac OS': WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.DARWIN,
34
- 'Windows': WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WIN32
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 = WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WEB_BROWSER;
39
- if (config.syncFullHistory && PLATFORM_MAP[config.browser[0]] && config.browser[1] === 'Desktop') {
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: WAProto_1.proto.ClientPayload.ConnectType.WIFI_UNKNOWN,
48
- connectReason: WAProto_1.proto.ClientPayload.ConnectReason.USER_ACTIVATED,
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: true,
54
+ passive: false,
60
55
  pull: true,
61
56
  username: +user,
62
- device: device,
63
- lidDbMigrated: false
57
+ device: device
64
58
  };
65
- return WAProto_1.proto.ClientPayload.fromObject(payload);
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 WAProto_1.proto.DeviceProps.PlatformType[platformType] || WAProto_1.proto.DeviceProps.PlatformType.CHROME;
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 WAProto_1.proto.ClientPayload.fromObject(registerPayload);
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 { details, hmac, accountType } = WAProto_1.proto.ADVSignedDeviceIdentityHMAC.decode(deviceIdentityNode.content);
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 WAProto_1.proto.ADVSignedDeviceIdentity
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 DOUBLE_BYTE_TOKENS: string[][]
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
+ };