lordceaser-baileys 2.0.37 → 2.0.39
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/LICENSE +1 -1
- package/README.md +660 -1073
- package/WAProto/GenerateStatics.sh +4 -3
- package/WAProto/WAProto.proto +359 -2494
- package/WAProto/index.d.ts +31460 -8461
- package/WAProto/index.js +96236 -92883
- 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/lib/Defaults/baileys-version.json +3 -0
- package/lib/Defaults/index.d.ts +245 -37
- package/lib/Defaults/index.js +74 -82
- package/lib/Defaults/phonenumber-mcc.json +223 -0
- 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 +87 -156
- package/lib/Socket/business.js +43 -162
- package/lib/Socket/chats.d.ts +40 -82
- package/lib/Socket/chats.js +284 -603
- package/lib/Socket/groups.d.ts +58 -96
- package/lib/Socket/groups.js +82 -115
- package/lib/Socket/index.d.ts +94 -204
- package/lib/Socket/index.js +9 -11
- package/lib/Socket/messages-recv.d.ts +77 -145
- package/lib/Socket/messages-recv.js +400 -1305
- package/lib/Socket/messages-send.d.ts +70 -141
- package/lib/Socket/messages-send.js +249 -717
- package/lib/Socket/registration.d.ts +242 -0
- package/lib/Socket/registration.js +166 -0
- package/lib/Socket/socket.d.ts +18 -34
- package/lib/Socket/socket.js +206 -557
- 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 +422 -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 +12 -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 +14 -31
- 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 +29 -81
- package/lib/Types/Message.js +9 -11
- 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 +26 -46
- 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/index.d.ts +13 -16
- package/lib/Types/index.js +30 -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 +2 -3
- package/lib/Utils/business.js +69 -66
- package/lib/Utils/chat-utils.d.ts +23 -52
- package/lib/Utils/chat-utils.js +248 -380
- package/lib/Utils/crypto.d.ts +21 -17
- package/lib/Utils/crypto.js +92 -57
- package/lib/Utils/decode-wa-message.d.ts +8 -54
- package/lib/Utils/decode-wa-message.js +57 -186
- package/lib/Utils/event-buffer.d.ts +8 -9
- package/lib/Utils/event-buffer.js +76 -178
- package/lib/Utils/generics.d.ts +23 -26
- package/lib/Utils/generics.js +166 -165
- 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 +33 -22
- package/lib/Utils/link-preview.d.ts +5 -5
- package/lib/Utils/link-preview.js +24 -16
- package/lib/Utils/logger.d.ts +3 -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 +2 -4
- package/lib/Utils/make-mutex.js +34 -24
- package/lib/Utils/messages-media.d.ts +35 -61
- package/lib/Utils/messages-media.js +301 -415
- package/lib/Utils/messages.d.ts +18 -32
- package/lib/Utils/messages.js +261 -396
- package/lib/Utils/noise-handler.d.ts +13 -12
- package/lib/Utils/noise-handler.js +98 -144
- package/lib/Utils/process-message.d.ts +12 -30
- package/lib/Utils/process-message.js +163 -439
- package/lib/Utils/signal.d.ts +5 -20
- package/lib/Utils/signal.js +74 -114
- package/lib/Utils/use-multi-file-auth-state.d.ts +1 -2
- package/lib/Utils/use-multi-file-auth-state.js +33 -61
- 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 +4 -4
- package/lib/WABinary/decode.js +43 -51
- package/lib/WABinary/encode.d.ts +3 -3
- package/lib/WABinary/encode.js +44 -32
- package/lib/WABinary/generic-utils.d.ts +6 -6
- 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 +6 -23
- package/lib/WABinary/jid-utils.js +39 -73
- package/lib/WABinary/types.d.ts +1 -2
- package/lib/WABinary/types.js +2 -2
- package/lib/WAM/BinaryInfo.d.ts +11 -3
- 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 +3 -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/index.d.ts +8 -9
- package/lib/index.js +30 -11
- package/package.json +2 -2
- package/WAProto/WAProto/GenerateStatics.sh +0 -3
- package/WAProto/WAProto/WAProto.proto +0 -5479
- package/WAProto/WAProto/fix-imports.js +0 -85
- package/WAProto/WAProto/index.d.ts +0 -14017
- package/WAProto/WAProto/index.js +0 -97691
- package/WAProto/fix-imports.js +0 -85
- 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 +0 -170
- package/lib/Socket/newsletter.d.ts.map +0 -1
- package/lib/Socket/newsletter.js +0 -181
- 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 +0 -26
- package/lib/Types/USync.d.ts.map +0 -1
- package/lib/Types/USync.js +0 -2
- 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 +0 -10
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -52
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -23
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -54
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -13
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -27
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -13
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -38
- 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 +0 -26
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +0 -51
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -10
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +0 -29
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +0 -1
- package/lib/WAUSync/Protocols/index.d.ts +0 -6
- package/lib/WAUSync/Protocols/index.d.ts.map +0 -1
- package/lib/WAUSync/Protocols/index.js +0 -6
- package/lib/WAUSync/Protocols/index.js.map +0 -1
- package/lib/WAUSync/USyncQuery.d.ts +0 -30
- package/lib/WAUSync/USyncQuery.d.ts.map +0 -1
- package/lib/WAUSync/USyncQuery.js +0 -98
- package/lib/WAUSync/USyncQuery.js.map +0 -1
- package/lib/WAUSync/USyncUser.d.ts +0 -17
- package/lib/WAUSync/USyncUser.d.ts.map +0 -1
- package/lib/WAUSync/USyncUser.js +0 -31
- package/lib/WAUSync/USyncUser.js.map +0 -1
- package/lib/WAUSync/index.d.ts +0 -4
- package/lib/WAUSync/index.d.ts.map +0 -1
- package/lib/WAUSync/index.js +0 -4
- package/lib/WAUSync/index.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
package/lib/Utils/messages.js
CHANGED
|
@@ -1,49 +1,55 @@
|
|
|
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
|
};
|
|
28
33
|
/**
|
|
29
34
|
* Uses a regex to test whether the string contains a URL, and returns the URL if it does.
|
|
30
35
|
* @param text eg. hello https://google.com
|
|
31
36
|
* @returns the URL, eg. https://google.com
|
|
32
37
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
|
|
39
|
+
exports.extractUrlFromText = extractUrlFromText;
|
|
40
|
+
const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
|
|
41
|
+
const url = (0, exports.extractUrlFromText)(text);
|
|
36
42
|
if (!!getUrlInfo && url) {
|
|
37
43
|
try {
|
|
38
44
|
const urlInfo = await getUrlInfo(url);
|
|
39
45
|
return urlInfo;
|
|
40
46
|
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
|
|
43
|
-
logger?.warn({ trace: error.stack }, 'url generation failed');
|
|
47
|
+
catch (error) { // ignore if fails
|
|
48
|
+
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
|
|
44
49
|
}
|
|
45
50
|
}
|
|
46
51
|
};
|
|
52
|
+
exports.generateLinkPreviewIfRequired = generateLinkPreviewIfRequired;
|
|
47
53
|
const assertColor = async (color) => {
|
|
48
54
|
let assertedColor;
|
|
49
55
|
if (typeof color === 'number') {
|
|
@@ -58,16 +64,16 @@ const assertColor = async (color) => {
|
|
|
58
64
|
return assertedColor;
|
|
59
65
|
}
|
|
60
66
|
};
|
|
61
|
-
|
|
67
|
+
const prepareWAMessageMedia = async (message, options) => {
|
|
62
68
|
const logger = options.logger;
|
|
63
69
|
let mediaType;
|
|
64
|
-
for (const key of MEDIA_KEYS) {
|
|
70
|
+
for (const key of Defaults_1.MEDIA_KEYS) {
|
|
65
71
|
if (key in message) {
|
|
66
72
|
mediaType = key;
|
|
67
73
|
}
|
|
68
74
|
}
|
|
69
75
|
if (!mediaType) {
|
|
70
|
-
throw new Boom('Invalid media type', { statusCode: 400 });
|
|
76
|
+
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
71
77
|
}
|
|
72
78
|
const uploadData = {
|
|
73
79
|
...message,
|
|
@@ -76,124 +82,90 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
76
82
|
delete uploadData[mediaType];
|
|
77
83
|
// check if cacheable + generate cache key
|
|
78
84
|
const cacheableKey = typeof uploadData.media === 'object' &&
|
|
79
|
-
'url' in uploadData.media &&
|
|
85
|
+
('url' in uploadData.media) &&
|
|
80
86
|
!!uploadData.media.url &&
|
|
81
|
-
!!options.mediaCache &&
|
|
82
|
-
|
|
87
|
+
!!options.mediaCache && (
|
|
88
|
+
// generate the key
|
|
89
|
+
mediaType + ':' + uploadData.media.url.toString());
|
|
83
90
|
if (mediaType === 'document' && !uploadData.fileName) {
|
|
84
91
|
uploadData.fileName = 'file';
|
|
85
92
|
}
|
|
86
93
|
if (!uploadData.mimetype) {
|
|
87
94
|
uploadData.mimetype = MIMETYPE_MAP[mediaType];
|
|
88
95
|
}
|
|
96
|
+
// check for cache hit
|
|
89
97
|
if (cacheableKey) {
|
|
90
|
-
const mediaBuff =
|
|
98
|
+
const mediaBuff = options.mediaCache.get(cacheableKey);
|
|
91
99
|
if (mediaBuff) {
|
|
92
|
-
logger
|
|
93
|
-
const obj =
|
|
100
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'got media cache hit');
|
|
101
|
+
const obj = Types_1.WAProto.Message.decode(mediaBuff);
|
|
94
102
|
const key = `${mediaType}Message`;
|
|
95
103
|
Object.assign(obj[key], { ...uploadData, media: undefined });
|
|
96
104
|
return obj;
|
|
97
105
|
}
|
|
98
106
|
}
|
|
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
107
|
const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
|
|
135
|
-
const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
|
|
136
|
-
|
|
108
|
+
const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
|
|
109
|
+
(typeof uploadData['jpegThumbnail'] === 'undefined');
|
|
110
|
+
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
|
|
137
111
|
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
138
112
|
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
|
|
139
|
-
const { mediaKey,
|
|
113
|
+
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath } = await (0, messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
140
114
|
logger,
|
|
141
115
|
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
142
116
|
opts: options.options
|
|
143
117
|
});
|
|
118
|
+
// url safe Base64 encode the SHA256 hash of the body
|
|
144
119
|
const fileEncSha256B64 = fileEncSha256.toString('base64');
|
|
145
120
|
const [{ mediaUrl, directPath }] = await Promise.all([
|
|
146
121
|
(async () => {
|
|
147
|
-
const result = await options.upload(
|
|
148
|
-
|
|
149
|
-
mediaType,
|
|
150
|
-
timeoutMs: options.mediaUploadTimeoutMs
|
|
151
|
-
});
|
|
152
|
-
logger?.debug({ mediaType, cacheableKey }, 'uploaded media');
|
|
122
|
+
const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
|
|
123
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ mediaType, cacheableKey }, 'uploaded media');
|
|
153
124
|
return result;
|
|
154
125
|
})(),
|
|
155
126
|
(async () => {
|
|
156
127
|
try {
|
|
157
128
|
if (requiresThumbnailComputation) {
|
|
158
|
-
const { thumbnail, originalImageDimensions } = await generateThumbnail(
|
|
129
|
+
const { thumbnail, originalImageDimensions } = await (0, messages_media_1.generateThumbnail)(bodyPath, mediaType, options);
|
|
159
130
|
uploadData.jpegThumbnail = thumbnail;
|
|
160
131
|
if (!uploadData.width && originalImageDimensions) {
|
|
161
132
|
uploadData.width = originalImageDimensions.width;
|
|
162
133
|
uploadData.height = originalImageDimensions.height;
|
|
163
|
-
logger
|
|
134
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('set dimensions');
|
|
164
135
|
}
|
|
165
|
-
logger
|
|
136
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('generated thumbnail');
|
|
166
137
|
}
|
|
167
138
|
if (requiresDurationComputation) {
|
|
168
|
-
uploadData.seconds = await getAudioDuration(
|
|
169
|
-
logger
|
|
139
|
+
uploadData.seconds = await (0, messages_media_1.getAudioDuration)(bodyPath);
|
|
140
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('computed audio duration');
|
|
170
141
|
}
|
|
171
142
|
if (requiresWaveformProcessing) {
|
|
172
|
-
uploadData.waveform = await getAudioWaveform(
|
|
173
|
-
logger
|
|
143
|
+
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
144
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
145
|
+
}
|
|
146
|
+
if (requiresWaveformProcessing) {
|
|
147
|
+
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
148
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
174
149
|
}
|
|
175
150
|
if (requiresAudioBackground) {
|
|
176
151
|
uploadData.backgroundArgb = await assertColor(options.backgroundColor);
|
|
177
|
-
logger
|
|
152
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
|
|
178
153
|
}
|
|
179
154
|
}
|
|
180
155
|
catch (error) {
|
|
181
|
-
logger
|
|
182
|
-
}
|
|
183
|
-
})()
|
|
184
|
-
]).finally(async () => {
|
|
185
|
-
try {
|
|
186
|
-
await fs.unlink(encFilePath);
|
|
187
|
-
if (originalFilePath) {
|
|
188
|
-
await fs.unlink(originalFilePath);
|
|
156
|
+
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
|
|
189
157
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
158
|
+
})(),
|
|
159
|
+
])
|
|
160
|
+
.finally(async () => {
|
|
161
|
+
encWriteStream.destroy();
|
|
162
|
+
// remove tmp files
|
|
163
|
+
if (didSaveToTmpPath && bodyPath) {
|
|
164
|
+
await fs_1.promises.unlink(bodyPath);
|
|
165
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
|
|
194
166
|
}
|
|
195
167
|
});
|
|
196
|
-
const obj = WAProto.Message.fromObject({
|
|
168
|
+
const obj = Types_1.WAProto.Message.fromObject({
|
|
197
169
|
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
198
170
|
url: mediaUrl,
|
|
199
171
|
directPath,
|
|
@@ -201,7 +173,7 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
201
173
|
fileEncSha256,
|
|
202
174
|
fileSha256,
|
|
203
175
|
fileLength,
|
|
204
|
-
mediaKeyTimestamp: unixTimestampSeconds(),
|
|
176
|
+
mediaKeyTimestamp: (0, generics_1.unixTimestampSeconds)(),
|
|
205
177
|
...uploadData,
|
|
206
178
|
media: undefined
|
|
207
179
|
})
|
|
@@ -211,75 +183,70 @@ export const prepareWAMessageMedia = async (message, options) => {
|
|
|
211
183
|
delete obj.videoMessage;
|
|
212
184
|
}
|
|
213
185
|
if (cacheableKey) {
|
|
214
|
-
logger
|
|
215
|
-
|
|
186
|
+
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
|
|
187
|
+
options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
|
|
216
188
|
}
|
|
217
189
|
return obj;
|
|
218
190
|
};
|
|
219
|
-
|
|
191
|
+
exports.prepareWAMessageMedia = prepareWAMessageMedia;
|
|
192
|
+
const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
220
193
|
ephemeralExpiration = ephemeralExpiration || 0;
|
|
221
194
|
const content = {
|
|
222
195
|
ephemeralMessage: {
|
|
223
196
|
message: {
|
|
224
197
|
protocolMessage: {
|
|
225
|
-
type: WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
|
|
198
|
+
type: Types_1.WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
|
|
226
199
|
ephemeralExpiration
|
|
227
200
|
}
|
|
228
201
|
}
|
|
229
202
|
}
|
|
230
203
|
};
|
|
231
|
-
return WAProto.Message.fromObject(content);
|
|
204
|
+
return Types_1.WAProto.Message.fromObject(content);
|
|
232
205
|
};
|
|
206
|
+
exports.prepareDisappearingMessageSettingContent = prepareDisappearingMessageSettingContent;
|
|
233
207
|
/**
|
|
234
208
|
* Generate forwarded message content like WA does
|
|
235
209
|
* @param message the message to forward
|
|
236
210
|
* @param options.forceForward will show the message as forwarded even if it is from you
|
|
237
211
|
*/
|
|
238
|
-
|
|
212
|
+
const generateForwardMessageContent = (message, forceForward) => {
|
|
213
|
+
var _a;
|
|
239
214
|
let content = message.message;
|
|
240
215
|
if (!content) {
|
|
241
|
-
throw new Boom('no content in message', { statusCode: 400 });
|
|
216
|
+
throw new boom_1.Boom('no content in message', { statusCode: 400 });
|
|
242
217
|
}
|
|
243
218
|
// hacky copy
|
|
244
|
-
content = normalizeMessageContent(content);
|
|
245
|
-
content = proto.Message.decode(proto.Message.encode(content).finish());
|
|
219
|
+
content = (0, exports.normalizeMessageContent)(content);
|
|
220
|
+
content = WAProto_1.proto.Message.decode(WAProto_1.proto.Message.encode(content).finish());
|
|
246
221
|
let key = Object.keys(content)[0];
|
|
247
|
-
let score = content
|
|
222
|
+
let score = ((_a = content[key].contextInfo) === null || _a === void 0 ? void 0 : _a.forwardingScore) || 0;
|
|
248
223
|
score += message.key.fromMe && !forceForward ? 0 : 1;
|
|
249
224
|
if (key === 'conversation') {
|
|
250
225
|
content.extendedTextMessage = { text: content[key] };
|
|
251
226
|
delete content.conversation;
|
|
252
227
|
key = 'extendedTextMessage';
|
|
253
228
|
}
|
|
254
|
-
const key_ = content?.[key];
|
|
255
229
|
if (score > 0) {
|
|
256
|
-
|
|
230
|
+
content[key].contextInfo = { forwardingScore: score, isForwarded: true };
|
|
257
231
|
}
|
|
258
232
|
else {
|
|
259
|
-
|
|
233
|
+
content[key].contextInfo = {};
|
|
260
234
|
}
|
|
261
235
|
return content;
|
|
262
236
|
};
|
|
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;
|
|
237
|
+
exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
238
|
+
const generateWAMessageContent = async (message, options) => {
|
|
239
|
+
var _a;
|
|
240
|
+
var _b, _c;
|
|
275
241
|
let m = {};
|
|
276
|
-
if (
|
|
242
|
+
if ('text' in message) {
|
|
277
243
|
const extContent = { text: message.text };
|
|
278
244
|
let urlInfo = message.linkPreview;
|
|
279
245
|
if (typeof urlInfo === 'undefined') {
|
|
280
|
-
urlInfo = await generateLinkPreviewIfRequired(message.text, options.getUrlInfo, options.logger);
|
|
246
|
+
urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
|
|
281
247
|
}
|
|
282
248
|
if (urlInfo) {
|
|
249
|
+
extContent.canonicalUrl = urlInfo['canonical-url'];
|
|
283
250
|
extContent.matchedText = urlInfo['matched-text'];
|
|
284
251
|
extContent.jpegThumbnail = urlInfo.jpegThumbnail;
|
|
285
252
|
extContent.description = urlInfo.description;
|
|
@@ -304,45 +271,43 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
304
271
|
}
|
|
305
272
|
m.extendedTextMessage = extContent;
|
|
306
273
|
}
|
|
307
|
-
else if (
|
|
274
|
+
else if ('contacts' in message) {
|
|
308
275
|
const contactLen = message.contacts.contacts.length;
|
|
309
276
|
if (!contactLen) {
|
|
310
|
-
throw new Boom('require atleast 1 contact', { statusCode: 400 });
|
|
277
|
+
throw new boom_1.Boom('require atleast 1 contact', { statusCode: 400 });
|
|
311
278
|
}
|
|
312
279
|
if (contactLen === 1) {
|
|
313
|
-
m.contactMessage = WAProto.Message.ContactMessage.
|
|
280
|
+
m.contactMessage = Types_1.WAProto.Message.ContactMessage.fromObject(message.contacts.contacts[0]);
|
|
314
281
|
}
|
|
315
282
|
else {
|
|
316
|
-
m.contactsArrayMessage = WAProto.Message.ContactsArrayMessage.
|
|
283
|
+
m.contactsArrayMessage = Types_1.WAProto.Message.ContactsArrayMessage.fromObject(message.contacts);
|
|
317
284
|
}
|
|
318
285
|
}
|
|
319
|
-
else if (
|
|
320
|
-
m.locationMessage = WAProto.Message.LocationMessage.
|
|
286
|
+
else if ('location' in message) {
|
|
287
|
+
m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
|
|
321
288
|
}
|
|
322
|
-
else if (
|
|
289
|
+
else if ('react' in message) {
|
|
323
290
|
if (!message.react.senderTimestampMs) {
|
|
324
291
|
message.react.senderTimestampMs = Date.now();
|
|
325
292
|
}
|
|
326
|
-
m.reactionMessage = WAProto.Message.ReactionMessage.
|
|
293
|
+
m.reactionMessage = Types_1.WAProto.Message.ReactionMessage.fromObject(message.react);
|
|
327
294
|
}
|
|
328
|
-
else if (
|
|
295
|
+
else if ('delete' in message) {
|
|
329
296
|
m.protocolMessage = {
|
|
330
297
|
key: message.delete,
|
|
331
|
-
type: WAProto.Message.ProtocolMessage.Type.REVOKE
|
|
298
|
+
type: Types_1.WAProto.Message.ProtocolMessage.Type.REVOKE
|
|
332
299
|
};
|
|
333
300
|
}
|
|
334
|
-
else if (
|
|
335
|
-
m = generateForwardMessageContent(message.forward, message.force);
|
|
301
|
+
else if ('forward' in message) {
|
|
302
|
+
m = (0, exports.generateForwardMessageContent)(message.forward, message.force);
|
|
336
303
|
}
|
|
337
|
-
else if (
|
|
338
|
-
const exp = typeof message.disappearingMessagesInChat === 'boolean'
|
|
339
|
-
?
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
: message.disappearingMessagesInChat;
|
|
343
|
-
m = prepareDisappearingMessageSettingContent(exp);
|
|
304
|
+
else if ('disappearingMessagesInChat' in message) {
|
|
305
|
+
const exp = typeof message.disappearingMessagesInChat === 'boolean' ?
|
|
306
|
+
(message.disappearingMessagesInChat ? Defaults_1.WA_DEFAULT_EPHEMERAL : 0) :
|
|
307
|
+
message.disappearingMessagesInChat;
|
|
308
|
+
m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
|
|
344
309
|
}
|
|
345
|
-
else if (
|
|
310
|
+
else if ('groupInvite' in message) {
|
|
346
311
|
m.groupInviteMessage = {};
|
|
347
312
|
m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
|
|
348
313
|
m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
|
|
@@ -354,15 +319,14 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
354
319
|
if (options.getProfilePicUrl) {
|
|
355
320
|
const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
|
|
356
321
|
if (pfpUrl) {
|
|
357
|
-
const resp = await
|
|
358
|
-
if (resp.
|
|
359
|
-
|
|
360
|
-
m.groupInviteMessage.jpegThumbnail = buf;
|
|
322
|
+
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
|
323
|
+
if (resp.status === 200) {
|
|
324
|
+
m.groupInviteMessage.jpegThumbnail = resp.data;
|
|
361
325
|
}
|
|
362
326
|
}
|
|
363
327
|
}
|
|
364
328
|
}
|
|
365
|
-
else if (
|
|
329
|
+
else if ('pin' in message) {
|
|
366
330
|
m.pinInChatMessage = {};
|
|
367
331
|
m.messageContextInfo = {};
|
|
368
332
|
m.pinInChatMessage.key = message.pin;
|
|
@@ -370,208 +334,134 @@ export const generateWAMessageContent = async (message, options) => {
|
|
|
370
334
|
m.pinInChatMessage.senderTimestampMs = Date.now();
|
|
371
335
|
m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
|
|
372
336
|
}
|
|
373
|
-
else if (
|
|
337
|
+
else if ('buttonReply' in message) {
|
|
374
338
|
switch (message.type) {
|
|
375
339
|
case 'template':
|
|
376
340
|
m.templateButtonReplyMessage = {
|
|
377
341
|
selectedDisplayText: message.buttonReply.displayText,
|
|
378
342
|
selectedId: message.buttonReply.id,
|
|
379
|
-
selectedIndex: message.buttonReply.index
|
|
343
|
+
selectedIndex: message.buttonReply.index,
|
|
380
344
|
};
|
|
381
345
|
break;
|
|
382
346
|
case 'plain':
|
|
383
347
|
m.buttonsResponseMessage = {
|
|
384
348
|
selectedButtonId: message.buttonReply.id,
|
|
385
349
|
selectedDisplayText: message.buttonReply.displayText,
|
|
386
|
-
type: proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT
|
|
350
|
+
type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
|
|
387
351
|
};
|
|
388
352
|
break;
|
|
389
353
|
}
|
|
390
354
|
}
|
|
391
|
-
else if (
|
|
392
|
-
const { videoMessage } = await prepareWAMessageMedia({ video: message.video }, options);
|
|
355
|
+
else if ('ptv' in message && message.ptv) {
|
|
356
|
+
const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
|
|
393
357
|
m.ptvMessage = videoMessage;
|
|
394
358
|
}
|
|
395
|
-
else if (
|
|
396
|
-
const { imageMessage } = await prepareWAMessageMedia({ image: message.product.productImage }, options);
|
|
397
|
-
m.productMessage = WAProto.Message.ProductMessage.
|
|
359
|
+
else if ('product' in message) {
|
|
360
|
+
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
|
|
361
|
+
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
|
|
398
362
|
...message,
|
|
399
363
|
product: {
|
|
400
364
|
...message.product,
|
|
401
|
-
productImage: imageMessage
|
|
365
|
+
productImage: imageMessage,
|
|
402
366
|
}
|
|
403
367
|
});
|
|
404
368
|
}
|
|
405
|
-
else if (
|
|
369
|
+
else if ('listReply' in message) {
|
|
406
370
|
m.listResponseMessage = { ...message.listReply };
|
|
407
371
|
}
|
|
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);
|
|
372
|
+
else if ('poll' in message) {
|
|
373
|
+
(_b = message.poll).selectableCount || (_b.selectableCount = 0);
|
|
374
|
+
(_c = message.poll).toAnnouncementGroup || (_c.toAnnouncementGroup = false);
|
|
431
375
|
if (!Array.isArray(message.poll.values)) {
|
|
432
|
-
throw new Boom('Invalid poll values', { statusCode: 400 });
|
|
376
|
+
throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
|
|
433
377
|
}
|
|
434
|
-
if (message.poll.selectableCount < 0
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
});
|
|
378
|
+
if (message.poll.selectableCount < 0
|
|
379
|
+
|| message.poll.selectableCount > message.poll.values.length) {
|
|
380
|
+
throw new boom_1.Boom(`poll.selectableCount in poll should be >= 0 and <= ${message.poll.values.length}`, { statusCode: 400 });
|
|
438
381
|
}
|
|
439
382
|
m.messageContextInfo = {
|
|
440
383
|
// encKey
|
|
441
|
-
messageSecret: message.poll.messageSecret || randomBytes(32)
|
|
384
|
+
messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
442
385
|
};
|
|
443
386
|
const pollCreationMessage = {
|
|
444
387
|
name: message.poll.name,
|
|
445
388
|
selectableOptionsCount: message.poll.selectableCount,
|
|
446
|
-
options: message.poll.values.map(optionName => ({ optionName }))
|
|
389
|
+
options: message.poll.values.map(optionName => ({ optionName })),
|
|
447
390
|
};
|
|
448
391
|
if (message.poll.toAnnouncementGroup) {
|
|
449
392
|
// poll v2 is for community announcement groups (single select and multiple)
|
|
450
393
|
m.pollCreationMessageV2 = pollCreationMessage;
|
|
451
394
|
}
|
|
452
395
|
else {
|
|
453
|
-
if (message.poll.selectableCount
|
|
396
|
+
if (message.poll.selectableCount > 0) {
|
|
454
397
|
//poll v3 is for single select polls
|
|
455
398
|
m.pollCreationMessageV3 = pollCreationMessage;
|
|
456
399
|
}
|
|
457
400
|
else {
|
|
458
|
-
// poll for multiple choice polls
|
|
401
|
+
// poll v3 for multiple choice polls
|
|
459
402
|
m.pollCreationMessage = pollCreationMessage;
|
|
460
403
|
}
|
|
461
404
|
}
|
|
462
405
|
}
|
|
463
|
-
else if (
|
|
464
|
-
m.albumMessage = {
|
|
465
|
-
expectedImageCount: message.album.expectedImageCount,
|
|
466
|
-
expectedVideoCount: message.album.expectedVideoCount
|
|
467
|
-
};
|
|
468
|
-
}
|
|
469
|
-
else if (hasNonNullishProperty(message, 'sharePhoneNumber')) {
|
|
406
|
+
else if ('sharePhoneNumber' in message) {
|
|
470
407
|
m.protocolMessage = {
|
|
471
|
-
type: proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
|
|
408
|
+
type: WAProto_1.proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
|
|
472
409
|
};
|
|
473
410
|
}
|
|
474
|
-
else if (
|
|
411
|
+
else if ('requestPhoneNumber' in message) {
|
|
475
412
|
m.requestPhoneNumberMessage = {};
|
|
476
413
|
}
|
|
477
|
-
else if (hasNonNullishProperty(message, 'limitSharing')) {
|
|
478
|
-
m.protocolMessage = {
|
|
479
|
-
type: proto.Message.ProtocolMessage.Type.LIMIT_SHARING,
|
|
480
|
-
limitSharing: {
|
|
481
|
-
sharingLimited: message.limitSharing === true,
|
|
482
|
-
trigger: 1,
|
|
483
|
-
limitSharingSettingTimestamp: Date.now(),
|
|
484
|
-
initiatedByMe: true
|
|
485
|
-
}
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
414
|
else {
|
|
489
|
-
m = await prepareWAMessageMedia(message, options);
|
|
415
|
+
m = await (0, exports.prepareWAMessageMedia)(message, options);
|
|
490
416
|
}
|
|
491
|
-
if (
|
|
417
|
+
if ('viewOnce' in message && !!message.viewOnce) {
|
|
492
418
|
m = { viewOnceMessage: { message: m } };
|
|
493
419
|
}
|
|
494
|
-
if (
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
if (key && 'contextInfo' in key) {
|
|
499
|
-
key.contextInfo = key.contextInfo || {};
|
|
500
|
-
if (message.mentions?.length) {
|
|
501
|
-
key.contextInfo.mentionedJid = message.mentions;
|
|
502
|
-
}
|
|
503
|
-
if (message.mentionAll) {
|
|
504
|
-
key.contextInfo.nonJidMentions = 1;
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
else if (key) {
|
|
508
|
-
key.contextInfo = {
|
|
509
|
-
mentionedJid: message.mentions,
|
|
510
|
-
nonJidMentions: message.mentionAll ? 1 : 0
|
|
511
|
-
};
|
|
512
|
-
}
|
|
420
|
+
if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
421
|
+
const [messageType] = Object.keys(m);
|
|
422
|
+
m[messageType].contextInfo = m[messageType] || {};
|
|
423
|
+
m[messageType].contextInfo.mentionedJid = message.mentions;
|
|
513
424
|
}
|
|
514
|
-
if (
|
|
425
|
+
if ('edit' in message) {
|
|
515
426
|
m = {
|
|
516
427
|
protocolMessage: {
|
|
517
428
|
key: message.edit,
|
|
518
429
|
editedMessage: m,
|
|
519
430
|
timestampMs: Date.now(),
|
|
520
|
-
type: WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
|
|
521
|
-
}
|
|
522
|
-
};
|
|
523
|
-
}
|
|
524
|
-
if (hasOptionalProperty(message, 'contextInfo') && !!message.contextInfo) {
|
|
525
|
-
const messageType = Object.keys(m)[0];
|
|
526
|
-
const key = m[messageType];
|
|
527
|
-
if ('contextInfo' in key && !!key.contextInfo) {
|
|
528
|
-
key.contextInfo = { ...key.contextInfo, ...message.contextInfo };
|
|
529
|
-
}
|
|
530
|
-
else if (key) {
|
|
531
|
-
key.contextInfo = message.contextInfo;
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
if (hasOptionalProperty(message, 'albumParentKey') && !!message.albumParentKey) {
|
|
535
|
-
m.messageContextInfo = {
|
|
536
|
-
...m.messageContextInfo,
|
|
537
|
-
messageAssociation: {
|
|
538
|
-
associationType: WAProto.MessageAssociation.AssociationType.MEDIA_ALBUM,
|
|
539
|
-
parentMessageKey: message.albumParentKey
|
|
431
|
+
type: Types_1.WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
|
|
540
432
|
}
|
|
541
433
|
};
|
|
542
434
|
}
|
|
543
|
-
if (
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
}
|
|
435
|
+
if ('contextInfo' in message && !!message.contextInfo) {
|
|
436
|
+
const [messageType] = Object.keys(m);
|
|
437
|
+
m[messageType] = m[messageType] || {};
|
|
438
|
+
m[messageType].contextInfo = message.contextInfo;
|
|
548
439
|
}
|
|
549
|
-
return WAProto.Message.
|
|
440
|
+
return Types_1.WAProto.Message.fromObject(m);
|
|
550
441
|
};
|
|
551
|
-
|
|
442
|
+
exports.generateWAMessageContent = generateWAMessageContent;
|
|
443
|
+
const generateWAMessageFromContent = (jid, message, options) => {
|
|
552
444
|
// set timestamp to now
|
|
553
445
|
// if not specified
|
|
554
446
|
if (!options.timestamp) {
|
|
555
447
|
options.timestamp = new Date();
|
|
556
448
|
}
|
|
557
|
-
const innerMessage = normalizeMessageContent(message);
|
|
558
|
-
const key = getContentType(innerMessage);
|
|
559
|
-
const timestamp = unixTimestampSeconds(options.timestamp);
|
|
449
|
+
const innerMessage = (0, exports.normalizeMessageContent)(message);
|
|
450
|
+
const key = (0, exports.getContentType)(innerMessage);
|
|
451
|
+
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
|
560
452
|
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);
|
|
453
|
+
if (quoted) {
|
|
454
|
+
const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
|
|
455
|
+
let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
|
|
456
|
+
const msgType = (0, exports.getContentType)(quotedMsg);
|
|
567
457
|
// strip any redundant properties
|
|
568
|
-
quotedMsg = proto.Message.
|
|
458
|
+
quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
|
|
569
459
|
const quotedContent = quotedMsg[msgType];
|
|
570
460
|
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
|
571
461
|
delete quotedContent.contextInfo;
|
|
572
462
|
}
|
|
573
|
-
const contextInfo =
|
|
574
|
-
contextInfo.participant = jidNormalizedUser(participant);
|
|
463
|
+
const contextInfo = innerMessage[key].contextInfo || {};
|
|
464
|
+
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
|
575
465
|
contextInfo.stanzaId = quoted.key.id;
|
|
576
466
|
contextInfo.quotedMessage = quotedMsg;
|
|
577
467
|
// if a participant is quoted, then it must be a group
|
|
@@ -579,63 +469,60 @@ export const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
579
469
|
if (jid !== quoted.key.remoteJid) {
|
|
580
470
|
contextInfo.remoteJid = quoted.key.remoteJid;
|
|
581
471
|
}
|
|
582
|
-
|
|
583
|
-
/* @ts-ignore */
|
|
584
|
-
innerMessage[key].contextInfo = contextInfo;
|
|
585
|
-
}
|
|
472
|
+
innerMessage[key].contextInfo = contextInfo;
|
|
586
473
|
}
|
|
587
474
|
if (
|
|
588
475
|
// if we want to send a disappearing message
|
|
589
|
-
!!options
|
|
476
|
+
!!(options === null || options === void 0 ? void 0 : options.ephemeralExpiration) &&
|
|
590
477
|
// and it's not a protocol message -- delete, toggle disappear message
|
|
591
478
|
key !== 'protocolMessage' &&
|
|
592
479
|
// already not converted to disappearing message
|
|
593
|
-
key !== 'ephemeralMessage'
|
|
594
|
-
// newsletters don't support ephemeral messages
|
|
595
|
-
!isJidNewsletter(jid)) {
|
|
596
|
-
/* @ts-ignore */
|
|
480
|
+
key !== 'ephemeralMessage') {
|
|
597
481
|
innerMessage[key].contextInfo = {
|
|
598
482
|
...(innerMessage[key].contextInfo || {}),
|
|
599
|
-
expiration: options.ephemeralExpiration || WA_DEFAULT_EPHEMERAL
|
|
483
|
+
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
|
|
600
484
|
//ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
|
|
601
485
|
};
|
|
602
486
|
}
|
|
603
|
-
message = WAProto.Message.
|
|
487
|
+
message = Types_1.WAProto.Message.fromObject(message);
|
|
604
488
|
const messageJSON = {
|
|
605
489
|
key: {
|
|
606
490
|
remoteJid: jid,
|
|
607
491
|
fromMe: true,
|
|
608
|
-
id: options
|
|
492
|
+
id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageID)(),
|
|
609
493
|
},
|
|
610
494
|
message: message,
|
|
611
495
|
messageTimestamp: timestamp,
|
|
612
496
|
messageStubParameters: [],
|
|
613
|
-
participant: isJidGroup(jid) || isJidStatusBroadcast(jid) ? userJid : undefined,
|
|
614
|
-
status: WAMessageStatus.PENDING
|
|
497
|
+
participant: (0, WABinary_1.isJidGroup)(jid) || (0, WABinary_1.isJidStatusBroadcast)(jid) ? userJid : undefined,
|
|
498
|
+
status: Types_1.WAMessageStatus.PENDING
|
|
615
499
|
};
|
|
616
|
-
return WAProto.WebMessageInfo.fromObject(messageJSON);
|
|
500
|
+
return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
|
|
617
501
|
};
|
|
618
|
-
|
|
502
|
+
exports.generateWAMessageFromContent = generateWAMessageFromContent;
|
|
503
|
+
const generateWAMessage = async (jid, content, options) => {
|
|
504
|
+
var _a;
|
|
619
505
|
// ensure msg ID is with every log
|
|
620
|
-
options.logger = options
|
|
621
|
-
|
|
622
|
-
return generateWAMessageFromContent(jid, await generateWAMessageContent(content, { ...options, jid }), options);
|
|
506
|
+
options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
|
|
507
|
+
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, options), options);
|
|
623
508
|
};
|
|
509
|
+
exports.generateWAMessage = generateWAMessage;
|
|
624
510
|
/** Get the key to access the true type of content */
|
|
625
|
-
|
|
511
|
+
const getContentType = (content) => {
|
|
626
512
|
if (content) {
|
|
627
513
|
const keys = Object.keys(content);
|
|
628
514
|
const key = keys.find(k => (k === 'conversation' || k.includes('Message')) && k !== 'senderKeyDistributionMessage');
|
|
629
515
|
return key;
|
|
630
516
|
}
|
|
631
517
|
};
|
|
518
|
+
exports.getContentType = getContentType;
|
|
632
519
|
/**
|
|
633
520
|
* Normalizes ephemeral, view once messages to regular message content
|
|
634
521
|
* Eg. image messages in ephemeral messages, in view once messages etc.
|
|
635
522
|
* @param content
|
|
636
523
|
* @returns
|
|
637
524
|
*/
|
|
638
|
-
|
|
525
|
+
const normalizeMessageContent = (content) => {
|
|
639
526
|
if (!content) {
|
|
640
527
|
return undefined;
|
|
641
528
|
}
|
|
@@ -649,22 +536,21 @@ export const normalizeMessageContent = (content) => {
|
|
|
649
536
|
}
|
|
650
537
|
return content;
|
|
651
538
|
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);
|
|
539
|
+
return ((message === null || message === void 0 ? void 0 : message.ephemeralMessage)
|
|
540
|
+
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessage)
|
|
541
|
+
|| (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
|
|
542
|
+
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
|
|
543
|
+
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
|
|
544
|
+
|| (message === null || message === void 0 ? void 0 : message.editedMessage));
|
|
661
545
|
}
|
|
662
546
|
};
|
|
547
|
+
exports.normalizeMessageContent = normalizeMessageContent;
|
|
663
548
|
/**
|
|
664
549
|
* Extract the true message content from a message
|
|
665
550
|
* Eg. extracts the inner message from a disappearing message/view once message
|
|
666
551
|
*/
|
|
667
|
-
|
|
552
|
+
const extractMessageContent = (content) => {
|
|
553
|
+
var _a, _b, _c, _d, _e, _f;
|
|
668
554
|
const extractFromTemplateMessage = (msg) => {
|
|
669
555
|
if (msg.imageMessage) {
|
|
670
556
|
return { imageMessage: msg.imageMessage };
|
|
@@ -680,39 +566,35 @@ export const extractMessageContent = (content) => {
|
|
|
680
566
|
}
|
|
681
567
|
else {
|
|
682
568
|
return {
|
|
683
|
-
conversation: 'contentText' in msg
|
|
569
|
+
conversation: 'contentText' in msg
|
|
570
|
+
? msg.contentText
|
|
571
|
+
: ('hydratedContentText' in msg ? msg.hydratedContentText : '')
|
|
684
572
|
};
|
|
685
573
|
}
|
|
686
574
|
};
|
|
687
|
-
content = normalizeMessageContent(content);
|
|
688
|
-
if (content
|
|
575
|
+
content = (0, exports.normalizeMessageContent)(content);
|
|
576
|
+
if (content === null || content === void 0 ? void 0 : content.buttonsMessage) {
|
|
689
577
|
return extractFromTemplateMessage(content.buttonsMessage);
|
|
690
578
|
}
|
|
691
|
-
if (content
|
|
692
|
-
return extractFromTemplateMessage(content
|
|
579
|
+
if ((_a = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _a === void 0 ? void 0 : _a.hydratedFourRowTemplate) {
|
|
580
|
+
return extractFromTemplateMessage((_b = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _b === void 0 ? void 0 : _b.hydratedFourRowTemplate);
|
|
693
581
|
}
|
|
694
|
-
if (content
|
|
695
|
-
return extractFromTemplateMessage(content
|
|
582
|
+
if ((_c = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _c === void 0 ? void 0 : _c.hydratedTemplate) {
|
|
583
|
+
return extractFromTemplateMessage((_d = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _d === void 0 ? void 0 : _d.hydratedTemplate);
|
|
696
584
|
}
|
|
697
|
-
if (content
|
|
698
|
-
return extractFromTemplateMessage(content
|
|
585
|
+
if ((_e = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _e === void 0 ? void 0 : _e.fourRowTemplate) {
|
|
586
|
+
return extractFromTemplateMessage((_f = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _f === void 0 ? void 0 : _f.fourRowTemplate);
|
|
699
587
|
}
|
|
700
588
|
return content;
|
|
701
589
|
};
|
|
590
|
+
exports.extractMessageContent = extractMessageContent;
|
|
702
591
|
/**
|
|
703
592
|
* Returns the device predicted by message ID
|
|
704
593
|
*/
|
|
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';
|
|
594
|
+
const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' : /^3E.{20}$/.test(id) ? 'web' : /^(.{21}|.{32})$/.test(id) ? 'android' : /^.{18}$/.test(id) ? 'desktop' : 'unknown';
|
|
595
|
+
exports.getDevice = getDevice;
|
|
714
596
|
/** Upserts a receipt in the message */
|
|
715
|
-
|
|
597
|
+
const updateMessageWithReceipt = (msg, receipt) => {
|
|
716
598
|
msg.userReceipt = msg.userReceipt || [];
|
|
717
599
|
const recp = msg.userReceipt.find(m => m.userJid === receipt.userJid);
|
|
718
600
|
if (recp) {
|
|
@@ -722,43 +604,41 @@ export const updateMessageWithReceipt = (msg, receipt) => {
|
|
|
722
604
|
msg.userReceipt.push(receipt);
|
|
723
605
|
}
|
|
724
606
|
};
|
|
607
|
+
exports.updateMessageWithReceipt = updateMessageWithReceipt;
|
|
725
608
|
/** Update the message with a new reaction */
|
|
726
|
-
|
|
727
|
-
const authorID = getKeyAuthor(reaction.key);
|
|
728
|
-
const reactions = (msg.reactions || [])
|
|
729
|
-
|
|
730
|
-
|
|
609
|
+
const updateMessageWithReaction = (msg, reaction) => {
|
|
610
|
+
const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
|
|
611
|
+
const reactions = (msg.reactions || [])
|
|
612
|
+
.filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
|
|
613
|
+
if (reaction.text) {
|
|
614
|
+
reactions.push(reaction);
|
|
615
|
+
}
|
|
731
616
|
msg.reactions = reactions;
|
|
732
617
|
};
|
|
618
|
+
exports.updateMessageWithReaction = updateMessageWithReaction;
|
|
733
619
|
/** Update the message with a new poll update */
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
const
|
|
737
|
-
|
|
620
|
+
const updateMessageWithPollUpdate = (msg, update) => {
|
|
621
|
+
var _a, _b;
|
|
622
|
+
const authorID = (0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey);
|
|
623
|
+
const reactions = (msg.pollUpdates || [])
|
|
624
|
+
.filter(r => (0, generics_1.getKeyAuthor)(r.pollUpdateMessageKey) !== authorID);
|
|
625
|
+
if ((_b = (_a = update.vote) === null || _a === void 0 ? void 0 : _a.selectedOptions) === null || _b === void 0 ? void 0 : _b.length) {
|
|
738
626
|
reactions.push(update);
|
|
739
627
|
}
|
|
740
628
|
msg.pollUpdates = reactions;
|
|
741
629
|
};
|
|
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
|
-
};
|
|
630
|
+
exports.updateMessageWithPollUpdate = updateMessageWithPollUpdate;
|
|
749
631
|
/**
|
|
750
632
|
* Aggregates all poll updates in a poll.
|
|
751
633
|
* @param msg the poll creation message
|
|
752
634
|
* @param meId your jid
|
|
753
635
|
* @returns A list of options & their voters
|
|
754
636
|
*/
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
message?.pollCreationMessageV3?.options ||
|
|
759
|
-
[];
|
|
637
|
+
function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
638
|
+
var _a, _b, _c;
|
|
639
|
+
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
640
|
const voteHashMap = opts.reduce((acc, opt) => {
|
|
761
|
-
const hash = sha256(Buffer.from(opt.optionName || '')).toString();
|
|
641
|
+
const hash = (0, crypto_2.sha256)(Buffer.from(opt.optionName || '')).toString();
|
|
762
642
|
acc[hash] = {
|
|
763
643
|
name: opt.optionName || '',
|
|
764
644
|
voters: []
|
|
@@ -780,36 +660,14 @@ export function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
|
780
660
|
};
|
|
781
661
|
data = voteHashMap[hash];
|
|
782
662
|
}
|
|
783
|
-
voteHashMap[hash].voters.push(getKeyAuthor(update.pollUpdateMessageKey, meId));
|
|
663
|
+
voteHashMap[hash].voters.push((0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey, meId));
|
|
784
664
|
}
|
|
785
665
|
}
|
|
786
666
|
return Object.values(voteHashMap);
|
|
787
667
|
}
|
|
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
|
-
}
|
|
668
|
+
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
811
669
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
|
812
|
-
|
|
670
|
+
const aggregateMessageKeysNotFromMe = (keys) => {
|
|
813
671
|
const keyMap = {};
|
|
814
672
|
for (const { remoteJid, id, participant, fromMe } of keys) {
|
|
815
673
|
if (!fromMe) {
|
|
@@ -826,34 +684,40 @@ export const aggregateMessageKeysNotFromMe = (keys) => {
|
|
|
826
684
|
}
|
|
827
685
|
return Object.values(keyMap);
|
|
828
686
|
};
|
|
687
|
+
exports.aggregateMessageKeysNotFromMe = aggregateMessageKeysNotFromMe;
|
|
829
688
|
const REUPLOAD_REQUIRED_STATUS = [410, 404];
|
|
830
689
|
/**
|
|
831
690
|
* Downloads the given message. Throws an error if it's not a media message
|
|
832
691
|
*/
|
|
833
|
-
|
|
834
|
-
const result = await downloadMsg()
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
692
|
+
const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
693
|
+
const result = await downloadMsg()
|
|
694
|
+
.catch(async (error) => {
|
|
695
|
+
var _a;
|
|
696
|
+
if (ctx) {
|
|
697
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
698
|
+
// check if the message requires a reupload
|
|
699
|
+
if (REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
|
|
700
|
+
ctx.logger.info({ key: message.key }, 'sending reupload media request...');
|
|
701
|
+
// request reupload
|
|
702
|
+
message = await ctx.reuploadRequest(message);
|
|
703
|
+
const result = await downloadMsg();
|
|
704
|
+
return result;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
843
707
|
}
|
|
844
708
|
throw error;
|
|
845
709
|
});
|
|
846
710
|
return result;
|
|
847
711
|
async function downloadMsg() {
|
|
848
|
-
const mContent = extractMessageContent(message.message);
|
|
712
|
+
const mContent = (0, exports.extractMessageContent)(message.message);
|
|
849
713
|
if (!mContent) {
|
|
850
|
-
throw new Boom('No message present', { statusCode: 400, data: message });
|
|
714
|
+
throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
|
|
851
715
|
}
|
|
852
|
-
const contentType = getContentType(mContent);
|
|
853
|
-
let mediaType = contentType
|
|
716
|
+
const contentType = (0, exports.getContentType)(mContent);
|
|
717
|
+
let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
|
|
854
718
|
const media = mContent[contentType];
|
|
855
719
|
if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
|
|
856
|
-
throw new Boom(`"${contentType}" message is not a media message`);
|
|
720
|
+
throw new boom_1.Boom(`"${contentType}" message is not a media message`);
|
|
857
721
|
}
|
|
858
722
|
let download;
|
|
859
723
|
if ('thumbnailDirectPath' in media && !('url' in media)) {
|
|
@@ -866,7 +730,7 @@ export const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
|
866
730
|
else {
|
|
867
731
|
download = media;
|
|
868
732
|
}
|
|
869
|
-
const stream = await downloadContentFromMessage(download, mediaType, options);
|
|
733
|
+
const stream = await (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
|
|
870
734
|
if (type === 'buffer') {
|
|
871
735
|
const bufferArray = [];
|
|
872
736
|
for await (const chunk of stream) {
|
|
@@ -877,17 +741,18 @@ export const downloadMediaMessage = async (message, type, options, ctx) => {
|
|
|
877
741
|
return stream;
|
|
878
742
|
}
|
|
879
743
|
};
|
|
744
|
+
exports.downloadMediaMessage = downloadMediaMessage;
|
|
880
745
|
/** 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
|
|
746
|
+
const assertMediaContent = (content) => {
|
|
747
|
+
content = (0, exports.extractMessageContent)(content);
|
|
748
|
+
const mediaContent = (content === null || content === void 0 ? void 0 : content.documentMessage)
|
|
749
|
+
|| (content === null || content === void 0 ? void 0 : content.imageMessage)
|
|
750
|
+
|| (content === null || content === void 0 ? void 0 : content.videoMessage)
|
|
751
|
+
|| (content === null || content === void 0 ? void 0 : content.audioMessage)
|
|
752
|
+
|| (content === null || content === void 0 ? void 0 : content.stickerMessage);
|
|
888
753
|
if (!mediaContent) {
|
|
889
|
-
throw new Boom('given message is not a media message', { statusCode: 400, data: content });
|
|
754
|
+
throw new boom_1.Boom('given message is not a media message', { statusCode: 400, data: content });
|
|
890
755
|
}
|
|
891
756
|
return mediaContent;
|
|
892
757
|
};
|
|
893
|
-
|
|
758
|
+
exports.assertMediaContent = assertMediaContent;
|