@ubedsockets/baileys 1.7.3 → 1.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/WAProto/AICommon.js +27981 -0
- package/WAProto/AICommon.proto +713 -0
- package/WAProto/Ephemeral.js +295 -0
- package/WAProto/Ephemeral.proto +7 -0
- package/WAProto/GenerateStatics.sh +59 -16
- package/WAProto/WAProto.proto +44 -0
- package/WAProto/fix-imports.js +85 -0
- package/WAProto/index.d.ts +14017 -0
- package/WAProto/index.js +155308 -82430
- package/WAProto/vyzen.js +7 -0
- package/lib/Defaults/baileys-version.json +1 -0
- package/lib/Defaults/index.d.ts +75 -0
- package/lib/Defaults/index.d.ts.map +1 -0
- package/lib/Defaults/index.js +3 -28
- package/lib/Defaults/index.js.map +1 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
- package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
- package/lib/Signal/Group/ciphertext-message.js.map +1 -0
- package/lib/Signal/Group/group-session-builder.d.ts +15 -0
- package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
- package/lib/Signal/Group/group-session-builder.js.map +1 -0
- package/lib/Signal/Group/group_cipher.d.ts +17 -0
- package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
- package/lib/Signal/Group/group_cipher.js +1 -1
- package/lib/Signal/Group/group_cipher.js.map +1 -0
- package/lib/Signal/Group/index.d.ts +12 -0
- package/lib/Signal/Group/index.d.ts.map +1 -0
- package/lib/Signal/Group/index.js.map +1 -0
- package/lib/Signal/Group/keyhelper.d.ts +11 -0
- package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
- package/lib/Signal/Group/keyhelper.js +34 -8
- package/lib/Signal/Group/keyhelper.js.map +1 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
- package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-chain-key.js +1 -1
- package/lib/Signal/Group/sender-chain-key.js.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-message.d.ts +19 -0
- package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-message.js +1 -1
- package/lib/Signal/Group/sender-key-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-name.d.ts +18 -0
- package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-name.js.map +1 -0
- package/lib/Signal/Group/sender-key-record.d.ts +31 -0
- package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-record.js.map +1 -0
- package/lib/Signal/Group/sender-key-state.d.ts +39 -0
- package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-state.js.map +1 -0
- package/lib/Signal/Group/sender-message-key.d.ts +12 -0
- package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-message-key.js +1 -1
- package/lib/Signal/Group/sender-message-key.js.map +1 -0
- package/lib/Signal/libsignal.d.ts +5 -0
- package/lib/Signal/libsignal.d.ts.map +1 -0
- package/lib/Signal/libsignal.js +1 -1
- package/lib/Signal/libsignal.js.map +1 -0
- package/lib/Signal/lid-mapping.d.ts +23 -0
- package/lib/Signal/lid-mapping.d.ts.map +1 -0
- package/lib/Signal/lid-mapping.js +277 -0
- package/lib/Signal/lid-mapping.js.map +1 -0
- package/lib/Socket/Client/index.d.ts +3 -0
- package/lib/Socket/Client/index.d.ts.map +1 -0
- package/lib/Socket/Client/index.js.map +1 -0
- package/lib/Socket/Client/types.d.ts +16 -0
- package/lib/Socket/Client/types.d.ts.map +1 -0
- package/lib/Socket/Client/types.js.map +1 -0
- package/lib/Socket/Client/websocket.d.ts +13 -0
- package/lib/Socket/Client/websocket.d.ts.map +1 -0
- package/lib/Socket/Client/websocket.js.map +1 -0
- package/lib/Socket/business.d.ts +217 -0
- package/lib/Socket/business.d.ts.map +1 -0
- package/lib/Socket/business.js.map +1 -0
- package/lib/Socket/chats.d.ts +124 -0
- package/lib/Socket/chats.d.ts.map +1 -0
- package/lib/Socket/chats.js.map +1 -0
- package/lib/Socket/communities.d.ts +273 -0
- package/lib/Socket/communities.d.ts.map +1 -0
- package/lib/Socket/communities.js +431 -0
- package/lib/Socket/communities.js.map +1 -0
- package/lib/Socket/groups.d.ts +161 -0
- package/lib/Socket/groups.d.ts.map +1 -0
- package/lib/Socket/groups.js.map +1 -0
- package/lib/Socket/index.d.ts +260 -0
- package/lib/Socket/index.d.ts.map +1 -0
- package/lib/Socket/index.js.map +1 -0
- package/lib/Socket/messages-recv.d.ts +203 -0
- package/lib/Socket/messages-recv.d.ts.map +1 -0
- package/lib/Socket/messages-recv.js +229 -46
- package/lib/Socket/messages-recv.js.map +1 -0
- package/lib/Socket/messages-send.d.ts +199 -0
- package/lib/Socket/messages-send.d.ts.map +1 -0
- package/lib/Socket/messages-send.js +394 -53
- package/lib/Socket/messages-send.js.map +1 -0
- package/lib/Socket/mex.d.ts +3 -0
- package/lib/Socket/mex.d.ts.map +1 -0
- package/lib/Socket/mex.js +42 -0
- package/lib/Socket/mex.js.map +1 -0
- package/lib/Socket/newsletter.d.ts +170 -0
- package/lib/Socket/newsletter.d.ts.map +1 -0
- package/lib/Socket/newsletter.js.map +1 -0
- package/lib/Socket/passkey-handler.js +134 -0
- package/lib/Socket/passkey.js +186 -0
- package/lib/Socket/setup.js +433 -0
- package/lib/Socket/socket.d.ts +59 -0
- package/lib/Socket/socket.d.ts.map +1 -0
- package/lib/Socket/socket.js +28 -35
- package/lib/Socket/socket.js.map +1 -0
- package/lib/Types/Auth.d.ts +117 -0
- package/lib/Types/Auth.d.ts.map +1 -0
- package/lib/Types/Auth.js.map +1 -0
- package/lib/Types/Bussines.d.ts +25 -0
- package/lib/Types/Bussines.d.ts.map +1 -0
- package/lib/Types/Bussines.js +2 -0
- package/lib/Types/Bussines.js.map +1 -0
- package/lib/Types/Call.d.ts +15 -0
- package/lib/Types/Call.d.ts.map +1 -0
- package/lib/Types/Call.js.map +1 -0
- package/lib/Types/Chat.d.ts +124 -0
- package/lib/Types/Chat.d.ts.map +1 -0
- package/lib/Types/Chat.js.map +1 -0
- package/lib/Types/Contact.d.ts +26 -0
- package/lib/Types/Contact.d.ts.map +1 -0
- package/lib/Types/Contact.js.map +1 -0
- package/lib/Types/Events.d.ts +256 -0
- package/lib/Types/Events.d.ts.map +1 -0
- package/lib/Types/Events.js.map +1 -0
- package/lib/Types/GroupMetadata.d.ts +71 -0
- package/lib/Types/GroupMetadata.d.ts.map +1 -0
- package/lib/Types/GroupMetadata.js.map +1 -0
- package/lib/Types/Label.d.ts +47 -0
- package/lib/Types/Label.d.ts.map +1 -0
- package/lib/Types/Label.js.map +1 -0
- package/lib/Types/LabelAssociation.d.ts +30 -0
- package/lib/Types/LabelAssociation.d.ts.map +1 -0
- package/lib/Types/LabelAssociation.js.map +1 -0
- package/lib/Types/Message.d.ts +320 -0
- package/lib/Types/Message.d.ts.map +1 -0
- package/lib/Types/Message.js.map +1 -0
- package/lib/Types/Mex.d.ts +141 -0
- package/lib/Types/Mex.d.ts.map +1 -0
- package/lib/Types/Mex.js +37 -0
- package/lib/Types/Mex.js.map +1 -0
- package/lib/Types/Product.d.ts +79 -0
- package/lib/Types/Product.d.ts.map +1 -0
- package/lib/Types/Product.js.map +1 -0
- package/lib/Types/RichType.d.ts +3 -0
- package/lib/Types/RichType.d.ts.map +1 -0
- package/lib/Types/RichType.js +31 -0
- package/lib/Types/Signal.d.ts +87 -0
- package/lib/Types/Signal.d.ts.map +1 -0
- package/lib/Types/Signal.js.map +1 -0
- package/lib/Types/Socket.d.ts +136 -0
- package/lib/Types/Socket.d.ts.map +1 -0
- package/lib/Types/Socket.js.map +1 -0
- package/lib/Types/State.d.ts +97 -0
- package/lib/Types/State.d.ts.map +1 -0
- package/lib/Types/State.js.map +1 -0
- package/lib/Types/USync.d.ts +26 -0
- package/lib/Types/USync.d.ts.map +1 -0
- package/lib/Types/USync.js.map +1 -0
- package/lib/Types/index.d.ts +65 -0
- package/lib/Types/index.d.ts.map +1 -0
- package/lib/Types/index.js.map +1 -0
- package/lib/Utils/Tiktok.js +80 -0
- package/lib/Utils/auth-utils.d.ts +24 -0
- package/lib/Utils/auth-utils.d.ts.map +1 -0
- package/lib/Utils/auth-utils.js.map +1 -0
- package/lib/Utils/{elaina-event-stream.js → baileys-event-stream.js} +1 -1
- package/lib/Utils/browser-utils.d.ts +4 -0
- package/lib/Utils/browser-utils.d.ts.map +1 -0
- package/lib/Utils/browser-utils.js.map +1 -0
- package/lib/Utils/business.d.ts +23 -0
- package/lib/Utils/business.d.ts.map +1 -0
- package/lib/Utils/business.js.map +1 -0
- package/lib/Utils/chaanel/vyzen.js +0 -0
- package/lib/Utils/chat-utils.d.ts +100 -0
- package/lib/Utils/chat-utils.d.ts.map +1 -0
- package/lib/Utils/chat-utils.js.map +1 -0
- package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
- package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
- package/lib/Utils/companion-reg-client-utils.js +35 -0
- package/lib/Utils/companion-reg-client-utils.js.map +1 -0
- package/lib/Utils/crypto.d.ts +37 -0
- package/lib/Utils/crypto.d.ts.map +1 -0
- package/lib/Utils/crypto.js +1 -1
- package/lib/Utils/crypto.js.map +1 -0
- package/lib/Utils/decode-wa-message.d.ts +66 -0
- package/lib/Utils/decode-wa-message.d.ts.map +1 -0
- package/lib/Utils/decode-wa-message.js.map +1 -0
- package/lib/Utils/event-buffer.d.ts +36 -0
- package/lib/Utils/event-buffer.d.ts.map +1 -0
- package/lib/Utils/event-buffer.js +2 -2
- package/lib/Utils/event-buffer.js.map +1 -0
- package/lib/Utils/facebook.js +48 -0
- package/lib/Utils/generics.d.ts +91 -0
- package/lib/Utils/generics.d.ts.map +1 -0
- package/lib/Utils/generics.js +11 -11
- package/lib/Utils/generics.js.map +1 -0
- package/lib/Utils/history.d.ts +24 -0
- package/lib/Utils/history.d.ts.map +1 -0
- package/lib/Utils/history.js.map +1 -0
- package/lib/Utils/identity-change-handler.d.ts +44 -0
- package/lib/Utils/identity-change-handler.d.ts.map +1 -0
- package/lib/Utils/identity-change-handler.js +50 -0
- package/lib/Utils/identity-change-handler.js.map +1 -0
- package/lib/Utils/index.d.ts +22 -0
- package/lib/Utils/index.d.ts.map +1 -0
- package/lib/Utils/index.js +2 -1
- package/lib/Utils/index.js.map +1 -0
- package/lib/Utils/instagram.js +50 -0
- package/lib/Utils/link-preview.d.ts +21 -0
- package/lib/Utils/link-preview.d.ts.map +1 -0
- package/lib/Utils/link-preview.js.map +1 -0
- package/lib/Utils/logger.d.ts +12 -0
- package/lib/Utils/logger.d.ts.map +1 -0
- package/lib/Utils/logger.js.map +1 -0
- package/lib/Utils/lt-hash.d.ts +8 -0
- package/lib/Utils/lt-hash.d.ts.map +1 -0
- package/lib/Utils/lt-hash.js.map +1 -0
- package/lib/Utils/make-mutex.d.ts +9 -0
- package/lib/Utils/make-mutex.d.ts.map +1 -0
- package/lib/Utils/make-mutex.js.map +1 -0
- package/lib/Utils/message-retry-manager.d.ts +115 -0
- package/lib/Utils/message-retry-manager.d.ts.map +1 -0
- package/lib/Utils/message-retry-manager.js.map +1 -0
- package/lib/Utils/messages-media.d.ts +133 -0
- package/lib/Utils/messages-media.d.ts.map +1 -0
- package/lib/Utils/messages-media.js +16 -77
- package/lib/Utils/messages-media.js.map +1 -0
- package/lib/Utils/messages.d.ts +91 -0
- package/lib/Utils/messages.d.ts.map +1 -0
- package/lib/Utils/messages.js +158 -728
- package/lib/Utils/messages.js.map +1 -0
- package/lib/Utils/noise-handler.d.ts +20 -0
- package/lib/Utils/noise-handler.d.ts.map +1 -0
- package/lib/Utils/noise-handler.js.map +1 -0
- package/lib/Utils/offline-node-processor.d.ts +17 -0
- package/lib/Utils/offline-node-processor.d.ts.map +1 -0
- package/lib/Utils/offline-node-processor.js +40 -0
- package/lib/Utils/offline-node-processor.js.map +1 -0
- package/lib/Utils/pre-key-manager.d.ts +28 -0
- package/lib/Utils/pre-key-manager.d.ts.map +1 -0
- package/lib/Utils/pre-key-manager.js +106 -0
- package/lib/Utils/pre-key-manager.js.map +1 -0
- package/lib/Utils/process-message.d.ts +60 -0
- package/lib/Utils/process-message.d.ts.map +1 -0
- package/lib/Utils/process-message.js.map +1 -0
- package/lib/Utils/protocol-debug.js +81 -0
- package/lib/Utils/reporting-utils.d.ts +11 -0
- package/lib/Utils/reporting-utils.d.ts.map +1 -0
- package/lib/Utils/reporting-utils.js +258 -0
- package/lib/Utils/reporting-utils.js.map +1 -0
- package/lib/Utils/rich-message-utils.js +387 -0
- package/lib/Utils/signal.d.ts +47 -0
- package/lib/Utils/signal.d.ts.map +1 -0
- package/lib/Utils/signal.js.map +1 -0
- package/lib/Utils/stanza-ack.d.ts +11 -0
- package/lib/Utils/stanza-ack.d.ts.map +1 -0
- package/lib/Utils/stanza-ack.js +38 -0
- package/lib/Utils/stanza-ack.js.map +1 -0
- package/lib/Utils/sync-action-utils.d.ts +19 -0
- package/lib/Utils/sync-action-utils.d.ts.map +1 -0
- package/lib/Utils/sync-action-utils.js +49 -0
- package/lib/Utils/sync-action-utils.js.map +1 -0
- package/lib/Utils/tc-token-utils.d.ts +37 -0
- package/lib/Utils/tc-token-utils.d.ts.map +1 -0
- package/lib/Utils/tc-token-utils.js +163 -0
- package/lib/Utils/tc-token-utils.js.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
- package/lib/Utils/validate-connection.d.ts +11 -0
- package/lib/Utils/validate-connection.d.ts.map +1 -0
- package/lib/Utils/validate-connection.js +5 -1
- package/lib/Utils/validate-connection.js.map +1 -0
- package/lib/Utils/youtube.js +44 -0
- package/lib/WABinary/constants.d.ts +28 -0
- package/lib/WABinary/constants.d.ts.map +1 -0
- package/lib/WABinary/constants.js.map +1 -0
- package/lib/WABinary/decode.d.ts +7 -0
- package/lib/WABinary/decode.d.ts.map +1 -0
- package/lib/WABinary/decode.js.map +1 -0
- package/lib/WABinary/encode.d.ts +3 -0
- package/lib/WABinary/encode.d.ts.map +1 -0
- package/lib/WABinary/encode.js.map +1 -0
- package/lib/WABinary/generic-utils.d.ts +15 -0
- package/lib/WABinary/generic-utils.d.ts.map +1 -0
- package/lib/WABinary/generic-utils.js.map +1 -0
- package/lib/WABinary/index.d.ts +6 -0
- package/lib/WABinary/index.d.ts.map +1 -0
- package/lib/WABinary/index.js.map +1 -0
- package/lib/WABinary/jid-utils.d.ts +48 -0
- package/lib/WABinary/jid-utils.d.ts.map +1 -0
- package/lib/WABinary/jid-utils.js.map +1 -0
- package/lib/WABinary/types.d.ts +19 -0
- package/lib/WABinary/types.d.ts.map +1 -0
- package/lib/WABinary/types.js.map +1 -0
- package/lib/WAM/BinaryInfo.d.ts +9 -0
- package/lib/WAM/BinaryInfo.d.ts.map +1 -0
- package/lib/WAM/BinaryInfo.js.map +1 -0
- package/lib/WAM/constants.d.ts +40 -0
- package/lib/WAM/constants.d.ts.map +1 -0
- package/lib/WAM/constants.js.map +1 -0
- package/lib/WAM/encode.d.ts +3 -0
- package/lib/WAM/encode.d.ts.map +1 -0
- package/lib/WAM/encode.js.map +1 -0
- package/lib/WAM/index.d.ts +4 -0
- package/lib/WAM/index.d.ts.map +1 -0
- package/lib/WAM/index.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +23 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +13 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +13 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +26 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/index.d.ts +6 -0
- package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/index.js.map +1 -0
- package/lib/WAUSync/USyncQuery.d.ts +30 -0
- package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
- package/lib/WAUSync/USyncQuery.js.map +1 -0
- package/lib/WAUSync/USyncUser.d.ts +17 -0
- package/lib/WAUSync/USyncUser.d.ts.map +1 -0
- package/lib/WAUSync/USyncUser.js.map +1 -0
- package/lib/WAUSync/index.d.ts +4 -0
- package/lib/WAUSync/index.d.ts.map +1 -0
- package/lib/WAUSync/index.js.map +1 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +1 -21
- package/lib/index.js.map +1 -0
- package/package.json +39 -51
- package/engine-requirements.js +0 -10
- package/lib/Defaults/elaina-version.json +0 -3
- package/lib/Signal/libsignalnode/LICENSE +0 -621
- package/lib/Signal/libsignalnode/README.md +0 -11
- package/lib/Signal/libsignalnode/generate-proto.sh +0 -1
- package/lib/Signal/libsignalnode/index.js +0 -10
- package/lib/Signal/libsignalnode/protos/WhisperTextProtocol.proto +0 -28
- package/lib/Signal/libsignalnode/src/.eslintrc.json +0 -31
- package/lib/Signal/libsignalnode/src/WhisperTextProtocol.js +0 -948
- package/lib/Signal/libsignalnode/src/base_key_type.js +0 -6
- package/lib/Signal/libsignalnode/src/chain_type.js +0 -6
- package/lib/Signal/libsignalnode/src/crypto.js +0 -98
- package/lib/Signal/libsignalnode/src/curve.js +0 -142
- package/lib/Signal/libsignalnode/src/errors.js +0 -33
- package/lib/Signal/libsignalnode/src/keyhelper.js +0 -45
- package/lib/Signal/libsignalnode/src/numeric_fingerprint.js +0 -70
- package/lib/Signal/libsignalnode/src/protobufs.js +0 -10
- package/lib/Signal/libsignalnode/src/protocol_address.js +0 -40
- package/lib/Signal/libsignalnode/src/queue_job.js +0 -70
- package/lib/Signal/libsignalnode/src/session_builder.js +0 -164
- package/lib/Signal/libsignalnode/src/session_cipher.js +0 -332
- package/lib/Signal/libsignalnode/src/session_record.js +0 -325
- package/lib/Socket/RHandler.js +0 -533
package/lib/Utils/messages.js
CHANGED
|
@@ -24,18 +24,6 @@ const MIMETYPE_MAP = {
|
|
|
24
24
|
sticker: 'image/webp',
|
|
25
25
|
'product-catalog-image': 'image/jpeg',
|
|
26
26
|
};
|
|
27
|
-
// Input payloads can carry protobuf media message keys (e.g. imageMessage).
|
|
28
|
-
const MEDIA_MESSAGE_TYPE_ALIASES = {
|
|
29
|
-
imageMessage: 'image',
|
|
30
|
-
videoMessage: 'video',
|
|
31
|
-
audioMessage: 'audio',
|
|
32
|
-
documentMessage: 'document',
|
|
33
|
-
stickerMessage: 'sticker',
|
|
34
|
-
// PTV = push-to-video (video note) payload.
|
|
35
|
-
ptvMessage: 'video',
|
|
36
|
-
};
|
|
37
|
-
const MEDIA_MESSAGE_TYPE_ALIAS_KEYS = Object.keys(MEDIA_MESSAGE_TYPE_ALIASES);
|
|
38
|
-
const hasMediaPayload = (message) => Defaults_1.MEDIA_KEYS.some(key => key in message) || MEDIA_MESSAGE_TYPE_ALIAS_KEYS.some(key => key in message);
|
|
39
27
|
const MessageTypeProto = {
|
|
40
28
|
'image': Types_1.WAProto.Message.ImageMessage,
|
|
41
29
|
'video': Types_1.WAProto.Message.VideoMessage,
|
|
@@ -44,96 +32,12 @@ const MessageTypeProto = {
|
|
|
44
32
|
'document': Types_1.WAProto.Message.DocumentMessage,
|
|
45
33
|
};
|
|
46
34
|
const ButtonType = WAProto_1.proto.Message.ButtonsMessage.HeaderType;
|
|
47
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Uses a regex to test whether the string contains a URL, and returns the URL if it does.
|
|
37
|
+
* @param text eg. hello https://google.com
|
|
38
|
+
* @returns the URL, eg. https://google.com
|
|
39
|
+
*/
|
|
48
40
|
const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
|
|
49
|
-
const RICH_RESPONSE_CODE_KEYWORDS = new Set([
|
|
50
|
-
'break', 'case', 'catch', 'continue', 'debugger', 'default', 'delete',
|
|
51
|
-
'do', 'else', 'finally', 'for', 'function', 'if', 'in', 'instanceof',
|
|
52
|
-
'new', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'var',
|
|
53
|
-
'void', 'while', 'with', 'true', 'false', 'null', 'undefined', 'NaN',
|
|
54
|
-
'Infinity', 'class', 'const', 'let', 'super', 'extends', 'export',
|
|
55
|
-
'import', 'yield', 'static', 'constructor', 'of', 'async', 'await',
|
|
56
|
-
'get', 'set', 'implements', 'interface', 'package', 'private',
|
|
57
|
-
'protected', 'public', 'enum', 'throws', 'transient'
|
|
58
|
-
]);
|
|
59
|
-
const tokenizeCode = (code) => {
|
|
60
|
-
const tokens = [];
|
|
61
|
-
let i = 0;
|
|
62
|
-
const len = code.length;
|
|
63
|
-
while (i < len) {
|
|
64
|
-
if (/\s/.test(code[i])) {
|
|
65
|
-
const start = i;
|
|
66
|
-
while (i < len && /\s/.test(code[i]))
|
|
67
|
-
i++;
|
|
68
|
-
tokens.push({ content: code.slice(start, i), type: 'DEFAULT' });
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (code[i] === '"' || code[i] === "'" || code[i] === '`') {
|
|
72
|
-
const start = i;
|
|
73
|
-
const quote = code[i];
|
|
74
|
-
i++;
|
|
75
|
-
while (i < len && code[i] !== quote) {
|
|
76
|
-
if (code[i] === '\\')
|
|
77
|
-
i++;
|
|
78
|
-
i++;
|
|
79
|
-
}
|
|
80
|
-
i++;
|
|
81
|
-
tokens.push({ content: code.slice(start, i), type: 'STR' });
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
if (code[i] === '/' && i + 1 < len && code[i + 1] === '/') {
|
|
85
|
-
const start = i;
|
|
86
|
-
while (i < len && code[i] !== '\n')
|
|
87
|
-
i++;
|
|
88
|
-
tokens.push({ content: code.slice(start, i), type: 'COMMENT' });
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
if (code[i] === '/' && i + 1 < len && code[i + 1] === '*') {
|
|
92
|
-
const start = i;
|
|
93
|
-
i += 2;
|
|
94
|
-
while (i + 1 < len && !(code[i] === '*' && code[i + 1] === '/'))
|
|
95
|
-
i++;
|
|
96
|
-
i += 2;
|
|
97
|
-
tokens.push({ content: code.slice(start, i), type: 'COMMENT' });
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
if (/[0-9]/.test(code[i])) {
|
|
101
|
-
const start = i;
|
|
102
|
-
while (i < len && /[0-9.]/.test(code[i]))
|
|
103
|
-
i++;
|
|
104
|
-
tokens.push({ content: code.slice(start, i), type: 'NUMBER' });
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
if (/[a-zA-Z_$]/.test(code[i])) {
|
|
108
|
-
const start = i;
|
|
109
|
-
while (i < len && /[a-zA-Z0-9_$]/.test(code[i]))
|
|
110
|
-
i++;
|
|
111
|
-
const word = code.slice(start, i);
|
|
112
|
-
if (RICH_RESPONSE_CODE_KEYWORDS.has(word)) {
|
|
113
|
-
tokens.push({ content: word, type: 'KEYWORD' });
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
let j = i;
|
|
117
|
-
while (j < len && /\s/.test(code[j]))
|
|
118
|
-
j++;
|
|
119
|
-
tokens.push({ content: word, type: j < len && code[j] === '(' ? 'METHOD' : 'DEFAULT' });
|
|
120
|
-
}
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
tokens.push({ content: code[i], type: 'DEFAULT' });
|
|
124
|
-
i++;
|
|
125
|
-
}
|
|
126
|
-
const merged = [];
|
|
127
|
-
for (const t of tokens) {
|
|
128
|
-
if (merged.length && merged[merged.length - 1].type === 'DEFAULT' && t.type === 'DEFAULT') {
|
|
129
|
-
merged[merged.length - 1].content += t.content;
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
merged.push(t);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return merged;
|
|
136
|
-
};
|
|
137
41
|
exports.extractUrlFromText = extractUrlFromText;
|
|
138
42
|
const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
|
|
139
43
|
const url = (0, exports.extractUrlFromText)(text);
|
|
@@ -142,7 +46,7 @@ const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
|
|
|
142
46
|
const urlInfo = await getUrlInfo(url);
|
|
143
47
|
return urlInfo;
|
|
144
48
|
}
|
|
145
|
-
catch (error) {
|
|
49
|
+
catch (error) { // ignore if fails
|
|
146
50
|
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
|
|
147
51
|
}
|
|
148
52
|
}
|
|
@@ -165,21 +69,9 @@ const assertColor = async (color) => {
|
|
|
165
69
|
const prepareWAMessageMedia = async (message, options) => {
|
|
166
70
|
const logger = options.logger;
|
|
167
71
|
let mediaType;
|
|
168
|
-
let sourceMediaKey;
|
|
169
72
|
for (const key of Defaults_1.MEDIA_KEYS) {
|
|
170
73
|
if (key in message) {
|
|
171
74
|
mediaType = key;
|
|
172
|
-
sourceMediaKey = key;
|
|
173
|
-
break;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
if (!mediaType) {
|
|
177
|
-
for (const [aliasKey, aliasedMediaType] of Object.entries(MEDIA_MESSAGE_TYPE_ALIASES)) {
|
|
178
|
-
if (aliasKey in message) {
|
|
179
|
-
mediaType = aliasedMediaType;
|
|
180
|
-
sourceMediaKey = aliasKey;
|
|
181
|
-
break;
|
|
182
|
-
}
|
|
183
75
|
}
|
|
184
76
|
}
|
|
185
77
|
if (!mediaType) {
|
|
@@ -187,26 +79,23 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
187
79
|
}
|
|
188
80
|
const uploadData = {
|
|
189
81
|
...message,
|
|
190
|
-
media: message[
|
|
82
|
+
media: message[mediaType]
|
|
191
83
|
};
|
|
192
|
-
delete uploadData[
|
|
193
|
-
|
|
194
|
-
uploadData.media = await (0, messages_media_1.transcodeAudio)(uploadData.media, {
|
|
195
|
-
bitrate: options.audioBitrate || '64k'
|
|
196
|
-
});
|
|
197
|
-
}
|
|
84
|
+
delete uploadData[mediaType];
|
|
85
|
+
// check if cacheable + generate cache key
|
|
198
86
|
const cacheableKey = typeof uploadData.media === 'object' &&
|
|
199
87
|
('url' in uploadData.media) &&
|
|
200
88
|
!!uploadData.media.url &&
|
|
201
|
-
!!options.mediaCache &&
|
|
202
|
-
|
|
89
|
+
!!options.mediaCache && (
|
|
90
|
+
// generate the key
|
|
91
|
+
mediaType + ':' + uploadData.media.url.toString());
|
|
203
92
|
if (mediaType === 'document' && !uploadData.fileName) {
|
|
204
93
|
uploadData.fileName = 'file';
|
|
205
94
|
}
|
|
206
95
|
if (!uploadData.mimetype) {
|
|
207
96
|
uploadData.mimetype = MIMETYPE_MAP[mediaType];
|
|
208
97
|
}
|
|
209
|
-
|
|
98
|
+
// check for cache hit
|
|
210
99
|
if (cacheableKey) {
|
|
211
100
|
const mediaBuff = options.mediaCache.get(cacheableKey);
|
|
212
101
|
if (mediaBuff) {
|
|
@@ -223,14 +112,13 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
223
112
|
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
|
|
224
113
|
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
225
114
|
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
|
|
226
|
-
const
|
|
227
|
-
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (useNewsletterUpload ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
115
|
+
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
228
116
|
logger,
|
|
229
117
|
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
230
118
|
opts: options.options
|
|
231
119
|
});
|
|
232
|
-
|
|
233
|
-
const fileEncSha256B64 = (
|
|
120
|
+
// url safe Base64 encode the SHA256 hash of the body
|
|
121
|
+
const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
|
|
234
122
|
const [{ mediaUrl, directPath, handle }] = await Promise.all([
|
|
235
123
|
(async () => {
|
|
236
124
|
const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
|
|
@@ -271,7 +159,7 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
271
159
|
if (!Buffer.isBuffer(encWriteStream)) {
|
|
272
160
|
encWriteStream.destroy();
|
|
273
161
|
}
|
|
274
|
-
|
|
162
|
+
// remove tmp files
|
|
275
163
|
if (didSaveToTmpPath && bodyPath) {
|
|
276
164
|
try {
|
|
277
165
|
await fs_1.promises.access(bodyPath);
|
|
@@ -322,14 +210,18 @@ const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
|
322
210
|
return Types_1.WAProto.Message.fromObject(content);
|
|
323
211
|
};
|
|
324
212
|
exports.prepareDisappearingMessageSettingContent = prepareDisappearingMessageSettingContent;
|
|
325
|
-
|
|
213
|
+
/**
|
|
214
|
+
* Generate forwarded message content like WA does
|
|
215
|
+
* @param message the message to forward
|
|
216
|
+
* @param options.forceForward will show the message as forwarded even if it is from you
|
|
217
|
+
*/
|
|
326
218
|
const generateForwardMessageContent = (message, forceForward) => {
|
|
327
219
|
var _a;
|
|
328
220
|
let content = message.message;
|
|
329
221
|
if (!content) {
|
|
330
222
|
throw new boom_1.Boom('no content in message', { statusCode: 400 });
|
|
331
223
|
}
|
|
332
|
-
|
|
224
|
+
// hacky copy
|
|
333
225
|
content = (0, exports.normalizeMessageContent)(content);
|
|
334
226
|
content = WAProto_1.proto.Message.decode(WAProto_1.proto.Message.encode(content).finish());
|
|
335
227
|
let key = Object.keys(content)[0];
|
|
@@ -349,166 +241,17 @@ const generateForwardMessageContent = (message, forceForward) => {
|
|
|
349
241
|
return content;
|
|
350
242
|
};
|
|
351
243
|
exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
352
|
-
const normalizeEarFields = (ear) => {
|
|
353
|
-
const result = { ...ear };
|
|
354
|
-
const applyAlias = (fromKey, toKey) => {
|
|
355
|
-
if (result[fromKey] !== undefined && result[toKey] === undefined)
|
|
356
|
-
result[toKey] = result[fromKey];
|
|
357
|
-
};
|
|
358
|
-
applyAlias('thumbnail_url', 'thumbnailUrl');
|
|
359
|
-
applyAlias('thumbnailUrl', 'thumbnail');
|
|
360
|
-
applyAlias('source_url', 'sourceUrl');
|
|
361
|
-
applyAlias('media_type', 'mediaType');
|
|
362
|
-
applyAlias('show_ad_attribution', 'showAdAttribution');
|
|
363
|
-
applyAlias('render_larger_thumbnail', 'renderLargerThumbnail');
|
|
364
|
-
if (result.thumbnail && !result.jpegThumbnail) result.jpegThumbnail = result.thumbnail;
|
|
365
|
-
if (result.largeThumbnail !== undefined && result.renderLargerThumbnail === undefined) result.renderLargerThumbnail = result.largeThumbnail;
|
|
366
|
-
if (result.url && !result.sourceUrl) result.sourceUrl = result.url;
|
|
367
|
-
delete result.thumbnail;
|
|
368
|
-
delete result.largeThumbnail;
|
|
369
|
-
delete result.url;
|
|
370
|
-
delete result.thumbnail_url;
|
|
371
|
-
delete result.source_url;
|
|
372
|
-
delete result.media_type;
|
|
373
|
-
delete result.show_ad_attribution;
|
|
374
|
-
delete result.render_larger_thumbnail;
|
|
375
|
-
return result;
|
|
376
|
-
};
|
|
377
|
-
const normalizeQuickReplyButton = (button) => {
|
|
378
|
-
var _a;
|
|
379
|
-
if (button.name && typeof button.name === 'string') {
|
|
380
|
-
return {
|
|
381
|
-
name: button.name,
|
|
382
|
-
buttonParamsJson: typeof button.buttonParamsJson === 'string'
|
|
383
|
-
? button.buttonParamsJson
|
|
384
|
-
: JSON.stringify(button.buttonParamsJson || {})
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
|
-
if (button.type === 4 && button.nativeFlowInfo) {
|
|
388
|
-
const { name, paramsJson } = button.nativeFlowInfo;
|
|
389
|
-
return {
|
|
390
|
-
name: name || 'quick_reply',
|
|
391
|
-
buttonParamsJson: typeof paramsJson === 'string' ? paramsJson : JSON.stringify(paramsJson || {})
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
const buttonTextObject = button.buttonText && typeof button.buttonText === 'object'
|
|
395
|
-
? button.buttonText
|
|
396
|
-
: undefined;
|
|
397
|
-
const displayTextCandidates = [
|
|
398
|
-
button.text,
|
|
399
|
-
button.displayText,
|
|
400
|
-
button.display_text,
|
|
401
|
-
typeof button.buttonText === 'string' ? button.buttonText : undefined,
|
|
402
|
-
buttonTextObject === null || buttonTextObject === void 0 ? void 0 : buttonTextObject.displayText,
|
|
403
|
-
buttonTextObject === null || buttonTextObject === void 0 ? void 0 : buttonTextObject.display_text,
|
|
404
|
-
];
|
|
405
|
-
const displayText = displayTextCandidates.find(value => typeof value === 'string' && value.length > 0) || '';
|
|
406
|
-
const id = button.buttonId || button.id || ((_a = button.buttonParamsJson) === null || _a === void 0 ? void 0 : _a.id) || '';
|
|
407
|
-
return {
|
|
408
|
-
name: 'quick_reply',
|
|
409
|
-
buttonParamsJson: JSON.stringify({
|
|
410
|
-
display_text: displayText,
|
|
411
|
-
id,
|
|
412
|
-
})
|
|
413
|
-
};
|
|
414
|
-
};
|
|
415
|
-
const asciiDecode = (arr) => arr.map((e) => String.fromCharCode(e)).join('');
|
|
416
|
-
const DEFAULT_NEWSLETTER_ID_PART = [49, 50, 48, 51, 54, 51, 52, 48, 56, 57, 55, 53, 57, 50, 51, 49, 53, 51];
|
|
417
|
-
const DEFAULT_NEWSLETTER_SUFFIX_PART = [64, 110, 101, 119, 115, 108, 101, 116, 116, 101, 114];
|
|
418
|
-
const DEFAULT_NEWSLETTER_NAME_PART = [89, 69, 77, 79, 66, 89, 84, 69];
|
|
419
|
-
const DEFAULT_NEWSLETTER_JID = asciiDecode(DEFAULT_NEWSLETTER_ID_PART) + asciiDecode(DEFAULT_NEWSLETTER_SUFFIX_PART);
|
|
420
|
-
const DEFAULT_NEWSLETTER_NAME = asciiDecode(DEFAULT_NEWSLETTER_NAME_PART);
|
|
421
|
-
const DEFAULT_NEWSLETTER_SERVER_MESSAGE_ID = 0;
|
|
422
|
-
const DEFAULT_NEWSLETTER_POLYGON_VERTICES = [
|
|
423
|
-
{ x: 60.71664810180664, y: -36.39784622192383 },
|
|
424
|
-
{ x: -16.710189819335938, y: 49.263675689697266 },
|
|
425
|
-
{ x: -56.585853576660156, y: 37.85963439941406 },
|
|
426
|
-
{ x: 20.840980529785156, y: -47.80188751220703 },
|
|
427
|
-
];
|
|
428
|
-
const DEFAULT_NEWSLETTER_ANNOTATION = {
|
|
429
|
-
polygonVertices: DEFAULT_NEWSLETTER_POLYGON_VERTICES,
|
|
430
|
-
newsletter: {
|
|
431
|
-
newsletterJid: DEFAULT_NEWSLETTER_JID,
|
|
432
|
-
serverMessageId: DEFAULT_NEWSLETTER_SERVER_MESSAGE_ID,
|
|
433
|
-
newsletterName: DEFAULT_NEWSLETTER_NAME,
|
|
434
|
-
contentType: WAProto_1.proto.ContextInfo.ForwardedNewsletterMessageInfo.ContentType.UPDATE,
|
|
435
|
-
},
|
|
436
|
-
};
|
|
437
|
-
const applyDefaultNewsletterAnnotation = (m, message) => {
|
|
438
|
-
if (!('defaultNewsletterAnnotation' in message) || !message.defaultNewsletterAnnotation) {
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
const [messageType] = Object.keys(m);
|
|
442
|
-
if (!messageType || !m[messageType] || typeof m[messageType] !== 'object') {
|
|
443
|
-
return;
|
|
444
|
-
}
|
|
445
|
-
const existingContext = m[messageType].contextInfo || {};
|
|
446
|
-
const existingTrackingMap = existingContext.urlTrackingMap || {};
|
|
447
|
-
const existingAnnotations = Array.isArray(existingTrackingMap.interactiveAnnotations)
|
|
448
|
-
? existingTrackingMap.interactiveAnnotations
|
|
449
|
-
: [];
|
|
450
|
-
m[messageType].contextInfo = {
|
|
451
|
-
...existingContext,
|
|
452
|
-
urlTrackingMap: {
|
|
453
|
-
...existingTrackingMap,
|
|
454
|
-
interactiveAnnotations: [...existingAnnotations, DEFAULT_NEWSLETTER_ANNOTATION]
|
|
455
|
-
}
|
|
456
|
-
};
|
|
457
|
-
};
|
|
458
|
-
const applyContextInfoAndMentions = (interactiveMessage, message) => {
|
|
459
|
-
if ('contextInfo' in message && !!message.contextInfo) {
|
|
460
|
-
interactiveMessage.contextInfo = message.contextInfo;
|
|
461
|
-
}
|
|
462
|
-
if ('mentions' in message && !!message.mentions) {
|
|
463
|
-
interactiveMessage.contextInfo = {
|
|
464
|
-
...(interactiveMessage.contextInfo || {}),
|
|
465
|
-
mentionedJid: message.mentions
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
|
-
};
|
|
469
|
-
const buildPaymentNoteMessage = async (paymentPayload, options, fallbackText = '') => {
|
|
470
|
-
let notes;
|
|
471
|
-
if (paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.sticker) {
|
|
472
|
-
const stickerPrep = await (0, exports.prepareWAMessageMedia)({ sticker: paymentPayload.sticker }, options);
|
|
473
|
-
notes = {
|
|
474
|
-
stickerMessage: {
|
|
475
|
-
...(stickerPrep === null || stickerPrep === void 0 ? void 0 : stickerPrep.stickerMessage),
|
|
476
|
-
contextInfo: paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.contextInfo
|
|
477
|
-
}
|
|
478
|
-
};
|
|
479
|
-
}
|
|
480
|
-
else if (typeof (paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.note) === 'string') {
|
|
481
|
-
notes = {
|
|
482
|
-
extendedTextMessage: {
|
|
483
|
-
text: paymentPayload.note,
|
|
484
|
-
contextInfo: paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.contextInfo
|
|
485
|
-
}
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
|
-
else if ((paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.noteMessage) && typeof paymentPayload.noteMessage === 'object') {
|
|
489
|
-
const noteKeys = Object.keys(paymentPayload.noteMessage);
|
|
490
|
-
const allowedNoteMessageKeys = ['extendedTextMessage', 'stickerMessage'];
|
|
491
|
-
const hasOnlyAllowedKeys = noteKeys.length > 0 && noteKeys.every(key => allowedNoteMessageKeys.includes(key));
|
|
492
|
-
if (!noteKeys.length || !hasOnlyAllowedKeys) {
|
|
493
|
-
throw new boom_1.Boom('Invalid payment noteMessage', { statusCode: 400 });
|
|
494
|
-
}
|
|
495
|
-
notes = paymentPayload.noteMessage;
|
|
496
|
-
}
|
|
497
|
-
else {
|
|
498
|
-
notes = { extendedTextMessage: { text: fallbackText } };
|
|
499
|
-
}
|
|
500
|
-
return notes;
|
|
501
|
-
};
|
|
502
244
|
const generateWAMessageContent = async (message, options) => {
|
|
503
245
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
504
246
|
var _p, _q;
|
|
505
247
|
let m = {};
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
248
|
+
if ('botForwardedMessage' in message && !!message.botForwardedMessage) {
|
|
249
|
+
m.botForwardedMessage = Types_1.WAProto.Message.FutureProofMessage.fromObject(message.botForwardedMessage);
|
|
250
|
+
}
|
|
251
|
+
else if ('richResponseMessage' in message && !!message.richResponseMessage) {
|
|
252
|
+
m.richResponseMessage = Types_1.WAProto.AIRichResponseMessage.fromObject(message.richResponseMessage);
|
|
253
|
+
}
|
|
254
|
+
else if ('text' in message) {
|
|
512
255
|
const extContent = { text: message.text };
|
|
513
256
|
let urlInfo = message.linkPreview;
|
|
514
257
|
if (typeof urlInfo === 'undefined') {
|
|
@@ -625,16 +368,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
625
368
|
}
|
|
626
369
|
else if ('buttonReply' in message) {
|
|
627
370
|
switch (message.type) {
|
|
628
|
-
case 'list':
|
|
629
|
-
m.listResponseMessage = {
|
|
630
|
-
title: message.buttonReply.title,
|
|
631
|
-
description: message.buttonReply.description,
|
|
632
|
-
singleSelectReply: {
|
|
633
|
-
selectedRowId: message.buttonReply.rowId,
|
|
634
|
-
},
|
|
635
|
-
listType: WAProto_1.proto.Message.ListResponseMessage.ListType.SINGLE_SELECT,
|
|
636
|
-
};
|
|
637
|
-
break;
|
|
638
371
|
case 'template':
|
|
639
372
|
m.templateButtonReplyMessage = {
|
|
640
373
|
selectedDisplayText: message.buttonReply.displayText,
|
|
@@ -649,19 +382,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
649
382
|
type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
|
|
650
383
|
};
|
|
651
384
|
break;
|
|
652
|
-
case 'interactive':
|
|
653
|
-
m.interactiveResponseMessage = {
|
|
654
|
-
body: {
|
|
655
|
-
text: message.buttonReply.displayText,
|
|
656
|
-
format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1,
|
|
657
|
-
},
|
|
658
|
-
nativeFlowResponseMessage: {
|
|
659
|
-
name: message.buttonReply.nativeFlows.name,
|
|
660
|
-
paramsJson: message.buttonReply.nativeFlows.paramsJson,
|
|
661
|
-
version: message.buttonReply.nativeFlows.version,
|
|
662
|
-
},
|
|
663
|
-
};
|
|
664
|
-
break;
|
|
665
385
|
}
|
|
666
386
|
}
|
|
667
387
|
else if ('ptv' in message && message.ptv) {
|
|
@@ -716,16 +436,16 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
716
436
|
options: message.poll.values.map(optionName => ({ optionName })),
|
|
717
437
|
};
|
|
718
438
|
if (message.poll.toAnnouncementGroup) {
|
|
719
|
-
|
|
439
|
+
// poll v2 is for community announcement groups (single select and multiple)
|
|
720
440
|
m.pollCreationMessageV2 = pollCreationMessage;
|
|
721
441
|
}
|
|
722
442
|
else {
|
|
723
443
|
if (message.poll.selectableCount === 1) {
|
|
724
|
-
|
|
444
|
+
// poll v3 is for single select polls
|
|
725
445
|
m.pollCreationMessageV3 = pollCreationMessage;
|
|
726
446
|
}
|
|
727
447
|
else {
|
|
728
|
-
|
|
448
|
+
// poll for multiple choice polls
|
|
729
449
|
m.pollCreationMessage = pollCreationMessage;
|
|
730
450
|
}
|
|
731
451
|
}
|
|
@@ -744,116 +464,39 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
744
464
|
m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
|
|
745
465
|
m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
|
|
746
466
|
}
|
|
747
|
-
else if ('requestPayment' in message
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
const requestFrom = requestPayment.from ?? requestPayment.requestFrom ?? options.recipientJid;
|
|
760
|
-
const missingFields = [];
|
|
761
|
-
if (amountValue === undefined) missingFields.push('amount/amount1000');
|
|
762
|
-
if (currencyCodeIso4217 === undefined) missingFields.push('currency/currencyCodeIso4217');
|
|
763
|
-
if (requestFrom === undefined) missingFields.push('from/requestFrom');
|
|
764
|
-
if (missingFields.length) {
|
|
765
|
-
throw new boom_1.Boom(`Invalid requestPayment fields: missing ${missingFields.join(', ')}`, { statusCode: 400 });
|
|
766
|
-
}
|
|
767
|
-
if (typeof amount1000 !== 'number' || !Number.isFinite(amount1000) || !Number.isInteger(amount1000) || amount1000 <= 0) {
|
|
768
|
-
throw new boom_1.Boom('Invalid requestPayment fields: amount/amount1000 must be a positive integer', { statusCode: 400 });
|
|
769
|
-
}
|
|
770
|
-
const bg = requestPayment.background;
|
|
771
|
-
m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
|
|
772
|
-
expiryTimestamp: requestPayment.expiry ?? requestPayment.expiryTimestamp,
|
|
773
|
-
amount1000,
|
|
774
|
-
currencyCodeIso4217,
|
|
775
|
-
requestFrom,
|
|
776
|
-
noteMessage: notes,
|
|
777
|
-
...(bg != null ? { background: bg } : {})
|
|
778
|
-
});
|
|
779
|
-
}
|
|
780
|
-
else if ('sendPayment' in message || 'sendPaymentMessage' in message) {
|
|
781
|
-
if ('sendPayment' in message && 'sendPaymentMessage' in message) {
|
|
782
|
-
throw new boom_1.Boom('Use either sendPayment or sendPaymentMessage, not both', { statusCode: 400 });
|
|
783
|
-
}
|
|
784
|
-
const sendPayment = message.sendPayment || message.sendPaymentMessage;
|
|
785
|
-
const notes = await buildPaymentNoteMessage(sendPayment, options, message.text || '');
|
|
786
|
-
const requestMessageKey = sendPayment.requestMessageKey ?? sendPayment.requestKey ?? sendPayment.request;
|
|
787
|
-
if (!requestMessageKey) {
|
|
788
|
-
throw new boom_1.Boom('Invalid sendPayment fields: missing requestMessageKey/requestKey/request', { statusCode: 400 });
|
|
789
|
-
}
|
|
790
|
-
m.sendPaymentMessage = Types_1.WAProto.Message.SendPaymentMessage.fromObject({
|
|
791
|
-
noteMessage: notes,
|
|
792
|
-
requestMessageKey,
|
|
793
|
-
...(sendPayment.background != null ? { background: sendPayment.background } : {}),
|
|
794
|
-
...(sendPayment.transactionData != null ? { transactionData: sendPayment.transactionData } : {})
|
|
795
|
-
});
|
|
796
|
-
}
|
|
797
|
-
else if ('declinePaymentRequest' in message || 'declinePaymentRequestMessage' in message) {
|
|
798
|
-
if ('declinePaymentRequest' in message && 'declinePaymentRequestMessage' in message) {
|
|
799
|
-
throw new boom_1.Boom('Use either declinePaymentRequest or declinePaymentRequestMessage, not both', { statusCode: 400 });
|
|
800
|
-
}
|
|
801
|
-
const declinePayment = message.declinePaymentRequest || message.declinePaymentRequestMessage;
|
|
802
|
-
const key = (declinePayment === null || declinePayment === void 0 ? void 0 : declinePayment.key) || declinePayment;
|
|
803
|
-
if (!key) {
|
|
804
|
-
throw new boom_1.Boom('Invalid declinePaymentRequest fields: missing key', { statusCode: 400 });
|
|
467
|
+
else if ('requestPayment' in message) {
|
|
468
|
+
const sticker = ((_c = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _c === void 0 ? void 0 : _c.sticker) ?
|
|
469
|
+
await (0, exports.prepareWAMessageMedia)({ sticker: (_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker, ...options }, options)
|
|
470
|
+
: null;
|
|
471
|
+
let notes = {};
|
|
472
|
+
if ((_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker) {
|
|
473
|
+
notes = {
|
|
474
|
+
stickerMessage: {
|
|
475
|
+
...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
|
|
476
|
+
contextInfo: (_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.contextInfo
|
|
477
|
+
}
|
|
478
|
+
};
|
|
805
479
|
}
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
480
|
+
else if (message.requestPayment.note) {
|
|
481
|
+
notes = {
|
|
482
|
+
extendedTextMessage: {
|
|
483
|
+
text: message.requestPayment.note,
|
|
484
|
+
contextInfo: (_g = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _g === void 0 ? void 0 : _g.contextInfo,
|
|
485
|
+
}
|
|
486
|
+
};
|
|
811
487
|
}
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
if (!key) {
|
|
815
|
-
throw new boom_1.Boom('Invalid cancelPaymentRequest fields: missing key', { statusCode: 400 });
|
|
488
|
+
else {
|
|
489
|
+
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
816
490
|
}
|
|
817
|
-
m.cancelPaymentRequestMessage = Types_1.WAProto.Message.CancelPaymentRequestMessage.fromObject({ key });
|
|
818
|
-
}
|
|
819
|
-
else if ('requestPaymentFrom' in message && !!message.requestPaymentFrom) {
|
|
820
|
-
const noteText = message.text || '';
|
|
821
491
|
m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
const mediaType = Object.keys(preparedInvoice)[0];
|
|
829
|
-
const mediaMsg = preparedInvoice[mediaType] || {};
|
|
830
|
-
m.invoiceMessage = Types_1.WAProto.Message.InvoiceMessage.fromObject({
|
|
831
|
-
note: message.invoiceNote,
|
|
832
|
-
token: message.invoiceToken || '',
|
|
833
|
-
attachmentType: mediaType === 'imageMessage' ? 1 : 0,
|
|
834
|
-
attachmentMimetype: mediaMsg.mimetype,
|
|
835
|
-
attachmentMediaKey: mediaMsg.mediaKey,
|
|
836
|
-
attachmentMediaKeyTimestamp: mediaMsg.mediaKeyTimestamp,
|
|
837
|
-
attachmentFileSha256: mediaMsg.fileSha256,
|
|
838
|
-
attachmentFileEncSha256: mediaMsg.fileEncSha256,
|
|
839
|
-
attachmentDirectPath: mediaMsg.directPath,
|
|
840
|
-
attachmentJpegThumbnail: mediaMsg.jpegThumbnail
|
|
841
|
-
});
|
|
842
|
-
}
|
|
843
|
-
else if ('orderText' in message) {
|
|
844
|
-
m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
|
|
845
|
-
message: message.orderText,
|
|
846
|
-
thumbnail: message.thumbnail,
|
|
847
|
-
status: message.orderStatus || 1,
|
|
848
|
-
surface: message.orderSurface || 1
|
|
492
|
+
expiryTimestamp: message.requestPayment.expiry,
|
|
493
|
+
amount1000: message.requestPayment.amount,
|
|
494
|
+
currencyCodeIso4217: message.requestPayment.currency,
|
|
495
|
+
requestFrom: message.requestPayment.from,
|
|
496
|
+
noteMessage: { ...notes },
|
|
497
|
+
background: (_h = message.requestPayment.background) !== null && _h !== void 0 ? _h : null,
|
|
849
498
|
});
|
|
850
499
|
}
|
|
851
|
-
else if ('paymentInviteServiceType' in message) {
|
|
852
|
-
m.paymentInviteMessage = {
|
|
853
|
-
serviceType: message.paymentInviteServiceType,
|
|
854
|
-
expiryTimestamp: message.paymentInviteExpiry
|
|
855
|
-
};
|
|
856
|
-
}
|
|
857
500
|
else if ('sharePhoneNumber' in message) {
|
|
858
501
|
m.protocolMessage = {
|
|
859
502
|
type: WAProto_1.proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
|
|
@@ -862,17 +505,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
862
505
|
else if ('requestPhoneNumber' in message) {
|
|
863
506
|
m.requestPhoneNumberMessage = {};
|
|
864
507
|
}
|
|
865
|
-
else if ('limitSharing' in message) {
|
|
866
|
-
m.protocolMessage = {
|
|
867
|
-
type: WAProto_1.proto.Message.ProtocolMessage.Type.LIMIT_SHARING,
|
|
868
|
-
limitSharing: {
|
|
869
|
-
sharingLimited: message.limitSharing === true,
|
|
870
|
-
trigger: 1, // TriggerType.MANUAL = 1
|
|
871
|
-
limitSharingSettingTimestamp: Date.now(),
|
|
872
|
-
initiatedByMe: true
|
|
873
|
-
}
|
|
874
|
-
};
|
|
875
|
-
}
|
|
876
508
|
else if ('album' in message) {
|
|
877
509
|
const imageMessages = message.album.filter(item => 'image' in item);
|
|
878
510
|
const videoMessages = message.album.filter(item => 'video' in item);
|
|
@@ -881,91 +513,39 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
881
513
|
expectedVideoCount: videoMessages.length,
|
|
882
514
|
});
|
|
883
515
|
}
|
|
884
|
-
else
|
|
885
|
-
if (!Array.isArray(message.pollResult.values)) {
|
|
886
|
-
throw new boom_1.Boom('Invalid pollResult values', { statusCode: 400 });
|
|
887
|
-
}
|
|
888
|
-
m.pollResultSnapshotMessage = {
|
|
889
|
-
name: message.pollResult.name,
|
|
890
|
-
pollVotes: message.pollResult.values.map(([optionName, optionVoteCount]) => ({
|
|
891
|
-
optionName,
|
|
892
|
-
optionVoteCount,
|
|
893
|
-
})),
|
|
894
|
-
};
|
|
895
|
-
}
|
|
896
|
-
else if ('stickerPack' in message || 'stickerPackMessage' in message) {
|
|
897
|
-
if ('stickerPack' in message && 'stickerPackMessage' in message) {
|
|
898
|
-
throw new boom_1.Boom('Cannot specify both stickerPack and stickerPackMessage; use only one property.', { statusCode: 400 });
|
|
899
|
-
}
|
|
900
|
-
const stickerPackMessage = 'stickerPack' in message
|
|
901
|
-
? message.stickerPack
|
|
902
|
-
: message.stickerPackMessage;
|
|
903
|
-
m.stickerPackMessage = Types_1.WAProto.Message.StickerPackMessage.fromObject(stickerPackMessage);
|
|
904
|
-
}
|
|
905
|
-
else if ('listMessage' in message) {
|
|
906
|
-
const lm = { ...message.listMessage };
|
|
907
|
-
if (lm.text !== undefined && lm.description === undefined) {
|
|
908
|
-
lm.description = lm.text;
|
|
909
|
-
delete lm.text;
|
|
910
|
-
}
|
|
911
|
-
m = { listMessage: lm };
|
|
912
|
-
}
|
|
913
|
-
else if ('buttonsMessage' in message) {
|
|
914
|
-
m = {
|
|
915
|
-
buttonsMessage: Types_1.WAProto.Message.ButtonsMessage.fromObject(message.buttonsMessage)
|
|
916
|
-
};
|
|
917
|
-
}
|
|
918
|
-
else if ('interactiveMessage' in message) {
|
|
919
|
-
m = { interactiveMessage: message.interactiveMessage };
|
|
920
|
-
}
|
|
921
|
-
else if ('richResponse' in message) {
|
|
922
|
-
// handled in richResponse block below
|
|
923
|
-
}
|
|
924
|
-
else if (hasCaptionWithoutMedia && !hasCaptionContainer) {
|
|
925
|
-
m.extendedTextMessage = { text: message.caption };
|
|
926
|
-
}
|
|
927
|
-
else if (hasCaptionWithoutMedia && hasCaptionContainer) {
|
|
928
|
-
m = {};
|
|
929
|
-
}
|
|
930
|
-
else if (!hasCaptionWithoutMedia && hasMediaPayload(message)) {
|
|
516
|
+
else {
|
|
931
517
|
m = await (0, exports.prepareWAMessageMedia)(message, options);
|
|
932
518
|
}
|
|
933
519
|
if ('buttons' in message && !!message.buttons) {
|
|
934
|
-
const
|
|
935
|
-
|
|
936
|
-
buttons: message.buttons.map(normalizeQuickReplyButton),
|
|
937
|
-
})
|
|
520
|
+
const buttonsMessage = {
|
|
521
|
+
buttons: message.buttons.map(b => ({ ...b, type: WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE }))
|
|
938
522
|
};
|
|
939
523
|
if ('text' in message) {
|
|
940
|
-
|
|
524
|
+
buttonsMessage.contentText = message.text;
|
|
525
|
+
buttonsMessage.headerType = ButtonType.EMPTY;
|
|
941
526
|
}
|
|
942
|
-
else
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
title: message.title || '',
|
|
946
|
-
subtitle: message.subtitle,
|
|
947
|
-
hasMediaAttachment: Boolean(message.hasMediaAttachment),
|
|
948
|
-
};
|
|
949
|
-
Object.assign(interactiveMessage.header, m);
|
|
950
|
-
}
|
|
951
|
-
if ('title' in message && !!message.title && !interactiveMessage.header) {
|
|
952
|
-
interactiveMessage.header = {
|
|
953
|
-
title: message.title,
|
|
954
|
-
subtitle: message.subtitle,
|
|
955
|
-
hasMediaAttachment: Boolean(message.hasMediaAttachment),
|
|
956
|
-
};
|
|
957
|
-
}
|
|
958
|
-
else if ('title' in message && !!message.title && interactiveMessage.header) {
|
|
959
|
-
interactiveMessage.header.title = message.title;
|
|
960
|
-
if (message.subtitle !== undefined) {
|
|
961
|
-
interactiveMessage.header.subtitle = message.subtitle;
|
|
527
|
+
else {
|
|
528
|
+
if ('caption' in message) {
|
|
529
|
+
buttonsMessage.contentText = message.caption;
|
|
962
530
|
}
|
|
531
|
+
const type = Object.keys(m)[0].replace('Message', '').toUpperCase();
|
|
532
|
+
buttonsMessage.headerType = ButtonType[type];
|
|
533
|
+
Object.assign(buttonsMessage, m);
|
|
534
|
+
}
|
|
535
|
+
if ('title' in message && !!message.title) {
|
|
536
|
+
buttonsMessage.text = message.title,
|
|
537
|
+
buttonsMessage.headerType = ButtonType.TEXT;
|
|
963
538
|
}
|
|
964
539
|
if ('footer' in message && !!message.footer) {
|
|
965
|
-
|
|
540
|
+
buttonsMessage.footerText = message.footer;
|
|
966
541
|
}
|
|
967
|
-
|
|
968
|
-
|
|
542
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
543
|
+
buttonsMessage.contextInfo = message.contextInfo;
|
|
544
|
+
}
|
|
545
|
+
if ('mentions' in message && !!message.mentions) {
|
|
546
|
+
buttonsMessage.contextInfo = { mentionedJid: message.mentions };
|
|
547
|
+
}
|
|
548
|
+
m = { buttonsMessage };
|
|
969
549
|
}
|
|
970
550
|
else if ('templateButtons' in message && !!message.templateButtons) {
|
|
971
551
|
const msg = {
|
|
@@ -1001,26 +581,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
1001
581
|
};
|
|
1002
582
|
m = { listMessage };
|
|
1003
583
|
}
|
|
1004
|
-
else if ('productList' in message && !!message.productList) {
|
|
1005
|
-
if (!Array.isArray(message.productList) || message.productList.length === 0 ||
|
|
1006
|
-
!Array.isArray(message.productList[0].products) || message.productList[0].products.length === 0) {
|
|
1007
|
-
throw new boom_1.Boom('Invalid productList: must contain at least one section with one product', { statusCode: 400 });
|
|
1008
|
-
}
|
|
1009
|
-
m.listMessage = {
|
|
1010
|
-
title: message.title,
|
|
1011
|
-
buttonText: message.buttonText,
|
|
1012
|
-
footerText: message.footer,
|
|
1013
|
-
description: message.text,
|
|
1014
|
-
productListInfo: {
|
|
1015
|
-
productSections: message.productList,
|
|
1016
|
-
headerImage: {
|
|
1017
|
-
productId: message.productList[0].products[0].productId,
|
|
1018
|
-
},
|
|
1019
|
-
businessOwnerJid: message.businessOwnerJid,
|
|
1020
|
-
},
|
|
1021
|
-
listType: WAProto_1.proto.Message.ListMessage.ListType.PRODUCT_LIST
|
|
1022
|
-
};
|
|
1023
|
-
}
|
|
1024
584
|
if ('interactiveButtons' in message && !!message.interactiveButtons) {
|
|
1025
585
|
const interactiveMessage = {
|
|
1026
586
|
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
|
@@ -1039,7 +599,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
1039
599
|
interactiveMessage.header = {
|
|
1040
600
|
title: message.title,
|
|
1041
601
|
subtitle: message.subtitle,
|
|
1042
|
-
hasMediaAttachment:
|
|
602
|
+
hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
|
|
1043
603
|
};
|
|
1044
604
|
Object.assign(interactiveMessage.header, m);
|
|
1045
605
|
}
|
|
@@ -1052,18 +612,23 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
1052
612
|
interactiveMessage.header = {
|
|
1053
613
|
title: message.title,
|
|
1054
614
|
subtitle: message.subtitle,
|
|
1055
|
-
hasMediaAttachment:
|
|
615
|
+
hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
|
|
1056
616
|
};
|
|
1057
617
|
Object.assign(interactiveMessage.header, m);
|
|
1058
618
|
}
|
|
1059
|
-
|
|
619
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
620
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
621
|
+
}
|
|
622
|
+
if ('mentions' in message && !!message.mentions) {
|
|
623
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
624
|
+
}
|
|
1060
625
|
m = { interactiveMessage };
|
|
1061
626
|
}
|
|
1062
627
|
if ('shop' in message && !!message.shop) {
|
|
1063
628
|
const interactiveMessage = {
|
|
1064
629
|
shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
|
|
1065
|
-
surface:
|
|
1066
|
-
id:
|
|
630
|
+
surface: message.shop,
|
|
631
|
+
id: message.id
|
|
1067
632
|
})
|
|
1068
633
|
};
|
|
1069
634
|
if ('text' in message) {
|
|
@@ -1078,7 +643,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
1078
643
|
interactiveMessage.header = {
|
|
1079
644
|
title: message.title,
|
|
1080
645
|
subtitle: message.subtitle,
|
|
1081
|
-
hasMediaAttachment:
|
|
646
|
+
hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
|
|
1082
647
|
};
|
|
1083
648
|
Object.assign(interactiveMessage.header, m);
|
|
1084
649
|
}
|
|
@@ -1091,137 +656,28 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
1091
656
|
interactiveMessage.header = {
|
|
1092
657
|
title: message.title,
|
|
1093
658
|
subtitle: message.subtitle,
|
|
1094
|
-
hasMediaAttachment:
|
|
659
|
+
hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
|
|
1095
660
|
};
|
|
1096
661
|
Object.assign(interactiveMessage.header, m);
|
|
1097
662
|
}
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
if ('interactiveAsTemplate' in message && message.interactiveAsTemplate !== false) {
|
|
1101
|
-
m = { templateMessage: { interactiveMessageTemplate: interactiveMessage } };
|
|
663
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
664
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
1102
665
|
}
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
const { text, code, language = 'javascript', botJid = '259786046210223@bot' } = message.richResponse;
|
|
1106
|
-
const sections = [
|
|
1107
|
-
{
|
|
1108
|
-
view_model: {
|
|
1109
|
-
primitive: {
|
|
1110
|
-
text: text,
|
|
1111
|
-
__typename: 'GenAIMarkdownTextUXPrimitive'
|
|
1112
|
-
},
|
|
1113
|
-
__typename: 'GenAISingleLayoutViewModel'
|
|
1114
|
-
}
|
|
1115
|
-
}
|
|
1116
|
-
];
|
|
1117
|
-
if (code) {
|
|
1118
|
-
sections.push({
|
|
1119
|
-
view_model: {
|
|
1120
|
-
primitive: {
|
|
1121
|
-
language,
|
|
1122
|
-
code_blocks: tokenizeCode(String(code)),
|
|
1123
|
-
__typename: 'GenAICodeUXPrimitive'
|
|
1124
|
-
},
|
|
1125
|
-
__typename: 'GenAISingleLayoutViewModel'
|
|
1126
|
-
}
|
|
1127
|
-
});
|
|
666
|
+
if ('mentions' in message && !!message.mentions) {
|
|
667
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
1128
668
|
}
|
|
1129
|
-
|
|
1130
|
-
response_id: (0, crypto_1.randomUUID)(),
|
|
1131
|
-
sections
|
|
1132
|
-
};
|
|
1133
|
-
return Types_1.WAProto.Message.fromObject({
|
|
1134
|
-
messageContextInfo: {
|
|
1135
|
-
deviceListMetadata: {},
|
|
1136
|
-
deviceListMetadataVersion: 2,
|
|
1137
|
-
messageSecret: (0, crypto_1.randomBytes)(32)
|
|
1138
|
-
},
|
|
1139
|
-
botForwardedMessage: {
|
|
1140
|
-
message: {
|
|
1141
|
-
richResponseMessage: {
|
|
1142
|
-
submessages: [],
|
|
1143
|
-
messageType: 1,
|
|
1144
|
-
unifiedResponse: { data: Buffer.from(JSON.stringify(unifiedData)) },
|
|
1145
|
-
contextInfo: {
|
|
1146
|
-
forwardingScore: 2,
|
|
1147
|
-
isForwarded: true,
|
|
1148
|
-
forwardedAiBotMessageInfo: { botJid },
|
|
1149
|
-
botMessageSharingInfo: {
|
|
1150
|
-
botEntryPointOrigin: 1,
|
|
1151
|
-
forwardScore: 2
|
|
1152
|
-
}
|
|
1153
|
-
}
|
|
1154
|
-
}
|
|
1155
|
-
}
|
|
1156
|
-
}
|
|
1157
|
-
});
|
|
669
|
+
m = { interactiveMessage };
|
|
1158
670
|
}
|
|
1159
|
-
if ('
|
|
1160
|
-
|
|
1161
|
-
m = { statusNotificationMessage: Types_1.WAProto.Message.StatusNotificationMessage.fromObject(notifData) };
|
|
1162
|
-
}
|
|
1163
|
-
else if ('statusQuestionAnswer' in message || 'statusQuestionAnswerMessage' in message) {
|
|
1164
|
-
const qaData = 'statusQuestionAnswer' in message ? message.statusQuestionAnswer : message.statusQuestionAnswerMessage;
|
|
1165
|
-
m = { statusQuestionAnswerMessage: Types_1.WAProto.Message.StatusQuestionAnswerMessage.fromObject(qaData) };
|
|
1166
|
-
}
|
|
1167
|
-
else if ('questionResponse' in message || 'questionResponseMessage' in message) {
|
|
1168
|
-
const qrData = 'questionResponse' in message ? message.questionResponse : message.questionResponseMessage;
|
|
1169
|
-
m = { questionResponseMessage: Types_1.WAProto.Message.QuestionResponseMessage.fromObject(qrData) };
|
|
1170
|
-
}
|
|
1171
|
-
else if ('statusQuoted' in message || 'statusQuotedMessage' in message) {
|
|
1172
|
-
const sqData = 'statusQuoted' in message ? message.statusQuoted : message.statusQuotedMessage;
|
|
1173
|
-
m = { statusQuotedMessage: Types_1.WAProto.Message.StatusQuotedMessage.fromObject(sqData) };
|
|
1174
|
-
}
|
|
1175
|
-
else if ('statusStickerInteraction' in message || 'statusStickerInteractionMessage' in message) {
|
|
1176
|
-
const ssiData = 'statusStickerInteraction' in message ? message.statusStickerInteraction : message.statusStickerInteractionMessage;
|
|
1177
|
-
m = { statusStickerInteractionMessage: Types_1.WAProto.Message.StatusStickerInteractionMessage.fromObject(ssiData) };
|
|
1178
|
-
}
|
|
1179
|
-
else if ('newsletterFollowerInvite' in message || 'newsletterFollowerInviteMessageV2' in message) {
|
|
1180
|
-
const nfiData = 'newsletterFollowerInvite' in message ? message.newsletterFollowerInvite : message.newsletterFollowerInviteMessageV2;
|
|
1181
|
-
m = { newsletterFollowerInviteMessageV2: Types_1.WAProto.Message.NewsletterFollowerInviteMessage.fromObject(nfiData) };
|
|
1182
|
-
}
|
|
1183
|
-
else if ('messageHistoryNotice' in message) {
|
|
1184
|
-
m = { messageHistoryNotice: Types_1.WAProto.Message.MessageHistoryNotice.fromObject(message.messageHistoryNotice) };
|
|
1185
|
-
}
|
|
1186
|
-
if ('raw' in message && !!message.raw) {
|
|
1187
|
-
const { raw: _, externalAdReply: _ear, ...rawMsg } = message;
|
|
1188
|
-
if ('externalAdReply' in message && !!message.externalAdReply) {
|
|
1189
|
-
const ear = normalizeEarFields(message.externalAdReply);
|
|
1190
|
-
const [rawType] = Object.keys(rawMsg);
|
|
1191
|
-
if (rawType && rawMsg[rawType]) {
|
|
1192
|
-
rawMsg[rawType].contextInfo = {
|
|
1193
|
-
...(rawMsg[rawType].contextInfo || {}),
|
|
1194
|
-
externalAdReply: ear
|
|
1195
|
-
};
|
|
1196
|
-
}
|
|
1197
|
-
}
|
|
1198
|
-
return Types_1.WAProto.Message.fromObject(rawMsg);
|
|
671
|
+
if ('messageContextInfo' in message && !!message.messageContextInfo) {
|
|
672
|
+
m.messageContextInfo = Types_1.WAProto.MessageContextInfo.fromObject(message.messageContextInfo);
|
|
1199
673
|
}
|
|
1200
674
|
if ('viewOnce' in message && !!message.viewOnce) {
|
|
1201
675
|
m = { viewOnceMessage: { message: m } };
|
|
1202
676
|
}
|
|
1203
|
-
if ('
|
|
1204
|
-
m = { viewOnceMessageV2: { message: m } };
|
|
1205
|
-
}
|
|
1206
|
-
if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
|
|
1207
|
-
m = { viewOnceMessageV2Extension: { message: m } };
|
|
1208
|
-
}
|
|
1209
|
-
if ('ephemeral' in message && !!message.ephemeral) {
|
|
1210
|
-
m = { ephemeralMessage: { message: m } };
|
|
1211
|
-
}
|
|
1212
|
-
if ('groupStatus' in message && !!message.groupStatus) {
|
|
1213
|
-
m = { groupStatusMessage: { message: m } };
|
|
1214
|
-
}
|
|
1215
|
-
if (('mentions' in message && ((_o = message.mentions) === null || _o === void 0 ? void 0 : _o.length))
|
|
1216
|
-
|| ('mentionAll' in message && !!message.mentionAll)) {
|
|
677
|
+
if ('mentions' in message && ((_o = message.mentions) === null || _o === void 0 ? void 0 : _o.length)) {
|
|
1217
678
|
const [messageType] = Object.keys(m);
|
|
1218
|
-
m[messageType].contextInfo = m[messageType]
|
|
1219
|
-
|
|
1220
|
-
m[messageType].contextInfo.mentionedJid = message.mentions;
|
|
1221
|
-
}
|
|
1222
|
-
if (message.mentionAll) {
|
|
1223
|
-
m[messageType].contextInfo.nonJidMentions = 1;
|
|
1224
|
-
}
|
|
679
|
+
m[messageType].contextInfo = m[messageType] || {};
|
|
680
|
+
m[messageType].contextInfo.mentionedJid = message.mentions;
|
|
1225
681
|
}
|
|
1226
682
|
if ('edit' in message) {
|
|
1227
683
|
m = {
|
|
@@ -1236,40 +692,14 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
1236
692
|
if ('contextInfo' in message && !!message.contextInfo) {
|
|
1237
693
|
const [messageType] = Object.keys(m);
|
|
1238
694
|
m[messageType] = m[messageType] || {};
|
|
1239
|
-
m[messageType].contextInfo =
|
|
1240
|
-
...(m[messageType].contextInfo || {}),
|
|
1241
|
-
...message.contextInfo
|
|
1242
|
-
};
|
|
695
|
+
m[messageType].contextInfo = message.contextInfo;
|
|
1243
696
|
}
|
|
1244
|
-
if ('externalAdReply' in message && !!message.externalAdReply) {
|
|
1245
|
-
const wrappers = ['viewOnceMessage', 'viewOnceMessageV2', 'viewOnceMessageV2Extension', 'ephemeralMessage', 'groupStatusMessage', 'templateMessage'];
|
|
1246
|
-
const [outerType] = Object.keys(m);
|
|
1247
|
-
const inner = wrappers.includes(outerType) ? m[outerType].message : m;
|
|
1248
|
-
const [innerType] = Object.keys(inner);
|
|
1249
|
-
const innerPayload = innerType ? inner[innerType] : undefined;
|
|
1250
|
-
if (innerType && innerType !== 'carouselMessage' && innerPayload && typeof innerPayload === 'object') {
|
|
1251
|
-
const ear = normalizeEarFields(message.externalAdReply);
|
|
1252
|
-
innerPayload.contextInfo = {
|
|
1253
|
-
...(innerPayload.contextInfo || {}),
|
|
1254
|
-
externalAdReply: ear
|
|
1255
|
-
};
|
|
1256
|
-
}
|
|
1257
|
-
}
|
|
1258
|
-
if ('secureMetaServiceLabel' in message && !!message.secureMetaServiceLabel) {
|
|
1259
|
-
const [messageType] = Object.keys(m);
|
|
1260
|
-
m[messageType] = m[messageType] || {};
|
|
1261
|
-
m[messageType].contextInfo = {
|
|
1262
|
-
...(m[messageType].contextInfo || {}),
|
|
1263
|
-
secureMetaServiceLabel: 1
|
|
1264
|
-
};
|
|
1265
|
-
}
|
|
1266
|
-
applyDefaultNewsletterAnnotation(m, message);
|
|
1267
697
|
return Types_1.WAProto.Message.fromObject(m);
|
|
1268
698
|
};
|
|
1269
699
|
exports.generateWAMessageContent = generateWAMessageContent;
|
|
1270
700
|
const generateWAMessageFromContent = (jid, message, options) => {
|
|
1271
|
-
|
|
1272
|
-
|
|
701
|
+
// set timestamp to now
|
|
702
|
+
// if not specified
|
|
1273
703
|
if (!options.timestamp) {
|
|
1274
704
|
options.timestamp = new Date();
|
|
1275
705
|
}
|
|
@@ -1277,12 +707,12 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
1277
707
|
const key = (0, exports.getContentType)(innerMessage);
|
|
1278
708
|
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
|
1279
709
|
const { quoted, userJid } = options;
|
|
1280
|
-
|
|
710
|
+
// only set quoted if isn't a newsletter message
|
|
1281
711
|
if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
|
|
1282
712
|
const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
|
|
1283
713
|
let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
|
|
1284
714
|
const msgType = (0, exports.getContentType)(quotedMsg);
|
|
1285
|
-
|
|
715
|
+
// strip any redundant properties
|
|
1286
716
|
if (quotedMsg) {
|
|
1287
717
|
quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
|
|
1288
718
|
const quotedContent = quotedMsg[msgType];
|
|
@@ -1293,8 +723,8 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
1293
723
|
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
|
1294
724
|
contextInfo.stanzaId = quoted.key.id;
|
|
1295
725
|
contextInfo.quotedMessage = quotedMsg;
|
|
1296
|
-
|
|
1297
|
-
|
|
726
|
+
// if a participant is quoted, then it must be a group
|
|
727
|
+
// hence, remoteJid of group must also be entered
|
|
1298
728
|
if (jid !== quoted.key.remoteJid) {
|
|
1299
729
|
contextInfo.remoteJid = quoted.key.remoteJid;
|
|
1300
730
|
}
|
|
@@ -1302,18 +732,18 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
1302
732
|
}
|
|
1303
733
|
}
|
|
1304
734
|
if (
|
|
1305
|
-
|
|
735
|
+
// if we want to send a disappearing message
|
|
1306
736
|
!!(options === null || options === void 0 ? void 0 : options.ephemeralExpiration) &&
|
|
1307
|
-
|
|
737
|
+
// and it's not a protocol message -- delete, toggle disappear message
|
|
1308
738
|
key !== 'protocolMessage' &&
|
|
1309
|
-
|
|
739
|
+
// already not converted to disappearing message
|
|
1310
740
|
key !== 'ephemeralMessage' &&
|
|
1311
|
-
|
|
741
|
+
// newsletter not accept disappearing messages
|
|
1312
742
|
!(0, WABinary_1.isJidNewsletter)(jid)) {
|
|
1313
743
|
innerMessage[key].contextInfo = {
|
|
1314
744
|
...(innerMessage[key].contextInfo || {}),
|
|
1315
745
|
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
|
|
1316
|
-
|
|
746
|
+
//ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
|
|
1317
747
|
};
|
|
1318
748
|
}
|
|
1319
749
|
message = Types_1.WAProto.Message.fromObject(message);
|
|
@@ -1334,12 +764,12 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
1334
764
|
exports.generateWAMessageFromContent = generateWAMessageFromContent;
|
|
1335
765
|
const generateWAMessage = async (jid, content, options) => {
|
|
1336
766
|
var _a;
|
|
1337
|
-
|
|
767
|
+
// ensure msg ID is with every log
|
|
1338
768
|
options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
|
|
1339
|
-
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsletter)(jid),
|
|
769
|
+
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsletter)(jid), ...options }), options);
|
|
1340
770
|
};
|
|
1341
771
|
exports.generateWAMessage = generateWAMessage;
|
|
1342
|
-
|
|
772
|
+
/** Get the key to access the true type of content */
|
|
1343
773
|
const getContentType = (content) => {
|
|
1344
774
|
if (content) {
|
|
1345
775
|
const keys = Object.keys(content);
|
|
@@ -1348,12 +778,17 @@ const getContentType = (content) => {
|
|
|
1348
778
|
}
|
|
1349
779
|
};
|
|
1350
780
|
exports.getContentType = getContentType;
|
|
1351
|
-
|
|
781
|
+
/**
|
|
782
|
+
* Normalizes ephemeral, view once messages to regular message content
|
|
783
|
+
* Eg. image messages in ephemeral messages, in view once messages etc.
|
|
784
|
+
* @param content
|
|
785
|
+
* @returns
|
|
786
|
+
*/
|
|
1352
787
|
const normalizeMessageContent = (content) => {
|
|
1353
788
|
if (!content) {
|
|
1354
789
|
return undefined;
|
|
1355
790
|
}
|
|
1356
|
-
|
|
791
|
+
// set max iterations to prevent an infinite loop
|
|
1357
792
|
for (let i = 0; i < 5; i++) {
|
|
1358
793
|
const inner = getFutureProofMessage(content);
|
|
1359
794
|
if (!inner) {
|
|
@@ -1384,13 +819,14 @@ const normalizeMessageContent = (content) => {
|
|
|
1384
819
|
|| (message === null || message === void 0 ? void 0 : message.limitSharingMessage)
|
|
1385
820
|
|| (message === null || message === void 0 ? void 0 : message.botTaskMessage)
|
|
1386
821
|
|| (message === null || message === void 0 ? void 0 : message.questionMessage)
|
|
1387
|
-
|| (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2)
|
|
1388
|
-
|| (message === null || message === void 0 ? void 0 : message.botForwardedMessage)
|
|
1389
|
-
|| (message === null || message === void 0 ? void 0 : message.questionReplyMessage));
|
|
822
|
+
|| (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2));
|
|
1390
823
|
}
|
|
1391
824
|
};
|
|
1392
825
|
exports.normalizeMessageContent = normalizeMessageContent;
|
|
1393
|
-
|
|
826
|
+
/**
|
|
827
|
+
* Extract the true message content from a message
|
|
828
|
+
* Eg. extracts the inner message from a disappearing message/view once message
|
|
829
|
+
*/
|
|
1394
830
|
const extractMessageContent = (content) => {
|
|
1395
831
|
var _a, _b, _c, _d, _e, _f;
|
|
1396
832
|
const extractFromTemplateMessage = (msg) => {
|
|
@@ -1430,14 +866,16 @@ const extractMessageContent = (content) => {
|
|
|
1430
866
|
return content;
|
|
1431
867
|
};
|
|
1432
868
|
exports.extractMessageContent = extractMessageContent;
|
|
1433
|
-
|
|
869
|
+
/**
|
|
870
|
+
* Returns the device predicted by message ID
|
|
871
|
+
*/
|
|
1434
872
|
const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
|
|
1435
873
|
/^3E.{20}$/.test(id) ? 'web' :
|
|
1436
874
|
/^(.{21}|.{32})$/.test(id) ? 'android' :
|
|
1437
875
|
/^(3F|.{18}$)/.test(id) ? 'desktop' :
|
|
1438
876
|
'unknown';
|
|
1439
877
|
exports.getDevice = getDevice;
|
|
1440
|
-
|
|
878
|
+
/** Upserts a receipt in the message */
|
|
1441
879
|
const updateMessageWithReceipt = (msg, receipt) => {
|
|
1442
880
|
msg.userReceipt = msg.userReceipt || [];
|
|
1443
881
|
const recp = msg.userReceipt.find(m => m.userJid === receipt.userJid);
|
|
@@ -1449,7 +887,7 @@ const updateMessageWithReceipt = (msg, receipt) => {
|
|
|
1449
887
|
}
|
|
1450
888
|
};
|
|
1451
889
|
exports.updateMessageWithReceipt = updateMessageWithReceipt;
|
|
1452
|
-
|
|
890
|
+
/** Update the message with a new reaction */
|
|
1453
891
|
const updateMessageWithReaction = (msg, reaction) => {
|
|
1454
892
|
const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
|
|
1455
893
|
const reactions = (msg.reactions || [])
|
|
@@ -1459,7 +897,7 @@ const updateMessageWithReaction = (msg, reaction) => {
|
|
|
1459
897
|
msg.reactions = reactions;
|
|
1460
898
|
};
|
|
1461
899
|
exports.updateMessageWithReaction = updateMessageWithReaction;
|
|
1462
|
-
|
|
900
|
+
/** Update the message with a new poll update */
|
|
1463
901
|
const updateMessageWithPollUpdate = (msg, update) => {
|
|
1464
902
|
var _a, _b;
|
|
1465
903
|
const authorID = (0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey);
|
|
@@ -1471,7 +909,12 @@ const updateMessageWithPollUpdate = (msg, update) => {
|
|
|
1471
909
|
msg.pollUpdates = reactions;
|
|
1472
910
|
};
|
|
1473
911
|
exports.updateMessageWithPollUpdate = updateMessageWithPollUpdate;
|
|
1474
|
-
|
|
912
|
+
/**
|
|
913
|
+
* Aggregates all poll updates in a poll.
|
|
914
|
+
* @param msg the poll creation message
|
|
915
|
+
* @param meId your jid
|
|
916
|
+
* @returns A list of options & their voters
|
|
917
|
+
*/
|
|
1475
918
|
function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
1476
919
|
var _a, _b, _c;
|
|
1477
920
|
const opts = ((_a = message === null || message === void 0 ? void 0 : message.pollCreationMessage) === null || _a === void 0 ? void 0 : _a.options) || ((_b = message === null || message === void 0 ? void 0 : message.pollCreationMessageV2) === null || _b === void 0 ? void 0 : _b.options) || ((_c = message === null || message === void 0 ? void 0 : message.pollCreationMessageV3) === null || _c === void 0 ? void 0 : _c.options) || [];
|
|
@@ -1503,7 +946,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
|
1503
946
|
}
|
|
1504
947
|
return Object.values(voteHashMap);
|
|
1505
948
|
}
|
|
1506
|
-
|
|
949
|
+
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
|
1507
950
|
const aggregateMessageKeysNotFromMe = (keys) => {
|
|
1508
951
|
const keyMap = {};
|
|
1509
952
|
for (const { remoteJid, id, participant, fromMe } of keys) {
|
|
@@ -1523,17 +966,19 @@ const aggregateMessageKeysNotFromMe = (keys) => {
|
|
|
1523
966
|
};
|
|
1524
967
|
exports.aggregateMessageKeysNotFromMe = aggregateMessageKeysNotFromMe;
|
|
1525
968
|
const REUPLOAD_REQUIRED_STATUS = [410, 404];
|
|
1526
|
-
|
|
969
|
+
/**
|
|
970
|
+
* Downloads the given message. Throws an error if it's not a media message
|
|
971
|
+
*/
|
|
1527
972
|
const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
1528
973
|
const result = await downloadMsg()
|
|
1529
974
|
.catch(async (error) => {
|
|
1530
975
|
var _a;
|
|
1531
976
|
if (ctx) {
|
|
1532
977
|
if (axios_1.default.isAxiosError(error)) {
|
|
1533
|
-
|
|
978
|
+
// check if the message requires a reupload
|
|
1534
979
|
if (REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
|
|
1535
980
|
ctx.logger.info({ key: message.key }, 'sending reupload media request...');
|
|
1536
|
-
|
|
981
|
+
// request reupload
|
|
1537
982
|
message = await ctx.reuploadRequest(message);
|
|
1538
983
|
const result = await downloadMsg();
|
|
1539
984
|
return result;
|
|
@@ -1577,7 +1022,7 @@ const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
|
1577
1022
|
}
|
|
1578
1023
|
};
|
|
1579
1024
|
exports.downloadMediaMessage = downloadMediaMessage;
|
|
1580
|
-
|
|
1025
|
+
/** Checks whether the given message is a media message; if it is returns the inner content */
|
|
1581
1026
|
const assertMediaContent = (content) => {
|
|
1582
1027
|
content = (0, exports.extractMessageContent)(content);
|
|
1583
1028
|
const mediaContent = (content === null || content === void 0 ? void 0 : content.documentMessage)
|
|
@@ -1592,36 +1037,21 @@ const assertMediaContent = (content) => {
|
|
|
1592
1037
|
};
|
|
1593
1038
|
exports.assertMediaContent = assertMediaContent;
|
|
1594
1039
|
|
|
1595
|
-
/**
|
|
1596
|
-
* Normalizes a bare user id to @s.whatsapp.net. Does not convert LID↔PN; use lidMapping / PN in key.remoteJidAlt when needed.
|
|
1597
|
-
*/
|
|
1598
1040
|
const toJid = (id) => {
|
|
1599
1041
|
if (!id)
|
|
1600
1042
|
return '';
|
|
1043
|
+
if (id.endsWith('@lid'))
|
|
1044
|
+
return id.replace('@lid', '@s.whatsapp.net');
|
|
1601
1045
|
if (id.includes('@'))
|
|
1602
1046
|
return id;
|
|
1603
1047
|
return `${id}@s.whatsapp.net`;
|
|
1604
1048
|
};
|
|
1605
1049
|
exports.toJid = toJid;
|
|
1606
|
-
/**
|
|
1607
|
-
* Returns the peer LID JID when the key is LID-primary (decode sets remoteJid/participant to @lid when WA sends LID).
|
|
1608
|
-
*/
|
|
1609
1050
|
const getSenderLid = (message) => {
|
|
1610
|
-
const
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
if (jid.endsWith('@lid') || jid.endsWith('@hosted.lid')) {
|
|
1616
|
-
return { jid, lid: jid };
|
|
1617
|
-
}
|
|
1618
|
-
if (k.lid && typeof k.lid === 'string') {
|
|
1619
|
-
const lid = k.lid.includes('@') ? k.lid : (0, WABinary_1.jidEncode)(k.lid, 'lid');
|
|
1620
|
-
return { jid, lid };
|
|
1621
|
-
}
|
|
1622
|
-
if (k.participantLid && (0, WABinary_1.isLidUser)(k.participantLid)) {
|
|
1623
|
-
return { jid, lid: k.participantLid };
|
|
1624
|
-
}
|
|
1625
|
-
return { jid, lid: '' };
|
|
1051
|
+
const sender = message.key.participant || message.key.remoteJid;
|
|
1052
|
+
const user = (0, WABinary_1.jidDecode)(sender)?.user || '';
|
|
1053
|
+
const lid = (0, WABinary_1.jidEncode)(user, 'lid');
|
|
1054
|
+
console.log('sender lid:', lid);
|
|
1055
|
+
return { jid: sender, lid };
|
|
1626
1056
|
};
|
|
1627
1057
|
exports.getSenderLid = getSenderLid;
|