xhyphersockets 1.4.3 → 2.4.3

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 (125) hide show
  1. package/LICENSE +1 -1
  2. package/README.MD +1295 -0
  3. package/WAProto/p.html +1 -0
  4. package/lib/Defaults/index.js +47 -35
  5. package/lib/Defaults/wileys-version.json +3 -0
  6. package/lib/Socket/chats.js +132 -125
  7. package/lib/Socket/messages-recv.js +1 -1
  8. package/lib/Socket/messages-send.js +1 -32
  9. package/lib/Socket/newsletter.js +71 -124
  10. package/lib/Socket/socket.js +1 -1
  11. package/lib/Store/make-in-memory-store.js +1 -1
  12. package/lib/Types/Newsletter.js +18 -38
  13. package/lib/Utils/browser-utils.js +35 -0
  14. package/lib/Utils/event-buffer.js +2 -2
  15. package/lib/Utils/generics.js +47 -8
  16. package/lib/Utils/index.js +3 -4
  17. package/lib/Utils/message-retry-manager.js +128 -0
  18. package/lib/Utils/messages-media.js +37 -45
  19. package/lib/Utils/messages.js +19 -0
  20. package/lib/Utils/process-message.js +19 -0
  21. package/lib/Utils/use-multi-file-auth-state.js +1 -1
  22. package/lib/Utils/validate-connection.js +77 -21
  23. package/lib/Utils/{baileys-event-stream.js → wileys-event-stream.js} +1 -1
  24. package/lib/WABinary/jid-utils.js +3 -1
  25. package/lib/index.js +12 -18
  26. package/package.json +28 -22
  27. package/README.md +0 -252
  28. package/WAProto/index.d.ts +0 -55057
  29. package/WAProto/index.ts.ts +0 -53473
  30. package/lib/Defaults/baileys-version.json +0 -3
  31. package/lib/Defaults/index.d.ts +0 -51
  32. package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
  33. package/lib/Signal/Group/group-session-builder.d.ts +0 -14
  34. package/lib/Signal/Group/group_cipher.d.ts +0 -17
  35. package/lib/Signal/Group/index.d.ts +0 -11
  36. package/lib/Signal/Group/keyhelper.d.ts +0 -10
  37. package/lib/Signal/Group/queue-job.d.ts +0 -1
  38. package/lib/Signal/Group/sender-chain-key.d.ts +0 -13
  39. package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -16
  40. package/lib/Signal/Group/sender-key-message.d.ts +0 -18
  41. package/lib/Signal/Group/sender-key-name.d.ts +0 -17
  42. package/lib/Signal/Group/sender-key-record.d.ts +0 -30
  43. package/lib/Signal/Group/sender-key-state.d.ts +0 -38
  44. package/lib/Signal/Group/sender-message-key.d.ts +0 -11
  45. package/lib/Signal/libsignal.d.ts +0 -3
  46. package/lib/Socket/Client/index.d.ts +0 -2
  47. package/lib/Socket/Client/types.d.ts +0 -16
  48. package/lib/Socket/Client/websocket.d.ts +0 -13
  49. package/lib/Socket/RHandler.d.ts +0 -416
  50. package/lib/Socket/RHandler.js +0 -530
  51. package/lib/Socket/business.d.ts +0 -172
  52. package/lib/Socket/chats.d.ts +0 -94
  53. package/lib/Socket/groups.d.ts +0 -124
  54. package/lib/Socket/index.d.ts +0 -172
  55. package/lib/Socket/messages-recv.d.ts +0 -161
  56. package/lib/Socket/messages-send.d.ts +0 -152
  57. package/lib/Socket/newsletter.d.ts +0 -136
  58. package/lib/Socket/socket.d.ts +0 -43
  59. package/lib/Socket/usync.d.ts +0 -36
  60. package/lib/Store/index.d.ts +0 -2
  61. package/lib/Store/make-in-memory-store.d.ts +0 -118
  62. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  63. package/lib/Store/object-repository.d.ts +0 -10
  64. package/lib/Types/Auth.d.ts +0 -103
  65. package/lib/Types/Call.d.ts +0 -13
  66. package/lib/Types/Chat.d.ts +0 -109
  67. package/lib/Types/Contact.d.ts +0 -23
  68. package/lib/Types/Events.d.ts +0 -199
  69. package/lib/Types/GroupMetadata.d.ts +0 -64
  70. package/lib/Types/Label.d.ts +0 -35
  71. package/lib/Types/LabelAssociation.d.ts +0 -29
  72. package/lib/Types/Message.d.ts +0 -402
  73. package/lib/Types/Newsletter.d.ts +0 -103
  74. package/lib/Types/Product.d.ts +0 -78
  75. package/lib/Types/Signal.d.ts +0 -57
  76. package/lib/Types/Socket.d.ts +0 -119
  77. package/lib/Types/State.d.ts +0 -27
  78. package/lib/Types/USync.d.ts +0 -25
  79. package/lib/Types/index.d.ts +0 -64
  80. package/lib/Utils/audioToBuffer.js +0 -29
  81. package/lib/Utils/auth-utils.d.ts +0 -18
  82. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  83. package/lib/Utils/business.d.ts +0 -22
  84. package/lib/Utils/chat-utils.d.ts +0 -70
  85. package/lib/Utils/crypto.d.ts +0 -40
  86. package/lib/Utils/decode-wa-message.d.ts +0 -35
  87. package/lib/Utils/event-buffer.d.ts +0 -35
  88. package/lib/Utils/generics.d.ts +0 -89
  89. package/lib/Utils/history.d.ts +0 -19
  90. package/lib/Utils/index.d.ts +0 -19
  91. package/lib/Utils/link-preview.d.ts +0 -21
  92. package/lib/Utils/logger.d.ts +0 -11
  93. package/lib/Utils/lt-hash.d.ts +0 -12
  94. package/lib/Utils/make-mutex.d.ts +0 -7
  95. package/lib/Utils/messages-media.d.ts +0 -124
  96. package/lib/Utils/messages.d.ts +0 -75
  97. package/lib/Utils/noise-handler.d.ts +0 -19
  98. package/lib/Utils/process-message.d.ts +0 -42
  99. package/lib/Utils/signal.d.ts +0 -33
  100. package/lib/Utils/streamToBuffer.js +0 -15
  101. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -12
  102. package/lib/Utils/validate-connection.d.ts +0 -10
  103. package/lib/WABinary/constants.d.ts +0 -27
  104. package/lib/WABinary/decode.d.ts +0 -6
  105. package/lib/WABinary/encode.d.ts +0 -2
  106. package/lib/WABinary/generic-utils.d.ts +0 -14
  107. package/lib/WABinary/index.d.ts +0 -5
  108. package/lib/WABinary/jid-utils.d.ts +0 -36
  109. package/lib/WABinary/jid-utils.js.bak +0 -83
  110. package/lib/WABinary/types.d.ts +0 -18
  111. package/lib/WAM/BinaryInfo.d.ts +0 -8
  112. package/lib/WAM/constants.d.ts +0 -38
  113. package/lib/WAM/encode.d.ts +0 -2
  114. package/lib/WAM/index.d.ts +0 -3
  115. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
  116. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
  117. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
  118. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
  119. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
  120. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
  121. package/lib/WAUSync/Protocols/index.d.ts +0 -4
  122. package/lib/WAUSync/USyncQuery.d.ts +0 -28
  123. package/lib/WAUSync/USyncUser.d.ts +0 -12
  124. package/lib/WAUSync/index.d.ts +0 -3
  125. package/lib/index.d.ts +0 -16
