@ubedsockets/baileys 1.6.6 → 1.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/WAProto/GenerateStatics.sh +4 -3
- package/WAProto/WAProto.proto +511 -1215
- package/WAProto/index.js +131318 -59331
- package/lib/Defaults/index.js +92 -76
- package/lib/Signal/Group/ciphertext-message.js +5 -2
- package/lib/Signal/Group/group-session-builder.js +41 -7
- package/lib/Signal/Group/group_cipher.js +51 -37
- package/lib/Signal/Group/index.js +57 -12
- package/lib/Signal/Group/keyhelper.js +44 -7
- package/lib/Signal/Group/sender-chain-key.js +15 -7
- package/lib/Signal/Group/sender-key-distribution-message.js +11 -8
- package/lib/Signal/Group/sender-key-message.js +12 -9
- package/lib/Signal/Group/sender-key-name.js +5 -2
- package/lib/Signal/Group/sender-key-record.js +21 -9
- package/lib/Signal/Group/sender-key-state.js +42 -27
- package/lib/Signal/Group/sender-message-key.js +7 -4
- package/lib/Signal/libsignal.js +90 -347
- package/lib/Socket/Client/index.js +18 -3
- package/lib/Socket/Client/types.js +6 -4
- package/lib/Socket/Client/websocket.js +78 -21
- package/lib/Socket/business.js +43 -162
- package/lib/Socket/chats.js +249 -571
- package/lib/Socket/groups.js +99 -114
- package/lib/Socket/index.js +9 -11
- package/lib/Socket/messages-recv.js +559 -1277
- package/lib/Socket/messages-send.js +669 -674
- package/lib/Socket/newsletter.js +286 -149
- package/lib/Socket/socket.js +235 -548
- package/lib/Types/Auth.js +2 -2
- package/lib/Types/Call.js +2 -2
- package/lib/Types/Chat.js +4 -8
- package/lib/Types/Contact.js +2 -2
- package/lib/Types/Events.js +2 -2
- package/lib/Types/GroupMetadata.js +2 -2
- package/lib/Types/Label.js +5 -3
- package/lib/Types/LabelAssociation.js +5 -3
- package/lib/Types/Message.js +7 -11
- package/lib/Types/Product.js +2 -2
- package/lib/Types/Signal.js +2 -2
- package/lib/Types/Socket.js +2 -3
- package/lib/Types/State.js +2 -56
- package/lib/Types/USync.js +2 -2
- package/lib/Types/index.js +31 -15
- package/lib/Utils/auth-utils.js +136 -239
- package/lib/Utils/business.js +69 -66
- package/lib/Utils/chat-utils.js +238 -380
- package/lib/Utils/crypto.js +127 -56
- package/lib/Utils/decode-wa-message.js +63 -173
- package/lib/Utils/event-buffer.js +70 -174
- package/lib/Utils/generics.js +207 -159
- package/lib/Utils/history.js +53 -93
- package/lib/Utils/index.js +33 -22
- package/lib/Utils/link-preview.js +58 -17
- package/lib/Utils/logger.js +7 -3
- package/lib/Utils/lt-hash.js +46 -3
- package/lib/Utils/make-mutex.js +34 -24
- package/lib/Utils/messages-media.js +744 -483
- package/lib/Utils/messages.js +621 -411
- package/lib/Utils/noise-handler.js +99 -149
- package/lib/Utils/process-message.js +150 -459
- package/lib/Utils/signal.js +73 -112
- package/lib/Utils/use-multi-file-auth-state.js +27 -23
- package/lib/Utils/validate-connection.js +104 -74
- package/lib/WABinary/constants.js +11 -9
- package/lib/WABinary/decode.js +52 -49
- package/lib/WABinary/encode.js +49 -19
- package/lib/WABinary/generic-utils.js +43 -46
- package/lib/WABinary/index.js +21 -6
- package/lib/WABinary/jid-utils.js +45 -72
- package/lib/WABinary/types.js +2 -2
- package/lib/WAM/BinaryInfo.js +5 -2
- package/lib/WAM/constants.js +11958 -19461
- package/lib/WAM/encode.js +22 -17
- package/lib/WAM/index.js +19 -4
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +13 -33
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +14 -11
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +11 -8
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +13 -9
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +22 -20
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +8 -13
- package/lib/WAUSync/Protocols/index.js +20 -6
- package/lib/WAUSync/USyncQuery.js +35 -44
- package/lib/WAUSync/USyncUser.js +5 -10
- package/lib/WAUSync/index.js +19 -4
- package/lib/index.js +70 -11
- package/package.json +60 -100
- package/engine-requirements.js +0 -10
package/lib/Utils/generics.js
CHANGED
|
@@ -1,45 +1,110 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.isWABusinessPlatform = exports.getCodeFromWSError = exports.getCallStatusFromNode = exports.getErrorCodeFromStreamError = exports.getStatusFromReceiptType = exports.generateMdTagPrefix = exports.fetchLatestWaWebVersion = exports.fetchLatestBaileysVersion = 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;
|
|
40
|
+
exports.promiseTimeout = promiseTimeout;
|
|
41
|
+
exports.bindWaitForEvent = bindWaitForEvent;
|
|
42
|
+
exports.trimUndefined = trimUndefined;
|
|
43
|
+
exports.bytesToCrockford = bytesToCrockford;
|
|
44
|
+
const boom_1 = require("@hapi/boom");
|
|
45
|
+
const axios_1 = __importDefault(require("axios"));
|
|
46
|
+
const crypto_1 = require("crypto");
|
|
47
|
+
const os_1 = require("os");
|
|
48
|
+
const WAProto_1 = require("../../WAProto");
|
|
49
|
+
const baileys_version_json_1 = require("../Defaults/baileys-version.json");
|
|
50
|
+
const Types_1 = require("../Types");
|
|
51
|
+
const WABinary_1 = require("../WABinary");
|
|
52
|
+
const COMPANION_PLATFORM_MAP = {
|
|
53
|
+
'Chrome': '49',
|
|
54
|
+
'Edge': '50',
|
|
55
|
+
'Firefox': '51',
|
|
56
|
+
'Opera': '53',
|
|
57
|
+
'Safari': '54'
|
|
58
|
+
};
|
|
59
|
+
const PLATFORM_MAP = {
|
|
60
|
+
'aix': 'AIX',
|
|
61
|
+
'darwin': 'Mac OS',
|
|
62
|
+
'win32': 'Windows',
|
|
63
|
+
'android': 'Android',
|
|
64
|
+
'freebsd': 'FreeBSD',
|
|
65
|
+
'openbsd': 'OpenBSD',
|
|
66
|
+
'sunos': 'Solaris'
|
|
67
|
+
};
|
|
68
|
+
exports.Browsers = {
|
|
69
|
+
ubuntu: (browser) => ['Ubuntu', browser, '22.04.4'],
|
|
70
|
+
macOS: (browser) => ['Mac OS', browser, '14.4.1'],
|
|
71
|
+
baileys: (browser) => ['Baileys', browser, '6.5.0'],
|
|
72
|
+
windows: (browser) => ['Windows', browser, '10.0.22631'],
|
|
73
|
+
/** The appropriate browser based on your OS & release */
|
|
74
|
+
appropriate: (browser) => [PLATFORM_MAP[(0, os_1.platform)()] || 'Ubuntu', browser, (0, os_1.release)()]
|
|
75
|
+
};
|
|
76
|
+
const getPlatformId = (browser) => {
|
|
77
|
+
const platformType = WAProto_1.proto.DeviceProps.PlatformType[browser.toUpperCase()];
|
|
78
|
+
return platformType ? platformType.toString() : '49'; //chrome
|
|
79
|
+
};
|
|
80
|
+
exports.getPlatformId = getPlatformId;
|
|
81
|
+
exports.BufferJSON = {
|
|
10
82
|
replacer: (k, value) => {
|
|
11
|
-
if (Buffer.isBuffer(value) || value instanceof Uint8Array || value
|
|
12
|
-
return { type: 'Buffer', data: Buffer.from(value
|
|
83
|
+
if (Buffer.isBuffer(value) || value instanceof Uint8Array || (value === null || value === void 0 ? void 0 : value.type) === 'Buffer') {
|
|
84
|
+
return { type: 'Buffer', data: Buffer.from((value === null || value === void 0 ? void 0 : value.data) || value).toString('base64') };
|
|
13
85
|
}
|
|
14
86
|
return value;
|
|
15
87
|
},
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
88
|
reviver: (_, value) => {
|
|
18
|
-
if (typeof value === 'object' && value
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
22
|
-
const keys = Object.keys(value);
|
|
23
|
-
if (keys.length > 0 && keys.every(k => !isNaN(parseInt(k, 10)))) {
|
|
24
|
-
const values = Object.values(value);
|
|
25
|
-
if (values.every(v => typeof v === 'number')) {
|
|
26
|
-
return Buffer.from(values);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
89
|
+
if (typeof value === 'object' && !!value && (value.buffer === true || value.type === 'Buffer')) {
|
|
90
|
+
const val = value.data || value.value;
|
|
91
|
+
return typeof val === 'string' ? Buffer.from(val, 'base64') : Buffer.from(val || []);
|
|
29
92
|
}
|
|
30
93
|
return value;
|
|
31
94
|
}
|
|
32
95
|
};
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
96
|
+
const getKeyAuthor = (key, meId = 'me') => (((key === null || key === void 0 ? void 0 : key.fromMe) ? meId : (key === null || key === void 0 ? void 0 : key.participant) || (key === null || key === void 0 ? void 0 : key.remoteJid)) || '');
|
|
97
|
+
exports.getKeyAuthor = getKeyAuthor;
|
|
98
|
+
const writeRandomPadMax16 = (msg) => {
|
|
99
|
+
const pad = (0, crypto_1.randomBytes)(1);
|
|
100
|
+
pad[0] &= 0xf;
|
|
101
|
+
if (!pad[0]) {
|
|
102
|
+
pad[0] = 0xf;
|
|
103
|
+
}
|
|
104
|
+
return Buffer.concat([msg, Buffer.alloc(pad[0], pad[0])]);
|
|
41
105
|
};
|
|
42
|
-
|
|
106
|
+
exports.writeRandomPadMax16 = writeRandomPadMax16;
|
|
107
|
+
const unpadRandomMax16 = (e) => {
|
|
43
108
|
const t = new Uint8Array(e);
|
|
44
109
|
if (0 === t.length) {
|
|
45
110
|
throw new Error('unpadPkcs7 given empty bytes');
|
|
@@ -50,17 +115,16 @@ export const unpadRandomMax16 = (e) => {
|
|
|
50
115
|
}
|
|
51
116
|
return new Uint8Array(t.buffer, t.byteOffset, t.length - r);
|
|
52
117
|
};
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
118
|
+
exports.unpadRandomMax16 = unpadRandomMax16;
|
|
119
|
+
const encodeWAMessage = (message) => ((0, exports.writeRandomPadMax16)(WAProto_1.proto.Message.encode(message).finish()));
|
|
120
|
+
exports.encodeWAMessage = encodeWAMessage;
|
|
121
|
+
const encodeNewsletterMessage = (message) => (WAProto_1.proto.Message.encode(message).finish());
|
|
122
|
+
exports.encodeNewsletterMessage = encodeNewsletterMessage;
|
|
123
|
+
const generateRegistrationId = () => {
|
|
124
|
+
return Uint16Array.from((0, crypto_1.randomBytes)(2))[0] & 16383;
|
|
58
125
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return Uint16Array.from(randomBytes(2))[0] & 16383;
|
|
62
|
-
};
|
|
63
|
-
export const encodeBigEndian = (e, t = 4) => {
|
|
126
|
+
exports.generateRegistrationId = generateRegistrationId;
|
|
127
|
+
const encodeBigEndian = (e, t = 4) => {
|
|
64
128
|
let r = e;
|
|
65
129
|
const a = new Uint8Array(t);
|
|
66
130
|
for (let i = t - 1; i >= 0; i--) {
|
|
@@ -69,28 +133,33 @@ export const encodeBigEndian = (e, t = 4) => {
|
|
|
69
133
|
}
|
|
70
134
|
return a;
|
|
71
135
|
};
|
|
72
|
-
|
|
136
|
+
exports.encodeBigEndian = encodeBigEndian;
|
|
137
|
+
const toNumber = (t) => ((typeof t === 'object' && t) ? ('toNumber' in t ? t.toNumber() : t.low) : t || 0);
|
|
138
|
+
exports.toNumber = toNumber;
|
|
73
139
|
/** unix timestamp of a date in seconds */
|
|
74
|
-
|
|
75
|
-
|
|
140
|
+
const unixTimestampSeconds = (date = new Date()) => Math.floor(date.getTime() / 1000);
|
|
141
|
+
exports.unixTimestampSeconds = unixTimestampSeconds;
|
|
142
|
+
const debouncedTimeout = (intervalMs = 1000, task) => {
|
|
76
143
|
let timeout;
|
|
77
144
|
return {
|
|
78
145
|
start: (newIntervalMs, newTask) => {
|
|
79
146
|
task = newTask || task;
|
|
80
147
|
intervalMs = newIntervalMs || intervalMs;
|
|
81
148
|
timeout && clearTimeout(timeout);
|
|
82
|
-
timeout = setTimeout(() => task
|
|
149
|
+
timeout = setTimeout(() => task === null || task === void 0 ? void 0 : task(), intervalMs);
|
|
83
150
|
},
|
|
84
151
|
cancel: () => {
|
|
85
152
|
timeout && clearTimeout(timeout);
|
|
86
153
|
timeout = undefined;
|
|
87
154
|
},
|
|
88
|
-
setTask: (newTask) =>
|
|
89
|
-
setInterval: (newInterval) =>
|
|
155
|
+
setTask: (newTask) => task = newTask,
|
|
156
|
+
setInterval: (newInterval) => intervalMs = newInterval
|
|
90
157
|
};
|
|
91
158
|
};
|
|
92
|
-
|
|
93
|
-
|
|
159
|
+
exports.debouncedTimeout = debouncedTimeout;
|
|
160
|
+
const delay = (ms) => (0, exports.delayCancellable)(ms).delay;
|
|
161
|
+
exports.delay = delay;
|
|
162
|
+
const delayCancellable = (ms) => {
|
|
94
163
|
const stack = new Error().stack;
|
|
95
164
|
let timeout;
|
|
96
165
|
let reject;
|
|
@@ -100,7 +169,7 @@ export const delayCancellable = (ms) => {
|
|
|
100
169
|
});
|
|
101
170
|
const cancel = () => {
|
|
102
171
|
clearTimeout(timeout);
|
|
103
|
-
reject(new Boom('Cancelled', {
|
|
172
|
+
reject(new boom_1.Boom('Cancelled', {
|
|
104
173
|
statusCode: 500,
|
|
105
174
|
data: {
|
|
106
175
|
stack
|
|
@@ -109,53 +178,56 @@ export const delayCancellable = (ms) => {
|
|
|
109
178
|
};
|
|
110
179
|
return { delay, cancel };
|
|
111
180
|
};
|
|
112
|
-
|
|
181
|
+
exports.delayCancellable = delayCancellable;
|
|
182
|
+
async function promiseTimeout(ms, promise) {
|
|
113
183
|
if (!ms) {
|
|
114
184
|
return new Promise(promise);
|
|
115
185
|
}
|
|
116
186
|
const stack = new Error().stack;
|
|
117
187
|
// Create a promise that rejects in <ms> milliseconds
|
|
118
|
-
const { delay, cancel } = delayCancellable(ms);
|
|
188
|
+
const { delay, cancel } = (0, exports.delayCancellable)(ms);
|
|
119
189
|
const p = new Promise((resolve, reject) => {
|
|
120
190
|
delay
|
|
121
|
-
.then(() => reject(new Boom('Timed Out', {
|
|
122
|
-
statusCode: DisconnectReason.timedOut,
|
|
191
|
+
.then(() => reject(new boom_1.Boom('Timed Out', {
|
|
192
|
+
statusCode: Types_1.DisconnectReason.timedOut,
|
|
123
193
|
data: {
|
|
124
194
|
stack
|
|
125
195
|
}
|
|
126
196
|
})))
|
|
127
197
|
.catch(err => reject(err));
|
|
128
198
|
promise(resolve, reject);
|
|
129
|
-
})
|
|
199
|
+
})
|
|
200
|
+
.finally(cancel);
|
|
130
201
|
return p;
|
|
131
202
|
}
|
|
132
|
-
|
|
133
|
-
// https://github.com/tulir/whatsmeow/blob/64bc969fbe78d31ae0dd443b8d4c80a5d026d07a/send.go#L42
|
|
134
|
-
export const generateMessageIDV2 = (userId) => {
|
|
203
|
+
const generateMessageIDV2 = (userId) => {
|
|
135
204
|
const data = Buffer.alloc(8 + 20 + 16);
|
|
136
205
|
data.writeBigUInt64BE(BigInt(Math.floor(Date.now() / 1000)));
|
|
137
206
|
if (userId) {
|
|
138
|
-
const id = jidDecode(userId);
|
|
139
|
-
if (id
|
|
207
|
+
const id = (0, WABinary_1.jidDecode)(userId);
|
|
208
|
+
if (id === null || id === void 0 ? void 0 : id.user) {
|
|
140
209
|
data.write(id.user, 8);
|
|
141
210
|
data.write('@c.us', 8 + id.user.length);
|
|
142
211
|
}
|
|
143
212
|
}
|
|
144
|
-
const random = randomBytes(16);
|
|
213
|
+
const random = (0, crypto_1.randomBytes)(16);
|
|
145
214
|
random.copy(data, 28);
|
|
146
|
-
const hash = createHash('sha256').update(data).digest();
|
|
215
|
+
const hash = (0, crypto_1.createHash)('sha256').update(data).digest();
|
|
147
216
|
return '3EB0' + hash.toString('hex').toUpperCase().substring(0, 18);
|
|
148
217
|
};
|
|
218
|
+
exports.generateMessageIDV2 = generateMessageIDV2;
|
|
149
219
|
// generate a random ID to attach to a message
|
|
150
|
-
|
|
151
|
-
|
|
220
|
+
const generateMessageID = () => '3EB0' + (0, crypto_1.randomBytes)(18).toString('hex').toUpperCase();
|
|
221
|
+
exports.generateMessageID = generateMessageID;
|
|
222
|
+
function bindWaitForEvent(ev, event) {
|
|
152
223
|
return async (check, timeoutMs) => {
|
|
153
224
|
let listener;
|
|
154
225
|
let closeListener;
|
|
155
|
-
await promiseTimeout(timeoutMs, (resolve, reject) => {
|
|
226
|
+
await (promiseTimeout(timeoutMs, (resolve, reject) => {
|
|
156
227
|
closeListener = ({ connection, lastDisconnect }) => {
|
|
157
228
|
if (connection === 'close') {
|
|
158
|
-
reject(lastDisconnect
|
|
229
|
+
reject((lastDisconnect === null || lastDisconnect === void 0 ? void 0 : lastDisconnect.error)
|
|
230
|
+
|| new boom_1.Boom('Connection Closed', { statusCode: Types_1.DisconnectReason.connectionClosed }));
|
|
159
231
|
}
|
|
160
232
|
};
|
|
161
233
|
ev.on('connection.update', closeListener);
|
|
@@ -165,78 +237,63 @@ export function bindWaitForEvent(ev, event) {
|
|
|
165
237
|
}
|
|
166
238
|
};
|
|
167
239
|
ev.on(event, listener);
|
|
168
|
-
})
|
|
240
|
+
})
|
|
241
|
+
.finally(() => {
|
|
169
242
|
ev.off(event, listener);
|
|
170
243
|
ev.off('connection.update', closeListener);
|
|
171
|
-
});
|
|
244
|
+
}));
|
|
172
245
|
};
|
|
173
246
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
247
|
+
const bindWaitForConnectionUpdate = (ev) => bindWaitForEvent(ev, 'connection.update');
|
|
248
|
+
exports.bindWaitForConnectionUpdate = bindWaitForConnectionUpdate;
|
|
249
|
+
const printQRIfNecessaryListener = (ev, logger) => {
|
|
250
|
+
ev.on('connection.update', async ({ qr }) => {
|
|
251
|
+
if (qr) {
|
|
252
|
+
const QR = await Promise.resolve().then(() => __importStar(require('qrcode-terminal'))).then(m => m.default || m)
|
|
253
|
+
.catch(() => {
|
|
254
|
+
logger.error('QR code terminal not added as dependency');
|
|
255
|
+
});
|
|
256
|
+
QR === null || QR === void 0 ? void 0 : QR.generate(qr, { small: true });
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
};
|
|
260
|
+
exports.printQRIfNecessaryListener = printQRIfNecessaryListener;
|
|
261
|
+
const fetchLatestBaileysVersion = async (options = {}) => {
|
|
262
|
+
const URL = 'https://raw.githubusercontent.com/WhiskeySockets/Baileys/master/src/Defaults/baileys-version.json';
|
|
181
263
|
try {
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
headers: options.headers
|
|
264
|
+
const result = await axios_1.default.get(URL, {
|
|
265
|
+
...options,
|
|
266
|
+
responseType: 'json'
|
|
186
267
|
});
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
// Extract version from line 7 (const version = [...])
|
|
192
|
-
const lines = text.split('\n');
|
|
193
|
-
const versionLine = lines[6]; // Line 7 (0-indexed)
|
|
194
|
-
const versionMatch = versionLine.match(/const version = \[(\d+),\s*(\d+),\s*(\d+)\]/);
|
|
195
|
-
if (versionMatch) {
|
|
196
|
-
const version = [parseInt(versionMatch[1]), parseInt(versionMatch[2]), parseInt(versionMatch[3])];
|
|
197
|
-
return {
|
|
198
|
-
version,
|
|
199
|
-
isLatest: true
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
throw new Error('Could not parse version from Defaults/index.ts');
|
|
204
|
-
}
|
|
268
|
+
return {
|
|
269
|
+
version: result.data.version,
|
|
270
|
+
isLatest: true
|
|
271
|
+
};
|
|
205
272
|
}
|
|
206
273
|
catch (error) {
|
|
207
274
|
return {
|
|
208
|
-
version:
|
|
275
|
+
version: baileys_version_json_1.version,
|
|
209
276
|
isLatest: false,
|
|
210
277
|
error
|
|
211
278
|
};
|
|
212
279
|
}
|
|
213
280
|
};
|
|
281
|
+
exports.fetchLatestBaileysVersion = fetchLatestBaileysVersion;
|
|
214
282
|
/**
|
|
215
283
|
* A utility that fetches the latest web version of whatsapp.
|
|
216
284
|
* Use to ensure your WA connection is always on the latest version
|
|
217
285
|
*/
|
|
218
|
-
|
|
286
|
+
const fetchLatestWaWebVersion = async (options) => {
|
|
219
287
|
try {
|
|
220
|
-
|
|
221
|
-
const defaultHeaders = {
|
|
222
|
-
'sec-fetch-site': 'none',
|
|
223
|
-
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
|
|
224
|
-
};
|
|
225
|
-
const headers = { ...defaultHeaders, ...options.headers };
|
|
226
|
-
const response = await fetch('https://web.whatsapp.com/sw.js', {
|
|
288
|
+
const { data } = await axios_1.default.get('https://web.whatsapp.com/sw.js', {
|
|
227
289
|
...options,
|
|
228
|
-
|
|
229
|
-
headers
|
|
290
|
+
responseType: 'json'
|
|
230
291
|
});
|
|
231
|
-
if (!response.ok) {
|
|
232
|
-
throw new Boom(`Failed to fetch sw.js: ${response.statusText}`, { statusCode: response.status });
|
|
233
|
-
}
|
|
234
|
-
const data = await response.text();
|
|
235
292
|
const regex = /\\?"client_revision\\?":\s*(\d+)/;
|
|
236
293
|
const match = data.match(regex);
|
|
237
|
-
if (!match
|
|
294
|
+
if (!(match === null || match === void 0 ? void 0 : match[1])) {
|
|
238
295
|
return {
|
|
239
|
-
version:
|
|
296
|
+
version: baileys_version_json_1.version,
|
|
240
297
|
isLatest: false,
|
|
241
298
|
error: {
|
|
242
299
|
message: 'Could not find client revision in the fetched content'
|
|
@@ -251,46 +308,49 @@ export const fetchLatestWaWebVersion = async (options = {}) => {
|
|
|
251
308
|
}
|
|
252
309
|
catch (error) {
|
|
253
310
|
return {
|
|
254
|
-
version:
|
|
311
|
+
version: baileys_version_json_1.version,
|
|
255
312
|
isLatest: false,
|
|
256
313
|
error
|
|
257
314
|
};
|
|
258
315
|
}
|
|
259
316
|
};
|
|
317
|
+
exports.fetchLatestWaWebVersion = fetchLatestWaWebVersion;
|
|
260
318
|
/** unique message tag prefix for MD clients */
|
|
261
|
-
|
|
262
|
-
const bytes = randomBytes(4);
|
|
319
|
+
const generateMdTagPrefix = () => {
|
|
320
|
+
const bytes = (0, crypto_1.randomBytes)(4);
|
|
263
321
|
return `${bytes.readUInt16BE()}.${bytes.readUInt16BE(2)}-`;
|
|
264
322
|
};
|
|
323
|
+
exports.generateMdTagPrefix = generateMdTagPrefix;
|
|
265
324
|
const STATUS_MAP = {
|
|
266
|
-
sender: proto.WebMessageInfo.Status.SERVER_ACK,
|
|
267
|
-
played: proto.WebMessageInfo.Status.PLAYED,
|
|
268
|
-
read: proto.WebMessageInfo.Status.READ,
|
|
269
|
-
'read-self': proto.WebMessageInfo.Status.READ
|
|
325
|
+
'sender': WAProto_1.proto.WebMessageInfo.Status.SERVER_ACK,
|
|
326
|
+
'played': WAProto_1.proto.WebMessageInfo.Status.PLAYED,
|
|
327
|
+
'read': WAProto_1.proto.WebMessageInfo.Status.READ,
|
|
328
|
+
'read-self': WAProto_1.proto.WebMessageInfo.Status.READ
|
|
270
329
|
};
|
|
271
330
|
/**
|
|
272
331
|
* Given a type of receipt, returns what the new status of the message should be
|
|
273
332
|
* @param type type from receipt
|
|
274
333
|
*/
|
|
275
|
-
|
|
334
|
+
const getStatusFromReceiptType = (type) => {
|
|
276
335
|
const status = STATUS_MAP[type];
|
|
277
336
|
if (typeof type === 'undefined') {
|
|
278
|
-
return proto.WebMessageInfo.Status.DELIVERY_ACK;
|
|
337
|
+
return WAProto_1.proto.WebMessageInfo.Status.DELIVERY_ACK;
|
|
279
338
|
}
|
|
280
339
|
return status;
|
|
281
340
|
};
|
|
341
|
+
exports.getStatusFromReceiptType = getStatusFromReceiptType;
|
|
282
342
|
const CODE_MAP = {
|
|
283
|
-
conflict: DisconnectReason.connectionReplaced
|
|
343
|
+
conflict: Types_1.DisconnectReason.connectionReplaced
|
|
284
344
|
};
|
|
285
345
|
/**
|
|
286
346
|
* Stream errors generally provide a reason, map that to a baileys DisconnectReason
|
|
287
347
|
* @param reason the string reason given, eg. "conflict"
|
|
288
348
|
*/
|
|
289
|
-
|
|
290
|
-
const [reasonNode] = getAllBinaryNodeChildren(node);
|
|
291
|
-
let reason = reasonNode
|
|
292
|
-
const statusCode = +(node.attrs.code || CODE_MAP[reason] || DisconnectReason.badSession);
|
|
293
|
-
if (statusCode === DisconnectReason.restartRequired) {
|
|
349
|
+
const getErrorCodeFromStreamError = (node) => {
|
|
350
|
+
const [reasonNode] = (0, WABinary_1.getAllBinaryNodeChildren)(node);
|
|
351
|
+
let reason = (reasonNode === null || reasonNode === void 0 ? void 0 : reasonNode.tag) || 'unknown';
|
|
352
|
+
const statusCode = +(node.attrs.code || CODE_MAP[reason] || Types_1.DisconnectReason.badSession);
|
|
353
|
+
if (statusCode === Types_1.DisconnectReason.restartRequired) {
|
|
294
354
|
reason = 'restart required';
|
|
295
355
|
}
|
|
296
356
|
return {
|
|
@@ -298,7 +358,8 @@ export const getErrorCodeFromStreamError = (node) => {
|
|
|
298
358
|
statusCode
|
|
299
359
|
};
|
|
300
360
|
};
|
|
301
|
-
|
|
361
|
+
exports.getErrorCodeFromStreamError = getErrorCodeFromStreamError;
|
|
362
|
+
const getCallStatusFromNode = ({ tag, attrs }) => {
|
|
302
363
|
let status;
|
|
303
364
|
switch (tag) {
|
|
304
365
|
case 'offer':
|
|
@@ -310,19 +371,10 @@ export const getCallStatusFromNode = ({ tag, attrs }) => {
|
|
|
310
371
|
status = 'timeout';
|
|
311
372
|
}
|
|
312
373
|
else {
|
|
313
|
-
//fired when accepted/rejected/timeout/caller hangs up
|
|
374
|
+
// fired when accepted/rejected/timeout/caller hangs up
|
|
314
375
|
status = 'terminate';
|
|
315
376
|
}
|
|
316
377
|
break;
|
|
317
|
-
case 'preaccept':
|
|
318
|
-
status = 'preaccept';
|
|
319
|
-
break;
|
|
320
|
-
case 'transport':
|
|
321
|
-
status = 'transport';
|
|
322
|
-
break;
|
|
323
|
-
case 'relaylatency':
|
|
324
|
-
status = 'relaylatency';
|
|
325
|
-
break;
|
|
326
378
|
case 'reject':
|
|
327
379
|
status = 'reject';
|
|
328
380
|
break;
|
|
@@ -335,33 +387,33 @@ export const getCallStatusFromNode = ({ tag, attrs }) => {
|
|
|
335
387
|
}
|
|
336
388
|
return status;
|
|
337
389
|
};
|
|
390
|
+
exports.getCallStatusFromNode = getCallStatusFromNode;
|
|
338
391
|
const UNEXPECTED_SERVER_CODE_TEXT = 'Unexpected server response: ';
|
|
339
|
-
|
|
392
|
+
const getCodeFromWSError = (error) => {
|
|
393
|
+
var _a, _b, _c;
|
|
340
394
|
let statusCode = 500;
|
|
341
|
-
if (error
|
|
342
|
-
const code = +error
|
|
395
|
+
if ((_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.includes(UNEXPECTED_SERVER_CODE_TEXT)) {
|
|
396
|
+
const code = +(error === null || error === void 0 ? void 0 : error.message.slice(UNEXPECTED_SERVER_CODE_TEXT.length));
|
|
343
397
|
if (!Number.isNaN(code) && code >= 400) {
|
|
344
398
|
statusCode = code;
|
|
345
399
|
}
|
|
346
400
|
}
|
|
347
|
-
else if (
|
|
348
|
-
|
|
349
|
-
error?.code?.startsWith('E') ||
|
|
350
|
-
error?.message?.includes('timed out')) {
|
|
351
|
-
// handle ETIMEOUT, ENOTFOUND etc
|
|
401
|
+
else if (((_b = error === null || error === void 0 ? void 0 : error.code) === null || _b === void 0 ? void 0 : _b.startsWith('E'))
|
|
402
|
+
|| ((_c = error === null || error === void 0 ? void 0 : error.message) === null || _c === void 0 ? void 0 : _c.includes('timed out'))) { // handle ETIMEOUT, ENOTFOUND etc
|
|
352
403
|
statusCode = 408;
|
|
353
404
|
}
|
|
354
405
|
return statusCode;
|
|
355
406
|
};
|
|
407
|
+
exports.getCodeFromWSError = getCodeFromWSError;
|
|
356
408
|
/**
|
|
357
409
|
* Is the given platform WA business
|
|
358
410
|
* @param platform AuthenticationCreds.platform
|
|
359
411
|
*/
|
|
360
|
-
|
|
412
|
+
const isWABusinessPlatform = (platform) => {
|
|
361
413
|
return platform === 'smbi' || platform === 'smba';
|
|
362
414
|
};
|
|
363
|
-
|
|
364
|
-
|
|
415
|
+
exports.isWABusinessPlatform = isWABusinessPlatform;
|
|
416
|
+
function trimUndefined(obj) {
|
|
365
417
|
for (const key in obj) {
|
|
366
418
|
if (typeof obj[key] === 'undefined') {
|
|
367
419
|
delete obj[key];
|
|
@@ -370,12 +422,12 @@ export function trimUndefined(obj) {
|
|
|
370
422
|
return obj;
|
|
371
423
|
}
|
|
372
424
|
const CROCKFORD_CHARACTERS = '123456789ABCDEFGHJKLMNPQRSTVWXYZ';
|
|
373
|
-
|
|
425
|
+
function bytesToCrockford(buffer) {
|
|
374
426
|
let value = 0;
|
|
375
427
|
let bitCount = 0;
|
|
376
428
|
const crockford = [];
|
|
377
|
-
for (
|
|
378
|
-
value = (value << 8) | (
|
|
429
|
+
for (let i = 0; i < buffer.length; i++) {
|
|
430
|
+
value = (value << 8) | (buffer[i] & 0xff);
|
|
379
431
|
bitCount += 8;
|
|
380
432
|
while (bitCount >= 5) {
|
|
381
433
|
crockford.push(CROCKFORD_CHARACTERS.charAt((value >>> (bitCount - 5)) & 31));
|
|
@@ -387,7 +439,3 @@ export function bytesToCrockford(buffer) {
|
|
|
387
439
|
}
|
|
388
440
|
return crockford.join('');
|
|
389
441
|
}
|
|
390
|
-
export function encodeNewsletterMessage(message) {
|
|
391
|
-
return proto.Message.encode(message).finish();
|
|
392
|
-
}
|
|
393
|
-
//# sourceMappingURL=generics.js.map
|