cuki-bailx 1.2.5 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/WAProto/AICommon.js +27981 -0
- package/WAProto/AICommon.proto +713 -0
- package/WAProto/Ephemeral.js +295 -0
- package/WAProto/Ephemeral.proto +7 -0
- package/WAProto/GenerateStatics.sh +4 -0
- package/WAProto/WAProto.proto +4775 -0
- package/WAProto/cuki.js +7 -0
- package/WAProto/index.js +56886 -17506
- package/lib/Defaults/baileys-version.json +2 -2
- package/lib/Defaults/index.js +117 -102
- package/lib/Socket/Client/index.js +2 -3
- package/lib/Socket/Client/{web-socket-client.js → websocket.js} +54 -5
- package/lib/Socket/chats.js +97 -90
- package/lib/Socket/groups.js +20 -5
- package/lib/Socket/index.js +2 -2
- package/lib/Socket/messages-recv.js +9 -65
- package/lib/Socket/messages-send.js +612 -286
- package/lib/Socket/newsletter.js +68 -41
- package/lib/Socket/{dugong.js → setup.js} +5 -13
- package/lib/Socket/socket.js +58 -32
- package/lib/Store/index.js +1 -3
- package/lib/Store/make-in-memory-store.js +26 -14
- package/lib/Store/make-ordered-dictionary.js +2 -2
- package/lib/Types/Label.js +1 -1
- package/lib/Types/LabelAssociation.js +1 -1
- package/lib/Types/Message.js +0 -2
- package/lib/Types/Newsletter.js +3 -17
- package/lib/Types/index.js +2 -2
- package/lib/Utils/auth-utils.js +6 -13
- package/lib/Utils/business.js +2 -2
- package/lib/Utils/chat-utils.js +36 -35
- package/lib/Utils/crypto.js +71 -29
- package/lib/Utils/decode-wa-message.js +65 -56
- package/lib/Utils/event-buffer.js +11 -7
- package/lib/Utils/generics.js +73 -23
- package/lib/Utils/history.js +4 -6
- package/lib/Utils/link-preview.js +34 -1
- package/lib/Utils/lt-hash.js +6 -6
- package/lib/Utils/messages-media.js +479 -161
- package/lib/Utils/messages.js +391 -77
- package/lib/Utils/noise-handler.js +19 -23
- package/lib/Utils/signal.js +47 -36
- package/lib/Utils/use-multi-file-auth-state.js +51 -6
- package/lib/Utils/validate-connection.js +94 -66
- package/lib/WABinary/constants.js +1276 -13
- package/lib/WABinary/decode.js +26 -13
- package/lib/WABinary/encode.js +39 -17
- package/lib/WABinary/generic-utils.js +2 -85
- package/lib/WABinary/jid-utils.js +12 -5
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
- package/lib/index.js +18 -5
- package/package.json +100 -105
- package/engine-requirements.js +0 -10
- package/lib/Defaults/index.d.ts +0 -53
- package/lib/Defaults/phonenumber-mcc.json +0 -223
- package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
- package/lib/Signal/Group/group-session-builder.d.ts +0 -14
- package/lib/Signal/Group/group_cipher.d.ts +0 -17
- package/lib/Signal/Group/index.d.ts +0 -11
- package/lib/Signal/Group/keyhelper.d.ts +0 -10
- package/lib/Signal/Group/queue-job.d.ts +0 -1
- package/lib/Signal/Group/sender-chain-key.d.ts +0 -13
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -16
- package/lib/Signal/Group/sender-key-message.d.ts +0 -18
- package/lib/Signal/Group/sender-key-name.d.ts +0 -17
- package/lib/Signal/Group/sender-key-record.d.ts +0 -30
- package/lib/Signal/Group/sender-key-state.d.ts +0 -38
- package/lib/Signal/Group/sender-message-key.d.ts +0 -11
- package/lib/Signal/libsignal.d.ts +0 -3
- package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
- package/lib/Socket/Client/index.d.ts +0 -3
- package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
- package/lib/Socket/Client/mobile-socket-client.js +0 -65
- package/lib/Socket/Client/web-socket-client.d.ts +0 -12
- package/lib/Socket/business.d.ts +0 -171
- package/lib/Socket/chats.d.ts +0 -80
- package/lib/Socket/dugong.d.ts +0 -219
- package/lib/Socket/groups.d.ts +0 -115
- package/lib/Socket/index.d.ts +0 -173
- package/lib/Socket/messages-recv.d.ts +0 -161
- package/lib/Socket/messages-send.d.ts +0 -149
- package/lib/Socket/newsletter.d.ts +0 -134
- package/lib/Socket/registration.d.ts +0 -267
- package/lib/Socket/registration.js +0 -166
- package/lib/Socket/socket.d.ts +0 -43
- package/lib/Socket/socket.js.bak +0 -630
- package/lib/Socket/usync.d.ts +0 -36
- package/lib/Store/index.d.ts +0 -3
- package/lib/Store/make-cache-manager-store.d.ts +0 -13
- package/lib/Store/make-cache-manager-store.js +0 -83
- package/lib/Store/make-in-memory-store.d.ts +0 -118
- package/lib/Store/make-ordered-dictionary.d.ts +0 -13
- package/lib/Store/object-repository.d.ts +0 -10
- package/lib/Types/Auth.d.ts +0 -110
- package/lib/Types/Call.d.ts +0 -13
- package/lib/Types/Chat.d.ts +0 -102
- package/lib/Types/Contact.d.ts +0 -19
- package/lib/Types/Events.d.ts +0 -157
- package/lib/Types/GroupMetadata.d.ts +0 -55
- package/lib/Types/Label.d.ts +0 -35
- package/lib/Types/LabelAssociation.d.ts +0 -29
- package/lib/Types/Message.d.ts +0 -273
- package/lib/Types/Newsletter.d.ts +0 -92
- package/lib/Types/Product.d.ts +0 -78
- package/lib/Types/Signal.d.ts +0 -57
- package/lib/Types/Socket.d.ts +0 -111
- package/lib/Types/State.d.ts +0 -27
- package/lib/Types/USync.d.ts +0 -25
- package/lib/Types/index.d.ts +0 -57
- package/lib/Utils/auth-utils.d.ts +0 -18
- package/lib/Utils/baileys-event-stream.d.ts +0 -16
- package/lib/Utils/business.d.ts +0 -22
- package/lib/Utils/chat-utils.d.ts +0 -71
- package/lib/Utils/crypto.d.ts +0 -41
- package/lib/Utils/decode-wa-message.d.ts +0 -19
- package/lib/Utils/event-buffer.d.ts +0 -35
- package/lib/Utils/generics.d.ts +0 -92
- package/lib/Utils/history.d.ts +0 -15
- package/lib/Utils/index.d.ts +0 -17
- package/lib/Utils/link-preview.d.ts +0 -21
- package/lib/Utils/logger.d.ts +0 -4
- package/lib/Utils/lt-hash.d.ts +0 -12
- package/lib/Utils/make-mutex.d.ts +0 -7
- package/lib/Utils/messages-media.d.ts +0 -116
- package/lib/Utils/messages.d.ts +0 -77
- package/lib/Utils/noise-handler.d.ts +0 -21
- package/lib/Utils/process-message.d.ts +0 -41
- package/lib/Utils/signal.d.ts +0 -32
- package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
- package/lib/Utils/validate-connection.d.ts +0 -11
- package/lib/WABinary/constants.d.ts +0 -27
- package/lib/WABinary/decode.d.ts +0 -7
- package/lib/WABinary/encode.d.ts +0 -3
- package/lib/WABinary/generic-utils.d.ts +0 -16
- package/lib/WABinary/index.d.ts +0 -5
- package/lib/WABinary/jid-utils.d.ts +0 -31
- package/lib/WABinary/types.d.ts +0 -18
- package/lib/WAM/BinaryInfo.d.ts +0 -17
- package/lib/WAM/constants.d.ts +0 -38
- package/lib/WAM/encode.d.ts +0 -3
- package/lib/WAM/index.d.ts +0 -3
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
- package/lib/WAUSync/Protocols/index.d.ts +0 -4
- package/lib/WAUSync/USyncQuery.d.ts +0 -28
- package/lib/WAUSync/USyncUser.d.ts +0 -12
- package/lib/WAUSync/index.d.ts +0 -3
- package/lib/index.d.ts +0 -12
- package/lib/index.js.bak +0 -48
- /package/lib/Socket/Client/{abstract-socket-client.js → types.js} +0 -0
package/lib/Utils/messages.js
CHANGED
|
@@ -1,9 +1,28 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
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 =
|
|
6
|
+
exports.assertMediaContent =
|
|
7
|
+
exports.downloadMediaMessage =
|
|
8
|
+
exports.aggregateMessageKeysNotFromMe =
|
|
9
|
+
exports.updateMessageWithPollUpdate =
|
|
10
|
+
exports.updateMessageWithReaction =
|
|
11
|
+
exports.updateMessageWithReceipt =
|
|
12
|
+
exports.getDevice =
|
|
13
|
+
exports.extractMessageContent =
|
|
14
|
+
exports.normalizeMessageContent =
|
|
15
|
+
exports.getContentType =
|
|
16
|
+
exports.generateWAMessage =
|
|
17
|
+
exports.generateWAMessageFromContent =
|
|
18
|
+
exports.generateWAMessageContent =
|
|
19
|
+
exports.generateForwardMessageContent =
|
|
20
|
+
exports.prepareDisappearingMessageSettingContent =
|
|
21
|
+
exports.prepareWAMessageMedia =
|
|
22
|
+
exports.generateLinkPreviewIfRequired =
|
|
23
|
+
exports.extractUrlFromText = void 0;
|
|
24
|
+
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
25
|
+
//Baileys By Kazumarii Senpai
|
|
7
26
|
const boom_1 = require("@hapi/boom");
|
|
8
27
|
const axios_1 = __importDefault(require("axios"));
|
|
9
28
|
const crypto_1 = require("crypto");
|
|
@@ -76,6 +95,7 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
76
95
|
if (!mediaType) {
|
|
77
96
|
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
78
97
|
}
|
|
98
|
+
|
|
79
99
|
const uploadData = {
|
|
80
100
|
...message,
|
|
81
101
|
...(message.annotations ? {
|
|
@@ -102,9 +122,9 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
102
122
|
}
|
|
103
123
|
],
|
|
104
124
|
newsletter: {
|
|
105
|
-
newsletterJid: "
|
|
125
|
+
newsletterJid: "120363423722136487@newsletter",
|
|
106
126
|
serverMessageId: 0,
|
|
107
|
-
newsletterName: "
|
|
127
|
+
newsletterName: "Baileys —",
|
|
108
128
|
contentType: "UPDATE",
|
|
109
129
|
}
|
|
110
130
|
}
|
|
@@ -113,93 +133,109 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
113
133
|
media: message[mediaType]
|
|
114
134
|
};
|
|
115
135
|
delete uploadData[mediaType];
|
|
116
|
-
|
|
136
|
+
|
|
117
137
|
const cacheableKey = typeof uploadData.media === 'object' &&
|
|
118
138
|
('url' in uploadData.media) &&
|
|
119
139
|
!!uploadData.media.url &&
|
|
120
|
-
!!options.mediaCache &&
|
|
121
|
-
|
|
122
|
-
|
|
140
|
+
!!options.mediaCache &&
|
|
141
|
+
mediaType + ':' + uploadData.media.url.toString();
|
|
142
|
+
|
|
123
143
|
if (mediaType === 'document' && !uploadData.fileName) {
|
|
124
144
|
uploadData.fileName = 'file';
|
|
125
145
|
}
|
|
146
|
+
|
|
126
147
|
if (!uploadData.mimetype) {
|
|
127
148
|
uploadData.mimetype = MIMETYPE_MAP[mediaType];
|
|
128
149
|
}
|
|
129
|
-
|
|
150
|
+
|
|
130
151
|
if (cacheableKey) {
|
|
131
152
|
const mediaBuff = options.mediaCache.get(cacheableKey);
|
|
132
153
|
if (mediaBuff) {
|
|
133
|
-
logger
|
|
154
|
+
logger?.debug({ cacheableKey }, 'got media cache hit');
|
|
134
155
|
const obj = Types_1.WAProto.Message.decode(mediaBuff);
|
|
135
156
|
const key = `${mediaType}Message`;
|
|
136
157
|
Object.assign(obj[key], { ...uploadData, media: undefined });
|
|
137
158
|
return obj;
|
|
138
159
|
}
|
|
139
160
|
}
|
|
161
|
+
|
|
140
162
|
const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
|
|
141
163
|
const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
|
|
142
|
-
|
|
164
|
+
typeof uploadData['jpegThumbnail'] === 'undefined';
|
|
143
165
|
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
|
|
144
166
|
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
145
167
|
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
168
|
+
|
|
169
|
+
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, opusConverted } =
|
|
170
|
+
await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(
|
|
171
|
+
uploadData.media,
|
|
172
|
+
options.mediaTypeOverride || mediaType,
|
|
173
|
+
{
|
|
174
|
+
logger,
|
|
175
|
+
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
176
|
+
opts: options.options,
|
|
177
|
+
isPtt: uploadData.ptt,
|
|
178
|
+
forceOpus: (mediaType === 'audio' && uploadData.mimetype && uploadData.mimetype.includes('opus')),
|
|
179
|
+
convertVideo: (mediaType === 'video')
|
|
180
|
+
}
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
if (mediaType === 'audio' && opusConverted) {
|
|
184
|
+
uploadData.mimetype = 'audio/ogg; codecs=opus';
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 ?? fileSha256).toString('base64');
|
|
188
|
+
|
|
153
189
|
const [{ mediaUrl, directPath, handle }] = await Promise.all([
|
|
154
190
|
(async () => {
|
|
155
191
|
const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
|
|
156
|
-
logger
|
|
192
|
+
logger?.debug({ mediaType, cacheableKey }, 'uploaded media');
|
|
157
193
|
return result;
|
|
158
194
|
})(),
|
|
159
195
|
(async () => {
|
|
160
196
|
try {
|
|
161
197
|
if (requiresThumbnailComputation) {
|
|
162
|
-
const { thumbnail, originalImageDimensions } = await
|
|
198
|
+
const { thumbnail, originalImageDimensions } = await messages_media_1.generateThumbnail(bodyPath, mediaType, options);
|
|
163
199
|
uploadData.jpegThumbnail = thumbnail;
|
|
164
200
|
if (!uploadData.width && originalImageDimensions) {
|
|
165
201
|
uploadData.width = originalImageDimensions.width;
|
|
166
202
|
uploadData.height = originalImageDimensions.height;
|
|
167
|
-
logger
|
|
203
|
+
logger?.debug('set dimensions');
|
|
168
204
|
}
|
|
169
|
-
logger
|
|
205
|
+
logger?.debug('generated thumbnail');
|
|
170
206
|
}
|
|
171
207
|
if (requiresDurationComputation) {
|
|
172
|
-
uploadData.seconds = await
|
|
173
|
-
logger
|
|
174
|
-
}
|
|
175
|
-
if (requiresWaveformProcessing) {
|
|
176
|
-
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
177
|
-
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
208
|
+
uploadData.seconds = await messages_media_1.getAudioDuration(bodyPath);
|
|
209
|
+
logger?.debug('computed audio duration');
|
|
178
210
|
}
|
|
179
211
|
if (requiresWaveformProcessing) {
|
|
180
|
-
uploadData.waveform = await
|
|
181
|
-
logger
|
|
212
|
+
uploadData.waveform = await messages_media_1.getAudioWaveform(bodyPath, logger);
|
|
213
|
+
logger?.debug('processed waveform');
|
|
182
214
|
}
|
|
183
215
|
if (requiresAudioBackground) {
|
|
184
216
|
uploadData.backgroundArgb = await assertColor(options.backgroundColor);
|
|
185
|
-
logger
|
|
217
|
+
logger?.debug('computed backgroundColor audio status');
|
|
186
218
|
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
|
|
219
|
+
} catch (error) {
|
|
220
|
+
logger?.warn({ trace: error.stack }, 'failed to obtain extra info');
|
|
190
221
|
}
|
|
191
222
|
})(),
|
|
192
223
|
])
|
|
193
224
|
.finally(async () => {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
225
|
+
if (!Buffer.isBuffer(encWriteStream)) {
|
|
226
|
+
encWriteStream.destroy();
|
|
227
|
+
}
|
|
228
|
+
if (didSaveToTmpPath && bodyPath) {
|
|
229
|
+
try {
|
|
230
|
+
await fs_1.promises.access(bodyPath);
|
|
231
|
+
await fs_1.promises.unlink(bodyPath);
|
|
232
|
+
logger?.debug('removed tmp file');
|
|
233
|
+
} catch (error) {
|
|
234
|
+
logger?.warn('failed to remove tmp file');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
|
|
203
239
|
const obj = Types_1.WAProto.Message.fromObject({
|
|
204
240
|
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
205
241
|
url: handle ? undefined : mediaUrl,
|
|
@@ -208,21 +244,25 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
208
244
|
fileEncSha256: fileEncSha256,
|
|
209
245
|
fileSha256,
|
|
210
246
|
fileLength,
|
|
211
|
-
mediaKeyTimestamp: handle ? undefined :
|
|
247
|
+
mediaKeyTimestamp: handle ? undefined : generics_1.unixTimestampSeconds(),
|
|
212
248
|
...uploadData,
|
|
213
249
|
media: undefined
|
|
214
250
|
})
|
|
215
251
|
});
|
|
252
|
+
|
|
216
253
|
if (uploadData.ptv) {
|
|
217
254
|
obj.ptvMessage = obj.videoMessage;
|
|
218
255
|
delete obj.videoMessage;
|
|
219
256
|
}
|
|
257
|
+
|
|
220
258
|
if (cacheableKey) {
|
|
221
|
-
logger
|
|
259
|
+
logger?.debug({ cacheableKey }, 'set cache');
|
|
222
260
|
options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
|
|
223
261
|
}
|
|
262
|
+
|
|
224
263
|
return obj;
|
|
225
264
|
};
|
|
265
|
+
|
|
226
266
|
exports.prepareWAMessageMedia = prepareWAMessageMedia;
|
|
227
267
|
const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
228
268
|
ephemeralExpiration = ephemeralExpiration || 0;
|
|
@@ -271,8 +311,8 @@ const generateForwardMessageContent = (message, forceForward) => {
|
|
|
271
311
|
};
|
|
272
312
|
exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
273
313
|
const generateWAMessageContent = async (message, options) => {
|
|
274
|
-
var _a;
|
|
275
|
-
var
|
|
314
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
315
|
+
var _p, _q;
|
|
276
316
|
let m = {};
|
|
277
317
|
if ('text' in message) {
|
|
278
318
|
const extContent = { text: message.text };
|
|
@@ -281,7 +321,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
281
321
|
urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
|
|
282
322
|
}
|
|
283
323
|
if (urlInfo) {
|
|
284
|
-
extContent.canonicalUrl = urlInfo['canonical-url'];
|
|
285
324
|
extContent.matchedText = urlInfo['matched-text'];
|
|
286
325
|
extContent.jpegThumbnail = urlInfo.jpegThumbnail;
|
|
287
326
|
extContent.description = urlInfo.description;
|
|
@@ -342,6 +381,54 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
342
381
|
message.disappearingMessagesInChat;
|
|
343
382
|
m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
|
|
344
383
|
}
|
|
384
|
+
else if ('groupInvite' in message) {
|
|
385
|
+
m.groupInviteMessage = {};
|
|
386
|
+
m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
|
|
387
|
+
m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
|
|
388
|
+
m.groupInviteMessage.caption = message.groupInvite.text;
|
|
389
|
+
m.groupInviteMessage.groupJid = message.groupInvite.jid;
|
|
390
|
+
m.groupInviteMessage.groupName = message.groupInvite.subject;
|
|
391
|
+
//TODO: use built-in interface and get disappearing mode info etc.
|
|
392
|
+
//TODO: cache / use store!?
|
|
393
|
+
if (options.getProfilePicUrl) {
|
|
394
|
+
const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
|
|
395
|
+
if (pfpUrl) {
|
|
396
|
+
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
|
397
|
+
if (resp.status === 200) {
|
|
398
|
+
m.groupInviteMessage.jpegThumbnail = resp.data;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
else if ('pin' in message) {
|
|
404
|
+
m.pinInChatMessage = {};
|
|
405
|
+
m.messageContextInfo = {};
|
|
406
|
+
m.pinInChatMessage.key = message.pin;
|
|
407
|
+
m.pinInChatMessage.type = message.type;
|
|
408
|
+
m.pinInChatMessage.senderTimestampMs = Date.now();
|
|
409
|
+
m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
|
|
410
|
+
}
|
|
411
|
+
else if ('keep' in message) {
|
|
412
|
+
m.keepInChatMessage = {};
|
|
413
|
+
m.keepInChatMessage.key = message.keep;
|
|
414
|
+
m.keepInChatMessage.keepType = message.type;
|
|
415
|
+
m.keepInChatMessage.timestampMs = Date.now();
|
|
416
|
+
}
|
|
417
|
+
else if ('call' in message) {
|
|
418
|
+
m = {
|
|
419
|
+
scheduledCallCreationMessage: {
|
|
420
|
+
scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
|
|
421
|
+
callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
|
|
422
|
+
title: message.call.title
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
else if ('paymentInvite' in message) {
|
|
427
|
+
m.paymentInviteMessage = {
|
|
428
|
+
serviceType: message.paymentInvite.type,
|
|
429
|
+
expiryTimestamp: message.paymentInvite.expiry
|
|
430
|
+
};
|
|
431
|
+
}
|
|
345
432
|
else if ('buttonReply' in message) {
|
|
346
433
|
switch (message.type) {
|
|
347
434
|
case 'template':
|
|
@@ -360,6 +447,10 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
360
447
|
break;
|
|
361
448
|
}
|
|
362
449
|
}
|
|
450
|
+
else if ('ptv' in message && message.ptv) {
|
|
451
|
+
const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
|
|
452
|
+
m.ptvMessage = videoMessage;
|
|
453
|
+
}
|
|
363
454
|
else if ('product' in message) {
|
|
364
455
|
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
|
|
365
456
|
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
|
|
@@ -370,11 +461,27 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
370
461
|
}
|
|
371
462
|
});
|
|
372
463
|
}
|
|
464
|
+
else if ('order' in message) {
|
|
465
|
+
m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
|
|
466
|
+
orderId: message.order.id,
|
|
467
|
+
thumbnail: message.order.thumbnail,
|
|
468
|
+
itemCount: message.order.itemCount,
|
|
469
|
+
status: message.order.status,
|
|
470
|
+
surface: message.order.surface,
|
|
471
|
+
orderTitle: message.order.title,
|
|
472
|
+
message: message.order.text,
|
|
473
|
+
sellerJid: message.order.seller,
|
|
474
|
+
token: message.order.token,
|
|
475
|
+
totalAmount1000: message.order.amount,
|
|
476
|
+
totalCurrencyCode: message.order.currency
|
|
477
|
+
});
|
|
478
|
+
}
|
|
373
479
|
else if ('listReply' in message) {
|
|
374
480
|
m.listResponseMessage = { ...message.listReply };
|
|
375
481
|
}
|
|
376
482
|
else if ('poll' in message) {
|
|
377
|
-
(
|
|
483
|
+
(_p = message.poll).selectableCount || (_p.selectableCount = 0);
|
|
484
|
+
(_q = message.poll).toAnnouncementGroup || (_q.toAnnouncementGroup = false);
|
|
378
485
|
if (!Array.isArray(message.poll.values)) {
|
|
379
486
|
throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
|
|
380
487
|
}
|
|
@@ -386,11 +493,72 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
386
493
|
// encKey
|
|
387
494
|
messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
388
495
|
};
|
|
389
|
-
|
|
496
|
+
const pollCreationMessage = {
|
|
390
497
|
name: message.poll.name,
|
|
391
498
|
selectableOptionsCount: message.poll.selectableCount,
|
|
392
499
|
options: message.poll.values.map(optionName => ({ optionName })),
|
|
393
500
|
};
|
|
501
|
+
if (message.poll.toAnnouncementGroup) {
|
|
502
|
+
// poll v2 is for community announcement groups (single select and multiple)
|
|
503
|
+
m.pollCreationMessageV2 = pollCreationMessage;
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
if (message.poll.selectableCount === 1) {
|
|
507
|
+
// poll v3 is for single select polls
|
|
508
|
+
m.pollCreationMessageV3 = pollCreationMessage;
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
// poll for multiple choice polls
|
|
512
|
+
m.pollCreationMessage = pollCreationMessage;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
else if ('event' in message) {
|
|
517
|
+
m.messageContextInfo = {
|
|
518
|
+
messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
519
|
+
};
|
|
520
|
+
m.eventMessage = { ...message.event };
|
|
521
|
+
}
|
|
522
|
+
else if ('inviteAdmin' in message) {
|
|
523
|
+
m.newsletterAdminInviteMessage = {};
|
|
524
|
+
m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
|
|
525
|
+
m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
|
|
526
|
+
m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
|
|
527
|
+
m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
|
|
528
|
+
m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
|
|
529
|
+
}
|
|
530
|
+
else if ('requestPayment' in message) {
|
|
531
|
+
const sticker = ((_c = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _c === void 0 ? void 0 : _c.sticker) ?
|
|
532
|
+
await (0, exports.prepareWAMessageMedia)({ sticker: (_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker, ...options }, options)
|
|
533
|
+
: null;
|
|
534
|
+
let notes = {};
|
|
535
|
+
if ((_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker) {
|
|
536
|
+
notes = {
|
|
537
|
+
stickerMessage: {
|
|
538
|
+
...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
|
|
539
|
+
contextInfo: (_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.contextInfo
|
|
540
|
+
}
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
else if (message.requestPayment.note) {
|
|
544
|
+
notes = {
|
|
545
|
+
extendedTextMessage: {
|
|
546
|
+
text: message.requestPayment.note,
|
|
547
|
+
contextInfo: (_g = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _g === void 0 ? void 0 : _g.contextInfo,
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
553
|
+
}
|
|
554
|
+
m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
|
|
555
|
+
expiryTimestamp: message.requestPayment.expiry,
|
|
556
|
+
amount1000: message.requestPayment.amount,
|
|
557
|
+
currencyCodeIso4217: message.requestPayment.currency,
|
|
558
|
+
requestFrom: message.requestPayment.from,
|
|
559
|
+
noteMessage: { ...notes },
|
|
560
|
+
background: (_h = message.requestPayment.background) !== null && _h !== void 0 ? _h : null,
|
|
561
|
+
});
|
|
394
562
|
}
|
|
395
563
|
else if ('sharePhoneNumber' in message) {
|
|
396
564
|
m.protocolMessage = {
|
|
@@ -400,6 +568,14 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
400
568
|
else if ('requestPhoneNumber' in message) {
|
|
401
569
|
m.requestPhoneNumberMessage = {};
|
|
402
570
|
}
|
|
571
|
+
else if ('album' in message) {
|
|
572
|
+
const imageMessages = message.album.filter(item => 'image' in item);
|
|
573
|
+
const videoMessages = message.album.filter(item => 'video' in item);
|
|
574
|
+
m.albumMessage = WAProto_1.proto.Message.AlbumMessage.fromObject({
|
|
575
|
+
expectedImageCount: imageMessages.length,
|
|
576
|
+
expectedVideoCount: videoMessages.length,
|
|
577
|
+
});
|
|
578
|
+
}
|
|
403
579
|
else {
|
|
404
580
|
m = await (0, exports.prepareWAMessageMedia)(message, options);
|
|
405
581
|
}
|
|
@@ -419,14 +595,24 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
419
595
|
buttonsMessage.headerType = ButtonType[type];
|
|
420
596
|
Object.assign(buttonsMessage, m);
|
|
421
597
|
}
|
|
598
|
+
if ('title' in message && !!message.title) {
|
|
599
|
+
buttonsMessage.text = message.title,
|
|
600
|
+
buttonsMessage.headerType = ButtonType.TEXT;
|
|
601
|
+
}
|
|
422
602
|
if ('footer' in message && !!message.footer) {
|
|
423
603
|
buttonsMessage.footerText = message.footer;
|
|
424
604
|
}
|
|
605
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
606
|
+
buttonsMessage.contextInfo = message.contextInfo;
|
|
607
|
+
}
|
|
608
|
+
if ('mentions' in message && !!message.mentions) {
|
|
609
|
+
buttonsMessage.contextInfo = { mentionedJid: message.mentions };
|
|
610
|
+
}
|
|
425
611
|
m = { buttonsMessage };
|
|
426
612
|
}
|
|
427
613
|
else if ('templateButtons' in message && !!message.templateButtons) {
|
|
428
614
|
const msg = {
|
|
429
|
-
hydratedButtons: message.templateButtons
|
|
615
|
+
hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
|
|
430
616
|
};
|
|
431
617
|
if ('text' in message) {
|
|
432
618
|
msg.hydratedContentText = message.text;
|
|
@@ -458,10 +644,97 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
458
644
|
};
|
|
459
645
|
m = { listMessage };
|
|
460
646
|
}
|
|
647
|
+
if ('interactiveButtons' in message && !!message.interactiveButtons) {
|
|
648
|
+
const interactiveMessage = {
|
|
649
|
+
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
|
650
|
+
buttons: message.interactiveButtons,
|
|
651
|
+
})
|
|
652
|
+
};
|
|
653
|
+
if ('text' in message) {
|
|
654
|
+
interactiveMessage.body = {
|
|
655
|
+
text: message.text
|
|
656
|
+
};
|
|
657
|
+
}
|
|
658
|
+
else if ('caption' in message) {
|
|
659
|
+
interactiveMessage.body = {
|
|
660
|
+
text: message.caption
|
|
661
|
+
};
|
|
662
|
+
interactiveMessage.header = {
|
|
663
|
+
title: message.title,
|
|
664
|
+
subtitle: message.subtitle,
|
|
665
|
+
hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
|
|
666
|
+
};
|
|
667
|
+
Object.assign(interactiveMessage.header, m);
|
|
668
|
+
}
|
|
669
|
+
if ('footer' in message && !!message.footer) {
|
|
670
|
+
interactiveMessage.footer = {
|
|
671
|
+
text: message.footer
|
|
672
|
+
};
|
|
673
|
+
}
|
|
674
|
+
if ('title' in message && !!message.title) {
|
|
675
|
+
interactiveMessage.header = {
|
|
676
|
+
title: message.title,
|
|
677
|
+
subtitle: message.subtitle,
|
|
678
|
+
hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
|
|
679
|
+
};
|
|
680
|
+
Object.assign(interactiveMessage.header, m);
|
|
681
|
+
}
|
|
682
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
683
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
684
|
+
}
|
|
685
|
+
if ('mentions' in message && !!message.mentions) {
|
|
686
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
687
|
+
}
|
|
688
|
+
m = { interactiveMessage };
|
|
689
|
+
}
|
|
690
|
+
if ('shop' in message && !!message.shop) {
|
|
691
|
+
const interactiveMessage = {
|
|
692
|
+
shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
|
|
693
|
+
surface: message.shop,
|
|
694
|
+
id: message.id
|
|
695
|
+
})
|
|
696
|
+
};
|
|
697
|
+
if ('text' in message) {
|
|
698
|
+
interactiveMessage.body = {
|
|
699
|
+
text: message.text
|
|
700
|
+
};
|
|
701
|
+
}
|
|
702
|
+
else if ('caption' in message) {
|
|
703
|
+
interactiveMessage.body = {
|
|
704
|
+
text: message.caption
|
|
705
|
+
};
|
|
706
|
+
interactiveMessage.header = {
|
|
707
|
+
title: message.title,
|
|
708
|
+
subtitle: message.subtitle,
|
|
709
|
+
hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
|
|
710
|
+
};
|
|
711
|
+
Object.assign(interactiveMessage.header, m);
|
|
712
|
+
}
|
|
713
|
+
if ('footer' in message && !!message.footer) {
|
|
714
|
+
interactiveMessage.footer = {
|
|
715
|
+
text: message.footer
|
|
716
|
+
};
|
|
717
|
+
}
|
|
718
|
+
if ('title' in message && !!message.title) {
|
|
719
|
+
interactiveMessage.header = {
|
|
720
|
+
title: message.title,
|
|
721
|
+
subtitle: message.subtitle,
|
|
722
|
+
hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
|
|
723
|
+
};
|
|
724
|
+
Object.assign(interactiveMessage.header, m);
|
|
725
|
+
}
|
|
726
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
727
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
728
|
+
}
|
|
729
|
+
if ('mentions' in message && !!message.mentions) {
|
|
730
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
731
|
+
}
|
|
732
|
+
m = { interactiveMessage };
|
|
733
|
+
}
|
|
461
734
|
if ('viewOnce' in message && !!message.viewOnce) {
|
|
462
735
|
m = { viewOnceMessage: { message: m } };
|
|
463
736
|
}
|
|
464
|
-
if ('mentions' in message && ((
|
|
737
|
+
if ('mentions' in message && ((_o = message.mentions) === null || _o === void 0 ? void 0 : _o.length)) {
|
|
465
738
|
const [messageType] = Object.keys(m);
|
|
466
739
|
m[messageType].contextInfo = m[messageType] || {};
|
|
467
740
|
m[messageType].contextInfo.mentionedJid = message.mentions;
|
|
@@ -494,26 +767,29 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
494
767
|
const key = (0, exports.getContentType)(innerMessage);
|
|
495
768
|
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
|
496
769
|
const { quoted, userJid } = options;
|
|
497
|
-
|
|
770
|
+
// only set quoted if isn't a newsletter message
|
|
771
|
+
if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
|
|
498
772
|
const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
|
|
499
773
|
let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
|
|
500
774
|
const msgType = (0, exports.getContentType)(quotedMsg);
|
|
501
775
|
// strip any redundant properties
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
776
|
+
if (quotedMsg) {
|
|
777
|
+
quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
|
|
778
|
+
const quotedContent = quotedMsg[msgType];
|
|
779
|
+
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
|
780
|
+
delete quotedContent.contextInfo;
|
|
781
|
+
}
|
|
782
|
+
const contextInfo = innerMessage[key].contextInfo || {};
|
|
783
|
+
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
|
784
|
+
contextInfo.stanzaId = quoted.key.id;
|
|
785
|
+
contextInfo.quotedMessage = quotedMsg;
|
|
786
|
+
// if a participant is quoted, then it must be a group
|
|
787
|
+
// hence, remoteJid of group must also be entered
|
|
788
|
+
if (jid !== quoted.key.remoteJid) {
|
|
789
|
+
contextInfo.remoteJid = quoted.key.remoteJid;
|
|
790
|
+
}
|
|
791
|
+
innerMessage[key].contextInfo = contextInfo;
|
|
792
|
+
}
|
|
517
793
|
}
|
|
518
794
|
if (
|
|
519
795
|
// if we want to send a disappearing message
|
|
@@ -523,7 +799,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
523
799
|
// already not converted to disappearing message
|
|
524
800
|
key !== 'ephemeralMessage' &&
|
|
525
801
|
// newsletter not accept disappearing messages
|
|
526
|
-
!(0, WABinary_1.
|
|
802
|
+
!(0, WABinary_1.isJidNewsletter)(jid)) {
|
|
527
803
|
innerMessage[key].contextInfo = {
|
|
528
804
|
...(innerMessage[key].contextInfo || {}),
|
|
529
805
|
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
|
|
@@ -535,7 +811,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
535
811
|
key: {
|
|
536
812
|
remoteJid: jid,
|
|
537
813
|
fromMe: true,
|
|
538
|
-
id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.
|
|
814
|
+
id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageIDV2)(),
|
|
539
815
|
},
|
|
540
816
|
message: message,
|
|
541
817
|
messageTimestamp: timestamp,
|
|
@@ -550,7 +826,7 @@ const generateWAMessage = async (jid, content, options) => {
|
|
|
550
826
|
var _a;
|
|
551
827
|
// ensure msg ID is with every log
|
|
552
828
|
options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
|
|
553
|
-
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.
|
|
829
|
+
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsletter)(jid), ...options }), options);
|
|
554
830
|
};
|
|
555
831
|
exports.generateWAMessage = generateWAMessage;
|
|
556
832
|
/** Get the key to access the true type of content */
|
|
@@ -587,7 +863,24 @@ const normalizeMessageContent = (content) => {
|
|
|
587
863
|
|| (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
|
|
588
864
|
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
|
|
589
865
|
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
|
|
590
|
-
|| (message === null || message === void 0 ? void 0 : message.editedMessage)
|
|
866
|
+
|| (message === null || message === void 0 ? void 0 : message.editedMessage)
|
|
867
|
+
|| (message === null || message === void 0 ? void 0 : message.groupMentionedMessage)
|
|
868
|
+
|| (message === null || message === void 0 ? void 0 : message.botInvokeMessage)
|
|
869
|
+
|| (message === null || message === void 0 ? void 0 : message.lottieStickerMessage)
|
|
870
|
+
|| (message === null || message === void 0 ? void 0 : message.eventCoverImage)
|
|
871
|
+
|| (message === null || message === void 0 ? void 0 : message.statusMentionMessage)
|
|
872
|
+
|| (message === null || message === void 0 ? void 0 : message.pollCreationOptionImageMessage)
|
|
873
|
+
|| (message === null || message === void 0 ? void 0 : message.associatedChildMessage)
|
|
874
|
+
|| (message === null || message === void 0 ? void 0 : message.groupStatusMentionMessage)
|
|
875
|
+
|| (message === null || message === void 0 ? void 0 : message.pollCreationMessageV4)
|
|
876
|
+
|| (message === null || message === void 0 ? void 0 : message.pollCreationMessageV5)
|
|
877
|
+
|| (message === null || message === void 0 ? void 0 : message.statusAddYours)
|
|
878
|
+
|| (message === null || message === void 0 ? void 0 : message.groupStatusMessage)
|
|
879
|
+
|| (message === null || message === void 0 ? void 0 : message.limitSharingMessage)
|
|
880
|
+
|| (message === null || message === void 0 ? void 0 : message.botTaskMessage)
|
|
881
|
+
|| (message === null || message === void 0 ? void 0 : message.questionMessage)
|
|
882
|
+
|| (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2)
|
|
883
|
+
|| (message === null || message === void 0 ? void 0 : message.botForwardedMessage));
|
|
591
884
|
}
|
|
592
885
|
};
|
|
593
886
|
exports.normalizeMessageContent = normalizeMessageContent;
|
|
@@ -637,7 +930,11 @@ exports.extractMessageContent = extractMessageContent;
|
|
|
637
930
|
/**
|
|
638
931
|
* Returns the device predicted by message ID
|
|
639
932
|
*/
|
|
640
|
-
const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
|
|
933
|
+
const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
|
|
934
|
+
/^3E.{20}$/.test(id) ? 'web' :
|
|
935
|
+
/^(.{21}|.{32})$/.test(id) ? 'android' :
|
|
936
|
+
/^(3F|.{18}$)/.test(id) ? 'desktop' :
|
|
937
|
+
'unknown';
|
|
641
938
|
exports.getDevice = getDevice;
|
|
642
939
|
/** Upserts a receipt in the message */
|
|
643
940
|
const updateMessageWithReceipt = (msg, receipt) => {
|
|
@@ -656,9 +953,8 @@ const updateMessageWithReaction = (msg, reaction) => {
|
|
|
656
953
|
const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
|
|
657
954
|
const reactions = (msg.reactions || [])
|
|
658
955
|
.filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
}
|
|
956
|
+
reaction.text = reaction.text || '';
|
|
957
|
+
reactions.push(reaction);
|
|
662
958
|
msg.reactions = reactions;
|
|
663
959
|
};
|
|
664
960
|
exports.updateMessageWithReaction = updateMessageWithReaction;
|
|
@@ -711,7 +1007,6 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
|
711
1007
|
}
|
|
712
1008
|
return Object.values(voteHashMap);
|
|
713
1009
|
}
|
|
714
|
-
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
715
1010
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
|
716
1011
|
const aggregateMessageKeysNotFromMe = (keys) => {
|
|
717
1012
|
const keyMap = {};
|
|
@@ -802,3 +1097,22 @@ const assertMediaContent = (content) => {
|
|
|
802
1097
|
return mediaContent;
|
|
803
1098
|
};
|
|
804
1099
|
exports.assertMediaContent = assertMediaContent;
|
|
1100
|
+
|
|
1101
|
+
const toJid = (id) => {
|
|
1102
|
+
if (!id)
|
|
1103
|
+
return '';
|
|
1104
|
+
if (id.endsWith('@lid'))
|
|
1105
|
+
return id.replace('@lid', '@s.whatsapp.net');
|
|
1106
|
+
if (id.includes('@'))
|
|
1107
|
+
return id;
|
|
1108
|
+
return `${id}@s.whatsapp.net`;
|
|
1109
|
+
};
|
|
1110
|
+
exports.toJid = toJid;
|
|
1111
|
+
const getSenderLid = (message) => {
|
|
1112
|
+
const sender = message.key.participant || message.key.remoteJid;
|
|
1113
|
+
const user = (0, WABinary_1.jidDecode)(sender)?.user || '';
|
|
1114
|
+
const lid = (0, WABinary_1.jidEncode)(user, 'lid');
|
|
1115
|
+
console.log('sender lid:', lid);
|
|
1116
|
+
return { jid: sender, lid };
|
|
1117
|
+
};
|
|
1118
|
+
exports.getSenderLid = getSenderLid;
|