alipclutch-baileys 8.5.2 → 8.5.4

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 (114) hide show
  1. package/README.md +11 -5
  2. package/WAProto/index.js +77698 -117050
  3. package/engine-requirements.js +10 -0
  4. package/lib/Defaults/baileys-version.json +2 -2
  5. package/lib/Defaults/index.d.ts +7 -16
  6. package/lib/Defaults/index.js +119 -90
  7. package/lib/Defaults/phonenumber-mcc.json +223 -0
  8. package/lib/Socket/Client/abstract-socket-client.d.ts +17 -0
  9. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  10. package/lib/Socket/Client/index.d.ts +3 -2
  11. package/lib/Socket/Client/index.js +3 -2
  12. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  13. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  14. package/lib/Socket/Client/web-socket-client.d.ts +12 -0
  15. package/lib/Socket/Client/web-socket-client.js +62 -0
  16. package/lib/Socket/business.d.ts +58 -59
  17. package/lib/Socket/chats.d.ts +230 -45
  18. package/lib/Socket/chats.js +238 -139
  19. package/lib/Socket/groups.d.ts +32 -41
  20. package/lib/Socket/groups.js +23 -38
  21. package/lib/Socket/index.d.ts +64 -63
  22. package/lib/Socket/index.js +3 -2
  23. package/lib/Socket/messages-recv.js +65 -9
  24. package/lib/Socket/messages-send.d.ts +47 -49
  25. package/lib/Socket/messages-send.js +395 -543
  26. package/lib/Socket/newsletter.d.ts +37 -39
  27. package/lib/Socket/newsletter.js +123 -88
  28. package/lib/Socket/registration.d.ts +267 -0
  29. package/lib/Socket/registration.js +166 -0
  30. package/lib/Socket/setup.d.ts +253 -0
  31. package/lib/Socket/setup.js +4 -5
  32. package/lib/Socket/socket.d.ts +43 -270
  33. package/lib/Socket/socket.js +38 -62
  34. package/lib/Socket/usync.d.ts +3 -3
  35. package/lib/Store/index.d.ts +2 -1
  36. package/lib/Store/index.js +3 -1
  37. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  38. package/lib/Store/make-cache-manager-store.js +83 -0
  39. package/lib/Store/make-in-memory-store.d.ts +24 -24
  40. package/lib/Store/make-in-memory-store.js +14 -26
  41. package/lib/Store/make-ordered-dictionary.d.ts +1 -1
  42. package/lib/Store/make-ordered-dictionary.js +2 -2
  43. package/lib/Types/Auth.d.ts +7 -0
  44. package/lib/Types/Call.d.ts +1 -1
  45. package/lib/Types/Chat.d.ts +7 -14
  46. package/lib/Types/Contact.d.ts +1 -5
  47. package/lib/Types/Events.d.ts +2 -44
  48. package/lib/Types/GroupMetadata.d.ts +2 -11
  49. package/lib/Types/Label.js +1 -1
  50. package/lib/Types/LabelAssociation.js +1 -1
  51. package/lib/Types/Message.d.ts +21 -148
  52. package/lib/Types/Message.js +2 -0
  53. package/lib/Types/Newsletter.d.ts +97 -73
  54. package/lib/Types/Newsletter.js +38 -18
  55. package/lib/Types/Socket.d.ts +9 -17
  56. package/lib/Types/index.d.ts +1 -8
  57. package/lib/Types/index.js +2 -2
  58. package/lib/Utils/auth-utils.d.ts +3 -3
  59. package/lib/Utils/auth-utils.js +13 -6
  60. package/lib/Utils/business.js +2 -2
  61. package/lib/Utils/chat-utils.d.ts +16 -15
  62. package/lib/Utils/chat-utils.js +35 -36
  63. package/lib/Utils/crypto.d.ts +16 -15
  64. package/lib/Utils/crypto.js +29 -71
  65. package/lib/Utils/decode-wa-message.d.ts +6 -22
  66. package/lib/Utils/decode-wa-message.js +56 -65
  67. package/lib/Utils/event-buffer.d.ts +2 -2
  68. package/lib/Utils/event-buffer.js +7 -11
  69. package/lib/Utils/generics.d.ts +20 -17
  70. package/lib/Utils/generics.js +75 -95
  71. package/lib/Utils/history.d.ts +0 -4
  72. package/lib/Utils/history.js +6 -4
  73. package/lib/Utils/link-preview.d.ts +2 -2
  74. package/lib/Utils/link-preview.js +1 -34
  75. package/lib/Utils/logger.d.ts +3 -10
  76. package/lib/Utils/lt-hash.d.ts +2 -2
  77. package/lib/Utils/lt-hash.js +6 -6
  78. package/lib/Utils/make-mutex.d.ts +2 -2
  79. package/lib/Utils/messages-media.d.ts +24 -28
  80. package/lib/Utils/messages-media.js +111 -272
  81. package/lib/Utils/messages.d.ts +10 -13
  82. package/lib/Utils/messages.js +50 -323
  83. package/lib/Utils/noise-handler.d.ts +12 -10
  84. package/lib/Utils/noise-handler.js +23 -18
  85. package/lib/Utils/process-message.d.ts +4 -5
  86. package/lib/Utils/process-message.js +25 -108
  87. package/lib/Utils/signal.d.ts +1 -2
  88. package/lib/Utils/signal.js +26 -26
  89. package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
  90. package/lib/Utils/use-multi-file-auth-state.js +6 -51
  91. package/lib/Utils/validate-connection.d.ts +4 -3
  92. package/lib/Utils/validate-connection.js +1 -1
  93. package/lib/WABinary/constants.d.ts +27 -24
  94. package/lib/WABinary/constants.js +13 -1276
  95. package/lib/WABinary/decode.d.ts +4 -3
  96. package/lib/WABinary/decode.js +13 -26
  97. package/lib/WABinary/encode.d.ts +2 -1
  98. package/lib/WABinary/encode.js +152 -137
  99. package/lib/WABinary/generic-utils.d.ts +4 -1
  100. package/lib/WABinary/generic-utils.js +125 -37
  101. package/lib/WABinary/jid-utils.d.ts +5 -11
  102. package/lib/WABinary/jid-utils.js +5 -28
  103. package/lib/WAM/BinaryInfo.d.ts +11 -2
  104. package/lib/WAM/encode.d.ts +2 -1
  105. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
  106. package/lib/index.d.ts +1 -0
  107. package/lib/index.js +15 -27
  108. package/package.json +31 -18
  109. package/WAProto/GenerateStatics.sh +0 -4
  110. package/WAProto/WAProto.proto +0 -4775
  111. package/WAProto/index.d.ts +0 -55057
  112. package/WAProto/index.ts.ts +0 -53473
  113. package/lib/Socket/setup.ts +0 -623
  114. package/lib/WABinary/jid-utils.js.bak +0 -83
