@jkt48connect-corp/baileys 7.3.2 → 7.3.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/README.md +459 -143
- package/WAProto/WAProto.proto +227 -2
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Defaults/index.d.ts +9 -7
- package/lib/Defaults/index.js +6 -4
- package/lib/Socket/Client/index.d.ts +2 -3
- package/lib/Socket/Client/index.js +2 -3
- package/lib/Socket/Client/types.d.ts +17 -0
- package/lib/Socket/Client/types.js +13 -0
- package/lib/Socket/Client/{web-socket-client.d.ts → websocket.d.ts} +1 -1
- package/lib/Socket/Client/{web-socket-client.js → websocket.js} +2 -2
- package/lib/Socket/business.d.ts +8 -3
- package/lib/Socket/chats.d.ts +21 -19
- package/lib/Socket/chats.js +51 -48
- package/lib/Socket/groups.d.ts +28 -26
- package/lib/Socket/groups.js +2 -1
- package/lib/Socket/index.d.ts +6 -3
- package/lib/Socket/messages-recv.d.ts +8 -3
- package/lib/Socket/messages-recv.js +308 -149
- package/lib/Socket/messages-send.d.ts +23 -26
- package/lib/Socket/messages-send.js +193 -166
- package/lib/Socket/newsletter.d.ts +2 -2
- package/lib/Socket/newsletter.js +3 -3
- package/lib/Socket/registration.d.ts +8 -3
- package/lib/Socket/socket.d.ts +8 -6
- package/lib/Socket/socket.js +19 -14
- package/lib/Socket/usync.d.ts +37 -0
- package/lib/Socket/usync.js +70 -0
- package/lib/Store/make-cache-manager-store.d.ts +2 -2
- package/lib/Store/make-ordered-dictionary.d.ts +1 -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/Message.d.ts +324 -328
- package/lib/Types/Socket.d.ts +7 -0
- package/lib/Types/USync.d.ts +25 -0
- package/lib/Types/USync.js +2 -0
- package/lib/Types/index.d.ts +9 -0
- package/lib/Utils/chat-utils.d.ts +4 -4
- package/lib/Utils/chat-utils.js +41 -20
- package/lib/Utils/crypto.d.ts +1 -1
- package/lib/Utils/crypto.js +4 -2
- package/lib/Utils/decode-wa-message.d.ts +17 -0
- package/lib/Utils/decode-wa-message.js +42 -14
- package/lib/Utils/generics.d.ts +4 -10
- package/lib/Utils/generics.js +30 -14
- package/lib/Utils/history.d.ts +6 -2
- package/lib/Utils/history.js +3 -0
- package/lib/Utils/messages.d.ts +0 -1
- package/lib/Utils/messages.js +247 -39
- package/lib/Utils/signal.d.ts +2 -1
- package/lib/Utils/signal.js +11 -19
- package/lib/Utils/use-multi-file-auth-state.js +11 -3
- package/lib/Utils/validate-connection.d.ts +2 -2
- package/lib/Utils/validate-connection.js +1 -1
- package/lib/WABinary/encode.d.ts +1 -1
- package/lib/WABinary/encode.js +16 -10
- 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.d.ts +1 -0
- package/lib/index.js +1 -0
- package/package.json +24 -19
- package/LICENSE +0 -21
- package/lib/index.ts +0 -13
package/lib/Utils/messages.js
CHANGED
@@ -3,8 +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;
|
7
|
-
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
6
|
+
exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.getAggregateVotesInPollMessage = 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;
|
8
7
|
const boom_1 = require("@hapi/boom");
|
9
8
|
const axios_1 = __importDefault(require("axios"));
|
10
9
|
const crypto_1 = require("crypto");
|
@@ -272,8 +271,8 @@ const generateForwardMessageContent = (message, forceForward) => {
|
|
272
271
|
};
|
273
272
|
exports.generateForwardMessageContent = generateForwardMessageContent;
|
274
273
|
const generateWAMessageContent = async (message, options) => {
|
275
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
276
|
-
var
|
274
|
+
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;
|
275
|
+
var _6, _7;
|
277
276
|
let m = {};
|
278
277
|
if ('text' in message) {
|
279
278
|
const extContent = { text: message.text };
|
@@ -321,6 +320,15 @@ const generateWAMessageContent = async (message, options) => {
|
|
321
320
|
}
|
322
321
|
else if ('location' in message) {
|
323
322
|
m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
|
323
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
324
|
+
m.locationMessage.contextInfo = message.contextInfo;
|
325
|
+
}
|
326
|
+
}
|
327
|
+
else if ('liveLocation' in message) {
|
328
|
+
m.liveLocationMessage = Types_1.WAProto.Message.LiveLocationMessage.fromObject(message.liveLocation);
|
329
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
330
|
+
m.liveLocationMessage.contextInfo = message.contextInfo;
|
331
|
+
}
|
324
332
|
}
|
325
333
|
else if ('react' in message) {
|
326
334
|
if (!message.react.senderTimestampMs) {
|
@@ -350,16 +358,26 @@ const generateWAMessageContent = async (message, options) => {
|
|
350
358
|
m.groupInviteMessage.caption = message.groupInvite.text;
|
351
359
|
m.groupInviteMessage.groupJid = message.groupInvite.jid;
|
352
360
|
m.groupInviteMessage.groupName = message.groupInvite.subject;
|
361
|
+
m.groupInviteMessage.jpegThumbnail = message.groupInvite.thumbnail;
|
353
362
|
//TODO: use built-in interface and get disappearing mode info etc.
|
354
363
|
//TODO: cache / use store!?
|
355
364
|
if (options.getProfilePicUrl) {
|
356
|
-
|
365
|
+
let pfpUrl;
|
366
|
+
try {
|
367
|
+
pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
|
368
|
+
}
|
369
|
+
catch (_8) {
|
370
|
+
pfpUrl = null;
|
371
|
+
}
|
357
372
|
if (pfpUrl) {
|
358
373
|
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
359
374
|
if (resp.status === 200) {
|
360
375
|
m.groupInviteMessage.jpegThumbnail = resp.data;
|
361
376
|
}
|
362
377
|
}
|
378
|
+
else {
|
379
|
+
m.groupInviteMessage.jpegThumbnail = null;
|
380
|
+
}
|
363
381
|
}
|
364
382
|
}
|
365
383
|
else if ('pin' in message) {
|
@@ -407,6 +425,19 @@ const generateWAMessageContent = async (message, options) => {
|
|
407
425
|
type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
|
408
426
|
};
|
409
427
|
break;
|
428
|
+
case 'interactive':
|
429
|
+
m.interactiveResponseMessage = {
|
430
|
+
body: {
|
431
|
+
text: message.buttonReply.text,
|
432
|
+
format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1
|
433
|
+
},
|
434
|
+
nativeFlowResponseMessage: {
|
435
|
+
name: message.buttonReply.nativeFlow.name,
|
436
|
+
paramsJson: message.buttonReply.nativeFlow.paramsJson,
|
437
|
+
version: message.buttonReply.nativeFlow.version
|
438
|
+
}
|
439
|
+
};
|
440
|
+
break;
|
410
441
|
}
|
411
442
|
}
|
412
443
|
else if ('product' in message) {
|
@@ -418,6 +449,12 @@ const generateWAMessageContent = async (message, options) => {
|
|
418
449
|
productImage: imageMessage,
|
419
450
|
}
|
420
451
|
});
|
452
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
453
|
+
m.productMessage.contextInfo = message.contextInfo;
|
454
|
+
}
|
455
|
+
if ('mentions' in message && !!message.mentions) {
|
456
|
+
m.productMessage.contextInfo = { mentionedJid: message.mentions };
|
457
|
+
}
|
421
458
|
}
|
422
459
|
else if ('order' in message) {
|
423
460
|
m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
|
@@ -438,8 +475,8 @@ const generateWAMessageContent = async (message, options) => {
|
|
438
475
|
m.listResponseMessage = { ...message.listReply };
|
439
476
|
}
|
440
477
|
else if ('poll' in message) {
|
441
|
-
(
|
442
|
-
(
|
478
|
+
(_6 = message.poll).selectableCount || (_6.selectableCount = 0);
|
479
|
+
(_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
|
443
480
|
if (!Array.isArray(message.poll.values)) {
|
444
481
|
throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
|
445
482
|
}
|
@@ -470,6 +507,32 @@ const generateWAMessageContent = async (message, options) => {
|
|
470
507
|
m.pollCreationMessage = pollCreationMessage;
|
471
508
|
}
|
472
509
|
}
|
510
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
511
|
+
pollCreationMessage.contextInfo = message.contextInfo;
|
512
|
+
}
|
513
|
+
}
|
514
|
+
else if ('pollResult' in message) {
|
515
|
+
if (!Array.isArray(message.pollResult.votes)) {
|
516
|
+
throw new boom_1.Boom('Invalid poll votes result', { statusCode: 400 });
|
517
|
+
}
|
518
|
+
m.messageContextInfo = {
|
519
|
+
// encKey
|
520
|
+
messageSecret: message.pollResult.messageSecret || (0, crypto_1.randomBytes)(32),
|
521
|
+
};
|
522
|
+
const pollResultSnapshotMessage = {
|
523
|
+
name: message.pollResult.name,
|
524
|
+
pollVotes: message.pollResult.votes.map((option) => ({
|
525
|
+
optionName: option[0],
|
526
|
+
optionVoteCount: option[1]
|
527
|
+
})),
|
528
|
+
};
|
529
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
530
|
+
pollResultSnapshotMessage.contextInfo = message.contextInfo;
|
531
|
+
}
|
532
|
+
if ('mentions' in message && !!message.mentions) {
|
533
|
+
pollResultSnapshotMessage.contextInfo = { mentionedJid: message.mentions };
|
534
|
+
}
|
535
|
+
m.pollResultSnapshotMessage = pollResultSnapshotMessage;
|
473
536
|
}
|
474
537
|
else if ('event' in message) {
|
475
538
|
m.messageContextInfo = {
|
@@ -484,6 +547,26 @@ const generateWAMessageContent = async (message, options) => {
|
|
484
547
|
m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
|
485
548
|
m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
|
486
549
|
m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
|
550
|
+
//TODO: use built-in interface and get disappearing mode info etc.
|
551
|
+
//TODO: cache / use store!?
|
552
|
+
if (options.getProfilePicUrl) {
|
553
|
+
let pfpUrl;
|
554
|
+
try {
|
555
|
+
pfpUrl = await options.getProfilePicUrl(message.inviteAdmin.jid, 'preview');
|
556
|
+
}
|
557
|
+
catch (_9) {
|
558
|
+
pfpUrl = null;
|
559
|
+
}
|
560
|
+
if (pfpUrl) {
|
561
|
+
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
562
|
+
if (resp.status === 200) {
|
563
|
+
m.newsletterAdminInviteMessage.jpegThumbnail = resp.data;
|
564
|
+
}
|
565
|
+
}
|
566
|
+
else {
|
567
|
+
m.newsletterAdminInviteMessage.jpegThumbnail = null;
|
568
|
+
}
|
569
|
+
}
|
487
570
|
}
|
488
571
|
else if ('requestPayment' in message) {
|
489
572
|
const sticker = ((_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker) ?
|
@@ -494,7 +577,12 @@ const generateWAMessageContent = async (message, options) => {
|
|
494
577
|
notes = {
|
495
578
|
stickerMessage: {
|
496
579
|
...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
|
497
|
-
contextInfo:
|
580
|
+
contextInfo: {
|
581
|
+
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,
|
582
|
+
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,
|
583
|
+
quotedMessage: (_l = options === null || options === void 0 ? void 0 : options.quoted) === null || _l === void 0 ? void 0 : _l.message,
|
584
|
+
...(_m = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _m === void 0 ? void 0 : _m.contextInfo,
|
585
|
+
}
|
498
586
|
}
|
499
587
|
};
|
500
588
|
}
|
@@ -502,20 +590,22 @@ const generateWAMessageContent = async (message, options) => {
|
|
502
590
|
notes = {
|
503
591
|
extendedTextMessage: {
|
504
592
|
text: message.requestPayment.note,
|
505
|
-
contextInfo:
|
593
|
+
contextInfo: {
|
594
|
+
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,
|
595
|
+
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,
|
596
|
+
quotedMessage: (_s = options === null || options === void 0 ? void 0 : options.quoted) === null || _s === void 0 ? void 0 : _s.message,
|
597
|
+
...(_t = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _t === void 0 ? void 0 : _t.contextInfo,
|
598
|
+
}
|
506
599
|
}
|
507
600
|
};
|
508
601
|
}
|
509
|
-
else {
|
510
|
-
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
511
|
-
}
|
512
602
|
m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
|
513
603
|
expiryTimestamp: message.requestPayment.expiry,
|
514
604
|
amount1000: message.requestPayment.amount,
|
515
605
|
currencyCodeIso4217: message.requestPayment.currency,
|
516
606
|
requestFrom: message.requestPayment.from,
|
517
607
|
noteMessage: { ...notes },
|
518
|
-
background: (
|
608
|
+
background: (_u = message.requestPayment.background) !== null && _u !== void 0 ? _u : null,
|
519
609
|
});
|
520
610
|
}
|
521
611
|
else if ('sharePhoneNumber' in message) {
|
@@ -583,22 +673,33 @@ const generateWAMessageContent = async (message, options) => {
|
|
583
673
|
}
|
584
674
|
};
|
585
675
|
}
|
586
|
-
if ('
|
676
|
+
if ('interactiveButtons' in message && !!message.interactiveButtons) {
|
587
677
|
const interactiveMessage = {
|
588
678
|
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
589
|
-
buttons: message.
|
679
|
+
buttons: message.interactiveButtons,
|
590
680
|
})
|
591
681
|
};
|
592
682
|
if ('text' in message) {
|
593
683
|
body: interactiveMessage.body = {
|
594
684
|
text: message.text
|
595
685
|
};
|
686
|
+
header: interactiveMessage.header = {
|
687
|
+
title: message.title,
|
688
|
+
subtitle: message.subtitle,
|
689
|
+
hasMediaAttachment: (_v = message === null || message === void 0 ? void 0 : message.media) !== null && _v !== void 0 ? _v : false,
|
690
|
+
};
|
596
691
|
}
|
597
692
|
else {
|
598
693
|
if ('caption' in message) {
|
599
694
|
body: interactiveMessage.body = {
|
600
695
|
text: message.caption
|
601
696
|
};
|
697
|
+
header: interactiveMessage.header = {
|
698
|
+
title: message.title,
|
699
|
+
subtitle: message.subtitle,
|
700
|
+
hasMediaAttachment: (_w = message === null || message === void 0 ? void 0 : message.media) !== null && _w !== void 0 ? _w : false,
|
701
|
+
};
|
702
|
+
Object.assign(interactiveMessage.header, m);
|
602
703
|
}
|
603
704
|
}
|
604
705
|
if ('footer' in message && !!message.footer) {
|
@@ -606,13 +707,48 @@ const generateWAMessageContent = async (message, options) => {
|
|
606
707
|
text: message.footer
|
607
708
|
};
|
608
709
|
}
|
609
|
-
if ('
|
710
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
711
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
712
|
+
}
|
713
|
+
if ('mentions' in message && !!message.mentions) {
|
714
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
715
|
+
}
|
716
|
+
m = { interactiveMessage };
|
717
|
+
}
|
718
|
+
if ('shop' in message && !!message.shop) {
|
719
|
+
const interactiveMessage = {
|
720
|
+
shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
|
721
|
+
surface: message.shop,
|
722
|
+
id: message.id
|
723
|
+
})
|
724
|
+
};
|
725
|
+
if ('text' in message) {
|
726
|
+
body: interactiveMessage.body = {
|
727
|
+
text: message.text
|
728
|
+
};
|
610
729
|
header: interactiveMessage.header = {
|
611
730
|
title: message.title,
|
612
731
|
subtitle: message.subtitle,
|
613
|
-
hasMediaAttachment: (
|
732
|
+
hasMediaAttachment: (_x = message === null || message === void 0 ? void 0 : message.media) !== null && _x !== void 0 ? _x : false,
|
733
|
+
};
|
734
|
+
}
|
735
|
+
else {
|
736
|
+
if ('caption' in message) {
|
737
|
+
body: interactiveMessage.body = {
|
738
|
+
text: message.caption
|
739
|
+
};
|
740
|
+
header: interactiveMessage.header = {
|
741
|
+
title: message.title,
|
742
|
+
subtitle: message.subtitle,
|
743
|
+
hasMediaAttachment: (_y = message === null || message === void 0 ? void 0 : message.media) !== null && _y !== void 0 ? _y : false,
|
744
|
+
};
|
745
|
+
Object.assign(interactiveMessage.header, m);
|
746
|
+
}
|
747
|
+
}
|
748
|
+
if ('footer' in message && !!message.footer) {
|
749
|
+
footer: interactiveMessage.footer = {
|
750
|
+
text: message.footer
|
614
751
|
};
|
615
|
-
Object.assign(interactiveMessage.header, m);
|
616
752
|
}
|
617
753
|
if ('contextInfo' in message && !!message.contextInfo) {
|
618
754
|
interactiveMessage.contextInfo = message.contextInfo;
|
@@ -622,23 +758,35 @@ const generateWAMessageContent = async (message, options) => {
|
|
622
758
|
}
|
623
759
|
m = { interactiveMessage };
|
624
760
|
}
|
625
|
-
if ('
|
761
|
+
if ('collection' in message && !!message.shop) {
|
626
762
|
const interactiveMessage = {
|
627
|
-
|
628
|
-
|
629
|
-
id: message.id
|
763
|
+
collectionMessage: Types_1.WAProto.Message.InteractiveMessage.CollectionMessage.fromObject({
|
764
|
+
bizJid: (_z = message === null || message === void 0 ? void 0 : message.collection) === null || _z === void 0 ? void 0 : _z.bizJid,
|
765
|
+
id: (_0 = message === null || message === void 0 ? void 0 : message.collection) === null || _0 === void 0 ? void 0 : _0.id,
|
766
|
+
messageVersion: (_1 = message === null || message === void 0 ? void 0 : message.collection) === null || _1 === void 0 ? void 0 : _1.version
|
630
767
|
})
|
631
768
|
};
|
632
769
|
if ('text' in message) {
|
633
770
|
body: interactiveMessage.body = {
|
634
771
|
text: message.text
|
635
772
|
};
|
773
|
+
header: interactiveMessage.header = {
|
774
|
+
title: message.title,
|
775
|
+
subtitle: message.subtitle,
|
776
|
+
hasMediaAttachment: (_2 = message === null || message === void 0 ? void 0 : message.media) !== null && _2 !== void 0 ? _2 : false,
|
777
|
+
};
|
636
778
|
}
|
637
779
|
else {
|
638
780
|
if ('caption' in message) {
|
639
781
|
body: interactiveMessage.body = {
|
640
782
|
text: message.caption
|
641
783
|
};
|
784
|
+
header: interactiveMessage.header = {
|
785
|
+
title: message.title,
|
786
|
+
subtitle: message.subtitle,
|
787
|
+
hasMediaAttachment: (_3 = message === null || message === void 0 ? void 0 : message.media) !== null && _3 !== void 0 ? _3 : false,
|
788
|
+
};
|
789
|
+
Object.assign(interactiveMessage.header, m);
|
642
790
|
}
|
643
791
|
}
|
644
792
|
if ('footer' in message && !!message.footer) {
|
@@ -646,13 +794,73 @@ const generateWAMessageContent = async (message, options) => {
|
|
646
794
|
text: message.footer
|
647
795
|
};
|
648
796
|
}
|
649
|
-
if ('
|
797
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
798
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
799
|
+
}
|
800
|
+
if ('mentions' in message && !!message.mentions) {
|
801
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
802
|
+
}
|
803
|
+
m = { interactiveMessage };
|
804
|
+
}
|
805
|
+
if ('cards' in message && !!message.cards) {
|
806
|
+
const slides = await Promise.all(message.cards.map(async (slide) => {
|
807
|
+
const { image, video, product, title, caption, footer, buttons } = slide;
|
808
|
+
let header;
|
809
|
+
if (product) {
|
810
|
+
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: product.productImage, ...options }, options);
|
811
|
+
header = {
|
812
|
+
productMesage: Types_1.WAProto.Message.ProductMessage.fromObject({
|
813
|
+
product: {
|
814
|
+
...product,
|
815
|
+
productImage: imageMessage,
|
816
|
+
},
|
817
|
+
...slide
|
818
|
+
})
|
819
|
+
};
|
820
|
+
}
|
821
|
+
else if (image) {
|
822
|
+
header = await (0, exports.prepareWAMessageMedia)({ image: image, ...options }, options);
|
823
|
+
}
|
824
|
+
else if (video) {
|
825
|
+
header = await (0, exports.prepareWAMessageMedia)({ video: video, ...options }, options);
|
826
|
+
}
|
827
|
+
const msg = {
|
828
|
+
header: {
|
829
|
+
title,
|
830
|
+
hasMediaAttachment: true,
|
831
|
+
...header
|
832
|
+
},
|
833
|
+
body: {
|
834
|
+
text: caption
|
835
|
+
},
|
836
|
+
footer: {
|
837
|
+
text: footer
|
838
|
+
},
|
839
|
+
nativeFlowMessage: {
|
840
|
+
buttons,
|
841
|
+
},
|
842
|
+
};
|
843
|
+
return msg;
|
844
|
+
}));
|
845
|
+
const interactiveMessage = {
|
846
|
+
carouselMessage: Types_1.WAProto.Message.InteractiveMessage.CarouselMessage.fromObject({
|
847
|
+
cards: slides
|
848
|
+
})
|
849
|
+
};
|
850
|
+
if ('text' in message) {
|
851
|
+
body: interactiveMessage.body = {
|
852
|
+
text: message.text
|
853
|
+
};
|
650
854
|
header: interactiveMessage.header = {
|
651
855
|
title: message.title,
|
652
856
|
subtitle: message.subtitle,
|
653
|
-
hasMediaAttachment: (
|
857
|
+
hasMediaAttachment: (_4 = message === null || message === void 0 ? void 0 : message.media) !== null && _4 !== void 0 ? _4 : false,
|
858
|
+
};
|
859
|
+
}
|
860
|
+
if ('footer' in message && !!message.footer) {
|
861
|
+
footer: interactiveMessage.footer = {
|
862
|
+
text: message.footer
|
654
863
|
};
|
655
|
-
Object.assign(interactiveMessage.header, m);
|
656
864
|
}
|
657
865
|
if ('contextInfo' in message && !!message.contextInfo) {
|
658
866
|
interactiveMessage.contextInfo = message.contextInfo;
|
@@ -669,7 +877,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
669
877
|
title: message.title,
|
670
878
|
footerText: message.footer,
|
671
879
|
description: message.text,
|
672
|
-
listType:
|
880
|
+
listType: WAProto_1.proto.Message.ListMessage.ListType.SINGLE_SELECT
|
673
881
|
};
|
674
882
|
m = { listMessage };
|
675
883
|
}
|
@@ -688,7 +896,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
688
896
|
if ('lottie' in message && !!message.lottie) {
|
689
897
|
m = { lottieStickerMessage: { message: m } };
|
690
898
|
}
|
691
|
-
if ('mentions' in message && ((
|
899
|
+
if ('mentions' in message && ((_5 = message.mentions) === null || _5 === void 0 ? void 0 : _5.length)) {
|
692
900
|
const [messageType] = Object.keys(m);
|
693
901
|
m[messageType].contextInfo = m[messageType] || {};
|
694
902
|
m[messageType].contextInfo.mentionedJid = message.mentions;
|
@@ -712,17 +920,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
712
920
|
};
|
713
921
|
exports.generateWAMessageContent = generateWAMessageContent;
|
714
922
|
const generateWAMessageFromContent = (jid, message, options) => {
|
715
|
-
|
716
|
-
const viewOnceMessage = message.viewOnceMessage;
|
717
|
-
|
718
|
-
if (viewOnceMessage.message?.interactiveMessage) {
|
719
|
-
message = viewOnceMessage.message;
|
720
|
-
}
|
721
|
-
|
722
|
-
if (viewOnceMessage.message?.buttonsMessage) {
|
723
|
-
message = viewOnceMessage.message;
|
724
|
-
}
|
725
|
-
}
|
923
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
726
924
|
// set timestamp to now
|
727
925
|
// if not specified
|
728
926
|
if (!options.timestamp) {
|
@@ -742,7 +940,16 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
742
940
|
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
743
941
|
delete quotedContent.contextInfo;
|
744
942
|
}
|
745
|
-
|
943
|
+
let requestPayment;
|
944
|
+
if (key === 'requestPaymentMessage') {
|
945
|
+
if (((_a = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _a === void 0 ? void 0 : _a.noteMessage) && ((_c = (_b = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _b === void 0 ? void 0 : _b.noteMessage) === null || _c === void 0 ? void 0 : _c.extendedTextMessage)) {
|
946
|
+
requestPayment = (_e = (_d = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _d === void 0 ? void 0 : _d.noteMessage) === null || _e === void 0 ? void 0 : _e.extendedTextMessage;
|
947
|
+
}
|
948
|
+
else if (((_f = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _f === void 0 ? void 0 : _f.noteMessage) && ((_h = (_g = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _g === void 0 ? void 0 : _g.noteMessage) === null || _h === void 0 ? void 0 : _h.stickerMessage)) {
|
949
|
+
requestPayment = (_k = (_j = innerMessage.requestPaymentMessage) === null || _j === void 0 ? void 0 : _j.noteMessage) === null || _k === void 0 ? void 0 : _k.stickerMessage;
|
950
|
+
}
|
951
|
+
}
|
952
|
+
const contextInfo = (key === 'requestPaymentMessage' ? requestPayment.contextInfo : innerMessage[key].contextInfo) || {};
|
746
953
|
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
747
954
|
contextInfo.stanzaId = quoted.key.id;
|
748
955
|
contextInfo.quotedMessage = quotedMsg;
|
@@ -949,6 +1156,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
949
1156
|
}
|
950
1157
|
return Object.values(voteHashMap);
|
951
1158
|
}
|
1159
|
+
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
952
1160
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
953
1161
|
const aggregateMessageKeysNotFromMe = (keys) => {
|
954
1162
|
const keyMap = {};
|
package/lib/Utils/signal.d.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
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';
|
4
5
|
export declare const createSignalIdentity: (wid: string, accountSignatureKey: Uint8Array) => SignalIdentity;
|
5
6
|
export declare const getPreKeys: ({ get }: SignalKeyStore, min: number, limit: number) => Promise<{
|
6
7
|
[id: string]: KeyPair;
|
@@ -15,7 +16,7 @@ export declare const generateOrGetPreKeys: (creds: AuthenticationCreds, range: n
|
|
15
16
|
export declare const xmppSignedPreKey: (key: SignedKeyPair) => BinaryNode;
|
16
17
|
export declare const xmppPreKey: (pair: KeyPair, id: number) => BinaryNode;
|
17
18
|
export declare const parseAndInjectE2ESessions: (node: BinaryNode, repository: SignalRepository) => Promise<void>;
|
18
|
-
export declare const extractDeviceJids: (result:
|
19
|
+
export declare const extractDeviceJids: (result: USyncQueryResultList[], myJid: string, excludeZeroDevices: boolean) => JidWithDevice[];
|
19
20
|
/**
|
20
21
|
* get the next N keys for upload or processing
|
21
22
|
* @param count number of pre-keys to get or generate
|
package/lib/Utils/signal.js
CHANGED
@@ -85,27 +85,19 @@ const parseAndInjectE2ESessions = async (node, repository) => {
|
|
85
85
|
};
|
86
86
|
exports.parseAndInjectE2ESessions = parseAndInjectE2ESessions;
|
87
87
|
const extractDeviceJids = (result, myJid, excludeZeroDevices) => {
|
88
|
-
var _a;
|
89
88
|
const { user: myUser, device: myDevice } = (0, WABinary_1.jidDecode)(myJid);
|
90
89
|
const extracted = [];
|
91
|
-
for (const
|
92
|
-
const
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
for
|
100
|
-
|
101
|
-
|
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
|
-
}
|
90
|
+
for (const userResult of result) {
|
91
|
+
const { devices, id } = userResult;
|
92
|
+
const { user } = (0, WABinary_1.jidDecode)(id);
|
93
|
+
const deviceList = devices === null || devices === void 0 ? void 0 : devices.deviceList;
|
94
|
+
if (Array.isArray(deviceList)) {
|
95
|
+
for (const { id: device, keyIndex } of deviceList) {
|
96
|
+
if ((!excludeZeroDevices || device !== 0) && // if zero devices are not-excluded, or device is non zero
|
97
|
+
(myUser !== user || myDevice !== device) && // either different user or if me user, not this device
|
98
|
+
(device === 0 || !!keyIndex) // ensure that "key-index" is specified for "non-zero" devices, produces a bad req otherwise
|
99
|
+
) {
|
100
|
+
extracted.push({ user, device });
|
109
101
|
}
|
110
102
|
}
|
111
103
|
}
|
@@ -1,4 +1,7 @@
|
|
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;
|
4
7
|
const promises_1 = require("fs/promises");
|
@@ -6,6 +9,8 @@ const path_1 = require("path");
|
|
6
9
|
const WAProto_1 = require("../../WAProto");
|
7
10
|
const auth_utils_1 = require("./auth-utils");
|
8
11
|
const generics_1 = require("./generics");
|
12
|
+
const async_lock_1 = __importDefault(require("async-lock"));
|
13
|
+
const fileLock = new async_lock_1.default({ maxPending: Infinity });
|
9
14
|
/**
|
10
15
|
* stores the full authentication state in a single folder.
|
11
16
|
* Far more efficient than singlefileauthstate
|
@@ -15,11 +20,13 @@ const generics_1 = require("./generics");
|
|
15
20
|
* */
|
16
21
|
const useMultiFileAuthState = async (folder) => {
|
17
22
|
const writeData = (data, file) => {
|
18
|
-
|
23
|
+
const filePath = (0, path_1.join)(folder, fixFileName(file));
|
24
|
+
return fileLock.acquire(filePath, () => (0, promises_1.writeFile)((0, path_1.join)(filePath), JSON.stringify(data, generics_1.BufferJSON.replacer)));
|
19
25
|
};
|
20
26
|
const readData = async (file) => {
|
21
27
|
try {
|
22
|
-
const
|
28
|
+
const filePath = (0, path_1.join)(folder, fixFileName(file));
|
29
|
+
const data = await fileLock.acquire(filePath, () => (0, promises_1.readFile)(filePath, { encoding: 'utf-8' }));
|
23
30
|
return JSON.parse(data, generics_1.BufferJSON.reviver);
|
24
31
|
}
|
25
32
|
catch (error) {
|
@@ -28,7 +35,8 @@ const useMultiFileAuthState = async (folder) => {
|
|
28
35
|
};
|
29
36
|
const removeData = async (file) => {
|
30
37
|
try {
|
31
|
-
|
38
|
+
const filePath = (0, path_1.join)(folder, fixFileName(file));
|
39
|
+
await fileLock.acquire(filePath, () => (0, promises_1.unlink)(filePath));
|
32
40
|
}
|
33
41
|
catch (_a) {
|
34
42
|
}
|
@@ -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) => Uint8Array;
|
@@ -72,7 +72,7 @@ const generateMobileNode = (config) => {
|
|
72
72
|
appCached: false,
|
73
73
|
dnsMethod: WAProto_1.proto.ClientPayload.DNSSource.DNSResolutionMethod.SYSTEM,
|
74
74
|
},
|
75
|
-
passive: false,
|
75
|
+
passive: false,
|
76
76
|
pushName: 'test',
|
77
77
|
username: Number(`${config.auth.creds.registration.phoneNumberCountryCode}${config.auth.creds.registration.phoneNumberNationalNumber}`),
|
78
78
|
};
|
package/lib/WABinary/encode.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
import type { BinaryNode, BinaryNodeCodingOptions } from './types';
|
2
|
-
export declare const encodeBinaryNode: (
|
2
|
+
export declare const encodeBinaryNode: (node: BinaryNode, opts?: Pick<BinaryNodeCodingOptions, "TAGS" | "TOKEN_MAP">, buffer?: number[]) => Buffer;
|