@@ -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;
@@ -60,7 +60,6 @@ const WAProto_1 = require("../../WAProto");
60
60
  const Defaults_1 = require("../Defaults");
61
61
  const WABinary_1 = require("../WABinary");
62
62
  const crypto_1 = require("./crypto");
63
- const streamToBuffer = require("./streamToBuffer")
64
63
  const generics_1 = require("./generics");
65
64
  const getTmpFilesDirectory = () => (0, os_1.tmpdir)();
66
65
  const getImageProcessingLibrary = async () => {
@@ -365,59 +364,43 @@ async function getAudioDuration(buffer) {
365
364
  metadata = await musicMetadata.parseStream(buffer, undefined, options);
366
365
  }
367
366
  return metadata.format.duration;
368
- }
369
- const toBuffer = async (stream) => {
370
- const chunks = [];
371
- for await (const chunk of stream) {
372
- chunks.push(chunk);
373
- }
374
- stream.destroy();
375
- return Buffer.concat(chunks);
376
- };
377
- exports.toBuffer = toBuffer;
378
-
367
+ }
379
368
  async function getAudioWaveform(buffer, logger) {
380
369
  try {
381
- const { default: decoder } = await eval('import("audio-decode")')
382
- let audioData
383
-
370
+ const { default: decoder } = await eval('import(\'audio-decode\')');
371
+ let audioData;
384
372
  if (Buffer.isBuffer(buffer)) {
385
- audioData = buffer
386
- } else if (typeof buffer === 'string') {
387
- const rStream = fs_1.createReadStream(buffer)
388
- audioData = await streamToBuffer(rStream)
389
- } else {
390
- audioData = await streamToBuffer(buffer)
373
+ audioData = buffer;
374
+ }
375
+ else if (typeof buffer === 'string') {
376
+ const rStream = (0, fs_1.createReadStream)(buffer);
377
+ audioData = await (0, exports.toBuffer)(rStream);
378
+ }
379
+ else {
380
+ audioData = await (0, exports.toBuffer)(buffer);
391
381
  }
392
-
393
- const audioBuffer = await decoder(audioData)
394
- const rawData = audioBuffer.getChannelData(0)
395
- const samples = 64
396
- const blockSize = Math.floor(rawData.length / samples)
397
- const filteredData = []
398
-
399
- // === Versi TS style: ambil RATA-RATA amplitudo biar halus ===
382
+ const audioBuffer = await decoder(audioData);
383
+ const rawData = audioBuffer.getChannelData(0);
384
+ const samples = 64;
385
+ const blockSize = Math.floor(rawData.length / samples);
386
+ const filteredData = [];
400
387
  for (let i = 0; i < samples; i++) {
401
- let sum = 0
402
- const blockStart = blockSize * i
388
+ const blockStart = blockSize * i;
389
+ let sum = 0;
403
390
  for (let j = 0; j < blockSize; j++) {
404
- sum += Math.abs(rawData[blockStart + j] || 0)
391
+ sum = sum + Math.abs(rawData[blockStart + j]);
405
392
  }
406
- filteredData.push(sum / blockSize)
393
+ filteredData.push(sum / blockSize);
407
394
  }
408
-
409
- // Normalisasi
410
- const multiplier = Math.pow(Math.max(...filteredData) || 1, -1)
411
- const normalizedData = filteredData.map((n) => n * multiplier)
412
-
413
- // Hasil akhir: Uint8Array rentang 0–100
414
- return new Uint8Array(normalizedData.map((n) => Math.floor(100 * n)))
415
- } catch (e) {
416
- logger?.debug?.('⚠️ Failed to generate waveform: ' + e)
417
- return new Uint8Array(64).fill(0)
395
+ const multiplier = Math.pow(Math.max(...filteredData), -1);
396
+ const normalizedData = filteredData.map((n) => n * multiplier);
397
+ const waveform = new Uint8Array(normalizedData.map((n) => Math.floor(100 * n)));
398
+ return waveform;
399
+ }
400
+ catch (e) {
401
+ logger === null || logger === void 0 ? void 0 : logger.debug('Failed to generate waveform: ' + e);
418
402
  }
419
403
  }