@@ -11,7 +11,7 @@ const generateIV = (counter) => {
11
11
  new DataView(iv).setUint32(8, counter);
12
12
  return new Uint8Array(iv);
13
13
  };
14
- const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }) => {
14
+ const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, mobile, logger, routingInfo }) => {
15
15
  logger = logger.child({ class: 'ns' });
16
16
  const authenticate = (data) => {
17
17
  if (!isFinished) {
@@ -38,20 +38,20 @@ const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey },
38
38
  authenticate(ciphertext);
39
39
  return result;
40
40
  };
41
- const localHKDF = async (data) => {
42
- const key = await (0, crypto_1.hkdf)(Buffer.from(data), 64, { salt, info: '' });
41
+ const localHKDF = (data) => {
42
+ const key = (0, crypto_1.hkdf)(Buffer.from(data), 64, { salt, info: '' });
43
43
  return [key.slice(0, 32), key.slice(32)];
44
44
  };
45
- const mixIntoKey = async (data) => {
46
- const [write, read] = await localHKDF(data);
45
+ const mixIntoKey = (data) => {
46
+ const [write, read] = localHKDF(data);
47
47
  salt = write;
48
48
  encKey = read;
49
49
  decKey = read;
50
50
  readCounter = 0;
51
51
  writeCounter = 0;
52
52
  };
53
- const finishInit = async () => {
54
- const [write, read] = await localHKDF(new Uint8Array(0));
53
+ const finishInit = () => {
54
+ const [write, read] = localHKDF(new Uint8Array(0));
55
55
  encKey = write;
56
56
  decKey = read;
57
57
  hash = Buffer.from([]);
@@ -60,7 +60,7 @@ const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey },
60
60
  isFinished = true;
61
61
  };
62
62
  const data = Buffer.from(Defaults_1.NOISE_MODE);
63
- let hash = data.byteLength === 32 ? data : (0, crypto_1.sha256)(data);
63
+ let hash = Buffer.from(data.byteLength === 32 ? data : (0, crypto_1.sha256)(data));
64
64
  let salt = hash;
65
65
  let encKey = hash;
66
66
  let decKey = hash;
@@ -77,19 +77,24 @@ const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey },
77
77
  authenticate,
78
78
  mixIntoKey,
79
79
  finishInit,
80
- processHandshake: async ({ serverHello }, noiseKey) => {
80
+ processHandshake: ({ serverHello }, noiseKey) => {
81
81
  authenticate(serverHello.ephemeral);
82
- await mixIntoKey(crypto_1.Curve.sharedKey(privateKey, serverHello.ephemeral));
82
+ mixIntoKey(crypto_1.Curve.sharedKey(privateKey, serverHello.ephemeral));
83
83
  const decStaticContent = decrypt(serverHello.static);
84
- await mixIntoKey(crypto_1.Curve.sharedKey(privateKey, decStaticContent));
84
+ mixIntoKey(crypto_1.Curve.sharedKey(privateKey, decStaticContent));
85
85
  const certDecoded = decrypt(serverHello.payload);
86
- const { intermediate: certIntermediate } = WAProto_1.proto.CertChain.decode(certDecoded);
87
- const { issuerSerial } = WAProto_1.proto.CertChain.NoiseCertificate.Details.decode(certIntermediate.details);
88
- if (issuerSerial !== Defaults_1.WA_CERT_DETAILS.SERIAL) {
89
- throw new boom_1.Boom('certification match failed', { statusCode: 400 });
86
+ if (mobile) {
87
+ WAProto_1.proto.CertChain.NoiseCertificate.decode(certDecoded);
88
+ }
89
+ else {
90
+ const { intermediate: certIntermediate } = WAProto_1.proto.CertChain.decode(certDecoded);
91
+ const { issuerSerial } = WAProto_1.proto.CertChain.NoiseCertificate.Details.decode(certIntermediate.details);
92
+ if (issuerSerial !== Defaults_1.WA_CERT_DETAILS.SERIAL) {
93
+ throw new boom_1.Boom('certification match failed', { statusCode: 400 });
94
+ }
90
95
  }
91
96
  const keyEnc = encrypt(noiseKey.public);
92
- await mixIntoKey(crypto_1.Curve.sharedKey(noiseKey.private, serverHello.ephemeral));
97
+ mixIntoKey(crypto_1.Curve.sharedKey(noiseKey.private, serverHello.ephemeral));
93
98
  return keyEnc;
94
99
  },
95
100
  encodeFrame: (data) => {
@@ -120,7 +125,7 @@ const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey },
120
125
  frame.set(data, introSize + 3);
121
126
  return frame;
122
127
  },
123
- decodeFrame: async (newData, onFrame) => {
128
+ decodeFrame: (newData, onFrame) => {
124
129
  var _a;
125
130
  // the binary protocol uses its own framing mechanism
126
131
  // on top of the WS frames
@@ -138,7 +143,7 @@ const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey },
138
143
  inBytes = inBytes.slice(size + 3);
139
144
  if (isFinished) {
140
145
  const result = decrypt(frame);
141
- frame = await (0, WABinary_1.decodeBinaryNode)(result);
146
+ frame = (0, WABinary_1.decodeBinaryNode)(result);
142
147
  }
143
148
  logger.trace({ msg: (_a = frame === null || frame === void 0 ? void 0 : frame.attrs) === null || _a === void 0 ? void 0 : _a.id }, 'recv frame');
144
149
  onFrame(frame);
@@ -1,15 +1,14 @@
1
1
  import { AxiosRequestConfig } from 'axios';
2
+ import type { Logger } from 'pino';
2
3
  import { proto } from '../../WAProto';
3
- import { AuthenticationCreds, BaileysEventEmitter, CacheStore, SignalKeyStoreWithTransaction, SocketConfig } from '../Types';
4
- import { ILogger } from './logger';
4
+ import { AuthenticationCreds, BaileysEventEmitter, SignalKeyStoreWithTransaction, SocketConfig } from '../Types';
5
5
  type ProcessMessageContext = {
6
6
  shouldProcessHistoryMsg: boolean;
7
- placeholderResendCache?: CacheStore;
8
7
  creds: AuthenticationCreds;
9
8
  keyStore: SignalKeyStoreWithTransaction;
10
9
  ev: BaileysEventEmitter;
11
10
  getMessage: SocketConfig['getMessage'];
12
- logger?: ILogger;
11
+ logger?: Logger;
13
12
  options: AxiosRequestConfig<{}>;
14
13
  };
15
14
  /** Cleans a received message to further processing */
@@ -38,5 +37,5 @@ type PollContext = {
38
37
  * @returns list of SHA256 options
39
38
  */
40
39
  export declare function decryptPollVote({ encPayload, encIv }: proto.Message.IPollEncValue, { pollCreatorJid, pollMsgId, pollEncKey, voterJid, }: PollContext): proto.Message.PollVoteMessage;
41
- declare const processMessage: (message: proto.IWebMessageInfo, { shouldProcessHistoryMsg, placeholderResendCache, ev, creds, keyStore, logger, options, getMessage }: ProcessMessageContext) => Promise<void>;
40
+ declare const processMessage: (message: proto.IWebMessageInfo, { shouldProcessHistoryMsg, ev, creds, keyStore, logger, options, getMessage }: ProcessMessageContext) => Promise<void>;
42
41
  export default processMessage;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getChatId = exports.shouldIncrementChatUnread = exports.isRealMessage = exports.cleanMessage = void 0;
4
- exports.decryptPollVote = decryptPollVote;
3
+ exports.decryptPollVote = exports.getChatId = exports.shouldIncrementChatUnread = exports.isRealMessage = exports.cleanMessage = void 0;
5
4
  const WAProto_1 = require("../../WAProto");
6
5
  const Types_1 = require("../Types");
7
6
  const messages_1 = require("../Utils/messages");
@@ -21,21 +20,8 @@ const REAL_MSG_REQ_ME_STUB_TYPES = new Set([
21
20
  /** Cleans a received message to further processing */
22
21
  const cleanMessage = (message, meId) => {
23
22
  // ensure remoteJid and participant doesn't have device or agent in it
24
- // normalize JIDs but catch errors to avoid throwing on invalid LIDs/JIDs
25
- try {
26
- message.key.remoteJid = (0, WABinary_1.jidNormalizedUser)(message.key.remoteJid);
27
- }
28
- catch (_e) {
29
- // if normalization fails, retain original remoteJid
30
- }
31
- if (message.key.participant) {
32
- try {
33
- message.key.participant = (0, WABinary_1.jidNormalizedUser)(message.key.participant);
34
- }
35
- catch (_e) {
36
- // ignore if can't normalize participant
37
- }
38
- }
23
+ message.key.remoteJid = (0, WABinary_1.jidNormalizedUser)(message.key.remoteJid);
24
+ message.key.participant = message.key.participant ? (0, WABinary_1.jidNormalizedUser)(message.key.participant) : undefined;
39
25
  const content = (0, messages_1.normalizeMessageContent)(message.message);
40
26
  // if the message has a reaction, ensure fromMe & remoteJid are from our perspective
41
27
  if (content === null || content === void 0 ? void 0 : content.reactionMessage) {
@@ -115,14 +101,14 @@ function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pol
115
101
  return Buffer.from(txt);
116
102
  }
117
103
  }
118
- const processMessage = async (message, { shouldProcessHistoryMsg, placeholderResendCache, ev, creds, keyStore, logger, options, getMessage }) => {
119
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
104
+ exports.decryptPollVote = decryptPollVote;
105
+ const processMessage = async (message, { shouldProcessHistoryMsg, ev, creds, keyStore, logger, options, getMessage }) => {
106
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
120
107
  const meId = creds.me.id;
121
108
  const { accountSettings } = creds;
122
109
  const chat = { id: (0, WABinary_1.jidNormalizedUser)((0, exports.getChatId)(message.key)) };
123
110
  const isRealMsg = (0, exports.isRealMessage)(message, meId);
124
111
  if (isRealMsg) {
125
- chat.messages = [{ message }];
126
112
  chat.conversationTimestamp = (0, generics_1.toNumber)(message.messageTimestamp);
127
113
  // only increment unread count if not CIPHERTEXT and from another person
128
114
  if ((0, exports.shouldIncrementChatUnread)(message)) {
@@ -130,25 +116,6 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
130
116
  }
131
117
  }
132
118
  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
- }
152
119
  // unarchive chat if it's a real message, or someone reacted to our message
153
120
  // and we've the unarchive chats setting on
154
121
  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))
@@ -170,22 +137,14 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
170
137
  isLatest,
171
138
  }, 'got history notification');
172
139
  if (process) {
173
- if (histNotification.syncType !== WAProto_1.proto.HistorySync.HistorySyncType.ON_DEMAND) {
174
- ev.emit('creds.update', {
175
- processedHistoryMessages: [
176
- ...(creds.processedHistoryMessages || []),
177
- { key: message.key, messageTimestamp: message.messageTimestamp }
178
- ]
179
- });
180
- }
181
- const data = await (0, history_1.downloadAndProcessHistorySyncNotification)(histNotification, options);
182
- ev.emit('messaging-history.set', {
183
- ...data,
184
- isLatest: histNotification.syncType !== WAProto_1.proto.HistorySync.HistorySyncType.ON_DEMAND
185
- ? isLatest
186
- : undefined,
187
- peerDataRequestSessionId: histNotification.peerDataRequestSessionId
140
+ ev.emit('creds.update', {
141
+ processedHistoryMessages: [
142
+ ...(creds.processedHistoryMessages || []),
143
+ { key: message.key, messageTimestamp: message.messageTimestamp }
144
+ ]
188
145
  });
146
+ const data = await (0, history_1.downloadAndProcessHistorySyncNotification)(histNotification, options);
147
+ ev.emit('messaging-history.set', { ...data, isLatest });
189
148
  }
190
149
  break;
191
150
  case WAProto_1.proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_SHARE:
@@ -228,41 +187,17 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
228
187
  case WAProto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE:
229
188
  const response = protocolMsg.peerDataOperationRequestResponseMessage;
230
189
  if (response) {
231
- placeholderResendCache === null || placeholderResendCache === void 0 ? void 0 : placeholderResendCache.del(response.stanzaId);
232
- // TODO: IMPLEMENT HISTORY SYNC ETC (sticker uploads etc.).
233
190
  const { peerDataOperationResult } = response;
234
191
  for (const result of peerDataOperationResult) {
235
192
  const { placeholderMessageResendResponse: retryResponse } = result;
236
193
  if (retryResponse) {
237
194
  const webMessageInfo = WAProto_1.proto.WebMessageInfo.decode(retryResponse.webMessageInfoBytes);
238
- // wait till another upsert event is available, don't want it to be part of the PDO response message
239
- setTimeout(() => {
240
- ev.emit('messages.upsert', {
241
- messages: [webMessageInfo],
242
- type: 'notify',
243
- requestId: response.stanzaId
244
- });
245
- }, 500);
195
+ ev.emit('messages.update', [
196
+ { key: webMessageInfo.key, update: { message: webMessageInfo.message } }
197
+ ]);
246
198
  }
247
199
  }
248
200
  }
249
- case WAProto_1.proto.Message.ProtocolMessage.Type.MESSAGE_EDIT:
250
- ev.emit('messages.update', [
251
- {
252
- // flip the sender / fromMe properties because they're in the perspective of the sender
253
- key: { ...message.key, id: (_d = protocolMsg.key) === null || _d === void 0 ? void 0 : _d.id },
254
- update: {
255
- message: {
256
- editedMessage: {
257
- message: protocolMsg.editedMessage
258
- }
259
- },
260
- messageTimestamp: protocolMsg.timestampMs
261
- ? Math.floor((0, generics_1.toNumber)(protocolMsg.timestampMs) / 1000)
262
- : message.messageTimestamp
263
- }
264
- }
265
- ]);
266
201
  break;
267
202
  }
268
203
  }
@@ -273,11 +208,11 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
273
208
  };
274
209
  ev.emit('messages.reaction', [{
275
210
  reaction,
276
- key: (_e = content.reactionMessage) === null || _e === void 0 ? void 0 : _e.key,
211
+ key: content.reactionMessage.key,
277
212
  }]);
278
213
  }
279
214
  else if (message.messageStubType) {
280
- const jid = (_f = message.key) === null || _f === void 0 ? void 0 : _f.remoteJid;
215
+ const jid = message.key.remoteJid;
281
216
  //let actor = whatsappID (message.participant)
282
217
  let participants;
283
218
  const emitParticipantsUpdate = (action) => (ev.emit('group-participants.update', { id: jid, author: message.participant, participants, action }));
@@ -285,15 +220,8 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
285
220
  var _a;
286
221
  ev.emit('groups.update', [{ id: jid, ...update, author: (_a = message.participant) !== null && _a !== void 0 ? _a : undefined }]);
287
222
  };
288
- const emitGroupRequestJoin = (participant, action, method) => {
289
- ev.emit('group.join-request', { id: jid, author: message.participant, participant, action, method: method });
290
- };
291
223
  const participantsIncludesMe = () => participants.find(jid => (0, WABinary_1.areJidsSameUser)(meId, jid));
292
224
  switch (message.messageStubType) {
293
- case Types_1.WAMessageStubType.GROUP_PARTICIPANT_CHANGE_NUMBER:
294
- participants = message.messageStubParameters || [];
295
- emitParticipantsUpdate('modify');
296
- break;
297
225
  case Types_1.WAMessageStubType.GROUP_PARTICIPANT_LEAVE:
298
226
  case Types_1.WAMessageStubType.GROUP_PARTICIPANT_REMOVE:
299
227
  participants = message.messageStubParameters || [];
@@ -321,41 +249,30 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
321
249
  emitParticipantsUpdate('promote');
322
250
  break;
323
251
  case Types_1.WAMessageStubType.GROUP_CHANGE_ANNOUNCE:
324
- const announceValue = (_g = message.messageStubParameters) === null || _g === void 0 ? void 0 : _g[0];
252
+ const announceValue = (_d = message.messageStubParameters) === null || _d === void 0 ? void 0 : _d[0];
325
253
  emitGroupUpdate({ announce: announceValue === 'true' || announceValue === 'on' });
326
254
  break;
327
255
  case Types_1.WAMessageStubType.GROUP_CHANGE_RESTRICT:
328
- const restrictValue = (_h = message.messageStubParameters) === null || _h === void 0 ? void 0 : _h[0];
256
+ const restrictValue = (_e = message.messageStubParameters) === null || _e === void 0 ? void 0 : _e[0];
329
257
  emitGroupUpdate({ restrict: restrictValue === 'true' || restrictValue === 'on' });
330
258
  break;
331
259
  case Types_1.WAMessageStubType.GROUP_CHANGE_SUBJECT:
332
- const name = (_j = message.messageStubParameters) === null || _j === void 0 ? void 0 : _j[0];
260
+ const name = (_f = message.messageStubParameters) === null || _f === void 0 ? void 0 : _f[0];
333
261
  chat.name = name;
334
262
  emitGroupUpdate({ subject: name });
335
263
  break;
336
- case Types_1.WAMessageStubType.GROUP_CHANGE_DESCRIPTION:
337
- const description = (_k = message.messageStubParameters) === null || _k === void 0 ? void 0 : _k[0];
338
- chat.description = description;
339
- emitGroupUpdate({ desc: description });
340
- break;
341
264
  case Types_1.WAMessageStubType.GROUP_CHANGE_INVITE_LINK:
342
- const code = (_l = message.messageStubParameters) === null || _l === void 0 ? void 0 : _l[0];
265
+ const code = (_g = message.messageStubParameters) === null || _g === void 0 ? void 0 : _g[0];
343
266
  emitGroupUpdate({ inviteCode: code });
344
267
  break;
345
268
  case Types_1.WAMessageStubType.GROUP_MEMBER_ADD_MODE:
346
- const memberAddValue = (_m = message.messageStubParameters) === null || _m === void 0 ? void 0 : _m[0];
269
+ const memberAddValue = (_h = message.messageStubParameters) === null || _h === void 0 ? void 0 : _h[0];
347
270
  emitGroupUpdate({ memberAddMode: memberAddValue === 'all_member_add' });
348
271
  break;
349
272
  case Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE:
350
- const approvalMode = (_o = message.messageStubParameters) === null || _o === void 0 ? void 0 : _o[0];
273
+ const approvalMode = (_j = message.messageStubParameters) === null || _j === void 0 ? void 0 : _j[0];
351
274
  emitGroupUpdate({ joinApprovalMode: approvalMode === 'on' });
352
275
  break;
353
- case Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD:
354
- const participant = (_p = message.messageStubParameters) === null || _p === void 0 ? void 0 : _p[0];
355
- const action = (_q = message.messageStubParameters) === null || _q === void 0 ? void 0 : _q[1];
356
- const method = (_r = message.messageStubParameters) === null || _r === void 0 ? void 0 : _r[2];
357
- emitGroupRequestJoin(participant, action, method);
358
- break;
359
276
  }
360
277
  }
361
278
  else if (content === null || content === void 0 ? void 0 : content.pollUpdateMessage) {
@@ -366,7 +283,7 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
366
283
  const meIdNormalised = (0, WABinary_1.jidNormalizedUser)(meId);
367
284
  const pollCreatorJid = (0, generics_1.getKeyAuthor)(creationMsgKey, meIdNormalised);
368
285
  const voterJid = (0, generics_1.getKeyAuthor)(message.key, meIdNormalised);
369
- const pollEncKey = (_s = pollMsg.messageContextInfo) === null || _s === void 0 ? void 0 : _s.messageSecret;
286
+ const pollEncKey = (_k = pollMsg.messageContextInfo) === null || _k === void 0 ? void 0 : _k.messageSecret;
370
287
  try {
371
288
  const voteMsg = decryptPollVote(content.pollUpdateMessage.vote, {
372
289
  pollEncKey,
@@ -1,7 +1,6 @@
1
1
  import { SignalRepository } from '../Types';
2
2
  import { AuthenticationCreds, AuthenticationState, KeyPair, SignalIdentity, SignalKeyStore, SignedKeyPair } from '../Types/Auth';
3
3
  import { BinaryNode, JidWithDevice } from '../WABinary';
4
- import { USyncQueryResultList } from '../WAUSync';
5
4
  export declare const createSignalIdentity: (wid: string, accountSignatureKey: Uint8Array) => SignalIdentity;
6
5
  export declare const getPreKeys: ({ get }: SignalKeyStore, min: number, limit: number) => Promise<{
7
6
  [id: string]: KeyPair;
@@ -16,7 +15,7 @@ export declare const generateOrGetPreKeys: (creds: AuthenticationCreds, range: n
16
15
  export declare const xmppSignedPreKey: (key: SignedKeyPair) => BinaryNode;
17
16
  export declare const xmppPreKey: (pair: KeyPair, id: number) => BinaryNode;
18
17
  export declare const parseAndInjectE2ESessions: (node: BinaryNode, repository: SignalRepository) => Promise<void>;
19
- export declare const extractDeviceJids: (result: USyncQueryResultList[], myJid: string, excludeZeroDevices: boolean) => JidWithDevice[];
18
+ export declare const extractDeviceJids: (result: BinaryNode, myJid: string, excludeZeroDevices: boolean) => JidWithDevice[];
20
19
  /**
21
20
  * get the next N keys for upload or processing
22
21
  * @param count number of pre-keys to get or generate
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getNextPreKeysNode = exports.getNextPreKeys = exports.extractDeviceJids = exports.parseAndInjectE2ESessions = exports.xmppPreKey = exports.xmppSignedPreKey = exports.generateOrGetPreKeys = exports.getPreKeys = exports.createSignalIdentity = void 0;
4
- const lodash_1 = require("lodash");
5
4
  const Defaults_1 = require("../Defaults");
6
5
  const WABinary_1 = require("../WABinary");
7
6
  const crypto_1 = require("./crypto");
7
+ const lodash_1 = require("lodash")
8
8
  const generics_1 = require("./generics");
9
9
  const createSignalIdentity = (wid, accountSignatureKey) => {
10
10
  return {
@@ -59,61 +59,61 @@ const xmppPreKey = (pair, id) => ({
59
59
  exports.xmppPreKey = xmppPreKey;
60
60
  const parseAndInjectE2ESessions = async (node, repository) => {
61
61
  const extractKey = (key) => (key ? ({
62
- keyId: (0, WABinary_1.getBinaryNodeChildUInt)(key, 'id', 3),
63
- publicKey: (0, crypto_1.generateSignalPubKey)((0, WABinary_1.getBinaryNodeChildBuffer)(key, 'value')),
64
- signature: (0, WABinary_1.getBinaryNodeChildBuffer)(key, 'signature'),
65
- }) : undefined);
66
- const nodes = (0, WABinary_1.getBinaryNodeChildren)((0, WABinary_1.getBinaryNodeChild)(node, 'list'), 'user');
62
+ keyId: WABinary_1.getBinaryNodeChildUInt(key, 'id', 3),
63
+ publicKey: crypto_1.generateSignalPubKey(WABinary_1.getBinaryNodeChildBuffer(key, 'value')),
64
+ signature: WABinary_1.getBinaryNodeChildBuffer(key, 'signature')
65
+ }) : undefined)
66
+ const nodes = WABinary_1.getBinaryNodeChildren(WABinary_1.getBinaryNodeChild(node, 'list'), 'user')
67
67
  for (const node of nodes) {
68
- (0, WABinary_1.assertNodeErrorFree)(node);
68
+ WABinary_1.assertNodeErrorFree(node)
69
69
  }
70
70
  // Most of the work in repository.injectE2ESession is CPU intensive, not IO
71
71
  // So Promise.all doesn't really help here,
72
72
  // but blocks even loop if we're using it inside keys.transaction, and it makes it "sync" actually
73
73
  // This way we chunk it in smaller parts and between those parts we can yield to the event loop
74
74
  // It's rare case when you need to E2E sessions for so many users, but it's possible
75
- const chunkSize = 100;
76
- const chunks = (0, lodash_1.chunk)(nodes, chunkSize);
75
+ const chunkSize = 100
76
+ const chunks = lodash_1.chunk(nodes, chunkSize)
77
77
  for (const nodesChunk of chunks) {
78
78
  await Promise.all(nodesChunk.map(async (node) => {
79
- const signedKey = (0, WABinary_1.getBinaryNodeChild)(node, 'skey');
80
- const key = (0, WABinary_1.getBinaryNodeChild)(node, 'key');
81
- const identity = (0, WABinary_1.getBinaryNodeChildBuffer)(node, 'identity');
82
- const jid = node.attrs.jid;
83
- const registrationId = (0, WABinary_1.getBinaryNodeChildUInt)(node, 'registration', 4);
79
+ const signedKey = WABinary_1.getBinaryNodeChild(node, 'skey')
80
+ const key = WABinary_1.getBinaryNodeChild(node, 'key')
81
+ const identity = WABinary_1.getBinaryNodeChildBuffer(node, 'identity')
82
+ const jid = node.attrs.jid
83
+ const registrationId = WABinary_1.getBinaryNodeChildUInt(node, 'registration', 4)
84
84
  await repository.injectE2ESession({
85
85
  jid,
86
86
  session: {
87
87
  registrationId: registrationId,
88
- identityKey: (0, crypto_1.generateSignalPubKey)(identity),
88
+ identityKey: crypto_1.generateSignalPubKey(identity),
89
89
  signedPreKey: extractKey(signedKey),
90
90
  preKey: extractKey(key)
91
91
  }
92
- });
93
- }));
92
+ })
93
+ }))
94
94
  }
95
- };
95
+ }
96
96
  exports.parseAndInjectE2ESessions = parseAndInjectE2ESessions;
97
97
  const extractDeviceJids = (result, myJid, excludeZeroDevices) => {
98
- const { user: myUser, device: myDevice } = (0, WABinary_1.jidDecode)(myJid);
99
- const extracted = [];
98
+ const { user: myUser, device: myDevice } = WABinary_1.jidDecode(myJid)
99
+ const extracted = []
100
100
  for (const userResult of result) {
101
- const { devices, id } = userResult;
102
- const { user } = (0, WABinary_1.jidDecode)(id);
103
- const deviceList = devices === null || devices === void 0 ? void 0 : devices.deviceList;
101
+ const { devices, id } = userResult
102
+ const { user } = WABinary_1.jidDecode(id)
103
+ const deviceList = devices?.deviceList
104
104
  if (Array.isArray(deviceList)) {
105
105
  for (const { id: device, keyIndex } of deviceList) {
106
106
  if ((!excludeZeroDevices || device !== 0) && // if zero devices are not-excluded, or device is non zero
107
107
  (myUser !== user || myDevice !== device) && // either different user or if me user, not this device
108
108
  (device === 0 || !!keyIndex) // ensure that "key-index" is specified for "non-zero" devices, produces a bad req otherwise
109
109
  ) {
110
- extracted.push({ user, device });
110
+ extracted.push({ user, device })
111
111
  }
112
112
  }
113
113
  }
114
114
  }
115
- return extracted;
116
- };
115
+ return extracted
116
+ }
117
117
  exports.extractDeviceJids = extractDeviceJids;
118
118
  /**
119
119
  * get the next N keys for upload or processing
@@ -10,3 +10,4 @@ export declare const useMultiFileAuthState: (folder: string) => Promise<{
10
10
  state: AuthenticationState;
11
11
  saveCreds: () => Promise<void>;
12
12
  }>;
13
+
@@ -1,26 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useMultiFileAuthState = void 0;
4
- const async_mutex_1 = require("async-mutex");
5
4
  const promises_1 = require("fs/promises");
6
5
  const path_1 = require("path");
7
6
  const WAProto_1 = require("../../WAProto");
8
7
  const auth_utils_1 = require("./auth-utils");
9
8
  const generics_1 = require("./generics");
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
12
- // https://github.com/nodejs/node/issues/26338
13
- // Use a Map to store mutexes for each file path
14
- const fileLocks = new Map();
15
- // Get or create a mutex for a specific file path
16
- const getFileLock = (path) => {
17
- let mutex = fileLocks.get(path);
18
- if (!mutex) {
19
- mutex = new async_mutex_1.Mutex();
20
- fileLocks.set(path, mutex);
21
- }
22
- return mutex;
23
- };
24
9
  /**
25
10
  * stores the full authentication state in a single folder.
26
11
  * Far more efficient than singlefileauthstate
@@ -29,32 +14,13 @@ const getFileLock = (path) => {
29
14
  * Would recommend writing an auth state for use with a proper SQL or No-SQL DB
30
15
  * */
31
16
  const useMultiFileAuthState = async (folder) => {
32
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
- const writeData = async (data, file) => {
34
- const filePath = (0, path_1.join)(folder, fixFileName(file));
35
- const mutex = getFileLock(filePath);
36
- return mutex.acquire().then(async (release) => {
37
- try {
38
- await (0, promises_1.writeFile)(filePath, JSON.stringify(data, generics_1.BufferJSON.replacer));
39
- }
40
- finally {
41
- release();
42
- }
43
- });
17
+ const writeData = (data, file) => {
18
+ return (0, promises_1.writeFile)((0, path_1.join)(folder, fixFileName(file)), JSON.stringify(data, generics_1.BufferJSON.replacer));
44
19
  };
45
20
  const readData = async (file) => {
46
21
  try {
47
- const filePath = (0, path_1.join)(folder, fixFileName(file));
48
- const mutex = getFileLock(filePath);
49
- return await mutex.acquire().then(async (release) => {
50
- try {
51
- const data = await (0, promises_1.readFile)(filePath, { encoding: 'utf-8' });
52
- return JSON.parse(data, generics_1.BufferJSON.reviver);
53
- }
54
- finally {
55
- release();
56
- }
57
- });
22
+ const data = await (0, promises_1.readFile)((0, path_1.join)(folder, fixFileName(file)), { encoding: 'utf-8' });
23
+ return JSON.parse(data, generics_1.BufferJSON.reviver);
58
24
  }
59
25
  catch (error) {
60
26
  return null;
@@ -62,18 +28,7 @@ const useMultiFileAuthState = async (folder) => {
62
28
  };
63
29
  const removeData = async (file) => {
64
30
  try {
65
- const filePath = (0, path_1.join)(folder, fixFileName(file));
66
- const mutex = getFileLock(filePath);
67
- return mutex.acquire().then(async (release) => {
68
- try {
69
- await (0, promises_1.unlink)(filePath);
70
- }
71
- catch (_a) {
72
- }
73
- finally {
74
- release();
75
- }
76
- });
31
+ await (0, promises_1.unlink)((0, path_1.join)(folder, fixFileName(file)));
77
32
  }
78
33
  catch (_a) {
79
34
  }
@@ -117,7 +72,7 @@ const useMultiFileAuthState = async (folder) => {
117
72
  }
118
73
  }
119
74
  },
120
- saveCreds: async () => {
75
+ saveCreds: () => {
121
76
  return writeData(creds, 'creds.json');
122
77
  }
123
78
  };
@@ -1,10 +1,11 @@
1
1
  import { proto } from '../../WAProto';
2
2
  import type { AuthenticationCreds, SignalCreds, SocketConfig } from '../Types';
3
3
  import { BinaryNode } from '../WABinary';
4
+ export declare const generateMobileNode: (config: SocketConfig) => proto.IClientPayload;
4
5
  export declare const generateLoginNode: (userJid: string, config: SocketConfig) => proto.IClientPayload;
5
6
  export declare const generateRegistrationNode: ({ registrationId, signedPreKey, signedIdentityKey }: SignalCreds, config: SocketConfig) => proto.ClientPayload;
6
- export declare const configureSuccessfulPairing: (stanza: BinaryNode, { advSecretKey, signedIdentityKey, signalIdentities }: Pick<AuthenticationCreds, "advSecretKey" | "signedIdentityKey" | "signalIdentities">) => {
7
+ export declare const configureSuccessfulPairing: (stanza: BinaryNode, { advSecretKey, signedIdentityKey, signalIdentities }: Pick<AuthenticationCreds, 'advSecretKey' | 'signedIdentityKey' | 'signalIdentities'>) => {
7
8
  creds: Partial<AuthenticationCreds>;
8
9
  reply: BinaryNode;
9
- };
10
- export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => Uint8Array<ArrayBufferLike>;
10
+ };
11
+ export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => Uint8Array;
@@ -226,4 +226,4 @@ const encodeSignedDeviceIdentity = (account, includeSignatureKey) => {
226
226
  .encode(account)
227
227
  .finish();
228
228
  };
229
- exports.encodeSignedDeviceIdentity = encodeSignedDeviceIdentity;
229
+ exports.encodeSignedDeviceIdentity = encodeSignedDeviceIdentity;