lordceaser-baileys 2.0.0 → 2.0.2
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/index.js +136901 -78899
- package/WASignalGroup/GroupProtocol.js +1697 -0
- package/WASignalGroup/ciphertext_message.js +16 -0
- package/WASignalGroup/group_cipher.js +120 -0
- package/WASignalGroup/group_session_builder.js +46 -0
- package/WASignalGroup/index.js +5 -0
- package/WASignalGroup/keyhelper.js +21 -0
- package/WASignalGroup/protobufs.js +3 -0
- package/WASignalGroup/queue_job.js +69 -0
- package/WASignalGroup/sender_chain_key.js +50 -0
- package/WASignalGroup/sender_key_distribution_message.js +78 -0
- package/WASignalGroup/sender_key_message.js +92 -0
- package/WASignalGroup/sender_key_name.js +70 -0
- package/WASignalGroup/sender_key_record.js +56 -0
- package/WASignalGroup/sender_key_state.js +129 -0
- package/{lib/Signal/Group/sender-message-key.js → WASignalGroup/sender_message_key.js} +16 -3
- package/index.js +17 -0
- package/lib/Defaults/baileys-version.json +3 -0
- package/lib/Defaults/index.d.ts +15 -37
- package/lib/Defaults/index.js +60 -81
- package/lib/Signal/libsignal.d.ts +3 -5
- package/lib/Signal/libsignal.js +80 -359
- package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +5 -4
- package/lib/Socket/Client/abstract-socket-client.js +13 -0
- package/lib/Socket/Client/index.d.ts +3 -3
- package/lib/Socket/Client/index.js +19 -3
- package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
- package/lib/Socket/Client/mobile-socket-client.js +65 -0
- package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +2 -3
- package/lib/Socket/Client/web-socket-client.js +62 -0
- package/lib/Socket/business.d.ts +100 -147
- package/lib/Socket/business.js +43 -162
- package/lib/Socket/chats.d.ts +41 -85
- package/lib/Socket/chats.js +321 -569
- package/lib/Socket/groups.d.ts +57 -103
- package/lib/Socket/groups.js +84 -116
- package/lib/Socket/index.d.ts +106 -194
- package/lib/Socket/index.js +9 -11
- package/lib/Socket/messages-recv.d.ts +89 -134
- package/lib/Socket/messages-recv.js +475 -1275
- package/lib/Socket/messages-send.d.ts +97 -141
- package/lib/Socket/messages-send.js +633 -691
- package/lib/Socket/newsletter.d.ts +74 -112
- package/lib/Socket/newsletter.js +202 -147
- package/lib/Socket/registration.d.ts +264 -0
- package/lib/Socket/registration.js +166 -0
- package/lib/Socket/socket.d.ts +19 -34
- package/lib/Socket/socket.js +219 -547
- package/lib/Socket/usync.d.ts +37 -0
- package/lib/Socket/usync.js +70 -0
- package/lib/Store/index.d.ts +3 -0
- package/lib/Store/index.js +10 -0
- package/lib/Store/make-cache-manager-store.d.ts +14 -0
- package/lib/Store/make-cache-manager-store.js +83 -0
- package/lib/Store/make-in-memory-store.d.ts +118 -0
- package/lib/Store/make-in-memory-store.js +431 -0
- package/lib/Store/make-ordered-dictionary.d.ts +13 -0
- package/lib/Store/make-ordered-dictionary.js +81 -0
- package/lib/Store/object-repository.d.ts +10 -0
- package/lib/Store/object-repository.js +27 -0
- package/lib/Types/Auth.d.ts +11 -19
- package/lib/Types/Auth.js +2 -2
- package/lib/Types/Call.d.ts +1 -3
- package/lib/Types/Call.js +2 -2
- package/lib/Types/Chat.d.ts +8 -25
- package/lib/Types/Chat.js +4 -8
- package/lib/Types/Contact.d.ts +1 -8
- package/lib/Types/Contact.js +2 -2
- package/lib/Types/Events.d.ts +17 -101
- package/lib/Types/Events.js +2 -2
- package/lib/Types/GroupMetadata.d.ts +3 -18
- package/lib/Types/GroupMetadata.js +2 -2
- package/lib/Types/Label.d.ts +0 -1
- package/lib/Types/Label.js +5 -3
- package/lib/Types/LabelAssociation.d.ts +0 -1
- package/lib/Types/LabelAssociation.js +5 -3
- package/lib/Types/Message.d.ts +204 -91
- package/lib/Types/Message.js +9 -11
- package/lib/Types/Newsletter.d.ts +92 -0
- package/lib/Types/Newsletter.js +32 -0
- package/lib/Types/Product.d.ts +1 -2
- package/lib/Types/Product.js +2 -2
- package/lib/Types/Signal.d.ts +2 -32
- package/lib/Types/Signal.js +2 -2
- package/lib/Types/Socket.d.ts +24 -44
- package/lib/Types/Socket.js +2 -3
- package/lib/Types/State.d.ts +2 -72
- package/lib/Types/State.js +2 -56
- package/lib/Types/USync.d.ts +2 -3
- package/lib/Types/USync.js +2 -2
- package/lib/Types/index.d.ts +16 -16
- package/lib/Types/index.js +31 -15
- package/lib/Utils/auth-utils.d.ts +6 -12
- package/lib/Utils/auth-utils.js +143 -239
- package/lib/Utils/baileys-event-stream.d.ts +16 -0
- package/lib/Utils/baileys-event-stream.js +63 -0
- package/lib/Utils/business.d.ts +3 -4
- package/lib/Utils/business.js +69 -66
- package/lib/Utils/c4-compat.js +0 -8
- package/lib/Utils/chat-utils.d.ts +17 -47
- package/lib/Utils/chat-utils.js +237 -364
- package/lib/Utils/crypto.d.ts +21 -18
- package/lib/Utils/crypto.js +125 -44
- package/lib/Utils/decode-wa-message.d.ts +8 -38
- package/lib/Utils/decode-wa-message.js +90 -173
- package/lib/Utils/event-buffer.d.ts +8 -9
- package/lib/Utils/event-buffer.js +71 -176
- package/lib/Utils/generics.d.ts +22 -26
- package/lib/Utils/generics.js +175 -166
- package/lib/Utils/history.d.ts +11 -16
- package/lib/Utils/history.js +53 -93
- package/lib/Utils/index.d.ts +17 -22
- package/lib/Utils/index.js +34 -22
- package/lib/Utils/link-preview.d.ts +5 -5
- package/lib/Utils/link-preview.js +24 -16
- package/lib/Utils/logger.d.ts +1 -11
- package/lib/Utils/logger.js +7 -3
- package/lib/Utils/lt-hash.d.ts +12 -8
- package/lib/Utils/lt-hash.js +46 -3
- package/lib/Utils/make-mutex.d.ts +0 -2
- package/lib/Utils/make-mutex.js +34 -24
- package/lib/Utils/messages-media.d.ts +45 -65
- package/lib/Utils/messages-media.js +358 -425
- package/lib/Utils/messages.d.ts +18 -32
- package/lib/Utils/messages.js +720 -392
- package/lib/Utils/noise-handler.d.ts +13 -13
- package/lib/Utils/noise-handler.js +108 -149
- package/lib/Utils/process-message.d.ts +11 -30
- package/lib/Utils/process-message.js +166 -423
- package/lib/Utils/signal.d.ts +6 -20
- package/lib/Utils/signal.js +65 -107
- package/lib/Utils/use-multi-file-auth-state.d.ts +1 -2
- package/lib/Utils/use-multi-file-auth-state.js +103 -57
- package/lib/Utils/use-single-file-auth-state.d.ts +12 -0
- package/lib/Utils/use-single-file-auth-state.js +76 -0
- package/lib/Utils/validate-connection.d.ts +6 -6
- package/lib/Utils/validate-connection.js +114 -119
- package/lib/WABinary/constants.d.ts +4 -5
- package/lib/WABinary/constants.js +20 -1281
- package/lib/WABinary/decode.d.ts +3 -4
- package/lib/WABinary/decode.js +53 -51
- package/lib/WABinary/encode.d.ts +1 -2
- package/lib/WABinary/encode.js +44 -12
- package/lib/WABinary/generic-utils.d.ts +6 -7
- package/lib/WABinary/generic-utils.js +43 -46
- package/lib/WABinary/index.d.ts +5 -6
- package/lib/WABinary/index.js +21 -6
- package/lib/WABinary/jid-utils.d.ts +7 -24
- package/lib/WABinary/jid-utils.js +40 -74
- package/lib/WABinary/types.d.ts +1 -2
- package/lib/WABinary/types.js +2 -2
- package/lib/WAM/BinaryInfo.d.ts +1 -2
- package/lib/WAM/BinaryInfo.js +5 -2
- package/lib/WAM/constants.d.ts +3 -5
- package/lib/WAM/constants.js +11958 -19461
- package/lib/WAM/encode.d.ts +2 -3
- package/lib/WAM/encode.js +22 -17
- package/lib/WAM/index.d.ts +3 -4
- package/lib/WAM/index.js +19 -4
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +3 -4
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +13 -33
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +14 -11
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +12 -9
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +2 -3
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +13 -9
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +3 -4
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +22 -20
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +3 -5
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +8 -13
- package/lib/WAUSync/Protocols/index.d.ts +4 -6
- package/lib/WAUSync/Protocols/index.js +20 -6
- package/lib/WAUSync/USyncQuery.d.ts +4 -6
- package/lib/WAUSync/USyncQuery.js +35 -44
- package/lib/WAUSync/USyncUser.d.ts +4 -11
- package/lib/WAUSync/USyncUser.js +5 -10
- package/lib/WAUSync/index.d.ts +3 -4
- package/lib/WAUSync/index.js +19 -4
- package/lib/index.js +31 -13
- package/package.json +19 -10
- package/WAProto/GenerateStatics.sh +0 -3
- package/WAProto/WAProto.proto +0 -5479
- package/WAProto/fix-imports.js +0 -85
- package/WAProto/index.d.ts +0 -14017
- package/lib/Defaults/index.d.ts.map +0 -1
- package/lib/Defaults/index.js.map +0 -1
- package/lib/Signal/Group/ciphertext-message.d.ts +0 -10
- package/lib/Signal/Group/ciphertext-message.d.ts.map +0 -1
- package/lib/Signal/Group/ciphertext-message.js +0 -12
- package/lib/Signal/Group/ciphertext-message.js.map +0 -1
- package/lib/Signal/Group/group-session-builder.d.ts +0 -15
- package/lib/Signal/Group/group-session-builder.d.ts.map +0 -1
- package/lib/Signal/Group/group-session-builder.js +0 -30
- package/lib/Signal/Group/group-session-builder.js.map +0 -1
- package/lib/Signal/Group/group_cipher.d.ts +0 -17
- package/lib/Signal/Group/group_cipher.d.ts.map +0 -1
- package/lib/Signal/Group/group_cipher.js +0 -82
- package/lib/Signal/Group/group_cipher.js.map +0 -1
- package/lib/Signal/Group/index.d.ts +0 -12
- package/lib/Signal/Group/index.d.ts.map +0 -1
- package/lib/Signal/Group/index.js +0 -12
- package/lib/Signal/Group/index.js.map +0 -1
- package/lib/Signal/Group/keyhelper.d.ts +0 -11
- package/lib/Signal/Group/keyhelper.d.ts.map +0 -1
- package/lib/Signal/Group/keyhelper.js +0 -18
- package/lib/Signal/Group/keyhelper.js.map +0 -1
- package/lib/Signal/Group/sender-chain-key.d.ts +0 -14
- package/lib/Signal/Group/sender-chain-key.d.ts.map +0 -1
- package/lib/Signal/Group/sender-chain-key.js +0 -26
- package/lib/Signal/Group/sender-chain-key.js.map +0 -1
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -17
- package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-distribution-message.js +0 -63
- package/lib/Signal/Group/sender-key-distribution-message.js.map +0 -1
- package/lib/Signal/Group/sender-key-message.d.ts +0 -19
- package/lib/Signal/Group/sender-key-message.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-message.js +0 -66
- package/lib/Signal/Group/sender-key-message.js.map +0 -1
- package/lib/Signal/Group/sender-key-name.d.ts +0 -18
- package/lib/Signal/Group/sender-key-name.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-name.js +0 -48
- package/lib/Signal/Group/sender-key-name.js.map +0 -1
- package/lib/Signal/Group/sender-key-record.d.ts +0 -31
- package/lib/Signal/Group/sender-key-record.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-record.js +0 -41
- package/lib/Signal/Group/sender-key-record.js.map +0 -1
- package/lib/Signal/Group/sender-key-state.d.ts +0 -39
- package/lib/Signal/Group/sender-key-state.d.ts.map +0 -1
- package/lib/Signal/Group/sender-key-state.js +0 -84
- package/lib/Signal/Group/sender-key-state.js.map +0 -1
- package/lib/Signal/Group/sender-message-key.d.ts +0 -12
- package/lib/Signal/Group/sender-message-key.d.ts.map +0 -1
- package/lib/Signal/Group/sender-message-key.js.map +0 -1
- package/lib/Signal/libsignal.d.ts.map +0 -1
- package/lib/Signal/libsignal.js.map +0 -1
- package/lib/Signal/lid-mapping.d.ts +0 -23
- package/lib/Signal/lid-mapping.d.ts.map +0 -1
- package/lib/Signal/lid-mapping.js +0 -277
- package/lib/Signal/lid-mapping.js.map +0 -1
- package/lib/Socket/Client/index.d.ts.map +0 -1
- package/lib/Socket/Client/index.js.map +0 -1
- package/lib/Socket/Client/types.d.ts.map +0 -1
- package/lib/Socket/Client/types.js +0 -11
- package/lib/Socket/Client/types.js.map +0 -1
- package/lib/Socket/Client/websocket.d.ts.map +0 -1
- package/lib/Socket/Client/websocket.js +0 -54
- package/lib/Socket/Client/websocket.js.map +0 -1
- package/lib/Socket/business.d.ts.map +0 -1
- package/lib/Socket/business.js.map +0 -1
- package/lib/Socket/chats.d.ts.map +0 -1
- package/lib/Socket/chats.js.map +0 -1
- package/lib/Socket/communities.d.ts +0 -273
- package/lib/Socket/communities.d.ts.map +0 -1
- package/lib/Socket/communities.js +0 -431
- package/lib/Socket/communities.js.map +0 -1
- package/lib/Socket/groups.d.ts.map +0 -1
- package/lib/Socket/groups.js.map +0 -1
- package/lib/Socket/index.d.ts.map +0 -1
- package/lib/Socket/index.js.map +0 -1
- package/lib/Socket/messages-recv.d.ts.map +0 -1
- package/lib/Socket/messages-recv.js.map +0 -1
- package/lib/Socket/messages-send.d.ts.map +0 -1
- package/lib/Socket/messages-send.js.map +0 -1
- package/lib/Socket/mex.d.ts +0 -3
- package/lib/Socket/mex.d.ts.map +0 -1
- package/lib/Socket/mex.js +0 -42
- package/lib/Socket/mex.js.map +0 -1
- package/lib/Socket/newsletter.d.ts.map +0 -1
- package/lib/Socket/newsletter.js.map +0 -1
- package/lib/Socket/socket.d.ts.map +0 -1
- package/lib/Socket/socket.js.map +0 -1
- package/lib/Types/Auth.d.ts.map +0 -1
- package/lib/Types/Auth.js.map +0 -1
- package/lib/Types/Bussines.d.ts +0 -25
- package/lib/Types/Bussines.d.ts.map +0 -1
- package/lib/Types/Bussines.js +0 -2
- package/lib/Types/Bussines.js.map +0 -1
- package/lib/Types/Call.d.ts.map +0 -1
- package/lib/Types/Call.js.map +0 -1
- package/lib/Types/Chat.d.ts.map +0 -1
- package/lib/Types/Chat.js.map +0 -1
- package/lib/Types/Contact.d.ts.map +0 -1
- package/lib/Types/Contact.js.map +0 -1
- package/lib/Types/Events.d.ts.map +0 -1
- package/lib/Types/Events.js.map +0 -1
- package/lib/Types/GroupMetadata.d.ts.map +0 -1
- package/lib/Types/GroupMetadata.js.map +0 -1
- package/lib/Types/Label.d.ts.map +0 -1
- package/lib/Types/Label.js.map +0 -1
- package/lib/Types/LabelAssociation.d.ts.map +0 -1
- package/lib/Types/LabelAssociation.js.map +0 -1
- package/lib/Types/Message.d.ts.map +0 -1
- package/lib/Types/Message.js.map +0 -1
- package/lib/Types/Mex.d.ts +0 -141
- package/lib/Types/Mex.d.ts.map +0 -1
- package/lib/Types/Mex.js +0 -37
- package/lib/Types/Mex.js.map +0 -1
- package/lib/Types/Product.d.ts.map +0 -1
- package/lib/Types/Product.js.map +0 -1
- package/lib/Types/Signal.d.ts.map +0 -1
- package/lib/Types/Signal.js.map +0 -1
- package/lib/Types/Socket.d.ts.map +0 -1
- package/lib/Types/Socket.js.map +0 -1
- package/lib/Types/State.d.ts.map +0 -1
- package/lib/Types/State.js.map +0 -1
- package/lib/Types/USync.d.ts.map +0 -1
- package/lib/Types/USync.js.map +0 -1
- package/lib/Types/index.d.ts.map +0 -1
- package/lib/Types/index.js.map +0 -1
- package/lib/Utils/auth-utils.d.ts.map +0 -1
- package/lib/Utils/auth-utils.js.map +0 -1
- package/lib/Utils/browser-utils.d.ts +0 -4
- package/lib/Utils/browser-utils.d.ts.map +0 -1
- package/lib/Utils/browser-utils.js +0 -29
- package/lib/Utils/browser-utils.js.map +0 -1
- package/lib/Utils/business.d.ts.map +0 -1
- package/lib/Utils/business.js.map +0 -1
- package/lib/Utils/chat-utils.d.ts.map +0 -1
- package/lib/Utils/chat-utils.js.map +0 -1
- package/lib/Utils/companion-reg-client-utils.d.ts +0 -17
- package/lib/Utils/companion-reg-client-utils.d.ts.map +0 -1
- package/lib/Utils/companion-reg-client-utils.js +0 -35
- package/lib/Utils/companion-reg-client-utils.js.map +0 -1
- package/lib/Utils/crypto.d.ts.map +0 -1
- package/lib/Utils/crypto.js.map +0 -1
- package/lib/Utils/decode-wa-message.d.ts.map +0 -1
- package/lib/Utils/decode-wa-message.js.map +0 -1
- package/lib/Utils/event-buffer.d.ts.map +0 -1
- package/lib/Utils/event-buffer.js.map +0 -1
- package/lib/Utils/generics.d.ts.map +0 -1
- package/lib/Utils/generics.js.map +0 -1
- package/lib/Utils/history.d.ts.map +0 -1
- package/lib/Utils/history.js.map +0 -1
- package/lib/Utils/identity-change-handler.d.ts +0 -44
- package/lib/Utils/identity-change-handler.d.ts.map +0 -1
- package/lib/Utils/identity-change-handler.js +0 -50
- package/lib/Utils/identity-change-handler.js.map +0 -1
- package/lib/Utils/index.d.ts.map +0 -1
- package/lib/Utils/index.js.map +0 -1
- package/lib/Utils/link-preview.d.ts.map +0 -1
- package/lib/Utils/link-preview.js.map +0 -1
- package/lib/Utils/logger.d.ts.map +0 -1
- package/lib/Utils/logger.js.map +0 -1
- package/lib/Utils/lt-hash.d.ts.map +0 -1
- package/lib/Utils/lt-hash.js.map +0 -1
- package/lib/Utils/make-mutex.d.ts.map +0 -1
- package/lib/Utils/make-mutex.js.map +0 -1
- package/lib/Utils/message-retry-manager.d.ts +0 -115
- package/lib/Utils/message-retry-manager.d.ts.map +0 -1
- package/lib/Utils/message-retry-manager.js +0 -265
- package/lib/Utils/message-retry-manager.js.map +0 -1
- package/lib/Utils/messages-media.d.ts.map +0 -1
- package/lib/Utils/messages-media.js.map +0 -1
- package/lib/Utils/messages.d.ts.map +0 -1
- package/lib/Utils/messages.js.map +0 -1
- package/lib/Utils/noise-handler.d.ts.map +0 -1
- package/lib/Utils/noise-handler.js.map +0 -1
- package/lib/Utils/offline-node-processor.d.ts +0 -17
- package/lib/Utils/offline-node-processor.d.ts.map +0 -1
- package/lib/Utils/offline-node-processor.js +0 -40
- package/lib/Utils/offline-node-processor.js.map +0 -1
- package/lib/Utils/pre-key-manager.d.ts +0 -28
- package/lib/Utils/pre-key-manager.d.ts.map +0 -1
- package/lib/Utils/pre-key-manager.js +0 -106
- package/lib/Utils/pre-key-manager.js.map +0 -1
- package/lib/Utils/process-message.d.ts.map +0 -1
- package/lib/Utils/process-message.js.map +0 -1
- package/lib/Utils/reporting-utils.d.ts +0 -11
- package/lib/Utils/reporting-utils.d.ts.map +0 -1
- package/lib/Utils/reporting-utils.js +0 -258
- package/lib/Utils/reporting-utils.js.map +0 -1
- package/lib/Utils/signal.d.ts.map +0 -1
- package/lib/Utils/signal.js.map +0 -1
- package/lib/Utils/stanza-ack.d.ts +0 -11
- package/lib/Utils/stanza-ack.d.ts.map +0 -1
- package/lib/Utils/stanza-ack.js +0 -38
- package/lib/Utils/stanza-ack.js.map +0 -1
- package/lib/Utils/sync-action-utils.d.ts +0 -19
- package/lib/Utils/sync-action-utils.d.ts.map +0 -1
- package/lib/Utils/sync-action-utils.js +0 -49
- package/lib/Utils/sync-action-utils.js.map +0 -1
- package/lib/Utils/tc-token-utils.d.ts +0 -37
- package/lib/Utils/tc-token-utils.d.ts.map +0 -1
- package/lib/Utils/tc-token-utils.js +0 -164
- package/lib/Utils/tc-token-utils.js.map +0 -1
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +0 -1
- package/lib/Utils/use-multi-file-auth-state.js.map +0 -1
- package/lib/Utils/validate-connection.d.ts.map +0 -1
- package/lib/Utils/validate-connection.js.map +0 -1
- package/lib/WABinary/constants.d.ts.map +0 -1
- package/lib/WABinary/constants.js.map +0 -1
- package/lib/WABinary/decode.d.ts.map +0 -1
- package/lib/WABinary/decode.js.map +0 -1
- package/lib/WABinary/encode.d.ts.map +0 -1
- package/lib/WABinary/encode.js.map +0 -1
- package/lib/WABinary/generic-utils.d.ts.map +0 -1
- package/lib/WABinary/generic-utils.js.map +0 -1
- package/lib/WABinary/index.d.ts.map +0 -1
- package/lib/WABinary/index.js.map +0 -1
- package/lib/WABinary/jid-utils.d.ts.map +0 -1
- package/lib/WABinary/jid-utils.js.map +0 -1
- package/lib/WABinary/types.d.ts.map +0 -1
- package/lib/WABinary/types.js.map +0 -1
- package/lib/WAM/BinaryInfo.d.ts.map +0 -1
- package/lib/WAM/BinaryInfo.js.map +0 -1
- package/lib/WAM/constants.d.ts.map +0 -1
- package/lib/WAM/constants.js.map +0 -1
- package/lib/WAM/encode.d.ts.map +0 -1
- package/lib/WAM/encode.js.map +0 -1
- package/lib/WAM/index.d.ts.map +0 -1
- package/lib/WAM/index.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +0 -10
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/index.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/index.js.map +0 -1
- package/lib/WAUSync/USyncQuery.d.ts.map +0 -1
- package/lib/WAUSync/USyncQuery.js.map +0 -1
- package/lib/WAUSync/USyncUser.d.ts.map +0 -1
- package/lib/WAUSync/USyncUser.js.map +0 -1
- package/lib/WAUSync/index.d.ts.map +0 -1
- package/lib/WAUSync/index.js.map +0 -1
- package/lib/index.d.ts +0 -12
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
package/lib/Utils/messages.js
CHANGED
|
@@ -1,49 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.getAggregateVotesInPollMessage = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
|
|
7
|
+
const boom_1 = require("@hapi/boom");
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
|
+
const crypto_1 = require("crypto");
|
|
10
|
+
const fs_1 = require("fs");
|
|
11
|
+
const WAProto_1 = require("../../WAProto");
|
|
12
|
+
const Defaults_1 = require("../Defaults");
|
|
13
|
+
const Types_1 = require("../Types");
|
|
14
|
+
const WABinary_1 = require("../WABinary");
|
|
15
|
+
const crypto_2 = require("./crypto");
|
|
16
|
+
const generics_1 = require("./generics");
|
|
17
|
+
const messages_media_1 = require("./messages-media");
|
|
13
18
|
const MIMETYPE_MAP = {
|
|
14
19
|
image: 'image/jpeg',
|
|
15
20
|
video: 'video/mp4',
|
|
16
21
|
document: 'application/pdf',
|
|
17
22
|
audio: 'audio/ogg; codecs=opus',
|
|
18
23
|
sticker: 'image/webp',
|
|
19
|
-
'product-catalog-image': 'image/jpeg'
|
|
24
|
+
'product-catalog-image': 'image/jpeg',
|
|
20
25
|
};
|
|
21
26
|
const MessageTypeProto = {
|
|
22
|
-
image: WAProto.Message.ImageMessage,
|
|
23
|
-
video: WAProto.Message.VideoMessage,
|
|
24
|
-
audio: WAProto.Message.AudioMessage,
|
|
25
|
-
sticker: WAProto.Message.StickerMessage,
|
|
26
|
-
document: WAProto.Message.DocumentMessage
|
|
27
|
+
'image': Types_1.WAProto.Message.ImageMessage,
|
|
28
|
+
'video': Types_1.WAProto.Message.VideoMessage,
|
|
29
|
+
'audio': Types_1.WAProto.Message.AudioMessage,
|
|
30
|
+
'sticker': Types_1.WAProto.Message.StickerMessage,
|
|
31
|
+
'document': Types_1.WAProto.Message.DocumentMessage,
|
|
27
32
|
};
|
|
33
|
+
const ButtonType = WAProto_1.proto.Message.ButtonsMessage.HeaderType;
|
|
28
34
|
/**
|
|
29
35
|
* Uses a regex to test whether the string contains a URL, and returns the URL if it does.
|
|
30
36
|
* @param text eg. hello https://google.com
|
|
31
37
|
* @returns the URL, eg. https://google.com
|
|
32
38
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
|
|
40
|
+
exports.extractUrlFromText = extractUrlFromText;
|
|
41
|
+
const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
|
|
42
|
+
const url = (0, exports.extractUrlFromText)(text);
|
|
36
43
|
if (!!getUrlInfo && url) {
|
|
37
44
|
try {
|
|
38
45
|
const urlInfo = await getUrlInfo(url);
|
|
39
46
|
return urlInfo;
|
|
40
47
|
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
|
|
43
|
-
logger?.warn({ trace: error.stack }, 'url generation failed');
|
|
48
|
+
catch (error) { // ignore if fails
|
|
49
|
+
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
|
|
44
50
|
}
|
|
45
51
|
}
|
|
46
52
|
};
|
|
53
|
+
exports.generateLinkPreviewIfRequired = generateLinkPreviewIfRequired;
|
|
47
54
|
const assertColor = async (color) => {
|
|
48
55
|
let assertedColor;
|
|
49
56
|
if (typeof color === 'number') {
|
|
@@ -58,16 +65,16 @@ const assertColor = async (color) => {
|
|
|
58
65
|
return assertedColor;
|
|
59
66
|
}
|
|
60
67
|
};
|
|
61
|
-
|
|
68
|
+
const prepareWAMessageMedia = async (message, options) => {
|
|
62
69
|
const logger = options.logger;
|
|
63
70
|
let mediaType;
|
|
64
|
-
for (const key of MEDIA_KEYS) {
|
|
71
|
+
for (const key of Defaults_1.MEDIA_KEYS) {
|
|
65
72
|
if (key in message) {
|
|
66
73
|
mediaType = key;
|
|
67
74
|
}
|
|
68
75
|
}
|
|
69
76
|
if (!mediaType) {
|
|
70
|
-
throw new Boom('Invalid media type', { statusCode: 400 });
|
|
77
|
+
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
71
78
|
}
|
|
72
79
|
const uploadData = {
|
|
73
80
|
...message,
|
|
@@ -76,132 +83,100 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
76
83
|
delete uploadData[mediaType];
|
|
77
84
|
// check if cacheable + generate cache key
|
|
78
85
|
const cacheableKey = typeof uploadData.media === 'object' &&
|
|
79
|
-
'url' in uploadData.media &&
|
|
86
|
+
('url' in uploadData.media) &&
|
|
80
87
|
!!uploadData.media.url &&
|
|
81
|
-
!!options.mediaCache &&
|
|
82
|
-
|
|
88
|
+
!!options.mediaCache && (
|
|
89
|
+
// generate the key
|
|
90
|
+
mediaType + ':' + uploadData.media.url.toString());
|
|
83
91
|
if (mediaType === 'document' && !uploadData.fileName) {
|
|
84
92
|
uploadData.fileName = 'file';
|
|
85
93
|
}
|
|
86
94
|
if (!uploadData.mimetype) {
|
|
87
95
|
uploadData.mimetype = MIMETYPE_MAP[mediaType];
|
|
88
96
|
}
|
|
97
|
+
// check for cache hit
|
|
89
98
|
if (cacheableKey) {
|
|
90
|
-
const mediaBuff =
|
|
99
|
+
const mediaBuff = options.mediaCache.get(cacheableKey);
|
|
91
100
|
if (mediaBuff) {
|
|
92
|
-
logger
|
|
93
|
-
const obj =
|
|
101
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'got media cache hit');
|
|
102
|
+
const obj = Types_1.WAProto.Message.decode(mediaBuff);
|
|
94
103
|
const key = `${mediaType}Message`;
|
|
95
104
|
Object.assign(obj[key], { ...uploadData, media: undefined });
|
|
96
105
|
return obj;
|
|
97
106
|
}
|
|
98
107
|
}
|
|
99
|
-
const isNewsletter = !!options.jid && isJidNewsletter(options.jid);
|
|
100
|
-
if (isNewsletter) {
|
|
101
|
-
logger?.info({ key: cacheableKey }, 'Preparing raw media for newsletter');
|
|
102
|
-
const { filePath, fileSha256, fileLength } = await getRawMediaUploadData(uploadData.media, options.mediaTypeOverride || mediaType, logger);
|
|
103
|
-
const fileSha256B64 = fileSha256.toString('base64');
|
|
104
|
-
const { mediaUrl, directPath } = await options.upload(filePath, {
|
|
105
|
-
fileEncSha256B64: fileSha256B64,
|
|
106
|
-
mediaType: mediaType,
|
|
107
|
-
timeoutMs: options.mediaUploadTimeoutMs
|
|
108
|
-
});
|
|
109
|
-
await fs.unlink(filePath);
|
|
110
|
-
const obj = WAProto.Message.fromObject({
|
|
111
|
-
// todo: add more support here
|
|
112
|
-
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
113
|
-
url: mediaUrl,
|
|
114
|
-
directPath,
|
|
115
|
-
fileSha256,
|
|
116
|
-
fileLength,
|
|
117
|
-
...uploadData,
|
|
118
|
-
media: undefined
|
|
119
|
-
})
|
|
120
|
-
});
|
|
121
|
-
if (uploadData.ptv) {
|
|
122
|
-
obj.ptvMessage = obj.videoMessage;
|
|
123
|
-
delete obj.videoMessage;
|
|
124
|
-
}
|
|
125
|
-
if (obj.stickerMessage) {
|
|
126
|
-
obj.stickerMessage.stickerSentTs = Date.now();
|
|
127
|
-
}
|
|
128
|
-
if (cacheableKey) {
|
|
129
|
-
logger?.debug({ cacheableKey }, 'set cache');
|
|
130
|
-
await options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
|
|
131
|
-
}
|
|
132
|
-
return obj;
|
|
133
|
-
}
|
|
134
108
|
const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
|
|
135
|
-
const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
|
|
136
|
-
|
|
109
|
+
const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
|
|
110
|
+
(typeof uploadData['jpegThumbnail'] === 'undefined');
|
|
111
|
+
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
|
|
137
112
|
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
138
113
|
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
|
|
139
|
-
const { mediaKey,
|
|
114
|
+
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
140
115
|
logger,
|
|
141
116
|
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
142
117
|
opts: options.options
|
|
143
118
|
});
|
|
144
|
-
|
|
145
|
-
const
|
|
119
|
+
// url safe Base64 encode the SHA256 hash of the body
|
|
120
|
+
const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
|
|
121
|
+
const [{ mediaUrl, directPath, handle }] = await Promise.all([
|
|
146
122
|
(async () => {
|
|
147
|
-
const result = await options.upload(
|
|
148
|
-
|
|
149
|
-
mediaType,
|
|
150
|
-
timeoutMs: options.mediaUploadTimeoutMs
|
|
151
|
-
});
|
|
152
|
-
logger?.debug({ mediaType, cacheableKey }, 'uploaded media');
|
|
123
|
+
const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
|
|
124
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ mediaType, cacheableKey }, 'uploaded media');
|
|
153
125
|
return result;
|
|
154
126
|
})(),
|
|
155
127
|
(async () => {
|
|
156
128
|
try {
|
|
157
129
|
if (requiresThumbnailComputation) {
|
|
158
|
-
const { thumbnail, originalImageDimensions } = await generateThumbnail(
|
|
130
|
+
const { thumbnail, originalImageDimensions } = await (0, messages_media_1.generateThumbnail)(bodyPath, mediaType, options);
|
|
159
131
|
uploadData.jpegThumbnail = thumbnail;
|
|
160
132
|
if (!uploadData.width && originalImageDimensions) {
|
|
161
133
|
uploadData.width = originalImageDimensions.width;
|
|
162
134
|
uploadData.height = originalImageDimensions.height;
|
|
163
|
-
logger
|
|
135
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('set dimensions');
|
|
164
136
|
}
|
|
165
|
-
logger
|
|
137
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('generated thumbnail');
|
|
166
138
|
}
|
|
167
139
|
if (requiresDurationComputation) {
|
|
168
|
-
uploadData.seconds = await getAudioDuration(
|
|
169
|
-
logger
|
|
140
|
+
uploadData.seconds = await (0, messages_media_1.getAudioDuration)(bodyPath);
|
|
141
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('computed audio duration');
|
|
170
142
|
}
|
|
171
143
|
if (requiresWaveformProcessing) {
|
|
172
|
-
uploadData.waveform = await getAudioWaveform(
|
|
173
|
-
logger
|
|
144
|
+
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
145
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
146
|
+
}
|
|
147
|
+
if (requiresWaveformProcessing) {
|
|
148
|
+
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
149
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
174
150
|
}
|
|
175
151
|
if (requiresAudioBackground) {
|
|
176
152
|
uploadData.backgroundArgb = await assertColor(options.backgroundColor);
|
|
177
|
-
logger
|
|
153
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
|
|
178
154
|
}
|
|
179
155
|
}
|
|
180
156
|
catch (error) {
|
|
181
|
-
logger
|
|
182
|
-
}
|
|
183
|
-
})()
|
|
184
|
-
]).finally(async () => {
|
|
185
|
-
try {
|
|
186
|
-
await fs.unlink(encFilePath);
|
|
187
|
-
if (originalFilePath) {
|
|
188
|
-
await fs.unlink(originalFilePath);
|
|
157
|
+
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
|
|
189
158
|
}
|
|
190
|
-
|
|
159
|
+
})(),
|
|
160
|
+
])
|
|
161
|
+
.finally(async () => {
|
|
162
|
+
if (!Buffer.isBuffer(encWriteStream)) {
|
|
163
|
+
encWriteStream.destroy();
|
|
191
164
|
}
|
|
192
|
-
|
|
193
|
-
|
|
165
|
+
// remove tmp files
|
|
166
|
+
if (didSaveToTmpPath && bodyPath) {
|
|
167
|
+
await fs_1.promises.unlink(bodyPath);
|
|
168
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
|
|
194
169
|
}
|
|
195
170
|
});
|
|
196
|
-
const obj = WAProto.Message.fromObject({
|
|
171
|
+
const obj = Types_1.WAProto.Message.fromObject({
|
|
197
172
|
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
198
|
-
url: mediaUrl,
|
|
173
|
+
url: handle ? undefined : mediaUrl,
|
|
199
174
|
directPath,
|
|
200
|
-
mediaKey,
|
|
201
|
-
fileEncSha256,
|
|
175
|
+
mediaKey: mediaKey,
|
|
176
|
+
fileEncSha256: fileEncSha256,
|
|
202
177
|
fileSha256,
|
|
203
178
|
fileLength,
|
|
204
|
-
mediaKeyTimestamp: unixTimestampSeconds(),
|
|
179
|
+
mediaKeyTimestamp: handle ? undefined : (0, generics_1.unixTimestampSeconds)(),
|
|
205
180
|
...uploadData,
|
|
206
181
|
media: undefined
|
|
207
182
|
})
|
|
@@ -211,75 +186,70 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
211
186
|
delete obj.videoMessage;
|
|
212
187
|
}
|
|
213
188
|
if (cacheableKey) {
|
|
214
|
-
logger
|
|
215
|
-
|
|
189
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
|
|
190
|
+
options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
|
|
216
191
|
}
|
|
217
192
|
return obj;
|
|
218
193
|
};
|
|
219
|
-
|
|
194
|
+
exports.prepareWAMessageMedia = prepareWAMessageMedia;
|
|
195
|
+
const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
220
196
|
ephemeralExpiration = ephemeralExpiration || 0;
|
|
221
197
|
const content = {
|
|
222
198
|
ephemeralMessage: {
|
|
223
199
|
message: {
|
|
224
200
|
protocolMessage: {
|
|
225
|
-
type: WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
|
|
201
|
+
type: Types_1.WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
|
|
226
202
|
ephemeralExpiration
|
|
227
203
|
}
|
|
228
204
|
}
|
|
229
205
|
}
|
|
230
206
|
};
|
|
231
|
-
return WAProto.Message.fromObject(content);
|
|
207
|
+
return Types_1.WAProto.Message.fromObject(content);
|
|
232
208
|
};
|
|
209
|
+
exports.prepareDisappearingMessageSettingContent = prepareDisappearingMessageSettingContent;
|
|
233
210
|
/**
|
|
234
211
|
* Generate forwarded message content like WA does
|
|
235
212
|
* @param message the message to forward
|
|
236
213
|
* @param options.forceForward will show the message as forwarded even if it is from you
|
|
237
214
|
*/
|
|
238
|
-
|
|
215
|
+
const generateForwardMessageContent = (message, forceForward) => {
|
|
216
|
+
var _a;
|
|
239
217
|
let content = message.message;
|
|
240
218
|
if (!content) {
|
|
241
|
-
throw new Boom('no content in message', { statusCode: 400 });
|
|
219
|
+
throw new boom_1.Boom('no content in message', { statusCode: 400 });
|
|
242
220
|
}
|
|
243
221
|
// hacky copy
|
|
244
|
-
content = normalizeMessageContent(content);
|
|
245
|
-
content = proto.Message.decode(proto.Message.encode(content).finish());
|
|
222
|
+
content = (0, exports.normalizeMessageContent)(content);
|
|
223
|
+
content = WAProto_1.proto.Message.decode(WAProto_1.proto.Message.encode(content).finish());
|
|
246
224
|
let key = Object.keys(content)[0];
|
|
247
|
-
let score = content
|
|
225
|
+
let score = ((_a = content[key].contextInfo) === null || _a === void 0 ? void 0 : _a.forwardingScore) || 0;
|
|
248
226
|
score += message.key.fromMe && !forceForward ? 0 : 1;
|
|
249
227
|
if (key === 'conversation') {
|
|
250
228
|
content.extendedTextMessage = { text: content[key] };
|
|
251
229
|
delete content.conversation;
|
|
252
230
|
key = 'extendedTextMessage';
|
|
253
231
|
}
|
|
254
|
-
const key_ = content?.[key];
|
|
255
232
|
if (score > 0) {
|
|
256
|
-
|
|
233
|
+
content[key].contextInfo = { forwardingScore: score, isForwarded: true };
|
|
257
234
|
}
|
|
258
235
|
else {
|
|
259
|
-
|
|
236
|
+
content[key].contextInfo = {};
|
|
260
237
|
}
|
|
261
238
|
return content;
|
|
262
239
|
};
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
message[key] !== null &&
|
|
268
|
-
message[key] !== undefined);
|
|
269
|
-
};
|
|
270
|
-
function hasOptionalProperty(obj, key) {
|
|
271
|
-
return typeof obj === 'object' && obj !== null && key in obj && obj[key] !== null;
|
|
272
|
-
}
|
|
273
|
-
export const generateWAMessageContent = async (message, options) => {
|
|
274
|
-
var _a, _b;
|
|
240
|
+
exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
241
|
+
const generateWAMessageContent = async (message, options) => {
|
|
242
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
|
|
243
|
+
var _6, _7;
|
|
275
244
|
let m = {};
|
|
276
|
-
if (
|
|
245
|
+
if ('text' in message) {
|
|
277
246
|
const extContent = { text: message.text };
|
|
278
247
|
let urlInfo = message.linkPreview;
|
|
279
248
|
if (typeof urlInfo === 'undefined') {
|
|
280
|
-
urlInfo = await generateLinkPreviewIfRequired(message.text, options.getUrlInfo, options.logger);
|
|
249
|
+
urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
|
|
281
250
|
}
|
|
282
251
|
if (urlInfo) {
|
|
252
|
+
extContent.canonicalUrl = urlInfo['canonical-url'];
|
|
283
253
|
extContent.matchedText = urlInfo['matched-text'];
|
|
284
254
|
extContent.jpegThumbnail = urlInfo.jpegThumbnail;
|
|
285
255
|
extContent.description = urlInfo.description;
|
|
@@ -304,65 +274,81 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
304
274
|
}
|
|
305
275
|
m.extendedTextMessage = extContent;
|
|
306
276
|
}
|
|
307
|
-
else if (
|
|
277
|
+
else if ('contacts' in message) {
|
|
308
278
|
const contactLen = message.contacts.contacts.length;
|
|
309
279
|
if (!contactLen) {
|
|
310
|
-
throw new Boom('require atleast 1 contact', { statusCode: 400 });
|
|
280
|
+
throw new boom_1.Boom('require atleast 1 contact', { statusCode: 400 });
|
|
311
281
|
}
|
|
312
282
|
if (contactLen === 1) {
|
|
313
|
-
m.contactMessage = WAProto.Message.ContactMessage.
|
|
283
|
+
m.contactMessage = Types_1.WAProto.Message.ContactMessage.fromObject(message.contacts.contacts[0]);
|
|
314
284
|
}
|
|
315
285
|
else {
|
|
316
|
-
m.contactsArrayMessage = WAProto.Message.ContactsArrayMessage.
|
|
286
|
+
m.contactsArrayMessage = Types_1.WAProto.Message.ContactsArrayMessage.fromObject(message.contacts);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else if ('location' in message) {
|
|
290
|
+
m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
|
|
291
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
292
|
+
m.locationMessage.contextInfo = message.contextInfo;
|
|
317
293
|
}
|
|
318
294
|
}
|
|
319
|
-
else if (
|
|
320
|
-
m.
|
|
295
|
+
else if ('liveLocation' in message) {
|
|
296
|
+
m.liveLocationMessage = Types_1.WAProto.Message.LiveLocationMessage.fromObject(message.liveLocation);
|
|
297
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
298
|
+
m.liveLocationMessage.contextInfo = message.contextInfo;
|
|
299
|
+
}
|
|
321
300
|
}
|
|
322
|
-
else if (
|
|
301
|
+
else if ('react' in message) {
|
|
323
302
|
if (!message.react.senderTimestampMs) {
|
|
324
303
|
message.react.senderTimestampMs = Date.now();
|
|
325
304
|
}
|
|
326
|
-
m.reactionMessage = WAProto.Message.ReactionMessage.
|
|
305
|
+
m.reactionMessage = Types_1.WAProto.Message.ReactionMessage.fromObject(message.react);
|
|
327
306
|
}
|
|
328
|
-
else if (
|
|
307
|
+
else if ('delete' in message) {
|
|
329
308
|
m.protocolMessage = {
|
|
330
309
|
key: message.delete,
|
|
331
|
-
type: WAProto.Message.ProtocolMessage.Type.REVOKE
|
|
310
|
+
type: Types_1.WAProto.Message.ProtocolMessage.Type.REVOKE
|
|
332
311
|
};
|
|
333
312
|
}
|
|
334
|
-
else if (
|
|
335
|
-
m = generateForwardMessageContent(message.forward, message.force);
|
|
313
|
+
else if ('forward' in message) {
|
|
314
|
+
m = (0, exports.generateForwardMessageContent)(message.forward, message.force);
|
|
336
315
|
}
|
|
337
|
-
else if (
|
|
338
|
-
const exp = typeof message.disappearingMessagesInChat === 'boolean'
|
|
339
|
-
?
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
: message.disappearingMessagesInChat;
|
|
343
|
-
m = prepareDisappearingMessageSettingContent(exp);
|
|
316
|
+
else if ('disappearingMessagesInChat' in message) {
|
|
317
|
+
const exp = typeof message.disappearingMessagesInChat === 'boolean' ?
|
|
318
|
+
(message.disappearingMessagesInChat ? Defaults_1.WA_DEFAULT_EPHEMERAL : 0) :
|
|
319
|
+
message.disappearingMessagesInChat;
|
|
320
|
+
m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
|
|
344
321
|
}
|
|
345
|
-
else if (
|
|
322
|
+
else if ('groupInvite' in message) {
|
|
346
323
|
m.groupInviteMessage = {};
|
|
347
324
|
m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
|
|
348
325
|
m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
|
|
349
326
|
m.groupInviteMessage.caption = message.groupInvite.text;
|
|
350
327
|
m.groupInviteMessage.groupJid = message.groupInvite.jid;
|
|
351
328
|
m.groupInviteMessage.groupName = message.groupInvite.subject;
|
|
329
|
+
m.groupInviteMessage.jpegThumbnail = message.groupInvite.thumbnail;
|
|
352
330
|
//TODO: use built-in interface and get disappearing mode info etc.
|
|
353
331
|
//TODO: cache / use store!?
|
|
354
332
|
if (options.getProfilePicUrl) {
|
|
355
|
-
|
|
333
|
+
let pfpUrl;
|
|
334
|
+
try {
|
|
335
|
+
pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
|
|
336
|
+
}
|
|
337
|
+
catch (_8) {
|
|
338
|
+
pfpUrl = null;
|
|
339
|
+
}
|
|
356
340
|
if (pfpUrl) {
|
|
357
|
-
const resp = await
|
|
358
|
-
if (resp.
|
|
359
|
-
|
|
360
|
-
m.groupInviteMessage.jpegThumbnail = buf;
|
|
341
|
+
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
|
342
|
+
if (resp.status === 200) {
|
|
343
|
+
m.groupInviteMessage.jpegThumbnail = resp.data;
|
|
361
344
|
}
|
|
362
345
|
}
|
|
346
|
+
else {
|
|
347
|
+
m.groupInviteMessage.jpegThumbnail = null;
|
|
348
|
+
}
|
|
363
349
|
}
|
|
364
350
|
}
|
|
365
|
-
else if (
|
|
351
|
+
else if ('pin' in message) {
|
|
366
352
|
m.pinInChatMessage = {};
|
|
367
353
|
m.messageContextInfo = {};
|
|
368
354
|
m.pinInChatMessage.key = message.pin;
|
|
@@ -370,208 +356,573 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
370
356
|
m.pinInChatMessage.senderTimestampMs = Date.now();
|
|
371
357
|
m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
|
|
372
358
|
}
|
|
373
|
-
else if (
|
|
359
|
+
else if ('keep' in message) {
|
|
360
|
+
m.keepInChatMessage = {};
|
|
361
|
+
m.keepInChatMessage.key = message.keep;
|
|
362
|
+
m.keepInChatMessage.keepType = message.type;
|
|
363
|
+
m.keepInChatMessage.timestampMs = Date.now();
|
|
364
|
+
}
|
|
365
|
+
else if ('call' in message) {
|
|
366
|
+
m = {
|
|
367
|
+
scheduledCallCreationMessage: {
|
|
368
|
+
scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
|
|
369
|
+
callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
|
|
370
|
+
title: message.call.title
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
else if ('paymentInvite' in message) {
|
|
375
|
+
m.paymentInviteMessage = {
|
|
376
|
+
serviceType: message.paymentInvite.type,
|
|
377
|
+
expiryTimestamp: message.paymentInvite.expiry
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
else if ('buttonReply' in message) {
|
|
374
381
|
switch (message.type) {
|
|
375
382
|
case 'template':
|
|
376
383
|
m.templateButtonReplyMessage = {
|
|
377
384
|
selectedDisplayText: message.buttonReply.displayText,
|
|
378
385
|
selectedId: message.buttonReply.id,
|
|
379
|
-
selectedIndex: message.buttonReply.index
|
|
386
|
+
selectedIndex: message.buttonReply.index,
|
|
380
387
|
};
|
|
381
388
|
break;
|
|
382
389
|
case 'plain':
|
|
383
390
|
m.buttonsResponseMessage = {
|
|
384
391
|
selectedButtonId: message.buttonReply.id,
|
|
385
392
|
selectedDisplayText: message.buttonReply.displayText,
|
|
386
|
-
type: proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT
|
|
393
|
+
type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
|
|
394
|
+
};
|
|
395
|
+
break;
|
|
396
|
+
case 'interactive':
|
|
397
|
+
m.interactiveResponseMessage = {
|
|
398
|
+
body: {
|
|
399
|
+
text: message.buttonReply.text,
|
|
400
|
+
format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1
|
|
401
|
+
},
|
|
402
|
+
nativeFlowResponseMessage: {
|
|
403
|
+
name: message.buttonReply.nativeFlow.name,
|
|
404
|
+
paramsJson: message.buttonReply.nativeFlow.paramsJson,
|
|
405
|
+
version: message.buttonReply.nativeFlow.version
|
|
406
|
+
}
|
|
387
407
|
};
|
|
388
408
|
break;
|
|
389
409
|
}
|
|
390
410
|
}
|
|
391
|
-
else if (
|
|
392
|
-
const { videoMessage } = await prepareWAMessageMedia({ video: message.video }, options);
|
|
411
|
+
else if ('ptv' in message && message.ptv) {
|
|
412
|
+
const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
|
|
393
413
|
m.ptvMessage = videoMessage;
|
|
394
414
|
}
|
|
395
|
-
else if (
|
|
396
|
-
const { imageMessage } = await prepareWAMessageMedia({ image: message.product.productImage }, options);
|
|
397
|
-
m.productMessage = WAProto.Message.ProductMessage.
|
|
415
|
+
else if ('product' in message) {
|
|
416
|
+
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: (_c = message === null || message === void 0 ? void 0 : message.product) === null || _c === void 0 ? void 0 : _c.productImage }, options);
|
|
417
|
+
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
|
|
398
418
|
...message,
|
|
399
419
|
product: {
|
|
400
420
|
...message.product,
|
|
401
|
-
productImage: imageMessage
|
|
421
|
+
productImage: imageMessage,
|
|
402
422
|
}
|
|
403
423
|
});
|
|
424
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
425
|
+
m.productMessage.contextInfo = message.contextInfo;
|
|
426
|
+
}
|
|
427
|
+
if ('mentions' in message && !!message.mentions) {
|
|
428
|
+
m.productMessage.contextInfo = { mentionedJid: message.mentions };
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
else if ('order' in message) {
|
|
432
|
+
m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
|
|
433
|
+
orderId: message.order.id,
|
|
434
|
+
thumbnail: message.order.thumbnail,
|
|
435
|
+
itemCount: message.order.itemCount,
|
|
436
|
+
status: message.order.status,
|
|
437
|
+
surface: message.order.surface,
|
|
438
|
+
orderTitle: message.order.title,
|
|
439
|
+
message: message.order.text,
|
|
440
|
+
sellerJid: message.order.seller,
|
|
441
|
+
token: message.order.token,
|
|
442
|
+
totalAmount1000: message.order.amount,
|
|
443
|
+
totalCurrencyCode: message.order.currency
|
|
444
|
+
});
|
|
404
445
|
}
|
|
405
|
-
else if (
|
|
446
|
+
else if ('listReply' in message) {
|
|
406
447
|
m.listResponseMessage = { ...message.listReply };
|
|
407
448
|
}
|
|
408
|
-
else if (
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
if (message.event.call && options.getCallLink) {
|
|
412
|
-
const token = await options.getCallLink(message.event.call, { startTime });
|
|
413
|
-
m.eventMessage.joinLink = (message.event.call === 'audio' ? CALL_AUDIO_PREFIX : CALL_VIDEO_PREFIX) + token;
|
|
414
|
-
}
|
|
415
|
-
m.messageContextInfo = {
|
|
416
|
-
// encKey
|
|
417
|
-
messageSecret: message.event.messageSecret || randomBytes(32)
|
|
418
|
-
};
|
|
419
|
-
m.eventMessage.name = message.event.name;
|
|
420
|
-
m.eventMessage.description = message.event.description;
|
|
421
|
-
m.eventMessage.startTime = startTime;
|
|
422
|
-
m.eventMessage.endTime = message.event.endDate ? message.event.endDate.getTime() / 1000 : undefined;
|
|
423
|
-
m.eventMessage.isCanceled = message.event.isCancelled ?? false;
|
|
424
|
-
m.eventMessage.extraGuestsAllowed = message.event.extraGuestsAllowed;
|
|
425
|
-
m.eventMessage.isScheduleCall = message.event.isScheduleCall ?? false;
|
|
426
|
-
m.eventMessage.location = message.event.location;
|
|
427
|
-
}
|
|
428
|
-
else if (hasNonNullishProperty(message, 'poll')) {
|
|
429
|
-
(_a = message.poll).selectableCount || (_a.selectableCount = 0);
|
|
430
|
-
(_b = message.poll).toAnnouncementGroup || (_b.toAnnouncementGroup = false);
|
|
449
|
+
else if ('poll' in message) {
|
|
450
|
+
(_6 = message.poll).selectableCount || (_6.selectableCount = 0);
|
|
451
|
+
(_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
|
|
431
452
|
if (!Array.isArray(message.poll.values)) {
|
|
432
|
-
throw new Boom('Invalid poll values', { statusCode: 400 });
|
|
453
|
+
throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
|
|
433
454
|
}
|
|
434
|
-
if (message.poll.selectableCount < 0
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
});
|
|
455
|
+
if (message.poll.selectableCount < 0
|
|
456
|
+
|| message.poll.selectableCount > message.poll.values.length) {
|
|
457
|
+
throw new boom_1.Boom(`poll.selectableCount in poll should be >= 0 and <= ${message.poll.values.length}`, { statusCode: 400 });
|
|
438
458
|
}
|
|
439
459
|
m.messageContextInfo = {
|
|
440
460
|
// encKey
|
|
441
|
-
messageSecret: message.poll.messageSecret || randomBytes(32)
|
|
461
|
+
messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
442
462
|
};
|
|
443
463
|
const pollCreationMessage = {
|
|
444
464
|
name: message.poll.name,
|
|
445
465
|
selectableOptionsCount: message.poll.selectableCount,
|
|
446
|
-
options: message.poll.values.map(optionName => ({ optionName }))
|
|
466
|
+
options: message.poll.values.map(optionName => ({ optionName })),
|
|
447
467
|
};
|
|
448
468
|
if (message.poll.toAnnouncementGroup) {
|
|
449
469
|
// poll v2 is for community announcement groups (single select and multiple)
|
|
450
470
|
m.pollCreationMessageV2 = pollCreationMessage;
|
|
451
471
|
}
|
|
452
472
|
else {
|
|
453
|
-
if (message.poll.selectableCount
|
|
473
|
+
if (message.poll.selectableCount > 0) {
|
|
454
474
|
//poll v3 is for single select polls
|
|
455
475
|
m.pollCreationMessageV3 = pollCreationMessage;
|
|
456
476
|
}
|
|
457
477
|
else {
|
|
458
|
-
// poll for multiple choice polls
|
|
478
|
+
// poll v3 for multiple choice polls
|
|
459
479
|
m.pollCreationMessage = pollCreationMessage;
|
|
460
480
|
}
|
|
461
481
|
}
|
|
482
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
483
|
+
pollCreationMessage.contextInfo = message.contextInfo;
|
|
484
|
+
}
|
|
462
485
|
}
|
|
463
|
-
else if (
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
486
|
+
else if ('pollResult' in message) {
|
|
487
|
+
if (!Array.isArray(message.pollResult.votes)) {
|
|
488
|
+
throw new boom_1.Boom('Invalid poll votes result', { statusCode: 400 });
|
|
489
|
+
}
|
|
490
|
+
m.messageContextInfo = {
|
|
491
|
+
// encKey
|
|
492
|
+
messageSecret: message.pollResult.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
493
|
+
};
|
|
494
|
+
const pollResultSnapshotMessage = {
|
|
495
|
+
name: message.pollResult.name,
|
|
496
|
+
pollVotes: message.pollResult.votes.map((option) => ({
|
|
497
|
+
optionName: option[0],
|
|
498
|
+
optionVoteCount: option[1]
|
|
499
|
+
})),
|
|
467
500
|
};
|
|
501
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
502
|
+
pollResultSnapshotMessage.contextInfo = message.contextInfo;
|
|
503
|
+
}
|
|
504
|
+
if ('mentions' in message && !!message.mentions) {
|
|
505
|
+
pollResultSnapshotMessage.contextInfo = { mentionedJid: message.mentions };
|
|
506
|
+
}
|
|
507
|
+
m.pollResultSnapshotMessage = pollResultSnapshotMessage;
|
|
468
508
|
}
|
|
469
|
-
else if (
|
|
470
|
-
m.
|
|
471
|
-
|
|
509
|
+
else if ('event' in message) {
|
|
510
|
+
m.messageContextInfo = {
|
|
511
|
+
messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
472
512
|
};
|
|
513
|
+
m.eventMessage = { ...message.event };
|
|
473
514
|
}
|
|
474
|
-
else if (
|
|
475
|
-
m.
|
|
515
|
+
else if ('inviteAdmin' in message) {
|
|
516
|
+
m.newsletterAdminInviteMessage = {};
|
|
517
|
+
m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
|
|
518
|
+
m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
|
|
519
|
+
m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
|
|
520
|
+
m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
|
|
521
|
+
m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
|
|
522
|
+
//TODO: use built-in interface and get disappearing mode info etc.
|
|
523
|
+
//TODO: cache / use store!?
|
|
524
|
+
if (options.getProfilePicUrl) {
|
|
525
|
+
let pfpUrl;
|
|
526
|
+
try {
|
|
527
|
+
pfpUrl = await options.getProfilePicUrl(message.inviteAdmin.jid, 'preview');
|
|
528
|
+
}
|
|
529
|
+
catch (_9) {
|
|
530
|
+
pfpUrl = null;
|
|
531
|
+
}
|
|
532
|
+
if (pfpUrl) {
|
|
533
|
+
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
|
534
|
+
if (resp.status === 200) {
|
|
535
|
+
m.newsletterAdminInviteMessage.jpegThumbnail = resp.data;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
else {
|
|
539
|
+
m.newsletterAdminInviteMessage.jpegThumbnail = null;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
else if ('requestPayment' in message) {
|
|
544
|
+
const sticker = ((_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker) ?
|
|
545
|
+
await (0, exports.prepareWAMessageMedia)({ sticker: (_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker, ...options }, options)
|
|
546
|
+
: null;
|
|
547
|
+
let notes = {};
|
|
548
|
+
if ((_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.sticker) {
|
|
549
|
+
notes = {
|
|
550
|
+
stickerMessage: {
|
|
551
|
+
...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
|
|
552
|
+
contextInfo: {
|
|
553
|
+
stanzaId: (_h = (_g = options === null || options === void 0 ? void 0 : options.quoted) === null || _g === void 0 ? void 0 : _g.key) === null || _h === void 0 ? void 0 : _h.id,
|
|
554
|
+
participant: (_k = (_j = options === null || options === void 0 ? void 0 : options.quoted) === null || _j === void 0 ? void 0 : _j.key) === null || _k === void 0 ? void 0 : _k.participant,
|
|
555
|
+
quotedMessage: (_l = options === null || options === void 0 ? void 0 : options.quoted) === null || _l === void 0 ? void 0 : _l.message,
|
|
556
|
+
...(_m = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _m === void 0 ? void 0 : _m.contextInfo,
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
else if (message.requestPayment.note) {
|
|
562
|
+
notes = {
|
|
563
|
+
extendedTextMessage: {
|
|
564
|
+
text: message.requestPayment.note,
|
|
565
|
+
contextInfo: {
|
|
566
|
+
stanzaId: (_p = (_o = options === null || options === void 0 ? void 0 : options.quoted) === null || _o === void 0 ? void 0 : _o.key) === null || _p === void 0 ? void 0 : _p.id,
|
|
567
|
+
participant: (_r = (_q = options === null || options === void 0 ? void 0 : options.quoted) === null || _q === void 0 ? void 0 : _q.key) === null || _r === void 0 ? void 0 : _r.participant,
|
|
568
|
+
quotedMessage: (_s = options === null || options === void 0 ? void 0 : options.quoted) === null || _s === void 0 ? void 0 : _s.message,
|
|
569
|
+
...(_t = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _t === void 0 ? void 0 : _t.contextInfo,
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
};
|
|
573
|
+
}
|
|
574
|
+
m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
|
|
575
|
+
expiryTimestamp: message.requestPayment.expiry,
|
|
576
|
+
amount1000: message.requestPayment.amount,
|
|
577
|
+
currencyCodeIso4217: message.requestPayment.currency,
|
|
578
|
+
requestFrom: message.requestPayment.from,
|
|
579
|
+
noteMessage: { ...notes },
|
|
580
|
+
background: (_u = message.requestPayment.background) !== null && _u !== void 0 ? _u : null,
|
|
581
|
+
});
|
|
476
582
|
}
|
|
477
|
-
else if (
|
|
583
|
+
else if ('sharePhoneNumber' in message) {
|
|
478
584
|
m.protocolMessage = {
|
|
479
|
-
type: proto.Message.ProtocolMessage.Type.
|
|
480
|
-
limitSharing: {
|
|
481
|
-
sharingLimited: message.limitSharing === true,
|
|
482
|
-
trigger: 1,
|
|
483
|
-
limitSharingSettingTimestamp: Date.now(),
|
|
484
|
-
initiatedByMe: true
|
|
485
|
-
}
|
|
585
|
+
type: WAProto_1.proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
|
|
486
586
|
};
|
|
487
587
|
}
|
|
588
|
+
else if ('requestPhoneNumber' in message) {
|
|
589
|
+
m.requestPhoneNumberMessage = {};
|
|
590
|
+
}
|
|
488
591
|
else {
|
|
489
|
-
m = await prepareWAMessageMedia(message, options);
|
|
592
|
+
m = await (0, exports.prepareWAMessageMedia)(message, options);
|
|
490
593
|
}
|
|
491
|
-
if (
|
|
492
|
-
|
|
594
|
+
if ('buttons' in message && !!message.buttons) {
|
|
595
|
+
const buttonsMessage = {
|
|
596
|
+
buttons: message.buttons.map(b => ({ ...b, type: WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE }))
|
|
597
|
+
};
|
|
598
|
+
if ('text' in message) {
|
|
599
|
+
buttonsMessage.contentText = message.text;
|
|
600
|
+
buttonsMessage.headerType = ButtonType.EMPTY;
|
|
601
|
+
}
|
|
602
|
+
else {
|
|
603
|
+
if ('caption' in message) {
|
|
604
|
+
buttonsMessage.contentText = message.caption;
|
|
605
|
+
}
|
|
606
|
+
const type = Object.keys(m)[0].replace('Message', '').toUpperCase();
|
|
607
|
+
buttonsMessage.headerType = ButtonType[type];
|
|
608
|
+
Object.assign(buttonsMessage, m);
|
|
609
|
+
}
|
|
610
|
+
if ('footer' in message && !!message.footer) {
|
|
611
|
+
buttonsMessage.footerText = message.footer;
|
|
612
|
+
}
|
|
613
|
+
if ('title' in message && !!message.title) {
|
|
614
|
+
buttonsMessage.text = message.title,
|
|
615
|
+
buttonsMessage.headerType = ButtonType.TEXT;
|
|
616
|
+
}
|
|
617
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
618
|
+
buttonsMessage.contextInfo = message.contextInfo;
|
|
619
|
+
}
|
|
620
|
+
if ('mentions' in message && !!message.mentions) {
|
|
621
|
+
buttonsMessage.contextInfo = { mentionedJid: message.mentions };
|
|
622
|
+
}
|
|
623
|
+
m = { buttonsMessage };
|
|
493
624
|
}
|
|
494
|
-
if (
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
if (
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
625
|
+
else if ('templateButtons' in message && !!message.templateButtons) {
|
|
626
|
+
const msg = {
|
|
627
|
+
hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
|
|
628
|
+
};
|
|
629
|
+
if ('text' in message) {
|
|
630
|
+
msg.hydratedContentText = message.text;
|
|
631
|
+
}
|
|
632
|
+
else {
|
|
633
|
+
if ('caption' in message) {
|
|
634
|
+
msg.hydratedContentText = message.caption;
|
|
635
|
+
}
|
|
636
|
+
Object.assign(msg, m);
|
|
637
|
+
}
|
|
638
|
+
if ('footer' in message && !!message.footer) {
|
|
639
|
+
msg.hydratedFooterText = message.footer;
|
|
640
|
+
}
|
|
641
|
+
m = {
|
|
642
|
+
templateMessage: {
|
|
643
|
+
fourRowTemplate: msg,
|
|
644
|
+
hydratedTemplate: msg
|
|
502
645
|
}
|
|
503
|
-
|
|
504
|
-
|
|
646
|
+
};
|
|
647
|
+
}
|
|
648
|
+
if ('interactiveButtons' in message && !!message.interactiveButtons) {
|
|
649
|
+
const interactiveMessage = {
|
|
650
|
+
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
|
651
|
+
buttons: message.interactiveButtons,
|
|
652
|
+
})
|
|
653
|
+
};
|
|
654
|
+
if ('text' in message) {
|
|
655
|
+
body: interactiveMessage.body = {
|
|
656
|
+
text: message.text
|
|
657
|
+
};
|
|
658
|
+
header: interactiveMessage.header = {
|
|
659
|
+
title: message.title,
|
|
660
|
+
subtitle: message.subtitle,
|
|
661
|
+
hasMediaAttachment: (_v = message === null || message === void 0 ? void 0 : message.media) !== null && _v !== void 0 ? _v : false,
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
if ('caption' in message) {
|
|
666
|
+
body: interactiveMessage.body = {
|
|
667
|
+
text: message.caption
|
|
668
|
+
};
|
|
669
|
+
header: interactiveMessage.header = {
|
|
670
|
+
title: message.title,
|
|
671
|
+
subtitle: message.subtitle,
|
|
672
|
+
hasMediaAttachment: (_w = message === null || message === void 0 ? void 0 : message.media) !== null && _w !== void 0 ? _w : false,
|
|
673
|
+
};
|
|
674
|
+
Object.assign(interactiveMessage.header, m);
|
|
505
675
|
}
|
|
506
676
|
}
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
nonJidMentions: message.mentionAll ? 1 : 0
|
|
677
|
+
if ('footer' in message && !!message.footer) {
|
|
678
|
+
footer: interactiveMessage.footer = {
|
|
679
|
+
text: message.footer
|
|
511
680
|
};
|
|
512
681
|
}
|
|
682
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
683
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
684
|
+
}
|
|
685
|
+
if ('mentions' in message && !!message.mentions) {
|
|
686
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
687
|
+
}
|
|
688
|
+
m = { interactiveMessage };
|
|
513
689
|
}
|
|
514
|
-
if (
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
690
|
+
if ('shop' in message && !!message.shop) {
|
|
691
|
+
const interactiveMessage = {
|
|
692
|
+
shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
|
|
693
|
+
surface: message.shop,
|
|
694
|
+
id: message.id
|
|
695
|
+
})
|
|
696
|
+
};
|
|
697
|
+
if ('text' in message) {
|
|
698
|
+
body: interactiveMessage.body = {
|
|
699
|
+
text: message.text
|
|
700
|
+
};
|
|
701
|
+
header: interactiveMessage.header = {
|
|
702
|
+
title: message.title,
|
|
703
|
+
subtitle: message.subtitle,
|
|
704
|
+
hasMediaAttachment: (_x = message === null || message === void 0 ? void 0 : message.media) !== null && _x !== void 0 ? _x : false,
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
else {
|
|
708
|
+
if ('caption' in message) {
|
|
709
|
+
body: interactiveMessage.body = {
|
|
710
|
+
text: message.caption
|
|
711
|
+
};
|
|
712
|
+
header: interactiveMessage.header = {
|
|
713
|
+
title: message.title,
|
|
714
|
+
subtitle: message.subtitle,
|
|
715
|
+
hasMediaAttachment: (_y = message === null || message === void 0 ? void 0 : message.media) !== null && _y !== void 0 ? _y : false,
|
|
716
|
+
};
|
|
717
|
+
Object.assign(interactiveMessage.header, m);
|
|
521
718
|
}
|
|
719
|
+
}
|
|
720
|
+
if ('footer' in message && !!message.footer) {
|
|
721
|
+
footer: interactiveMessage.footer = {
|
|
722
|
+
text: message.footer
|
|
723
|
+
};
|
|
724
|
+
}
|
|
725
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
726
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
727
|
+
}
|
|
728
|
+
if ('mentions' in message && !!message.mentions) {
|
|
729
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
730
|
+
}
|
|
731
|
+
m = { interactiveMessage };
|
|
732
|
+
}
|
|
733
|
+
if ('collection' in message && !!message.shop) {
|
|
734
|
+
const interactiveMessage = {
|
|
735
|
+
collectionMessage: Types_1.WAProto.Message.InteractiveMessage.CollectionMessage.fromObject({
|
|
736
|
+
bizJid: (_z = message === null || message === void 0 ? void 0 : message.collection) === null || _z === void 0 ? void 0 : _z.bizJid,
|
|
737
|
+
id: (_0 = message === null || message === void 0 ? void 0 : message.collection) === null || _0 === void 0 ? void 0 : _0.id,
|
|
738
|
+
messageVersion: (_1 = message === null || message === void 0 ? void 0 : message.collection) === null || _1 === void 0 ? void 0 : _1.version
|
|
739
|
+
})
|
|
522
740
|
};
|
|
741
|
+
if ('text' in message) {
|
|
742
|
+
body: interactiveMessage.body = {
|
|
743
|
+
text: message.text
|
|
744
|
+
};
|
|
745
|
+
header: interactiveMessage.header = {
|
|
746
|
+
title: message.title,
|
|
747
|
+
subtitle: message.subtitle,
|
|
748
|
+
hasMediaAttachment: (_2 = message === null || message === void 0 ? void 0 : message.media) !== null && _2 !== void 0 ? _2 : false,
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
else {
|
|
752
|
+
if ('caption' in message) {
|
|
753
|
+
body: interactiveMessage.body = {
|
|
754
|
+
text: message.caption
|
|
755
|
+
};
|
|
756
|
+
header: interactiveMessage.header = {
|
|
757
|
+
title: message.title,
|
|
758
|
+
subtitle: message.subtitle,
|
|
759
|
+
hasMediaAttachment: (_3 = message === null || message === void 0 ? void 0 : message.media) !== null && _3 !== void 0 ? _3 : false,
|
|
760
|
+
};
|
|
761
|
+
Object.assign(interactiveMessage.header, m);
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
if ('footer' in message && !!message.footer) {
|
|
765
|
+
footer: interactiveMessage.footer = {
|
|
766
|
+
text: message.footer
|
|
767
|
+
};
|
|
768
|
+
}
|
|
769
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
770
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
771
|
+
}
|
|
772
|
+
if ('mentions' in message && !!message.mentions) {
|
|
773
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
774
|
+
}
|
|
775
|
+
m = { interactiveMessage };
|
|
523
776
|
}
|
|
524
|
-
if (
|
|
525
|
-
const
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
777
|
+
if ('cards' in message && !!message.cards) {
|
|
778
|
+
const slides = await Promise.all(message.cards.map(async (slide) => {
|
|
779
|
+
const { image, video, product, title, caption, footer, buttons } = slide;
|
|
780
|
+
let header;
|
|
781
|
+
if (product) {
|
|
782
|
+
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: product.productImage, ...options }, options);
|
|
783
|
+
header = {
|
|
784
|
+
productMesage: Types_1.WAProto.Message.ProductMessage.fromObject({
|
|
785
|
+
product: {
|
|
786
|
+
...product,
|
|
787
|
+
productImage: imageMessage,
|
|
788
|
+
},
|
|
789
|
+
...slide
|
|
790
|
+
})
|
|
791
|
+
};
|
|
792
|
+
}
|
|
793
|
+
else if (image) {
|
|
794
|
+
header = await (0, exports.prepareWAMessageMedia)({ image: image, ...options }, options);
|
|
795
|
+
}
|
|
796
|
+
else if (video) {
|
|
797
|
+
header = await (0, exports.prepareWAMessageMedia)({ video: video, ...options }, options);
|
|
798
|
+
}
|
|
799
|
+
const msg = {
|
|
800
|
+
header: Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
|
|
801
|
+
title,
|
|
802
|
+
hasMediaAttachment: true,
|
|
803
|
+
...header
|
|
804
|
+
}),
|
|
805
|
+
body: Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
|
|
806
|
+
text: caption
|
|
807
|
+
}),
|
|
808
|
+
footer: Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
|
|
809
|
+
text: footer
|
|
810
|
+
}),
|
|
811
|
+
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
|
812
|
+
buttons,
|
|
813
|
+
}),
|
|
814
|
+
};
|
|
815
|
+
return msg;
|
|
816
|
+
}));
|
|
817
|
+
const interactiveMessage = {
|
|
818
|
+
carouselMessage: Types_1.WAProto.Message.InteractiveMessage.CarouselMessage.fromObject({
|
|
819
|
+
cards: slides
|
|
820
|
+
})
|
|
821
|
+
};
|
|
822
|
+
if ('text' in message) {
|
|
823
|
+
interactiveMessage.body = Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
|
|
824
|
+
text: message.text
|
|
825
|
+
});
|
|
826
|
+
interactiveMessage.header = Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
|
|
827
|
+
title: message.title,
|
|
828
|
+
subtitle: message.subtitle,
|
|
829
|
+
hasMediaAttachment: (_4 = message === null || message === void 0 ? void 0 : message.media) !== null && _4 !== void 0 ? _4 : false,
|
|
830
|
+
});
|
|
831
|
+
}
|
|
832
|
+
if ('footer' in message && !!message.footer) {
|
|
833
|
+
interactiveMessage.footer = Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
|
|
834
|
+
text: message.footer
|
|
835
|
+
});
|
|
836
|
+
}
|
|
837
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
838
|
+
interactiveMessage.contextInfo = message.contextInfo;
|
|
529
839
|
}
|
|
530
|
-
|
|
531
|
-
|
|
840
|
+
if ('mentions' in message && !!message.mentions) {
|
|
841
|
+
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
532
842
|
}
|
|
843
|
+
m = { interactiveMessage };
|
|
533
844
|
}
|
|
534
|
-
if (
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
845
|
+
if ('sections' in message && !!message.sections) {
|
|
846
|
+
const listMessage = WAProto_1.proto.Message.ListMessage.fromObject({
|
|
847
|
+
sections: message.sections,
|
|
848
|
+
buttonText: message.buttonText,
|
|
849
|
+
title: message.title,
|
|
850
|
+
footerText: message.footer,
|
|
851
|
+
description: message.text,
|
|
852
|
+
listType: WAProto_1.proto.Message.ListMessage.ListType.PRODUCT_LIST
|
|
853
|
+
});
|
|
854
|
+
m = { listMessage };
|
|
855
|
+
}
|
|
856
|
+
if ('viewOnce' in message && !!message.viewOnce) {
|
|
857
|
+
m = { viewOnceMessage: { message: m } };
|
|
858
|
+
}
|
|
859
|
+
if ('viewOnceV2' in message && !!message.viewOnceV2) {
|
|
860
|
+
m = { viewOnceMessageV2: { message: m } };
|
|
861
|
+
}
|
|
862
|
+
if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
|
|
863
|
+
m = { viewOnceMessageV2Extension: { message: m } };
|
|
864
|
+
}
|
|
865
|
+
if ('ephemeral' in message && !!message.ephemeral) {
|
|
866
|
+
m = { ephemeralMessage: { message: m } };
|
|
867
|
+
}
|
|
868
|
+
if ('lottie' in message && !!message.lottie) {
|
|
869
|
+
m = { lottieStickerMessage: { message: m } };
|
|
870
|
+
}
|
|
871
|
+
if ('mentions' in message && ((_5 = message.mentions) === null || _5 === void 0 ? void 0 : _5.length)) {
|
|
872
|
+
const [messageType] = Object.keys(m);
|
|
873
|
+
m[messageType].contextInfo = m[messageType] || {};
|
|
874
|
+
m[messageType].contextInfo.mentionedJid = message.mentions;
|
|
875
|
+
}
|
|
876
|
+
if ('edit' in message) {
|
|
877
|
+
m = {
|
|
878
|
+
protocolMessage: {
|
|
879
|
+
key: message.edit,
|
|
880
|
+
editedMessage: m,
|
|
881
|
+
timestampMs: Date.now(),
|
|
882
|
+
type: Types_1.WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
|
|
540
883
|
}
|
|
541
884
|
};
|
|
542
885
|
}
|
|
543
|
-
if (
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
}
|
|
886
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
887
|
+
const [messageType] = Object.keys(m);
|
|
888
|
+
m[messageType] = m[messageType] || {};
|
|
889
|
+
m[messageType].contextInfo = message.contextInfo;
|
|
548
890
|
}
|
|
549
|
-
return WAProto.Message.
|
|
891
|
+
return Types_1.WAProto.Message.fromObject(m);
|
|
550
892
|
};
|
|
551
|
-
|
|
893
|
+
exports.generateWAMessageContent = generateWAMessageContent;
|
|
894
|
+
const generateWAMessageFromContent = (jid, message, options) => {
|
|
895
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
552
896
|
// set timestamp to now
|
|
553
897
|
// if not specified
|
|
554
898
|
if (!options.timestamp) {
|
|
555
899
|
options.timestamp = new Date();
|
|
556
900
|
}
|
|
557
|
-
const innerMessage = normalizeMessageContent(message);
|
|
558
|
-
const key = getContentType(innerMessage);
|
|
559
|
-
const timestamp = unixTimestampSeconds(options.timestamp);
|
|
901
|
+
const innerMessage = (0, exports.normalizeMessageContent)(message);
|
|
902
|
+
const key = (0, exports.getContentType)(innerMessage);
|
|
903
|
+
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
|
560
904
|
const { quoted, userJid } = options;
|
|
561
|
-
if (quoted && !
|
|
562
|
-
const participant = quoted.key.fromMe
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
let quotedMsg = normalizeMessageContent(quoted.message);
|
|
566
|
-
const msgType = getContentType(quotedMsg);
|
|
905
|
+
if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
|
|
906
|
+
const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
|
|
907
|
+
let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
|
|
908
|
+
const msgType = (0, exports.getContentType)(quotedMsg);
|
|
567
909
|
// strip any redundant properties
|
|
568
|
-
quotedMsg = proto.Message.
|
|
910
|
+
quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
|
|
569
911
|
const quotedContent = quotedMsg[msgType];
|
|
570
912
|
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
|
571
913
|
delete quotedContent.contextInfo;
|
|
572
914
|
}
|
|
573
|
-
|
|
574
|
-
|
|
915
|
+
let requestPayment;
|
|
916
|
+
if (key === 'requestPaymentMessage') {
|
|
917
|
+
if (((_a = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _a === void 0 ? void 0 : _a.noteMessage) && ((_c = (_b = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _b === void 0 ? void 0 : _b.noteMessage) === null || _c === void 0 ? void 0 : _c.extendedTextMessage)) {
|
|
918
|
+
requestPayment = (_e = (_d = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _d === void 0 ? void 0 : _d.noteMessage) === null || _e === void 0 ? void 0 : _e.extendedTextMessage;
|
|
919
|
+
}
|
|
920
|
+
else if (((_f = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _f === void 0 ? void 0 : _f.noteMessage) && ((_h = (_g = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _g === void 0 ? void 0 : _g.noteMessage) === null || _h === void 0 ? void 0 : _h.stickerMessage)) {
|
|
921
|
+
requestPayment = (_k = (_j = innerMessage.requestPaymentMessage) === null || _j === void 0 ? void 0 : _j.noteMessage) === null || _k === void 0 ? void 0 : _k.stickerMessage;
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
const contextInfo = (key === 'requestPaymentMessage' ? requestPayment.contextInfo : innerMessage[key].contextInfo) || {};
|
|
925
|
+
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
|
575
926
|
contextInfo.stanzaId = quoted.key.id;
|
|
576
927
|
contextInfo.quotedMessage = quotedMsg;
|
|
577
928
|
// if a participant is quoted, then it must be a group
|
|
@@ -579,63 +930,62 @@ export const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
579
930
|
if (jid !== quoted.key.remoteJid) {
|
|
580
931
|
contextInfo.remoteJid = quoted.key.remoteJid;
|
|
581
932
|
}
|
|
582
|
-
|
|
583
|
-
/* @ts-ignore */
|
|
584
|
-
innerMessage[key].contextInfo = contextInfo;
|
|
585
|
-
}
|
|
933
|
+
innerMessage[key].contextInfo = contextInfo;
|
|
586
934
|
}
|
|
587
935
|
if (
|
|
588
936
|
// if we want to send a disappearing message
|
|
589
|
-
!!options
|
|
937
|
+
!!(options === null || options === void 0 ? void 0 : options.ephemeralExpiration) &&
|
|
590
938
|
// and it's not a protocol message -- delete, toggle disappear message
|
|
591
939
|
key !== 'protocolMessage' &&
|
|
592
940
|
// already not converted to disappearing message
|
|
593
941
|
key !== 'ephemeralMessage' &&
|
|
594
|
-
//
|
|
595
|
-
!
|
|
596
|
-
/* @ts-ignore */
|
|
942
|
+
// newsletter not accept disappearing messages
|
|
943
|
+
!(0, WABinary_1.isJidNewsLetter)(jid)) {
|
|
597
944
|
innerMessage[key].contextInfo = {
|
|
598
945
|
...(innerMessage[key].contextInfo || {}),
|
|
599
|
-
expiration: options.ephemeralExpiration || WA_DEFAULT_EPHEMERAL
|
|
946
|
+
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
|
|
600
947
|
//ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
|
|
601
948
|
};
|
|
602
949
|
}
|
|
603
|
-
message = WAProto.Message.
|
|
950
|
+
message = Types_1.WAProto.Message.fromObject(message);
|
|
604
951
|
const messageJSON = {
|
|
605
952
|
key: {
|
|
606
953
|
remoteJid: jid,
|
|
607
954
|
fromMe: true,
|
|
608
|
-
id: options
|
|
955
|
+
id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageID)(),
|
|
609
956
|
},
|
|
610
957
|
message: message,
|
|
611
958
|
messageTimestamp: timestamp,
|
|
612
959
|
messageStubParameters: [],
|
|
613
|
-
participant: isJidGroup(jid) || isJidStatusBroadcast(jid) ? userJid : undefined,
|
|
614
|
-
status: WAMessageStatus.PENDING
|
|
960
|
+
participant: (0, WABinary_1.isJidGroup)(jid) || (0, WABinary_1.isJidStatusBroadcast)(jid) ? userJid : undefined,
|
|
961
|
+
status: Types_1.WAMessageStatus.PENDING
|
|
615
962
|
};
|
|
616
|
-
return WAProto.WebMessageInfo.fromObject(messageJSON);
|
|
963
|
+
return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
|
|
617
964
|
};
|
|
618
|
-
|
|
965
|
+
exports.generateWAMessageFromContent = generateWAMessageFromContent;
|
|
966
|
+
const generateWAMessage = async (jid, content, options) => {
|
|
967
|
+
var _a;
|
|
619
968
|
// ensure msg ID is with every log
|
|
620
|
-
options.logger = options
|
|
621
|
-
|
|
622
|
-
return generateWAMessageFromContent(jid, await generateWAMessageContent(content, { ...options, jid }), options);
|
|
969
|
+
options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
|
|
970
|
+
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
|
|
623
971
|
};
|
|
972
|
+
exports.generateWAMessage = generateWAMessage;
|
|
624
973
|
/** Get the key to access the true type of content */
|
|
625
|
-
|
|
974
|
+
const getContentType = (content) => {
|
|
626
975
|
if (content) {
|
|
627
976
|
const keys = Object.keys(content);
|
|
628
977
|
const key = keys.find(k => (k === 'conversation' || k.includes('Message')) && k !== 'senderKeyDistributionMessage');
|
|
629
978
|
return key;
|
|
630
979
|
}
|
|
631
980
|
};
|
|
981
|
+
exports.getContentType = getContentType;
|
|
632
982
|
/**
|
|
633
983
|
* Normalizes ephemeral, view once messages to regular message content
|
|
634
984
|
* Eg. image messages in ephemeral messages, in view once messages etc.
|
|
635
985
|
* @param content
|
|
636
986
|
* @returns
|
|
637
987
|
*/
|
|
638
|
-
|
|
988
|
+
const normalizeMessageContent = (content) => {
|
|
639
989
|
if (!content) {
|
|
640
990
|
return undefined;
|
|
641
991
|
}
|
|
@@ -649,22 +999,21 @@ export const normalizeMessageContent = (content) => {
|
|
|
649
999
|
}
|
|
650
1000
|
return content;
|
|
651
1001
|
function getFutureProofMessage(message) {
|
|
652
|
-
return (message
|
|
653
|
-
message
|
|
654
|
-
message
|
|
655
|
-
message
|
|
656
|
-
message
|
|
657
|
-
message
|
|
658
|
-
message?.associatedChildMessage ||
|
|
659
|
-
message?.groupStatusMessage ||
|
|
660
|
-
message?.groupStatusMessageV2);
|
|
1002
|
+
return ((message === null || message === void 0 ? void 0 : message.ephemeralMessage)
|
|
1003
|
+
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessage)
|
|
1004
|
+
|| (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
|
|
1005
|
+
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
|
|
1006
|
+
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
|
|
1007
|
+
|| (message === null || message === void 0 ? void 0 : message.editedMessage));
|
|
661
1008
|
}
|
|
662
1009
|
};
|
|
1010
|
+
exports.normalizeMessageContent = normalizeMessageContent;
|
|
663
1011
|
/**
|
|
664
1012
|
* Extract the true message content from a message
|
|
665
1013
|
* Eg. extracts the inner message from a disappearing message/view once message
|
|
666
1014
|
*/
|
|
667
|
-
|
|
1015
|
+
const extractMessageContent = (content) => {
|
|
1016
|
+
var _a, _b, _c, _d, _e, _f;
|
|
668
1017
|
const extractFromTemplateMessage = (msg) => {
|
|
669
1018
|
if (msg.imageMessage) {
|
|
670
1019
|
return { imageMessage: msg.imageMessage };
|
|
@@ -680,39 +1029,35 @@ export const extractMessageContent = (content) => {
|
|
|
680
1029
|
}
|
|
681
1030
|
else {
|
|
682
1031
|
return {
|
|
683
|
-
conversation: 'contentText' in msg
|
|
1032
|
+
conversation: 'contentText' in msg
|
|
1033
|
+
? msg.contentText
|
|
1034
|
+
: ('hydratedContentText' in msg ? msg.hydratedContentText : '')
|
|
684
1035
|
};
|
|
685
1036
|
}
|
|
686
1037
|
};
|
|
687
|
-
content = normalizeMessageContent(content);
|
|
688
|
-
if (content
|
|
1038
|
+
content = (0, exports.normalizeMessageContent)(content);
|
|
1039
|
+
if (content === null || content === void 0 ? void 0 : content.buttonsMessage) {
|
|
689
1040
|
return extractFromTemplateMessage(content.buttonsMessage);
|
|
690
1041
|
}
|
|
691
|
-
if (content
|
|
692
|
-
return extractFromTemplateMessage(content
|
|
1042
|
+
if ((_a = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _a === void 0 ? void 0 : _a.hydratedFourRowTemplate) {
|
|
1043
|
+
return extractFromTemplateMessage((_b = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _b === void 0 ? void 0 : _b.hydratedFourRowTemplate);
|
|
693
1044
|
}
|
|
694
|
-
if (content
|
|
695
|
-
return extractFromTemplateMessage(content
|
|
1045
|
+
if ((_c = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _c === void 0 ? void 0 : _c.hydratedTemplate) {
|
|
1046
|
+
return extractFromTemplateMessage((_d = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _d === void 0 ? void 0 : _d.hydratedTemplate);
|
|
696
1047
|
}
|
|
697
|
-
if (content
|
|
698
|
-
return extractFromTemplateMessage(content
|
|
1048
|
+
if ((_e = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _e === void 0 ? void 0 : _e.fourRowTemplate) {
|
|
1049
|
+
return extractFromTemplateMessage((_f = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _f === void 0 ? void 0 : _f.fourRowTemplate);
|
|
699
1050
|
}
|
|
700
1051
|
return content;
|
|
701
1052
|
};
|
|
1053
|
+
exports.extractMessageContent = extractMessageContent;
|
|
702
1054
|
/**
|
|
703
1055
|
* Returns the device predicted by message ID
|
|
704
1056
|
*/
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
: /^3E.{20}$/.test(id)
|
|
708
|
-
? 'web'
|
|
709
|
-
: /^(.{21}|.{32})$/.test(id)
|
|
710
|
-
? 'android'
|
|
711
|
-
: /^(3F|.{18}$)/.test(id)
|
|
712
|
-
? 'desktop'
|
|
713
|
-
: 'unknown';
|
|
1057
|
+
const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' : /^3E.{20}$/.test(id) ? 'web' : /^(.{21}|.{32})$/.test(id) ? 'android' : /^.{18}$/.test(id) ? 'desktop' : 'unknown';
|
|
1058
|
+
exports.getDevice = getDevice;
|
|
714
1059
|
/** Upserts a receipt in the message */
|
|
715
|
-
|
|
1060
|
+
const updateMessageWithReceipt = (msg, receipt) => {
|
|
716
1061
|
msg.userReceipt = msg.userReceipt || [];
|
|
717
1062
|
const recp = msg.userReceipt.find(m => m.userJid === receipt.userJid);
|
|
718
1063
|
if (recp) {
|
|
@@ -722,43 +1067,41 @@ export const updateMessageWithReceipt = (msg, receipt) => {
|
|
|
722
1067
|
msg.userReceipt.push(receipt);
|
|
723
1068
|
}
|
|
724
1069
|
};
|
|
1070
|
+
exports.updateMessageWithReceipt = updateMessageWithReceipt;
|
|
725
1071
|
/** Update the message with a new reaction */
|
|
726
|
-
|
|
727
|
-
const authorID = getKeyAuthor(reaction.key);
|
|
728
|
-
const reactions = (msg.reactions || [])
|
|
729
|
-
|
|
730
|
-
|
|
1072
|
+
const updateMessageWithReaction = (msg, reaction) => {
|
|
1073
|
+
const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
|
|
1074
|
+
const reactions = (msg.reactions || [])
|
|
1075
|
+
.filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
|
|
1076
|
+
if (reaction.text) {
|
|
1077
|
+
reactions.push(reaction);
|
|
1078
|
+
}
|
|
731
1079
|
msg.reactions = reactions;
|
|
732
1080
|
};
|
|
1081
|
+
exports.updateMessageWithReaction = updateMessageWithReaction;
|
|
733
1082
|
/** Update the message with a new poll update */
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
const
|
|
737
|
-
|
|
1083
|
+
const updateMessageWithPollUpdate = (msg, update) => {
|
|
1084
|
+
var _a, _b;
|
|
1085
|
+
const authorID = (0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey);
|
|
1086
|
+
const reactions = (msg.pollUpdates || [])
|
|
1087
|
+
.filter(r => (0, generics_1.getKeyAuthor)(r.pollUpdateMessageKey) !== authorID);
|
|
1088
|
+
if ((_b = (_a = update.vote) === null || _a === void 0 ? void 0 : _a.selectedOptions) === null || _b === void 0 ? void 0 : _b.length) {
|
|
738
1089
|
reactions.push(update);
|
|
739
1090
|
}
|
|
740
1091
|
msg.pollUpdates = reactions;
|
|
741
1092
|
};
|
|
742
|
-
|
|
743
|
-
export const updateMessageWithEventResponse = (msg, update) => {
|
|
744
|
-
const authorID = getKeyAuthor(update.eventResponseMessageKey);
|
|
745
|
-
const responses = (msg.eventResponses || []).filter(r => getKeyAuthor(r.eventResponseMessageKey) !== authorID);
|
|
746
|
-
responses.push(update);
|
|
747
|
-
msg.eventResponses = responses;
|
|
748
|
-
};
|
|
1093
|
+
exports.updateMessageWithPollUpdate = updateMessageWithPollUpdate;
|
|
749
1094
|
/**
|
|
750
1095
|
* Aggregates all poll updates in a poll.
|
|
751
1096
|
* @param msg the poll creation message
|
|
752
1097
|
* @param meId your jid
|
|
753
1098
|
* @returns A list of options & their voters
|
|
754
1099
|
*/
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
message?.pollCreationMessageV3?.options ||
|
|
759
|
-
[];
|
|
1100
|
+
function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
1101
|
+
var _a, _b, _c;
|
|
1102
|
+
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) || [];
|
|
760
1103
|
const voteHashMap = opts.reduce((acc, opt) => {
|
|
761
|
-
const hash = sha256(Buffer.from(opt.optionName || '')).toString();
|
|
1104
|
+
const hash = (0, crypto_2.sha256)(Buffer.from(opt.optionName || '')).toString();
|
|
762
1105
|
acc[hash] = {
|
|
763
1106
|
name: opt.optionName || '',
|
|
764
1107
|
voters: []
|
|
@@ -780,36 +1123,14 @@ export function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
|
780
1123
|
};
|
|
781
1124
|
data = voteHashMap[hash];
|
|
782
1125
|
}
|
|
783
|
-
voteHashMap[hash].voters.push(getKeyAuthor(update.pollUpdateMessageKey, meId));
|
|
1126
|
+
voteHashMap[hash].voters.push((0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey, meId));
|
|
784
1127
|
}
|
|
785
1128
|
}
|
|
786
1129
|
return Object.values(voteHashMap);
|
|
787
1130
|
}
|
|
788
|
-
|
|
789
|
-
* Aggregates all event responses in an event message.
|
|
790
|
-
* @param msg the event creation message
|
|
791
|
-
* @param meId your jid
|
|
792
|
-
* @returns A list of response types & their responders
|
|
793
|
-
*/
|
|
794
|
-
export function getAggregateResponsesInEventMessage({ eventResponses }, meId) {
|
|
795
|
-
const responseTypes = ['GOING', 'NOT_GOING', 'MAYBE'];
|
|
796
|
-
const responseMap = {};
|
|
797
|
-
for (const type of responseTypes) {
|
|
798
|
-
responseMap[type] = {
|
|
799
|
-
response: type,
|
|
800
|
-
responders: []
|
|
801
|
-
};
|
|
802
|
-
}
|
|
803
|
-
for (const update of eventResponses || []) {
|
|
804
|
-
const responseType = update.eventResponse || 'UNKNOWN';
|
|
805
|
-
if (responseType !== 'UNKNOWN' && responseMap[responseType]) {
|
|
806
|
-
responseMap[responseType].responders.push(getKeyAuthor(update.eventResponseMessageKey, meId));
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
return Object.values(responseMap);
|
|
810
|
-
}
|
|
1131
|
+
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
811
1132
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
|
812
|
-
|
|
1133
|
+
const aggregateMessageKeysNotFromMe = (keys) => {
|
|
813
1134
|
const keyMap = {};
|
|
814
1135
|
for (const { remoteJid, id, participant, fromMe } of keys) {
|
|
815
1136
|
if (!fromMe) {
|
|
@@ -826,34 +1147,40 @@ export const aggregateMessageKeysNotFromMe = (keys) => {
|
|
|
826
1147
|
}
|
|
827
1148
|
return Object.values(keyMap);
|
|
828
1149
|
};
|
|
1150
|
+
exports.aggregateMessageKeysNotFromMe = aggregateMessageKeysNotFromMe;
|
|
829
1151
|
const REUPLOAD_REQUIRED_STATUS = [410, 404];
|
|
830
1152
|
/**
|
|
831
1153
|
* Downloads the given message. Throws an error if it's not a media message
|
|
832
1154
|
*/
|
|
833
|
-
|
|
834
|
-
const result = await downloadMsg()
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
1155
|
+
const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
1156
|
+
const result = await downloadMsg()
|
|
1157
|
+
.catch(async (error) => {
|
|
1158
|
+
var _a;
|
|
1159
|
+
if (ctx) {
|
|
1160
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
1161
|
+
// check if the message requires a reupload
|
|
1162
|
+
if (REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
|
|
1163
|
+
ctx.logger.info({ key: message.key }, 'sending reupload media request...');
|
|
1164
|
+
// request reupload
|
|
1165
|
+
message = await ctx.reuploadRequest(message);
|
|
1166
|
+
const result = await downloadMsg();
|
|
1167
|
+
return result;
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
843
1170
|
}
|
|
844
1171
|
throw error;
|
|
845
1172
|
});
|
|
846
1173
|
return result;
|
|
847
1174
|
async function downloadMsg() {
|
|
848
|
-
const mContent = extractMessageContent(message.message);
|
|
1175
|
+
const mContent = (0, exports.extractMessageContent)(message.message);
|
|
849
1176
|
if (!mContent) {
|
|
850
|
-
throw new Boom('No message present', { statusCode: 400, data: message });
|
|
1177
|
+
throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
|
|
851
1178
|
}
|
|
852
|
-
const contentType = getContentType(mContent);
|
|
853
|
-
let mediaType = contentType
|
|
1179
|
+
const contentType = (0, exports.getContentType)(mContent);
|
|
1180
|
+
let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
|
|
854
1181
|
const media = mContent[contentType];
|
|
855
1182
|
if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
|
|
856
|
-
throw new Boom(`"${contentType}" message is not a media message`);
|
|
1183
|
+
throw new boom_1.Boom(`"${contentType}" message is not a media message`);
|
|
857
1184
|
}
|
|
858
1185
|
let download;
|
|
859
1186
|
if ('thumbnailDirectPath' in media && !('url' in media)) {
|
|
@@ -866,7 +1193,7 @@ export const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
|
866
1193
|
else {
|
|
867
1194
|
download = media;
|
|
868
1195
|
}
|
|
869
|
-
const stream = await downloadContentFromMessage(download, mediaType, options);
|
|
1196
|
+
const stream = await (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
|
|
870
1197
|
if (type === 'buffer') {
|
|
871
1198
|
const bufferArray = [];
|
|
872
1199
|
for await (const chunk of stream) {
|
|
@@ -877,17 +1204,18 @@ export const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
|
877
1204
|
return stream;
|
|
878
1205
|
}
|
|
879
1206
|
};
|
|
1207
|
+
exports.downloadMediaMessage = downloadMediaMessage;
|
|
880
1208
|
/** Checks whether the given message is a media message; if it is returns the inner content */
|
|
881
|
-
|
|
882
|
-
content = extractMessageContent(content);
|
|
883
|
-
const mediaContent = content
|
|
884
|
-
content
|
|
885
|
-
content
|
|
886
|
-
content
|
|
887
|
-
content
|
|
1209
|
+
const assertMediaContent = (content) => {
|
|
1210
|
+
content = (0, exports.extractMessageContent)(content);
|
|
1211
|
+
const mediaContent = (content === null || content === void 0 ? void 0 : content.documentMessage)
|
|
1212
|
+
|| (content === null || content === void 0 ? void 0 : content.imageMessage)
|
|
1213
|
+
|| (content === null || content === void 0 ? void 0 : content.videoMessage)
|
|
1214
|
+
|| (content === null || content === void 0 ? void 0 : content.audioMessage)
|
|
1215
|
+
|| (content === null || content === void 0 ? void 0 : content.stickerMessage);
|
|
888
1216
|
if (!mediaContent) {
|
|
889
|
-
throw new Boom('given message is not a media message', { statusCode: 400, data: content });
|
|
1217
|
+
throw new boom_1.Boom('given message is not a media message', { statusCode: 400, data: content });
|
|
890
1218
|
}
|
|
891
1219
|
return mediaContent;
|
|
892
1220
|
};
|
|
893
|
-
|
|
1221
|
+
exports.assertMediaContent = assertMediaContent;
|