420
-
421
404
  const toReadable = (buffer) => {
422
405
  const readable = new stream_1.Readable({ read: () => { } });
423
406
  readable.push(buffer);
@@ -425,6 +408,15 @@ const toReadable = (buffer) => {
425
408
  return readable;
426
409
  };
427
410
  exports.toReadable = toReadable;
411
+ const toBuffer = async (stream) => {
412
+ const chunks = [];
413
+ for await (const chunk of stream) {
414
+ chunks.push(chunk);
415
+ }
416
+ stream.destroy();
417
+ return Buffer.concat(chunks);
418
+ };
419
+ exports.toBuffer = toBuffer;
428
420
  const getStream = async (item, opts) => {
429
421
  if (Buffer.isBuffer(item)) {
430
422
  return { stream: (0, exports.toReadable)(item), type: 'buffer' };
@@ -884,4 +876,4 @@ const MEDIA_RETRY_STATUS_MAP = {
884
876
  };
885
877
  function __importStar(arg0) {
886
878
  throw new Error('Function not implemented.');
887
- }
879
+ }
@@ -1028,3 +1028,22 @@ const assertMediaContent = (content) => {
1028
1028
  return mediaContent;
1029
1029
  };
1030
1030
  exports.assertMediaContent = assertMediaContent;
1031
+
1032
+ const toJid = (id) => {
1033
+ if (!id)
1034
+ return '';
1035
+ if (id.endsWith('@lid'))
1036
+ return id.replace('@lid', '@s.whatsapp.net');
1037
+ if (id.includes('@'))
1038
+ return id;
1039
+ return `${id}@s.whatsapp.net`;
1040
+ };
1041
+ exports.toJid = toJid;
1042
+ const getSenderLid = (message) => {
1043
+ const sender = message.key.participant || message.key.remoteJid;
1044
+ const user = (0, WABinary_1.jidDecode)(sender)?.user || '';
1045
+ const lid = (0, WABinary_1.jidEncode)(user, 'lid');
1046
+ console.log('sender lid:', lid);
1047
+ return { jid: sender, lid };
1048
+ };
1049
+ exports.getSenderLid = getSenderLid;
@@ -130,6 +130,25 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
130
130
  }
131
131
  }
132
132
  const content = (0, messages_1.normalizeMessageContent)(message.message);
