@jkt48connect-corp/baileys 7.2.7 → 7.2.8
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/LICENSE +1 -1
- package/README.md +838 -94
- package/WAProto/WAProto.proto +969 -88
- package/WAProto/index.d.ts +13199 -1260
- package/WAProto/index.js +124901 -74525
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Defaults/index.d.ts +7 -8
- package/lib/Defaults/index.js +5 -3
- package/lib/Defaults/phonenumber-mcc.json +221 -221
- package/lib/Signal/libsignal.js +18 -9
- package/lib/Socket/Client/abstract-socket-client.d.ts +0 -2
- package/lib/Socket/Client/mobile-socket-client.d.ts +0 -1
- package/lib/Socket/business.d.ts +40 -40
- package/lib/Socket/chats.d.ts +13 -14
- package/lib/Socket/groups.d.ts +20 -21
- package/lib/Socket/groups.js +1 -1
- package/lib/Socket/index.d.ts +49 -49
- package/lib/Socket/messages-recv.d.ts +39 -39
- package/lib/Socket/messages-recv.js +310 -151
- package/lib/Socket/messages-send.d.ts +33 -31
- package/lib/Socket/messages-send.js +269 -36
- package/lib/Socket/newsletter.d.ts +24 -25
- package/lib/Socket/newsletter.js +3 -3
- package/lib/Socket/registration.d.ts +49 -52
- package/lib/Socket/registration.js +7 -7
- package/lib/Socket/socket.d.ts +6 -7
- package/lib/Socket/socket.js +7 -3
- package/lib/Store/make-cache-manager-store.d.ts +1 -0
- package/lib/Store/make-in-memory-store.d.ts +3 -4
- package/lib/Store/make-in-memory-store.js +13 -11
- package/lib/Store/make-ordered-dictionary.d.ts +1 -1
- package/lib/Types/Auth.d.ts +0 -1
- package/lib/Types/Call.d.ts +1 -1
- package/lib/Types/Chat.d.ts +12 -7
- package/lib/Types/Events.d.ts +17 -2
- package/lib/Types/GroupMetadata.d.ts +3 -1
- package/lib/Types/Label.d.ts +11 -0
- package/lib/Types/Label.js +1 -1
- package/lib/Types/LabelAssociation.js +1 -1
- package/lib/Types/Message.d.ts +164 -13
- package/lib/Types/Newsletter.js +3 -3
- package/lib/Types/Socket.d.ts +7 -2
- package/lib/Types/index.d.ts +9 -0
- package/lib/Types/index.js +1 -1
- package/lib/Utils/auth-utils.js +3 -3
- package/lib/Utils/business.d.ts +1 -1
- package/lib/Utils/business.js +2 -2
- package/lib/Utils/chat-utils.d.ts +11 -12
- package/lib/Utils/chat-utils.js +41 -20
- package/lib/Utils/crypto.d.ts +15 -16
- package/lib/Utils/crypto.js +35 -23
- package/lib/Utils/decode-wa-message.d.ts +17 -0
- package/lib/Utils/decode-wa-message.js +43 -15
- package/lib/Utils/generics.d.ts +10 -19
- package/lib/Utils/generics.js +32 -16
- package/lib/Utils/history.d.ts +6 -2
- package/lib/Utils/history.js +3 -0
- package/lib/Utils/index.d.ts +0 -1
- package/lib/Utils/index.js +0 -1
- package/lib/Utils/logger.d.ts +1 -3
- package/lib/Utils/make-mutex.d.ts +2 -2
- package/lib/Utils/messages-media.d.ts +25 -28
- package/lib/Utils/messages-media.js +38 -47
- package/lib/Utils/messages.d.ts +5 -8
- package/lib/Utils/messages.js +430 -12
- package/lib/Utils/noise-handler.d.ts +4 -5
- package/lib/Utils/process-message.js +2 -2
- package/lib/Utils/use-multi-file-auth-state.js +17 -3
- package/lib/Utils/validate-connection.d.ts +2 -2
- package/lib/Utils/validate-connection.js +12 -23
- package/lib/WABinary/decode.d.ts +1 -2
- package/lib/WABinary/decode.js +17 -7
- package/lib/WABinary/encode.d.ts +1 -2
- package/lib/WABinary/encode.js +33 -17
- package/lib/WABinary/generic-utils.d.ts +2 -3
- package/lib/WABinary/generic-utils.js +2 -2
- package/lib/WABinary/jid-utils.d.ts +1 -1
- package/lib/WAM/BinaryInfo.d.ts +2 -11
- package/lib/WAM/encode.d.ts +1 -2
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
- package/lib/WAUSync/Protocols/index.d.ts +4 -0
- package/lib/WAUSync/Protocols/index.js +20 -0
- package/lib/WAUSync/USyncQuery.d.ts +26 -0
- package/lib/WAUSync/USyncQuery.js +79 -0
- package/lib/WAUSync/USyncUser.d.ts +10 -0
- package/lib/WAUSync/USyncUser.js +22 -0
- package/lib/WAUSync/index.d.ts +3 -0
- package/lib/WAUSync/index.js +19 -0
- package/lib/index.js +4 -1
- package/package.json +15 -10
- package/lib/Socket/community.d.ts +0 -219
- package/lib/Socket/community.js +0 -354
- package/lib/Utils/use-single-file-auth-statev2.d.ts +0 -12
- package/lib/Utils/use-single-file-auth-statev2.js +0 -75
- package/lib/index.d.ts +0 -11
package/lib/Utils/messages.js
CHANGED
@@ -3,7 +3,8 @@ 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.
|
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;
|
7
|
+
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
7
8
|
const boom_1 = require("@hapi/boom");
|
8
9
|
const axios_1 = __importDefault(require("axios"));
|
9
10
|
const crypto_1 = require("crypto");
|
@@ -239,8 +240,8 @@ const generateForwardMessageContent = (message, forceForward) => {
|
|
239
240
|
};
|
240
241
|
exports.generateForwardMessageContent = generateForwardMessageContent;
|
241
242
|
const generateWAMessageContent = async (message, options) => {
|
242
|
-
var _a;
|
243
|
-
var
|
243
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
|
244
|
+
var _6, _7;
|
244
245
|
let m = {};
|
245
246
|
if ('text' in message) {
|
246
247
|
const extContent = { text: message.text };
|
@@ -288,6 +289,15 @@ const generateWAMessageContent = async (message, options) => {
|
|
288
289
|
}
|
289
290
|
else if ('location' in message) {
|
290
291
|
m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
|
292
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
293
|
+
m.locationMessage.contextInfo = message.contextInfo;
|
294
|
+
}
|
295
|
+
}
|
296
|
+
else if ('liveLocation' in message) {
|
297
|
+
m.liveLocationMessage = Types_1.WAProto.Message.LiveLocationMessage.fromObject(message.liveLocation);
|
298
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
299
|
+
m.liveLocationMessage.contextInfo = message.contextInfo;
|
300
|
+
}
|
291
301
|
}
|
292
302
|
else if ('react' in message) {
|
293
303
|
if (!message.react.senderTimestampMs) {
|
@@ -310,6 +320,64 @@ const generateWAMessageContent = async (message, options) => {
|
|
310
320
|
message.disappearingMessagesInChat;
|
311
321
|
m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
|
312
322
|
}
|
323
|
+
else if ('groupInvite' in message) {
|
324
|
+
m.groupInviteMessage = {};
|
325
|
+
m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
|
326
|
+
m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
|
327
|
+
m.groupInviteMessage.caption = message.groupInvite.text;
|
328
|
+
m.groupInviteMessage.groupJid = message.groupInvite.jid;
|
329
|
+
m.groupInviteMessage.groupName = message.groupInvite.subject;
|
330
|
+
m.groupInviteMessage.jpegThumbnail = message.groupInvite.thumbnail;
|
331
|
+
//TODO: use built-in interface and get disappearing mode info etc.
|
332
|
+
//TODO: cache / use store!?
|
333
|
+
if (options.getProfilePicUrl) {
|
334
|
+
let pfpUrl;
|
335
|
+
try {
|
336
|
+
pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
|
337
|
+
}
|
338
|
+
catch (_8) {
|
339
|
+
pfpUrl = null;
|
340
|
+
}
|
341
|
+
if (pfpUrl) {
|
342
|
+
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
343
|
+
if (resp.status === 200) {
|
344
|
+
m.groupInviteMessage.jpegThumbnail = resp.data;
|
345
|
+
}
|
346
|
+
}
|
347
|
+
else {
|
348
|
+
m.groupInviteMessage.jpegThumbnail = null;
|
349
|
+
}
|
350
|
+
}
|
351
|
+
}
|
352
|
+
else if ('pin' in message) {
|
353
|
+
m.pinInChatMessage = {};
|
354
|
+
m.messageContextInfo = {};
|
355
|
+
m.pinInChatMessage.key = message.pin;
|
356
|
+
m.pinInChatMessage.type = message.type;
|
357
|
+
m.pinInChatMessage.senderTimestampMs = Date.now();
|
358
|
+
m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
|
359
|
+
}
|
360
|
+
else if ('keep' in message) {
|
361
|
+
m.keepInChatMessage = {};
|
362
|
+
m.keepInChatMessage.key = message.keep;
|
363
|
+
m.keepInChatMessage.keepType = message.type;
|
364
|
+
m.keepInChatMessage.timestampMs = Date.now();
|
365
|
+
}
|
366
|
+
else if ('call' in message) {
|
367
|
+
m = {
|
368
|
+
scheduledCallCreationMessage: {
|
369
|
+
scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
|
370
|
+
callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
|
371
|
+
title: message.call.title
|
372
|
+
}
|
373
|
+
};
|
374
|
+
}
|
375
|
+
else if ('paymentInvite' in message) {
|
376
|
+
m.paymentInviteMessage = {
|
377
|
+
serviceType: message.paymentInvite.type,
|
378
|
+
expiryTimestamp: message.paymentInvite.expiry
|
379
|
+
};
|
380
|
+
}
|
313
381
|
else if ('buttonReply' in message) {
|
314
382
|
switch (message.type) {
|
315
383
|
case 'template':
|
@@ -326,10 +394,23 @@ const generateWAMessageContent = async (message, options) => {
|
|
326
394
|
type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
|
327
395
|
};
|
328
396
|
break;
|
397
|
+
case 'interactive':
|
398
|
+
m.interactiveResponseMessage = {
|
399
|
+
body: {
|
400
|
+
text: message.buttonReply.text,
|
401
|
+
format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1
|
402
|
+
},
|
403
|
+
nativeFlowResponseMessage: {
|
404
|
+
name: message.buttonReply.nativeFlow.name,
|
405
|
+
paramsJson: message.buttonReply.nativeFlow.paramsJson,
|
406
|
+
version: message.buttonReply.nativeFlow.version
|
407
|
+
}
|
408
|
+
};
|
409
|
+
break;
|
329
410
|
}
|
330
411
|
}
|
331
412
|
else if ('product' in message) {
|
332
|
-
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
|
413
|
+
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: (_c = message === null || message === void 0 ? void 0 : message.product) === null || _c === void 0 ? void 0 : _c.productImage }, options);
|
333
414
|
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
|
334
415
|
...message,
|
335
416
|
product: {
|
@@ -337,12 +418,34 @@ const generateWAMessageContent = async (message, options) => {
|
|
337
418
|
productImage: imageMessage,
|
338
419
|
}
|
339
420
|
});
|
421
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
422
|
+
m.productMessage.contextInfo = message.contextInfo;
|
423
|
+
}
|
424
|
+
if ('mentions' in message && !!message.mentions) {
|
425
|
+
m.productMessage.contextInfo = { mentionedJid: message.mentions };
|
426
|
+
}
|
427
|
+
}
|
428
|
+
else if ('order' in message) {
|
429
|
+
m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
|
430
|
+
orderId: message.order.id,
|
431
|
+
thumbnail: message.order.thumbnail,
|
432
|
+
itemCount: message.order.itemCount,
|
433
|
+
status: message.order.status,
|
434
|
+
surface: message.order.surface,
|
435
|
+
orderTitle: message.order.title,
|
436
|
+
message: message.order.text,
|
437
|
+
sellerJid: message.order.seller,
|
438
|
+
token: message.order.token,
|
439
|
+
totalAmount1000: message.order.amount,
|
440
|
+
totalCurrencyCode: message.order.currency
|
441
|
+
});
|
340
442
|
}
|
341
443
|
else if ('listReply' in message) {
|
342
444
|
m.listResponseMessage = { ...message.listReply };
|
343
445
|
}
|
344
446
|
else if ('poll' in message) {
|
345
|
-
(
|
447
|
+
(_6 = message.poll).selectableCount || (_6.selectableCount = 0);
|
448
|
+
(_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
|
346
449
|
if (!Array.isArray(message.poll.values)) {
|
347
450
|
throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
|
348
451
|
}
|
@@ -354,11 +457,105 @@ const generateWAMessageContent = async (message, options) => {
|
|
354
457
|
// encKey
|
355
458
|
messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
|
356
459
|
};
|
357
|
-
|
460
|
+
const pollCreationMessage = {
|
358
461
|
name: message.poll.name,
|
359
462
|
selectableOptionsCount: message.poll.selectableCount,
|
360
463
|
options: message.poll.values.map(optionName => ({ optionName })),
|
361
464
|
};
|
465
|
+
if (message.poll.toAnnouncementGroup) {
|
466
|
+
// poll v2 is for community announcement groups (single select and multiple)
|
467
|
+
m.pollCreationMessageV2 = pollCreationMessage;
|
468
|
+
}
|
469
|
+
else {
|
470
|
+
if (message.poll.selectableCount > 0) {
|
471
|
+
//poll v3 is for single select polls
|
472
|
+
m.pollCreationMessageV3 = pollCreationMessage;
|
473
|
+
}
|
474
|
+
else {
|
475
|
+
// poll v3 for multiple choice polls
|
476
|
+
m.pollCreationMessage = pollCreationMessage;
|
477
|
+
}
|
478
|
+
}
|
479
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
480
|
+
pollCreationMessage.contextInfo = message.contextInfo;
|
481
|
+
}
|
482
|
+
}
|
483
|
+
else if ('pollResult' in message) {
|
484
|
+
if (!Array.isArray(message.pollResult.votes)) {
|
485
|
+
throw new boom_1.Boom('Invalid poll votes result', { statusCode: 400 });
|
486
|
+
}
|
487
|
+
m.messageContextInfo = {
|
488
|
+
// encKey
|
489
|
+
messageSecret: message.pollResult.messageSecret || (0, crypto_1.randomBytes)(32),
|
490
|
+
};
|
491
|
+
const pollResultSnapshotMessage = {
|
492
|
+
name: message.pollResult.name,
|
493
|
+
pollVotes: message.pollResult.votes.map((option) => ({
|
494
|
+
optionName: option[0],
|
495
|
+
optionVoteCount: option[1]
|
496
|
+
})),
|
497
|
+
};
|
498
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
499
|
+
pollResultSnapshotMessage.contextInfo = message.contextInfo;
|
500
|
+
}
|
501
|
+
if ('mentions' in message && !!message.mentions) {
|
502
|
+
pollResultSnapshotMessage.contextInfo = { mentionedJid: message.mentions };
|
503
|
+
}
|
504
|
+
m.pollResultSnapshotMessage = pollResultSnapshotMessage;
|
505
|
+
}
|
506
|
+
else if ('event' in message) {
|
507
|
+
m.messageContextInfo = {
|
508
|
+
messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
|
509
|
+
};
|
510
|
+
m.eventMessage = { ...message.event };
|
511
|
+
}
|
512
|
+
else if ('inviteAdmin' in message) {
|
513
|
+
m.newsletterAdminInviteMessage = {};
|
514
|
+
m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
|
515
|
+
m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
|
516
|
+
m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
|
517
|
+
m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
|
518
|
+
m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
|
519
|
+
}
|
520
|
+
else if ('requestPayment' in message) {
|
521
|
+
const sticker = ((_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker) ?
|
522
|
+
await (0, exports.prepareWAMessageMedia)({ sticker: (_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker, ...options }, options)
|
523
|
+
: null;
|
524
|
+
let notes = {};
|
525
|
+
if ((_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.sticker) {
|
526
|
+
notes = {
|
527
|
+
stickerMessage: {
|
528
|
+
...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
|
529
|
+
contextInfo: {
|
530
|
+
stanzaId: (_h = (_g = options === null || options === void 0 ? void 0 : options.quoted) === null || _g === void 0 ? void 0 : _g.key) === null || _h === void 0 ? void 0 : _h.id,
|
531
|
+
participant: (_k = (_j = options === null || options === void 0 ? void 0 : options.quoted) === null || _j === void 0 ? void 0 : _j.key) === null || _k === void 0 ? void 0 : _k.participant,
|
532
|
+
quotedMessage: (_l = options === null || options === void 0 ? void 0 : options.quoted) === null || _l === void 0 ? void 0 : _l.message,
|
533
|
+
...(_m = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _m === void 0 ? void 0 : _m.contextInfo,
|
534
|
+
}
|
535
|
+
}
|
536
|
+
};
|
537
|
+
}
|
538
|
+
else if (message.requestPayment.note) {
|
539
|
+
notes = {
|
540
|
+
extendedTextMessage: {
|
541
|
+
text: message.requestPayment.note,
|
542
|
+
contextInfo: {
|
543
|
+
stanzaId: (_p = (_o = options === null || options === void 0 ? void 0 : options.quoted) === null || _o === void 0 ? void 0 : _o.key) === null || _p === void 0 ? void 0 : _p.id,
|
544
|
+
participant: (_r = (_q = options === null || options === void 0 ? void 0 : options.quoted) === null || _q === void 0 ? void 0 : _q.key) === null || _r === void 0 ? void 0 : _r.participant,
|
545
|
+
quotedMessage: (_s = options === null || options === void 0 ? void 0 : options.quoted) === null || _s === void 0 ? void 0 : _s.message,
|
546
|
+
...(_t = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _t === void 0 ? void 0 : _t.contextInfo,
|
547
|
+
}
|
548
|
+
}
|
549
|
+
};
|
550
|
+
}
|
551
|
+
m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
|
552
|
+
expiryTimestamp: message.requestPayment.expiry,
|
553
|
+
amount1000: message.requestPayment.amount,
|
554
|
+
currencyCodeIso4217: message.requestPayment.currency,
|
555
|
+
requestFrom: message.requestPayment.from,
|
556
|
+
noteMessage: { ...notes },
|
557
|
+
background: (_u = message.requestPayment.background) !== null && _u !== void 0 ? _u : null,
|
558
|
+
});
|
362
559
|
}
|
363
560
|
else if ('sharePhoneNumber' in message) {
|
364
561
|
m.protocolMessage = {
|
@@ -390,11 +587,21 @@ const generateWAMessageContent = async (message, options) => {
|
|
390
587
|
if ('footer' in message && !!message.footer) {
|
391
588
|
buttonsMessage.footerText = message.footer;
|
392
589
|
}
|
590
|
+
if ('title' in message && !!message.title) {
|
591
|
+
buttonsMessage.text = message.title,
|
592
|
+
buttonsMessage.headerType = ButtonType.TEXT;
|
593
|
+
}
|
594
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
595
|
+
buttonsMessage.contextInfo = message.contextInfo;
|
596
|
+
}
|
597
|
+
if ('mentions' in message && !!message.mentions) {
|
598
|
+
buttonsMessage.contextInfo = { mentionedJid: message.mentions };
|
599
|
+
}
|
393
600
|
m = { buttonsMessage };
|
394
601
|
}
|
395
602
|
else if ('templateButtons' in message && !!message.templateButtons) {
|
396
603
|
const msg = {
|
397
|
-
hydratedButtons: message.templateButtons
|
604
|
+
hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
|
398
605
|
};
|
399
606
|
if ('text' in message) {
|
400
607
|
msg.hydratedContentText = message.text;
|
@@ -415,6 +622,203 @@ const generateWAMessageContent = async (message, options) => {
|
|
415
622
|
}
|
416
623
|
};
|
417
624
|
}
|
625
|
+
if ('interactiveButtons' in message && !!message.interactiveButtons) {
|
626
|
+
const interactiveMessage = {
|
627
|
+
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
628
|
+
buttons: message.interactiveButtons,
|
629
|
+
})
|
630
|
+
};
|
631
|
+
if ('text' in message) {
|
632
|
+
body: interactiveMessage.body = {
|
633
|
+
text: message.text
|
634
|
+
};
|
635
|
+
header: interactiveMessage.header = {
|
636
|
+
title: message.title,
|
637
|
+
subtitle: message.subtitle,
|
638
|
+
hasMediaAttachment: (_v = message === null || message === void 0 ? void 0 : message.media) !== null && _v !== void 0 ? _v : false,
|
639
|
+
};
|
640
|
+
}
|
641
|
+
else {
|
642
|
+
if ('caption' in message) {
|
643
|
+
body: interactiveMessage.body = {
|
644
|
+
text: message.caption
|
645
|
+
};
|
646
|
+
header: interactiveMessage.header = {
|
647
|
+
title: message.title,
|
648
|
+
subtitle: message.subtitle,
|
649
|
+
hasMediaAttachment: (_w = message === null || message === void 0 ? void 0 : message.media) !== null && _w !== void 0 ? _w : false,
|
650
|
+
};
|
651
|
+
Object.assign(interactiveMessage.header, m);
|
652
|
+
}
|
653
|
+
}
|
654
|
+
if ('footer' in message && !!message.footer) {
|
655
|
+
footer: interactiveMessage.footer = {
|
656
|
+
text: message.footer
|
657
|
+
};
|
658
|
+
}
|
659
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
660
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
661
|
+
}
|
662
|
+
if ('mentions' in message && !!message.mentions) {
|
663
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
664
|
+
}
|
665
|
+
m = { interactiveMessage };
|
666
|
+
}
|
667
|
+
if ('shop' in message && !!message.shop) {
|
668
|
+
const interactiveMessage = {
|
669
|
+
shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
|
670
|
+
surface: message.shop,
|
671
|
+
id: message.id
|
672
|
+
})
|
673
|
+
};
|
674
|
+
if ('text' in message) {
|
675
|
+
body: interactiveMessage.body = {
|
676
|
+
text: message.text
|
677
|
+
};
|
678
|
+
header: interactiveMessage.header = {
|
679
|
+
title: message.title,
|
680
|
+
subtitle: message.subtitle,
|
681
|
+
hasMediaAttachment: (_x = message === null || message === void 0 ? void 0 : message.media) !== null && _x !== void 0 ? _x : false,
|
682
|
+
};
|
683
|
+
}
|
684
|
+
else {
|
685
|
+
if ('caption' in message) {
|
686
|
+
body: interactiveMessage.body = {
|
687
|
+
text: message.caption
|
688
|
+
};
|
689
|
+
header: interactiveMessage.header = {
|
690
|
+
title: message.title,
|
691
|
+
subtitle: message.subtitle,
|
692
|
+
hasMediaAttachment: (_y = message === null || message === void 0 ? void 0 : message.media) !== null && _y !== void 0 ? _y : false,
|
693
|
+
};
|
694
|
+
Object.assign(interactiveMessage.header, m);
|
695
|
+
}
|
696
|
+
}
|
697
|
+
if ('footer' in message && !!message.footer) {
|
698
|
+
footer: interactiveMessage.footer = {
|
699
|
+
text: message.footer
|
700
|
+
};
|
701
|
+
}
|
702
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
703
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
704
|
+
}
|
705
|
+
if ('mentions' in message && !!message.mentions) {
|
706
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
707
|
+
}
|
708
|
+
m = { interactiveMessage };
|
709
|
+
}
|
710
|
+
if ('collection' in message && !!message.shop) {
|
711
|
+
const interactiveMessage = {
|
712
|
+
collectionMessage: Types_1.WAProto.Message.InteractiveMessage.CollectionMessage.fromObject({
|
713
|
+
bizJid: (_z = message === null || message === void 0 ? void 0 : message.collection) === null || _z === void 0 ? void 0 : _z.bizJid,
|
714
|
+
id: (_0 = message === null || message === void 0 ? void 0 : message.collection) === null || _0 === void 0 ? void 0 : _0.id,
|
715
|
+
messageVersion: (_1 = message === null || message === void 0 ? void 0 : message.collection) === null || _1 === void 0 ? void 0 : _1.version
|
716
|
+
})
|
717
|
+
};
|
718
|
+
if ('text' in message) {
|
719
|
+
body: interactiveMessage.body = {
|
720
|
+
text: message.text
|
721
|
+
};
|
722
|
+
header: interactiveMessage.header = {
|
723
|
+
title: message.title,
|
724
|
+
subtitle: message.subtitle,
|
725
|
+
hasMediaAttachment: (_2 = message === null || message === void 0 ? void 0 : message.media) !== null && _2 !== void 0 ? _2 : false,
|
726
|
+
};
|
727
|
+
}
|
728
|
+
else {
|
729
|
+
if ('caption' in message) {
|
730
|
+
body: interactiveMessage.body = {
|
731
|
+
text: message.caption
|
732
|
+
};
|
733
|
+
header: interactiveMessage.header = {
|
734
|
+
title: message.title,
|
735
|
+
subtitle: message.subtitle,
|
736
|
+
hasMediaAttachment: (_3 = message === null || message === void 0 ? void 0 : message.media) !== null && _3 !== void 0 ? _3 : false,
|
737
|
+
};
|
738
|
+
Object.assign(interactiveMessage.header, m);
|
739
|
+
}
|
740
|
+
}
|
741
|
+
if ('footer' in message && !!message.footer) {
|
742
|
+
footer: interactiveMessage.footer = {
|
743
|
+
text: message.footer
|
744
|
+
};
|
745
|
+
}
|
746
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
747
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
748
|
+
}
|
749
|
+
if ('mentions' in message && !!message.mentions) {
|
750
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
751
|
+
}
|
752
|
+
m = { interactiveMessage };
|
753
|
+
}
|
754
|
+
if ('cards' in message && !!message.cards) {
|
755
|
+
const slides = await Promise.all(message.cards.map(async (slide) => {
|
756
|
+
const { image, video, product, title, caption, footer, buttons } = slide;
|
757
|
+
let header;
|
758
|
+
if (product) {
|
759
|
+
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: product.productImage, ...options }, options);
|
760
|
+
header = {
|
761
|
+
productMesage: Types_1.WAProto.Message.ProductMessage.fromObject({
|
762
|
+
product: {
|
763
|
+
...product,
|
764
|
+
productImage: imageMessage,
|
765
|
+
},
|
766
|
+
...slide
|
767
|
+
})
|
768
|
+
};
|
769
|
+
}
|
770
|
+
else if (image) {
|
771
|
+
header = await (0, exports.prepareWAMessageMedia)({ image: image, ...options }, options);
|
772
|
+
}
|
773
|
+
else if (video) {
|
774
|
+
header = await (0, exports.prepareWAMessageMedia)({ video: video, ...options }, options);
|
775
|
+
}
|
776
|
+
const msg = {
|
777
|
+
header: Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
|
778
|
+
title,
|
779
|
+
hasMediaAttachment: true,
|
780
|
+
...header
|
781
|
+
}),
|
782
|
+
body: Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
|
783
|
+
text: caption
|
784
|
+
}),
|
785
|
+
footer: Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
|
786
|
+
text: footer
|
787
|
+
}),
|
788
|
+
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
789
|
+
buttons,
|
790
|
+
})
|
791
|
+
};
|
792
|
+
return msg;
|
793
|
+
}));
|
794
|
+
const interactiveMessage = {
|
795
|
+
carouselMessage: Types_1.WAProto.Message.InteractiveMessage.CarouselMessage.fromObject({
|
796
|
+
cards: slides
|
797
|
+
})
|
798
|
+
};
|
799
|
+
if ('text' in message) {
|
800
|
+
body: interactiveMessage.body = {
|
801
|
+
text: message.text
|
802
|
+
};
|
803
|
+
header: interactiveMessage.header = {
|
804
|
+
title: message.title,
|
805
|
+
subtitle: message.subtitle,
|
806
|
+
hasMediaAttachment: (_4 = message === null || message === void 0 ? void 0 : message.media) !== null && _4 !== void 0 ? _4 : false,
|
807
|
+
};
|
808
|
+
}
|
809
|
+
if ('footer' in message && !!message.footer) {
|
810
|
+
footer: interactiveMessage.footer = {
|
811
|
+
text: message.footer
|
812
|
+
};
|
813
|
+
}
|
814
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
815
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
816
|
+
}
|
817
|
+
if ('mentions' in message && !!message.mentions) {
|
818
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
819
|
+
}
|
820
|
+
m = { interactiveMessage };
|
821
|
+
}
|
418
822
|
if ('sections' in message && !!message.sections) {
|
419
823
|
const listMessage = {
|
420
824
|
sections: message.sections,
|
@@ -429,7 +833,19 @@ const generateWAMessageContent = async (message, options) => {
|
|
429
833
|
if ('viewOnce' in message && !!message.viewOnce) {
|
430
834
|
m = { viewOnceMessage: { message: m } };
|
431
835
|
}
|
432
|
-
if ('
|
836
|
+
if ('viewOnceV2' in message && !!message.viewOnceV2) {
|
837
|
+
m = { viewOnceMessageV2: { message: m } };
|
838
|
+
}
|
839
|
+
if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
|
840
|
+
m = { viewOnceMessageV2Extension: { message: m } };
|
841
|
+
}
|
842
|
+
if ('ephemeral' in message && !!message.ephemeral) {
|
843
|
+
m = { ephemeralMessage: { message: m } };
|
844
|
+
}
|
845
|
+
if ('lottie' in message && !!message.lottie) {
|
846
|
+
m = { lottieStickerMessage: { message: m } };
|
847
|
+
}
|
848
|
+
if ('mentions' in message && ((_5 = message.mentions) === null || _5 === void 0 ? void 0 : _5.length)) {
|
433
849
|
const [messageType] = Object.keys(m);
|
434
850
|
m[messageType].contextInfo = m[messageType] || {};
|
435
851
|
m[messageType].contextInfo.mentionedJid = message.mentions;
|
@@ -453,6 +869,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
453
869
|
};
|
454
870
|
exports.generateWAMessageContent = generateWAMessageContent;
|
455
871
|
const generateWAMessageFromContent = (jid, message, options) => {
|
872
|
+
var _a, _b, _c, _d;
|
456
873
|
// set timestamp to now
|
457
874
|
// if not specified
|
458
875
|
if (!options.timestamp) {
|
@@ -462,7 +879,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
462
879
|
const key = (0, exports.getContentType)(innerMessage);
|
463
880
|
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
464
881
|
const { quoted, userJid } = options;
|
465
|
-
if (quoted) {
|
882
|
+
if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
|
466
883
|
const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
|
467
884
|
let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
|
468
885
|
const msgType = (0, exports.getContentType)(quotedMsg);
|
@@ -472,7 +889,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
472
889
|
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
473
890
|
delete quotedContent.contextInfo;
|
474
891
|
}
|
475
|
-
const contextInfo = innerMessage[key].contextInfo || {};
|
892
|
+
const contextInfo = (key === 'requestPaymentMessage' ? (((_b = (_a = innerMessage.requestPaymentMessage) === null || _a === void 0 ? void 0 : _a.noteMessage) === null || _b === void 0 ? void 0 : _b.extendedTextMessage) || ((_d = (_c = innerMessage.requestPaymentMessage) === null || _c === void 0 ? void 0 : _c.noteMessage) === null || _d === void 0 ? void 0 : _d.stickerMessage)).contextInfo : innerMessage[key].contextInfo) || {};
|
476
893
|
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
477
894
|
contextInfo.stanzaId = quoted.key.id;
|
478
895
|
contextInfo.quotedMessage = quotedMsg;
|
@@ -489,7 +906,9 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
489
906
|
// and it's not a protocol message -- delete, toggle disappear message
|
490
907
|
key !== 'protocolMessage' &&
|
491
908
|
// already not converted to disappearing message
|
492
|
-
key !== 'ephemeralMessage'
|
909
|
+
key !== 'ephemeralMessage' &&
|
910
|
+
// newsletter not accept disappearing messages
|
911
|
+
!(0, WABinary_1.isJidNewsLetter)(jid)) {
|
493
912
|
innerMessage[key].contextInfo = {
|
494
913
|
...(innerMessage[key].contextInfo || {}),
|
495
914
|
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
|
@@ -677,7 +1096,6 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
677
1096
|
}
|
678
1097
|
return Object.values(voteHashMap);
|
679
1098
|
}
|
680
|
-
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
681
1099
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
682
1100
|
const aggregateMessageKeysNotFromMe = (keys) => {
|
683
1101
|
const keyMap = {};
|
@@ -1,4 +1,3 @@
|
|
1
|
-
/// <reference types="node" />
|
2
1
|
import { Logger } from 'pino';
|
3
2
|
import { proto } from '../../WAProto';
|
4
3
|
import { KeyPair } from '../Types';
|
@@ -10,12 +9,12 @@ export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public
|
|
10
9
|
logger: Logger;
|
11
10
|
routingInfo?: Buffer | undefined;
|
12
11
|
}) => {
|
13
|
-
encrypt: (plaintext: Uint8Array) =>
|
14
|
-
decrypt: (ciphertext: Uint8Array) =>
|
12
|
+
encrypt: (plaintext: Uint8Array) => any;
|
13
|
+
decrypt: (ciphertext: Uint8Array) => any;
|
15
14
|
authenticate: (data: Uint8Array) => void;
|
16
15
|
mixIntoKey: (data: Uint8Array) => void;
|
17
16
|
finishInit: () => void;
|
18
|
-
processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) =>
|
19
|
-
encodeFrame: (data: Buffer | Uint8Array) =>
|
17
|
+
processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => any;
|
18
|
+
encodeFrame: (data: Buffer | Uint8Array) => any;
|
20
19
|
decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => void;
|
21
20
|
};
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.getChatId = exports.shouldIncrementChatUnread = exports.isRealMessage = exports.cleanMessage = void 0;
|
4
|
+
exports.decryptPollVote = decryptPollVote;
|
4
5
|
const WAProto_1 = require("../../WAProto");
|
5
6
|
const Types_1 = require("../Types");
|
6
7
|
const messages_1 = require("../Utils/messages");
|
@@ -101,7 +102,6 @@ function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pol
|
|
101
102
|
return Buffer.from(txt);
|
102
103
|
}
|
103
104
|
}
|
104
|
-
exports.decryptPollVote = decryptPollVote;
|
105
105
|
const processMessage = async (message, { shouldProcessHistoryMsg, ev, creds, keyStore, logger, options, getMessage }) => {
|
106
106
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
107
107
|
const meId = creds.me.id;
|
@@ -1,11 +1,21 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
6
|
exports.useMultiFileAuthState = void 0;
|
7
|
+
const async_lock_1 = __importDefault(require("async-lock"));
|
4
8
|
const promises_1 = require("fs/promises");
|
5
9
|
const path_1 = require("path");
|
6
10
|
const WAProto_1 = require("../../WAProto");
|
7
11
|
const auth_utils_1 = require("./auth-utils");
|
8
12
|
const generics_1 = require("./generics");
|
13
|
+
// We need to lock files due to the fact that we are using async functions to read and write files
|
14
|
+
// https://github.com/WhiskeySockets/Baileys/issues/794
|
15
|
+
// https://github.com/nodejs/node/issues/26338
|
16
|
+
// Default pending is 1000, set it to infinity
|
17
|
+
// https://github.com/rogierschouten/async-lock/issues/63
|
18
|
+
const fileLock = new async_lock_1.default({ maxPending: Infinity });
|
9
19
|
/**
|
10
20
|
* stores the full authentication state in a single folder.
|
11
21
|
* Far more efficient than singlefileauthstate
|
@@ -14,12 +24,15 @@ const generics_1 = require("./generics");
|
|
14
24
|
* Would recommend writing an auth state for use with a proper SQL or No-SQL DB
|
15
25
|
* */
|
16
26
|
const useMultiFileAuthState = async (folder) => {
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
17
28
|
const writeData = (data, file) => {
|
18
|
-
|
29
|
+
const filePath = (0, path_1.join)(folder, fixFileName(file));
|
30
|
+
return fileLock.acquire(filePath, () => (0, promises_1.writeFile)((0, path_1.join)(filePath), JSON.stringify(data, generics_1.BufferJSON.replacer)));
|
19
31
|
};
|
20
32
|
const readData = async (file) => {
|
21
33
|
try {
|
22
|
-
const
|
34
|
+
const filePath = (0, path_1.join)(folder, fixFileName(file));
|
35
|
+
const data = await fileLock.acquire(filePath, () => (0, promises_1.readFile)(filePath, { encoding: 'utf-8' }));
|
23
36
|
return JSON.parse(data, generics_1.BufferJSON.reviver);
|
24
37
|
}
|
25
38
|
catch (error) {
|
@@ -28,7 +41,8 @@ const useMultiFileAuthState = async (folder) => {
|
|
28
41
|
};
|
29
42
|
const removeData = async (file) => {
|
30
43
|
try {
|
31
|
-
|
44
|
+
const filePath = (0, path_1.join)(folder, fixFileName(file));
|
45
|
+
await fileLock.acquire(filePath, () => (0, promises_1.unlink)(filePath));
|
32
46
|
}
|
33
47
|
catch (_a) {
|
34
48
|
}
|
@@ -4,8 +4,8 @@ import { BinaryNode } from '../WABinary';
|
|
4
4
|
export declare const generateMobileNode: (config: SocketConfig) => proto.IClientPayload;
|
5
5
|
export declare const generateLoginNode: (userJid: string, config: SocketConfig) => proto.IClientPayload;
|
6
6
|
export declare const generateRegistrationNode: ({ registrationId, signedPreKey, signedIdentityKey }: SignalCreds, config: SocketConfig) => proto.ClientPayload;
|
7
|
-
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">) => {
|
8
8
|
creds: Partial<AuthenticationCreds>;
|
9
9
|
reply: BinaryNode;
|
10
10
|
};
|
11
|
-
export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) =>
|
11
|
+
export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => any;
|