@itsliaaa/baileys 0.2.6 → 0.3.0-rc.10
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 +214 -7
- package/WAProto/index.d.ts +392 -2465
- package/WAProto/index.js +13116 -3569
- package/lib/Defaults/index.d.ts +8 -9
- package/lib/Defaults/index.d.ts.map +1 -1
- package/lib/Defaults/index.js +13 -14
- package/lib/Defaults/index.js.map +1 -1
- package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -1
- package/lib/Signal/Group/ciphertext-message.js.map +1 -1
- package/lib/Signal/Group/group-session-builder.d.ts.map +1 -1
- package/lib/Signal/Group/group-session-builder.js.map +1 -1
- package/lib/Signal/Group/group_cipher.d.ts.map +1 -1
- package/lib/Signal/Group/group_cipher.js.map +1 -1
- package/lib/Signal/Group/index.d.ts.map +1 -1
- package/lib/Signal/Group/index.js.map +1 -1
- package/lib/Signal/Group/keyhelper.d.ts.map +1 -1
- package/lib/Signal/Group/keyhelper.js.map +1 -1
- package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -1
- package/lib/Signal/Group/sender-chain-key.js.map +1 -1
- package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -1
- package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -1
- package/lib/Signal/Group/sender-key-message.d.ts.map +1 -1
- package/lib/Signal/Group/sender-key-message.js.map +1 -1
- package/lib/Signal/Group/sender-key-name.d.ts.map +1 -1
- package/lib/Signal/Group/sender-key-name.js.map +1 -1
- package/lib/Signal/Group/sender-key-record.d.ts.map +1 -1
- package/lib/Signal/Group/sender-key-record.js.map +1 -1
- package/lib/Signal/Group/sender-key-state.d.ts.map +1 -1
- package/lib/Signal/Group/sender-key-state.js.map +1 -1
- package/lib/Signal/Group/sender-message-key.d.ts.map +1 -1
- package/lib/Signal/Group/sender-message-key.js.map +1 -1
- package/lib/Signal/libsignal.d.ts +12 -0
- package/lib/Signal/libsignal.d.ts.map +1 -1
- package/lib/Signal/libsignal.js +41 -17
- package/lib/Signal/libsignal.js.map +1 -1
- package/lib/Signal/lid-mapping.d.ts +2 -2
- package/lib/Signal/lid-mapping.d.ts.map +1 -1
- package/lib/Signal/lid-mapping.js +2 -2
- package/lib/Signal/lid-mapping.js.map +1 -1
- package/lib/Socket/Client/index.d.ts.map +1 -1
- package/lib/Socket/Client/index.js.map +1 -1
- package/lib/Socket/Client/types.d.ts.map +1 -1
- package/lib/Socket/Client/types.js.map +1 -1
- package/lib/Socket/Client/websocket.d.ts.map +1 -1
- package/lib/Socket/Client/websocket.js.map +1 -1
- package/lib/Socket/business.d.ts +20 -41
- package/lib/Socket/business.d.ts.map +1 -1
- package/lib/Socket/business.js +1 -0
- package/lib/Socket/business.js.map +1 -1
- package/lib/Socket/chats.d.ts +12 -2
- package/lib/Socket/chats.d.ts.map +1 -1
- package/lib/Socket/chats.js +21 -37
- package/lib/Socket/chats.js.map +1 -1
- package/lib/Socket/communities.d.ts +22 -42
- package/lib/Socket/communities.d.ts.map +1 -1
- package/lib/Socket/communities.js +1 -0
- package/lib/Socket/communities.js.map +1 -1
- package/lib/Socket/groups.d.ts +14 -35
- package/lib/Socket/groups.d.ts.map +1 -1
- package/lib/Socket/groups.js +17 -4
- package/lib/Socket/groups.js.map +1 -1
- package/lib/Socket/index.d.ts +21 -41
- package/lib/Socket/index.d.ts.map +1 -1
- package/lib/Socket/index.js.map +1 -1
- package/lib/Socket/messages-recv.d.ts +19 -41
- package/lib/Socket/messages-recv.d.ts.map +1 -1
- package/lib/Socket/messages-recv.js +416 -297
- package/lib/Socket/messages-recv.js.map +1 -1
- package/lib/Socket/messages-send.d.ts +19 -35
- package/lib/Socket/messages-send.d.ts.map +1 -1
- package/lib/Socket/messages-send.js +68 -48
- package/lib/Socket/messages-send.js.map +1 -1
- package/lib/Socket/mex.d.ts.map +1 -1
- package/lib/Socket/mex.js.map +1 -1
- package/lib/Socket/newsletter.d.ts +14 -35
- package/lib/Socket/newsletter.d.ts.map +1 -1
- package/lib/Socket/newsletter.js +2 -3
- package/lib/Socket/newsletter.js.map +1 -1
- package/lib/Socket/socket.d.ts +7 -1
- package/lib/Socket/socket.d.ts.map +1 -1
- package/lib/Socket/socket.js +40 -23
- package/lib/Socket/socket.js.map +1 -1
- package/lib/Store/index.d.ts.map +1 -1
- package/lib/Store/index.js.map +1 -1
- package/lib/Store/make-in-memory-store.d.ts.map +1 -1
- package/lib/Store/make-in-memory-store.js.map +1 -1
- package/lib/Store/make-ordered-dictionary.d.ts.map +1 -1
- package/lib/Store/make-ordered-dictionary.js.map +1 -1
- package/lib/Store/object-repository.d.ts.map +1 -1
- package/lib/Store/object-repository.js.map +1 -1
- package/lib/Types/Auth.d.ts.map +1 -1
- package/lib/Types/Auth.js.map +1 -1
- package/lib/Types/Bussines.d.ts.map +1 -1
- package/lib/Types/Bussines.js.map +1 -1
- package/lib/Types/Call.d.ts.map +1 -1
- package/lib/Types/Call.js.map +1 -1
- package/lib/Types/Chat.d.ts.map +1 -1
- package/lib/Types/Chat.js.map +1 -1
- package/lib/Types/Contact.d.ts.map +1 -1
- package/lib/Types/Contact.js.map +1 -1
- package/lib/Types/Events.d.ts.map +1 -1
- package/lib/Types/Events.js.map +1 -1
- package/lib/Types/GroupMetadata.d.ts.map +1 -1
- package/lib/Types/GroupMetadata.js.map +1 -1
- package/lib/Types/Label.d.ts.map +1 -1
- package/lib/Types/Label.js.map +1 -1
- package/lib/Types/LabelAssociation.d.ts.map +1 -1
- package/lib/Types/LabelAssociation.js.map +1 -1
- package/lib/Types/Message.d.ts.map +1 -1
- package/lib/Types/Message.js.map +1 -1
- package/lib/Types/{Newsletter.d.ts → Mex.d.ts} +1 -1
- package/lib/Types/Mex.d.ts.map +1 -0
- package/lib/Types/{Newsletter.js → Mex.js} +9 -4
- package/lib/Types/Mex.js.map +1 -0
- package/lib/Types/Product.d.ts.map +1 -1
- package/lib/Types/Product.js.map +1 -1
- package/lib/Types/RichType.d.ts.map +1 -1
- package/lib/Types/RichType.js.map +1 -1
- package/lib/Types/Signal.d.ts.map +1 -1
- package/lib/Types/Signal.js.map +1 -1
- package/lib/Types/Socket.d.ts.map +1 -1
- package/lib/Types/Socket.js.map +1 -1
- package/lib/Types/State.d.ts +4 -0
- package/lib/Types/State.d.ts.map +1 -1
- package/lib/Types/State.js +43 -0
- package/lib/Types/State.js.map +1 -1
- package/lib/Types/USync.d.ts.map +1 -1
- package/lib/Types/USync.js.map +1 -1
- package/lib/Types/index.d.ts +1 -1
- package/lib/Types/index.d.ts.map +1 -1
- package/lib/Types/index.js +1 -1
- package/lib/Types/index.js.map +1 -1
- package/lib/Utils/auth-utils.d.ts +1 -0
- package/lib/Utils/auth-utils.d.ts.map +1 -1
- package/lib/Utils/auth-utils.js +12 -0
- package/lib/Utils/auth-utils.js.map +1 -1
- package/lib/Utils/browser-utils.d.ts +0 -1
- package/lib/Utils/browser-utils.d.ts.map +1 -1
- package/lib/Utils/browser-utils.js +1 -2
- package/lib/Utils/browser-utils.js.map +1 -1
- package/lib/Utils/business.d.ts.map +1 -1
- package/lib/Utils/business.js.map +1 -1
- package/lib/Utils/chat-utils.d.ts +5 -5
- package/lib/Utils/chat-utils.d.ts.map +1 -1
- package/lib/Utils/chat-utils.js +69 -36
- package/lib/Utils/chat-utils.js.map +1 -1
- package/lib/Utils/companion-reg-client-utils.d.ts +1 -12
- package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -1
- package/lib/Utils/companion-reg-client-utils.js +20 -13
- package/lib/Utils/companion-reg-client-utils.js.map +1 -1
- package/lib/Utils/crypto.d.ts.map +1 -1
- package/lib/Utils/crypto.js.map +1 -1
- package/lib/Utils/decode-wa-message.d.ts +3 -1
- package/lib/Utils/decode-wa-message.d.ts.map +1 -1
- package/lib/Utils/decode-wa-message.js +17 -3
- package/lib/Utils/decode-wa-message.js.map +1 -1
- package/lib/Utils/event-buffer.d.ts.map +1 -1
- package/lib/Utils/event-buffer.js +30 -0
- package/lib/Utils/event-buffer.js.map +1 -1
- package/lib/Utils/generics.d.ts +1 -1
- package/lib/Utils/generics.d.ts.map +1 -1
- package/lib/Utils/generics.js +5 -5
- package/lib/Utils/generics.js.map +1 -1
- package/lib/Utils/history.d.ts +2 -0
- package/lib/Utils/history.d.ts.map +1 -1
- package/lib/Utils/history.js +1 -0
- package/lib/Utils/history.js.map +1 -1
- package/lib/Utils/identity-change-handler.d.ts.map +1 -1
- package/lib/Utils/identity-change-handler.js.map +1 -1
- package/lib/Utils/index.d.ts +1 -1
- package/lib/Utils/index.d.ts.map +1 -1
- package/lib/Utils/index.js +1 -1
- package/lib/Utils/index.js.map +1 -1
- package/lib/Utils/link-preview.d.ts.map +1 -1
- package/lib/Utils/link-preview.js +2 -2
- package/lib/Utils/link-preview.js.map +1 -1
- package/lib/Utils/logger.d.ts.map +1 -1
- package/lib/Utils/logger.js.map +1 -1
- package/lib/Utils/lt-hash.d.ts.map +1 -1
- package/lib/Utils/lt-hash.js.map +1 -1
- package/lib/Utils/make-mutex.d.ts.map +1 -1
- package/lib/Utils/make-mutex.js.map +1 -1
- package/lib/Utils/message-retry-manager.d.ts +4 -0
- package/lib/Utils/message-retry-manager.d.ts.map +1 -1
- package/lib/Utils/message-retry-manager.js +23 -0
- package/lib/Utils/message-retry-manager.js.map +1 -1
- package/lib/Utils/messages-media.d.ts +2 -1
- package/lib/Utils/messages-media.d.ts.map +1 -1
- package/lib/Utils/messages-media.js +19 -7
- package/lib/Utils/messages-media.js.map +1 -1
- package/lib/Utils/messages.d.ts +3 -12
- package/lib/Utils/messages.d.ts.map +1 -1
- package/lib/Utils/messages.js +210 -193
- package/lib/Utils/messages.js.map +1 -1
- package/lib/Utils/noise-handler.d.ts.map +1 -1
- package/lib/Utils/noise-handler.js.map +1 -1
- package/lib/Utils/offline-node-processor.d.ts.map +1 -1
- package/lib/Utils/offline-node-processor.js.map +1 -1
- package/lib/Utils/pre-key-manager.d.ts.map +1 -1
- package/lib/Utils/pre-key-manager.js.map +1 -1
- package/lib/Utils/process-message.d.ts.map +1 -1
- package/lib/Utils/process-message.js +18 -2
- package/lib/Utils/process-message.js.map +1 -1
- package/lib/Utils/reporting-utils.d.ts.map +1 -1
- package/lib/Utils/reporting-utils.js.map +1 -1
- package/lib/Utils/rich-message-utils.d.ts +8 -3
- package/lib/Utils/rich-message-utils.d.ts.map +1 -1
- package/lib/Utils/rich-message-utils.js +1 -1
- package/lib/Utils/rich-message-utils.js.map +1 -1
- package/lib/Utils/signal.d.ts +14 -1
- package/lib/Utils/signal.d.ts.map +1 -1
- package/lib/Utils/signal.js +42 -0
- package/lib/Utils/signal.js.map +1 -1
- package/lib/Utils/stanza-ack.d.ts.map +1 -1
- package/lib/Utils/stanza-ack.js.map +1 -1
- package/lib/Utils/sync-action-utils.d.ts.map +1 -1
- package/lib/Utils/sync-action-utils.js.map +1 -1
- package/lib/Utils/tc-token-utils.d.ts.map +1 -1
- package/lib/Utils/tc-token-utils.js +0 -1
- package/lib/Utils/tc-token-utils.js.map +1 -1
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -1
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -1
- package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -1
- package/lib/Utils/use-single-file-auth-state.js.map +1 -1
- package/lib/Utils/validate-connection.d.ts +1 -1
- package/lib/Utils/validate-connection.d.ts.map +1 -1
- package/lib/Utils/validate-connection.js +4 -8
- package/lib/Utils/validate-connection.js.map +1 -1
- package/lib/WABinary/constants.d.ts.map +1 -1
- package/lib/WABinary/constants.js.map +1 -1
- package/lib/WABinary/decode.d.ts.map +1 -1
- package/lib/WABinary/decode.js.map +1 -1
- package/lib/WABinary/encode.d.ts.map +1 -1
- package/lib/WABinary/encode.js.map +1 -1
- package/lib/WABinary/generic-utils.d.ts +1 -3
- package/lib/WABinary/generic-utils.d.ts.map +1 -1
- package/lib/WABinary/generic-utils.js +6 -7
- package/lib/WABinary/generic-utils.js.map +1 -1
- package/lib/WABinary/index.d.ts.map +1 -1
- package/lib/WABinary/index.js.map +1 -1
- package/lib/WABinary/jid-utils.d.ts.map +1 -1
- package/lib/WABinary/jid-utils.js.map +1 -1
- package/lib/WABinary/types.d.ts.map +1 -1
- package/lib/WABinary/types.js.map +1 -1
- package/lib/WAM/BinaryInfo.d.ts.map +1 -1
- package/lib/WAM/BinaryInfo.js.map +1 -1
- package/lib/WAM/constants.d.ts.map +1 -1
- package/lib/WAM/constants.js.map +1 -1
- package/lib/WAM/encode.d.ts.map +1 -1
- package/lib/WAM/encode.js.map +1 -1
- package/lib/WAM/index.d.ts.map +1 -1
- package/lib/WAM/index.js.map +1 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -1
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -1
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -1
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +3 -1
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -1
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -1
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -1
- package/lib/WAUSync/Protocols/index.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/index.js.map +1 -1
- package/lib/WAUSync/USyncQuery.d.ts.map +1 -1
- package/lib/WAUSync/USyncQuery.js +1 -1
- package/lib/WAUSync/USyncQuery.js.map +1 -1
- package/lib/WAUSync/USyncUser.d.ts.map +1 -1
- package/lib/WAUSync/USyncUser.js.map +1 -1
- package/lib/WAUSync/index.d.ts.map +1 -1
- package/lib/WAUSync/index.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +34 -5
- package/lib/Types/Newsletter.d.ts.map +0 -1
- package/lib/Types/Newsletter.js.map +0 -1
package/lib/Utils/messages.d.ts
CHANGED
|
@@ -20,16 +20,7 @@ export function getAggregateResponsesInEventMessage({ eventResponses }: {
|
|
|
20
20
|
export function extractUrlFromText(text: any): any;
|
|
21
21
|
export function generateLinkPreviewIfRequired(text: any, getUrlInfo: any, logger: any): Promise<any>;
|
|
22
22
|
export function prepareWAMessageMedia(message: any, options: any): Promise<proto.Message>;
|
|
23
|
-
export function prepareDisappearingMessageSettingContent(ephemeralExpiration: any):
|
|
24
|
-
ephemeralMessage: {
|
|
25
|
-
message: {
|
|
26
|
-
protocolMessage: {
|
|
27
|
-
type: proto.Message.ProtocolMessage.Type;
|
|
28
|
-
ephemeralExpiration: any;
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
};
|
|
23
|
+
export function prepareDisappearingMessageSettingContent(ephemeralExpiration: any): proto.Message;
|
|
33
24
|
export function generateForwardMessageContent(message: any, forceForward: any): any;
|
|
34
25
|
export function hasNonNullishProperty(message: any, key: any): boolean;
|
|
35
26
|
export function hasOptionalProperty(obj: any, key: any): boolean;
|
|
@@ -38,11 +29,11 @@ export function hasValidInteractiveHeader(message: any): any;
|
|
|
38
29
|
export function hasValidCarouselHeader(message: any): any;
|
|
39
30
|
export function generateWAMessageContent(message: any, options: any): Promise<any>;
|
|
40
31
|
export function generateWAMessageFromContent(jid: any, message: any, options: any): proto.WebMessageInfo;
|
|
41
|
-
export function generateWAMessage(jid: any, content: any, options
|
|
32
|
+
export function generateWAMessage(jid: any, content: any, options: any): Promise<proto.WebMessageInfo>;
|
|
42
33
|
export function getContentType(content: any): string | undefined;
|
|
43
34
|
export function normalizeMessageContent(content: any): any;
|
|
44
35
|
export function extractMessageContent(content: any): any;
|
|
45
|
-
export function getDevice(id: any): "unknown" | "
|
|
36
|
+
export function getDevice(id: any): "unknown" | "android" | "web" | "ios" | "desktop";
|
|
46
37
|
export function updateMessageWithReceipt(msg: any, receipt: any): void;
|
|
47
38
|
export function updateMessageWithReaction(msg: any, reaction: any): void;
|
|
48
39
|
export function updateMessageWithPollUpdate(msg: any, update: any): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/Utils/messages.js"],"names":[],"mappings":"AA8mDA;;;;;GAKG;AACH;;;qBAgCC;AACD;;;;;GAKG;AACH;;qBAgBC;AAlnDM,mDAA+D;AAC/D,qGAYN;AAeM,0FAmKN;AAuTM,kGAaN;AAMM,oFAwBN;AACM,uEAKN;AACM,iEAKN;AAEM,sDAGN;AACM,6DAMN;AAEM,0DAIN;AACM,mFA+wBN;AACM,yGA4EN;AACM,uGAQN;AAEM,iEAMN;AAOM,2DA0CN;AAKM,yDAkCN;AAIM,sFAQoB;AAEpB,uEASN;AAEM,yEAMN;AAEM,yEAON;AAEM,4EAKN;AAgEM,gEAgBN;AAKM,oGA8CN;AAEM,sDAWN;AAkEM,8DAUN;sBAp0DqB,wBAAwB"}
|
package/lib/Utils/messages.js
CHANGED
|
@@ -5,7 +5,7 @@ import { promises as fs } from 'fs';
|
|
|
5
5
|
import { proto } from '../../WAProto/index.js';
|
|
6
6
|
import { CALL_AUDIO_PREFIX, CALL_VIDEO_PREFIX, DONATE_URL, LIBRARY_NAME, MEDIA_KEYS, URL_REGEX, WA_DEFAULT_EPHEMERAL } from '../Defaults/index.js';
|
|
7
7
|
import { AssociationType, ButtonHeaderType, ButtonType, CarouselCardType, ListType, ProtocolType, WAMessageStatus, WAProto } from '../Types/index.js';
|
|
8
|
-
import {
|
|
8
|
+
import { isLidUser, isPnUser, isJidGroup, isJidNewsletter, isJidStatusBroadcast, jidNormalizedUser } from '../WABinary/index.js';
|
|
9
9
|
import { sha256 } from './crypto.js';
|
|
10
10
|
import { generateMessageIDV2, getKeyAuthor, unixTimestampSeconds } from './generics.js';
|
|
11
11
|
import { downloadContentFromMessage, encryptedStream, generateThumbnail, getAudioDuration, getAudioWaveform, getImageProcessingLibrary, getRawMediaUploadData, getStream, toBuffer } from './messages-media.js';
|
|
@@ -82,26 +82,33 @@ const assertColor = async (color) => {
|
|
|
82
82
|
return assertedColor;
|
|
83
83
|
}
|
|
84
84
|
};
|
|
85
|
-
// Lia@Changes 21-04-26 --- Refactor prepareWAMessageMedia function
|
|
86
85
|
export const prepareWAMessageMedia = async (message, options) => {
|
|
87
86
|
const logger = options.logger;
|
|
88
|
-
|
|
87
|
+
let mediaType;
|
|
88
|
+
for (const key of MEDIA_KEYS) {
|
|
89
|
+
if (key in message) {
|
|
90
|
+
mediaType = key;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
89
93
|
if (!mediaType) {
|
|
90
94
|
throw new Boom('Invalid media type', { statusCode: 400 });
|
|
91
95
|
}
|
|
92
|
-
const uploadData = {
|
|
93
|
-
|
|
96
|
+
const uploadData = {
|
|
97
|
+
...message,
|
|
98
|
+
media: message[mediaType]
|
|
99
|
+
};
|
|
94
100
|
delete uploadData[mediaType];
|
|
95
101
|
if (uploadData.image || uploadData.video) {
|
|
96
102
|
uploadData.annotations = mediaAnnotation;
|
|
97
103
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
104
|
+
// check if cacheable + generate cache key
|
|
105
|
+
const cacheableKey = typeof uploadData.media === 'object' &&
|
|
106
|
+
'url' in uploadData.media &&
|
|
107
|
+
!!uploadData.media.url &&
|
|
101
108
|
!!options.mediaCache &&
|
|
102
|
-
|
|
109
|
+
mediaType + ':' + uploadData.media.url.toString();
|
|
103
110
|
if (mediaType === 'document' && !uploadData.fileName) {
|
|
104
|
-
uploadData.fileName =
|
|
111
|
+
uploadData.fileName = 'file';
|
|
105
112
|
}
|
|
106
113
|
if (!uploadData.mimetype) {
|
|
107
114
|
uploadData.mimetype = MIMETYPE_MAP[mediaType];
|
|
@@ -112,149 +119,133 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
112
119
|
logger?.debug({ cacheableKey }, 'got media cache hit');
|
|
113
120
|
const obj = proto.Message.decode(mediaBuff);
|
|
114
121
|
const key = `${mediaType}Message`;
|
|
115
|
-
Object.assign(obj[key], uploadData);
|
|
122
|
+
Object.assign(obj[key], { ...uploadData, media: undefined });
|
|
116
123
|
return obj;
|
|
117
124
|
}
|
|
118
125
|
}
|
|
119
|
-
const isNewsletter = isJidNewsletter(options.jid);
|
|
120
|
-
const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
|
|
121
|
-
const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') && typeof uploadData.jpegThumbnail === 'undefined';
|
|
122
|
-
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true && typeof uploadData.waveform === 'undefined';
|
|
123
|
-
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
124
|
-
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation || requiresWaveformProcessing;
|
|
125
|
-
let mediaUrl, directPath, thumbnailDirectPath, thumbnailSha256, fileSha256, fileLength, mediaKey, fileEncSha256;
|
|
126
|
-
// Lia@Changes 06-02-26 --- Add few support for sending media to newsletter (≧▽≦)
|
|
126
|
+
const isNewsletter = !!options.jid && isJidNewsletter(options.jid);
|
|
127
127
|
if (isNewsletter) {
|
|
128
128
|
logger?.info({ key: cacheableKey }, 'Preparing raw media for newsletter');
|
|
129
|
-
const
|
|
130
|
-
fileSha256 = rawData.fileSha256;
|
|
131
|
-
fileLength = rawData.fileLength;
|
|
132
|
-
const filePath = rawData.filePath;
|
|
129
|
+
const { filePath, fileSha256, fileLength } = await getRawMediaUploadData(uploadData.media, options.mediaTypeOverride || mediaType, logger);
|
|
133
130
|
const fileSha256B64 = fileSha256.toString('base64');
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
})()
|
|
155
|
-
]);
|
|
156
|
-
// todo: add more support here
|
|
157
|
-
mediaUrl = uploadResult.mediaUrl;
|
|
158
|
-
directPath = uploadResult.directPath;
|
|
159
|
-
thumbnailDirectPath = uploadResult.thumbnailDirectPath;
|
|
160
|
-
thumbnailSha256 = uploadResult.thumbnailSha256;
|
|
161
|
-
fs.unlink(filePath).catch(() => logger?.warn('failed to remove tmp file'));
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
const encryptedData = await encryptedStream(mediaPayload, options.mediaTypeOverride || mediaType, {
|
|
165
|
-
logger,
|
|
166
|
-
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
167
|
-
opts: options.options
|
|
131
|
+
const { mediaUrl, directPath, thumbnailDirectPath, thumbnailSha256 } = await options.upload(filePath, {
|
|
132
|
+
fileEncSha256B64: fileSha256B64,
|
|
133
|
+
mediaType: mediaType,
|
|
134
|
+
timeoutMs: options.mediaUploadTimeoutMs,
|
|
135
|
+
newsletter: isNewsletter
|
|
136
|
+
});
|
|
137
|
+
await fs.unlink(filePath);
|
|
138
|
+
const obj = WAProto.Message.fromObject({
|
|
139
|
+
// todo: add more support here
|
|
140
|
+
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
141
|
+
url: mediaUrl,
|
|
142
|
+
directPath,
|
|
143
|
+
fileSha256,
|
|
144
|
+
fileLength,
|
|
145
|
+
thumbnailDirectPath,
|
|
146
|
+
thumbnailSha256,
|
|
147
|
+
...uploadData,
|
|
148
|
+
media: undefined
|
|
149
|
+
})
|
|
168
150
|
});
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
151
|
+
if (uploadData.ptv) {
|
|
152
|
+
obj.ptvMessage = obj.videoMessage;
|
|
153
|
+
delete obj.videoMessage;
|
|
154
|
+
}
|
|
155
|
+
if (obj.stickerMessage) {
|
|
156
|
+
obj.stickerMessage.stickerSentTs = Date.now();
|
|
157
|
+
}
|
|
158
|
+
if (cacheableKey) {
|
|
159
|
+
logger?.debug({ cacheableKey }, 'set cache');
|
|
160
|
+
await options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
|
|
161
|
+
}
|
|
162
|
+
return obj;
|
|
163
|
+
}
|
|
164
|
+
const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
|
|
165
|
+
const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') && typeof uploadData['jpegThumbnail'] === 'undefined';
|
|
166
|
+
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true && typeof uploadData.waveform === 'undefined';
|
|
167
|
+
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
168
|
+
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
|
|
169
|
+
const { mediaKey, encFilePath, originalFilePath, fileEncSha256, fileSha256, fileLength } = await encryptedStream(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
170
|
+
logger,
|
|
171
|
+
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
172
|
+
opts: options.options
|
|
173
|
+
});
|
|
174
|
+
const fileEncSha256B64 = fileEncSha256.toString('base64');
|
|
175
|
+
const [{ mediaUrl, directPath }] = await Promise.all([
|
|
176
|
+
(async () => {
|
|
177
|
+
const result = await options.upload(encFilePath, {
|
|
178
178
|
fileEncSha256B64,
|
|
179
179
|
mediaType,
|
|
180
180
|
timeoutMs: options.mediaUploadTimeoutMs
|
|
181
|
-
})
|
|
182
|
-
(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
if (requiresWaveformProcessing) {
|
|
196
|
-
uploadData.waveform = await getAudioWaveform(originalFilePath, logger);
|
|
197
|
-
}
|
|
198
|
-
if (requiresAudioBackground) {
|
|
199
|
-
uploadData.backgroundArgb = await assertColor(options.backgroundColor);
|
|
181
|
+
});
|
|
182
|
+
logger?.debug({ mediaType, cacheableKey }, 'uploaded media');
|
|
183
|
+
return result;
|
|
184
|
+
})(),
|
|
185
|
+
(async () => {
|
|
186
|
+
try {
|
|
187
|
+
if (requiresThumbnailComputation) {
|
|
188
|
+
const { thumbnail, originalImageDimensions } = await generateThumbnail(originalFilePath, mediaType, options);
|
|
189
|
+
uploadData.jpegThumbnail = thumbnail;
|
|
190
|
+
if (!uploadData.width && originalImageDimensions) {
|
|
191
|
+
uploadData.width = originalImageDimensions.width;
|
|
192
|
+
uploadData.height = originalImageDimensions.height;
|
|
193
|
+
logger?.debug('set dimensions');
|
|
200
194
|
}
|
|
195
|
+
logger?.debug('generated thumbnail');
|
|
201
196
|
}
|
|
202
|
-
|
|
203
|
-
|
|
197
|
+
if (requiresDurationComputation) {
|
|
198
|
+
uploadData.seconds = await getAudioDuration(originalFilePath);
|
|
199
|
+
logger?.debug('computed audio duration');
|
|
204
200
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
201
|
+
if (requiresWaveformProcessing) {
|
|
202
|
+
uploadData.waveform = await getAudioWaveform(originalFilePath, logger);
|
|
203
|
+
logger?.debug('processed waveform');
|
|
204
|
+
}
|
|
205
|
+
if (requiresAudioBackground) {
|
|
206
|
+
uploadData.backgroundArgb = await assertColor(options.backgroundColor);
|
|
207
|
+
logger?.debug('computed backgroundColor audio status');
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
logger?.warn({ trace: error.stack }, 'failed to obtain extra info');
|
|
212
|
+
}
|
|
213
|
+
})()
|
|
214
|
+
]).finally(async () => {
|
|
215
|
+
try {
|
|
216
|
+
await fs.unlink(encFilePath);
|
|
217
|
+
if (originalFilePath) {
|
|
218
|
+
await fs.unlink(originalFilePath);
|
|
219
|
+
}
|
|
220
|
+
logger?.debug('removed tmp files');
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
logger?.warn('failed to remove tmp file');
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
const obj = WAProto.Message.fromObject({
|
|
227
|
+
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
228
|
+
url: mediaUrl,
|
|
229
|
+
directPath,
|
|
230
|
+
mediaKey,
|
|
231
|
+
fileEncSha256,
|
|
232
|
+
fileSha256,
|
|
233
|
+
fileLength,
|
|
234
|
+
mediaKeyTimestamp: unixTimestampSeconds(),
|
|
235
|
+
...uploadData,
|
|
236
|
+
media: undefined
|
|
237
|
+
})
|
|
230
238
|
});
|
|
231
239
|
if (uploadData.ptv) {
|
|
232
240
|
obj.ptvMessage = obj.videoMessage;
|
|
233
241
|
delete obj.videoMessage;
|
|
234
242
|
}
|
|
235
|
-
if (obj.stickerMessage) {
|
|
236
|
-
obj.stickerMessage.stickerSentTs = Date.now();
|
|
237
|
-
}
|
|
238
243
|
if (cacheableKey) {
|
|
239
|
-
logger?.debug({ cacheableKey }, 'set cache
|
|
240
|
-
options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
|
|
244
|
+
logger?.debug({ cacheableKey }, 'set cache');
|
|
245
|
+
await options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
|
|
241
246
|
}
|
|
242
247
|
return obj;
|
|
243
248
|
};
|
|
244
|
-
export const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
245
|
-
ephemeralExpiration = ephemeralExpiration || 0;
|
|
246
|
-
const content = {
|
|
247
|
-
ephemeralMessage: {
|
|
248
|
-
message: {
|
|
249
|
-
protocolMessage: {
|
|
250
|
-
type: ProtocolType.EPHEMERAL_SETTING,
|
|
251
|
-
ephemeralExpiration
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
};
|
|
256
|
-
return content;
|
|
257
|
-
};
|
|
258
249
|
// Lia@Changes 31-01-26 --- Extract product message into a standalone function so it can also be reused as the header for interactive messages
|
|
259
250
|
const prepareProductMessage = async (message, options) => {
|
|
260
251
|
if (!message.businessOwnerJid) {
|
|
@@ -559,8 +550,22 @@ const prepareNativeFlowButtons = (message) => {
|
|
|
559
550
|
return button;
|
|
560
551
|
}),
|
|
561
552
|
messageParamsJson: JSON.stringify(messageParamsJson),
|
|
562
|
-
messageVersion:
|
|
553
|
+
messageVersion: 3
|
|
554
|
+
};
|
|
555
|
+
};
|
|
556
|
+
export const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
557
|
+
ephemeralExpiration = ephemeralExpiration || 0;
|
|
558
|
+
const content = {
|
|
559
|
+
ephemeralMessage: {
|
|
560
|
+
message: {
|
|
561
|
+
protocolMessage: {
|
|
562
|
+
type: WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
|
|
563
|
+
ephemeralExpiration
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
563
567
|
};
|
|
568
|
+
return WAProto.Message.fromObject(content);
|
|
564
569
|
};
|
|
565
570
|
/**
|
|
566
571
|
* Generate forwarded message content like WA does
|
|
@@ -568,7 +573,7 @@ const prepareNativeFlowButtons = (message) => {
|
|
|
568
573
|
* @param options.forceForward will show the message as forwarded even if it is from you
|
|
569
574
|
*/
|
|
570
575
|
export const generateForwardMessageContent = (message, forceForward) => {
|
|
571
|
-
let content = message.message
|
|
576
|
+
let content = message.message;
|
|
572
577
|
if (!content) {
|
|
573
578
|
throw new Boom('no content in message', { statusCode: 400 });
|
|
574
579
|
}
|
|
@@ -584,24 +589,12 @@ export const generateForwardMessageContent = (message, forceForward) => {
|
|
|
584
589
|
key = 'extendedTextMessage';
|
|
585
590
|
}
|
|
586
591
|
const key_ = content?.[key];
|
|
587
|
-
const contextInfo = {};
|
|
588
592
|
if (score > 0) {
|
|
589
|
-
contextInfo
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
// so the server knows where to find the original media
|
|
594
|
-
const remoteJid = message.key?.remoteJid;
|
|
595
|
-
if (remoteJid && isJidNewsletter(remoteJid)) {
|
|
596
|
-
contextInfo.forwardedNewsletterMessageInfo = {
|
|
597
|
-
newsletterJid: remoteJid,
|
|
598
|
-
serverMessageId: message.key?.server_id ? parseInt(message.key.server_id) : null,
|
|
599
|
-
newsletterName: null
|
|
600
|
-
};
|
|
601
|
-
// strip messageContextInfo (contains messageSecret etc.) as WA Web does
|
|
602
|
-
delete content.messageContextInfo;
|
|
593
|
+
key_.contextInfo = { forwardingScore: score, isForwarded: true };
|
|
594
|
+
}
|
|
595
|
+
else {
|
|
596
|
+
key_.contextInfo = {};
|
|
603
597
|
}
|
|
604
|
-
key_.contextInfo = contextInfo;
|
|
605
598
|
return content;
|
|
606
599
|
};
|
|
607
600
|
export const hasNonNullishProperty = (message, key) => {
|
|
@@ -676,8 +669,11 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
676
669
|
}
|
|
677
670
|
}
|
|
678
671
|
const faviconData = message.favicon;
|
|
679
|
-
if (faviconData) {
|
|
680
|
-
const { imageMessage } = await prepareWAMessageMedia({
|
|
672
|
+
if (faviconData && typeof options?.upload === 'function') {
|
|
673
|
+
const { imageMessage } = await prepareWAMessageMedia({
|
|
674
|
+
image: faviconData,
|
|
675
|
+
mimetype: 'image/png'
|
|
676
|
+
}, options);
|
|
681
677
|
extContent.faviconMMSMetadata = {
|
|
682
678
|
thumbnailDirectPath: imageMessage.directPath,
|
|
683
679
|
mediaKey: imageMessage.mediaKey,
|
|
@@ -702,25 +698,25 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
702
698
|
throw new Boom('require atleast 1 contact', { statusCode: 400 });
|
|
703
699
|
}
|
|
704
700
|
if (contactLen === 1) {
|
|
705
|
-
m.contactMessage = message.contacts.contacts[0];
|
|
701
|
+
m.contactMessage = WAProto.Message.ContactMessage.create(message.contacts.contacts[0]);
|
|
706
702
|
}
|
|
707
703
|
else {
|
|
708
|
-
m.contactsArrayMessage = message.contacts;
|
|
704
|
+
m.contactsArrayMessage = WAProto.Message.ContactsArrayMessage.create(message.contacts);
|
|
709
705
|
}
|
|
710
706
|
}
|
|
711
707
|
else if (hasNonNullishProperty(message, 'location')) {
|
|
712
|
-
m.locationMessage = message.location;
|
|
708
|
+
m.locationMessage = WAProto.Message.LocationMessage.create(message.location);
|
|
713
709
|
}
|
|
714
710
|
else if (hasNonNullishProperty(message, 'react')) {
|
|
715
711
|
if (!message.react.senderTimestampMs) {
|
|
716
712
|
message.react.senderTimestampMs = Date.now();
|
|
717
713
|
}
|
|
718
|
-
m.reactionMessage = message.react;
|
|
714
|
+
m.reactionMessage = WAProto.Message.ReactionMessage.create(message.react);
|
|
719
715
|
}
|
|
720
716
|
else if (hasNonNullishProperty(message, 'delete')) {
|
|
721
717
|
m.protocolMessage = {
|
|
722
718
|
key: message.delete,
|
|
723
|
-
type:
|
|
719
|
+
type: WAProto.Message.ProtocolMessage.Type.REVOKE
|
|
724
720
|
};
|
|
725
721
|
}
|
|
726
722
|
else if (hasNonNullishProperty(message, 'forward')) {
|
|
@@ -922,25 +918,6 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
922
918
|
vote: message.pollUpdate.vote
|
|
923
919
|
};
|
|
924
920
|
}
|
|
925
|
-
else if (hasNonNullishProperty(message, 'sharePhoneNumber')) {
|
|
926
|
-
m.protocolMessage = {
|
|
927
|
-
type: ProtocolType.SHARE_PHONE_NUMBER
|
|
928
|
-
};
|
|
929
|
-
}
|
|
930
|
-
else if (hasNonNullishProperty(message, 'requestPhoneNumber')) {
|
|
931
|
-
m.requestPhoneNumberMessage = {};
|
|
932
|
-
}
|
|
933
|
-
else if (hasNonNullishProperty(message, 'limitSharing')) {
|
|
934
|
-
m.protocolMessage = {
|
|
935
|
-
type: ProtocolType.LIMIT_SHARING,
|
|
936
|
-
limitSharing: {
|
|
937
|
-
sharingLimited: message.limitSharing === true,
|
|
938
|
-
trigger: 1,
|
|
939
|
-
limitSharingSettingTimestamp: Date.now(),
|
|
940
|
-
initiatedByMe: true
|
|
941
|
-
}
|
|
942
|
-
};
|
|
943
|
-
}
|
|
944
921
|
// Lia@Changes 01-02-26 --- Add payment invite message
|
|
945
922
|
else if (hasNonNullishProperty(message, 'paymentInviteServiceType')) {
|
|
946
923
|
m.paymentInviteMessage = {
|
|
@@ -992,6 +969,25 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
992
969
|
expectedVideoCount: videoCount
|
|
993
970
|
};
|
|
994
971
|
}
|
|
972
|
+
else if (hasNonNullishProperty(message, 'sharePhoneNumber')) {
|
|
973
|
+
m.protocolMessage = {
|
|
974
|
+
type: proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
|
|
975
|
+
};
|
|
976
|
+
}
|
|
977
|
+
else if (hasNonNullishProperty(message, 'requestPhoneNumber')) {
|
|
978
|
+
m.requestPhoneNumberMessage = {};
|
|
979
|
+
}
|
|
980
|
+
else if (hasNonNullishProperty(message, 'limitSharing')) {
|
|
981
|
+
m.protocolMessage = {
|
|
982
|
+
type: proto.Message.ProtocolMessage.Type.LIMIT_SHARING,
|
|
983
|
+
limitSharing: {
|
|
984
|
+
sharingLimited: message.limitSharing === true,
|
|
985
|
+
trigger: 1,
|
|
986
|
+
limitSharingSettingTimestamp: Date.now(),
|
|
987
|
+
initiatedByMe: true
|
|
988
|
+
}
|
|
989
|
+
};
|
|
990
|
+
}
|
|
995
991
|
else {
|
|
996
992
|
m = await prepareWAMessageMedia(message, options);
|
|
997
993
|
}
|
|
@@ -1155,11 +1151,11 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
1155
1151
|
Object.assign(interactiveMessage.header, m);
|
|
1156
1152
|
}
|
|
1157
1153
|
if (hasOptionalProperty(message, 'audioFooter')) {
|
|
1158
|
-
const
|
|
1154
|
+
const { audioMessage } = await prepareWAMessageMedia({
|
|
1159
1155
|
audio: message.audioFooter
|
|
1160
1156
|
}, options);
|
|
1161
1157
|
interactiveMessage.footer = {
|
|
1162
|
-
audioMessage
|
|
1158
|
+
audioMessage,
|
|
1163
1159
|
hasMediaAttachment: true
|
|
1164
1160
|
};
|
|
1165
1161
|
}
|
|
@@ -1204,11 +1200,11 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
1204
1200
|
Object.assign(carouselCard.header, carouselHeader);
|
|
1205
1201
|
}
|
|
1206
1202
|
if (hasOptionalProperty(card, 'audioFooter')) {
|
|
1207
|
-
const
|
|
1203
|
+
const { audioMessage } = await prepareWAMessageMedia({
|
|
1208
1204
|
audio: card.audioFooter
|
|
1209
1205
|
}, options);
|
|
1210
1206
|
carouselCard.footer = {
|
|
1211
|
-
audioMessage
|
|
1207
|
+
audioMessage,
|
|
1212
1208
|
hasMediaAttachment: true
|
|
1213
1209
|
};
|
|
1214
1210
|
}
|
|
@@ -1315,18 +1311,21 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
1315
1311
|
(hasOptionalProperty(message, 'mentionAll') && message.mentionAll)) {
|
|
1316
1312
|
const messageType = Object.keys(m)[0];
|
|
1317
1313
|
const key = m[messageType];
|
|
1318
|
-
if ('contextInfo' in key
|
|
1319
|
-
key.contextInfo
|
|
1314
|
+
if (key && 'contextInfo' in key) {
|
|
1315
|
+
key.contextInfo = key.contextInfo || {};
|
|
1316
|
+
if (message.mentions?.length) {
|
|
1317
|
+
key.contextInfo.mentionedJid = message.mentions;
|
|
1318
|
+
}
|
|
1319
|
+
if (message.mentionAll) {
|
|
1320
|
+
key.contextInfo.nonJidMentions = 1;
|
|
1321
|
+
}
|
|
1320
1322
|
}
|
|
1321
1323
|
else if (key) {
|
|
1322
1324
|
key.contextInfo = {
|
|
1323
|
-
mentionedJid: message.mentions
|
|
1325
|
+
mentionedJid: message.mentions,
|
|
1326
|
+
nonJidMentions: message.mentionAll ? 1 : 0
|
|
1324
1327
|
};
|
|
1325
1328
|
}
|
|
1326
|
-
if (message.mentionAll) {
|
|
1327
|
-
key.contextInfo.mentionedJid = [];
|
|
1328
|
-
key.contextInfo.nonJidMentions = 1;
|
|
1329
|
-
}
|
|
1330
1329
|
}
|
|
1331
1330
|
if (hasOptionalProperty(message, 'contextInfo') && !!message.contextInfo) {
|
|
1332
1331
|
const messageType = Object.keys(m)[0];
|
|
@@ -1353,6 +1352,21 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
1353
1352
|
m = { groupStatusMessageV2: { message: m } };
|
|
1354
1353
|
delete message.groupStatus;
|
|
1355
1354
|
}
|
|
1355
|
+
// Lia@Changes 06-05-26 --- Add "spoiler" boolean to set contextInfo.isSpoiler and wrap message into spoilerMessage
|
|
1356
|
+
if (hasOptionalProperty(message, 'spoiler') && !!message.spoiler) {
|
|
1357
|
+
const messageType = Object.keys(m)[0];
|
|
1358
|
+
const key = m[messageType];
|
|
1359
|
+
if ('contextInfo' in key && !!key.contextInfo) {
|
|
1360
|
+
key.contextInfo.isSpoiler = message.spoiler;
|
|
1361
|
+
}
|
|
1362
|
+
else if (key) {
|
|
1363
|
+
key.contextInfo = {
|
|
1364
|
+
isSpoiler: message.spoiler
|
|
1365
|
+
};
|
|
1366
|
+
}
|
|
1367
|
+
m = { spoilerMessage: { message: m } };
|
|
1368
|
+
delete message.spoiler;
|
|
1369
|
+
}
|
|
1356
1370
|
// Lia@Changes 02-02-26 --- Add "interactiveAsTemplate" boolean to wrap interactiveMessage into templateMessage
|
|
1357
1371
|
else if (hasOptionalProperty(message, 'interactiveAsTemplate') && !!message.interactiveAsTemplate) {
|
|
1358
1372
|
if (!m.interactiveMessage) {
|
|
@@ -1390,7 +1404,7 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
1390
1404
|
key: message.edit,
|
|
1391
1405
|
editedMessage: m,
|
|
1392
1406
|
timestampMs: Date.now(),
|
|
1393
|
-
type:
|
|
1407
|
+
type: WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
|
|
1394
1408
|
}
|
|
1395
1409
|
};
|
|
1396
1410
|
}
|
|
@@ -1400,16 +1414,16 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
1400
1414
|
m.messageContextInfo.messageSecret = randomBytes(32);
|
|
1401
1415
|
}
|
|
1402
1416
|
}
|
|
1403
|
-
return
|
|
1417
|
+
return WAProto.Message.create(m);
|
|
1404
1418
|
};
|
|
1405
1419
|
export const generateWAMessageFromContent = (jid, message, options) => {
|
|
1406
1420
|
// set timestamp to now
|
|
1407
1421
|
// if not specified
|
|
1408
1422
|
if (!options.timestamp) {
|
|
1409
|
-
options.timestamp = Date
|
|
1423
|
+
options.timestamp = new Date();
|
|
1410
1424
|
}
|
|
1411
|
-
const messageContextInfo = message.messageContextInfo;
|
|
1412
1425
|
const innerMessage = normalizeMessageContent(message);
|
|
1426
|
+
const messageContextInfo = message.messageContextInfo;
|
|
1413
1427
|
const key = getContentType(innerMessage);
|
|
1414
1428
|
const timestamp = unixTimestampSeconds(options.timestamp);
|
|
1415
1429
|
const isNewsletter = isJidNewsletter(jid);
|
|
@@ -1464,7 +1478,7 @@ export const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
1464
1478
|
};
|
|
1465
1479
|
messageContextInfo.deviceListMetadataVersion = 2;
|
|
1466
1480
|
}
|
|
1467
|
-
message =
|
|
1481
|
+
message = WAProto.Message.create(message);
|
|
1468
1482
|
const messageJSON = {
|
|
1469
1483
|
key: {
|
|
1470
1484
|
remoteJid: jid,
|
|
@@ -1479,11 +1493,11 @@ export const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
1479
1493
|
};
|
|
1480
1494
|
return WAProto.WebMessageInfo.fromObject(messageJSON);
|
|
1481
1495
|
};
|
|
1482
|
-
export const generateWAMessage = async (jid, content, options
|
|
1496
|
+
export const generateWAMessage = async (jid, content, options) => {
|
|
1483
1497
|
// ensure msg ID is with every log
|
|
1484
1498
|
options.logger = options?.logger?.child({ msgId: options.messageId });
|
|
1485
1499
|
// Pass jid in the options to generateWAMessageContent
|
|
1486
|
-
if (jid
|
|
1500
|
+
if (jid) {
|
|
1487
1501
|
options.jid = jid;
|
|
1488
1502
|
}
|
|
1489
1503
|
return generateWAMessageFromContent(jid, await generateWAMessageContent(content, options), options);
|
|
@@ -1531,10 +1545,13 @@ export const normalizeMessageContent = (content) => {
|
|
|
1531
1545
|
message?.groupStatusMessageV2 ||
|
|
1532
1546
|
message?.limitSharingMessage ||
|
|
1533
1547
|
message?.lottieStickerMessage ||
|
|
1548
|
+
message?.newsletterAdminProfileMessage ||
|
|
1549
|
+
message?.newsletterAdminProfileMessageV2 ||
|
|
1534
1550
|
message?.pollCreationMessageV4 ||
|
|
1535
1551
|
message?.pollCreationOptionImageMessage ||
|
|
1536
1552
|
message?.questionMessage ||
|
|
1537
1553
|
message?.questionReplyMessage ||
|
|
1554
|
+
message?.spoilerMessage ||
|
|
1538
1555
|
message?.statusAddYours ||
|
|
1539
1556
|
message?.statusMentionMessage ||
|
|
1540
1557
|
message?.viewOnceMessage ||
|