@elrayyxml/baileys 1.0.3 → 1.0.7
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/README.md +2517 -0
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Defaults/index.d.ts +51 -0
- package/lib/Defaults/index.js +9 -1
- package/lib/Defaults/phonenumber-mcc.json +223 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
- package/lib/Signal/Group/group-session-builder.d.ts +14 -0
- package/lib/Signal/Group/group_cipher.d.ts +17 -0
- package/lib/Signal/Group/index.d.ts +11 -0
- package/lib/Signal/Group/keyhelper.d.ts +10 -0
- package/lib/Signal/Group/queue-job.d.ts +1 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
- package/lib/Signal/Group/sender-key-message.d.ts +18 -0
- package/lib/Signal/Group/sender-key-name.d.ts +17 -0
- package/lib/Signal/Group/sender-key-record.d.ts +30 -0
- package/lib/Signal/Group/sender-key-state.d.ts +38 -0
- package/lib/Signal/Group/sender-message-key.d.ts +11 -0
- package/lib/Signal/libsignal.d.ts +3 -0
- package/lib/Socket/Client/index.d.ts +2 -0
- package/lib/Socket/Client/types.d.ts +16 -0
- package/lib/Socket/Client/websocket.d.ts +13 -0
- package/lib/Socket/business.d.ts +172 -0
- package/lib/Socket/chats.d.ts +82 -0
- package/lib/Socket/groups.d.ts +124 -0
- package/lib/Socket/index.d.ts +172 -0
- package/lib/Socket/messages-recv.d.ts +161 -0
- package/lib/Socket/messages-send.d.ts +151 -0
- package/lib/Socket/messages-send.js +236 -59
- package/lib/Socket/newsletter.d.ts +136 -0
- package/lib/Socket/newsletter.js +5 -1
- package/lib/Socket/socket.d.ts +43 -0
- package/lib/Socket/usync.d.ts +36 -0
- package/lib/Store/index.d.ts +2 -0
- package/lib/Store/make-in-memory-store.d.ts +118 -0
- package/lib/Store/make-ordered-dictionary.d.ts +13 -0
- package/lib/Store/object-repository.d.ts +10 -0
- package/lib/Types/Auth.d.ts +103 -0
- package/lib/Types/Call.d.ts +13 -0
- package/lib/Types/Chat.d.ts +109 -0
- package/lib/Types/Contact.d.ts +23 -0
- package/lib/Types/Events.d.ts +199 -0
- package/lib/Types/GroupMetadata.d.ts +64 -0
- package/lib/Types/Label.d.ts +35 -0
- package/lib/Types/LabelAssociation.d.ts +29 -0
- package/lib/Types/Message.d.ts +400 -0
- package/lib/Types/Newsletter.d.ts +79 -0
- package/lib/Types/Product.d.ts +78 -0
- package/lib/Types/Signal.d.ts +57 -0
- package/lib/Types/Socket.d.ts +119 -0
- package/lib/Types/State.d.ts +27 -0
- package/lib/Types/USync.d.ts +25 -0
- package/lib/Types/index.d.ts +64 -0
- package/lib/Utils/auth-utils.d.ts +18 -0
- package/lib/Utils/baileys-event-stream.d.ts +16 -0
- package/lib/Utils/business.d.ts +22 -0
- package/lib/Utils/chat-utils.d.ts +70 -0
- package/lib/Utils/crypto.d.ts +40 -0
- package/lib/Utils/decode-wa-message.d.ts +35 -0
- package/lib/Utils/event-buffer.d.ts +35 -0
- package/lib/Utils/generics.d.ts +89 -0
- package/lib/Utils/generics.js +31 -4
- package/lib/Utils/history.d.ts +19 -0
- package/lib/Utils/index.d.ts +17 -0
- package/lib/Utils/link-preview.d.ts +21 -0
- package/lib/Utils/logger.d.ts +11 -0
- package/lib/Utils/lt-hash.d.ts +12 -0
- package/lib/Utils/make-mutex.d.ts +7 -0
- package/lib/Utils/messages-media.d.ts +120 -0
- package/lib/Utils/messages.d.ts +75 -0
- package/lib/Utils/messages.js +400 -38
- package/lib/Utils/noise-handler.d.ts +19 -0
- package/lib/Utils/process-message.d.ts +42 -0
- package/lib/Utils/signal.d.ts +33 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
- package/lib/Utils/validate-connection.d.ts +10 -0
- package/lib/WABinary/constants.d.ts +27 -0
- package/lib/WABinary/decode.d.ts +6 -0
- package/lib/WABinary/encode.d.ts +2 -0
- package/lib/WABinary/generic-utils.d.ts +14 -0
- package/lib/WABinary/generic-utils.js +11 -8
- package/lib/WABinary/index.d.ts +5 -0
- package/lib/WABinary/jid-utils.d.ts +36 -0
- package/lib/WABinary/types.d.ts +18 -0
- package/lib/WAM/BinaryInfo.d.ts +8 -0
- package/lib/WAM/constants.d.ts +38 -0
- package/lib/WAM/encode.d.ts +2 -0
- package/lib/WAM/index.d.ts +3 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
- package/lib/WAUSync/Protocols/index.d.ts +4 -0
- package/lib/WAUSync/USyncQuery.d.ts +28 -0
- package/lib/WAUSync/USyncUser.d.ts +12 -0
- package/lib/WAUSync/index.d.ts +3 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.js +4 -1
- package/package.json +17 -14
- package/README.MD +0 -78
- package/lib/Socket/type.js +0 -405
package/lib/Utils/messages.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
|
|
6
|
+
exports.prepareAlbumMessageContent = exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
|
|
7
7
|
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
8
8
|
const boom_1 = require("@hapi/boom");
|
|
9
9
|
const axios_1 = __importDefault(require("axios"));
|
|
@@ -16,6 +16,7 @@ const WABinary_1 = require("../WABinary");
|
|
|
16
16
|
const crypto_2 = require("./crypto");
|
|
17
17
|
const generics_1 = require("./generics");
|
|
18
18
|
const messages_media_1 = require("./messages-media");
|
|
19
|
+
const fflate_1 = require("fflate");
|
|
19
20
|
const MIMETYPE_MAP = {
|
|
20
21
|
image: 'image/jpeg',
|
|
21
22
|
video: 'video/mp4',
|
|
@@ -79,38 +80,6 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
79
80
|
}
|
|
80
81
|
const uploadData = {
|
|
81
82
|
...message,
|
|
82
|
-
...(message.annotations ? {
|
|
83
|
-
annotations: message.annotations
|
|
84
|
-
} : {
|
|
85
|
-
annotations: [
|
|
86
|
-
{
|
|
87
|
-
polygonVertices: [
|
|
88
|
-
{
|
|
89
|
-
x: 60.71664810180664,
|
|
90
|
-
y: -36.39784622192383
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
x: -16.710189819335938,
|
|
94
|
-
y: 49.263675689697266
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
x: -56.585853576660156,
|
|
98
|
-
y: 37.85963439941406
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
x: 20.840980529785156,
|
|
102
|
-
y: -47.80188751220703
|
|
103
|
-
}
|
|
104
|
-
],
|
|
105
|
-
newsletter: {
|
|
106
|
-
newsletterJid: "120363402530588049@newsletter",
|
|
107
|
-
serverMessageId: 0,
|
|
108
|
-
newsletterName: "𓅯 ᴇʟʀᴀʏʏxᴍʟ ɴᴏᴛɪꜰɪᴇʀ ",
|
|
109
|
-
contentType: "UPDATE",
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
]
|
|
113
|
-
}),
|
|
114
83
|
media: message[mediaType]
|
|
115
84
|
};
|
|
116
85
|
delete uploadData[mediaType];
|
|
@@ -227,6 +196,51 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
227
196
|
return obj;
|
|
228
197
|
};
|
|
229
198
|
exports.prepareWAMessageMedia = prepareWAMessageMedia;
|
|
199
|
+
const prepareAlbumMessageContent = async (jid, albums, options) => {
|
|
200
|
+
const array = albums;
|
|
201
|
+
|
|
202
|
+
const albumContent = {
|
|
203
|
+
messageContextInfo: {
|
|
204
|
+
messageSecret: crypto_1.randomBytes(32),
|
|
205
|
+
},
|
|
206
|
+
albumMessage: {
|
|
207
|
+
expectedImageCount: array.filter((a) => a.hasOwnProperty("image")).length,
|
|
208
|
+
expectedVideoCount: array.filter((a) => a.hasOwnProperty("video")).length,
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
const albumMsg = await generateWAMessageFromContent(jid, albumContent, {
|
|
212
|
+
userJid: options.userJid,
|
|
213
|
+
quoted: options.quoted,
|
|
214
|
+
ephemeralExpiration: options.ephemeralExpiration,
|
|
215
|
+
upload: options.sock.waUploadToServer
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
await options.sock.relayMessage(jid, albumMsg.message, {
|
|
219
|
+
messageId: albumMsg.key.id,
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
for (let contentItem of array) {
|
|
223
|
+
const mediaMsg = await generateWAMessage(jid, contentItem, {
|
|
224
|
+
upload: options.sock.waUploadToServer,
|
|
225
|
+
userJid: options.userJid
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
mediaMsg.message.messageContextInfo = {
|
|
229
|
+
messageSecret: crypto_1.randomBytes(32),
|
|
230
|
+
messageAssociation: {
|
|
231
|
+
associationType: 1,
|
|
232
|
+
parentMessageKey: albumMsg.key,
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
await options.sock.relayMessage(jid, mediaMsg.message, {
|
|
237
|
+
messageId: mediaMsg.key.id,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return albumMsg;
|
|
242
|
+
};
|
|
243
|
+
exports.prepareAlbumMessageContent = prepareAlbumMessageContent;
|
|
230
244
|
const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
231
245
|
ephemeralExpiration = ephemeralExpiration || 0;
|
|
232
246
|
const content = {
|
|
@@ -276,7 +290,7 @@ exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
|
276
290
|
const generateWAMessageContent = async (message, options) => {
|
|
277
291
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
278
292
|
var _p, _q;
|
|
279
|
-
let m = {};
|
|
293
|
+
let m = {};
|
|
280
294
|
if ('text' in message) {
|
|
281
295
|
const extContent = { text: message.text };
|
|
282
296
|
let urlInfo = message.linkPreview;
|
|
@@ -408,6 +422,19 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
408
422
|
type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
|
|
409
423
|
};
|
|
410
424
|
break;
|
|
425
|
+
case 'interactive':
|
|
426
|
+
m.interactiveResponseMessage = {
|
|
427
|
+
body: {
|
|
428
|
+
text: message.buttonReply.displayText,
|
|
429
|
+
format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1
|
|
430
|
+
},
|
|
431
|
+
nativeFlowResponseMessage: {
|
|
432
|
+
name: message.buttonReply.nativeFlows.name,
|
|
433
|
+
paramsJson: message.buttonReply.nativeFlows.paramsJson,
|
|
434
|
+
version: message.buttonReply.nativeFlows.version
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
break;
|
|
411
438
|
}
|
|
412
439
|
}
|
|
413
440
|
else if ('ptv' in message && message.ptv) {
|
|
@@ -442,6 +469,26 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
442
469
|
else if ('listReply' in message) {
|
|
443
470
|
m.listResponseMessage = { ...message.listReply };
|
|
444
471
|
}
|
|
472
|
+
else if ('pollResult' in message) {
|
|
473
|
+
if (!Array.isArray(message.pollResult.values)) {
|
|
474
|
+
throw new boom_1.Boom('Invalid pollResult values', { statusCode: 400 })
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
const pollResultSnapshotMessage = {
|
|
478
|
+
name: message.pollResult.name,
|
|
479
|
+
pollVotes: message.pollResult.values.map(([optionName, optionVoteCount]) => ({
|
|
480
|
+
optionName,
|
|
481
|
+
optionVoteCount
|
|
482
|
+
}))
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
pollResultSnapshotMessage.contextInfo = {
|
|
486
|
+
...(message.contextInfo || {}),
|
|
487
|
+
...(message.mentions ? { mentionedJid: message.mentions } : {})
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
m.pollResultSnapshotMessage = pollResultSnapshotMessage
|
|
491
|
+
}
|
|
445
492
|
else if ('poll' in message) {
|
|
446
493
|
(_p = message.poll).selectableCount || (_p.selectableCount = 0);
|
|
447
494
|
(_q = message.poll).toAnnouncementGroup || (_q.toAnnouncementGroup = false);
|
|
@@ -455,8 +502,8 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
455
502
|
m.messageContextInfo = {
|
|
456
503
|
// encKey
|
|
457
504
|
messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
458
|
-
|
|
459
|
-
|
|
505
|
+
};
|
|
506
|
+
const pollCreationMessage = {
|
|
460
507
|
name: message.poll.name,
|
|
461
508
|
selectableOptionsCount: message.poll.selectableCount,
|
|
462
509
|
options: message.poll.values.map(optionName => ({ optionName })),
|
|
@@ -476,11 +523,132 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
476
523
|
}
|
|
477
524
|
}
|
|
478
525
|
}
|
|
526
|
+
else if ('stickerPack' in message) {
|
|
527
|
+
const { stickers, cover, name, publisher, packId, description } = message.stickerPack;
|
|
528
|
+
const { Readable } = require('stream');
|
|
529
|
+
const Jimp = require('jimp');
|
|
530
|
+
const stickerData = {};
|
|
531
|
+
const stickerPackId = packId || (0, generics_1.generateMessageID)();
|
|
532
|
+
const trayIconFileName = `${stickerPackId}.webp`;
|
|
533
|
+
|
|
534
|
+
const stickerPromises = stickers.map(async (s, i) => {
|
|
535
|
+
const { stream } = await (0, messages_media_1.getStream)(s.sticker);
|
|
536
|
+
const buffer = await (0, messages_media_1.toBuffer)(stream);
|
|
537
|
+
const hash = (0, crypto_2.sha256)(buffer).toString('base64url');
|
|
538
|
+
const fileName = `${i.toString().padStart(2, '0')}_${hash}.webp`;
|
|
539
|
+
stickerData[fileName] = [new Uint8Array(buffer), { level: 0 }];
|
|
540
|
+
return {
|
|
541
|
+
fileName,
|
|
542
|
+
mimetype: 'image/webp',
|
|
543
|
+
isAnimated: s.isAnimated || false,
|
|
544
|
+
isLottie: s.isLottie || false,
|
|
545
|
+
emojis: s.emojis || [],
|
|
546
|
+
accessibilityLabel: s.accessibilityLabel || ''
|
|
547
|
+
};
|
|
548
|
+
});
|
|
549
|
+
|
|
550
|
+
const stickerMetadata = await Promise.all(stickerPromises);
|
|
551
|
+
|
|
552
|
+
const coverBuffer = await (0, messages_media_1.toBuffer)((await (0, messages_media_1.getStream)(cover)).stream);
|
|
553
|
+
stickerData[trayIconFileName] = [new Uint8Array(coverBuffer), { level: 0 }];
|
|
554
|
+
|
|
555
|
+
const zipBuffer = await new Promise((resolve, reject) => {
|
|
556
|
+
(0, fflate_1.zip)(stickerData, (err, data) => {
|
|
557
|
+
if (err) reject(err);
|
|
558
|
+
else resolve(Buffer.from(data));
|
|
559
|
+
});
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
const stickerPackUpload = await (0, messages_media_1.encryptedStream)(
|
|
563
|
+
{ stream: Readable.from(zipBuffer) },
|
|
564
|
+
'sticker-pack', {
|
|
565
|
+
logger: options.logger,
|
|
566
|
+
opts: options.options
|
|
567
|
+
}
|
|
568
|
+
);
|
|
569
|
+
|
|
570
|
+
const stickerPackUploadResult = await options.upload(stickerPackUpload.encWriteStream, {
|
|
571
|
+
fileEncSha256B64: stickerPackUpload.fileEncSha256.toString('base64'),
|
|
572
|
+
mediaType: 'sticker-pack',
|
|
573
|
+
timeoutMs: options.mediaUploadTimeoutMs
|
|
574
|
+
});
|
|
575
|
+
|
|
576
|
+
let thumbnailDirectPath, thumbnailSha256, thumbnailEncSha256, imageDataHash;
|
|
577
|
+
|
|
578
|
+
try {
|
|
579
|
+
const jimpImage = await Jimp.read(coverBuffer);
|
|
580
|
+
const thumbnailBuffer = await jimpImage.resize(252, 252).getBufferAsync(Jimp.MIME_JPEG);
|
|
581
|
+
|
|
582
|
+
const thumbUpload = await (0, messages_media_1.encryptedStream)(
|
|
583
|
+
{ stream: Readable.from(thumbnailBuffer) },
|
|
584
|
+
'thumbnail-sticker-pack', {
|
|
585
|
+
logger: options.logger,
|
|
586
|
+
opts: options.options,
|
|
587
|
+
mediaKey: stickerPackUpload.mediaKey
|
|
588
|
+
}
|
|
589
|
+
);
|
|
590
|
+
|
|
591
|
+
const thumbUploadResult = await options.upload(thumbUpload.encWriteStream, {
|
|
592
|
+
fileEncSha256B64: thumbUpload.fileEncSha256.toString('base64'),
|
|
593
|
+
mediaType: 'thumbnail-sticker-pack',
|
|
594
|
+
timeoutMs: options.mediaUploadTimeoutMs
|
|
595
|
+
});
|
|
596
|
+
|
|
597
|
+
thumbnailDirectPath = thumbUploadResult.directPath;
|
|
598
|
+
thumbnailSha256 = thumbUpload.fileSha256;
|
|
599
|
+
thumbnailEncSha256 = thumbUpload.fileEncSha256;
|
|
600
|
+
imageDataHash = (0, crypto_2.sha256)(thumbnailBuffer).toString('base64');
|
|
601
|
+
} catch (e) {
|
|
602
|
+
options.logger?.warn?.(`Thumbnail generation failed: ${e}`);
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
m.stickerPackMessage = {
|
|
606
|
+
name: name,
|
|
607
|
+
publisher: publisher,
|
|
608
|
+
stickerPackId: stickerPackId,
|
|
609
|
+
packDescription: description,
|
|
610
|
+
stickerPackOrigin: WAProto_1.proto.Message.StickerPackMessage.StickerPackOrigin.USER_CREATED,
|
|
611
|
+
stickerPackSize: zipBuffer.length,
|
|
612
|
+
stickers: stickerMetadata,
|
|
613
|
+
fileSha256: stickerPackUpload.fileSha256,
|
|
614
|
+
fileEncSha256: stickerPackUpload.fileEncSha256,
|
|
615
|
+
mediaKey: stickerPackUpload.mediaKey,
|
|
616
|
+
directPath: stickerPackUploadResult.directPath,
|
|
617
|
+
fileLength: zipBuffer.length,
|
|
618
|
+
mediaKeyTimestamp: (0, generics_1.unixTimestampSeconds)(),
|
|
619
|
+
trayIconFileName: trayIconFileName,
|
|
620
|
+
imageDataHash,
|
|
621
|
+
thumbnailDirectPath,
|
|
622
|
+
thumbnailSha256,
|
|
623
|
+
thumbnailEncSha256,
|
|
624
|
+
thumbnailHeight: 252,
|
|
625
|
+
thumbnailWidth: 252
|
|
626
|
+
};
|
|
627
|
+
|
|
628
|
+
m.stickerPackMessage.contextInfo = {
|
|
629
|
+
...(message.contextInfo || {}),
|
|
630
|
+
...(message.mentions ? { mentionedJid: message.mentions } : {})
|
|
631
|
+
};
|
|
632
|
+
}
|
|
479
633
|
else if ('event' in message) {
|
|
634
|
+
m.eventMessage = {};
|
|
635
|
+
const startTime = Math.floor(message.event.startDate.getTime() / 1000);
|
|
636
|
+
if (message.event.call && options.getCallLink) {
|
|
637
|
+
const token = await options.getCallLink(message.event.call, { startTime });
|
|
638
|
+
m.eventMessage.joinLink = (message.event.call === 'audio' ? CALL_AUDIO_PREFIX : CALL_VIDEO_PREFIX) + token;
|
|
639
|
+
}
|
|
480
640
|
m.messageContextInfo = {
|
|
481
|
-
|
|
641
|
+
// encKey
|
|
642
|
+
messageSecret: message.event.messageSecret || randomBytes(32)
|
|
482
643
|
};
|
|
483
|
-
m.eventMessage =
|
|
644
|
+
m.eventMessage.name = message.event.name;
|
|
645
|
+
m.eventMessage.description = message.event.description;
|
|
646
|
+
m.eventMessage.startTime = startTime;
|
|
647
|
+
m.eventMessage.endTime = message.event.endDate ? message.event.endDate.getTime() / 1000 : undefined;
|
|
648
|
+
m.eventMessage.isCanceled = message.event.isCancelled ?? false;
|
|
649
|
+
m.eventMessage.extraGuestsAllowed = message.event.extraGuestsAllowed;
|
|
650
|
+
m.eventMessage.isScheduleCall = message.event.isScheduleCall ?? false;
|
|
651
|
+
m.eventMessage.location = message.event.location;
|
|
484
652
|
}
|
|
485
653
|
else if ('inviteAdmin' in message) {
|
|
486
654
|
m.newsletterAdminInviteMessage = {};
|
|
@@ -607,6 +775,29 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
607
775
|
};
|
|
608
776
|
m = { listMessage };
|
|
609
777
|
}
|
|
778
|
+
if ('productList' in message && !!message.productList) {
|
|
779
|
+
const thumbnail = message.thumbnail ? await (0, messages_media_1.generateThumbnail)(message.thumbnail, 'image') : null;
|
|
780
|
+
const listMessage = {
|
|
781
|
+
title: message.title,
|
|
782
|
+
buttonText: message.buttonText,
|
|
783
|
+
footerText: message.footer,
|
|
784
|
+
description: message.text,
|
|
785
|
+
productListInfo: {
|
|
786
|
+
productSections: message.productList,
|
|
787
|
+
headerImage: {
|
|
788
|
+
productId: message.productList[0].products[0].productId,
|
|
789
|
+
jpegThumbnail: (thumbnail === null || thumbnail === void 0 ? void 0 : thumbnail.thumbnail) || null
|
|
790
|
+
},
|
|
791
|
+
businessOwnerJid: message.businessOwnerJid
|
|
792
|
+
},
|
|
793
|
+
listType: WAProto_1.proto.Message.ListMessage.ListType.PRODUCT_LIST
|
|
794
|
+
};
|
|
795
|
+
listMessage.contextInfo = {
|
|
796
|
+
...(message.contextInfo || {}),
|
|
797
|
+
...(message.mentions ? { mentionedJid: message.mentions } : {})
|
|
798
|
+
};
|
|
799
|
+
m = { listMessage };
|
|
800
|
+
}
|
|
610
801
|
if ('interactiveButtons' in message && !!message.interactiveButtons) {
|
|
611
802
|
const interactiveMessage = {
|
|
612
803
|
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
|
@@ -694,9 +885,180 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
694
885
|
}
|
|
695
886
|
m = { interactiveMessage };
|
|
696
887
|
}
|
|
888
|
+
if ('nativeFlowMessage' in message && !!message.nativeFlowMessage) {
|
|
889
|
+
const { nativeFlowMessage } = message;
|
|
890
|
+
let paramsJson = nativeFlowMessage.messageParamsJson;
|
|
891
|
+
if (typeof paramsJson === 'object' && paramsJson !== null) {
|
|
892
|
+
paramsJson = JSON.stringify(paramsJson);
|
|
893
|
+
}
|
|
894
|
+
const interactiveMessage = {
|
|
895
|
+
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
|
896
|
+
buttons: nativeFlowMessage.buttons,
|
|
897
|
+
messageParamsJson: paramsJson
|
|
898
|
+
})
|
|
899
|
+
};
|
|
900
|
+
if ('text' in message) {
|
|
901
|
+
interactiveMessage.body = { text: message.text };
|
|
902
|
+
} else if ('caption' in message) {
|
|
903
|
+
interactiveMessage.body = { text: message.caption };
|
|
904
|
+
}
|
|
905
|
+
interactiveMessage.header = {
|
|
906
|
+
title: message.title || message.header,
|
|
907
|
+
subtitle: message.subtitle,
|
|
908
|
+
hasMediaAttachment: false
|
|
909
|
+
};
|
|
910
|
+
if ('footer' in message) {
|
|
911
|
+
interactiveMessage.footer = { text: message.footer };
|
|
912
|
+
}
|
|
913
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
914
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
915
|
+
}
|
|
916
|
+
if ('mentions' in message && !!message.mentions) {
|
|
917
|
+
interactiveMessage.contextInfo = { ...interactiveMessage.contextInfo, mentionedJid: message.mentions };
|
|
918
|
+
}
|
|
919
|
+
const contentKeys = Object.keys(m);
|
|
920
|
+
if (contentKeys.length > 0) {
|
|
921
|
+
const mediaType = contentKeys[0];
|
|
922
|
+
interactiveMessage.header[mediaType] = m[mediaType];
|
|
923
|
+
interactiveMessage.header.hasMediaAttachment = true;
|
|
924
|
+
if (interactiveMessage.header[mediaType].contextInfo) {
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
m = { interactiveMessage };
|
|
929
|
+
}
|
|
930
|
+
else if ('collection' in message && !!message.collection) {
|
|
931
|
+
const interactiveMessage = {
|
|
932
|
+
collectionMessage: {
|
|
933
|
+
bizJid: message.collection.bizJid,
|
|
934
|
+
id: message.collection.id,
|
|
935
|
+
messageVersion: message?.collection?.version
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
if ('text' in message) {
|
|
940
|
+
interactiveMessage.body = {
|
|
941
|
+
text: message.text
|
|
942
|
+
},
|
|
943
|
+
interactiveMessage.header = {
|
|
944
|
+
title: message.title,
|
|
945
|
+
subtitle: message.subtitle,
|
|
946
|
+
hasMediaAttachment: false
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
else {
|
|
951
|
+
if ('caption' in message) {
|
|
952
|
+
interactiveMessage.body = {
|
|
953
|
+
text: message.caption
|
|
954
|
+
}
|
|
955
|
+
interactiveMessage.header = {
|
|
956
|
+
title: message.title,
|
|
957
|
+
subtitle: message.subtitle,
|
|
958
|
+
hasMediaAttachment: message.hasMediaAttachment ? message.hasMediaAttachment : false,
|
|
959
|
+
...Object.assign(interactiveMessage, m)
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
if ('footer' in message && !message.footer) {
|
|
965
|
+
interactiveMessage.footer = {
|
|
966
|
+
text: message.footer
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
interactiveMessage.contextInfo = {
|
|
971
|
+
...(message.contextInfo || {}),
|
|
972
|
+
...(message.mentions ? { mentionedJid: message.mentions } : {})
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
m = { interactiveMessage }
|
|
976
|
+
}
|
|
977
|
+
else if ('cards' in message && !!message.cards) {
|
|
978
|
+
const slides = await Promise.all(message.cards.map(async (slide) => {
|
|
979
|
+
const { image, video, product, title, body, footer, buttons } = slide
|
|
980
|
+
let header
|
|
981
|
+
|
|
982
|
+
if (product) {
|
|
983
|
+
const { imageMessage } = await prepareWAMessageMedia({ image: product.productImage, ...options }, options)
|
|
984
|
+
header = {
|
|
985
|
+
productMessage: {
|
|
986
|
+
product: {
|
|
987
|
+
...product,
|
|
988
|
+
productImage: imageMessage,
|
|
989
|
+
},
|
|
990
|
+
...slide
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
else if (image) {
|
|
996
|
+
header = await prepareWAMessageMedia({ image: image, ...options }, options)
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
else if (video) {
|
|
1000
|
+
header = await prepareWAMessageMedia({ video: video, ...options }, options)
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
const msg = {
|
|
1004
|
+
header: {
|
|
1005
|
+
title,
|
|
1006
|
+
hasMediaAttachment: true,
|
|
1007
|
+
...header
|
|
1008
|
+
},
|
|
1009
|
+
body: {
|
|
1010
|
+
text: body
|
|
1011
|
+
},
|
|
1012
|
+
footer: {
|
|
1013
|
+
text: footer
|
|
1014
|
+
},
|
|
1015
|
+
nativeFlowMessage: {
|
|
1016
|
+
buttons,
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
return msg
|
|
1021
|
+
}))
|
|
1022
|
+
|
|
1023
|
+
const interactiveMessage = {
|
|
1024
|
+
carouselMessage: {
|
|
1025
|
+
cards: slides
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
if ('text' in message) {
|
|
1030
|
+
interactiveMessage.body = {
|
|
1031
|
+
text: message.text
|
|
1032
|
+
},
|
|
1033
|
+
interactiveMessage.header = {
|
|
1034
|
+
title: message.title,
|
|
1035
|
+
subtitle: message.subtitle,
|
|
1036
|
+
hasMediaAttachment: false
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
if ('footer' in message && !!message.footer) {
|
|
1041
|
+
interactiveMessage.footer = {
|
|
1042
|
+
text: message.footer
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
interactiveMessage.contextInfo = {
|
|
1047
|
+
...(message.contextInfo || {}),
|
|
1048
|
+
...(message.mentions ? { mentionedJid: message.mentions } : {})
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
m = { interactiveMessage }
|
|
1052
|
+
}
|
|
1053
|
+
if ('ephemeral' in message && !!message.ephemeral) {
|
|
1054
|
+
m = { ephemeralMessage: { message: m } }
|
|
1055
|
+
}
|
|
697
1056
|
if ('viewOnce' in message && !!message.viewOnce) {
|
|
698
1057
|
m = { viewOnceMessage: { message: m } };
|
|
699
1058
|
}
|
|
1059
|
+
if ('viewOnceExt' in message && !!message.viewOnceExt) {
|
|
1060
|
+
m = { viewOnceMessageV2Extension: { message: m } }
|
|
1061
|
+
}
|
|
700
1062
|
if ('mentions' in message && ((_o = message.mentions) === null || _o === void 0 ? void 0 : _o.length)) {
|
|
701
1063
|
const [messageType] = Object.keys(m);
|
|
702
1064
|
m[messageType].contextInfo = m[messageType] || {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ILogger } from './logger';
|
|
2
|
+
import { proto } from '../../WAProto';
|
|
3
|
+
import { KeyPair } from '../Types';
|
|
4
|
+
import { BinaryNode } from '../WABinary';
|
|
5
|
+
export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }: {
|
|
6
|
+
keyPair: KeyPair;
|
|
7
|
+
NOISE_HEADER: Uint8Array;
|
|
8
|
+
logger: ILogger;
|
|
9
|
+
routingInfo?: Buffer | undefined;
|
|
10
|
+
}) => {
|
|
11
|
+
encrypt: (plaintext: Uint8Array) => Buffer<ArrayBuffer>;
|
|
12
|
+
decrypt: (ciphertext: Uint8Array) => Buffer<ArrayBuffer>;
|
|
13
|
+
authenticate: (data: Uint8Array) => void;
|
|
14
|
+
mixIntoKey: (data: Uint8Array) => Promise<void>;
|
|
15
|
+
finishInit: () => Promise<void>;
|
|
16
|
+
processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => Promise<Buffer<ArrayBuffer>>;
|
|
17
|
+
encodeFrame: (data: Buffer | Uint8Array) => Buffer<ArrayBuffer>;
|
|
18
|
+
decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => Promise<void>;
|
|
19
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { proto } from '../../WAProto';
|
|
3
|
+
import { AuthenticationCreds, BaileysEventEmitter, CacheStore, SignalKeyStoreWithTransaction, SocketConfig } from '../Types';
|
|
4
|
+
import { ILogger } from './logger';
|
|
5
|
+
type ProcessMessageContext = {
|
|
6
|
+
shouldProcessHistoryMsg: boolean;
|
|
7
|
+
placeholderResendCache?: CacheStore;
|
|
8
|
+
creds: AuthenticationCreds;
|
|
9
|
+
keyStore: SignalKeyStoreWithTransaction;
|
|
10
|
+
ev: BaileysEventEmitter;
|
|
11
|
+
getMessage: SocketConfig['getMessage'];
|
|
12
|
+
logger?: ILogger;
|
|
13
|
+
options: AxiosRequestConfig<{}>;
|
|
14
|
+
};
|
|
15
|
+
/** Cleans a received message to further processing */
|
|
16
|
+
export declare const cleanMessage: (message: proto.IWebMessageInfo, meId: string) => void;
|
|
17
|
+
export declare const isRealMessage: (message: proto.IWebMessageInfo, meId: string) => boolean | undefined;
|
|
18
|
+
export declare const shouldIncrementChatUnread: (message: proto.IWebMessageInfo) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Get the ID of the chat from the given key.
|
|
21
|
+
* Typically -- that'll be the remoteJid, but for broadcasts, it'll be the participant
|
|
22
|
+
*/
|
|
23
|
+
export declare const getChatId: ({ remoteJid, participant, fromMe }: proto.IMessageKey) => string;
|
|
24
|
+
type PollContext = {
|
|
25
|
+
/** normalised jid of the person that created the poll */
|
|
26
|
+
pollCreatorJid: string;
|
|
27
|
+
/** ID of the poll creation message */
|
|
28
|
+
pollMsgId: string;
|
|
29
|
+
/** poll creation message enc key */
|
|
30
|
+
pollEncKey: Uint8Array;
|
|
31
|
+
/** jid of the person that voted */
|
|
32
|
+
voterJid: string;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Decrypt a poll vote
|
|
36
|
+
* @param vote encrypted vote
|
|
37
|
+
* @param ctx additional info about the poll required for decryption
|
|
38
|
+
* @returns list of SHA256 options
|
|
39
|
+
*/
|
|
40
|
+
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>;
|
|
42
|
+
export default processMessage;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SignalRepository } from '../Types';
|
|
2
|
+
import { AuthenticationCreds, AuthenticationState, KeyPair, SignalIdentity, SignalKeyStore, SignedKeyPair } from '../Types/Auth';
|
|
3
|
+
import { BinaryNode, JidWithDevice } from '../WABinary';
|
|
4
|
+
import { USyncQueryResultList } from '../WAUSync';
|
|
5
|
+
export declare const createSignalIdentity: (wid: string, accountSignatureKey: Uint8Array) => SignalIdentity;
|
|
6
|
+
export declare const getPreKeys: ({ get }: SignalKeyStore, min: number, limit: number) => Promise<{
|
|
7
|
+
[id: string]: KeyPair;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const generateOrGetPreKeys: (creds: AuthenticationCreds, range: number) => {
|
|
10
|
+
newPreKeys: {
|
|
11
|
+
[id: number]: KeyPair;
|
|
12
|
+
};
|
|
13
|
+
lastPreKeyId: number;
|
|
14
|
+
preKeysRange: readonly [number, number];
|
|
15
|
+
};
|
|
16
|
+
export declare const xmppSignedPreKey: (key: SignedKeyPair) => BinaryNode;
|
|
17
|
+
export declare const xmppPreKey: (pair: KeyPair, id: number) => BinaryNode;
|
|
18
|
+
export declare const parseAndInjectE2ESessions: (node: BinaryNode, repository: SignalRepository) => Promise<void>;
|
|
19
|
+
export declare const extractDeviceJids: (result: USyncQueryResultList[], myJid: string, excludeZeroDevices: boolean) => JidWithDevice[];
|
|
20
|
+
/**
|
|
21
|
+
* get the next N keys for upload or processing
|
|
22
|
+
* @param count number of pre-keys to get or generate
|
|
23
|
+
*/
|
|
24
|
+
export declare const getNextPreKeys: ({ creds, keys }: AuthenticationState, count: number) => Promise<{
|
|
25
|
+
update: Partial<AuthenticationCreds>;
|
|
26
|
+
preKeys: {
|
|
27
|
+
[id: string]: KeyPair;
|
|
28
|
+
};
|
|
29
|
+
}>;
|
|
30
|
+
export declare const getNextPreKeysNode: (state: AuthenticationState, count: number) => Promise<{
|
|
31
|
+
update: Partial<AuthenticationCreds>;
|
|
32
|
+
node: BinaryNode;
|
|
33
|
+
}>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AuthenticationState } from '../Types';
|
|
2
|
+
/**
|
|
3
|
+
* stores the full authentication state in a single folder.
|
|
4
|
+
* Far more efficient than singlefileauthstate
|
|
5
|
+
*
|
|
6
|
+
* Again, I wouldn't endorse this for any production level use other than perhaps a bot.
|
|
7
|
+
* Would recommend writing an auth state for use with a proper SQL or No-SQL DB
|
|
8
|
+
* */
|
|
9
|
+
export declare const useMultiFileAuthState: (folder: string) => Promise<{
|
|
10
|
+
state: AuthenticationState;
|
|
11
|
+
saveCreds: () => Promise<void>;
|
|
12
|
+
}>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { proto } from '../../WAProto';
|
|
2
|
+
import type { AuthenticationCreds, SignalCreds, SocketConfig } from '../Types';
|
|
3
|
+
import { BinaryNode } from '../WABinary';
|
|
4
|
+
export declare const generateLoginNode: (userJid: string, config: SocketConfig) => proto.IClientPayload;
|
|
5
|
+
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
|
+
creds: Partial<AuthenticationCreds>;
|
|
8
|
+
reply: BinaryNode;
|
|
9
|
+
};
|
|
10
|
+
export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => Uint8Array<ArrayBufferLike>;
|