cuki-bailx 1.2.4 → 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/WAProto/GenerateStatics.sh +4 -0
- package/WAProto/WAProto.proto +4775 -0
- package/WAProto/index.js +56886 -17506
- package/engine-requirements.js +1 -1
- package/lib/Defaults/index.js +98 -108
- package/lib/Defaults/vyzen-baileysx-version.json +3 -0
- package/lib/Signal/libsignal.js +2 -0
- package/lib/Socket/Client/index.js +2 -3
- package/lib/Socket/Client/{web-socket-client.js → websocket.js} +54 -5
- package/lib/Socket/chats.js +224 -173
- package/lib/Socket/groups.js +20 -5
- package/lib/Socket/index.js +2 -2
- package/lib/Socket/messages-recv.js +10 -66
- package/lib/Socket/messages-send.js +379 -312
- package/lib/Socket/newsletter.js +54 -40
- package/lib/Socket/socket.js +58 -32
- package/lib/Store/index.js +1 -3
- package/lib/Store/make-in-memory-store.js +27 -15
- package/lib/Store/make-ordered-dictionary.js +2 -2
- package/lib/Types/Label.js +1 -1
- package/lib/Types/LabelAssociation.js +1 -1
- package/lib/Types/Message.js +0 -2
- package/lib/Types/Newsletter.js +3 -17
- package/lib/Types/index.js +2 -2
- package/lib/Utils/auth-utils.js +6 -13
- package/lib/Utils/baileys-event-stream.js +1 -1
- package/lib/Utils/browser-utils.js +35 -0
- package/lib/Utils/business.js +2 -2
- package/lib/Utils/chat-utils.js +36 -35
- package/lib/Utils/crypto.js +71 -29
- package/lib/Utils/decode-wa-message.js +65 -56
- package/lib/Utils/event-buffer.js +13 -9
- package/lib/Utils/generics.js +107 -29
- package/lib/Utils/history.js +4 -6
- package/lib/Utils/index.js +2 -0
- package/lib/Utils/link-preview.js +34 -1
- package/lib/Utils/lt-hash.js +6 -6
- package/lib/Utils/message-retry-manager.js +128 -0
- package/lib/Utils/messages-media.js +263 -115
- package/lib/Utils/messages.js +500 -93
- package/lib/Utils/noise-handler.js +18 -23
- package/lib/Utils/process-message.js +108 -25
- package/lib/Utils/signal.js +37 -35
- package/lib/Utils/use-multi-file-auth-state.js +51 -6
- package/lib/Utils/validate-connection.js +90 -66
- package/lib/WABinary/constants.js +1276 -13
- package/lib/WABinary/decode.js +26 -13
- package/lib/WABinary/encode.js +39 -17
- package/lib/WABinary/generic-utils.js +2 -85
- package/lib/WABinary/jid-utils.js +28 -5
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
- package/lib/index.js +18 -5
- package/package.json +109 -104
- package/lib/Defaults/baileys-version.json +0 -3
- package/lib/Defaults/index.d.ts +0 -53
- package/lib/Defaults/phonenumber-mcc.json +0 -223
- package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
- package/lib/Signal/Group/group-session-builder.d.ts +0 -14
- package/lib/Signal/Group/group_cipher.d.ts +0 -17
- package/lib/Signal/Group/index.d.ts +0 -11
- package/lib/Signal/Group/keyhelper.d.ts +0 -10
- package/lib/Signal/Group/queue-job.d.ts +0 -1
- package/lib/Signal/Group/sender-chain-key.d.ts +0 -13
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -16
- package/lib/Signal/Group/sender-key-message.d.ts +0 -18
- package/lib/Signal/Group/sender-key-name.d.ts +0 -17
- package/lib/Signal/Group/sender-key-record.d.ts +0 -30
- package/lib/Signal/Group/sender-key-state.d.ts +0 -38
- package/lib/Signal/Group/sender-message-key.d.ts +0 -11
- package/lib/Signal/libsignal.d.ts +0 -3
- package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
- package/lib/Socket/Client/index.d.ts +0 -3
- package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
- package/lib/Socket/Client/mobile-socket-client.js +0 -65
- package/lib/Socket/Client/web-socket-client.d.ts +0 -12
- package/lib/Socket/business.d.ts +0 -171
- package/lib/Socket/chats.d.ts +0 -80
- package/lib/Socket/dugong.d.ts +0 -219
- package/lib/Socket/dugong.js +0 -441
- package/lib/Socket/groups.d.ts +0 -115
- package/lib/Socket/index.d.ts +0 -173
- package/lib/Socket/messages-recv.d.ts +0 -161
- package/lib/Socket/messages-send.d.ts +0 -149
- package/lib/Socket/newsletter.d.ts +0 -134
- package/lib/Socket/registration.d.ts +0 -267
- package/lib/Socket/registration.js +0 -166
- package/lib/Socket/socket.d.ts +0 -43
- package/lib/Socket/socket.js.bak +0 -630
- package/lib/Socket/usync.d.ts +0 -36
- package/lib/Store/index.d.ts +0 -3
- package/lib/Store/make-cache-manager-store.d.ts +0 -13
- package/lib/Store/make-cache-manager-store.js +0 -83
- package/lib/Store/make-in-memory-store.d.ts +0 -118
- package/lib/Store/make-ordered-dictionary.d.ts +0 -13
- package/lib/Store/object-repository.d.ts +0 -10
- package/lib/Types/Auth.d.ts +0 -110
- package/lib/Types/Call.d.ts +0 -13
- package/lib/Types/Chat.d.ts +0 -102
- package/lib/Types/Contact.d.ts +0 -19
- package/lib/Types/Events.d.ts +0 -157
- package/lib/Types/GroupMetadata.d.ts +0 -55
- package/lib/Types/Label.d.ts +0 -35
- package/lib/Types/LabelAssociation.d.ts +0 -29
- package/lib/Types/Message.d.ts +0 -273
- package/lib/Types/Newsletter.d.ts +0 -92
- package/lib/Types/Product.d.ts +0 -78
- package/lib/Types/Signal.d.ts +0 -57
- package/lib/Types/Socket.d.ts +0 -111
- package/lib/Types/State.d.ts +0 -27
- package/lib/Types/USync.d.ts +0 -25
- package/lib/Types/index.d.ts +0 -57
- package/lib/Utils/auth-utils.d.ts +0 -18
- package/lib/Utils/baileys-event-stream.d.ts +0 -16
- package/lib/Utils/business.d.ts +0 -22
- package/lib/Utils/chat-utils.d.ts +0 -71
- package/lib/Utils/crypto.d.ts +0 -41
- package/lib/Utils/decode-wa-message.d.ts +0 -19
- package/lib/Utils/event-buffer.d.ts +0 -35
- package/lib/Utils/generics.d.ts +0 -92
- package/lib/Utils/history.d.ts +0 -15
- package/lib/Utils/index.d.ts +0 -17
- package/lib/Utils/link-preview.d.ts +0 -21
- package/lib/Utils/logger.d.ts +0 -4
- package/lib/Utils/lt-hash.d.ts +0 -12
- package/lib/Utils/make-mutex.d.ts +0 -7
- package/lib/Utils/messages-media.d.ts +0 -116
- package/lib/Utils/messages.d.ts +0 -77
- package/lib/Utils/noise-handler.d.ts +0 -21
- package/lib/Utils/process-message.d.ts +0 -41
- package/lib/Utils/signal.d.ts +0 -32
- 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 -27
- package/lib/WABinary/decode.d.ts +0 -7
- package/lib/WABinary/encode.d.ts +0 -3
- package/lib/WABinary/generic-utils.d.ts +0 -16
- package/lib/WABinary/index.d.ts +0 -5
- package/lib/WABinary/jid-utils.d.ts +0 -31
- package/lib/WABinary/types.d.ts +0 -18
- package/lib/WAM/BinaryInfo.d.ts +0 -17
- package/lib/WAM/constants.d.ts +0 -38
- package/lib/WAM/encode.d.ts +0 -3
- package/lib/WAM/index.d.ts +0 -3
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
- package/lib/WAUSync/Protocols/index.d.ts +0 -4
- package/lib/WAUSync/USyncQuery.d.ts +0 -28
- package/lib/WAUSync/USyncUser.d.ts +0 -12
- package/lib/WAUSync/index.d.ts +0 -3
- package/lib/index.d.ts +0 -12
- package/lib/index.js.bak +0 -48
- /package/lib/Socket/Client/{abstract-socket-client.js → types.js} +0 -0
package/lib/Utils/generics.js
CHANGED
|
@@ -1,17 +1,63 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
39
|
+
|
|
40
|
+
exports.isWABusinessPlatform = exports.getCodeFromWSError = exports.getCallStatusFromNode = exports.getErrorCodeFromStreamError = exports.getStatusFromReceiptType = exports.generateMdTagPrefix = exports.fetchLatestWaWebVersion = exports.fetchLatestBaileysVersion = exports.fetchLatestVyzenBaileysxVersion = exports.printQRIfNecessaryListener = exports.bindWaitForConnectionUpdate = exports.generateMessageID = exports.generateMessageIDV2 = exports.delayCancellable = exports.delay = exports.debouncedTimeout = exports.unixTimestampSeconds = exports.toNumber = exports.encodeBigEndian = exports.generateRegistrationId = exports.encodeNewsletterMessage = exports.encodeWAMessage = exports.unpadRandomMax16 = exports.writeRandomPadMax16 = exports.getKeyAuthor = exports.BufferJSON = exports.getPlatformId = exports.Browsers = void 0;
|
|
41
|
+
exports.promiseTimeout = promiseTimeout;
|
|
42
|
+
exports.bindWaitForEvent = bindWaitForEvent;
|
|
43
|
+
exports.trimUndefined = trimUndefined;
|
|
44
|
+
exports.bytesToCrockford = bytesToCrockford;
|
|
7
45
|
const boom_1 = require("@hapi/boom");
|
|
8
46
|
const axios_1 = __importDefault(require("axios"));
|
|
9
47
|
const crypto_1 = require("crypto");
|
|
10
48
|
const os_1 = require("os");
|
|
11
49
|
const WAProto_1 = require("../../WAProto");
|
|
12
|
-
|
|
50
|
+
|
|
51
|
+
const vyzen_baileysx_version_json_1 = require("../Defaults/vyzen-baileysx-version.json");
|
|
13
52
|
const Types_1 = require("../Types");
|
|
14
53
|
const WABinary_1 = require("../WABinary");
|
|
54
|
+
const COMPANION_PLATFORM_MAP = {
|
|
55
|
+
'Chrome': '49',
|
|
56
|
+
'Edge': '50',
|
|
57
|
+
'Firefox': '51',
|
|
58
|
+
'Opera': '53',
|
|
59
|
+
'Safari': '54'
|
|
60
|
+
};
|
|
15
61
|
const PLATFORM_MAP = {
|
|
16
62
|
'aix': 'AIX',
|
|
17
63
|
'darwin': 'Mac OS',
|
|
@@ -26,12 +72,12 @@ exports.Browsers = {
|
|
|
26
72
|
macOS: (browser) => ['Mac OS', browser, '14.4.1'],
|
|
27
73
|
baileys: (browser) => ['Baileys', browser, '6.5.0'],
|
|
28
74
|
windows: (browser) => ['Windows', browser, '10.0.22631'],
|
|
75
|
+
/** The appropriate browser based on your OS & release */
|
|
29
76
|
appropriate: (browser) => [PLATFORM_MAP[(0, os_1.platform)()] || 'Ubuntu', browser, (0, os_1.release)()]
|
|
30
77
|
};
|
|
31
|
-
|
|
32
78
|
const getPlatformId = (browser) => {
|
|
33
79
|
const platformType = WAProto_1.proto.DeviceProps.PlatformType[browser.toUpperCase()];
|
|
34
|
-
return platformType ? platformType.toString() : '
|
|
80
|
+
return platformType ? platformType.toString() : '49'; //chrome
|
|
35
81
|
};
|
|
36
82
|
exports.getPlatformId = getPlatformId;
|
|
37
83
|
exports.BufferJSON = {
|
|
@@ -74,6 +120,8 @@ const unpadRandomMax16 = (e) => {
|
|
|
74
120
|
exports.unpadRandomMax16 = unpadRandomMax16;
|
|
75
121
|
const encodeWAMessage = (message) => ((0, exports.writeRandomPadMax16)(WAProto_1.proto.Message.encode(message).finish()));
|
|
76
122
|
exports.encodeWAMessage = encodeWAMessage;
|
|
123
|
+
const encodeNewsletterMessage = (message) => (WAProto_1.proto.Message.encode(message).finish());
|
|
124
|
+
exports.encodeNewsletterMessage = encodeNewsletterMessage;
|
|
77
125
|
const generateRegistrationId = () => {
|
|
78
126
|
return Uint16Array.from((0, crypto_1.randomBytes)(2))[0] & 16383;
|
|
79
127
|
};
|
|
@@ -88,7 +136,7 @@ const encodeBigEndian = (e, t = 4) => {
|
|
|
88
136
|
return a;
|
|
89
137
|
};
|
|
90
138
|
exports.encodeBigEndian = encodeBigEndian;
|
|
91
|
-
const toNumber = (t) => ((typeof t === 'object' && t) ? ('toNumber' in t ? t.toNumber() : t.low) : t);
|
|
139
|
+
const toNumber = (t) => ((typeof t === 'object' && t) ? ('toNumber' in t ? t.toNumber() : t.low) : t || 0);
|
|
92
140
|
exports.toNumber = toNumber;
|
|
93
141
|
/** unix timestamp of a date in seconds */
|
|
94
142
|
const unixTimestampSeconds = (date = new Date()) => Math.floor(date.getTime() / 1000);
|
|
@@ -154,7 +202,6 @@ async function promiseTimeout(ms, promise) {
|
|
|
154
202
|
.finally(cancel);
|
|
155
203
|
return p;
|
|
156
204
|
}
|
|
157
|
-
exports.promiseTimeout = promiseTimeout;
|
|
158
205
|
const generateMessageIDV2 = (userId) => {
|
|
159
206
|
const data = Buffer.alloc(8 + 20 + 16);
|
|
160
207
|
data.writeBigUInt64BE(BigInt(Math.floor(Date.now() / 1000)));
|
|
@@ -172,7 +219,7 @@ const generateMessageIDV2 = (userId) => {
|
|
|
172
219
|
};
|
|
173
220
|
exports.generateMessageIDV2 = generateMessageIDV2;
|
|
174
221
|
// generate a random ID to attach to a message
|
|
175
|
-
const generateMessageID = () => '
|
|
222
|
+
const generateMessageID = () => '3EB0' + (0, crypto_1.randomBytes)(18).toString('hex').toUpperCase();
|
|
176
223
|
exports.generateMessageID = generateMessageID;
|
|
177
224
|
function bindWaitForEvent(ev, event) {
|
|
178
225
|
return async (check, timeoutMs) => {
|
|
@@ -186,8 +233,8 @@ function bindWaitForEvent(ev, event) {
|
|
|
186
233
|
}
|
|
187
234
|
};
|
|
188
235
|
ev.on('connection.update', closeListener);
|
|
189
|
-
listener = (update) => {
|
|
190
|
-
if (check(update)) {
|
|
236
|
+
listener = async (update) => {
|
|
237
|
+
if (await check(update)) {
|
|
191
238
|
resolve();
|
|
192
239
|
}
|
|
193
240
|
};
|
|
@@ -199,14 +246,12 @@ function bindWaitForEvent(ev, event) {
|
|
|
199
246
|
}));
|
|
200
247
|
};
|
|
201
248
|
}
|
|
202
|
-
exports.bindWaitForEvent = bindWaitForEvent;
|
|
203
249
|
const bindWaitForConnectionUpdate = (ev) => bindWaitForEvent(ev, 'connection.update');
|
|
204
250
|
exports.bindWaitForConnectionUpdate = bindWaitForConnectionUpdate;
|
|
205
251
|
const printQRIfNecessaryListener = (ev, logger) => {
|
|
206
252
|
ev.on('connection.update', async ({ qr }) => {
|
|
207
253
|
if (qr) {
|
|
208
|
-
const QR = await
|
|
209
|
-
.then(m => m.default || m)
|
|
254
|
+
const QR = await Promise.resolve().then(() => __importStar(require('qrcode-terminal'))).then(m => m.default || m)
|
|
210
255
|
.catch(() => {
|
|
211
256
|
logger.error('QR code terminal not added as dependency');
|
|
212
257
|
});
|
|
@@ -215,50 +260,81 @@ const printQRIfNecessaryListener = (ev, logger) => {
|
|
|
215
260
|
});
|
|
216
261
|
};
|
|
217
262
|
exports.printQRIfNecessaryListener = printQRIfNecessaryListener;
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
* Use to ensure your WA connection is always on the latest version
|
|
221
|
-
*/
|
|
222
|
-
const fetchLatestBaileysVersion = async (options = {}) => {
|
|
223
|
-
const URL = 'https://raw.githubusercontent.com/kiuur/bails/master/src/Defaults/baileys-version.json';
|
|
263
|
+
|
|
264
|
+
const fetchLatestVyzenBaileysxVersion = async (options = {}) => {
|
|
224
265
|
try {
|
|
225
|
-
const
|
|
266
|
+
const { data } = await axios_1.default.get('https://registry.npmjs.org/vyzen-baileysx', {
|
|
226
267
|
...options,
|
|
227
268
|
responseType: 'json'
|
|
228
269
|
});
|
|
270
|
+
const versionStr = data.version;
|
|
271
|
+
const [major, minor, patch] = versionStr.split('.').map(Number);
|
|
229
272
|
return {
|
|
230
|
-
version:
|
|
273
|
+
version: [major, minor, patch],
|
|
231
274
|
isLatest: true
|
|
232
275
|
};
|
|
276
|
+
} catch (error) {
|
|
277
|
+
return {
|
|
278
|
+
version: vyzen_baileysx_version_json_1.version,
|
|
279
|
+
isLatest: false,
|
|
280
|
+
error
|
|
281
|
+
};
|
|
233
282
|
}
|
|
234
|
-
|
|
283
|
+
};
|
|
284
|
+
exports.fetchLatestVyzenBaileysxVersion = fetchLatestVyzenBaileysxVersion;
|
|
285
|
+
|
|
286
|
+
const fetchLatestBaileysVersion = async (options = {}) => {
|
|
287
|
+
try {
|
|
288
|
+
const { data } = await axios_1.default.get('https://registry.npmjs.org/vyzen-baileysx', {
|
|
289
|
+
...options,
|
|
290
|
+
responseType: 'json'
|
|
291
|
+
});
|
|
292
|
+
const versionStr = data.version;
|
|
293
|
+
const [major, minor, patch] = versionStr.split('.').map(Number);
|
|
235
294
|
return {
|
|
236
|
-
version:
|
|
295
|
+
version: [major, minor, patch],
|
|
296
|
+
isLatest: true
|
|
297
|
+
};
|
|
298
|
+
} catch (error) {
|
|
299
|
+
return {
|
|
300
|
+
version: vyzen_baileysx_version_json_1.version,
|
|
237
301
|
isLatest: false,
|
|
238
302
|
error
|
|
239
303
|
};
|
|
240
304
|
}
|
|
241
305
|
};
|
|
242
306
|
exports.fetchLatestBaileysVersion = fetchLatestBaileysVersion;
|
|
307
|
+
|
|
243
308
|
/**
|
|
244
309
|
* A utility that fetches the latest web version of whatsapp.
|
|
245
310
|
* Use to ensure your WA connection is always on the latest version
|
|
246
311
|
*/
|
|
247
312
|
const fetchLatestWaWebVersion = async (options) => {
|
|
248
313
|
try {
|
|
249
|
-
const
|
|
314
|
+
const { data } = await axios_1.default.get('https://web.whatsapp.com/sw.js', {
|
|
250
315
|
...options,
|
|
251
316
|
responseType: 'json'
|
|
252
317
|
});
|
|
253
|
-
const
|
|
318
|
+
const regex = /\\?"client_revision\\?":\s*(\d+)/;
|
|
319
|
+
const match = data.match(regex);
|
|
320
|
+
if (!(match === null || match === void 0 ? void 0 : match[1])) {
|
|
321
|
+
return {
|
|
322
|
+
version: vyzen_baileysx_version_json_1.version,
|
|
323
|
+
isLatest: false,
|
|
324
|
+
error: {
|
|
325
|
+
message: 'Could not find client revision in the fetched content'
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
const clientRevision = match[1];
|
|
254
330
|
return {
|
|
255
|
-
version: [
|
|
331
|
+
version: [2, 3000, +clientRevision],
|
|
256
332
|
isLatest: true
|
|
257
333
|
};
|
|
258
334
|
}
|
|
259
335
|
catch (error) {
|
|
260
336
|
return {
|
|
261
|
-
version:
|
|
337
|
+
version: vyzen_baileysx_version_json_1.version,
|
|
262
338
|
isLatest: false,
|
|
263
339
|
error
|
|
264
340
|
};
|
|
@@ -272,6 +348,7 @@ const generateMdTagPrefix = () => {
|
|
|
272
348
|
};
|
|
273
349
|
exports.generateMdTagPrefix = generateMdTagPrefix;
|
|
274
350
|
const STATUS_MAP = {
|
|
351
|
+
'sender': WAProto_1.proto.WebMessageInfo.Status.SERVER_ACK,
|
|
275
352
|
'played': WAProto_1.proto.WebMessageInfo.Status.PLAYED,
|
|
276
353
|
'read': WAProto_1.proto.WebMessageInfo.Status.READ,
|
|
277
354
|
'read-self': WAProto_1.proto.WebMessageInfo.Status.READ
|
|
@@ -320,7 +397,8 @@ const getCallStatusFromNode = ({ tag, attrs }) => {
|
|
|
320
397
|
status = 'timeout';
|
|
321
398
|
}
|
|
322
399
|
else {
|
|
323
|
-
|
|
400
|
+
// fired when accepted/rejected/timeout/caller hangs up
|
|
401
|
+
status = 'terminate';
|
|
324
402
|
}
|
|
325
403
|
break;
|
|
326
404
|
case 'reject':
|
|
@@ -369,7 +447,6 @@ function trimUndefined(obj) {
|
|
|
369
447
|
}
|
|
370
448
|
return obj;
|
|
371
449
|
}
|
|
372
|
-
exports.trimUndefined = trimUndefined;
|
|
373
450
|
const CROCKFORD_CHARACTERS = '123456789ABCDEFGHJKLMNPQRSTVWXYZ';
|
|
374
451
|
function bytesToCrockford(buffer) {
|
|
375
452
|
let value = 0;
|
|
@@ -388,4 +465,5 @@ function bytesToCrockford(buffer) {
|
|
|
388
465
|
}
|
|
389
466
|
return crockford.join('');
|
|
390
467
|
}
|
|
468
|
+
exports.trimUndefined = trimUndefined;
|
|
391
469
|
exports.bytesToCrockford = bytesToCrockford;
|
package/lib/Utils/history.js
CHANGED
|
@@ -32,13 +32,9 @@ const processHistoryMessage = (item) => {
|
|
|
32
32
|
case WAProto_1.proto.HistorySync.HistorySyncType.INITIAL_BOOTSTRAP:
|
|
33
33
|
case WAProto_1.proto.HistorySync.HistorySyncType.RECENT:
|
|
34
34
|
case WAProto_1.proto.HistorySync.HistorySyncType.FULL:
|
|
35
|
+
case WAProto_1.proto.HistorySync.HistorySyncType.ON_DEMAND:
|
|
35
36
|
for (const chat of item.conversations) {
|
|
36
|
-
contacts.push({
|
|
37
|
-
id: chat.id,
|
|
38
|
-
name: chat.name || undefined,
|
|
39
|
-
lid: chat.lidJid || undefined,
|
|
40
|
-
jid: (0, WABinary_1.isJidUser)(chat.id) ? chat.id : undefined
|
|
41
|
-
});
|
|
37
|
+
contacts.push({ id: chat.id, name: chat.name || undefined, lid: chat.lidJid || undefined, jid: (0, WABinary_1.isJidUser)(chat.id) ? chat.id : chat.pnJid });
|
|
42
38
|
const msgs = chat.messages || [];
|
|
43
39
|
delete chat.messages;
|
|
44
40
|
delete chat.archived;
|
|
@@ -79,6 +75,8 @@ const processHistoryMessage = (item) => {
|
|
|
79
75
|
chats,
|
|
80
76
|
contacts,
|
|
81
77
|
messages,
|
|
78
|
+
syncType: item.syncType,
|
|
79
|
+
progress: item.progress
|
|
82
80
|
};
|
|
83
81
|
};
|
|
84
82
|
exports.processHistoryMessage = processHistoryMessage;
|
package/lib/Utils/index.js
CHANGED
|
@@ -31,3 +31,5 @@ __exportStar(require("./use-multi-file-auth-state"), exports);
|
|
|
31
31
|
__exportStar(require("./link-preview"), exports);
|
|
32
32
|
__exportStar(require("./event-buffer"), exports);
|
|
33
33
|
__exportStar(require("./process-message"), exports);
|
|
34
|
+
__exportStar(require("./message-retry-manager"), exports);
|
|
35
|
+
__exportStar(require("./browser-utils"), exports);
|
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.getUrlInfo = void 0;
|
|
4
37
|
const messages_1 = require("./messages");
|
|
@@ -25,7 +58,7 @@ const getUrlInfo = async (text, opts = {
|
|
|
25
58
|
// retries
|
|
26
59
|
const retries = 0;
|
|
27
60
|
const maxRetry = 5;
|
|
28
|
-
const { getLinkPreview } = await
|
|
61
|
+
const { getLinkPreview } = await Promise.resolve().then(() => __importStar(require('link-preview-js')));
|
|
29
62
|
let previewLink = text;
|
|
30
63
|
if (!text.startsWith('https://') && !text.startsWith('http://')) {
|
|
31
64
|
previewLink = 'https://' + previewLink;
|
package/lib/Utils/lt-hash.js
CHANGED
|
@@ -30,15 +30,15 @@ class d {
|
|
|
30
30
|
var n = this;
|
|
31
31
|
return n.add(n.subtract(e, r), t);
|
|
32
32
|
}
|
|
33
|
-
_addSingle(e, t) {
|
|
33
|
+
async _addSingle(e, t) {
|
|
34
34
|
var r = this;
|
|
35
|
-
const n = new Uint8Array((0, crypto_1.hkdf)(Buffer.from(t), o, { info: r.salt })).buffer;
|
|
36
|
-
return r.performPointwiseWithOverflow(e, n, ((e, t) => e + t));
|
|
35
|
+
const n = new Uint8Array(await (0, crypto_1.hkdf)(Buffer.from(t), o, { info: r.salt })).buffer;
|
|
36
|
+
return r.performPointwiseWithOverflow(await e, n, ((e, t) => e + t));
|
|
37
37
|
}
|
|
38
|
-
_subtractSingle(e, t) {
|
|
38
|
+
async _subtractSingle(e, t) {
|
|
39
39
|
var r = this;
|
|
40
|
-
const n = new Uint8Array((0, crypto_1.hkdf)(Buffer.from(t), o, { info: r.salt })).buffer;
|
|
41
|
-
return r.performPointwiseWithOverflow(e, n, ((e, t) => e - t));
|
|
40
|
+
const n = new Uint8Array(await (0, crypto_1.hkdf)(Buffer.from(t), o, { info: r.salt })).buffer;
|
|
41
|
+
return r.performPointwiseWithOverflow(await e, n, ((e, t) => e - t));
|
|
42
42
|
}
|
|
43
43
|
performPointwiseWithOverflow(e, t, r) {
|
|
44
44
|
const n = new DataView(e), i = new DataView(t), a = new ArrayBuffer(n.byteLength), s = new DataView(a);
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageRetryManager = void 0;
|
|
4
|
+
|
|
5
|
+
const lru_cache_1 = require("lru-cache");
|
|
6
|
+
|
|
7
|
+
const RECENT_MESSAGES_SIZE = 512;
|
|
8
|
+
|
|
9
|
+
const RECREATE_SESSION_TIMEOUT = 60 * 60 * 1000;
|
|
10
|
+
|
|
11
|
+
const PHONE_REQUEST_DELAY = 3000;
|
|
12
|
+
|
|
13
|
+
class MessageRetryManager {
|
|
14
|
+
constructor(logger, maxMsgRetryCount) {
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
this.maxMsgRetryCount = maxMsgRetryCount;
|
|
17
|
+
this._recentMessagesMap = new lru_cache_1.LRUCache({
|
|
18
|
+
max: RECENT_MESSAGES_SIZE
|
|
19
|
+
});
|
|
20
|
+
this._sessionRecreateHistory = new lru_cache_1.LRUCache({
|
|
21
|
+
ttl: RECREATE_SESSION_TIMEOUT * 2,
|
|
22
|
+
ttlAutopurge: true
|
|
23
|
+
});
|
|
24
|
+
this._retryCounters = new lru_cache_1.LRUCache({
|
|
25
|
+
ttl: 15 * 60 * 1000,
|
|
26
|
+
ttlAutopurge: true,
|
|
27
|
+
updateAgeOnGet: true
|
|
28
|
+
});
|
|
29
|
+
this._pendingPhoneRequests = {};
|
|
30
|
+
this.statistics = {
|
|
31
|
+
totalRetries: 0,
|
|
32
|
+
successfulRetries: 0,
|
|
33
|
+
failedRetries: 0,
|
|
34
|
+
mediaRetries: 0,
|
|
35
|
+
sessionRecreations: 0,
|
|
36
|
+
phoneRequests: 0
|
|
37
|
+
};
|
|
38
|
+
this.maxMsgRetryCount = maxMsgRetryCount;
|
|
39
|
+
}
|
|
40
|
+
addRecentMessage(to, id, message) {
|
|
41
|
+
const key = { to, id };
|
|
42
|
+
const keyStr = this._keyToString(key);
|
|
43
|
+
this._recentMessagesMap.set(keyStr, {
|
|
44
|
+
message,
|
|
45
|
+
timestamp: Date.now()
|
|
46
|
+
});
|
|
47
|
+
this.logger.debug(`Added message to retry cache: ${to}/${id}`);
|
|
48
|
+
}
|
|
49
|
+
getRecentMessage(to, id) {
|
|
50
|
+
const key = { to, id };
|
|
51
|
+
const keyStr = this._keyToString(key);
|
|
52
|
+
return this._recentMessagesMap.get(keyStr);
|
|
53
|
+
}
|
|
54
|
+
shouldRecreateSession(jid, retryCount, hasSession) {
|
|
55
|
+
if (!hasSession) {
|
|
56
|
+
this._sessionRecreateHistory.set(jid, Date.now());
|
|
57
|
+
this.statistics.sessionRecreations++;
|
|
58
|
+
return {
|
|
59
|
+
reason: "we don't have a Signal session with them",
|
|
60
|
+
recreate: true
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (retryCount < 2) {
|
|
64
|
+
return { reason: '', recreate: false };
|
|
65
|
+
}
|
|
66
|
+
const now = Date.now();
|
|
67
|
+
const prevTime = this._sessionRecreateHistory.get(jid);
|
|
68
|
+
if (!prevTime || now - prevTime > RECREATE_SESSION_TIMEOUT) {
|
|
69
|
+
this._sessionRecreateHistory.set(jid, now);
|
|
70
|
+
this.statistics.sessionRecreations++;
|
|
71
|
+
return {
|
|
72
|
+
reason: 'retry count > 1 and over an hour since last recreation',
|
|
73
|
+
recreate: true
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return { reason: '', recreate: false };
|
|
77
|
+
}
|
|
78
|
+
incrementRetryCount(messageId) {
|
|
79
|
+
this._retryCounters.set(messageId, (this._retryCounters.get(messageId) || 0) + 1);
|
|
80
|
+
this.statistics.totalRetries++;
|
|
81
|
+
return this._retryCounters.get(messageId);
|
|
82
|
+
}
|
|
83
|
+
getRetryCount(messageId) {
|
|
84
|
+
return this._retryCounters.get(messageId) || 0;
|
|
85
|
+
}
|
|
86
|
+
hasExceededMaxRetries(messageId) {
|
|
87
|
+
return this.getRetryCount(messageId) >= this.maxMsgRetryCount;
|
|
88
|
+
}
|
|
89
|
+
markRetrySuccess(messageId) {
|
|
90
|
+
this.statistics.successfulRetries++;
|
|
91
|
+
this._retryCounters.delete(messageId);
|
|
92
|
+
this._cancelPendingPhoneRequest(messageId);
|
|
93
|
+
}
|
|
94
|
+
markRetryFailed(messageId) {
|
|
95
|
+
this.statistics.failedRetries++;
|
|
96
|
+
this._retryCounters.delete(messageId);
|
|
97
|
+
}
|
|
98
|
+
schedulePhoneRequest(messageId, callback, delay = PHONE_REQUEST_DELAY) {
|
|
99
|
+
this._cancelPendingPhoneRequest(messageId);
|
|
100
|
+
this._pendingPhoneRequests[messageId] = setTimeout(() => {
|
|
101
|
+
delete this._pendingPhoneRequests[messageId];
|
|
102
|
+
this.statistics.phoneRequests++;
|
|
103
|
+
callback();
|
|
104
|
+
}, delay);
|
|
105
|
+
this.logger.debug(`Scheduled phone request for message ${messageId} with ${delay}ms delay`);
|
|
106
|
+
}
|
|
107
|
+
cancelPendingPhoneRequest(messageId) {
|
|
108
|
+
const timeout = this._pendingPhoneRequests[messageId];
|
|
109
|
+
if (timeout) {
|
|
110
|
+
clearTimeout(timeout);
|
|
111
|
+
delete this._pendingPhoneRequests[messageId];
|
|
112
|
+
this.logger.debug(`Cancelled pending phone request for message ${messageId}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
_keyToString(key) {
|
|
116
|
+
return `${key.to}:${key.id}`;
|
|
117
|
+
}
|
|
118
|
+
_cancelPendingPhoneRequest(messageId) {
|
|
119
|
+
const timeout = this._pendingPhoneRequests[messageId];
|
|
120
|
+
if (timeout) {
|
|
121
|
+
clearTimeout(timeout);
|
|
122
|
+
delete this._pendingPhoneRequests[messageId];
|
|
123
|
+
this.logger.debug(`Cancelled pending phone request for message ${messageId}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
exports.MessageRetryManager = MessageRetryManager;
|