cuki-bailx 1.2.5 → 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.
Files changed (157) hide show
  1. package/LICENSE +21 -0
  2. package/WAProto/GenerateStatics.sh +4 -0
  3. package/WAProto/WAProto.proto +4775 -0
  4. package/WAProto/index.js +56886 -17506
  5. package/engine-requirements.js +1 -1
  6. package/lib/Defaults/index.js +98 -108
  7. package/lib/Defaults/vyzen-baileysx-version.json +3 -0
  8. package/lib/Signal/libsignal.js +2 -0
  9. package/lib/Socket/Client/index.js +2 -3
  10. package/lib/Socket/Client/{web-socket-client.js → websocket.js} +54 -5
  11. package/lib/Socket/chats.js +224 -173
  12. package/lib/Socket/groups.js +20 -5
  13. package/lib/Socket/index.js +2 -2
  14. package/lib/Socket/messages-recv.js +10 -66
  15. package/lib/Socket/messages-send.js +379 -312
  16. package/lib/Socket/newsletter.js +54 -40
  17. package/lib/Socket/socket.js +58 -32
  18. package/lib/Store/index.js +1 -3
  19. package/lib/Store/make-in-memory-store.js +27 -15
  20. package/lib/Store/make-ordered-dictionary.js +2 -2
  21. package/lib/Types/Label.js +1 -1
  22. package/lib/Types/LabelAssociation.js +1 -1
  23. package/lib/Types/Message.js +0 -2
  24. package/lib/Types/Newsletter.js +3 -17
  25. package/lib/Types/index.js +2 -2
  26. package/lib/Utils/auth-utils.js +6 -13
  27. package/lib/Utils/baileys-event-stream.js +1 -1
  28. package/lib/Utils/browser-utils.js +35 -0
  29. package/lib/Utils/business.js +2 -2
  30. package/lib/Utils/chat-utils.js +36 -35
  31. package/lib/Utils/crypto.js +71 -29
  32. package/lib/Utils/decode-wa-message.js +65 -56
  33. package/lib/Utils/event-buffer.js +13 -9
  34. package/lib/Utils/generics.js +107 -29
  35. package/lib/Utils/history.js +4 -6
  36. package/lib/Utils/index.js +2 -0
  37. package/lib/Utils/link-preview.js +34 -1
  38. package/lib/Utils/lt-hash.js +6 -6
  39. package/lib/Utils/message-retry-manager.js +128 -0
  40. package/lib/Utils/messages-media.js +263 -115
  41. package/lib/Utils/messages.js +500 -93
  42. package/lib/Utils/noise-handler.js +18 -23
  43. package/lib/Utils/process-message.js +108 -25
  44. package/lib/Utils/signal.js +37 -35
  45. package/lib/Utils/use-multi-file-auth-state.js +51 -6
  46. package/lib/Utils/validate-connection.js +90 -66
  47. package/lib/WABinary/constants.js +1276 -13
  48. package/lib/WABinary/decode.js +26 -13
  49. package/lib/WABinary/encode.js +39 -17
  50. package/lib/WABinary/generic-utils.js +2 -85
  51. package/lib/WABinary/jid-utils.js +28 -5
  52. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
  53. package/lib/index.js +18 -5
  54. package/package.json +109 -104
  55. package/lib/Defaults/baileys-version.json +0 -3
  56. package/lib/Defaults/index.d.ts +0 -53
  57. package/lib/Defaults/phonenumber-mcc.json +0 -223
  58. package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
  59. package/lib/Signal/Group/group-session-builder.d.ts +0 -14
  60. package/lib/Signal/Group/group_cipher.d.ts +0 -17
  61. package/lib/Signal/Group/index.d.ts +0 -11
  62. package/lib/Signal/Group/keyhelper.d.ts +0 -10
  63. package/lib/Signal/Group/queue-job.d.ts +0 -1
  64. package/lib/Signal/Group/sender-chain-key.d.ts +0 -13
  65. package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -16
  66. package/lib/Signal/Group/sender-key-message.d.ts +0 -18
  67. package/lib/Signal/Group/sender-key-name.d.ts +0 -17
  68. package/lib/Signal/Group/sender-key-record.d.ts +0 -30
  69. package/lib/Signal/Group/sender-key-state.d.ts +0 -38
  70. package/lib/Signal/Group/sender-message-key.d.ts +0 -11
  71. package/lib/Signal/libsignal.d.ts +0 -3
  72. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
  73. package/lib/Socket/Client/index.d.ts +0 -3
  74. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  75. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  76. package/lib/Socket/Client/web-socket-client.d.ts +0 -12
  77. package/lib/Socket/business.d.ts +0 -171
  78. package/lib/Socket/chats.d.ts +0 -80
  79. package/lib/Socket/dugong.d.ts +0 -219
  80. package/lib/Socket/dugong.js +0 -441
  81. package/lib/Socket/groups.d.ts +0 -115
  82. package/lib/Socket/index.d.ts +0 -173
  83. package/lib/Socket/messages-recv.d.ts +0 -161
  84. package/lib/Socket/messages-send.d.ts +0 -149
  85. package/lib/Socket/newsletter.d.ts +0 -134
  86. package/lib/Socket/registration.d.ts +0 -267
  87. package/lib/Socket/registration.js +0 -166
  88. package/lib/Socket/socket.d.ts +0 -43
  89. package/lib/Socket/socket.js.bak +0 -630
  90. package/lib/Socket/usync.d.ts +0 -36
  91. package/lib/Store/index.d.ts +0 -3
  92. package/lib/Store/make-cache-manager-store.d.ts +0 -13
  93. package/lib/Store/make-cache-manager-store.js +0 -83
  94. package/lib/Store/make-in-memory-store.d.ts +0 -118
  95. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  96. package/lib/Store/object-repository.d.ts +0 -10
  97. package/lib/Types/Auth.d.ts +0 -110
  98. package/lib/Types/Call.d.ts +0 -13
  99. package/lib/Types/Chat.d.ts +0 -102
  100. package/lib/Types/Contact.d.ts +0 -19
  101. package/lib/Types/Events.d.ts +0 -157
  102. package/lib/Types/GroupMetadata.d.ts +0 -55
  103. package/lib/Types/Label.d.ts +0 -35
  104. package/lib/Types/LabelAssociation.d.ts +0 -29
  105. package/lib/Types/Message.d.ts +0 -273
  106. package/lib/Types/Newsletter.d.ts +0 -92
  107. package/lib/Types/Product.d.ts +0 -78
  108. package/lib/Types/Signal.d.ts +0 -57
  109. package/lib/Types/Socket.d.ts +0 -111
  110. package/lib/Types/State.d.ts +0 -27
  111. package/lib/Types/USync.d.ts +0 -25
  112. package/lib/Types/index.d.ts +0 -57
  113. package/lib/Utils/auth-utils.d.ts +0 -18
  114. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  115. package/lib/Utils/business.d.ts +0 -22
  116. package/lib/Utils/chat-utils.d.ts +0 -71
  117. package/lib/Utils/crypto.d.ts +0 -41
  118. package/lib/Utils/decode-wa-message.d.ts +0 -19
  119. package/lib/Utils/event-buffer.d.ts +0 -35
  120. package/lib/Utils/generics.d.ts +0 -92
  121. package/lib/Utils/history.d.ts +0 -15
  122. package/lib/Utils/index.d.ts +0 -17
  123. package/lib/Utils/link-preview.d.ts +0 -21
  124. package/lib/Utils/logger.d.ts +0 -4
  125. package/lib/Utils/lt-hash.d.ts +0 -12
  126. package/lib/Utils/make-mutex.d.ts +0 -7
  127. package/lib/Utils/messages-media.d.ts +0 -116
  128. package/lib/Utils/messages.d.ts +0 -77
  129. package/lib/Utils/noise-handler.d.ts +0 -21
  130. package/lib/Utils/process-message.d.ts +0 -41
  131. package/lib/Utils/signal.d.ts +0 -32
  132. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
  133. package/lib/Utils/validate-connection.d.ts +0 -11
  134. package/lib/WABinary/constants.d.ts +0 -27
  135. package/lib/WABinary/decode.d.ts +0 -7
  136. package/lib/WABinary/encode.d.ts +0 -3
  137. package/lib/WABinary/generic-utils.d.ts +0 -16
  138. package/lib/WABinary/index.d.ts +0 -5
  139. package/lib/WABinary/jid-utils.d.ts +0 -31
  140. package/lib/WABinary/types.d.ts +0 -18
  141. package/lib/WAM/BinaryInfo.d.ts +0 -17
  142. package/lib/WAM/constants.d.ts +0 -38
  143. package/lib/WAM/encode.d.ts +0 -3
  144. package/lib/WAM/index.d.ts +0 -3
  145. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
  146. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
  147. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
  148. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
  149. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
  150. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
  151. package/lib/WAUSync/Protocols/index.d.ts +0 -4
  152. package/lib/WAUSync/USyncQuery.d.ts +0 -28
  153. package/lib/WAUSync/USyncUser.d.ts +0 -12
  154. package/lib/WAUSync/index.d.ts +0 -3
  155. package/lib/index.d.ts +0 -12
  156. package/lib/index.js.bak +0 -48
  157. /package/lib/Socket/Client/{abstract-socket-client.js → types.js} +0 -0