133
+ const senderId = message.key.participant || message.key.remoteJid;
134
+ if ((0, WABinary_1.isLidUser)(senderId)) {
135
+ const jid = (0, WABinary_1.lidToJid)(senderId);
136
+ if (message.key.participant) {
137
+ message.key.participant = jid;
138
+ }
139
+ else {
140
+ message.key.remoteJid = jid;
141
+ }
142
+ }
143
+ const mJids = content && content.contextInfo && content.contextInfo.mentionedJid ? content.contextInfo.mentionedJid : [];
144
+ for (let i = 0; i < mJids.length; i++) {
145
+ if ((0, WABinary_1.isLidUser)(mJids[i])) {
146
+ mJids[i] = (0, WABinary_1.lidToJid)(mJids[i]);
147
+ }
148
+ }
149
+ if (content && content.contextInfo && content.contextInfo.participant && (0, WABinary_1.isLidUser)(content.contextInfo.participant)) {
150
+ content.contextInfo.participant = (0, WABinary_1.lidToJid)(content.contextInfo.participant);
151
+ }
133
152
  // unarchive chat if it's a real message, or someone reacted to our message
134
153
  // and we've the unarchive chats setting on
135
154
  if ((isRealMsg || ((_b = (_a = content === null || content === void 0 ? void 0 : content.reactionMessage) === null || _a === void 0 ? void 0 : _a.key) === null || _b === void 0 ? void 0 : _b.fromMe))
@@ -8,7 +8,7 @@ const WAProto_1 = require("../../WAProto");
8
8
  const auth_utils_1 = require("./auth-utils");
9
9
  const generics_1 = require("./generics");
10
10
  // We need to lock files due to the fact that we are using async functions to read and write files
11
- // https://github.com/WhiskeySockets/Baileys/issues/794
11
+ // https://github.com/WhiskeySockets/Wileys/issues/794
12
12
  // https://github.com/nodejs/node/issues/26338
13
13
  // Use a Map to store mutexes for each file path
14
14
  const fileLocks = new Map();
@@ -9,6 +9,7 @@ const WABinary_1 = require("../WABinary");
9
9
  const crypto_2 = require("./crypto");
10
10
  const generics_1 = require("./generics");
11
11
  const signal_1 = require("./signal");
12
+
12
13
  const getUserAgent = (config) => {
13
14
  return {
14
15
  appVersion: {
@@ -22,20 +23,25 @@ const getUserAgent = (config) => {
22
23
  device: 'Desktop',
23
24
  osBuildNumber: '0.1',
24
25
  localeLanguageIso6391: 'en',
25
- localeCountryIso31661Alpha2: 'US'
26
+ mnc: '000',
27
+ mcc: '000',
28
+ localeCountryIso31661Alpha2: config.countryCode || 'US'
26
29
  };
27
30
  };
31
+
28
32
  const PLATFORM_MAP = {
29
33
  'Mac OS': WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.DARWIN,
30
34
  'Windows': WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WIN32
31
35
  };
36
+
32
37
  const getWebInfo = (config) => {
33
38
  let webSubPlatform = WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WEB_BROWSER;
34
- if (config.syncFullHistory && PLATFORM_MAP[config.browser[0]]) {
39
+ if (config.syncFullHistory && PLATFORM_MAP[config.browser[0]] && config.browser[1] === 'Desktop') {
35
40
  webSubPlatform = PLATFORM_MAP[config.browser[0]];
36
41
  }
37
42
  return { webSubPlatform };
38
43
  };
44
+
39
45
  const getClientPayload = (config) => {
40
46
  const payload = {
41
47
  connectType: WAProto_1.proto.ClientPayload.ConnectType.WIFI_UNKNOWN,
@@ -45,34 +51,61 @@ const getClientPayload = (config) => {
45
51
  payload.webInfo = getWebInfo(config);
46
52
  return payload;
47
53
  };
54
+
48
55
  const generateLoginNode = (userJid, config) => {
49
56
  const { user, device } = (0, WABinary_1.jidDecode)(userJid);
50
57
  const payload = {
51
58
  ...getClientPayload(config),
52
- passive: false,
59
+ passive: true,
53
60
  pull: true,
54
61
  username: +user,
55
62
  device: device,
63
+ lidDbMigrated: false
56
64
  };
57
65
  return WAProto_1.proto.ClientPayload.fromObject(payload);
58
66
  };
59
67
  exports.generateLoginNode = generateLoginNode;
68
+
60
69
  const getPlatformType = (platform) => {
61
70
  const platformType = platform.toUpperCase();
62
- return WAProto_1.proto.DeviceProps.PlatformType[platformType] || WAProto_1.proto.DeviceProps.PlatformType.DESKTOP;
71
+ return WAProto_1.proto.DeviceProps.PlatformType[platformType] || WAProto_1.proto.DeviceProps.PlatformType.CHROME;
63
72
  };
73
+
64
74
  const generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentityKey }, config) => {
65
- // the app version needs to be md5 hashed
66
- // and passed in
67
75
  const appVersionBuf = (0, crypto_1.createHash)('md5')
68
- .update(config.version.join('.')) // join as string
76
+ .update(config.version.join('.'))
69
77
  .digest();
78
+
70
79
  const companion = {
71
80
  os: config.browser[0],
72
81
  platformType: getPlatformType(config.browser[1]),
73
82
  requireFullSync: config.syncFullHistory,
83
+ historySyncConfig: {
84
+ storageQuotaMb: 10240,
85
+ inlineInitialPayloadInE2EeMsg: true,
86
+ recentSyncDaysLimit: undefined,
87
+ supportCallLogHistory: false,
88
+ supportBotUserAgentChatHistory: true,
89
+ supportCagReactionsAndPolls: true,
90
+ supportBizHostedMsg: true,
91
+ supportRecentSyncChunkMessageCountTuning: true,
92
+ supportHostedGroupMsg: true,
93
+ supportFbidBotChatHistory: true,
94
+ supportAddOnHistorySyncMigration: undefined,
95
+ supportMessageAssociation: true,
96
+ supportGroupHistory: false,
97
+ onDemandReady: undefined,
98
+ supportGuestChat: undefined
99
+ },
100
+ version: {
101
+ primary: 10,
102
+ secondary: 15,
103
+ tertiary: 7
104
+ }
74
105
  };
106
+
75
107
  const companionProto = WAProto_1.proto.DeviceProps.encode(companion).finish();
108
+
76
109
  const registerPayload = {
77
110
  ...getClientPayload(config),
78
111
  passive: false,
@@ -91,6 +124,7 @@ const generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentity
91
124
  return WAProto_1.proto.ClientPayload.fromObject(registerPayload);
92
125
  };
93
126
  exports.generateRegistrationNode = generateRegistrationNode;
127
+
94
128
  const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, signalIdentities }) => {
95
129
  const msgId = stanza.attrs.id;
96
130
  const pairSuccessNode = (0, WABinary_1.getBinaryNodeChild)(stanza, 'pair-success');
@@ -98,30 +132,52 @@ const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, s
98
132
  const platformNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'platform');
99
133
  const deviceNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'device');
100
134
  const businessNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'biz');
135
+
101
136
  if (!deviceIdentityNode || !deviceNode) {
102
137
  throw new boom_1.Boom('Missing device-identity or device in pair success node', { data: stanza });
103
138
  }
104
- const bizName = businessNode === null || businessNode === void 0 ? void 0 : businessNode.attrs.name;
139
+
140
+ const bizName = businessNode?.attrs.name;
105
141
  const jid = deviceNode.attrs.jid;
142
+ const lid = deviceNode.attrs.lid;
143
+
106
144
  const { details, hmac, accountType } = WAProto_1.proto.ADVSignedDeviceIdentityHMAC.decode(deviceIdentityNode.content);
107
- const isHostedAccount = accountType !== undefined && accountType === WAProto_1.proto.ADVEncryptionType.HOSTED;
108
- const hmacPrefix = isHostedAccount ? Buffer.from([6, 5]) : Buffer.alloc(0);
145
+
146
+ let hmacPrefix = Buffer.from([]);
147
+ if (accountType !== undefined && accountType === WAProto_1.proto.ADVEncryptionType.HOSTED) {
148
+ hmacPrefix = Buffer.from([0x06, 0x05]);
149
+ }
150
+
109
151
  const advSign = (0, crypto_2.hmacSign)(Buffer.concat([hmacPrefix, details]), Buffer.from(advSecretKey, 'base64'));
110
152
  if (Buffer.compare(hmac, advSign) !== 0) {
111
153
  throw new boom_1.Boom('Invalid account signature');
112
154
  }
155
+
113
156
  const account = WAProto_1.proto.ADVSignedDeviceIdentity.decode(details);
114
157
  const { accountSignatureKey, accountSignature, details: deviceDetails } = account;
115
- const accountMsg = Buffer.concat([Buffer.from([6, 0]), deviceDetails, signedIdentityKey.public]);
158
+
159
+ const deviceIdentity = WAProto_1.proto.ADVDeviceIdentity.decode(deviceDetails);
160
+
161
+ const accountSignaturePrefix = deviceIdentity.deviceType === WAProto_1.proto.ADVEncryptionType.HOSTED
162
+ ? Buffer.from([0x06, 0x05])
163
+ : Buffer.from([0x06, 0x00]);
164
+ const accountMsg = Buffer.concat([accountSignaturePrefix, deviceDetails, signedIdentityKey.public]);
165
+
116
166
  if (!crypto_2.Curve.verify(accountSignatureKey, accountMsg, accountSignature)) {
117
167
  throw new boom_1.Boom('Failed to verify account signature');
118
168
  }
119
- const devicePrefix = isHostedAccount ? Buffer.from([6, 6]) : Buffer.from([6, 1]);
120
- const deviceMsg = Buffer.concat([devicePrefix, deviceDetails, signedIdentityKey.public, accountSignatureKey]);
169
+
170
+ const deviceMsg = Buffer.concat([
171
+ Buffer.from([0x06, 0x01]),
172
+ deviceDetails,
173
+ signedIdentityKey.public,
174
+ accountSignatureKey
175
+ ]);
121
176
  account.deviceSignature = crypto_2.Curve.sign(signedIdentityKey.private, deviceMsg);
177
+
122
178
  const identity = (0, signal_1.createSignalIdentity)(jid, accountSignatureKey);
123
179
  const accountEnc = (0, exports.encodeSignedDeviceIdentity)(account, false);
124
- const deviceIdentity = WAProto_1.proto.ADVDeviceIdentity.decode(account.details);
180
+
125
181
  const reply = {
126
182
  tag: 'iq',
127
183
  attrs: {
@@ -143,31 +199,31 @@ const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, s
143
199
  }
144
200
  ]
145
201
  };
