@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.
Files changed (87) hide show
  1. package/WAProto/GenerateStatics.sh +4 -3
  2. package/WAProto/WAProto.proto +511 -1215
  3. package/WAProto/index.js +131318 -59331
  4. package/lib/Defaults/index.js +92 -76
  5. package/lib/Signal/Group/ciphertext-message.js +5 -2
  6. package/lib/Signal/Group/group-session-builder.js +41 -7
  7. package/lib/Signal/Group/group_cipher.js +51 -37
  8. package/lib/Signal/Group/index.js +57 -12
  9. package/lib/Signal/Group/keyhelper.js +44 -7
  10. package/lib/Signal/Group/sender-chain-key.js +15 -7
  11. package/lib/Signal/Group/sender-key-distribution-message.js +11 -8
  12. package/lib/Signal/Group/sender-key-message.js +12 -9
  13. package/lib/Signal/Group/sender-key-name.js +5 -2
  14. package/lib/Signal/Group/sender-key-record.js +21 -9
  15. package/lib/Signal/Group/sender-key-state.js +42 -27
  16. package/lib/Signal/Group/sender-message-key.js +7 -4
  17. package/lib/Signal/libsignal.js +90 -347
  18. package/lib/Socket/Client/index.js +18 -3
  19. package/lib/Socket/Client/types.js +6 -4
  20. package/lib/Socket/Client/websocket.js +78 -21
  21. package/lib/Socket/business.js +43 -162
  22. package/lib/Socket/chats.js +249 -571
  23. package/lib/Socket/groups.js +99 -114
  24. package/lib/Socket/index.js +9 -11
  25. package/lib/Socket/messages-recv.js +559 -1277
  26. package/lib/Socket/messages-send.js +669 -674
  27. package/lib/Socket/newsletter.js +286 -149
  28. package/lib/Socket/socket.js +235 -548
  29. package/lib/Types/Auth.js +2 -2
  30. package/lib/Types/Call.js +2 -2
  31. package/lib/Types/Chat.js +4 -8
  32. package/lib/Types/Contact.js +2 -2
  33. package/lib/Types/Events.js +2 -2
  34. package/lib/Types/GroupMetadata.js +2 -2
  35. package/lib/Types/Label.js +5 -3
  36. package/lib/Types/LabelAssociation.js +5 -3
  37. package/lib/Types/Message.js +7 -11
  38. package/lib/Types/Product.js +2 -2
  39. package/lib/Types/Signal.js +2 -2
  40. package/lib/Types/Socket.js +2 -3
  41. package/lib/Types/State.js +2 -56
  42. package/lib/Types/USync.js +2 -2
  43. package/lib/Types/index.js +31 -15
  44. package/lib/Utils/auth-utils.js +136 -239
  45. package/lib/Utils/business.js +69 -66
  46. package/lib/Utils/chat-utils.js +238 -380
  47. package/lib/Utils/crypto.js +127 -56
  48. package/lib/Utils/decode-wa-message.js +63 -173
  49. package/lib/Utils/event-buffer.js +70 -174
  50. package/lib/Utils/generics.js +207 -159
  51. package/lib/Utils/history.js +53 -93
  52. package/lib/Utils/index.js +33 -22
  53. package/lib/Utils/link-preview.js +58 -17
  54. package/lib/Utils/logger.js +7 -3
  55. package/lib/Utils/lt-hash.js +46 -3
  56. package/lib/Utils/make-mutex.js +34 -24
  57. package/lib/Utils/messages-media.js +744 -483
  58. package/lib/Utils/messages.js +621 -411
  59. package/lib/Utils/noise-handler.js +99 -149
  60. package/lib/Utils/process-message.js +150 -459
  61. package/lib/Utils/signal.js +73 -112
  62. package/lib/Utils/use-multi-file-auth-state.js +27 -23
  63. package/lib/Utils/validate-connection.js +104 -74
  64. package/lib/WABinary/constants.js +11 -9
  65. package/lib/WABinary/decode.js +52 -49
  66. package/lib/WABinary/encode.js +49 -19
  67. package/lib/WABinary/generic-utils.js +43 -46
  68. package/lib/WABinary/index.js +21 -6
  69. package/lib/WABinary/jid-utils.js +45 -72
  70. package/lib/WABinary/types.js +2 -2
  71. package/lib/WAM/BinaryInfo.js +5 -2
  72. package/lib/WAM/constants.js +11958 -19461
  73. package/lib/WAM/encode.js +22 -17
  74. package/lib/WAM/index.js +19 -4
  75. package/lib/WAUSync/Protocols/USyncContactProtocol.js +13 -33
  76. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +14 -11
  77. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +11 -8
  78. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +13 -9
  79. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +22 -20
  80. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +8 -13
  81. package/lib/WAUSync/Protocols/index.js +20 -6
  82. package/lib/WAUSync/USyncQuery.js +35 -44
  83. package/lib/WAUSync/USyncUser.js +5 -10
  84. package/lib/WAUSync/index.js +19 -4
  85. package/lib/index.js +70 -11
  86. package/package.json +60 -100
  87. package/engine-requirements.js +0 -10
