@d0v3riz/baileys 6.7.21 → 6.7.22
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/GenerateStatics.sh +2 -3
- package/WAProto/index.js +4138 -4136
- package/lib/Defaults/index.d.ts +2 -3
- package/lib/Defaults/index.js +40 -36
- package/lib/Signal/Group/ciphertext-message.d.ts +0 -1
- package/lib/Signal/Group/ciphertext-message.js +5 -2
- package/lib/Signal/Group/group-session-builder.d.ts +3 -4
- package/lib/Signal/Group/group-session-builder.js +41 -7
- package/lib/Signal/Group/group_cipher.d.ts +2 -3
- package/lib/Signal/Group/group_cipher.js +16 -14
- package/lib/Signal/Group/index.d.ts +11 -12
- package/lib/Signal/Group/index.js +57 -12
- package/lib/Signal/Group/keyhelper.d.ts +1 -2
- package/lib/Signal/Group/keyhelper.js +44 -8
- package/lib/Signal/Group/queue-job.d.ts +0 -2
- package/lib/Signal/Group/queue-job.js +5 -5
- package/lib/Signal/Group/sender-chain-key.d.ts +1 -2
- package/lib/Signal/Group/sender-chain-key.js +9 -7
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +1 -2
- package/lib/Signal/Group/sender-key-distribution-message.js +9 -6
- package/lib/Signal/Group/sender-key-message.d.ts +1 -2
- package/lib/Signal/Group/sender-key-message.js +12 -10
- package/lib/Signal/Group/sender-key-name.d.ts +0 -1
- package/lib/Signal/Group/sender-key-name.js +5 -2
- package/lib/Signal/Group/sender-key-record.d.ts +1 -2
- package/lib/Signal/Group/sender-key-record.js +12 -9
- package/lib/Signal/Group/sender-key-state.d.ts +2 -3
- package/lib/Signal/Group/sender-key-state.js +9 -6
- package/lib/Signal/Group/sender-message-key.d.ts +0 -1
- package/lib/Signal/Group/sender-message-key.js +7 -5
- package/lib/Signal/libsignal.d.ts +2 -3
- package/lib/Signal/libsignal.js +55 -22
- package/lib/Socket/Client/index.d.ts +2 -3
- package/lib/Socket/Client/index.js +18 -3
- package/lib/Socket/Client/types.d.ts +1 -2
- package/lib/Socket/Client/types.js +6 -4
- package/lib/Socket/Client/websocket.d.ts +1 -2
- package/lib/Socket/Client/websocket.js +26 -14
- package/lib/Socket/business.d.ts +64 -66
- package/lib/Socket/business.js +37 -32
- package/lib/Socket/chats.d.ts +19 -21
- package/lib/Socket/chats.js +141 -176
- package/lib/Socket/groups.d.ts +35 -37
- package/lib/Socket/groups.js +63 -56
- package/lib/Socket/index.d.ts +70 -102
- package/lib/Socket/index.js +9 -16
- package/lib/Socket/messages-recv.d.ts +49 -51
- package/lib/Socket/messages-recv.js +173 -180
- package/lib/Socket/messages-send.d.ts +46 -48
- package/lib/Socket/messages-send.js +84 -75
- package/lib/Socket/mex.d.ts +1 -2
- package/lib/Socket/mex.js +16 -12
- package/lib/Socket/newsletter.d.ts +44 -46
- package/lib/Socket/newsletter.js +27 -23
- package/lib/Socket/socket.d.ts +12 -13
- package/lib/Socket/socket.js +115 -135
- package/lib/Socket/usync.d.ts +14 -15
- package/lib/Socket/usync.js +11 -9
- package/lib/Types/Auth.d.ts +3 -4
- package/lib/Types/Auth.js +2 -2
- package/lib/Types/Call.d.ts +0 -1
- package/lib/Types/Call.js +2 -2
- package/lib/Types/Chat.d.ts +7 -10
- package/lib/Types/Chat.js +4 -2
- package/lib/Types/Contact.d.ts +0 -1
- package/lib/Types/Contact.js +2 -2
- package/lib/Types/Events.d.ts +10 -11
- package/lib/Types/Events.js +2 -2
- package/lib/Types/GroupMetadata.d.ts +2 -3
- package/lib/Types/GroupMetadata.js +2 -2
- package/lib/Types/Label.d.ts +0 -1
- package/lib/Types/Label.js +5 -3
- package/lib/Types/LabelAssociation.d.ts +0 -1
- package/lib/Types/LabelAssociation.js +5 -3
- package/lib/Types/Message.d.ts +7 -9
- package/lib/Types/Message.js +7 -7
- package/lib/Types/Newsletter.d.ts +0 -1
- package/lib/Types/Newsletter.js +7 -5
- package/lib/Types/Product.d.ts +1 -2
- package/lib/Types/Product.js +2 -2
- package/lib/Types/Signal.d.ts +1 -2
- package/lib/Types/Signal.js +2 -2
- package/lib/Types/Socket.d.ts +7 -8
- package/lib/Types/Socket.js +2 -3
- package/lib/Types/State.d.ts +2 -14
- package/lib/Types/State.js +2 -13
- package/lib/Types/USync.d.ts +2 -3
- package/lib/Types/USync.js +2 -2
- package/lib/Types/index.d.ts +14 -15
- package/lib/Types/index.js +31 -15
- package/lib/Utils/auth-utils.d.ts +2 -3
- package/lib/Utils/auth-utils.js +34 -25
- package/lib/Utils/baileys-event-stream.d.ts +1 -2
- package/lib/Utils/baileys-event-stream.js +22 -15
- package/lib/Utils/business.d.ts +2 -3
- package/lib/Utils/business.js +70 -61
- package/lib/Utils/chat-utils.d.ts +7 -8
- package/lib/Utils/chat-utils.js +137 -130
- package/lib/Utils/crypto.d.ts +1 -2
- package/lib/Utils/crypto.js +86 -37
- package/lib/Utils/decode-wa-message.d.ts +4 -5
- package/lib/Utils/decode-wa-message.js +44 -38
- package/lib/Utils/event-buffer.d.ts +4 -4
- package/lib/Utils/event-buffer.js +50 -37
- package/lib/Utils/generics.d.ts +8 -9
- package/lib/Utils/generics.js +114 -87
- package/lib/Utils/history.d.ts +3 -4
- package/lib/Utils/history.js +40 -32
- package/lib/Utils/index.d.ts +17 -18
- package/lib/Utils/index.js +33 -18
- package/lib/Utils/link-preview.d.ts +3 -4
- package/lib/Utils/link-preview.js +47 -10
- package/lib/Utils/logger.d.ts +6 -8
- package/lib/Utils/logger.js +7 -3
- package/lib/Utils/lt-hash.d.ts +8 -9
- package/lib/Utils/lt-hash.js +26 -23
- package/lib/Utils/make-mutex.d.ts +0 -1
- package/lib/Utils/make-mutex.js +9 -5
- package/lib/Utils/messages-media.d.ts +10 -11
- package/lib/Utils/messages-media.js +203 -141
- package/lib/Utils/messages.d.ts +6 -7
- package/lib/Utils/messages.js +199 -190
- package/lib/Utils/noise-handler.d.ts +4 -5
- package/lib/Utils/noise-handler.js +26 -22
- package/lib/Utils/process-message.d.ts +4 -5
- package/lib/Utils/process-message.js +104 -95
- package/lib/Utils/signal.d.ts +4 -5
- package/lib/Utils/signal.js +52 -47
- package/lib/Utils/use-multi-file-auth-state.d.ts +1 -2
- package/lib/Utils/use-multi-file-auth-state.js +26 -23
- package/lib/Utils/validate-connection.d.ts +3 -4
- package/lib/Utils/validate-connection.js +58 -52
- package/lib/WABinary/constants.d.ts +0 -1
- package/lib/WABinary/constants.js +11 -9
- package/lib/WABinary/decode.d.ts +1 -2
- package/lib/WABinary/decode.js +51 -13
- package/lib/WABinary/encode.d.ts +1 -2
- package/lib/WABinary/encode.js +41 -5
- package/lib/WABinary/generic-utils.d.ts +3 -4
- package/lib/WABinary/generic-utils.js +38 -30
- package/lib/WABinary/index.d.ts +5 -6
- package/lib/WABinary/index.js +21 -6
- package/lib/WABinary/jid-utils.d.ts +0 -1
- package/lib/WABinary/jid-utils.js +35 -21
- package/lib/WABinary/types.d.ts +1 -2
- package/lib/WABinary/types.js +2 -2
- package/lib/WAM/BinaryInfo.d.ts +1 -2
- package/lib/WAM/BinaryInfo.js +5 -2
- package/lib/WAM/constants.d.ts +0 -1
- package/lib/WAM/constants.js +6 -4
- package/lib/WAM/encode.d.ts +1 -2
- package/lib/WAM/encode.js +14 -12
- package/lib/WAM/index.d.ts +3 -4
- package/lib/WAM/index.js +19 -4
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +3 -4
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +9 -6
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +12 -9
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +9 -6
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +11 -7
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +3 -4
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +21 -19
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +5 -2
- package/lib/WAUSync/Protocols/index.d.ts +4 -5
- package/lib/WAUSync/Protocols/index.js +20 -5
- package/lib/WAUSync/USyncQuery.d.ts +3 -4
- package/lib/WAUSync/USyncQuery.js +20 -18
- package/lib/WAUSync/USyncUser.d.ts +5 -6
- package/lib/WAUSync/USyncUser.js +5 -2
- package/lib/WAUSync/index.d.ts +3 -4
- package/lib/WAUSync/index.js +19 -4
- package/lib/index.d.ts +8 -9
- package/lib/index.js +30 -11
- package/package.json +26 -26
- package/WAProto/fix-imports.js +0 -29
- package/lib/Defaults/index.d.ts.map +0 -1
- package/lib/Defaults/index.js.map +0 -1
- package/lib/Signal/Group/ciphertext-message.d.ts.map +0 -1
- package/lib/Signal/Group/ciphertext-message.js.map +0 -1
- package/lib/Signal/Group/group-session-builder.d.ts.map +0 -1
- package/lib/Signal/Group/group-session-builder.js.map +0 -1
- package/lib/Signal/Group/group_cipher.d.ts.map +0 -1
- package/lib/Signal/Group/group_cipher.js.map +0 -1
- package/lib/Signal/Group/index.d.ts.map +0 -1
- package/lib/Signal/Group/index.js.map +0 -1
- package/lib/Signal/Group/keyhelper.d.ts.map +0 -1
- package/lib/Signal/Group/keyhelper.js.map +0 -1
- package/lib/Signal/Group/queue-job.d.ts.map +0 -1
- package/lib/Signal/Group/queue-job.js.map +0 -1
- package/lib/Signal/Group/sender-chain-key.d.ts.map +0 -1
- package/lib/Signal/Group/sender-chain-key.js.map +0 -1
- package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-distribution-message.js.map +0 -1
- package/lib/Signal/Group/sender-key-message.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-message.js.map +0 -1
- package/lib/Signal/Group/sender-key-name.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-name.js.map +0 -1
- package/lib/Signal/Group/sender-key-record.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-record.js.map +0 -1
- package/lib/Signal/Group/sender-key-state.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-state.js.map +0 -1
- package/lib/Signal/Group/sender-message-key.d.ts.map +0 -1
- package/lib/Signal/Group/sender-message-key.js.map +0 -1
- package/lib/Signal/libsignal.d.ts.map +0 -1
- package/lib/Signal/libsignal.js.map +0 -1
- package/lib/Socket/Client/index.d.ts.map +0 -1
- package/lib/Socket/Client/index.js.map +0 -1
- package/lib/Socket/Client/types.d.ts.map +0 -1
- package/lib/Socket/Client/types.js.map +0 -1
- package/lib/Socket/Client/websocket.d.ts.map +0 -1
- package/lib/Socket/Client/websocket.js.map +0 -1
- package/lib/Socket/business.d.ts.map +0 -1
- package/lib/Socket/business.js.map +0 -1
- package/lib/Socket/chats.d.ts.map +0 -1
- package/lib/Socket/chats.js.map +0 -1
- package/lib/Socket/communities.d.ts +0 -219
- package/lib/Socket/communities.d.ts.map +0 -1
- package/lib/Socket/communities.js +0 -351
- package/lib/Socket/communities.js.map +0 -1
- package/lib/Socket/groups.d.ts.map +0 -1
- package/lib/Socket/groups.js.map +0 -1
- package/lib/Socket/index.d.ts.map +0 -1
- package/lib/Socket/index.js.map +0 -1
- package/lib/Socket/messages-recv.d.ts.map +0 -1
- package/lib/Socket/messages-recv.js.map +0 -1
- package/lib/Socket/messages-send.d.ts.map +0 -1
- package/lib/Socket/messages-send.js.map +0 -1
- package/lib/Socket/mex.d.ts.map +0 -1
- package/lib/Socket/mex.js.map +0 -1
- package/lib/Socket/newsletter.d.ts.map +0 -1
- package/lib/Socket/newsletter.js.map +0 -1
- package/lib/Socket/socket.d.ts.map +0 -1
- package/lib/Socket/socket.js.map +0 -1
- package/lib/Socket/usync.d.ts.map +0 -1
- package/lib/Socket/usync.js.map +0 -1
- package/lib/Types/Auth.d.ts.map +0 -1
- package/lib/Types/Auth.js.map +0 -1
- package/lib/Types/Call.d.ts.map +0 -1
- package/lib/Types/Call.js.map +0 -1
- package/lib/Types/Chat.d.ts.map +0 -1
- package/lib/Types/Chat.js.map +0 -1
- package/lib/Types/Contact.d.ts.map +0 -1
- package/lib/Types/Contact.js.map +0 -1
- package/lib/Types/Events.d.ts.map +0 -1
- package/lib/Types/Events.js.map +0 -1
- package/lib/Types/GroupMetadata.d.ts.map +0 -1
- package/lib/Types/GroupMetadata.js.map +0 -1
- package/lib/Types/Label.d.ts.map +0 -1
- package/lib/Types/Label.js.map +0 -1
- package/lib/Types/LabelAssociation.d.ts.map +0 -1
- package/lib/Types/LabelAssociation.js.map +0 -1
- package/lib/Types/Message.d.ts.map +0 -1
- package/lib/Types/Message.js.map +0 -1
- package/lib/Types/Newsletter.d.ts.map +0 -1
- package/lib/Types/Newsletter.js.map +0 -1
- package/lib/Types/Product.d.ts.map +0 -1
- package/lib/Types/Product.js.map +0 -1
- package/lib/Types/Signal.d.ts.map +0 -1
- package/lib/Types/Signal.js.map +0 -1
- package/lib/Types/Socket.d.ts.map +0 -1
- package/lib/Types/Socket.js.map +0 -1
- package/lib/Types/State.d.ts.map +0 -1
- package/lib/Types/State.js.map +0 -1
- package/lib/Types/USync.d.ts.map +0 -1
- package/lib/Types/USync.js.map +0 -1
- package/lib/Types/index.d.ts.map +0 -1
- package/lib/Types/index.js.map +0 -1
- package/lib/Utils/auth-utils.d.ts.map +0 -1
- package/lib/Utils/auth-utils.js.map +0 -1
- package/lib/Utils/baileys-event-stream.d.ts.map +0 -1
- package/lib/Utils/baileys-event-stream.js.map +0 -1
- package/lib/Utils/business.d.ts.map +0 -1
- package/lib/Utils/business.js.map +0 -1
- package/lib/Utils/chat-utils.d.ts.map +0 -1
- package/lib/Utils/chat-utils.js.map +0 -1
- package/lib/Utils/crypto.d.ts.map +0 -1
- package/lib/Utils/crypto.js.map +0 -1
- package/lib/Utils/decode-wa-message.d.ts.map +0 -1
- package/lib/Utils/decode-wa-message.js.map +0 -1
- package/lib/Utils/event-buffer.d.ts.map +0 -1
- package/lib/Utils/event-buffer.js.map +0 -1
- package/lib/Utils/generics.d.ts.map +0 -1
- package/lib/Utils/generics.js.map +0 -1
- package/lib/Utils/history.d.ts.map +0 -1
- package/lib/Utils/history.js.map +0 -1
- package/lib/Utils/index.d.ts.map +0 -1
- package/lib/Utils/index.js.map +0 -1
- package/lib/Utils/link-preview.d.ts.map +0 -1
- package/lib/Utils/link-preview.js.map +0 -1
- package/lib/Utils/logger.d.ts.map +0 -1
- package/lib/Utils/logger.js.map +0 -1
- package/lib/Utils/lt-hash.d.ts.map +0 -1
- package/lib/Utils/lt-hash.js.map +0 -1
- package/lib/Utils/make-mutex.d.ts.map +0 -1
- package/lib/Utils/make-mutex.js.map +0 -1
- package/lib/Utils/messages-media.d.ts.map +0 -1
- package/lib/Utils/messages-media.js.map +0 -1
- package/lib/Utils/messages.d.ts.map +0 -1
- package/lib/Utils/messages.js.map +0 -1
- package/lib/Utils/noise-handler.d.ts.map +0 -1
- package/lib/Utils/noise-handler.js.map +0 -1
- package/lib/Utils/process-message.d.ts.map +0 -1
- package/lib/Utils/process-message.js.map +0 -1
- package/lib/Utils/signal.d.ts.map +0 -1
- package/lib/Utils/signal.js.map +0 -1
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +0 -1
- package/lib/Utils/use-multi-file-auth-state.js.map +0 -1
- package/lib/Utils/validate-connection.d.ts.map +0 -1
- package/lib/Utils/validate-connection.js.map +0 -1
- package/lib/WABinary/constants.d.ts.map +0 -1
- package/lib/WABinary/constants.js.map +0 -1
- package/lib/WABinary/decode.d.ts.map +0 -1
- package/lib/WABinary/decode.js.map +0 -1
- package/lib/WABinary/encode.d.ts.map +0 -1
- package/lib/WABinary/encode.js.map +0 -1
- package/lib/WABinary/generic-utils.d.ts.map +0 -1
- package/lib/WABinary/generic-utils.js.map +0 -1
- package/lib/WABinary/index.d.ts.map +0 -1
- package/lib/WABinary/index.js.map +0 -1
- package/lib/WABinary/jid-utils.d.ts.map +0 -1
- package/lib/WABinary/jid-utils.js.map +0 -1
- package/lib/WABinary/types.d.ts.map +0 -1
- package/lib/WABinary/types.js.map +0 -1
- package/lib/WAM/BinaryInfo.d.ts.map +0 -1
- package/lib/WAM/BinaryInfo.js.map +0 -1
- package/lib/WAM/constants.d.ts.map +0 -1
- package/lib/WAM/constants.js.map +0 -1
- package/lib/WAM/encode.d.ts.map +0 -1
- package/lib/WAM/encode.js.map +0 -1
- package/lib/WAM/index.d.ts.map +0 -1
- package/lib/WAM/index.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/index.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/index.js.map +0 -1
- package/lib/WAUSync/USyncQuery.d.ts.map +0 -1
- package/lib/WAUSync/USyncQuery.js.map +0 -1
- package/lib/WAUSync/USyncUser.d.ts.map +0 -1
- package/lib/WAUSync/USyncUser.js.map +0 -1
- package/lib/WAUSync/index.d.ts.map +0 -1
- package/lib/WAUSync/index.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
package/lib/Utils/messages.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
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;
|
|
8
|
+
const boom_1 = require("@hapi/boom");
|
|
9
|
+
const axios_1 = __importDefault(require("axios"));
|
|
10
|
+
const crypto_1 = require("crypto");
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const WAProto_1 = require("../../WAProto");
|
|
13
|
+
const Defaults_1 = require("../Defaults");
|
|
14
|
+
const Types_1 = require("../Types");
|
|
15
|
+
const WABinary_1 = require("../WABinary");
|
|
16
|
+
const crypto_2 = require("./crypto");
|
|
17
|
+
const generics_1 = require("./generics");
|
|
18
|
+
const messages_media_1 = require("./messages-media");
|
|
13
19
|
const MIMETYPE_MAP = {
|
|
14
20
|
image: 'image/jpeg',
|
|
15
21
|
video: 'video/mp4',
|
|
@@ -19,20 +25,21 @@ const MIMETYPE_MAP = {
|
|
|
19
25
|
'product-catalog-image': 'image/jpeg'
|
|
20
26
|
};
|
|
21
27
|
const MessageTypeProto = {
|
|
22
|
-
image: WAProto.Message.ImageMessage,
|
|
23
|
-
video: WAProto.Message.VideoMessage,
|
|
24
|
-
audio: WAProto.Message.AudioMessage,
|
|
25
|
-
sticker: WAProto.Message.StickerMessage,
|
|
26
|
-
document: WAProto.Message.DocumentMessage
|
|
28
|
+
image: Types_1.WAProto.Message.ImageMessage,
|
|
29
|
+
video: Types_1.WAProto.Message.VideoMessage,
|
|
30
|
+
audio: Types_1.WAProto.Message.AudioMessage,
|
|
31
|
+
sticker: Types_1.WAProto.Message.StickerMessage,
|
|
32
|
+
document: Types_1.WAProto.Message.DocumentMessage
|
|
27
33
|
};
|
|
28
34
|
/**
|
|
29
35
|
* Uses a regex to test whether the string contains a URL, and returns the URL if it does.
|
|
30
36
|
* @param text eg. hello https://google.com
|
|
31
37
|
* @returns the URL, eg. https://google.com
|
|
32
38
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
|
|
40
|
+
exports.extractUrlFromText = extractUrlFromText;
|
|
41
|
+
const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
|
|
42
|
+
const url = (0, exports.extractUrlFromText)(text);
|
|
36
43
|
if (!!getUrlInfo && url) {
|
|
37
44
|
try {
|
|
38
45
|
const urlInfo = await getUrlInfo(url);
|
|
@@ -40,10 +47,11 @@ export const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) =>
|
|
|
40
47
|
}
|
|
41
48
|
catch (error) {
|
|
42
49
|
// ignore if fails
|
|
43
|
-
logger
|
|
50
|
+
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
|
|
44
51
|
}
|
|
45
52
|
}
|
|
46
53
|
};
|
|
54
|
+
exports.generateLinkPreviewIfRequired = generateLinkPreviewIfRequired;
|
|
47
55
|
const assertColor = async (color) => {
|
|
48
56
|
let assertedColor;
|
|
49
57
|
if (typeof color === 'number') {
|
|
@@ -58,23 +66,22 @@ const assertColor = async (color) => {
|
|
|
58
66
|
return assertedColor;
|
|
59
67
|
}
|
|
60
68
|
};
|
|
61
|
-
|
|
69
|
+
const prepareWAMessageMedia = async (message, options) => {
|
|
62
70
|
const logger = options.logger;
|
|
63
71
|
let mediaType;
|
|
64
|
-
for (const key of MEDIA_KEYS) {
|
|
72
|
+
for (const key of Defaults_1.MEDIA_KEYS) {
|
|
65
73
|
if (key in message) {
|
|
66
74
|
mediaType = key;
|
|
67
75
|
}
|
|
68
76
|
}
|
|
69
77
|
if (!mediaType) {
|
|
70
|
-
throw new Boom('Invalid media type', { statusCode: 400 });
|
|
78
|
+
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
71
79
|
}
|
|
72
80
|
const uploadData = {
|
|
73
81
|
...message,
|
|
74
82
|
media: message[mediaType]
|
|
75
83
|
};
|
|
76
84
|
delete uploadData[mediaType];
|
|
77
|
-
// check if cacheable + generate cache key
|
|
78
85
|
const cacheableKey = typeof uploadData.media === 'object' &&
|
|
79
86
|
'url' in uploadData.media &&
|
|
80
87
|
!!uploadData.media.url &&
|
|
@@ -89,26 +96,25 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
89
96
|
if (cacheableKey) {
|
|
90
97
|
const mediaBuff = options.mediaCache.get(cacheableKey);
|
|
91
98
|
if (mediaBuff) {
|
|
92
|
-
logger
|
|
93
|
-
const obj = WAProto.Message.decode(mediaBuff);
|
|
99
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'got media cache hit');
|
|
100
|
+
const obj = Types_1.WAProto.Message.decode(mediaBuff);
|
|
94
101
|
const key = `${mediaType}Message`;
|
|
95
102
|
Object.assign(obj[key], { ...uploadData, media: undefined });
|
|
96
103
|
return obj;
|
|
97
104
|
}
|
|
98
105
|
}
|
|
99
|
-
const isNewsletter = !!options.jid && isJidNewsletter(options.jid);
|
|
106
|
+
const isNewsletter = !!options.jid && (0, WABinary_1.isJidNewsletter)(options.jid);
|
|
100
107
|
if (isNewsletter) {
|
|
101
|
-
logger
|
|
102
|
-
const { filePath, fileSha256, fileLength } = await getRawMediaUploadData(uploadData.media, options.mediaTypeOverride || mediaType, logger);
|
|
108
|
+
logger === null || logger === void 0 ? void 0 : logger.info({ key: cacheableKey }, 'Preparing raw media for newsletter');
|
|
109
|
+
const { filePath, fileSha256, fileLength } = await (0, messages_media_1.getRawMediaUploadData)(uploadData.media, options.mediaTypeOverride || mediaType, logger);
|
|
103
110
|
const fileSha256B64 = fileSha256.toString('base64');
|
|
104
111
|
const { mediaUrl, directPath } = await options.upload(filePath, {
|
|
105
112
|
fileEncSha256B64: fileSha256B64,
|
|
106
113
|
mediaType: mediaType,
|
|
107
114
|
timeoutMs: options.mediaUploadTimeoutMs
|
|
108
115
|
});
|
|
109
|
-
await
|
|
110
|
-
const obj = WAProto.Message.fromObject({
|
|
111
|
-
// todo: add more support here
|
|
116
|
+
await fs_1.promises.unlink(filePath);
|
|
117
|
+
const obj = Types_1.WAProto.Message.fromObject({
|
|
112
118
|
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
113
119
|
url: mediaUrl,
|
|
114
120
|
directPath,
|
|
@@ -123,8 +129,8 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
123
129
|
delete obj.videoMessage;
|
|
124
130
|
}
|
|
125
131
|
if (cacheableKey) {
|
|
126
|
-
logger
|
|
127
|
-
options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
|
|
132
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
|
|
133
|
+
options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
|
|
128
134
|
}
|
|
129
135
|
return obj;
|
|
130
136
|
}
|
|
@@ -133,7 +139,7 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
133
139
|
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
|
|
134
140
|
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
135
141
|
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
|
|
136
|
-
const { mediaKey, encFilePath, originalFilePath, fileEncSha256, fileSha256, fileLength } = await encryptedStream(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
142
|
+
const { mediaKey, encFilePath, originalFilePath, fileEncSha256, fileSha256, fileLength } = await (0, messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
137
143
|
logger,
|
|
138
144
|
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
139
145
|
opts: options.options
|
|
@@ -146,51 +152,51 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
146
152
|
mediaType,
|
|
147
153
|
timeoutMs: options.mediaUploadTimeoutMs
|
|
148
154
|
});
|
|
149
|
-
logger
|
|
155
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ mediaType, cacheableKey }, 'uploaded media');
|
|
150
156
|
return result;
|
|
151
157
|
})(),
|
|
152
158
|
(async () => {
|
|
153
159
|
try {
|
|
154
160
|
if (requiresThumbnailComputation) {
|
|
155
|
-
const { thumbnail, originalImageDimensions } = await generateThumbnail(originalFilePath, mediaType, options);
|
|
161
|
+
const { thumbnail, originalImageDimensions } = await (0, messages_media_1.generateThumbnail)(originalFilePath, mediaType, options);
|
|
156
162
|
uploadData.jpegThumbnail = thumbnail;
|
|
157
163
|
if (!uploadData.width && originalImageDimensions) {
|
|
158
164
|
uploadData.width = originalImageDimensions.width;
|
|
159
165
|
uploadData.height = originalImageDimensions.height;
|
|
160
|
-
logger
|
|
166
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('set dimensions');
|
|
161
167
|
}
|
|
162
|
-
logger
|
|
168
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('generated thumbnail');
|
|
163
169
|
}
|
|
164
170
|
if (requiresDurationComputation) {
|
|
165
|
-
uploadData.seconds = await getAudioDuration(originalFilePath);
|
|
166
|
-
logger
|
|
171
|
+
uploadData.seconds = await (0, messages_media_1.getAudioDuration)(originalFilePath);
|
|
172
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('computed audio duration');
|
|
167
173
|
}
|
|
168
174
|
if (requiresWaveformProcessing) {
|
|
169
|
-
uploadData.waveform = await getAudioWaveform(originalFilePath, logger);
|
|
170
|
-
logger
|
|
175
|
+
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(originalFilePath, logger);
|
|
176
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
171
177
|
}
|
|
172
178
|
if (requiresAudioBackground) {
|
|
173
179
|
uploadData.backgroundArgb = await assertColor(options.backgroundColor);
|
|
174
|
-
logger
|
|
180
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
|
|
175
181
|
}
|
|
176
182
|
}
|
|
177
183
|
catch (error) {
|
|
178
|
-
logger
|
|
184
|
+
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
|
|
179
185
|
}
|
|
180
186
|
})()
|
|
181
187
|
]).finally(async () => {
|
|
182
188
|
try {
|
|
183
|
-
await
|
|
189
|
+
await fs_1.promises.unlink(encFilePath);
|
|
184
190
|
if (originalFilePath) {
|
|
185
|
-
await
|
|
191
|
+
await fs_1.promises.unlink(originalFilePath);
|
|
186
192
|
}
|
|
187
|
-
logger
|
|
193
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
|
|
188
194
|
}
|
|
189
195
|
catch (error) {
|
|
190
|
-
logger
|
|
196
|
+
logger === null || logger === void 0 ? void 0 : logger.warn('failed to remove tmp file');
|
|
191
197
|
}
|
|
192
198
|
});
|
|
193
|
-
const obj = WAProto.Message.fromObject({
|
|
199
|
+
const obj = Types_1.WAProto.Message.fromObject({
|
|
194
200
|
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
195
201
|
url: mediaUrl,
|
|
196
202
|
directPath,
|
|
@@ -198,7 +204,7 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
198
204
|
fileEncSha256,
|
|
199
205
|
fileSha256,
|
|
200
206
|
fileLength,
|
|
201
|
-
mediaKeyTimestamp: unixTimestampSeconds(),
|
|
207
|
+
mediaKeyTimestamp: (0, generics_1.unixTimestampSeconds)(),
|
|
202
208
|
...uploadData,
|
|
203
209
|
media: undefined
|
|
204
210
|
})
|
|
@@ -208,63 +214,67 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
208
214
|
delete obj.videoMessage;
|
|
209
215
|
}
|
|
210
216
|
if (cacheableKey) {
|
|
211
|
-
logger
|
|
212
|
-
options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
|
|
217
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
|
|
218
|
+
options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
|
|
213
219
|
}
|
|
214
220
|
return obj;
|
|
215
221
|
};
|
|
216
|
-
|
|
222
|
+
exports.prepareWAMessageMedia = prepareWAMessageMedia;
|
|
223
|
+
const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
217
224
|
ephemeralExpiration = ephemeralExpiration || 0;
|
|
218
225
|
const content = {
|
|
219
226
|
ephemeralMessage: {
|
|
220
227
|
message: {
|
|
221
228
|
protocolMessage: {
|
|
222
|
-
type: WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
|
|
229
|
+
type: Types_1.WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
|
|
223
230
|
ephemeralExpiration
|
|
224
231
|
}
|
|
225
232
|
}
|
|
226
233
|
}
|
|
227
234
|
};
|
|
228
|
-
return WAProto.Message.fromObject(content);
|
|
235
|
+
return Types_1.WAProto.Message.fromObject(content);
|
|
229
236
|
};
|
|
237
|
+
exports.prepareDisappearingMessageSettingContent = prepareDisappearingMessageSettingContent;
|
|
230
238
|
/**
|
|
231
239
|
* Generate forwarded message content like WA does
|
|
232
240
|
* @param message the message to forward
|
|
233
241
|
* @param options.forceForward will show the message as forwarded even if it is from you
|
|
234
242
|
*/
|
|
235
|
-
|
|
243
|
+
const generateForwardMessageContent = (message, forceForward) => {
|
|
244
|
+
var _a;
|
|
236
245
|
let content = message.message;
|
|
237
246
|
if (!content) {
|
|
238
|
-
throw new Boom('no content in message', { statusCode: 400 });
|
|
247
|
+
throw new boom_1.Boom('no content in message', { statusCode: 400 });
|
|
239
248
|
}
|
|
240
249
|
// hacky copy
|
|
241
|
-
content = normalizeMessageContent(content);
|
|
242
|
-
content = proto.Message.decode(proto.Message.encode(content).finish());
|
|
250
|
+
content = (0, exports.normalizeMessageContent)(content);
|
|
251
|
+
content = WAProto_1.proto.Message.decode(WAProto_1.proto.Message.encode(content).finish());
|
|
243
252
|
let key = Object.keys(content)[0];
|
|
244
|
-
let score = content
|
|
253
|
+
let score = ((_a = content[key].contextInfo) === null || _a === void 0 ? void 0 : _a.forwardingScore) || 0;
|
|
245
254
|
score += message.key.fromMe && !forceForward ? 0 : 1;
|
|
246
255
|
if (key === 'conversation') {
|
|
247
256
|
content.extendedTextMessage = { text: content[key] };
|
|
248
257
|
delete content.conversation;
|
|
249
258
|
key = 'extendedTextMessage';
|
|
250
259
|
}
|
|
251
|
-
const key_ = content?.[key];
|
|
252
260
|
if (score > 0) {
|
|
253
|
-
|
|
261
|
+
content[key].contextInfo = { forwardingScore: score, isForwarded: true };
|
|
254
262
|
}
|
|
255
263
|
else {
|
|
256
|
-
|
|
264
|
+
content[key].contextInfo = {};
|
|
257
265
|
}
|
|
258
266
|
return content;
|
|
259
267
|
};
|
|
260
|
-
|
|
261
|
-
|
|
268
|
+
exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
269
|
+
const generateWAMessageContent = async (message, options) => {
|
|
270
|
+
var _a;
|
|
271
|
+
var _b, _c;
|
|
262
272
|
let m = {};
|
|
263
273
|
if ('text' in message) {
|
|
264
274
|
const extContent = { text: message.text };
|
|
265
275
|
let urlInfo = message.linkPreview;
|
|
266
276
|
if (typeof urlInfo === 'undefined') {
|
|
267
|
-
urlInfo = await generateLinkPreviewIfRequired(message.text, options.getUrlInfo, options.logger);
|
|
277
|
+
urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
|
|
268
278
|
}
|
|
269
279
|
if (urlInfo) {
|
|
270
280
|
extContent.matchedText = urlInfo['matched-text'];
|
|
@@ -294,40 +304,40 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
294
304
|
else if ('contacts' in message) {
|
|
295
305
|
const contactLen = message.contacts.contacts.length;
|
|
296
306
|
if (!contactLen) {
|
|
297
|
-
throw new Boom('require atleast 1 contact', { statusCode: 400 });
|
|
307
|
+
throw new boom_1.Boom('require atleast 1 contact', { statusCode: 400 });
|
|
298
308
|
}
|
|
299
309
|
if (contactLen === 1) {
|
|
300
|
-
m.contactMessage = WAProto.Message.ContactMessage.fromObject(message.contacts.contacts[0]);
|
|
310
|
+
m.contactMessage = Types_1.WAProto.Message.ContactMessage.fromObject(message.contacts.contacts[0]);
|
|
301
311
|
}
|
|
302
312
|
else {
|
|
303
|
-
m.contactsArrayMessage = WAProto.Message.ContactsArrayMessage.fromObject(message.contacts);
|
|
313
|
+
m.contactsArrayMessage = Types_1.WAProto.Message.ContactsArrayMessage.fromObject(message.contacts);
|
|
304
314
|
}
|
|
305
315
|
}
|
|
306
316
|
else if ('location' in message) {
|
|
307
|
-
m.locationMessage = WAProto.Message.LocationMessage.fromObject(message.location);
|
|
317
|
+
m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
|
|
308
318
|
}
|
|
309
319
|
else if ('react' in message) {
|
|
310
320
|
if (!message.react.senderTimestampMs) {
|
|
311
321
|
message.react.senderTimestampMs = Date.now();
|
|
312
322
|
}
|
|
313
|
-
m.reactionMessage = WAProto.Message.ReactionMessage.fromObject(message.react);
|
|
323
|
+
m.reactionMessage = Types_1.WAProto.Message.ReactionMessage.fromObject(message.react);
|
|
314
324
|
}
|
|
315
325
|
else if ('delete' in message) {
|
|
316
326
|
m.protocolMessage = {
|
|
317
327
|
key: message.delete,
|
|
318
|
-
type: WAProto.Message.ProtocolMessage.Type.REVOKE
|
|
328
|
+
type: Types_1.WAProto.Message.ProtocolMessage.Type.REVOKE
|
|
319
329
|
};
|
|
320
330
|
}
|
|
321
331
|
else if ('forward' in message) {
|
|
322
|
-
m = generateForwardMessageContent(message.forward, message.force);
|
|
332
|
+
m = (0, exports.generateForwardMessageContent)(message.forward, message.force);
|
|
323
333
|
}
|
|
324
334
|
else if ('disappearingMessagesInChat' in message) {
|
|
325
335
|
const exp = typeof message.disappearingMessagesInChat === 'boolean'
|
|
326
336
|
? message.disappearingMessagesInChat
|
|
327
|
-
? WA_DEFAULT_EPHEMERAL
|
|
337
|
+
? Defaults_1.WA_DEFAULT_EPHEMERAL
|
|
328
338
|
: 0
|
|
329
339
|
: message.disappearingMessagesInChat;
|
|
330
|
-
m = prepareDisappearingMessageSettingContent(exp);
|
|
340
|
+
m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
|
|
331
341
|
}
|
|
332
342
|
else if ('groupInvite' in message) {
|
|
333
343
|
m.groupInviteMessage = {};
|
|
@@ -341,7 +351,7 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
341
351
|
if (options.getProfilePicUrl) {
|
|
342
352
|
const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
|
|
343
353
|
if (pfpUrl) {
|
|
344
|
-
const resp = await
|
|
354
|
+
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
|
345
355
|
if (resp.status === 200) {
|
|
346
356
|
m.groupInviteMessage.jpegThumbnail = resp.data;
|
|
347
357
|
}
|
|
@@ -369,18 +379,18 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
369
379
|
m.buttonsResponseMessage = {
|
|
370
380
|
selectedButtonId: message.buttonReply.id,
|
|
371
381
|
selectedDisplayText: message.buttonReply.displayText,
|
|
372
|
-
type: proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT
|
|
382
|
+
type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT
|
|
373
383
|
};
|
|
374
384
|
break;
|
|
375
385
|
}
|
|
376
386
|
}
|
|
377
387
|
else if ('ptv' in message && message.ptv) {
|
|
378
|
-
const { videoMessage } = await prepareWAMessageMedia({ video: message.video }, options);
|
|
388
|
+
const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
|
|
379
389
|
m.ptvMessage = videoMessage;
|
|
380
390
|
}
|
|
381
391
|
else if ('product' in message) {
|
|
382
|
-
const { imageMessage } = await prepareWAMessageMedia({ image: message.product.productImage }, options);
|
|
383
|
-
m.productMessage = WAProto.Message.ProductMessage.fromObject({
|
|
392
|
+
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
|
|
393
|
+
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
|
|
384
394
|
...message,
|
|
385
395
|
product: {
|
|
386
396
|
...message.product,
|
|
@@ -392,19 +402,19 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
392
402
|
m.listResponseMessage = { ...message.listReply };
|
|
393
403
|
}
|
|
394
404
|
else if ('poll' in message) {
|
|
395
|
-
(
|
|
396
|
-
(
|
|
405
|
+
(_b = message.poll).selectableCount || (_b.selectableCount = 0);
|
|
406
|
+
(_c = message.poll).toAnnouncementGroup || (_c.toAnnouncementGroup = false);
|
|
397
407
|
if (!Array.isArray(message.poll.values)) {
|
|
398
|
-
throw new Boom('Invalid poll values', { statusCode: 400 });
|
|
408
|
+
throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
|
|
399
409
|
}
|
|
400
410
|
if (message.poll.selectableCount < 0 || message.poll.selectableCount > message.poll.values.length) {
|
|
401
|
-
throw new Boom(`poll.selectableCount in poll should be >= 0 and <= ${message.poll.values.length}`, {
|
|
411
|
+
throw new boom_1.Boom(`poll.selectableCount in poll should be >= 0 and <= ${message.poll.values.length}`, {
|
|
402
412
|
statusCode: 400
|
|
403
413
|
});
|
|
404
414
|
}
|
|
405
415
|
m.messageContextInfo = {
|
|
406
416
|
// encKey
|
|
407
|
-
messageSecret: message.poll.messageSecret || randomBytes(32)
|
|
417
|
+
messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32)
|
|
408
418
|
};
|
|
409
419
|
const pollCreationMessage = {
|
|
410
420
|
name: message.poll.name,
|
|
@@ -428,29 +438,22 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
428
438
|
}
|
|
429
439
|
else if ('sharePhoneNumber' in message) {
|
|
430
440
|
m.protocolMessage = {
|
|
431
|
-
type: proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
|
|
441
|
+
type: WAProto_1.proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
|
|
432
442
|
};
|
|
433
443
|
}
|
|
434
444
|
else if ('requestPhoneNumber' in message) {
|
|
435
445
|
m.requestPhoneNumberMessage = {};
|
|
436
446
|
}
|
|
437
447
|
else {
|
|
438
|
-
m = await prepareWAMessageMedia(message, options);
|
|
448
|
+
m = await (0, exports.prepareWAMessageMedia)(message, options);
|
|
439
449
|
}
|
|
440
450
|
if ('viewOnce' in message && !!message.viewOnce) {
|
|
441
451
|
m = { viewOnceMessage: { message: m } };
|
|
442
452
|
}
|
|
443
|
-
if ('mentions' in message && message.mentions
|
|
444
|
-
const messageType = Object.keys(m)
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
key.contextInfo.mentionedJid = message.mentions;
|
|
448
|
-
}
|
|
449
|
-
else if (key) {
|
|
450
|
-
key.contextInfo = {
|
|
451
|
-
mentionedJid: message.mentions
|
|
452
|
-
};
|
|
453
|
-
}
|
|
453
|
+
if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
454
|
+
const [messageType] = Object.keys(m);
|
|
455
|
+
m[messageType].contextInfo = m[messageType] || {};
|
|
456
|
+
m[messageType].contextInfo.mentionedJid = message.mentions;
|
|
454
457
|
}
|
|
455
458
|
if ('edit' in message) {
|
|
456
459
|
m = {
|
|
@@ -458,46 +461,42 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
458
461
|
key: message.edit,
|
|
459
462
|
editedMessage: m,
|
|
460
463
|
timestampMs: Date.now(),
|
|
461
|
-
type: WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
|
|
464
|
+
type: Types_1.WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
|
|
462
465
|
}
|
|
463
466
|
};
|
|
464
467
|
}
|
|
465
468
|
if ('contextInfo' in message && !!message.contextInfo) {
|
|
466
|
-
const messageType = Object.keys(m)
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
key.contextInfo = { ...key.contextInfo, ...message.contextInfo };
|
|
470
|
-
}
|
|
471
|
-
else if (key) {
|
|
472
|
-
key.contextInfo = message.contextInfo;
|
|
473
|
-
}
|
|
469
|
+
const [messageType] = Object.keys(m);
|
|
470
|
+
m[messageType] = m[messageType] || {};
|
|
471
|
+
m[messageType].contextInfo = message.contextInfo;
|
|
474
472
|
}
|
|
475
|
-
return WAProto.Message.fromObject(m);
|
|
473
|
+
return Types_1.WAProto.Message.fromObject(m);
|
|
476
474
|
};
|
|
477
|
-
|
|
475
|
+
exports.generateWAMessageContent = generateWAMessageContent;
|
|
476
|
+
const generateWAMessageFromContent = (jid, message, options) => {
|
|
478
477
|
// set timestamp to now
|
|
479
478
|
// if not specified
|
|
480
479
|
if (!options.timestamp) {
|
|
481
480
|
options.timestamp = new Date();
|
|
482
481
|
}
|
|
483
|
-
const innerMessage = normalizeMessageContent(message);
|
|
484
|
-
const key = getContentType(innerMessage);
|
|
485
|
-
const timestamp = unixTimestampSeconds(options.timestamp);
|
|
482
|
+
const innerMessage = (0, exports.normalizeMessageContent)(message);
|
|
483
|
+
const key = (0, exports.getContentType)(innerMessage);
|
|
484
|
+
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
|
486
485
|
const { quoted, userJid, contextInfo } = options;
|
|
487
|
-
if (quoted && !isJidNewsletter(jid)) {
|
|
486
|
+
if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
|
|
488
487
|
const participant = quoted.key.fromMe
|
|
489
488
|
? userJid
|
|
490
489
|
: quoted.participant || quoted.key.participant || quoted.key.remoteJid;
|
|
491
|
-
let quotedMsg = normalizeMessageContent(quoted.message);
|
|
492
|
-
const msgType = getContentType(quotedMsg);
|
|
490
|
+
let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
|
|
491
|
+
const msgType = (0, exports.getContentType)(quotedMsg);
|
|
493
492
|
// strip any redundant properties
|
|
494
|
-
quotedMsg = proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
|
|
493
|
+
quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
|
|
495
494
|
const quotedContent = quotedMsg[msgType];
|
|
496
495
|
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
|
497
496
|
delete quotedContent.contextInfo;
|
|
498
497
|
}
|
|
499
|
-
const contextInfo =
|
|
500
|
-
contextInfo.participant = jidNormalizedUser(participant);
|
|
498
|
+
const contextInfo = innerMessage[key].contextInfo || {};
|
|
499
|
+
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
|
501
500
|
contextInfo.stanzaId = quoted.key.id;
|
|
502
501
|
contextInfo.quotedMessage = quotedMsg;
|
|
503
502
|
// if a participant is quoted, then it must be a group
|
|
@@ -505,71 +504,69 @@ export const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
505
504
|
if (jid !== quoted.key.remoteJid) {
|
|
506
505
|
contextInfo.remoteJid = quoted.key.remoteJid;
|
|
507
506
|
}
|
|
508
|
-
|
|
509
|
-
/* @ts-ignore */
|
|
510
|
-
innerMessage[key].contextInfo = contextInfo;
|
|
511
|
-
}
|
|
507
|
+
innerMessage[key].contextInfo = contextInfo;
|
|
512
508
|
}
|
|
513
|
-
if (contextInfo
|
|
514
|
-
/* @ts-ignore */
|
|
509
|
+
if (contextInfo) {
|
|
515
510
|
message[key].contextInfo = {
|
|
516
|
-
/* @ts-ignore */
|
|
517
511
|
...(message[key].contextInfo || {}),
|
|
518
512
|
...contextInfo
|
|
519
513
|
};
|
|
520
514
|
}
|
|
521
515
|
if (
|
|
522
516
|
// if we want to send a disappearing message
|
|
523
|
-
!!options
|
|
517
|
+
!!(options === null || options === void 0 ? void 0 : options.ephemeralExpiration) &&
|
|
524
518
|
// and it's not a protocol message -- delete, toggle disappear message
|
|
525
519
|
key !== 'protocolMessage' &&
|
|
526
520
|
// already not converted to disappearing message
|
|
527
521
|
key !== 'ephemeralMessage' &&
|
|
528
522
|
// newsletters don't support ephemeral messages
|
|
529
|
-
!isJidNewsletter(jid)) {
|
|
530
|
-
/* @ts-ignore */
|
|
523
|
+
!(0, WABinary_1.isJidNewsletter)(jid)) {
|
|
531
524
|
innerMessage[key].contextInfo = {
|
|
532
525
|
...(innerMessage[key].contextInfo || {}),
|
|
533
|
-
expiration: options.ephemeralExpiration || WA_DEFAULT_EPHEMERAL
|
|
526
|
+
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL
|
|
534
527
|
//ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
|
|
535
528
|
};
|
|
536
529
|
}
|
|
537
|
-
message = WAProto.Message.fromObject(message);
|
|
530
|
+
message = Types_1.WAProto.Message.fromObject(message);
|
|
538
531
|
const messageJSON = {
|
|
539
532
|
key: {
|
|
540
533
|
remoteJid: jid,
|
|
541
534
|
fromMe: true,
|
|
542
|
-
id: options
|
|
535
|
+
id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageIDV2)()
|
|
543
536
|
},
|
|
544
537
|
message: message,
|
|
545
538
|
messageTimestamp: timestamp,
|
|
546
539
|
messageStubParameters: [],
|
|
547
|
-
participant: isJidGroup(jid) || isJidStatusBroadcast(jid) ? userJid : undefined,
|
|
548
|
-
status: WAMessageStatus.PENDING
|
|
540
|
+
participant: (0, WABinary_1.isJidGroup)(jid) || (0, WABinary_1.isJidStatusBroadcast)(jid) ? userJid : undefined,
|
|
541
|
+
status: Types_1.WAMessageStatus.PENDING
|
|
549
542
|
};
|
|
550
|
-
return WAProto.WebMessageInfo.fromObject(messageJSON);
|
|
543
|
+
return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
|
|
551
544
|
};
|
|
552
|
-
|
|
545
|
+
exports.generateWAMessageFromContent = generateWAMessageFromContent;
|
|
546
|
+
const generateWAMessage = async (jid, content, options) => {
|
|
547
|
+
var _a;
|
|
553
548
|
// ensure msg ID is with every log
|
|
554
|
-
options.logger = options
|
|
549
|
+
options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
|
|
555
550
|
// Pass jid in the options to generateWAMessageContent
|
|
556
|
-
return generateWAMessageFromContent(jid, await generateWAMessageContent(content, { ...options, jid }), options);
|
|
551
|
+
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { ...options, jid }), options);
|
|
557
552
|
};
|
|
553
|
+
exports.generateWAMessage = generateWAMessage;
|
|
558
554
|
/** Get the key to access the true type of content */
|
|
559
|
-
|
|
555
|
+
const getContentType = (content) => {
|
|
560
556
|
if (content) {
|
|
561
557
|
const keys = Object.keys(content);
|
|
562
558
|
const key = keys.find(k => (k === 'conversation' || k.includes('Message')) && k !== 'senderKeyDistributionMessage');
|
|
563
559
|
return key;
|
|
564
560
|
}
|
|
565
561
|
};
|
|
562
|
+
exports.getContentType = getContentType;
|
|
566
563
|
/**
|
|
567
564
|
* Normalizes ephemeral, view once messages to regular message content
|
|
568
565
|
* Eg. image messages in ephemeral messages, in view once messages etc.
|
|
569
566
|
* @param content
|
|
570
567
|
* @returns
|
|
571
568
|
*/
|
|
572
|
-
|
|
569
|
+
const normalizeMessageContent = (content) => {
|
|
573
570
|
if (!content) {
|
|
574
571
|
return undefined;
|
|
575
572
|
}
|
|
@@ -583,19 +580,21 @@ export const normalizeMessageContent = (content) => {
|
|
|
583
580
|
}
|
|
584
581
|
return content;
|
|
585
582
|
function getFutureProofMessage(message) {
|
|
586
|
-
return (message
|
|
587
|
-
message
|
|
588
|
-
message
|
|
589
|
-
message
|
|
590
|
-
message
|
|
591
|
-
message
|
|
583
|
+
return ((message === null || message === void 0 ? void 0 : message.ephemeralMessage) ||
|
|
584
|
+
(message === null || message === void 0 ? void 0 : message.viewOnceMessage) ||
|
|
585
|
+
(message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage) ||
|
|
586
|
+
(message === null || message === void 0 ? void 0 : message.viewOnceMessageV2) ||
|
|
587
|
+
(message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension) ||
|
|
588
|
+
(message === null || message === void 0 ? void 0 : message.editedMessage));
|
|
592
589
|
}
|
|
593
590
|
};
|
|
591
|
+
exports.normalizeMessageContent = normalizeMessageContent;
|
|
594
592
|
/**
|
|
595
593
|
* Extract the true message content from a message
|
|
596
594
|
* Eg. extracts the inner message from a disappearing message/view once message
|
|
597
595
|
*/
|
|
598
|
-
|
|
596
|
+
const extractMessageContent = (content) => {
|
|
597
|
+
var _a, _b, _c, _d, _e, _f;
|
|
599
598
|
const extractFromTemplateMessage = (msg) => {
|
|
600
599
|
if (msg.imageMessage) {
|
|
601
600
|
return { imageMessage: msg.imageMessage };
|
|
@@ -615,25 +614,26 @@ export const extractMessageContent = (content) => {
|
|
|
615
614
|
};
|
|
616
615
|
}
|
|
617
616
|
};
|
|
618
|
-
content = normalizeMessageContent(content);
|
|
619
|
-
if (content
|
|
617
|
+
content = (0, exports.normalizeMessageContent)(content);
|
|
618
|
+
if (content === null || content === void 0 ? void 0 : content.buttonsMessage) {
|
|
620
619
|
return extractFromTemplateMessage(content.buttonsMessage);
|
|
621
620
|
}
|
|
622
|
-
if (content
|
|
623
|
-
return extractFromTemplateMessage(content
|
|
621
|
+
if ((_a = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _a === void 0 ? void 0 : _a.hydratedFourRowTemplate) {
|
|
622
|
+
return extractFromTemplateMessage((_b = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _b === void 0 ? void 0 : _b.hydratedFourRowTemplate);
|
|
624
623
|
}
|
|
625
|
-
if (content
|
|
626
|
-
return extractFromTemplateMessage(content
|
|
624
|
+
if ((_c = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _c === void 0 ? void 0 : _c.hydratedTemplate) {
|
|
625
|
+
return extractFromTemplateMessage((_d = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _d === void 0 ? void 0 : _d.hydratedTemplate);
|
|
627
626
|
}
|
|
628
|
-
if (content
|
|
629
|
-
return extractFromTemplateMessage(content
|
|
627
|
+
if ((_e = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _e === void 0 ? void 0 : _e.fourRowTemplate) {
|
|
628
|
+
return extractFromTemplateMessage((_f = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _f === void 0 ? void 0 : _f.fourRowTemplate);
|
|
630
629
|
}
|
|
631
630
|
return content;
|
|
632
631
|
};
|
|
632
|
+
exports.extractMessageContent = extractMessageContent;
|
|
633
633
|
/**
|
|
634
634
|
* Returns the device predicted by message ID
|
|
635
635
|
*/
|
|
636
|
-
|
|
636
|
+
const getDevice = (id) => /^3A.{18}$/.test(id)
|
|
637
637
|
? 'ios'
|
|
638
638
|
: /^3E.{20}$/.test(id)
|
|
639
639
|
? 'web'
|
|
@@ -642,8 +642,9 @@ export const getDevice = (id) => /^3A.{18}$/.test(id)
|
|
|
642
642
|
: /^(3F|.{18}$)/.test(id)
|
|
643
643
|
? 'desktop'
|
|
644
644
|
: 'unknown';
|
|
645
|
+
exports.getDevice = getDevice;
|
|
645
646
|
/** Upserts a receipt in the message */
|
|
646
|
-
|
|
647
|
+
const updateMessageWithReceipt = (msg, receipt) => {
|
|
647
648
|
msg.userReceipt = msg.userReceipt || [];
|
|
648
649
|
const recp = msg.userReceipt.find(m => m.userJid === receipt.userJid);
|
|
649
650
|
if (recp) {
|
|
@@ -653,36 +654,41 @@ export const updateMessageWithReceipt = (msg, receipt) => {
|
|
|
653
654
|
msg.userReceipt.push(receipt);
|
|
654
655
|
}
|
|
655
656
|
};
|
|
657
|
+
exports.updateMessageWithReceipt = updateMessageWithReceipt;
|
|
656
658
|
/** Update the message with a new reaction */
|
|
657
|
-
|
|
658
|
-
const authorID = getKeyAuthor(reaction.key);
|
|
659
|
-
const reactions = (msg.reactions || []).filter(r => getKeyAuthor(r.key) !== authorID);
|
|
659
|
+
const updateMessageWithReaction = (msg, reaction) => {
|
|
660
|
+
const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
|
|
661
|
+
const reactions = (msg.reactions || []).filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
|
|
660
662
|
reaction.text = reaction.text || '';
|
|
661
663
|
reactions.push(reaction);
|
|
662
664
|
msg.reactions = reactions;
|
|
663
665
|
};
|
|
666
|
+
exports.updateMessageWithReaction = updateMessageWithReaction;
|
|
664
667
|
/** Update the message with a new poll update */
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
const
|
|
668
|
-
|
|
668
|
+
const updateMessageWithPollUpdate = (msg, update) => {
|
|
669
|
+
var _a, _b;
|
|
670
|
+
const authorID = (0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey);
|
|
671
|
+
const reactions = (msg.pollUpdates || []).filter(r => (0, generics_1.getKeyAuthor)(r.pollUpdateMessageKey) !== authorID);
|
|
672
|
+
if ((_b = (_a = update.vote) === null || _a === void 0 ? void 0 : _a.selectedOptions) === null || _b === void 0 ? void 0 : _b.length) {
|
|
669
673
|
reactions.push(update);
|
|
670
674
|
}
|
|
671
675
|
msg.pollUpdates = reactions;
|
|
672
676
|
};
|
|
677
|
+
exports.updateMessageWithPollUpdate = updateMessageWithPollUpdate;
|
|
673
678
|
/**
|
|
674
679
|
* Aggregates all poll updates in a poll.
|
|
675
680
|
* @param msg the poll creation message
|
|
676
681
|
* @param meId your jid
|
|
677
682
|
* @returns A list of options & their voters
|
|
678
683
|
*/
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
message
|
|
684
|
+
function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
685
|
+
var _a, _b, _c;
|
|
686
|
+
const opts = ((_a = message === null || message === void 0 ? void 0 : message.pollCreationMessage) === null || _a === void 0 ? void 0 : _a.options) ||
|
|
687
|
+
((_b = message === null || message === void 0 ? void 0 : message.pollCreationMessageV2) === null || _b === void 0 ? void 0 : _b.options) ||
|
|
688
|
+
((_c = message === null || message === void 0 ? void 0 : message.pollCreationMessageV3) === null || _c === void 0 ? void 0 : _c.options) ||
|
|
683
689
|
[];
|
|
684
690
|
const voteHashMap = opts.reduce((acc, opt) => {
|
|
685
|
-
const hash = sha256(Buffer.from(opt.optionName || '')).toString();
|
|
691
|
+
const hash = (0, crypto_2.sha256)(Buffer.from(opt.optionName || '')).toString();
|
|
686
692
|
acc[hash] = {
|
|
687
693
|
name: opt.optionName || '',
|
|
688
694
|
voters: []
|
|
@@ -704,13 +710,13 @@ export function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
|
704
710
|
};
|
|
705
711
|
data = voteHashMap[hash];
|
|
706
712
|
}
|
|
707
|
-
voteHashMap[hash].voters.push(getKeyAuthor(update.pollUpdateMessageKey, meId));
|
|
713
|
+
voteHashMap[hash].voters.push((0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey, meId));
|
|
708
714
|
}
|
|
709
715
|
}
|
|
710
716
|
return Object.values(voteHashMap);
|
|
711
717
|
}
|
|
712
718
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
|
713
|
-
|
|
719
|
+
const aggregateMessageKeysNotFromMe = (keys) => {
|
|
714
720
|
const keyMap = {};
|
|
715
721
|
for (const { remoteJid, id, participant, fromMe } of keys) {
|
|
716
722
|
if (!fromMe) {
|
|
@@ -727,15 +733,17 @@ export const aggregateMessageKeysNotFromMe = (keys) => {
|
|
|
727
733
|
}
|
|
728
734
|
return Object.values(keyMap);
|
|
729
735
|
};
|
|
736
|
+
exports.aggregateMessageKeysNotFromMe = aggregateMessageKeysNotFromMe;
|
|
730
737
|
const REUPLOAD_REQUIRED_STATUS = [410, 404];
|
|
731
738
|
/**
|
|
732
739
|
* Downloads the given message. Throws an error if it's not a media message
|
|
733
740
|
*/
|
|
734
|
-
|
|
741
|
+
const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
735
742
|
const result = await downloadMsg().catch(async (error) => {
|
|
743
|
+
var _a;
|
|
736
744
|
if (ctx &&
|
|
737
|
-
|
|
738
|
-
REUPLOAD_REQUIRED_STATUS.includes(error.response
|
|
745
|
+
axios_1.default.isAxiosError(error) && // check if the message requires a reupload
|
|
746
|
+
REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
|
|
739
747
|
ctx.logger.info({ key: message.key }, 'sending reupload media request...');
|
|
740
748
|
// request reupload
|
|
741
749
|
message = await ctx.reuploadRequest(message);
|
|
@@ -746,15 +754,15 @@ export const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
|
746
754
|
});
|
|
747
755
|
return result;
|
|
748
756
|
async function downloadMsg() {
|
|
749
|
-
const mContent = extractMessageContent(message.message);
|
|
757
|
+
const mContent = (0, exports.extractMessageContent)(message.message);
|
|
750
758
|
if (!mContent) {
|
|
751
|
-
throw new Boom('No message present', { statusCode: 400, data: message });
|
|
759
|
+
throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
|
|
752
760
|
}
|
|
753
|
-
const contentType = getContentType(mContent);
|
|
754
|
-
let mediaType = contentType
|
|
761
|
+
const contentType = (0, exports.getContentType)(mContent);
|
|
762
|
+
let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
|
|
755
763
|
const media = mContent[contentType];
|
|
756
764
|
if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
|
|
757
|
-
throw new Boom(`"${contentType}" message is not a media message`);
|
|
765
|
+
throw new boom_1.Boom(`"${contentType}" message is not a media message`);
|
|
758
766
|
}
|
|
759
767
|
let download;
|
|
760
768
|
if ('thumbnailDirectPath' in media && !('url' in media)) {
|
|
@@ -767,7 +775,7 @@ export const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
|
767
775
|
else {
|
|
768
776
|
download = media;
|
|
769
777
|
}
|
|
770
|
-
const stream = await downloadContentFromMessage(download, mediaType, options);
|
|
778
|
+
const stream = await (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
|
|
771
779
|
if (type === 'buffer') {
|
|
772
780
|
const bufferArray = [];
|
|
773
781
|
for await (const chunk of stream) {
|
|
@@ -778,17 +786,18 @@ export const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
|
778
786
|
return stream;
|
|
779
787
|
}
|
|
780
788
|
};
|
|
789
|
+
exports.downloadMediaMessage = downloadMediaMessage;
|
|
781
790
|
/** Checks whether the given message is a media message; if it is returns the inner content */
|
|
782
|
-
|
|
783
|
-
content = extractMessageContent(content);
|
|
784
|
-
const mediaContent = content
|
|
785
|
-
content
|
|
786
|
-
content
|
|
787
|
-
content
|
|
788
|
-
content
|
|
791
|
+
const assertMediaContent = (content) => {
|
|
792
|
+
content = (0, exports.extractMessageContent)(content);
|
|
793
|
+
const mediaContent = (content === null || content === void 0 ? void 0 : content.documentMessage) ||
|
|
794
|
+
(content === null || content === void 0 ? void 0 : content.imageMessage) ||
|
|
795
|
+
(content === null || content === void 0 ? void 0 : content.videoMessage) ||
|
|
796
|
+
(content === null || content === void 0 ? void 0 : content.audioMessage) ||
|
|
797
|
+
(content === null || content === void 0 ? void 0 : content.stickerMessage);
|
|
789
798
|
if (!mediaContent) {
|
|
790
|
-
throw new Boom('given message is not a media message', { statusCode: 400, data: content });
|
|
799
|
+
throw new boom_1.Boom('given message is not a media message', { statusCode: 400, data: content });
|
|
791
800
|
}
|
|
792
801
|
return mediaContent;
|
|
793
802
|
};
|
|
794
|
-
|
|
803
|
+
exports.assertMediaContent = assertMediaContent;
|