@modzneverdie/baileys 17.1.13 → 17.1.17
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 +364 -0
- package/engine-requirements.js +4 -4
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Defaults/index.d.ts +6 -4
- package/lib/Defaults/index.js +119 -78
- package/lib/Defaults/phonenumber-mcc.json +223 -0
- package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +2 -1
- package/lib/Socket/Client/index.d.ts +3 -2
- package/lib/Socket/Client/index.js +3 -2
- package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
- package/lib/Socket/Client/mobile-socket-client.js +65 -0
- package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +1 -2
- package/lib/Socket/Client/{websocket.js → web-socket-client.js} +5 -54
- package/lib/Socket/business.d.ts +58 -59
- package/lib/Socket/chats.d.ts +230 -45
- package/lib/Socket/chats.js +238 -139
- package/lib/Socket/{setup.ts → dugong.d.ts} +52 -17
- package/lib/Socket/dugong.js +484 -0
- package/lib/Socket/groups.d.ts +32 -41
- package/lib/Socket/groups.js +23 -38
- package/lib/Socket/index.d.ts +64 -63
- package/lib/Socket/index.js +3 -2
- package/lib/Socket/messages-recv.js +65 -9
- package/lib/Socket/messages-send.d.ts +47 -49
- package/lib/Socket/messages-send.js +399 -415
- package/lib/Socket/newsletter.d.ts +37 -39
- package/lib/Socket/newsletter.js +136 -71
- package/lib/Socket/registration.d.ts +267 -0
- package/lib/Socket/registration.js +166 -0
- package/lib/Socket/socket.d.ts +10 -10
- package/lib/Socket/socket.js +619 -736
- package/lib/Socket/usync.d.ts +3 -3
- package/lib/Store/index.d.ts +2 -1
- package/lib/Store/index.js +3 -1
- package/lib/Store/make-cache-manager-store.d.ts +13 -0
- package/lib/Store/make-cache-manager-store.js +83 -0
- package/lib/Store/make-in-memory-store.d.ts +24 -24
- package/lib/Store/make-in-memory-store.js +14 -26
- package/lib/Store/make-ordered-dictionary.d.ts +1 -1
- package/lib/Store/make-ordered-dictionary.js +2 -2
- package/lib/Types/Auth.d.ts +7 -0
- package/lib/Types/Call.d.ts +1 -1
- package/lib/Types/Chat.d.ts +7 -14
- package/lib/Types/Contact.d.ts +1 -5
- package/lib/Types/Events.d.ts +2 -44
- package/lib/Types/GroupMetadata.d.ts +2 -11
- package/lib/Types/Label.js +1 -1
- package/lib/Types/LabelAssociation.js +1 -1
- package/lib/Types/Message.d.ts +21 -148
- package/lib/Types/Message.js +2 -0
- package/lib/Types/Newsletter.d.ts +97 -73
- package/lib/Types/Newsletter.js +38 -18
- package/lib/Types/Socket.d.ts +9 -17
- package/lib/Types/index.d.ts +1 -8
- package/lib/Types/index.js +2 -2
- package/lib/Utils/auth-utils.d.ts +3 -3
- package/lib/Utils/auth-utils.js +13 -6
- package/lib/Utils/business.js +2 -2
- package/lib/Utils/chat-utils.d.ts +16 -15
- package/lib/Utils/chat-utils.js +35 -36
- package/lib/Utils/crypto.d.ts +16 -15
- package/lib/Utils/crypto.js +29 -71
- package/lib/Utils/decode-wa-message.d.ts +6 -22
- package/lib/Utils/decode-wa-message.js +56 -65
- package/lib/Utils/event-buffer.d.ts +2 -2
- package/lib/Utils/event-buffer.js +7 -11
- package/lib/Utils/generics.d.ts +20 -17
- package/lib/Utils/generics.js +84 -102
- package/lib/Utils/history.d.ts +0 -4
- package/lib/Utils/history.js +6 -4
- package/lib/Utils/link-preview.d.ts +2 -2
- package/lib/Utils/link-preview.js +1 -34
- package/lib/Utils/logger.d.ts +3 -10
- package/lib/Utils/lt-hash.d.ts +2 -2
- package/lib/Utils/lt-hash.js +6 -6
- package/lib/Utils/make-mutex.d.ts +2 -2
- package/lib/Utils/messages-media.d.ts +24 -28
- package/lib/Utils/messages-media.js +236 -298
- package/lib/Utils/messages.d.ts +10 -8
- package/lib/Utils/messages.js +60 -304
- package/lib/Utils/noise-handler.d.ts +12 -10
- package/lib/Utils/noise-handler.js +23 -18
- package/lib/Utils/process-message.d.ts +4 -5
- package/lib/Utils/process-message.js +25 -89
- package/lib/Utils/signal.d.ts +1 -2
- package/lib/Utils/signal.js +26 -26
- package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +0 -6
- package/lib/Utils/validate-connection.d.ts +4 -3
- package/lib/Utils/validate-connection.js +76 -20
- package/lib/WABinary/constants.d.ts +27 -24
- package/lib/WABinary/constants.js +13 -1276
- package/lib/WABinary/decode.d.ts +4 -3
- package/lib/WABinary/decode.js +13 -26
- package/lib/WABinary/encode.d.ts +2 -1
- package/lib/WABinary/encode.js +152 -137
- package/lib/WABinary/generic-utils.d.ts +4 -1
- package/lib/WABinary/generic-utils.js +125 -37
- package/lib/WABinary/jid-utils.d.ts +5 -10
- package/lib/WABinary/jid-utils.js +5 -26
- package/lib/WAM/BinaryInfo.d.ts +11 -2
- package/lib/WAM/encode.d.ts +2 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
- package/lib/index.d.ts +2 -6
- package/lib/index.js +6 -20
- package/package.json +105 -107
- package/WAProto/GenerateStatics.sh +0 -4
- package/WAProto/WAProto.proto +0 -4775
- package/WAProto/index.d.ts +0 -55057
- package/WAProto/index.ts.ts +0 -53473
- package/lib/Socket/setup.js +0 -433
- package/lib/WABinary/jid-utils.js.bak +0 -83
- /package/lib/Socket/Client/{types.js → abstract-socket-client.js} +0 -0
package/lib/Utils/messages.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Logger } from 'pino';
|
|
1
4
|
import { type Transform } from 'stream';
|
|
2
5
|
import { proto } from '../../WAProto';
|
|
3
|
-
import { ILogger } from './logger';
|
|
4
6
|
import { AnyMediaMessageContent, AnyMessageContent, MediaGenerationOptions, MessageContentGenerationOptions, MessageGenerationOptions, MessageGenerationOptionsFromContent, MessageUserReceipt, WAMessage, WAMessageContent, WAProto } from '../Types';
|
|
5
7
|
import { MediaDownloadOptions } from './messages-media';
|
|
6
8
|
/**
|
|
@@ -9,7 +11,7 @@ import { MediaDownloadOptions } from './messages-media';
|
|
|
9
11
|
* @returns the URL, eg. https://google.com
|
|
10
12
|
*/
|
|
11
13
|
export declare const extractUrlFromText: (text: string) => string | undefined;
|
|
12
|
-
export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions[
|
|
14
|
+
export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions['getUrlInfo'], logger: MessageGenerationOptions['logger']) => Promise<import("../Types").WAUrlInfo | undefined>;
|
|
13
15
|
export declare const prepareWAMessageMedia: (message: AnyMediaMessageContent, options: MediaGenerationOptions) => Promise<proto.Message>;
|
|
14
16
|
export declare const prepareDisappearingMessageSettingContent: (ephemeralExpiration?: number) => proto.Message;
|
|
15
17
|
/**
|
|
@@ -38,13 +40,13 @@ export declare const extractMessageContent: (content: WAMessageContent | undefin
|
|
|
38
40
|
/**
|
|
39
41
|
* Returns the device predicted by message ID
|
|
40
42
|
*/
|
|
41
|
-
export declare const getDevice: (id: string) => "
|
|
43
|
+
export declare const getDevice: (id: string) => "android" | "unknown" | "web" | "ios" | "desktop";
|
|
42
44
|
/** Upserts a receipt in the message */
|
|
43
|
-
export declare const updateMessageWithReceipt: (msg: Pick<WAMessage,
|
|
45
|
+
export declare const updateMessageWithReceipt: (msg: Pick<WAMessage, 'userReceipt'>, receipt: MessageUserReceipt) => void;
|
|
44
46
|
/** Update the message with a new reaction */
|
|
45
|
-
export declare const updateMessageWithReaction: (msg: Pick<WAMessage,
|
|
47
|
+
export declare const updateMessageWithReaction: (msg: Pick<WAMessage, 'reactions'>, reaction: proto.IReaction) => void;
|
|
46
48
|
/** Update the message with a new poll update */
|
|
47
|
-
export declare const updateMessageWithPollUpdate: (msg: Pick<WAMessage,
|
|
49
|
+
export declare const updateMessageWithPollUpdate: (msg: Pick<WAMessage, 'pollUpdates'>, update: proto.IPollUpdate) => void;
|
|
48
50
|
type VoteAggregation = {
|
|
49
51
|
name: string;
|
|
50
52
|
voters: string[];
|
|
@@ -64,12 +66,12 @@ export declare const aggregateMessageKeysNotFromMe: (keys: proto.IMessageKey[])
|
|
|
64
66
|
}[];
|
|
65
67
|
type DownloadMediaMessageContext = {
|
|
66
68
|
reuploadRequest: (msg: WAMessage) => Promise<WAMessage>;
|
|
67
|
-
logger:
|
|
69
|
+
logger: Logger;
|
|
68
70
|
};
|
|
69
71
|
/**
|
|
70
72
|
* Downloads the given message. Throws an error if it's not a media message
|
|
71
73
|
*/
|
|
72
|
-
export declare const downloadMediaMessage: <Type extends "
|
|
74
|
+
export declare const downloadMediaMessage: <Type extends "stream" | "buffer">(message: WAMessage, type: Type, options: MediaDownloadOptions, ctx?: DownloadMediaMessageContext) => Promise<Type extends "buffer" ? Buffer : Transform>;
|
|
73
75
|
/** Checks whether the given message is a media message; if it is returns the inner content */
|
|
74
76
|
export declare const assertMediaContent: (content: proto.IMessage | null | undefined) => proto.Message.IVideoMessage | proto.Message.IImageMessage | proto.Message.IAudioMessage | proto.Message.IDocumentMessage | proto.Message.IStickerMessage;
|
|
75
77
|
export {};
|
package/lib/Utils/messages.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
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 = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
|
|
7
|
-
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
6
|
+
exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.getAggregateVotesInPollMessage = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
|
|
8
7
|
const boom_1 = require("@hapi/boom");
|
|
9
8
|
const axios_1 = __importDefault(require("axios"));
|
|
10
9
|
const crypto_1 = require("crypto");
|
|
@@ -75,8 +74,11 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
76
|
if (!mediaType) {
|
|
78
|
-
throw new boom_1.Boom('Invalid media type', {
|
|
77
|
+
throw new boom_1.Boom('Invalid media type', {
|
|
78
|
+
statusCode: 400
|
|
79
|
+
});
|
|
79
80
|
}
|
|
81
|
+
|
|
80
82
|
const uploadData = {
|
|
81
83
|
...message,
|
|
82
84
|
...(message.annotations ? {
|
|
@@ -105,7 +107,7 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
105
107
|
newsletter: {
|
|
106
108
|
newsletterJid: "120363379975415016@newsletter",
|
|
107
109
|
serverMessageId: 0,
|
|
108
|
-
newsletterName: "Modz
|
|
110
|
+
newsletterName: "Modz | AZP",
|
|
109
111
|
contentType: "UPDATE",
|
|
110
112
|
}
|
|
111
113
|
}
|
|
@@ -114,20 +116,20 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
114
116
|
media: message[mediaType]
|
|
115
117
|
};
|
|
116
118
|
delete uploadData[mediaType];
|
|
117
|
-
// check if cacheable + generate cache key
|
|
118
119
|
const cacheableKey = typeof uploadData.media === 'object' &&
|
|
119
120
|
('url' in uploadData.media) &&
|
|
120
121
|
!!uploadData.media.url &&
|
|
121
122
|
!!options.mediaCache && (
|
|
122
|
-
// generate the key
|
|
123
123
|
mediaType + ':' + uploadData.media.url.toString());
|
|
124
|
+
|
|
124
125
|
if (mediaType === 'document' && !uploadData.fileName) {
|
|
125
126
|
uploadData.fileName = 'file';
|
|
126
127
|
}
|
|
128
|
+
|
|
127
129
|
if (!uploadData.mimetype) {
|
|
128
130
|
uploadData.mimetype = MIMETYPE_MAP[mediaType];
|
|
129
131
|
}
|
|
130
|
-
|
|
132
|
+
|
|
131
133
|
if (cacheableKey) {
|
|
132
134
|
const mediaBuff = options.mediaCache.get(cacheableKey);
|
|
133
135
|
if (mediaBuff) {
|
|
@@ -138,19 +140,28 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
138
140
|
return obj;
|
|
139
141
|
}
|
|
140
142
|
}
|
|
143
|
+
|
|
141
144
|
const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
|
|
142
145
|
const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
|
|
143
146
|
(typeof uploadData['jpegThumbnail'] === 'undefined');
|
|
144
147
|
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
|
|
145
148
|
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
146
149
|
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
|
|
147
|
-
|
|
150
|
+
|
|
151
|
+
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, opusConverted } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
148
152
|
logger,
|
|
149
153
|
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
150
|
-
opts: options.options
|
|
154
|
+
opts: options.options,
|
|
155
|
+
isPtt: uploadData.ptt,
|
|
156
|
+
forceOpus: (mediaType === "audio" && uploadData.mimetype && uploadData.mimetype.includes('opus'))
|
|
151
157
|
});
|
|
152
|
-
|
|
158
|
+
|
|
159
|
+
if (mediaType === 'audio' && opusConverted) {
|
|
160
|
+
uploadData.mimetype = 'audio/ogg; codecs=opus';
|
|
161
|
+
}
|
|
162
|
+
|
|
153
163
|
const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
|
|
164
|
+
|
|
154
165
|
const [{ mediaUrl, directPath, handle }] = await Promise.all([
|
|
155
166
|
(async () => {
|
|
156
167
|
const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
|
|
@@ -177,10 +188,6 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
177
188
|
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
178
189
|
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
179
190
|
}
|
|
180
|
-
if (requiresWaveformProcessing) {
|
|
181
|
-
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
182
|
-
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
183
|
-
}
|
|
184
191
|
if (requiresAudioBackground) {
|
|
185
192
|
uploadData.backgroundArgb = await assertColor(options.backgroundColor);
|
|
186
193
|
logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
|
|
@@ -195,12 +202,13 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
195
202
|
if (!Buffer.isBuffer(encWriteStream)) {
|
|
196
203
|
encWriteStream.destroy();
|
|
197
204
|
}
|
|
198
|
-
|
|
205
|
+
|
|
199
206
|
if (didSaveToTmpPath && bodyPath) {
|
|
200
207
|
await fs_1.promises.unlink(bodyPath);
|
|
201
208
|
logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
|
|
202
209
|
}
|
|
203
210
|
});
|
|
211
|
+
|
|
204
212
|
const obj = Types_1.WAProto.Message.fromObject({
|
|
205
213
|
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
206
214
|
url: handle ? undefined : mediaUrl,
|
|
@@ -214,14 +222,17 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
214
222
|
media: undefined
|
|
215
223
|
})
|
|
216
224
|
});
|
|
225
|
+
|
|
217
226
|
if (uploadData.ptv) {
|
|
218
227
|
obj.ptvMessage = obj.videoMessage;
|
|
219
228
|
delete obj.videoMessage;
|
|
220
229
|
}
|
|
230
|
+
|
|
221
231
|
if (cacheableKey) {
|
|
222
232
|
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
|
|
223
233
|
options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
|
|
224
234
|
}
|
|
235
|
+
|
|
225
236
|
return obj;
|
|
226
237
|
};
|
|
227
238
|
exports.prepareWAMessageMedia = prepareWAMessageMedia;
|
|
@@ -272,8 +283,8 @@ const generateForwardMessageContent = (message, forceForward) => {
|
|
|
272
283
|
};
|
|
273
284
|
exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
274
285
|
const generateWAMessageContent = async (message, options) => {
|
|
275
|
-
var _a
|
|
276
|
-
var
|
|
286
|
+
var _a;
|
|
287
|
+
var _b;
|
|
277
288
|
let m = {};
|
|
278
289
|
if ('text' in message) {
|
|
279
290
|
const extContent = { text: message.text };
|
|
@@ -282,6 +293,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
282
293
|
urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
|
|
283
294
|
}
|
|
284
295
|
if (urlInfo) {
|
|
296
|
+
extContent.canonicalUrl = urlInfo['canonical-url'];
|
|
285
297
|
extContent.matchedText = urlInfo['matched-text'];
|
|
286
298
|
extContent.jpegThumbnail = urlInfo.jpegThumbnail;
|
|
287
299
|
extContent.description = urlInfo.description;
|
|
@@ -342,54 +354,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
342
354
|
message.disappearingMessagesInChat;
|
|
343
355
|
m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
|
|
344
356
|
}
|
|
345
|
-
else if ('groupInvite' in message) {
|
|
346
|
-
m.groupInviteMessage = {};
|
|
347
|
-
m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
|
|
348
|
-
m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
|
|
349
|
-
m.groupInviteMessage.caption = message.groupInvite.text;
|
|
350
|
-
m.groupInviteMessage.groupJid = message.groupInvite.jid;
|
|
351
|
-
m.groupInviteMessage.groupName = message.groupInvite.subject;
|
|
352
|
-
//TODO: use built-in interface and get disappearing mode info etc.
|
|
353
|
-
//TODO: cache / use store!?
|
|
354
|
-
if (options.getProfilePicUrl) {
|
|
355
|
-
const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
|
|
356
|
-
if (pfpUrl) {
|
|
357
|
-
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
|
358
|
-
if (resp.status === 200) {
|
|
359
|
-
m.groupInviteMessage.jpegThumbnail = resp.data;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
else if ('pin' in message) {
|
|
365
|
-
m.pinInChatMessage = {};
|
|
366
|
-
m.messageContextInfo = {};
|
|
367
|
-
m.pinInChatMessage.key = message.pin;
|
|
368
|
-
m.pinInChatMessage.type = message.type;
|
|
369
|
-
m.pinInChatMessage.senderTimestampMs = Date.now();
|
|
370
|
-
m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
|
|
371
|
-
}
|
|
372
|
-
else if ('keep' in message) {
|
|
373
|
-
m.keepInChatMessage = {};
|
|
374
|
-
m.keepInChatMessage.key = message.keep;
|
|
375
|
-
m.keepInChatMessage.keepType = message.type;
|
|
376
|
-
m.keepInChatMessage.timestampMs = Date.now();
|
|
377
|
-
}
|
|
378
|
-
else if ('call' in message) {
|
|
379
|
-
m = {
|
|
380
|
-
scheduledCallCreationMessage: {
|
|
381
|
-
scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
|
|
382
|
-
callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
|
|
383
|
-
title: message.call.title
|
|
384
|
-
}
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
|
-
else if ('paymentInvite' in message) {
|
|
388
|
-
m.paymentInviteMessage = {
|
|
389
|
-
serviceType: message.paymentInvite.type,
|
|
390
|
-
expiryTimestamp: message.paymentInvite.expiry
|
|
391
|
-
};
|
|
392
|
-
}
|
|
393
357
|
else if ('buttonReply' in message) {
|
|
394
358
|
switch (message.type) {
|
|
395
359
|
case 'template':
|
|
@@ -408,10 +372,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
408
372
|
break;
|
|
409
373
|
}
|
|
410
374
|
}
|
|
411
|
-
else if ('ptv' in message && message.ptv) {
|
|
412
|
-
const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
|
|
413
|
-
m.ptvMessage = videoMessage;
|
|
414
|
-
}
|
|
415
375
|
else if ('product' in message) {
|
|
416
376
|
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
|
|
417
377
|
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
|
|
@@ -422,27 +382,11 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
422
382
|
}
|
|
423
383
|
});
|
|
424
384
|
}
|
|
425
|
-
else if ('order' in message) {
|
|
426
|
-
m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
|
|
427
|
-
orderId: message.order.id,
|
|
428
|
-
thumbnail: message.order.thumbnail,
|
|
429
|
-
itemCount: message.order.itemCount,
|
|
430
|
-
status: message.order.status,
|
|
431
|
-
surface: message.order.surface,
|
|
432
|
-
orderTitle: message.order.title,
|
|
433
|
-
message: message.order.text,
|
|
434
|
-
sellerJid: message.order.seller,
|
|
435
|
-
token: message.order.token,
|
|
436
|
-
totalAmount1000: message.order.amount,
|
|
437
|
-
totalCurrencyCode: message.order.currency
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
385
|
else if ('listReply' in message) {
|
|
441
386
|
m.listResponseMessage = { ...message.listReply };
|
|
442
387
|
}
|
|
443
388
|
else if ('poll' in message) {
|
|
444
|
-
(
|
|
445
|
-
(_q = message.poll).toAnnouncementGroup || (_q.toAnnouncementGroup = false);
|
|
389
|
+
(_b = message.poll).selectableCount || (_b.selectableCount = 0);
|
|
446
390
|
if (!Array.isArray(message.poll.values)) {
|
|
447
391
|
throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
|
|
448
392
|
}
|
|
@@ -454,72 +398,11 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
454
398
|
// encKey
|
|
455
399
|
messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
456
400
|
};
|
|
457
|
-
|
|
401
|
+
m.pollCreationMessage = {
|
|
458
402
|
name: message.poll.name,
|
|
459
403
|
selectableOptionsCount: message.poll.selectableCount,
|
|
460
404
|
options: message.poll.values.map(optionName => ({ optionName })),
|
|
461
405
|
};
|
|
462
|
-
if (message.poll.toAnnouncementGroup) {
|
|
463
|
-
// poll v2 is for community announcement groups (single select and multiple)
|
|
464
|
-
m.pollCreationMessageV2 = pollCreationMessage;
|
|
465
|
-
}
|
|
466
|
-
else {
|
|
467
|
-
if (message.poll.selectableCount === 1) {
|
|
468
|
-
// poll v3 is for single select polls
|
|
469
|
-
m.pollCreationMessageV3 = pollCreationMessage;
|
|
470
|
-
}
|
|
471
|
-
else {
|
|
472
|
-
// poll for multiple choice polls
|
|
473
|
-
m.pollCreationMessage = pollCreationMessage;
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
else if ('event' in message) {
|
|
478
|
-
m.messageContextInfo = {
|
|
479
|
-
messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
480
|
-
};
|
|
481
|
-
m.eventMessage = { ...message.event };
|
|
482
|
-
}
|
|
483
|
-
else if ('inviteAdmin' in message) {
|
|
484
|
-
m.newsletterAdminInviteMessage = {};
|
|
485
|
-
m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
|
|
486
|
-
m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
|
|
487
|
-
m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
|
|
488
|
-
m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
|
|
489
|
-
m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
|
|
490
|
-
}
|
|
491
|
-
else if ('requestPayment' in message) {
|
|
492
|
-
const sticker = ((_c = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _c === void 0 ? void 0 : _c.sticker) ?
|
|
493
|
-
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)
|
|
494
|
-
: null;
|
|
495
|
-
let notes = {};
|
|
496
|
-
if ((_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker) {
|
|
497
|
-
notes = {
|
|
498
|
-
stickerMessage: {
|
|
499
|
-
...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
|
|
500
|
-
contextInfo: (_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.contextInfo
|
|
501
|
-
}
|
|
502
|
-
};
|
|
503
|
-
}
|
|
504
|
-
else if (message.requestPayment.note) {
|
|
505
|
-
notes = {
|
|
506
|
-
extendedTextMessage: {
|
|
507
|
-
text: message.requestPayment.note,
|
|
508
|
-
contextInfo: (_g = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _g === void 0 ? void 0 : _g.contextInfo,
|
|
509
|
-
}
|
|
510
|
-
};
|
|
511
|
-
}
|
|
512
|
-
else {
|
|
513
|
-
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
514
|
-
}
|
|
515
|
-
m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
|
|
516
|
-
expiryTimestamp: message.requestPayment.expiry,
|
|
517
|
-
amount1000: message.requestPayment.amount,
|
|
518
|
-
currencyCodeIso4217: message.requestPayment.currency,
|
|
519
|
-
requestFrom: message.requestPayment.from,
|
|
520
|
-
noteMessage: { ...notes },
|
|
521
|
-
background: (_h = message.requestPayment.background) !== null && _h !== void 0 ? _h : null,
|
|
522
|
-
});
|
|
523
406
|
}
|
|
524
407
|
else if ('sharePhoneNumber' in message) {
|
|
525
408
|
m.protocolMessage = {
|
|
@@ -529,14 +412,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
529
412
|
else if ('requestPhoneNumber' in message) {
|
|
530
413
|
m.requestPhoneNumberMessage = {};
|
|
531
414
|
}
|
|
532
|
-
else if ('album' in message) {
|
|
533
|
-
const imageMessages = message.album.filter(item => 'image' in item);
|
|
534
|
-
const videoMessages = message.album.filter(item => 'video' in item);
|
|
535
|
-
m.albumMessage = WAProto_1.proto.Message.AlbumMessage.fromObject({
|
|
536
|
-
expectedImageCount: imageMessages.length,
|
|
537
|
-
expectedVideoCount: videoMessages.length,
|
|
538
|
-
});
|
|
539
|
-
}
|
|
540
415
|
else {
|
|
541
416
|
m = await (0, exports.prepareWAMessageMedia)(message, options);
|
|
542
417
|
}
|
|
@@ -556,24 +431,14 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
556
431
|
buttonsMessage.headerType = ButtonType[type];
|
|
557
432
|
Object.assign(buttonsMessage, m);
|
|
558
433
|
}
|
|
559
|
-
if ('title' in message && !!message.title) {
|
|
560
|
-
buttonsMessage.text = message.title,
|
|
561
|
-
buttonsMessage.headerType = ButtonType.TEXT;
|
|
562
|
-
}
|
|
563
434
|
if ('footer' in message && !!message.footer) {
|
|
564
435
|
buttonsMessage.footerText = message.footer;
|
|
565
436
|
}
|
|
566
|
-
if ('contextInfo' in message && !!message.contextInfo) {
|
|
567
|
-
buttonsMessage.contextInfo = message.contextInfo;
|
|
568
|
-
}
|
|
569
|
-
if ('mentions' in message && !!message.mentions) {
|
|
570
|
-
buttonsMessage.contextInfo = { mentionedJid: message.mentions };
|
|
571
|
-
}
|
|
572
437
|
m = { buttonsMessage };
|
|
573
438
|
}
|
|
574
439
|
else if ('templateButtons' in message && !!message.templateButtons) {
|
|
575
440
|
const msg = {
|
|
576
|
-
hydratedButtons: message.
|
|
441
|
+
hydratedButtons: message.templateButtons
|
|
577
442
|
};
|
|
578
443
|
if ('text' in message) {
|
|
579
444
|
msg.hydratedContentText = message.text;
|
|
@@ -605,97 +470,10 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
605
470
|
};
|
|
606
471
|
m = { listMessage };
|
|
607
472
|
}
|
|
608
|
-
if ('interactiveButtons' in message && !!message.interactiveButtons) {
|
|
609
|
-
const interactiveMessage = {
|
|
610
|
-
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
|
611
|
-
buttons: message.interactiveButtons,
|
|
612
|
-
})
|
|
613
|
-
};
|
|
614
|
-
if ('text' in message) {
|
|
615
|
-
interactiveMessage.body = {
|
|
616
|
-
text: message.text
|
|
617
|
-
};
|
|
618
|
-
}
|
|
619
|
-
else if ('caption' in message) {
|
|
620
|
-
interactiveMessage.body = {
|
|
621
|
-
text: message.caption
|
|
622
|
-
};
|
|
623
|
-
interactiveMessage.header = {
|
|
624
|
-
title: message.title,
|
|
625
|
-
subtitle: message.subtitle,
|
|
626
|
-
hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
|
|
627
|
-
};
|
|
628
|
-
Object.assign(interactiveMessage.header, m);
|
|
629
|
-
}
|
|
630
|
-
if ('footer' in message && !!message.footer) {
|
|
631
|
-
interactiveMessage.footer = {
|
|
632
|
-
text: message.footer
|
|
633
|
-
};
|
|
634
|
-
}
|
|
635
|
-
if ('title' in message && !!message.title) {
|
|
636
|
-
interactiveMessage.header = {
|
|
637
|
-
title: message.title,
|
|
638
|
-
subtitle: message.subtitle,
|
|
639
|
-
hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
|
|
640
|
-
};
|
|
641
|
-
Object.assign(interactiveMessage.header, m);
|
|
642
|
-
}
|
|
643
|
-
if ('contextInfo' in message && !!message.contextInfo) {
|
|
644
|
-
interactiveMessage.contextInfo = message.contextInfo;
|
|
645
|
-
}
|
|
646
|
-
if ('mentions' in message && !!message.mentions) {
|
|
647
|
-
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
648
|
-
}
|
|
649
|
-
m = { interactiveMessage };
|
|
650
|
-
}
|
|
651
|
-
if ('shop' in message && !!message.shop) {
|
|
652
|
-
const interactiveMessage = {
|
|
653
|
-
shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
|
|
654
|
-
surface: message.shop,
|
|
655
|
-
id: message.id
|
|
656
|
-
})
|
|
657
|
-
};
|
|
658
|
-
if ('text' in message) {
|
|
659
|
-
interactiveMessage.body = {
|
|
660
|
-
text: message.text
|
|
661
|
-
};
|
|
662
|
-
}
|
|
663
|
-
else if ('caption' in message) {
|
|
664
|
-
interactiveMessage.body = {
|
|
665
|
-
text: message.caption
|
|
666
|
-
};
|
|
667
|
-
interactiveMessage.header = {
|
|
668
|
-
title: message.title,
|
|
669
|
-
subtitle: message.subtitle,
|
|
670
|
-
hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
|
|
671
|
-
};
|
|
672
|
-
Object.assign(interactiveMessage.header, m);
|
|
673
|
-
}
|
|
674
|
-
if ('footer' in message && !!message.footer) {
|
|
675
|
-
interactiveMessage.footer = {
|
|
676
|
-
text: message.footer
|
|
677
|
-
};
|
|
678
|
-
}
|
|
679
|
-
if ('title' in message && !!message.title) {
|
|
680
|
-
interactiveMessage.header = {
|
|
681
|
-
title: message.title,
|
|
682
|
-
subtitle: message.subtitle,
|
|
683
|
-
hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
|
|
684
|
-
};
|
|
685
|
-
Object.assign(interactiveMessage.header, m);
|
|
686
|
-
}
|
|
687
|
-
if ('contextInfo' in message && !!message.contextInfo) {
|
|
688
|
-
interactiveMessage.contextInfo = message.contextInfo;
|
|
689
|
-
}
|
|
690
|
-
if ('mentions' in message && !!message.mentions) {
|
|
691
|
-
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
692
|
-
}
|
|
693
|
-
m = { interactiveMessage };
|
|
694
|
-
}
|
|
695
473
|
if ('viewOnce' in message && !!message.viewOnce) {
|
|
696
474
|
m = { viewOnceMessage: { message: m } };
|
|
697
475
|
}
|
|
698
|
-
if ('mentions' in message && ((
|
|
476
|
+
if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
699
477
|
const [messageType] = Object.keys(m);
|
|
700
478
|
m[messageType].contextInfo = m[messageType] || {};
|
|
701
479
|
m[messageType].contextInfo.mentionedJid = message.mentions;
|
|
@@ -728,29 +506,26 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
728
506
|
const key = (0, exports.getContentType)(innerMessage);
|
|
729
507
|
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
|
730
508
|
const { quoted, userJid } = options;
|
|
731
|
-
|
|
732
|
-
if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
|
|
509
|
+
if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
|
|
733
510
|
const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
|
|
734
511
|
let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
|
|
735
512
|
const msgType = (0, exports.getContentType)(quotedMsg);
|
|
736
513
|
// strip any redundant properties
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
innerMessage[key].contextInfo = contextInfo;
|
|
753
|
-
}
|
|
514
|
+
quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
|
|
515
|
+
const quotedContent = quotedMsg[msgType];
|
|
516
|
+
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
|
517
|
+
delete quotedContent.contextInfo;
|
|
518
|
+
}
|
|
519
|
+
const contextInfo = innerMessage[key].contextInfo || {};
|
|
520
|
+
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
|
521
|
+
contextInfo.stanzaId = quoted.key.id;
|
|
522
|
+
contextInfo.quotedMessage = quotedMsg;
|
|
523
|
+
// if a participant is quoted, then it must be a group
|
|
524
|
+
// hence, remoteJid of group must also be entered
|
|
525
|
+
if (jid !== quoted.key.remoteJid) {
|
|
526
|
+
contextInfo.remoteJid = quoted.key.remoteJid;
|
|
527
|
+
}
|
|
528
|
+
innerMessage[key].contextInfo = contextInfo;
|
|
754
529
|
}
|
|
755
530
|
if (
|
|
756
531
|
// if we want to send a disappearing message
|
|
@@ -760,7 +535,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
760
535
|
// already not converted to disappearing message
|
|
761
536
|
key !== 'ephemeralMessage' &&
|
|
762
537
|
// newsletter not accept disappearing messages
|
|
763
|
-
!(0, WABinary_1.
|
|
538
|
+
!(0, WABinary_1.isJidNewsLetter)(jid)) {
|
|
764
539
|
innerMessage[key].contextInfo = {
|
|
765
540
|
...(innerMessage[key].contextInfo || {}),
|
|
766
541
|
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
|
|
@@ -772,7 +547,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
772
547
|
key: {
|
|
773
548
|
remoteJid: jid,
|
|
774
549
|
fromMe: true,
|
|
775
|
-
id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.
|
|
550
|
+
id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageID)(),
|
|
776
551
|
},
|
|
777
552
|
message: message,
|
|
778
553
|
messageTimestamp: timestamp,
|
|
@@ -787,7 +562,7 @@ const generateWAMessage = async (jid, content, options) => {
|
|
|
787
562
|
var _a;
|
|
788
563
|
// ensure msg ID is with every log
|
|
789
564
|
options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
|
|
790
|
-
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.
|
|
565
|
+
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
|
|
791
566
|
};
|
|
792
567
|
exports.generateWAMessage = generateWAMessage;
|
|
793
568
|
/** Get the key to access the true type of content */
|
|
@@ -824,24 +599,7 @@ const normalizeMessageContent = (content) => {
|
|
|
824
599
|
|| (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
|
|
825
600
|
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
|
|
826
601
|
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
|
|
827
|
-
|| (message === null || message === void 0 ? void 0 : message.editedMessage)
|
|
828
|
-
|| (message === null || message === void 0 ? void 0 : message.groupMentionedMessage)
|
|
829
|
-
|| (message === null || message === void 0 ? void 0 : message.botInvokeMessage)
|
|
830
|
-
|| (message === null || message === void 0 ? void 0 : message.lottieStickerMessage)
|
|
831
|
-
|| (message === null || message === void 0 ? void 0 : message.eventCoverImage)
|
|
832
|
-
|| (message === null || message === void 0 ? void 0 : message.statusMentionMessage)
|
|
833
|
-
|| (message === null || message === void 0 ? void 0 : message.pollCreationOptionImageMessage)
|
|
834
|
-
|| (message === null || message === void 0 ? void 0 : message.associatedChildMessage)
|
|
835
|
-
|| (message === null || message === void 0 ? void 0 : message.groupStatusMentionMessage)
|
|
836
|
-
|| (message === null || message === void 0 ? void 0 : message.pollCreationMessageV4)
|
|
837
|
-
|| (message === null || message === void 0 ? void 0 : message.pollCreationMessageV5)
|
|
838
|
-
|| (message === null || message === void 0 ? void 0 : message.statusAddYours)
|
|
839
|
-
|| (message === null || message === void 0 ? void 0 : message.groupStatusMessage)
|
|
840
|
-
|| (message === null || message === void 0 ? void 0 : message.limitSharingMessage)
|
|
841
|
-
|| (message === null || message === void 0 ? void 0 : message.botTaskMessage)
|
|
842
|
-
|| (message === null || message === void 0 ? void 0 : message.questionMessage)
|
|
843
|
-
|| (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2)
|
|
844
|
-
|| (message === null || message === void 0 ? void 0 : message.botForwardedMessage));
|
|
602
|
+
|| (message === null || message === void 0 ? void 0 : message.editedMessage));
|
|
845
603
|
}
|
|
846
604
|
};
|
|
847
605
|
exports.normalizeMessageContent = normalizeMessageContent;
|
|
@@ -891,11 +649,7 @@ exports.extractMessageContent = extractMessageContent;
|
|
|
891
649
|
/**
|
|
892
650
|
* Returns the device predicted by message ID
|
|
893
651
|
*/
|
|
894
|
-
const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
|
|
895
|
-
/^3E.{20}$/.test(id) ? 'web' :
|
|
896
|
-
/^(.{21}|.{32})$/.test(id) ? 'android' :
|
|
897
|
-
/^(3F|.{18}$)/.test(id) ? 'desktop' :
|
|
898
|
-
'unknown';
|
|
652
|
+
const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' : /^3E.{20}$/.test(id) ? 'web' : /^(.{21}|.{32})$/.test(id) ? 'android' : /^.{18}$/.test(id) ? 'desktop' : 'unknown';
|
|
899
653
|
exports.getDevice = getDevice;
|
|
900
654
|
/** Upserts a receipt in the message */
|
|
901
655
|
const updateMessageWithReceipt = (msg, receipt) => {
|
|
@@ -914,8 +668,9 @@ const updateMessageWithReaction = (msg, reaction) => {
|
|
|
914
668
|
const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
|
|
915
669
|
const reactions = (msg.reactions || [])
|
|
916
670
|
.filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
|
|
917
|
-
|
|
918
|
-
|
|
671
|
+
if (reaction.text) {
|
|
672
|
+
reactions.push(reaction);
|
|
673
|
+
}
|
|
919
674
|
msg.reactions = reactions;
|
|
920
675
|
};
|
|
921
676
|
exports.updateMessageWithReaction = updateMessageWithReaction;
|
|
@@ -968,6 +723,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
|
968
723
|
}
|
|
969
724
|
return Object.values(voteHashMap);
|
|
970
725
|
}
|
|
726
|
+
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
971
727
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
|
972
728
|
const aggregateMessageKeysNotFromMe = (keys) => {
|
|
973
729
|
const keyMap = {};
|
|
@@ -1057,4 +813,4 @@ const assertMediaContent = (content) => {
|
|
|
1057
813
|
}
|
|
1058
814
|
return mediaContent;
|
|
1059
815
|
};
|
|
1060
|
-
exports.assertMediaContent = assertMediaContent;
|
|
816
|
+
exports.assertMediaContent = assertMediaContent;
|