@@ -1,45 +1,110 @@
1
- import { Boom } from '@hapi/boom';
2
- import { createHash, randomBytes } from 'crypto';
3
- import { proto } from '../../WAProto/index.js';
4
- const baileysVersion = [2, 3000, 1035194821];
5
- import { DisconnectReason } from '../Types/index.js';
6
- import { getAllBinaryNodeChildren, jidDecode } from '../WABinary/index.js';
7
- import { sha256 } from './crypto.js';
8
- export const BufferJSON = {
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
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?.type === 'Buffer') {
12
- return { type: 'Buffer', data: Buffer.from(value?.data || value).toString('base64') };
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 !== null && value.type === 'Buffer' && typeof value.data === 'string') {
19
- return Buffer.from(value.data, 'base64');
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
- export const getKeyAuthor = (key, meId = 'me') => (key?.fromMe ? meId : key?.participantAlt || key?.remoteJidAlt || key?.participant || key?.remoteJid) || '';
34
- export const isStringNullOrEmpty = (value) =>
35
- // eslint-disable-next-line eqeqeq
36
- value == null || value === '';
37
- export const writeRandomPadMax16 = (msg) => {
38
- const pad = randomBytes(1);
39
- const padLength = (pad[0] & 0x0f) + 1;
40
- return Buffer.concat([msg, Buffer.alloc(padLength, padLength)]);
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
- export const unpadRandomMax16 = (e) => {
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
- // code is inspired by whatsmeow
54
- export const generateParticipantHashV2 = (participants) => {
55
- participants.sort();
56
- const sha256Hash = sha256(Buffer.from(participants.join(''))).toString('base64');
57
- return '2:' + sha256Hash.slice(0, 6);
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
- export const encodeWAMessage = (message) => writeRandomPadMax16(proto.Message.encode(message).finish());
60
- export const generateRegistrationId = () => {
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
- export const toNumber = (t) => typeof t === 'object' && t ? ('toNumber' in t ? t.toNumber() : t.low) : t || 0;
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
- export const unixTimestampSeconds = (date = new Date()) => Math.floor(date.getTime() / 1000);
75
- export const debouncedTimeout = (intervalMs = 1000, task) => {
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?.(), intervalMs);
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) => (task = newTask),
89
- setInterval: (newInterval) => (intervalMs = newInterval)
155
+ setTask: (newTask) => task = newTask,
156
+ setInterval: (newInterval) => intervalMs = newInterval
90
157
  };
91
158
  };
92
- export const delay = (ms) => delayCancellable(ms).delay;
93
- export const delayCancellable = (ms) => {
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
- export async function promiseTimeout(ms, promise) {
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
- }).finally(cancel);
199
+ })
200
+ .finally(cancel);
130
201
  return p;
131
202
  }
132
- // inspired from whatsmeow code
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?.user) {
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
- export const generateMessageID = () => '3EB0' + randomBytes(18).toString('hex').toUpperCase();
151
- export function bindWaitForEvent(ev, event) {
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?.error || new Boom('Connection Closed', { statusCode: DisconnectReason.connectionClosed }));
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
- }).finally(() => {
240
+ })
241
+ .finally(() => {
169
242
  ev.off(event, listener);
170
243
  ev.off('connection.update', closeListener);
171
- });
244
+ }));
172
245
  };
173
246
  }
174
- export const bindWaitForConnectionUpdate = (ev) => bindWaitForEvent(ev, 'connection.update');
175
- /**
176
- * utility that fetches latest baileys version from the master branch.
177
- * Use to ensure your WA connection is always on the latest version
178
- */
179
- export const fetchLatestBaileysVersion = async (options = {}) => {
180
- const URL = 'https://raw.githubusercontent.com/WhiskeySockets/Baileys/master/src/Defaults/index.ts';
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 response = await fetch(URL, {
183
- dispatcher: options.dispatcher,
184
- method: 'GET',
185
- headers: options.headers
264
+ const result = await axios_1.default.get(URL, {
265
+ ...options,
266
+ responseType: 'json'
186
267
  });
187
- if (!response.ok) {
188
- throw new Boom(`Failed to fetch latest Baileys version: ${response.statusText}`, { statusCode: response.status });
189
- }
190
- const text = await response.text();
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: baileysVersion,
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
- export const fetchLatestWaWebVersion = async (options = {}) => {
286
+ const fetchLatestWaWebVersion = async (options) => {
219
287
  try {
220
- // Absolute minimal headers required to bypass anti-bot detection
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
- method: 'GET',
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?.[1]) {
294
+ if (!(match === null || match === void 0 ? void 0 : match[1])) {
238
295
  return {
239
- version: baileysVersion,
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: baileysVersion,
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
- export const generateMdTagPrefix = () => {
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
- export const getStatusFromReceiptType = (type) => {
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
- export const getErrorCodeFromStreamError = (node) => {
290
- const [reasonNode] = getAllBinaryNodeChildren(node);
291
- let reason = reasonNode?.tag || 'unknown';
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
- export const getCallStatusFromNode = ({ tag, attrs }) => {
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
- export const getCodeFromWSError = (error) => {
392
+ const getCodeFromWSError = (error) => {
393
+ var _a, _b, _c;
340
394
  let statusCode = 500;
341
- if (error?.message?.includes(UNEXPECTED_SERVER_CODE_TEXT)) {
342
- const code = +error?.message.slice(UNEXPECTED_SERVER_CODE_TEXT.length);
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
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
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
- export const isWABusinessPlatform = (platform) => {
412
+ const isWABusinessPlatform = (platform) => {
361
413
  return platform === 'smbi' || platform === 'smba';
362
414
  };
363
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
364
- export function trimUndefined(obj) {
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
- export function bytesToCrockford(buffer) {
425
+ function bytesToCrockford(buffer) {
374
426
  let value = 0;
375
427
  let bitCount = 0;
376
428
  const crockford = [];
377
- for (const element of buffer) {
378
- value = (value << 8) | (element & 0xff);
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