@@ -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
- exports.bytesToCrockford = exports.trimUndefined = exports.isWABusinessPlatform = exports.getCodeFromWSError = exports.getCallStatusFromNode = exports.getErrorCodeFromStreamError = exports.getStatusFromReceiptType = exports.generateMdTagPrefix = exports.fetchLatestWaWebVersion = exports.fetchLatestBaileysVersion = exports.printQRIfNecessaryListener = exports.bindWaitForConnectionUpdate = exports.bindWaitForEvent = exports.generateMessageID = exports.generateMessageIDV2 = exports.promiseTimeout = exports.delayCancellable = exports.delay = exports.debouncedTimeout = exports.unixTimestampSeconds = exports.toNumber = exports.encodeBigEndian = exports.generateRegistrationId = exports.encodeWAMessage = exports.unpadRandomMax16 = exports.writeRandomPadMax16 = exports.getKeyAuthor = exports.BufferJSON = exports.Browsers = void 0;
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
- const baileys_version_json_1 = require("../Defaults/baileys-version.json");
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() : '1'; //chrome
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 = () => 'SH3NN-' + (0, crypto_1.randomBytes)(6).toString('hex').toUpperCase();
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 import('qrcode-terminal')
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
- * utility that fetches latest baileys version from the master branch.
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 result = await axios_1.default.get(URL, {
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: result.data.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
- catch (error) {
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: baileys_version_json_1.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 result = await axios_1.default.get('https://web.whatsapp.com/check-update?version=1&platform=web', {
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 version = result.data.currentVersion.split('.');
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: [+version[0], +version[1], +version[2]],
331
+ version: [2, 3000, +clientRevision],
256
332
  isLatest: true
257
333
  };
258
334
  }
259
335
  catch (error) {
260
336
  return {
261
- version: baileys_version_json_1.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
- status = 'reject';
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;
@@ -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;
@@ -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 import('link-preview-js');
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;
@@ -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;