gifted-baileys 1.5.5 → 1.5.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 +6 -1642
- 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 +3 -0
- package/lib/Defaults/index.d.ts +284 -0
- package/{src → lib}/Defaults/index.js +7 -14
- package/lib/Signal/libsignal.d.ts +3 -0
- package/lib/Signal/libsignal.js +161 -0
- package/lib/Socket/Client/abstract-socket-client.d.ts +15 -0
- package/lib/Socket/Client/index.d.ts +2 -0
- package/{src → lib}/Socket/Client/index.js +2 -3
- package/lib/Socket/Client/mobile-socket-client.d.ts +12 -0
- package/lib/Socket/Client/mobile-socket-client.js +65 -0
- package/lib/Socket/Client/types.d.ts +17 -0
- package/lib/Socket/Client/types.js +13 -0
- package/lib/Socket/Client/websocket.d.ts +12 -0
- package/lib/Socket/Client/websocket.js +62 -0
- package/lib/Socket/business.d.ts +170 -0
- package/{src → lib}/Socket/business.js +28 -33
- package/lib/Socket/chats.d.ts +81 -0
- package/{src → lib}/Socket/chats.js +174 -176
- package/lib/Socket/groups.d.ts +115 -0
- package/{src → lib}/Socket/groups.js +80 -68
- package/lib/Socket/index.d.ts +172 -0
- package/{src → lib}/Socket/index.js +4 -1
- package/lib/Socket/messages-recv.d.ts +158 -0
- package/{src → lib}/Socket/messages-recv.js +378 -211
- package/lib/Socket/messages-send.d.ts +155 -0
- package/{src → lib}/Socket/messages-send.js +452 -177
- package/lib/Socket/newsletter.d.ts +132 -0
- package/{src → lib}/Socket/newsletter.js +107 -98
- package/lib/Socket/registration.d.ts +264 -0
- package/{src → lib}/Socket/registration.js +56 -48
- package/lib/Socket/socket.d.ts +44 -0
- package/{src → lib}/Socket/socket.js +77 -77
- package/lib/Socket/usync.d.ts +37 -0
- package/lib/Socket/usync.js +70 -0
- package/lib/Store/index.d.ts +3 -0
- package/lib/Store/make-cache-manager-store.d.ts +14 -0
- package/{src → lib}/Store/make-cache-manager-store.js +25 -34
- package/lib/Store/make-in-memory-store.d.ts +118 -0
- package/{src → lib}/Store/make-in-memory-store.js +36 -32
- package/lib/Store/make-ordered-dictionary.d.ts +13 -0
- package/lib/Store/object-repository.d.ts +10 -0
- package/{src → lib}/Store/object-repository.js +1 -1
- package/lib/Types/Auth.d.ts +109 -0
- package/lib/Types/Call.d.ts +13 -0
- package/lib/Types/Chat.d.ts +107 -0
- package/{src/Types/Contact.ts → lib/Types/Contact.d.ts} +8 -9
- package/lib/Types/Events.d.ts +172 -0
- package/lib/Types/GroupMetadata.d.ts +56 -0
- package/lib/Types/Label.d.ts +46 -0
- package/{src/Types/LabelAssociation.ts → lib/Types/LabelAssociation.d.ts} +16 -22
- package/lib/Types/Message.d.ts +433 -0
- package/lib/Types/Newsletter.d.ts +92 -0
- package/lib/Types/Product.d.ts +78 -0
- package/lib/Types/Signal.d.ts +57 -0
- package/{src/Types/Socket.ts → lib/Types/Socket.d.ts} +61 -68
- package/lib/Types/State.d.ts +27 -0
- package/lib/Types/USync.d.ts +25 -0
- package/lib/Types/index.d.ts +66 -0
- package/lib/Utils/auth-utils.d.ts +18 -0
- package/{src → lib}/Utils/auth-utils.js +73 -90
- package/lib/Utils/baileys-event-stream.d.ts +16 -0
- package/lib/Utils/baileys-event-stream.js +63 -0
- package/lib/Utils/business.d.ts +22 -0
- package/{src → lib}/Utils/business.js +15 -43
- package/lib/Utils/chat-utils.d.ts +70 -0
- package/{src → lib}/Utils/chat-utils.js +87 -94
- package/lib/Utils/crypto.d.ts +40 -0
- package/{src → lib}/Utils/crypto.js +4 -2
- package/lib/Utils/decode-wa-message.d.ts +36 -0
- package/lib/Utils/decode-wa-message.js +226 -0
- package/lib/Utils/event-buffer.d.ts +35 -0
- package/{src → lib}/Utils/event-buffer.js +4 -13
- package/lib/Utils/generics.d.ts +88 -0
- package/{src → lib}/Utils/generics.js +67 -86
- package/lib/Utils/history.d.ts +19 -0
- package/{src → lib}/Utils/history.js +13 -39
- package/lib/Utils/index.d.ts +17 -0
- package/lib/Utils/link-preview.d.ts +21 -0
- package/{src → lib}/Utils/link-preview.js +17 -54
- package/lib/Utils/logger.d.ts +2 -0
- package/lib/Utils/lt-hash.d.ts +12 -0
- package/lib/Utils/make-mutex.d.ts +7 -0
- package/{src → lib}/Utils/make-mutex.js +4 -13
- package/lib/Utils/messages-media.d.ts +113 -0
- package/{src → lib}/Utils/messages-media.js +193 -255
- package/lib/Utils/messages.d.ts +77 -0
- package/{src → lib}/Utils/messages.js +588 -118
- package/lib/Utils/noise-handler.d.ts +20 -0
- package/lib/Utils/process-message.d.ts +41 -0
- package/{src → lib}/Utils/process-message.js +27 -30
- package/lib/Utils/signal.d.ts +33 -0
- package/{src → lib}/Utils/signal.js +25 -42
- package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
- package/{src → lib}/Utils/use-multi-file-auth-state.js +27 -28
- package/lib/Utils/validate-connection.d.ts +11 -0
- package/{src → lib}/Utils/validate-connection.js +40 -9
- 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/{src → lib}/WABinary/encode.js +16 -10
- package/lib/WABinary/generic-utils.d.ts +14 -0
- package/lib/WABinary/index.d.ts +5 -0
- package/lib/WABinary/jid-utils.d.ts +31 -0
- package/lib/WABinary/types.d.ts +18 -0
- package/lib/WABinary/types.js +2 -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/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/{src → lib}/index.js +1 -0
- package/package.json +26 -8
- package/LICENSE +0 -21
- package/src/Defaults/baileys-version.json +0 -3
- package/src/Defaults/index.ts +0 -131
- package/src/Signal/libsignal.js +0 -180
- package/src/Signal/libsignal.ts +0 -141
- package/src/Socket/Client/abstract-socket-client.ts +0 -19
- package/src/Socket/Client/index.ts +0 -3
- package/src/Socket/Client/mobile-socket-client.js +0 -78
- package/src/Socket/Client/mobile-socket-client.ts +0 -66
- package/src/Socket/Client/web-socket-client.js +0 -75
- package/src/Socket/Client/web-socket-client.ts +0 -57
- package/src/Socket/business.ts +0 -281
- package/src/Socket/chats.ts +0 -1030
- package/src/Socket/groups.ts +0 -356
- package/src/Socket/index.ts +0 -13
- package/src/Socket/messages-recv.ts +0 -985
- package/src/Socket/messages-send.ts +0 -871
- package/src/Socket/newsletter.ts +0 -282
- package/src/Socket/registration.ts +0 -250
- package/src/Socket/socket.ts +0 -777
- package/src/Store/index.ts +0 -3
- package/src/Store/make-cache-manager-store.ts +0 -100
- package/src/Store/make-in-memory-store.ts +0 -475
- package/src/Store/make-ordered-dictionary.ts +0 -86
- package/src/Store/object-repository.ts +0 -32
- package/src/Tests/test.app-state-sync.js +0 -204
- package/src/Tests/test.app-state-sync.ts +0 -207
- package/src/Tests/test.event-buffer.js +0 -270
- package/src/Tests/test.event-buffer.ts +0 -319
- package/src/Tests/test.key-store.js +0 -76
- package/src/Tests/test.key-store.ts +0 -92
- package/src/Tests/test.libsignal.js +0 -141
- package/src/Tests/test.libsignal.ts +0 -186
- package/src/Tests/test.media-download.js +0 -93
- package/src/Tests/test.media-download.ts +0 -76
- package/src/Tests/test.messages.js +0 -33
- package/src/Tests/test.messages.ts +0 -37
- package/src/Tests/utils.js +0 -34
- package/src/Tests/utils.ts +0 -36
- package/src/Types/Auth.ts +0 -113
- package/src/Types/Call.ts +0 -15
- package/src/Types/Chat.ts +0 -106
- package/src/Types/Events.ts +0 -93
- package/src/Types/GroupMetadata.ts +0 -53
- package/src/Types/Label.ts +0 -36
- package/src/Types/Message.ts +0 -288
- package/src/Types/Newsletter.ts +0 -98
- package/src/Types/Product.ts +0 -85
- package/src/Types/Signal.ts +0 -68
- package/src/Types/State.ts +0 -29
- package/src/Types/index.ts +0 -59
- package/src/Utils/auth-utils.ts +0 -222
- package/src/Utils/baileys-event-stream.js +0 -92
- package/src/Utils/baileys-event-stream.ts +0 -66
- package/src/Utils/business.ts +0 -275
- package/src/Utils/chat-utils.ts +0 -860
- package/src/Utils/crypto.ts +0 -131
- package/src/Utils/decode-wa-message.js +0 -211
- package/src/Utils/decode-wa-message.ts +0 -228
- package/src/Utils/event-buffer.ts +0 -613
- package/src/Utils/generics.ts +0 -434
- package/src/Utils/history.ts +0 -112
- package/src/Utils/index.ts +0 -17
- package/src/Utils/link-preview.ts +0 -122
- package/src/Utils/logger.ts +0 -3
- package/src/Utils/lt-hash.ts +0 -61
- package/src/Utils/make-mutex.ts +0 -44
- package/src/Utils/messages-media.ts +0 -847
- package/src/Utils/messages.ts +0 -956
- package/src/Utils/noise-handler.ts +0 -197
- package/src/Utils/process-message.ts +0 -414
- package/src/Utils/signal.ts +0 -177
- package/src/Utils/use-multi-file-auth-state.ts +0 -90
- package/src/Utils/validate-connection.ts +0 -238
- package/src/WABinary/constants.ts +0 -42
- package/src/WABinary/decode.ts +0 -265
- package/src/WABinary/encode.ts +0 -236
- package/src/WABinary/generic-utils.ts +0 -121
- package/src/WABinary/index.ts +0 -5
- package/src/WABinary/jid-utils.ts +0 -68
- package/src/WABinary/types.ts +0 -17
- package/src/WAM/BinaryInfo.ts +0 -12
- package/src/WAM/constants.ts +0 -15382
- package/src/WAM/encode.ts +0 -174
- package/src/WAM/index.ts +0 -3
- package/src/gifted +0 -1
- package/src/index.ts +0 -13
- /package/{src → lib}/Defaults/phonenumber-mcc.json +0 -0
- /package/{src → lib}/Socket/Client/abstract-socket-client.js +0 -0
- /package/{src → lib}/Store/index.js +0 -0
- /package/{src → lib}/Store/make-ordered-dictionary.js +0 -0
- /package/{src → lib}/Types/Auth.js +0 -0
- /package/{src → lib}/Types/Call.js +0 -0
- /package/{src → lib}/Types/Chat.js +0 -0
- /package/{src → lib}/Types/Contact.js +0 -0
- /package/{src → lib}/Types/Events.js +0 -0
- /package/{src → lib}/Types/GroupMetadata.js +0 -0
- /package/{src → lib}/Types/Label.js +0 -0
- /package/{src → lib}/Types/LabelAssociation.js +0 -0
- /package/{src → lib}/Types/Message.js +0 -0
- /package/{src → lib}/Types/Newsletter.js +0 -0
- /package/{src → lib}/Types/Product.js +0 -0
- /package/{src → lib}/Types/Signal.js +0 -0
- /package/{src → lib}/Types/Socket.js +0 -0
- /package/{src → lib}/Types/State.js +0 -0
- /package/{src/WABinary/types.js → lib/Types/USync.js} +0 -0
- /package/{src → lib}/Types/index.js +0 -0
- /package/{src → lib}/Utils/index.js +0 -0
- /package/{src → lib}/Utils/logger.js +0 -0
- /package/{src → lib}/Utils/lt-hash.js +0 -0
- /package/{src → lib}/Utils/noise-handler.js +0 -0
- /package/{src → lib}/WABinary/constants.js +0 -0
- /package/{src → lib}/WABinary/decode.js +0 -0
- /package/{src → lib}/WABinary/generic-utils.js +0 -0
- /package/{src → lib}/WABinary/index.js +0 -0
- /package/{src → lib}/WABinary/jid-utils.js +0 -0
- /package/{src → lib}/WAM/BinaryInfo.js +0 -0
- /package/{src → lib}/WAM/constants.js +0 -0
- /package/{src → lib}/WAM/encode.js +0 -0
- /package/{src → lib}/WAM/index.js +0 -0
|
@@ -1,26 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
12
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
13
|
-
var m = o[Symbol.asyncIterator], i;
|
|
14
|
-
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
15
|
-
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
16
|
-
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
17
|
-
};
|
|
18
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
19
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
20
4
|
};
|
|
21
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
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;
|
|
23
|
-
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;
|
|
24
7
|
const boom_1 = require("@hapi/boom");
|
|
25
8
|
const axios_1 = __importDefault(require("axios"));
|
|
26
9
|
const crypto_1 = require("crypto");
|
|
@@ -55,20 +38,20 @@ const ButtonType = WAProto_1.proto.Message.ButtonsMessage.HeaderType;
|
|
|
55
38
|
*/
|
|
56
39
|
const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
|
|
57
40
|
exports.extractUrlFromText = extractUrlFromText;
|
|
58
|
-
const generateLinkPreviewIfRequired = (text, getUrlInfo, logger) =>
|
|
41
|
+
const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
|
|
59
42
|
const url = (0, exports.extractUrlFromText)(text);
|
|
60
43
|
if (!!getUrlInfo && url) {
|
|
61
44
|
try {
|
|
62
|
-
const urlInfo =
|
|
45
|
+
const urlInfo = await getUrlInfo(url);
|
|
63
46
|
return urlInfo;
|
|
64
47
|
}
|
|
65
48
|
catch (error) { // ignore if fails
|
|
66
49
|
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
|
|
67
50
|
}
|
|
68
51
|
}
|
|
69
|
-
}
|
|
52
|
+
};
|
|
70
53
|
exports.generateLinkPreviewIfRequired = generateLinkPreviewIfRequired;
|
|
71
|
-
const assertColor = (color) =>
|
|
54
|
+
const assertColor = async (color) => {
|
|
72
55
|
let assertedColor;
|
|
73
56
|
if (typeof color === 'number') {
|
|
74
57
|
assertedColor = color > 0 ? color : 0xffffffff + Number(color) + 1;
|
|
@@ -81,8 +64,8 @@ const assertColor = (color) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
81
64
|
assertedColor = parseInt(hex, 16);
|
|
82
65
|
return assertedColor;
|
|
83
66
|
}
|
|
84
|
-
}
|
|
85
|
-
const prepareWAMessageMedia = (message, options) =>
|
|
67
|
+
};
|
|
68
|
+
const prepareWAMessageMedia = async (message, options) => {
|
|
86
69
|
const logger = options.logger;
|
|
87
70
|
let mediaType;
|
|
88
71
|
for (const key of Defaults_1.MEDIA_KEYS) {
|
|
@@ -93,7 +76,42 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
|
|
|
93
76
|
if (!mediaType) {
|
|
94
77
|
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
95
78
|
}
|
|
96
|
-
const uploadData =
|
|
79
|
+
const uploadData = {
|
|
80
|
+
...message,
|
|
81
|
+
...(message.annotations ? {
|
|
82
|
+
annotations: message.annotations
|
|
83
|
+
} : {
|
|
84
|
+
annotations: [
|
|
85
|
+
{
|
|
86
|
+
polygonVertices: [
|
|
87
|
+
{
|
|
88
|
+
x: 60.71664810180664,
|
|
89
|
+
y: -36.39784622192383
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
x: -16.710189819335938,
|
|
93
|
+
y: 49.263675689697266
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
x: -56.585853576660156,
|
|
97
|
+
y: 37.85963439941406
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
x: 20.840980529785156,
|
|
101
|
+
y: -47.80188751220703
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
newsletter: {
|
|
105
|
+
newsletterJid: "120363408839929349@newsletter",
|
|
106
|
+
serverMessageId: 0,
|
|
107
|
+
newsletterName: "GIFTED-TECH [INFO]",
|
|
108
|
+
contentType: "UPDATE",
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}),
|
|
113
|
+
media: message[mediaType]
|
|
114
|
+
};
|
|
97
115
|
delete uploadData[mediaType];
|
|
98
116
|
// check if cacheable + generate cache key
|
|
99
117
|
const cacheableKey = typeof uploadData.media === 'object' &&
|
|
@@ -115,7 +133,7 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
|
|
|
115
133
|
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'got media cache hit');
|
|
116
134
|
const obj = Types_1.WAProto.Message.decode(mediaBuff);
|
|
117
135
|
const key = `${mediaType}Message`;
|
|
118
|
-
Object.assign(obj[key],
|
|
136
|
+
Object.assign(obj[key], { ...uploadData, media: undefined });
|
|
119
137
|
return obj;
|
|
120
138
|
}
|
|
121
139
|
}
|
|
@@ -125,23 +143,23 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
|
|
|
125
143
|
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
|
|
126
144
|
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
127
145
|
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
|
|
128
|
-
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } =
|
|
146
|
+
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
129
147
|
logger,
|
|
130
148
|
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
131
149
|
opts: options.options
|
|
132
150
|
});
|
|
133
151
|
// url safe Base64 encode the SHA256 hash of the body
|
|
134
152
|
const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
|
|
135
|
-
const [{ mediaUrl, directPath, handle }] =
|
|
136
|
-
(() =>
|
|
137
|
-
const result =
|
|
153
|
+
const [{ mediaUrl, directPath, handle }] = await Promise.all([
|
|
154
|
+
(async () => {
|
|
155
|
+
const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
|
|
138
156
|
logger === null || logger === void 0 ? void 0 : logger.debug({ mediaType, cacheableKey }, 'uploaded media');
|
|
139
157
|
return result;
|
|
140
|
-
})
|
|
141
|
-
(() =>
|
|
158
|
+
})(),
|
|
159
|
+
(async () => {
|
|
142
160
|
try {
|
|
143
161
|
if (requiresThumbnailComputation) {
|
|
144
|
-
const { thumbnail, originalImageDimensions } =
|
|
162
|
+
const { thumbnail, originalImageDimensions } = await (0, messages_media_1.generateThumbnail)(bodyPath, mediaType, options);
|
|
145
163
|
uploadData.jpegThumbnail = thumbnail;
|
|
146
164
|
if (!uploadData.width && originalImageDimensions) {
|
|
147
165
|
uploadData.width = originalImageDimensions.width;
|
|
@@ -151,40 +169,49 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
|
|
|
151
169
|
logger === null || logger === void 0 ? void 0 : logger.debug('generated thumbnail');
|
|
152
170
|
}
|
|
153
171
|
if (requiresDurationComputation) {
|
|
154
|
-
uploadData.seconds =
|
|
172
|
+
uploadData.seconds = await (0, messages_media_1.getAudioDuration)(bodyPath);
|
|
155
173
|
logger === null || logger === void 0 ? void 0 : logger.debug('computed audio duration');
|
|
156
174
|
}
|
|
157
175
|
if (requiresWaveformProcessing) {
|
|
158
|
-
uploadData.waveform =
|
|
176
|
+
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
159
177
|
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
160
178
|
}
|
|
161
179
|
if (requiresWaveformProcessing) {
|
|
162
|
-
uploadData.waveform =
|
|
180
|
+
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
163
181
|
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
164
182
|
}
|
|
165
183
|
if (requiresAudioBackground) {
|
|
166
|
-
uploadData.backgroundArgb =
|
|
184
|
+
uploadData.backgroundArgb = await assertColor(options.backgroundColor);
|
|
167
185
|
logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
|
|
168
186
|
}
|
|
169
187
|
}
|
|
170
188
|
catch (error) {
|
|
171
189
|
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
|
|
172
190
|
}
|
|
173
|
-
})
|
|
191
|
+
})(),
|
|
174
192
|
])
|
|
175
|
-
.finally(() =>
|
|
193
|
+
.finally(async () => {
|
|
176
194
|
if (!Buffer.isBuffer(encWriteStream)) {
|
|
177
195
|
encWriteStream.destroy();
|
|
178
196
|
}
|
|
179
197
|
// remove tmp files
|
|
180
198
|
if (didSaveToTmpPath && bodyPath) {
|
|
181
|
-
|
|
199
|
+
await fs_1.promises.unlink(bodyPath);
|
|
182
200
|
logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
|
|
183
201
|
}
|
|
184
|
-
})
|
|
202
|
+
});
|
|
185
203
|
const obj = Types_1.WAProto.Message.fromObject({
|
|
186
|
-
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject(
|
|
187
|
-
|
|
204
|
+
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
205
|
+
url: handle ? undefined : mediaUrl,
|
|
206
|
+
directPath,
|
|
207
|
+
mediaKey: mediaKey,
|
|
208
|
+
fileEncSha256: fileEncSha256,
|
|
209
|
+
fileSha256,
|
|
210
|
+
fileLength,
|
|
211
|
+
mediaKeyTimestamp: handle ? undefined : (0, generics_1.unixTimestampSeconds)(),
|
|
212
|
+
...uploadData,
|
|
213
|
+
media: undefined
|
|
214
|
+
})
|
|
188
215
|
});
|
|
189
216
|
if (uploadData.ptv) {
|
|
190
217
|
obj.ptvMessage = obj.videoMessage;
|
|
@@ -195,7 +222,7 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
|
|
|
195
222
|
options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
|
|
196
223
|
}
|
|
197
224
|
return obj;
|
|
198
|
-
}
|
|
225
|
+
};
|
|
199
226
|
exports.prepareWAMessageMedia = prepareWAMessageMedia;
|
|
200
227
|
const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
201
228
|
ephemeralExpiration = ephemeralExpiration || 0;
|
|
@@ -243,15 +270,15 @@ const generateForwardMessageContent = (message, forceForward) => {
|
|
|
243
270
|
return content;
|
|
244
271
|
};
|
|
245
272
|
exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
246
|
-
const generateWAMessageContent = (message, options) =>
|
|
247
|
-
var _a;
|
|
248
|
-
var
|
|
273
|
+
const generateWAMessageContent = async (message, options) => {
|
|
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;
|
|
249
276
|
let m = {};
|
|
250
277
|
if ('text' in message) {
|
|
251
278
|
const extContent = { text: message.text };
|
|
252
279
|
let urlInfo = message.linkPreview;
|
|
253
280
|
if (typeof urlInfo === 'undefined') {
|
|
254
|
-
urlInfo =
|
|
281
|
+
urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
|
|
255
282
|
}
|
|
256
283
|
if (urlInfo) {
|
|
257
284
|
extContent.canonicalUrl = urlInfo['canonical-url'];
|
|
@@ -272,7 +299,7 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
272
299
|
}
|
|
273
300
|
}
|
|
274
301
|
if (options.backgroundColor) {
|
|
275
|
-
extContent.backgroundArgb =
|
|
302
|
+
extContent.backgroundArgb = await assertColor(options.backgroundColor);
|
|
276
303
|
}
|
|
277
304
|
if (options.font) {
|
|
278
305
|
extContent.font = options.font;
|
|
@@ -293,6 +320,15 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
293
320
|
}
|
|
294
321
|
else if ('location' in message) {
|
|
295
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
|
+
}
|
|
296
332
|
}
|
|
297
333
|
else if ('react' in message) {
|
|
298
334
|
if (!message.react.senderTimestampMs) {
|
|
@@ -315,6 +351,64 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
315
351
|
message.disappearingMessagesInChat;
|
|
316
352
|
m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
|
|
317
353
|
}
|
|
354
|
+
else if ('groupInvite' in message) {
|
|
355
|
+
m.groupInviteMessage = {};
|
|
356
|
+
m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
|
|
357
|
+
m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
|
|
358
|
+
m.groupInviteMessage.caption = message.groupInvite.text;
|
|
359
|
+
m.groupInviteMessage.groupJid = message.groupInvite.jid;
|
|
360
|
+
m.groupInviteMessage.groupName = message.groupInvite.subject;
|
|
361
|
+
m.groupInviteMessage.jpegThumbnail = message.groupInvite.thumbnail;
|
|
362
|
+
//TODO: use built-in interface and get disappearing mode info etc.
|
|
363
|
+
//TODO: cache / use store!?
|
|
364
|
+
if (options.getProfilePicUrl) {
|
|
365
|
+
let pfpUrl;
|
|
366
|
+
try {
|
|
367
|
+
pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
|
|
368
|
+
}
|
|
369
|
+
catch (_8) {
|
|
370
|
+
pfpUrl = null;
|
|
371
|
+
}
|
|
372
|
+
if (pfpUrl) {
|
|
373
|
+
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
|
374
|
+
if (resp.status === 200) {
|
|
375
|
+
m.groupInviteMessage.jpegThumbnail = resp.data;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
m.groupInviteMessage.jpegThumbnail = null;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else if ('pin' in message) {
|
|
384
|
+
m.pinInChatMessage = {};
|
|
385
|
+
m.messageContextInfo = {};
|
|
386
|
+
m.pinInChatMessage.key = message.pin;
|
|
387
|
+
m.pinInChatMessage.type = message.type;
|
|
388
|
+
m.pinInChatMessage.senderTimestampMs = Date.now();
|
|
389
|
+
m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
|
|
390
|
+
}
|
|
391
|
+
else if ('keep' in message) {
|
|
392
|
+
m.keepInChatMessage = {};
|
|
393
|
+
m.keepInChatMessage.key = message.keep;
|
|
394
|
+
m.keepInChatMessage.keepType = message.type;
|
|
395
|
+
m.keepInChatMessage.timestampMs = Date.now();
|
|
396
|
+
}
|
|
397
|
+
else if ('call' in message) {
|
|
398
|
+
m = {
|
|
399
|
+
scheduledCallCreationMessage: {
|
|
400
|
+
scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
|
|
401
|
+
callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
|
|
402
|
+
title: message.call.title
|
|
403
|
+
}
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
else if ('paymentInvite' in message) {
|
|
407
|
+
m.paymentInviteMessage = {
|
|
408
|
+
serviceType: message.paymentInvite.type,
|
|
409
|
+
expiryTimestamp: message.paymentInvite.expiry
|
|
410
|
+
};
|
|
411
|
+
}
|
|
318
412
|
else if ('buttonReply' in message) {
|
|
319
413
|
switch (message.type) {
|
|
320
414
|
case 'template':
|
|
@@ -331,17 +425,58 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
331
425
|
type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
|
|
332
426
|
};
|
|
333
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;
|
|
334
441
|
}
|
|
335
442
|
}
|
|
336
443
|
else if ('product' in message) {
|
|
337
|
-
const { imageMessage } =
|
|
338
|
-
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject(
|
|
444
|
+
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);
|
|
445
|
+
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
|
|
446
|
+
...message,
|
|
447
|
+
product: {
|
|
448
|
+
...message.product,
|
|
449
|
+
productImage: imageMessage,
|
|
450
|
+
}
|
|
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
|
+
}
|
|
458
|
+
}
|
|
459
|
+
else if ('order' in message) {
|
|
460
|
+
m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
|
|
461
|
+
orderId: message.order.id,
|
|
462
|
+
thumbnail: message.order.thumbnail,
|
|
463
|
+
itemCount: message.order.itemCount,
|
|
464
|
+
status: message.order.status,
|
|
465
|
+
surface: message.order.surface,
|
|
466
|
+
orderTitle: message.order.title,
|
|
467
|
+
message: message.order.text,
|
|
468
|
+
sellerJid: message.order.seller,
|
|
469
|
+
token: message.order.token,
|
|
470
|
+
totalAmount1000: message.order.amount,
|
|
471
|
+
totalCurrencyCode: message.order.currency
|
|
472
|
+
});
|
|
339
473
|
}
|
|
340
474
|
else if ('listReply' in message) {
|
|
341
|
-
m.listResponseMessage =
|
|
475
|
+
m.listResponseMessage = { ...message.listReply };
|
|
342
476
|
}
|
|
343
477
|
else if ('poll' in message) {
|
|
344
|
-
(
|
|
478
|
+
(_6 = message.poll).selectableCount || (_6.selectableCount = 0);
|
|
479
|
+
(_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
|
|
345
480
|
if (!Array.isArray(message.poll.values)) {
|
|
346
481
|
throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
|
|
347
482
|
}
|
|
@@ -353,11 +488,125 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
353
488
|
// encKey
|
|
354
489
|
messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
355
490
|
};
|
|
356
|
-
|
|
491
|
+
const pollCreationMessage = {
|
|
357
492
|
name: message.poll.name,
|
|
358
493
|
selectableOptionsCount: message.poll.selectableCount,
|
|
359
494
|
options: message.poll.values.map(optionName => ({ optionName })),
|
|
360
495
|
};
|
|
496
|
+
if (message.poll.toAnnouncementGroup) {
|
|
497
|
+
// poll v2 is for community announcement groups (single select and multiple)
|
|
498
|
+
m.pollCreationMessageV2 = pollCreationMessage;
|
|
499
|
+
}
|
|
500
|
+
else {
|
|
501
|
+
if (message.poll.selectableCount > 0) {
|
|
502
|
+
//poll v3 is for single select polls
|
|
503
|
+
m.pollCreationMessageV3 = pollCreationMessage;
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
// poll v3 for multiple choice polls
|
|
507
|
+
m.pollCreationMessage = pollCreationMessage;
|
|
508
|
+
}
|
|
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;
|
|
536
|
+
}
|
|
537
|
+
else if ('event' in message) {
|
|
538
|
+
m.messageContextInfo = {
|
|
539
|
+
messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
540
|
+
};
|
|
541
|
+
m.eventMessage = { ...message.event };
|
|
542
|
+
}
|
|
543
|
+
else if ('inviteAdmin' in message) {
|
|
544
|
+
m.newsletterAdminInviteMessage = {};
|
|
545
|
+
m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
|
|
546
|
+
m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
|
|
547
|
+
m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
|
|
548
|
+
m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
|
|
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
|
+
}
|
|
570
|
+
}
|
|
571
|
+
else if ('requestPayment' in message) {
|
|
572
|
+
const sticker = ((_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker) ?
|
|
573
|
+
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)
|
|
574
|
+
: null;
|
|
575
|
+
let notes = {};
|
|
576
|
+
if ((_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.sticker) {
|
|
577
|
+
notes = {
|
|
578
|
+
stickerMessage: {
|
|
579
|
+
...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
|
|
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
|
+
}
|
|
586
|
+
}
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
else if (message.requestPayment.note) {
|
|
590
|
+
notes = {
|
|
591
|
+
extendedTextMessage: {
|
|
592
|
+
text: message.requestPayment.note,
|
|
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
|
+
}
|
|
599
|
+
}
|
|
600
|
+
};
|
|
601
|
+
}
|
|
602
|
+
m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
|
|
603
|
+
expiryTimestamp: message.requestPayment.expiry,
|
|
604
|
+
amount1000: message.requestPayment.amount,
|
|
605
|
+
currencyCodeIso4217: message.requestPayment.currency,
|
|
606
|
+
requestFrom: message.requestPayment.from,
|
|
607
|
+
noteMessage: { ...notes },
|
|
608
|
+
background: (_u = message.requestPayment.background) !== null && _u !== void 0 ? _u : null,
|
|
609
|
+
});
|
|
361
610
|
}
|
|
362
611
|
else if ('sharePhoneNumber' in message) {
|
|
363
612
|
m.protocolMessage = {
|
|
@@ -368,11 +617,11 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
368
617
|
m.requestPhoneNumberMessage = {};
|
|
369
618
|
}
|
|
370
619
|
else {
|
|
371
|
-
m =
|
|
620
|
+
m = await (0, exports.prepareWAMessageMedia)(message, options);
|
|
372
621
|
}
|
|
373
622
|
if ('buttons' in message && !!message.buttons) {
|
|
374
623
|
const buttonsMessage = {
|
|
375
|
-
buttons: message.buttons.map(b => (
|
|
624
|
+
buttons: message.buttons.map(b => ({ ...b, type: WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE }))
|
|
376
625
|
};
|
|
377
626
|
if ('text' in message) {
|
|
378
627
|
buttonsMessage.contentText = message.text;
|
|
@@ -389,11 +638,21 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
389
638
|
if ('footer' in message && !!message.footer) {
|
|
390
639
|
buttonsMessage.footerText = message.footer;
|
|
391
640
|
}
|
|
641
|
+
if ('title' in message && !!message.title) {
|
|
642
|
+
buttonsMessage.text = message.title,
|
|
643
|
+
buttonsMessage.headerType = ButtonType.TEXT;
|
|
644
|
+
}
|
|
645
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
646
|
+
buttonsMessage.contextInfo = message.contextInfo;
|
|
647
|
+
}
|
|
648
|
+
if ('mentions' in message && !!message.mentions) {
|
|
649
|
+
buttonsMessage.contextInfo = { mentionedJid: message.mentions };
|
|
650
|
+
}
|
|
392
651
|
m = { buttonsMessage };
|
|
393
652
|
}
|
|
394
653
|
else if ('templateButtons' in message && !!message.templateButtons) {
|
|
395
654
|
const msg = {
|
|
396
|
-
hydratedButtons: message.templateButtons
|
|
655
|
+
hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
|
|
397
656
|
};
|
|
398
657
|
if ('text' in message) {
|
|
399
658
|
msg.hydratedContentText = message.text;
|
|
@@ -414,6 +673,203 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
414
673
|
}
|
|
415
674
|
};
|
|
416
675
|
}
|
|
676
|
+
if ('interactiveButtons' in message && !!message.interactiveButtons) {
|
|
677
|
+
const interactiveMessage = {
|
|
678
|
+
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
|
679
|
+
buttons: message.interactiveButtons,
|
|
680
|
+
})
|
|
681
|
+
};
|
|
682
|
+
if ('text' in message) {
|
|
683
|
+
body: interactiveMessage.body = {
|
|
684
|
+
text: message.text
|
|
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
|
+
};
|
|
691
|
+
}
|
|
692
|
+
else {
|
|
693
|
+
if ('caption' in message) {
|
|
694
|
+
body: interactiveMessage.body = {
|
|
695
|
+
text: message.caption
|
|
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);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
if ('footer' in message && !!message.footer) {
|
|
706
|
+
footer: interactiveMessage.footer = {
|
|
707
|
+
text: message.footer
|
|
708
|
+
};
|
|
709
|
+
}
|
|
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
|
+
};
|
|
729
|
+
header: interactiveMessage.header = {
|
|
730
|
+
title: message.title,
|
|
731
|
+
subtitle: message.subtitle,
|
|
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
|
|
751
|
+
};
|
|
752
|
+
}
|
|
753
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
754
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
755
|
+
}
|
|
756
|
+
if ('mentions' in message && !!message.mentions) {
|
|
757
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
758
|
+
}
|
|
759
|
+
m = { interactiveMessage };
|
|
760
|
+
}
|
|
761
|
+
if ('collection' in message && !!message.shop) {
|
|
762
|
+
const interactiveMessage = {
|
|
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
|
|
767
|
+
})
|
|
768
|
+
};
|
|
769
|
+
if ('text' in message) {
|
|
770
|
+
body: interactiveMessage.body = {
|
|
771
|
+
text: message.text
|
|
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
|
+
};
|
|
778
|
+
}
|
|
779
|
+
else {
|
|
780
|
+
if ('caption' in message) {
|
|
781
|
+
body: interactiveMessage.body = {
|
|
782
|
+
text: message.caption
|
|
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);
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
if ('footer' in message && !!message.footer) {
|
|
793
|
+
footer: interactiveMessage.footer = {
|
|
794
|
+
text: message.footer
|
|
795
|
+
};
|
|
796
|
+
}
|
|
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
|
+
};
|
|
854
|
+
header: interactiveMessage.header = {
|
|
855
|
+
title: message.title,
|
|
856
|
+
subtitle: message.subtitle,
|
|
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
|
|
863
|
+
};
|
|
864
|
+
}
|
|
865
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
866
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
867
|
+
}
|
|
868
|
+
if ('mentions' in message && !!message.mentions) {
|
|
869
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
870
|
+
}
|
|
871
|
+
m = { interactiveMessage };
|
|
872
|
+
}
|
|
417
873
|
if ('sections' in message && !!message.sections) {
|
|
418
874
|
const listMessage = {
|
|
419
875
|
sections: message.sections,
|
|
@@ -428,7 +884,19 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
428
884
|
if ('viewOnce' in message && !!message.viewOnce) {
|
|
429
885
|
m = { viewOnceMessage: { message: m } };
|
|
430
886
|
}
|
|
431
|
-
if ('
|
|
887
|
+
if ('viewOnceV2' in message && !!message.viewOnceV2) {
|
|
888
|
+
m = { viewOnceMessageV2: { message: m } };
|
|
889
|
+
}
|
|
890
|
+
if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
|
|
891
|
+
m = { viewOnceMessageV2Extension: { message: m } };
|
|
892
|
+
}
|
|
893
|
+
if ('ephemeral' in message && !!message.ephemeral) {
|
|
894
|
+
m = { ephemeralMessage: { message: m } };
|
|
895
|
+
}
|
|
896
|
+
if ('lottie' in message && !!message.lottie) {
|
|
897
|
+
m = { lottieStickerMessage: { message: m } };
|
|
898
|
+
}
|
|
899
|
+
if ('mentions' in message && ((_5 = message.mentions) === null || _5 === void 0 ? void 0 : _5.length)) {
|
|
432
900
|
const [messageType] = Object.keys(m);
|
|
433
901
|
m[messageType].contextInfo = m[messageType] || {};
|
|
434
902
|
m[messageType].contextInfo.mentionedJid = message.mentions;
|
|
@@ -449,9 +917,10 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
|
|
|
449
917
|
m[messageType].contextInfo = message.contextInfo;
|
|
450
918
|
}
|
|
451
919
|
return Types_1.WAProto.Message.fromObject(m);
|
|
452
|
-
}
|
|
920
|
+
};
|
|
453
921
|
exports.generateWAMessageContent = generateWAMessageContent;
|
|
454
922
|
const generateWAMessageFromContent = (jid, message, options) => {
|
|
923
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
455
924
|
// set timestamp to now
|
|
456
925
|
// if not specified
|
|
457
926
|
if (!options.timestamp) {
|
|
@@ -461,7 +930,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
461
930
|
const key = (0, exports.getContentType)(innerMessage);
|
|
462
931
|
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
|
463
932
|
const { quoted, userJid } = options;
|
|
464
|
-
if (quoted) {
|
|
933
|
+
if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
|
|
465
934
|
const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
|
|
466
935
|
let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
|
|
467
936
|
const msgType = (0, exports.getContentType)(quotedMsg);
|
|
@@ -471,7 +940,16 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
471
940
|
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
|
472
941
|
delete quotedContent.contextInfo;
|
|
473
942
|
}
|
|
474
|
-
|
|
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) || {};
|
|
475
953
|
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
|
476
954
|
contextInfo.stanzaId = quoted.key.id;
|
|
477
955
|
contextInfo.quotedMessage = quotedMsg;
|
|
@@ -488,8 +966,14 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
488
966
|
// and it's not a protocol message -- delete, toggle disappear message
|
|
489
967
|
key !== 'protocolMessage' &&
|
|
490
968
|
// already not converted to disappearing message
|
|
491
|
-
key !== 'ephemeralMessage'
|
|
492
|
-
|
|
969
|
+
key !== 'ephemeralMessage' &&
|
|
970
|
+
// newsletter not accept disappearing messages
|
|
971
|
+
!(0, WABinary_1.isJidNewsLetter)(jid)) {
|
|
972
|
+
innerMessage[key].contextInfo = {
|
|
973
|
+
...(innerMessage[key].contextInfo || {}),
|
|
974
|
+
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
|
|
975
|
+
//ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
|
|
976
|
+
};
|
|
493
977
|
}
|
|
494
978
|
message = Types_1.WAProto.Message.fromObject(message);
|
|
495
979
|
const messageJSON = {
|
|
@@ -507,12 +991,12 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
507
991
|
return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
|
|
508
992
|
};
|
|
509
993
|
exports.generateWAMessageFromContent = generateWAMessageFromContent;
|
|
510
|
-
const generateWAMessage = (jid, content, options) =>
|
|
994
|
+
const generateWAMessage = async (jid, content, options) => {
|
|
511
995
|
var _a;
|
|
512
996
|
// ensure msg ID is with every log
|
|
513
997
|
options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
|
|
514
|
-
return (0, exports.generateWAMessageFromContent)(jid,
|
|
515
|
-
}
|
|
998
|
+
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
|
|
999
|
+
};
|
|
516
1000
|
exports.generateWAMessage = generateWAMessage;
|
|
517
1001
|
/** Get the key to access the true type of content */
|
|
518
1002
|
const getContentType = (content) => {
|
|
@@ -672,6 +1156,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
|
672
1156
|
}
|
|
673
1157
|
return Object.values(voteHashMap);
|
|
674
1158
|
}
|
|
1159
|
+
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
675
1160
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
|
676
1161
|
const aggregateMessageKeysNotFromMe = (keys) => {
|
|
677
1162
|
const keyMap = {};
|
|
@@ -695,9 +1180,9 @@ const REUPLOAD_REQUIRED_STATUS = [410, 404];
|
|
|
695
1180
|
/**
|
|
696
1181
|
* Downloads the given message. Throws an error if it's not a media message
|
|
697
1182
|
*/
|
|
698
|
-
const downloadMediaMessage = (message, type, options, ctx) =>
|
|
699
|
-
const result =
|
|
700
|
-
.catch((error) =>
|
|
1183
|
+
const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
1184
|
+
const result = await downloadMsg()
|
|
1185
|
+
.catch(async (error) => {
|
|
701
1186
|
var _a;
|
|
702
1187
|
if (ctx) {
|
|
703
1188
|
if (axios_1.default.isAxiosError(error)) {
|
|
@@ -705,63 +1190,48 @@ const downloadMediaMessage = (message, type, options, ctx) => __awaiter(void 0,
|
|
|
705
1190
|
if (REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
|
|
706
1191
|
ctx.logger.info({ key: message.key }, 'sending reupload media request...');
|
|
707
1192
|
// request reupload
|
|
708
|
-
message =
|
|
709
|
-
const result =
|
|
1193
|
+
message = await ctx.reuploadRequest(message);
|
|
1194
|
+
const result = await downloadMsg();
|
|
710
1195
|
return result;
|
|
711
1196
|
}
|
|
712
1197
|
}
|
|
713
1198
|
}
|
|
714
1199
|
throw error;
|
|
715
|
-
})
|
|
1200
|
+
});
|
|
716
1201
|
return result;
|
|
717
|
-
function downloadMsg() {
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
const
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
try {
|
|
745
|
-
for (var _d = true, stream_1 = __asyncValues(stream), stream_1_1; stream_1_1 = yield stream_1.next(), _a = stream_1_1.done, !_a; _d = true) {
|
|
746
|
-
_c = stream_1_1.value;
|
|
747
|
-
_d = false;
|
|
748
|
-
const chunk = _c;
|
|
749
|
-
bufferArray.push(chunk);
|
|
750
|
-
}
|
|
751
|
-
}
|
|
752
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
753
|
-
finally {
|
|
754
|
-
try {
|
|
755
|
-
if (!_d && !_a && (_b = stream_1.return)) yield _b.call(stream_1);
|
|
756
|
-
}
|
|
757
|
-
finally { if (e_1) throw e_1.error; }
|
|
758
|
-
}
|
|
759
|
-
return Buffer.concat(bufferArray);
|
|
1202
|
+
async function downloadMsg() {
|
|
1203
|
+
const mContent = (0, exports.extractMessageContent)(message.message);
|
|
1204
|
+
if (!mContent) {
|
|
1205
|
+
throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
|
|
1206
|
+
}
|
|
1207
|
+
const contentType = (0, exports.getContentType)(mContent);
|
|
1208
|
+
let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
|
|
1209
|
+
const media = mContent[contentType];
|
|
1210
|
+
if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
|
|
1211
|
+
throw new boom_1.Boom(`"${contentType}" message is not a media message`);
|
|
1212
|
+
}
|
|
1213
|
+
let download;
|
|
1214
|
+
if ('thumbnailDirectPath' in media && !('url' in media)) {
|
|
1215
|
+
download = {
|
|
1216
|
+
directPath: media.thumbnailDirectPath,
|
|
1217
|
+
mediaKey: media.mediaKey
|
|
1218
|
+
};
|
|
1219
|
+
mediaType = 'thumbnail-link';
|
|
1220
|
+
}
|
|
1221
|
+
else {
|
|
1222
|
+
download = media;
|
|
1223
|
+
}
|
|
1224
|
+
const stream = await (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
|
|
1225
|
+
if (type === 'buffer') {
|
|
1226
|
+
const bufferArray = [];
|
|
1227
|
+
for await (const chunk of stream) {
|
|
1228
|
+
bufferArray.push(chunk);
|
|
760
1229
|
}
|
|
761
|
-
return
|
|
762
|
-
}
|
|
1230
|
+
return Buffer.concat(bufferArray);
|
|
1231
|
+
}
|
|
1232
|
+
return stream;
|
|
763
1233
|
}
|
|
764
|
-
}
|
|
1234
|
+
};
|
|
765
1235
|
exports.downloadMediaMessage = downloadMediaMessage;
|
|
766
1236
|
/** Checks whether the given message is a media message; if it is returns the inner content */
|
|
767
1237
|
const assertMediaContent = (content) => {
|