cuki-bailx 1.1.2 → 1.2.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.
- package/WAProto/index.js +79296 -118676
- package/engine-requirements.js +1 -1
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Defaults/index.d.ts +6 -4
- package/lib/Defaults/index.js +102 -78
- package/lib/Defaults/phonenumber-mcc.json +223 -0
- package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +2 -1
- package/lib/Socket/Client/index.d.ts +3 -2
- package/lib/Socket/Client/index.js +3 -2
- package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
- package/lib/Socket/Client/mobile-socket-client.js +65 -0
- package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +1 -2
- package/lib/Socket/Client/{websocket.js → web-socket-client.js} +2 -12
- package/lib/Socket/business.d.ts +58 -59
- package/lib/Socket/chats.d.ts +27 -29
- package/lib/Socket/chats.js +90 -97
- package/lib/Socket/dugong.d.ts +219 -0
- package/lib/Socket/dugong.js +441 -0
- package/lib/Socket/groups.d.ts +32 -41
- package/lib/Socket/groups.js +5 -20
- package/lib/Socket/index.d.ts +64 -63
- package/lib/Socket/index.js +2 -2
- package/lib/Socket/messages-recv.js +65 -9
- package/lib/Socket/messages-send.d.ts +47 -49
- package/lib/Socket/messages-send.js +312 -379
- package/lib/Socket/newsletter.d.ts +37 -39
- package/lib/Socket/newsletter.js +40 -54
- package/lib/Socket/registration.d.ts +267 -0
- package/lib/Socket/registration.js +166 -0
- package/lib/Socket/socket.d.ts +10 -10
- package/lib/Socket/socket.js +32 -39
- package/lib/Socket/socket.js.bak +630 -0
- package/lib/Socket/usync.d.ts +3 -3
- package/lib/Store/index.d.ts +2 -1
- package/lib/Store/index.js +3 -1
- package/lib/Store/make-cache-manager-store.d.ts +13 -0
- package/lib/Store/make-cache-manager-store.js +83 -0
- package/lib/Store/make-in-memory-store.d.ts +24 -24
- package/lib/Store/make-in-memory-store.js +11 -13
- package/lib/Store/make-ordered-dictionary.d.ts +1 -1
- package/lib/Store/make-ordered-dictionary.js +2 -2
- package/lib/Types/Auth.d.ts +7 -0
- package/lib/Types/Call.d.ts +1 -1
- package/lib/Types/Chat.d.ts +7 -14
- package/lib/Types/Contact.d.ts +1 -5
- package/lib/Types/Events.d.ts +2 -44
- package/lib/Types/GroupMetadata.d.ts +2 -11
- package/lib/Types/Label.js +1 -1
- package/lib/Types/LabelAssociation.js +1 -1
- package/lib/Types/Message.d.ts +21 -148
- package/lib/Types/Message.js +2 -0
- package/lib/Types/Newsletter.d.ts +13 -0
- package/lib/Types/Newsletter.js +17 -3
- package/lib/Types/Socket.d.ts +9 -17
- package/lib/Types/index.d.ts +1 -8
- package/lib/Types/index.js +2 -2
- package/lib/Utils/auth-utils.d.ts +3 -3
- package/lib/Utils/auth-utils.js +13 -6
- package/lib/Utils/business.js +2 -2
- package/lib/Utils/chat-utils.d.ts +16 -15
- package/lib/Utils/chat-utils.js +35 -36
- package/lib/Utils/crypto.d.ts +16 -15
- package/lib/Utils/crypto.js +29 -71
- package/lib/Utils/decode-wa-message.d.ts +6 -22
- package/lib/Utils/decode-wa-message.js +56 -65
- package/lib/Utils/event-buffer.d.ts +2 -2
- package/lib/Utils/event-buffer.js +7 -11
- package/lib/Utils/generics.d.ts +20 -17
- package/lib/Utils/generics.js +23 -73
- package/lib/Utils/history.d.ts +0 -4
- package/lib/Utils/history.js +6 -4
- package/lib/Utils/link-preview.d.ts +2 -2
- package/lib/Utils/link-preview.js +1 -34
- package/lib/Utils/logger.d.ts +3 -10
- package/lib/Utils/lt-hash.d.ts +2 -2
- package/lib/Utils/lt-hash.js +6 -6
- package/lib/Utils/make-mutex.d.ts +2 -2
- package/lib/Utils/messages-media.d.ts +24 -28
- package/lib/Utils/messages-media.js +115 -263
- package/lib/Utils/messages.d.ts +10 -8
- package/lib/Utils/messages.js +72 -298
- package/lib/Utils/noise-handler.d.ts +12 -10
- package/lib/Utils/noise-handler.js +23 -18
- package/lib/Utils/process-message.d.ts +4 -5
- package/lib/Utils/process-message.js +23 -74
- package/lib/Utils/signal.d.ts +1 -2
- package/lib/Utils/signal.js +35 -37
- package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +6 -51
- package/lib/Utils/validate-connection.d.ts +4 -3
- package/lib/Utils/validate-connection.js +52 -20
- package/lib/WABinary/constants.d.ts +4 -4
- package/lib/WABinary/constants.js +13 -1276
- package/lib/WABinary/decode.d.ts +4 -3
- package/lib/WABinary/decode.js +13 -26
- package/lib/WABinary/encode.d.ts +2 -1
- package/lib/WABinary/encode.js +17 -39
- package/lib/WABinary/generic-utils.d.ts +3 -1
- package/lib/WABinary/generic-utils.js +85 -2
- package/lib/WABinary/jid-utils.d.ts +5 -10
- package/lib/WABinary/jid-utils.js +5 -26
- package/lib/WAM/BinaryInfo.d.ts +11 -2
- package/lib/WAM/encode.d.ts +2 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
- package/lib/index.d.ts +2 -6
- package/lib/index.js +7 -21
- package/lib/index.js.bak +48 -0
- package/package.json +103 -111
- package/LICENSE +0 -21
- package/WAProto/GenerateStatics.sh +0 -4
- package/WAProto/WAProto.proto +0 -4775
- package/WAProto/index.d.ts +0 -55057
- package/WAProto/index.ts.ts +0 -53473
- package/WAProto/p.html +0 -1
- package/lib/WABinary/jid-utils.js.bak +0 -83
- /package/lib/Socket/Client/{types.js → abstract-socket-client.js} +0 -0
|
@@ -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 =
|
|
42
|
-
const key =
|
|
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 =
|
|
46
|
-
const [write, read] =
|
|
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 =
|
|
54
|
-
const [write, read] =
|
|
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:
|
|
80
|
+
processHandshake: ({ serverHello }, noiseKey) => {
|
|
81
81
|
authenticate(serverHello.ephemeral);
|
|
82
|
-
|
|
82
|
+
mixIntoKey(crypto_1.Curve.sharedKey(privateKey, serverHello.ephemeral));
|
|
83
83
|
const decStaticContent = decrypt(serverHello.static);
|
|
84
|
-
|
|
84
|
+
mixIntoKey(crypto_1.Curve.sharedKey(privateKey, decStaticContent));
|
|
85
85
|
const certDecoded = decrypt(serverHello.payload);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
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:
|
|
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 =
|
|
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,
|
|
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?:
|
|
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,
|
|
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");
|
|
@@ -102,14 +101,14 @@ function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pol
|
|
|
102
101
|
return Buffer.from(txt);
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
|
-
|
|
106
|
-
|
|
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;
|
|
107
107
|
const meId = creds.me.id;
|
|
108
108
|
const { accountSettings } = creds;
|
|
109
109
|
const chat = { id: (0, WABinary_1.jidNormalizedUser)((0, exports.getChatId)(message.key)) };
|
|
110
110
|
const isRealMsg = (0, exports.isRealMessage)(message, meId);
|
|
111
111
|
if (isRealMsg) {
|
|
112
|
-
chat.messages = [{ message }];
|
|
113
112
|
chat.conversationTimestamp = (0, generics_1.toNumber)(message.messageTimestamp);
|
|
114
113
|
// only increment unread count if not CIPHERTEXT and from another person
|
|
115
114
|
if ((0, exports.shouldIncrementChatUnread)(message)) {
|
|
@@ -138,22 +137,14 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
138
137
|
isLatest,
|
|
139
138
|
}, 'got history notification');
|
|
140
139
|
if (process) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
processedHistoryMessages
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
]
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
const data = await (0, history_1.downloadAndProcessHistorySyncNotification)(histNotification, options);
|
|
150
|
-
ev.emit('messaging-history.set', {
|
|
151
|
-
...data,
|
|
152
|
-
isLatest: histNotification.syncType !== WAProto_1.proto.HistorySync.HistorySyncType.ON_DEMAND
|
|
153
|
-
? isLatest
|
|
154
|
-
: undefined,
|
|
155
|
-
peerDataRequestSessionId: histNotification.peerDataRequestSessionId
|
|
140
|
+
ev.emit('creds.update', {
|
|
141
|
+
processedHistoryMessages: [
|
|
142
|
+
...(creds.processedHistoryMessages || []),
|
|
143
|
+
{ key: message.key, messageTimestamp: message.messageTimestamp }
|
|
144
|
+
]
|
|
156
145
|
});
|
|
146
|
+
const data = await (0, history_1.downloadAndProcessHistorySyncNotification)(histNotification, options);
|
|
147
|
+
ev.emit('messaging-history.set', { ...data, isLatest });
|
|
157
148
|
}
|
|
158
149
|
break;
|
|
159
150
|
case WAProto_1.proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_SHARE:
|
|
@@ -196,41 +187,17 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
196
187
|
case WAProto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE:
|
|
197
188
|
const response = protocolMsg.peerDataOperationRequestResponseMessage;
|
|
198
189
|
if (response) {
|
|
199
|
-
placeholderResendCache === null || placeholderResendCache === void 0 ? void 0 : placeholderResendCache.del(response.stanzaId);
|
|
200
|
-
// TODO: IMPLEMENT HISTORY SYNC ETC (sticker uploads etc.).
|
|
201
190
|
const { peerDataOperationResult } = response;
|
|
202
191
|
for (const result of peerDataOperationResult) {
|
|
203
192
|
const { placeholderMessageResendResponse: retryResponse } = result;
|
|
204
193
|
if (retryResponse) {
|
|
205
194
|
const webMessageInfo = WAProto_1.proto.WebMessageInfo.decode(retryResponse.webMessageInfoBytes);
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
messages: [webMessageInfo],
|
|
210
|
-
type: 'notify',
|
|
211
|
-
requestId: response.stanzaId
|
|
212
|
-
});
|
|
213
|
-
}, 500);
|
|
195
|
+
ev.emit('messages.update', [
|
|
196
|
+
{ key: webMessageInfo.key, update: { message: webMessageInfo.message } }
|
|
197
|
+
]);
|
|
214
198
|
}
|
|
215
199
|
}
|
|
216
200
|
}
|
|
217
|
-
case WAProto_1.proto.Message.ProtocolMessage.Type.MESSAGE_EDIT:
|
|
218
|
-
ev.emit('messages.update', [
|
|
219
|
-
{
|
|
220
|
-
// flip the sender / fromMe properties because they're in the perspective of the sender
|
|
221
|
-
key: { ...message.key, id: (_d = protocolMsg.key) === null || _d === void 0 ? void 0 : _d.id },
|
|
222
|
-
update: {
|
|
223
|
-
message: {
|
|
224
|
-
editedMessage: {
|
|
225
|
-
message: protocolMsg.editedMessage
|
|
226
|
-
}
|
|
227
|
-
},
|
|
228
|
-
messageTimestamp: protocolMsg.timestampMs
|
|
229
|
-
? Math.floor((0, generics_1.toNumber)(protocolMsg.timestampMs) / 1000)
|
|
230
|
-
: message.messageTimestamp
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
]);
|
|
234
201
|
break;
|
|
235
202
|
}
|
|
236
203
|
}
|
|
@@ -241,11 +208,11 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
241
208
|
};
|
|
242
209
|
ev.emit('messages.reaction', [{
|
|
243
210
|
reaction,
|
|
244
|
-
key:
|
|
211
|
+
key: content.reactionMessage.key,
|
|
245
212
|
}]);
|
|
246
213
|
}
|
|
247
214
|
else if (message.messageStubType) {
|
|
248
|
-
const jid =
|
|
215
|
+
const jid = message.key.remoteJid;
|
|
249
216
|
//let actor = whatsappID (message.participant)
|
|
250
217
|
let participants;
|
|
251
218
|
const emitParticipantsUpdate = (action) => (ev.emit('group-participants.update', { id: jid, author: message.participant, participants, action }));
|
|
@@ -253,15 +220,8 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
253
220
|
var _a;
|
|
254
221
|
ev.emit('groups.update', [{ id: jid, ...update, author: (_a = message.participant) !== null && _a !== void 0 ? _a : undefined }]);
|
|
255
222
|
};
|
|
256
|
-
const emitGroupRequestJoin = (participant, action, method) => {
|
|
257
|
-
ev.emit('group.join-request', { id: jid, author: message.participant, participant, action, method: method });
|
|
258
|
-
};
|
|
259
223
|
const participantsIncludesMe = () => participants.find(jid => (0, WABinary_1.areJidsSameUser)(meId, jid));
|
|
260
224
|
switch (message.messageStubType) {
|
|
261
|
-
case Types_1.WAMessageStubType.GROUP_PARTICIPANT_CHANGE_NUMBER:
|
|
262
|
-
participants = message.messageStubParameters || [];
|
|
263
|
-
emitParticipantsUpdate('modify');
|
|
264
|
-
break;
|
|
265
225
|
case Types_1.WAMessageStubType.GROUP_PARTICIPANT_LEAVE:
|
|
266
226
|
case Types_1.WAMessageStubType.GROUP_PARTICIPANT_REMOVE:
|
|
267
227
|
participants = message.messageStubParameters || [];
|
|
@@ -289,41 +249,30 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
289
249
|
emitParticipantsUpdate('promote');
|
|
290
250
|
break;
|
|
291
251
|
case Types_1.WAMessageStubType.GROUP_CHANGE_ANNOUNCE:
|
|
292
|
-
const announceValue = (
|
|
252
|
+
const announceValue = (_d = message.messageStubParameters) === null || _d === void 0 ? void 0 : _d[0];
|
|
293
253
|
emitGroupUpdate({ announce: announceValue === 'true' || announceValue === 'on' });
|
|
294
254
|
break;
|
|
295
255
|
case Types_1.WAMessageStubType.GROUP_CHANGE_RESTRICT:
|
|
296
|
-
const restrictValue = (
|
|
256
|
+
const restrictValue = (_e = message.messageStubParameters) === null || _e === void 0 ? void 0 : _e[0];
|
|
297
257
|
emitGroupUpdate({ restrict: restrictValue === 'true' || restrictValue === 'on' });
|
|
298
258
|
break;
|
|
299
259
|
case Types_1.WAMessageStubType.GROUP_CHANGE_SUBJECT:
|
|
300
|
-
const name = (
|
|
260
|
+
const name = (_f = message.messageStubParameters) === null || _f === void 0 ? void 0 : _f[0];
|
|
301
261
|
chat.name = name;
|
|
302
262
|
emitGroupUpdate({ subject: name });
|
|
303
263
|
break;
|
|
304
|
-
case Types_1.WAMessageStubType.GROUP_CHANGE_DESCRIPTION:
|
|
305
|
-
const description = (_k = message.messageStubParameters) === null || _k === void 0 ? void 0 : _k[0];
|
|
306
|
-
chat.description = description;
|
|
307
|
-
emitGroupUpdate({ desc: description });
|
|
308
|
-
break;
|
|
309
264
|
case Types_1.WAMessageStubType.GROUP_CHANGE_INVITE_LINK:
|
|
310
|
-
const code = (
|
|
265
|
+
const code = (_g = message.messageStubParameters) === null || _g === void 0 ? void 0 : _g[0];
|
|
311
266
|
emitGroupUpdate({ inviteCode: code });
|
|
312
267
|
break;
|
|
313
268
|
case Types_1.WAMessageStubType.GROUP_MEMBER_ADD_MODE:
|
|
314
|
-
const memberAddValue = (
|
|
269
|
+
const memberAddValue = (_h = message.messageStubParameters) === null || _h === void 0 ? void 0 : _h[0];
|
|
315
270
|
emitGroupUpdate({ memberAddMode: memberAddValue === 'all_member_add' });
|
|
316
271
|
break;
|
|
317
272
|
case Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE:
|
|
318
|
-
const approvalMode = (
|
|
273
|
+
const approvalMode = (_j = message.messageStubParameters) === null || _j === void 0 ? void 0 : _j[0];
|
|
319
274
|
emitGroupUpdate({ joinApprovalMode: approvalMode === 'on' });
|
|
320
275
|
break;
|
|
321
|
-
case Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD:
|
|
322
|
-
const participant = (_p = message.messageStubParameters) === null || _p === void 0 ? void 0 : _p[0];
|
|
323
|
-
const action = (_q = message.messageStubParameters) === null || _q === void 0 ? void 0 : _q[1];
|
|
324
|
-
const method = (_r = message.messageStubParameters) === null || _r === void 0 ? void 0 : _r[2];
|
|
325
|
-
emitGroupRequestJoin(participant, action, method);
|
|
326
|
-
break;
|
|
327
276
|
}
|
|
328
277
|
}
|
|
329
278
|
else if (content === null || content === void 0 ? void 0 : content.pollUpdateMessage) {
|
|
@@ -334,7 +283,7 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
334
283
|
const meIdNormalised = (0, WABinary_1.jidNormalizedUser)(meId);
|
|
335
284
|
const pollCreatorJid = (0, generics_1.getKeyAuthor)(creationMsgKey, meIdNormalised);
|
|
336
285
|
const voterJid = (0, generics_1.getKeyAuthor)(message.key, meIdNormalised);
|
|
337
|
-
const pollEncKey = (
|
|
286
|
+
const pollEncKey = (_k = pollMsg.messageContextInfo) === null || _k === void 0 ? void 0 : _k.messageSecret;
|
|
338
287
|
try {
|
|
339
288
|
const voteMsg = decryptPollVote(content.pollUpdateMessage.vote, {
|
|
340
289
|
pollEncKey,
|
package/lib/Utils/signal.d.ts
CHANGED
|
@@ -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:
|
|
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
|
package/lib/Utils/signal.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
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");
|
|
@@ -67,47 +66,46 @@ const parseAndInjectE2ESessions = async (node, repository) => {
|
|
|
67
66
|
for (const node of nodes) {
|
|
68
67
|
(0, WABinary_1.assertNodeErrorFree)(node);
|
|
69
68
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
session: {
|
|
87
|
-
registrationId: registrationId,
|
|
88
|
-
identityKey: (0, crypto_1.generateSignalPubKey)(identity),
|
|
89
|
-
signedPreKey: extractKey(signedKey),
|
|
90
|
-
preKey: extractKey(key)
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
}));
|
|
94
|
-
}
|
|
69
|
+
await Promise.all(nodes.map(async (node) => {
|
|
70
|
+
const signedKey = (0, WABinary_1.getBinaryNodeChild)(node, 'skey');
|
|
71
|
+
const key = (0, WABinary_1.getBinaryNodeChild)(node, 'key');
|
|
72
|
+
const identity = (0, WABinary_1.getBinaryNodeChildBuffer)(node, 'identity');
|
|
73
|
+
const jid = node.attrs.jid;
|
|
74
|
+
const registrationId = (0, WABinary_1.getBinaryNodeChildUInt)(node, 'registration', 4);
|
|
75
|
+
await repository.injectE2ESession({
|
|
76
|
+
jid,
|
|
77
|
+
session: {
|
|
78
|
+
registrationId: registrationId,
|
|
79
|
+
identityKey: (0, crypto_1.generateSignalPubKey)(identity),
|
|
80
|
+
signedPreKey: extractKey(signedKey),
|
|
81
|
+
preKey: extractKey(key)
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}));
|
|
95
85
|
};
|
|
96
86
|
exports.parseAndInjectE2ESessions = parseAndInjectE2ESessions;
|
|
97
87
|
const extractDeviceJids = (result, myJid, excludeZeroDevices) => {
|
|
88
|
+
var _a;
|
|
98
89
|
const { user: myUser, device: myDevice } = (0, WABinary_1.jidDecode)(myJid);
|
|
99
90
|
const extracted = [];
|
|
100
|
-
for (const
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
(
|
|
109
|
-
|
|
110
|
-
|
|
91
|
+
for (const node of result.content) {
|
|
92
|
+
const list = (_a = (0, WABinary_1.getBinaryNodeChild)(node, 'list')) === null || _a === void 0 ? void 0 : _a.content;
|
|
93
|
+
if (list && Array.isArray(list)) {
|
|
94
|
+
for (const item of list) {
|
|
95
|
+
const { user } = (0, WABinary_1.jidDecode)(item.attrs.jid);
|
|
96
|
+
const devicesNode = (0, WABinary_1.getBinaryNodeChild)(item, 'devices');
|
|
97
|
+
const deviceListNode = (0, WABinary_1.getBinaryNodeChild)(devicesNode, 'device-list');
|
|
98
|
+
if (Array.isArray(deviceListNode === null || deviceListNode === void 0 ? void 0 : deviceListNode.content)) {
|
|
99
|
+
for (const { tag, attrs } of deviceListNode.content) {
|
|
100
|
+
const device = +attrs.id;
|
|
101
|
+
if (tag === 'device' && // ensure the "device" tag
|
|
102
|
+
(!excludeZeroDevices || device !== 0) && // if zero devices are not-excluded, or device is non zero
|
|
103
|
+
(myUser !== user || myDevice !== device) && // either different user or if me user, not this device
|
|
104
|
+
(device === 0 || !!attrs['key-index']) // ensure that "key-index" is specified for "non-zero" devices, produces a bad req otherwise
|
|
105
|
+
) {
|
|
106
|
+
extracted.push({ user, device });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
111
109
|
}
|
|
112
110
|
}
|
|
113
111
|
}
|
|
@@ -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
|
-
|
|
33
|
-
|
|
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
|
|
48
|
-
|
|
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
|
-
|
|
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:
|
|
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,
|
|
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
|
|
10
|
+
};
|
|
11
|
+
export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => Uint8Array;
|