202
+
146
203
  const authUpdate = {
147
204
  account,
148
- me: { id: jid, name: bizName },
205
+ me: { id: jid, name: bizName, lid },
149
206
  signalIdentities: [
150
207
  ...(signalIdentities || []),
151
208
  identity
152
209
  ],
153
- platform: platformNode === null || platformNode === void 0 ? void 0 : platformNode.attrs.name
210
+ platform: platformNode?.attrs.name
154
211
  };
212
+
155
213
  return {
156
214
  creds: authUpdate,
157
215
  reply
158
216
  };
159
217
  };
160
218
  exports.configureSuccessfulPairing = configureSuccessfulPairing;
219
+
161
220
  const encodeSignedDeviceIdentity = (account, includeSignatureKey) => {
162
- var _a;
163
221
  account = { ...account };
164
- // set to null if we are not to include the signature key
165
- // or if we are including the signature key but it is empty
166
- if (!includeSignatureKey || !((_a = account.accountSignatureKey) === null || _a === void 0 ? void 0 : _a.length)) {
222
+ if (!includeSignatureKey || !account.accountSignatureKey?.length) {
167
223
  account.accountSignatureKey = null;
168
224
  }
169
225
  return WAProto_1.proto.ADVSignedDeviceIdentity
170
226
  .encode(account)
171
227
  .finish();
172
228
  };
173
- exports.encodeSignedDeviceIdentity = encodeSignedDeviceIdentity;
229
+ exports.encodeSignedDeviceIdentity = encodeSignedDeviceIdentity;
@@ -11,7 +11,7 @@ const readline_1 = require("readline");
11
11
  const generics_1 = require("./generics");
12
12
  const make_mutex_1 = require("./make-mutex");
13
13
  /**
14
- * Captures events from a baileys event emitter & stores them in a file
14
+ * Captures events from a wileys event emitter & stores them in a file
15
15
  * @param ev The event emitter to read events from
16
16
  * @param filename File to save to
17
17
  */
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getBotJid = exports.jidNormalizedUser = exports.isJidBot = exports.isJidStatusBroadcast = exports.isJidGroup = exports.isJidNewsletter = exports.isJidBroadcast = exports.isLidUser = exports.isJidUser = exports.isJidMetaAi = exports.areJidsSameUser = exports.jidDecode = exports.jidEncode = exports.META_AI_JID = exports.STORIES_JID = exports.PSA_WID = exports.SERVER_JID = exports.OFFICIAL_BIZ_JID = exports.S_WHATSAPP_NET = void 0;
3
+ exports.lidToJid = exports.getBotJid = exports.jidNormalizedUser = exports.isJidBot = exports.isJidStatusBroadcast = exports.isJidGroup = exports.isJidNewsletter = exports.isJidBroadcast = exports.isLidUser = exports.isJidUser = exports.isJidMetaAi = exports.areJidsSameUser = exports.jidDecode = exports.jidEncode = exports.META_AI_JID = exports.STORIES_JID = exports.PSA_WID = exports.SERVER_JID = exports.OFFICIAL_BIZ_JID = exports.S_WHATSAPP_NET = void 0;
4
4
  exports.S_WHATSAPP_NET = '@s.whatsapp.net';
5
5
  exports.OFFICIAL_BIZ_JID = '16505361212@c.us';
6
6
  exports.SERVER_JID = 'server@c.us';
@@ -67,6 +67,8 @@ const jidNormalizedUser = (jid) => {
67
67
  return (0, exports.jidEncode)(user, server === 'c.us' ? 's.whatsapp.net' : server);
68
68
  };
69
69
  exports.jidNormalizedUser = jidNormalizedUser;
70
+ const lidToJid = jid => jid && jid.endsWith('@lid') ? jid.replace('@lid','@s.whatsapp.net') : jid;
71
+ exports.lidToJid = lidToJid;
70
72
  const getBotJid = (jid) => {
71
73
  const BOT_MAP = new Map([["867051314767696", "13135550002"], ["1061492271844689", "13135550005"], ["245886058483988", "13135550009"], ["3509905702656130", "13135550012"], ["1059680132034576", "13135550013"], ["715681030623646", "13135550014"], ["1644971366323052", "13135550015"], ["582497970646566", "13135550019"], ["645459357769306", "13135550022"], ["294997126699143", "13135550023"], ["1522631578502677", "13135550027"], ["719421926276396", "13135550030"], ["1788488635002167", "13135550031"], ["24232338603080193", "13135550033"], ["689289903143209", "13135550035"], ["871626054177096", "13135550039"], ["362351902849370", "13135550042"], ["1744617646041527", "13135550043"], ["893887762270570", "13135550046"], ["1155032702135830", "13135550047"], ["333931965993883", "13135550048"], ["853748013058752", "13135550049"], ["1559068611564819", "13135550053"], ["890487432705716", "13135550054"], ["240254602395494", "13135550055"], ["1578420349663261", "13135550062"], ["322908887140421", "13135550065"], ["3713961535514771", "13135550067"], ["997884654811738", "13135550070"], ["403157239387035", "13135550081"], ["535242369074963", "13135550082"], ["946293427247659", "13135550083"], ["3664707673802291", "13135550084"], ["1821827464894892", "13135550085"], ["1760312477828757", "13135550086"], ["439480398712216", "13135550087"], ["1876735582800984", "13135550088"], ["984025089825661", "13135550089"], ["1001336351558186", "13135550090"], ["3739346336347061", "13135550091"], ["3632749426974980", "13135550092"], ["427864203481615", "13135550093"], ["1434734570493055", "13135550094"], ["992873449225921", "13135550095"], ["813087747426445", "13135550096"], ["806369104931434", "13135550098"], ["1220982902403148", "13135550099"], ["1365893374104393", "13135550100"], ["686482033622048", "13135550200"], ["1454999838411253", "13135550201"], ["718584497008509", "13135550202"], ["743520384213443", "13135550301"], ["1147715789823789", "13135550302"], ["1173034540372201", "13135550303"], ["974785541030953", "13135550304"], ["1122200255531507", "13135550305"], ["899669714813162", "13135550306"], ["631880108970650", "13135550307"], ["435816149330026", "13135550308"], ["1368717161184556", "13135550309"], ["7849963461784891", "13135550310"], ["3609617065968984", "13135550312"], ["356273980574602", "13135550313"], ["1043447920539760", "13135550314"], ["1052764336525346", "13135550315"], ["2631118843732685", "13135550316"], ["510505411332176", "13135550317"], ["1945664239227513", "13135550318"], ["1518594378764656", "13135550319"], ["1378821579456138", "13135550320"], ["490214716896013", "13135550321"], ["1028577858870699", "13135550322"], ["308915665545959", "13135550323"], ["845884253678900", "13135550324"], ["995031308616442", "13135550325"], ["2787365464763437", "13135550326"], ["1532790990671645", "13135550327"], ["302617036180485", "13135550328"], ["723376723197227", "13135550329"], ["8393570407377966", "13135550330"], ["1931159970680725", "13135550331"], ["401073885688605", "13135550332"], ["2234478453565422", "13135550334"], ["814748673882312", "13135550335"], ["26133635056281592", "13135550336"], ["1439804456676119", "13135550337"], ["889851503172161", "13135550338"], ["1018283232836879", "13135550339"], ["1012781386779537", "13135559000"], ["823280953239532", "13135559001"], ["1597090934573334", "13135559002"], ["485965054020343", "13135559003"], ["1033381648363446", "13135559004"], ["491802010206446", "13135559005"], ["1017139033184870", "13135559006"], ["499638325922174", "13135559008"], ["468946335863664", "13135559009"], ["1570389776875816", "13135559010"], ["1004342694328995", "13135559011"], ["1012240323971229", "13135559012"], ["392171787222419", "13135559013"], ["952081212945019", "13135559016"], ["444507875070178", "13135559017"], ["1274819440594668", "13135559018"], ["1397041101147050", "13135559019"], ["425657699872640", "13135559020"], ["532292852562549", "13135559021"], ["705863241720292", "13135559022"], ["476449815183959", "13135559023"], ["488071553854222", "13135559024"], ["468693832665397", "13135559025"], ["517422564037340", "13135559026"], ["819805466613825", "13135559027"], ["1847708235641382", "13135559028"], ["716282970644228", "13135559029"], ["521655380527741", "13135559030"], ["476193631941905", "13135559031"], ["485600497445562", "13135559032"], ["440217235683910", "13135559033"], ["523342446758478", "13135559034"], ["514784864360240", "13135559035"], ["505790121814530", "13135559036"], ["420008964419580", "13135559037"], ["492141680204555", "13135559038"], ["388462787271952", "13135559039"], ["423473920752072", "13135559040"], ["489574180468229", "13135559041"], ["432360635854105", "13135559042"], ["477878201669248", "13135559043"], ["351656951234045", "13135559044"], ["430178036732582", "13135559045"], ["434537312944552", "13135559046"], ["1240614300631808", "13135559047"], ["473135945605128", "13135559048"], ["423669800729310", "13135559049"], ["3685666705015792", "13135559050"], ["504196509016638", "13135559051"], ["346844785189449", "13135559052"], ["504823088911074", "13135559053"], ["402669415797083", "13135559054"], ["490939640234431", "13135559055"], ["875124128063715", "13135559056"], ["468788962654605", "13135559057"], ["562386196354570", "13135559058"], ["372159285928791", "13135559059"], ["531017479591050", "13135559060"], ["1328873881401826", "13135559061"], ["1608363646390484", "13135559062"], ["1229628561554232", "13135559063"], ["348802211530364", "13135559064"], ["3708535859420184", "13135559065"], ["415517767742187", "13135559066"], ["479330341612638", "13135559067"], ["480785414723083", "13135559068"], ["387299107507991", "13135559069"], ["333389813188944", "13135559070"], ["391794130316996", "13135559071"], ["457893470576314", "13135559072"], ["435550496166469", "13135559073"], ["1620162702100689", "13135559074"], ["867491058616043", "13135559075"], ["816224117357759", "13135559076"], ["334065176362830", "13135559077"], ["489973170554709", "13135559078"], ["473060669049665", "13135559079"], ["1221505815643060", "13135559080"], ["889000703096359", "13135559081"], ["475235961979883", "13135559082"], ["3434445653519934", "13135559084"], ["524503026827421", "13135559085"], ["1179639046403856", "13135559086"], ["471563305859144", "13135559087"], ["533896609192881", "13135559088"], ["365443583168041", "13135559089"], ["836082305329393", "13135559090"], ["1056787705969916", "13135559091"], ["503312598958357", "13135559092"], ["3718606738453460", "13135559093"], ["826066052850902", "13135559094"], ["1033611345091888", "13135559095"], ["3868390816783240", "13135559096"], ["7462677740498860", "13135559097"], ["436288576108573", "13135559098"], ["1047559746718900", "13135559099"], ["1099299455255491", "13135559100"], ["1202037301040633", "13135559101"], ["1720619402074074", "13135559102"], ["1030422235101467", "13135559103"], ["827238979523502", "13135559104"], ["1516443722284921", "13135559105"], ["1174442747196709", "13135559106"], ["1653165225503842", "13135559107"], ["1037648777635013", "13135559108"], ["551617757299900", "13135559109"], ["1158813558718726", "13135559110"], ["2463236450542262", "13135559111"], ["1550393252501466", "13135559112"], ["2057065188042796", "13135559113"], ["506163028760735", "13135559114"], ["2065249100538481", "13135559115"], ["1041382867195858", "13135559116"], ["886500209499603", "13135559117"], ["1491615624892655", "13135559118"], ["486563697299617", "13135559119"], ["1175736513679463", "13135559120"], ["491811473512352", "13165550064"]]);
72
74
  const sepIdx = typeof jid === 'string' ? jid.indexOf('@') : -1;
package/lib/index.js CHANGED
@@ -3,30 +3,24 @@
3
3
  const chalk = require("chalk");
4
4
  const gradient = require("gradient-string");
5
5
 
6
- console.clear();
7
6
  console.log();
8
-
9
-
10
7
  console.log(
11
- chalk.bold.hex("#A8C7FF")("Xhyphersockets ⚡") + " " +
12
- chalk.bold.hex("#7EC9FF")("WhatsApp Baileys Mod")
8
+ chalk.bold.blue('Xhypher') + chalk.bold.green('baileys')
13
9
  );
14
10
 
15
-
16
- console.log(
17
- gradient(["#7EC9FF", "#D3B7FF"])("═════════════")
18
- );
19
-
20
-
21
- console.log(
22
- gradient(["#D3B7FF", "#A8C7FF"])("• Powered By xhyphertech")
23
- );
24
-
25
-
11
+ console.log();
26
12
  console.log(
27
- gradient(["#7EC9FF", "#D3B7FF"])("═════════════")
13
+ chalk.bold(
14
+ gradient(['magenta', 'cyan'])('> █╗ ██╗██╗ ██╗██╗ ██╗██████╗ ███████╗██████╗
15
+ ██║ ██╔╝██║ ██║██║ ██║██╔══██╗██╔════╝██╔══██╗
16
+ █████╔╝ ███████║███████║██████╔╝█████╗ ██████╔╝
17
+ ██╔═██╗ ██╔══██║██╔══██║██╔══██╗██╔══╝ ██╔══██╗
18
+ ██║ ██╗██║ ██║██║ ██║██║ ██║███████╗██║ ██║
19
+ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
20
+
21
+ X H Y P H E R T E C H <')
22
+ )
28
23
  );
29
-
30
24
  console.log();
31
25
 
32
26
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {