@fer2809fl/baileys 1.4.7 → 7.0.0-rc13
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 +21 -674
- package/README.md +579 -309
- package/WAProto/GenerateStatics.sh +3 -4
- package/WAProto/WAProto.proto +1215 -511
- package/WAProto/fix-imports.js +85 -0
- package/WAProto/index.d.ts +4347 -45387
- package/WAProto/index.js +65475 -137445
- package/engine-requirements.js +10 -0
- package/lib/Defaults/index.d.ts +34 -18
- package/lib/Defaults/index.d.ts.map +1 -0
- package/lib/Defaults/index.js +95 -67
- package/lib/Defaults/index.js.map +1 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +1 -0
- package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
- package/lib/Signal/Group/ciphertext-message.js +2 -5
- package/lib/Signal/Group/ciphertext-message.js.map +1 -0
- package/lib/Signal/Group/group-session-builder.d.ts +4 -3
- package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
- package/lib/Signal/Group/group-session-builder.js +7 -41
- package/lib/Signal/Group/group-session-builder.js.map +1 -0
- package/lib/Signal/Group/group_cipher.d.ts +4 -4
- package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
- package/lib/Signal/Group/group_cipher.js +37 -51
- package/lib/Signal/Group/group_cipher.js.map +1 -0
- package/lib/Signal/Group/index.d.ts +12 -11
- package/lib/Signal/Group/index.d.ts.map +1 -0
- package/lib/Signal/Group/index.js +12 -57
- package/lib/Signal/Group/index.js.map +1 -0
- package/lib/Signal/Group/keyhelper.d.ts +2 -1
- package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
- package/lib/Signal/Group/keyhelper.js +7 -44
- package/lib/Signal/Group/keyhelper.js.map +1 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +3 -2
- package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-chain-key.js +7 -15
- package/lib/Signal/Group/sender-chain-key.js.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +2 -1
- package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +8 -11
- package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-message.d.ts +2 -1
- package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-message.js +9 -12
- package/lib/Signal/Group/sender-key-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-name.d.ts +1 -0
- package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-name.js +2 -5
- package/lib/Signal/Group/sender-key-name.js.map +1 -0
- package/lib/Signal/Group/sender-key-record.d.ts +3 -2
- package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-record.js +9 -21
- package/lib/Signal/Group/sender-key-record.js.map +1 -0
- package/lib/Signal/Group/sender-key-state.d.ts +7 -6
- package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-state.js +27 -42
- package/lib/Signal/Group/sender-key-state.js.map +1 -0
- package/lib/Signal/Group/sender-message-key.d.ts +1 -0
- package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-message-key.js +4 -7
- package/lib/Signal/Group/sender-message-key.js.map +1 -0
- package/lib/Signal/libsignal.d.ts +5 -3
- package/lib/Signal/libsignal.d.ts.map +1 -0
- package/lib/Signal/libsignal.js +347 -90
- package/lib/Signal/libsignal.js.map +1 -0
- package/lib/Signal/lid-mapping.d.ts +23 -0
- package/lib/Signal/lid-mapping.d.ts.map +1 -0
- package/lib/Signal/lid-mapping.js +277 -0
- package/lib/Signal/lid-mapping.js.map +1 -0
- package/lib/Socket/Client/index.d.ts +3 -2
- package/lib/Socket/Client/index.d.ts.map +1 -0
- package/lib/Socket/Client/index.js +3 -18
- package/lib/Socket/Client/index.js.map +1 -0
- package/lib/Socket/Client/types.d.ts +4 -4
- package/lib/Socket/Client/types.d.ts.map +1 -0
- package/lib/Socket/Client/types.js +4 -6
- package/lib/Socket/Client/types.js.map +1 -0
- package/lib/Socket/Client/websocket.d.ts +3 -3
- package/lib/Socket/Client/websocket.d.ts.map +1 -0
- package/lib/Socket/Client/websocket.js +21 -78
- package/lib/Socket/Client/websocket.js.map +1 -0
- package/lib/Socket/business.d.ts +205 -93
- package/lib/Socket/business.d.ts.map +1 -0
- package/lib/Socket/business.js +162 -43
- package/lib/Socket/business.js.map +1 -0
- package/lib/Socket/chats.d.ts +77 -28
- package/lib/Socket/chats.d.ts.map +1 -0
- package/lib/Socket/chats.js +639 -248
- package/lib/Socket/chats.js.map +1 -0
- package/lib/Socket/communities.d.ts +340 -0
- package/lib/Socket/communities.d.ts.map +1 -0
- package/lib/Socket/communities.js +434 -0
- package/lib/Socket/communities.js.map +1 -0
- package/lib/Socket/groups.d.ts +93 -46
- package/lib/Socket/groups.d.ts.map +1 -0
- package/lib/Socket/groups.js +260 -102
- package/lib/Socket/groups.js.map +1 -0
- package/lib/Socket/index.d.ts +253 -98
- package/lib/Socket/index.d.ts.map +1 -0
- package/lib/Socket/index.js +11 -9
- package/lib/Socket/index.js.map +1 -0
- package/lib/Socket/messages-recv.d.ts +192 -83
- package/lib/Socket/messages-recv.d.ts.map +1 -0
- package/lib/Socket/messages-recv.js +1314 -559
- package/lib/Socket/messages-recv.js.map +1 -0
- package/lib/Socket/messages-send.d.ts +190 -75
- package/lib/Socket/messages-send.d.ts.map +1 -0
- package/lib/Socket/messages-send.js +937 -581
- package/lib/Socket/messages-send.js.map +1 -0
- package/lib/Socket/mex.d.ts +4 -0
- package/lib/Socket/mex.d.ts.map +1 -0
- package/lib/Socket/mex.js +62 -0
- package/lib/Socket/mex.js.map +1 -0
- package/lib/Socket/newsletter.d.ts +129 -73
- package/lib/Socket/newsletter.d.ts.map +1 -0
- package/lib/Socket/newsletter.js +373 -222
- package/lib/Socket/newsletter.js.map +1 -0
- package/lib/Socket/smgss.d.ts +119 -0
- package/lib/Socket/smgss.d.ts.map +1 -0
- package/lib/Socket/smgss.js +453 -0
- package/lib/Socket/smgss.js.map +1 -0
- package/lib/Socket/socket.d.ts +59 -270
- package/lib/Socket/socket.d.ts.map +1 -0
- package/lib/Socket/socket.js +972 -0
- package/lib/Socket/socket.js.map +1 -0
- package/lib/Store/index.d.ts +4 -2
- package/lib/Store/index.d.ts.map +1 -0
- package/lib/Store/index.js +4 -8
- package/lib/Store/index.js.map +1 -0
- package/lib/Store/make-in-memory-store.d.ts +74 -60
- package/lib/Store/make-in-memory-store.d.ts.map +1 -0
- package/lib/Store/make-in-memory-store.js +130 -119
- package/lib/Store/make-in-memory-store.js.map +1 -0
- package/lib/Store/make-ordered-dictionary.d.ts +4 -3
- package/lib/Store/make-ordered-dictionary.d.ts.map +1 -0
- package/lib/Store/make-ordered-dictionary.js +5 -6
- package/lib/Store/make-ordered-dictionary.js.map +1 -0
- package/lib/Store/object-repository.d.ts +6 -3
- package/lib/Store/object-repository.d.ts.map +1 -0
- package/lib/Store/object-repository.js +2 -5
- package/lib/Store/object-repository.js.map +1 -0
- package/lib/Types/Auth.d.ts +19 -5
- package/lib/Types/Auth.d.ts.map +1 -0
- package/lib/Types/Auth.js +2 -2
- package/lib/Types/Auth.js.map +1 -0
- package/lib/Types/Bussines.d.ts +25 -0
- package/lib/Types/Bussines.d.ts.map +1 -0
- package/lib/Types/Bussines.js +2 -0
- package/lib/Types/Bussines.js.map +1 -0
- package/lib/Types/Call.d.ts +3 -1
- package/lib/Types/Call.d.ts.map +1 -0
- package/lib/Types/Call.js +2 -2
- package/lib/Types/Call.js.map +1 -0
- package/lib/Types/Chat.d.ts +24 -9
- package/lib/Types/Chat.d.ts.map +1 -0
- package/lib/Types/Chat.js +8 -4
- package/lib/Types/Chat.js.map +1 -0
- package/lib/Types/Contact.d.ts +7 -4
- package/lib/Types/Contact.d.ts.map +1 -0
- package/lib/Types/Contact.js +2 -2
- package/lib/Types/Contact.js.map +1 -0
- package/lib/Types/Events.d.ts +90 -33
- package/lib/Types/Events.d.ts.map +1 -0
- package/lib/Types/Events.js +2 -2
- package/lib/Types/Events.js.map +1 -0
- package/lib/Types/GroupMetadata.d.ts +16 -9
- package/lib/Types/GroupMetadata.d.ts.map +1 -0
- package/lib/Types/GroupMetadata.js +2 -2
- package/lib/Types/GroupMetadata.js.map +1 -0
- package/lib/Types/Label.d.ts +12 -0
- package/lib/Types/Label.d.ts.map +1 -0
- package/lib/Types/Label.js +3 -5
- package/lib/Types/Label.js.map +1 -0
- package/lib/Types/LabelAssociation.d.ts +1 -0
- package/lib/Types/LabelAssociation.d.ts.map +1 -0
- package/lib/Types/LabelAssociation.js +3 -5
- package/lib/Types/LabelAssociation.js.map +1 -0
- package/lib/Types/Message.d.ts +176 -148
- package/lib/Types/Message.d.ts.map +1 -0
- package/lib/Types/Message.js +15 -7
- package/lib/Types/Message.js.map +1 -0
- package/lib/Types/Mex.d.ts +154 -0
- package/lib/Types/Mex.d.ts.map +1 -0
- package/lib/Types/Mex.js +39 -0
- package/lib/Types/Mex.js.map +1 -0
- package/lib/Types/Product.d.ts +2 -1
- package/lib/Types/Product.d.ts.map +1 -0
- package/lib/Types/Product.js +2 -2
- package/lib/Types/Product.js.map +1 -0
- package/lib/Types/Signal.d.ts +32 -2
- package/lib/Types/Signal.d.ts.map +1 -0
- package/lib/Types/Signal.js +2 -2
- package/lib/Types/Signal.js.map +1 -0
- package/lib/Types/Socket.d.ts +46 -20
- package/lib/Types/Socket.d.ts.map +1 -0
- package/lib/Types/Socket.js +3 -2
- package/lib/Types/Socket.js.map +1 -0
- package/lib/Types/State.d.ts +79 -2
- package/lib/Types/State.d.ts.map +1 -0
- package/lib/Types/State.js +56 -2
- package/lib/Types/State.js.map +1 -0
- package/lib/Types/USync.d.ts +3 -2
- package/lib/Types/USync.d.ts.map +1 -0
- package/lib/Types/USync.js +2 -2
- package/lib/Types/USync.js.map +1 -0
- package/lib/Types/index.d.ts +16 -14
- package/lib/Types/index.d.ts.map +1 -0
- package/lib/Types/index.js +15 -31
- package/lib/Types/index.js.map +1 -0
- package/lib/Utils/auth-utils.d.ts +10 -4
- package/lib/Utils/auth-utils.d.ts.map +1 -0
- package/lib/Utils/auth-utils.js +239 -136
- package/lib/Utils/auth-utils.js.map +1 -0
- package/lib/Utils/browser-utils.d.ts +4 -0
- package/lib/Utils/browser-utils.d.ts.map +1 -0
- package/lib/Utils/browser-utils.js +29 -0
- package/lib/Utils/browser-utils.js.map +1 -0
- package/lib/Utils/business.d.ts +3 -2
- package/lib/Utils/business.d.ts.map +1 -0
- package/lib/Utils/business.js +66 -69
- package/lib/Utils/business.js.map +1 -0
- package/lib/Utils/button-handler.d.ts +28 -0
- package/lib/Utils/button-handler.d.ts.map +1 -0
- package/lib/Utils/button-handler.js +140 -0
- package/lib/Utils/button-handler.js.map +1 -0
- package/lib/Utils/chat-utils.d.ts +42 -12
- package/lib/Utils/chat-utils.d.ts.map +1 -0
- package/lib/Utils/chat-utils.js +380 -238
- package/lib/Utils/chat-utils.js.map +1 -0
- package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
- package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
- package/lib/Utils/companion-reg-client-utils.js +35 -0
- package/lib/Utils/companion-reg-client-utils.js.map +1 -0
- package/lib/Utils/crypto.d.ts +11 -14
- package/lib/Utils/crypto.d.ts.map +1 -0
- package/lib/Utils/crypto.js +41 -116
- package/lib/Utils/crypto.js.map +1 -0
- package/lib/Utils/decode-wa-message.d.ts +36 -5
- package/lib/Utils/decode-wa-message.d.ts.map +1 -0
- package/lib/Utils/decode-wa-message.js +173 -63
- package/lib/Utils/decode-wa-message.js.map +1 -0
- package/lib/Utils/event-buffer.d.ts +8 -7
- package/lib/Utils/event-buffer.d.ts.map +1 -0
- package/lib/Utils/event-buffer.js +174 -70
- package/lib/Utils/event-buffer.js.map +1 -0
- package/lib/Utils/generics.d.ts +20 -17
- package/lib/Utils/generics.d.ts.map +1 -0
- package/lib/Utils/generics.js +159 -207
- package/lib/Utils/generics.js.map +1 -0
- package/lib/Utils/history.d.ts +16 -11
- package/lib/Utils/history.d.ts.map +1 -0
- package/lib/Utils/history.js +93 -53
- package/lib/Utils/history.js.map +1 -0
- package/lib/Utils/identity-change-handler.d.ts +44 -0
- package/lib/Utils/identity-change-handler.d.ts.map +1 -0
- package/lib/Utils/identity-change-handler.js +50 -0
- package/lib/Utils/identity-change-handler.js.map +1 -0
- package/lib/Utils/index.d.ts +30 -17
- package/lib/Utils/index.d.ts.map +1 -0
- package/lib/Utils/index.js +30 -33
- package/lib/Utils/index.js.map +1 -0
- package/lib/Utils/interactive.d.ts +60 -0
- package/lib/Utils/interactive.d.ts.map +1 -0
- package/lib/Utils/interactive.js +224 -0
- package/lib/Utils/interactive.js.map +1 -0
- package/lib/Utils/link-preview.d.ts +4 -4
- package/lib/Utils/link-preview.d.ts.map +1 -0
- package/lib/Utils/link-preview.js +17 -58
- package/lib/Utils/link-preview.js.map +1 -0
- package/lib/Utils/logger.d.ts +8 -6
- package/lib/Utils/logger.d.ts.map +1 -0
- package/lib/Utils/logger.js +3 -10
- package/lib/Utils/logger.js.map +1 -0
- package/lib/Utils/lt-hash.d.ts +8 -12
- package/lib/Utils/lt-hash.d.ts.map +1 -0
- package/lib/Utils/lt-hash.js +3 -46
- package/lib/Utils/lt-hash.js.map +1 -0
- package/lib/Utils/make-mutex.d.ts +2 -0
- package/lib/Utils/make-mutex.d.ts.map +1 -0
- package/lib/Utils/make-mutex.js +24 -34
- package/lib/Utils/make-mutex.js.map +1 -0
- package/lib/Utils/message-composer.d.ts +93 -0
- package/lib/Utils/message-composer.d.ts.map +1 -0
- package/lib/Utils/message-composer.js +311 -0
- package/lib/Utils/message-composer.js.map +1 -0
- package/lib/Utils/message-retry-manager.d.ts +115 -0
- package/lib/Utils/message-retry-manager.d.ts.map +1 -0
- package/lib/Utils/message-retry-manager.js +265 -0
- package/lib/Utils/message-retry-manager.js.map +1 -0
- package/lib/Utils/messages-media.d.ts +82 -40
- package/lib/Utils/messages-media.d.ts.map +1 -0
- package/lib/Utils/messages-media.js +674 -677
- package/lib/Utils/messages-media.js.map +1 -0
- package/lib/Utils/messages-newsletter.d.ts +74 -0
- package/lib/Utils/messages-newsletter.d.ts.map +1 -0
- package/lib/Utils/messages-newsletter.js +128 -0
- package/lib/Utils/messages-newsletter.js.map +1 -0
- package/lib/Utils/messages.d.ts +38 -14
- package/lib/Utils/messages.d.ts.map +1 -0
- package/lib/Utils/messages.js +835 -602
- package/lib/Utils/messages.js.map +1 -0
- package/lib/Utils/noise-handler.d.ts +9 -8
- package/lib/Utils/noise-handler.d.ts.map +1 -0
- package/lib/Utils/noise-handler.js +149 -98
- package/lib/Utils/noise-handler.js.map +1 -0
- package/lib/Utils/offline-node-processor.d.ts +17 -0
- package/lib/Utils/offline-node-processor.d.ts.map +1 -0
- package/lib/Utils/offline-node-processor.js +40 -0
- package/lib/Utils/offline-node-processor.js.map +1 -0
- package/lib/Utils/pre-key-manager.d.ts +28 -0
- package/lib/Utils/pre-key-manager.d.ts.map +1 -0
- package/lib/Utils/pre-key-manager.js +106 -0
- package/lib/Utils/pre-key-manager.js.map +1 -0
- package/lib/Utils/process-message.d.ts +30 -12
- package/lib/Utils/process-message.d.ts.map +1 -0
- package/lib/Utils/process-message.js +420 -194
- package/lib/Utils/process-message.js.map +1 -0
- package/lib/Utils/reporting-utils.d.ts +11 -0
- package/lib/Utils/reporting-utils.d.ts.map +1 -0
- package/lib/Utils/reporting-utils.js +258 -0
- package/lib/Utils/reporting-utils.js.map +1 -0
- package/lib/Utils/shortcake-crypto.d.ts +36 -0
- package/lib/Utils/shortcake-crypto.d.ts.map +1 -0
- package/lib/Utils/shortcake-crypto.js +71 -0
- package/lib/Utils/shortcake-crypto.js.map +1 -0
- package/lib/Utils/shortcake.d.ts +36 -0
- package/lib/Utils/shortcake.d.ts.map +1 -0
- package/lib/Utils/shortcake.js +162 -0
- package/lib/Utils/shortcake.js.map +1 -0
- package/lib/Utils/signal.d.ts +20 -6
- package/lib/Utils/signal.d.ts.map +1 -0
- package/lib/Utils/signal.js +112 -64
- package/lib/Utils/signal.js.map +1 -0
- package/lib/Utils/stanza-ack.d.ts +11 -0
- package/lib/Utils/stanza-ack.d.ts.map +1 -0
- package/lib/Utils/stanza-ack.js +38 -0
- package/lib/Utils/stanza-ack.js.map +1 -0
- package/lib/Utils/sync-action-utils.d.ts +19 -0
- package/lib/Utils/sync-action-utils.d.ts.map +1 -0
- package/lib/Utils/sync-action-utils.js +49 -0
- package/lib/Utils/sync-action-utils.js.map +1 -0
- package/lib/Utils/tc-token-utils.d.ts +37 -0
- package/lib/Utils/tc-token-utils.d.ts.map +1 -0
- package/lib/Utils/tc-token-utils.js +164 -0
- package/lib/Utils/tc-token-utils.js.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +2 -1
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +23 -27
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
- package/lib/Utils/use-single-file-auth-state.d.ts +6 -0
- package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-single-file-auth-state.js +111 -0
- package/lib/Utils/use-single-file-auth-state.js.map +1 -0
- package/lib/Utils/use-sqlite-auth-state.d.ts +14 -0
- package/lib/Utils/use-sqlite-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-sqlite-auth-state.js +107 -0
- package/lib/Utils/use-sqlite-auth-state.js.map +1 -0
- package/lib/Utils/validate-connection.d.ts +5 -3
- package/lib/Utils/validate-connection.d.ts.map +1 -0
- package/lib/Utils/validate-connection.js +82 -101
- package/lib/Utils/validate-connection.js.map +1 -0
- package/lib/WABinary/constants.d.ts +1 -0
- package/lib/WABinary/constants.d.ts.map +1 -0
- package/lib/WABinary/constants.js +9 -11
- package/lib/WABinary/constants.js.map +1 -0
- package/lib/WABinary/decode.d.ts +2 -1
- package/lib/WABinary/decode.d.ts.map +1 -0
- package/lib/WABinary/decode.js +49 -52
- package/lib/WABinary/decode.js.map +1 -0
- package/lib/WABinary/encode.d.ts +2 -1
- package/lib/WABinary/encode.d.ts.map +1 -0
- package/lib/WABinary/encode.js +19 -49
- package/lib/WABinary/encode.js.map +1 -0
- package/lib/WABinary/generic-utils.d.ts +5 -4
- package/lib/WABinary/generic-utils.d.ts.map +1 -0
- package/lib/WABinary/generic-utils.js +46 -43
- package/lib/WABinary/generic-utils.js.map +1 -0
- package/lib/WABinary/index.d.ts +6 -5
- package/lib/WABinary/index.d.ts.map +1 -0
- package/lib/WABinary/index.js +6 -21
- package/lib/WABinary/index.js.map +1 -0
- package/lib/WABinary/jid-utils.d.ts +32 -10
- package/lib/WABinary/jid-utils.d.ts.map +1 -0
- package/lib/WABinary/jid-utils.js +103 -59
- package/lib/WABinary/jid-utils.js.map +1 -0
- package/lib/WABinary/types.d.ts +2 -1
- package/lib/WABinary/types.d.ts.map +1 -0
- package/lib/WABinary/types.js +2 -2
- package/lib/WABinary/types.js.map +1 -0
- package/lib/WAM/BinaryInfo.d.ts +2 -1
- package/lib/WAM/BinaryInfo.d.ts.map +1 -0
- package/lib/WAM/BinaryInfo.js +2 -5
- package/lib/WAM/BinaryInfo.js.map +1 -0
- package/lib/WAM/constants.d.ts +5 -3
- package/lib/WAM/constants.d.ts.map +1 -0
- package/lib/WAM/constants.js +19071 -11568
- package/lib/WAM/constants.js.map +1 -0
- package/lib/WAM/encode.d.ts +2 -1
- package/lib/WAM/encode.d.ts.map +1 -0
- package/lib/WAM/encode.js +17 -22
- package/lib/WAM/encode.js.map +1 -0
- package/lib/WAM/index.d.ts +4 -3
- package/lib/WAM/index.d.ts.map +1 -0
- package/lib/WAM/index.js +4 -19
- package/lib/WAM/index.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +4 -3
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +33 -13
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +3 -2
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +11 -14
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +3 -2
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +8 -11
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +3 -2
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +9 -13
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +4 -3
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +20 -22
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +5 -3
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +13 -8
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/index.d.ts +6 -4
- package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/index.js +6 -20
- package/lib/WAUSync/Protocols/index.js.map +1 -0
- package/lib/WAUSync/USyncQuery.d.ts +6 -4
- package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
- package/lib/WAUSync/USyncQuery.js +44 -35
- package/lib/WAUSync/USyncQuery.js.map +1 -0
- package/lib/WAUSync/USyncUser.d.ts +10 -5
- package/lib/WAUSync/USyncUser.d.ts.map +1 -0
- package/lib/WAUSync/USyncUser.js +10 -5
- package/lib/WAUSync/USyncUser.js.map +1 -0
- package/lib/WAUSync/index.d.ts +4 -3
- package/lib/WAUSync/index.d.ts.map +1 -0
- package/lib/WAUSync/index.js +4 -19
- package/lib/WAUSync/index.js.map +1 -0
- package/lib/index.d.ts +12 -15
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +15 -48
- package/lib/index.js.map +1 -0
- package/package.json +45 -65
- package/WAProto/index.ts.ts +0 -53473
- package/WAProto/n +0 -1
- package/lib/Defaults/baileys-version.json +0 -3
- package/lib/Defaults/n +0 -1
- package/lib/Signal/Group/queue-job.d.ts +0 -1
- package/lib/Signal/Group/queue-job.js +0 -57
- package/lib/Signal/n +0 -1
- package/lib/Socket/Client/n +0 -1
- package/lib/Socket/n +0 -1
- package/lib/Socket/setup.js +0 -480
- package/lib/Socket/setup.ts +0 -622
- package/lib/Socket/usync.d.ts +0 -36
- package/lib/Socket/usync.js +0 -70
- package/lib/Store/n +0 -1
- package/lib/Types/Newsletter.d.ts +0 -79
- package/lib/Types/Newsletter.js +0 -18
- package/lib/Types/n +0 -1
- package/lib/Utils/baileys-event-stream.d.ts +0 -16
- package/lib/Utils/baileys-event-stream.js +0 -63
- package/lib/Utils/n +0 -1
- package/lib/WABinary/jid-utils.js.bak +0 -83
- package/lib/WABinary/n +0 -1
- package/lib/WAM/n +0 -1
- package/lib/WAUSync/Protocols/n +0 -1
- package/lib/WAUSync/n +0 -1
- package/lib/n +0 -1
|
@@ -1,47 +1,87 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const generics_1 = require("./generics");
|
|
11
|
-
const history_1 = require("./history");
|
|
1
|
+
import { Boom } from '@hapi/boom';
|
|
2
|
+
import { proto } from '../../WAProto/index.js';
|
|
3
|
+
import { WAMessageStubType } from '../Types/index.js';
|
|
4
|
+
import { getContentType, normalizeMessageContent } from '../Utils/messages.js';
|
|
5
|
+
import { areJidsSameUser, isHostedLidUser, isHostedPnUser, isJidBroadcast, isJidStatusBroadcast, isLidUser, jidDecode, jidEncode, jidNormalizedUser } from '../WABinary/index.js';
|
|
6
|
+
import { aesDecryptGCM, hmacSign } from './crypto.js';
|
|
7
|
+
import { getKeyAuthor, toNumber } from './generics.js';
|
|
8
|
+
import { downloadAndProcessHistorySyncNotification } from './history.js';
|
|
9
|
+
import { buildMergedTcTokenIndexWrite, resolveTcTokenJid } from './tc-token-utils.js';
|
|
12
10
|
const REAL_MSG_STUB_TYPES = new Set([
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
WAMessageStubType.CALL_MISSED_GROUP_VIDEO,
|
|
12
|
+
WAMessageStubType.CALL_MISSED_GROUP_VOICE,
|
|
13
|
+
WAMessageStubType.CALL_MISSED_VIDEO,
|
|
14
|
+
WAMessageStubType.CALL_MISSED_VOICE
|
|
17
15
|
]);
|
|
18
|
-
const REAL_MSG_REQ_ME_STUB_TYPES = new Set([
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
const REAL_MSG_REQ_ME_STUB_TYPES = new Set([WAMessageStubType.GROUP_PARTICIPANT_ADD]);
|
|
17
|
+
async function storeTcTokensFromHistorySync(chats, signalRepository, keyStore, logger) {
|
|
18
|
+
const getLIDForPN = signalRepository.lidMapping.getLIDForPN.bind(signalRepository.lidMapping);
|
|
19
|
+
const candidates = [];
|
|
20
|
+
for (const chat of chats) {
|
|
21
|
+
const ts = chat.tcTokenTimestamp ? toNumber(chat.tcTokenTimestamp) : 0;
|
|
22
|
+
if (chat.tcToken?.length && ts > 0) {
|
|
23
|
+
const jid = jidNormalizedUser(chat.id);
|
|
24
|
+
const storageJid = await resolveTcTokenJid(jid, getLIDForPN);
|
|
25
|
+
candidates.push({
|
|
26
|
+
storageJid,
|
|
27
|
+
token: Buffer.from(chat.tcToken),
|
|
28
|
+
ts,
|
|
29
|
+
senderTs: chat.tcTokenSenderTimestamp ? toNumber(chat.tcTokenSenderTimestamp) : undefined
|
|
30
|
+
});
|
|
31
|
+
}
|
|
27
32
|
}
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
if (!candidates.length) {
|
|
34
|
+
return;
|
|
30
35
|
}
|
|
31
|
-
|
|
36
|
+
const jids = candidates.map(c => c.storageJid);
|
|
37
|
+
const existing = await keyStore.get('tctoken', jids);
|
|
38
|
+
const entries = {};
|
|
39
|
+
for (const c of candidates) {
|
|
40
|
+
const existingEntry = existing[c.storageJid];
|
|
41
|
+
const existingTs = existingEntry?.timestamp ? Number(existingEntry.timestamp) : 0;
|
|
42
|
+
if (existingTs > 0 && existingTs >= c.ts) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
entries[c.storageJid] = {
|
|
46
|
+
...existingEntry,
|
|
47
|
+
token: c.token,
|
|
48
|
+
timestamp: String(c.ts),
|
|
49
|
+
...(c.senderTs !== undefined ? { senderTimestamp: c.senderTs } : {})
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (Object.keys(entries).length) {
|
|
53
|
+
logger?.debug({ count: Object.keys(entries).length }, 'storing tctokens from history sync');
|
|
32
54
|
try {
|
|
33
|
-
|
|
55
|
+
// Include updated __index so cross-session pruning picks these JIDs up.
|
|
56
|
+
const indexWrite = await buildMergedTcTokenIndexWrite(keyStore, Object.keys(entries));
|
|
57
|
+
await keyStore.set({ tctoken: { ...entries, ...indexWrite } });
|
|
34
58
|
}
|
|
35
|
-
catch (
|
|
36
|
-
|
|
59
|
+
catch (err) {
|
|
60
|
+
logger?.warn({ err }, 'failed to store tctokens from history sync');
|
|
37
61
|
}
|
|
38
62
|
}
|
|
39
|
-
|
|
63
|
+
}
|
|
64
|
+
/** Cleans a received message to further processing */
|
|
65
|
+
export const cleanMessage = (message, meId, meLid) => {
|
|
66
|
+
// ensure remoteJid and participant doesn't have device or agent in it
|
|
67
|
+
if (isHostedPnUser(message.key.remoteJid) || isHostedLidUser(message.key.remoteJid)) {
|
|
68
|
+
message.key.remoteJid = jidEncode(jidDecode(message.key?.remoteJid)?.user, isHostedPnUser(message.key.remoteJid) ? 's.whatsapp.net' : 'lid');
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
message.key.remoteJid = jidNormalizedUser(message.key.remoteJid);
|
|
72
|
+
}
|
|
73
|
+
if (isHostedPnUser(message.key.participant) || isHostedLidUser(message.key.participant)) {
|
|
74
|
+
message.key.participant = jidEncode(jidDecode(message.key.participant)?.user, isHostedPnUser(message.key.participant) ? 's.whatsapp.net' : 'lid');
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
message.key.participant = jidNormalizedUser(message.key.participant);
|
|
78
|
+
}
|
|
79
|
+
const content = normalizeMessageContent(message.message);
|
|
40
80
|
// if the message has a reaction, ensure fromMe & remoteJid are from our perspective
|
|
41
|
-
if (content
|
|
81
|
+
if (content?.reactionMessage) {
|
|
42
82
|
normaliseKey(content.reactionMessage.key);
|
|
43
83
|
}
|
|
44
|
-
if (content
|
|
84
|
+
if (content?.pollUpdateMessage) {
|
|
45
85
|
normaliseKey(content.pollUpdateMessage.pollCreationMessageKey);
|
|
46
86
|
}
|
|
47
87
|
function normaliseKey(msgKey) {
|
|
@@ -51,54 +91,59 @@ const cleanMessage = (message, meId) => {
|
|
|
51
91
|
// if the sender believed the message being reacted to is not from them
|
|
52
92
|
// we've to correct the key to be from them, or some other participant
|
|
53
93
|
msgKey.fromMe = !msgKey.fromMe
|
|
54
|
-
?
|
|
55
|
-
|
|
56
|
-
//
|
|
57
|
-
|
|
94
|
+
? areJidsSameUser(msgKey.participant || msgKey.remoteJid, meId) ||
|
|
95
|
+
areJidsSameUser(msgKey.participant || msgKey.remoteJid, meLid)
|
|
96
|
+
: // if the message being reacted to, was from them
|
|
97
|
+
// fromMe automatically becomes false
|
|
98
|
+
false;
|
|
58
99
|
// set the remoteJid to being the same as the chat the message came from
|
|
100
|
+
// TODO: investigate inconsistencies
|
|
59
101
|
msgKey.remoteJid = message.key.remoteJid;
|
|
60
102
|
// set participant of the message
|
|
61
103
|
msgKey.participant = msgKey.participant || message.key.participant;
|
|
62
104
|
}
|
|
63
105
|
}
|
|
64
106
|
};
|
|
65
|
-
|
|
66
|
-
const isRealMessage = (message
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
&&
|
|
75
|
-
|
|
76
|
-
&& !(normalizedContent === null || normalizedContent === void 0 ? void 0 : normalizedContent.reactionMessage)
|
|
77
|
-
&& !(normalizedContent === null || normalizedContent === void 0 ? void 0 : normalizedContent.pollUpdateMessage);
|
|
107
|
+
// TODO: target:audit AUDIT THIS FUNCTION AGAIN
|
|
108
|
+
export const isRealMessage = (message) => {
|
|
109
|
+
const normalizedContent = normalizeMessageContent(message.message);
|
|
110
|
+
const hasSomeContent = !!getContentType(normalizedContent);
|
|
111
|
+
return ((!!normalizedContent ||
|
|
112
|
+
REAL_MSG_STUB_TYPES.has(message.messageStubType) ||
|
|
113
|
+
REAL_MSG_REQ_ME_STUB_TYPES.has(message.messageStubType)) &&
|
|
114
|
+
hasSomeContent &&
|
|
115
|
+
!normalizedContent?.protocolMessage &&
|
|
116
|
+
!normalizedContent?.reactionMessage &&
|
|
117
|
+
!normalizedContent?.pollUpdateMessage);
|
|
78
118
|
};
|
|
79
|
-
|
|
80
|
-
const shouldIncrementChatUnread = (message) => (!message.key.fromMe && !message.messageStubType);
|
|
81
|
-
exports.shouldIncrementChatUnread = shouldIncrementChatUnread;
|
|
119
|
+
export const shouldIncrementChatUnread = (message) => !message.key.fromMe && !message.messageStubType;
|
|
82
120
|
/**
|
|
83
121
|
* Get the ID of the chat from the given key.
|
|
84
122
|
* Typically -- that'll be the remoteJid, but for broadcasts, it'll be the participant
|
|
85
123
|
*/
|
|
86
|
-
const getChatId = ({ remoteJid, participant, fromMe }) => {
|
|
87
|
-
if (
|
|
88
|
-
|
|
89
|
-
|
|
124
|
+
export const getChatId = ({ remoteJid, participant, fromMe }) => {
|
|
125
|
+
if (!remoteJid) {
|
|
126
|
+
throw new Boom('Cannot derive chat id: message key is missing remoteJid', {
|
|
127
|
+
data: { remoteJid, participant, fromMe }
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
if (isJidBroadcast(remoteJid) && !isJidStatusBroadcast(remoteJid) && !fromMe) {
|
|
131
|
+
if (!participant) {
|
|
132
|
+
throw new Boom('Cannot derive chat id: broadcast message key is missing participant', {
|
|
133
|
+
data: { remoteJid, fromMe }
|
|
134
|
+
});
|
|
135
|
+
}
|
|
90
136
|
return participant;
|
|
91
137
|
}
|
|
92
138
|
return remoteJid;
|
|
93
139
|
};
|
|
94
|
-
exports.getChatId = getChatId;
|
|
95
140
|
/**
|
|
96
141
|
* Decrypt a poll vote
|
|
97
142
|
* @param vote encrypted vote
|
|
98
143
|
* @param ctx additional info about the poll required for decryption
|
|
99
144
|
* @returns list of SHA256 options
|
|
100
145
|
*/
|
|
101
|
-
function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pollEncKey, voterJid
|
|
146
|
+
export function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pollEncKey, voterJid }) {
|
|
102
147
|
const sign = Buffer.concat([
|
|
103
148
|
toBinary(pollMsgId),
|
|
104
149
|
toBinary(pollCreatorJid),
|
|
@@ -106,71 +151,107 @@ function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pol
|
|
|
106
151
|
toBinary('Poll Vote'),
|
|
107
152
|
new Uint8Array([1])
|
|
108
153
|
]);
|
|
109
|
-
const key0 =
|
|
110
|
-
const decKey =
|
|
154
|
+
const key0 = hmacSign(pollEncKey, new Uint8Array(32), 'sha256');
|
|
155
|
+
const decKey = hmacSign(sign, key0, 'sha256');
|
|
111
156
|
const aad = toBinary(`${pollMsgId}\u0000${voterJid}`);
|
|
112
|
-
const decrypted =
|
|
113
|
-
return
|
|
157
|
+
const decrypted = aesDecryptGCM(encPayload, decKey, encIv, aad);
|
|
158
|
+
return proto.Message.PollVoteMessage.decode(decrypted);
|
|
114
159
|
function toBinary(txt) {
|
|
115
160
|
return Buffer.from(txt);
|
|
116
161
|
}
|
|
117
162
|
}
|
|
118
|
-
|
|
119
|
-
|
|
163
|
+
/**
|
|
164
|
+
* Decrypt an event response
|
|
165
|
+
* @param response encrypted event response
|
|
166
|
+
* @param ctx additional info about the event required for decryption
|
|
167
|
+
* @returns event response message
|
|
168
|
+
*/
|
|
169
|
+
export function decryptEventResponse({ encPayload, encIv }, { eventCreatorJid, eventMsgId, eventEncKey, responderJid }) {
|
|
170
|
+
const sign = Buffer.concat([
|
|
171
|
+
toBinary(eventMsgId),
|
|
172
|
+
toBinary(eventCreatorJid),
|
|
173
|
+
toBinary(responderJid),
|
|
174
|
+
toBinary('Event Response'),
|
|
175
|
+
new Uint8Array([1])
|
|
176
|
+
]);
|
|
177
|
+
const key0 = hmacSign(eventEncKey, new Uint8Array(32), 'sha256');
|
|
178
|
+
const decKey = hmacSign(sign, key0, 'sha256');
|
|
179
|
+
const aad = toBinary(`${eventMsgId}\u0000${responderJid}`);
|
|
180
|
+
const decrypted = aesDecryptGCM(encPayload, decKey, encIv, aad);
|
|
181
|
+
return proto.Message.EventResponseMessage.decode(decrypted);
|
|
182
|
+
function toBinary(txt) {
|
|
183
|
+
return Buffer.from(txt);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const processMessage = async (message, { shouldProcessHistoryMsg, placeholderResendCache, ev, creds, signalRepository, keyStore, logger, options, getMessage }) => {
|
|
120
187
|
const meId = creds.me.id;
|
|
121
188
|
const { accountSettings } = creds;
|
|
122
|
-
const chat = { id:
|
|
123
|
-
const isRealMsg =
|
|
189
|
+
const chat = { id: jidNormalizedUser(getChatId(message.key)) };
|
|
190
|
+
const isRealMsg = isRealMessage(message);
|
|
124
191
|
if (isRealMsg) {
|
|
125
192
|
chat.messages = [{ message }];
|
|
126
|
-
chat.conversationTimestamp =
|
|
193
|
+
chat.conversationTimestamp = toNumber(message.messageTimestamp);
|
|
127
194
|
// only increment unread count if not CIPHERTEXT and from another person
|
|
128
|
-
if (
|
|
195
|
+
if (shouldIncrementChatUnread(message)) {
|
|
129
196
|
chat.unreadCount = (chat.unreadCount || 0) + 1;
|
|
130
197
|
}
|
|
131
198
|
}
|
|
132
|
-
const content =
|
|
133
|
-
const senderId = message.key.participant || message.key.remoteJid;
|
|
134
|
-
if ((0, WABinary_1.isLidUser)(senderId)) {
|
|
135
|
-
const jid = (0, WABinary_1.lidToJid)(senderId);
|
|
136
|
-
if (message.key.participant) {
|
|
137
|
-
message.key.participant = jid;
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
message.key.remoteJid = jid;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
const mJids = content && content.contextInfo && content.contextInfo.mentionedJid ? content.contextInfo.mentionedJid : [];
|
|
144
|
-
for (let i = 0; i < mJids.length; i++) {
|
|
145
|
-
if ((0, WABinary_1.isLidUser)(mJids[i])) {
|
|
146
|
-
mJids[i] = (0, WABinary_1.lidToJid)(mJids[i]);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
if (content && content.contextInfo && content.contextInfo.participant && (0, WABinary_1.isLidUser)(content.contextInfo.participant)) {
|
|
150
|
-
content.contextInfo.participant = (0, WABinary_1.lidToJid)(content.contextInfo.participant);
|
|
151
|
-
}
|
|
199
|
+
const content = normalizeMessageContent(message.message);
|
|
152
200
|
// unarchive chat if it's a real message, or someone reacted to our message
|
|
153
201
|
// and we've the unarchive chats setting on
|
|
154
|
-
if ((isRealMsg ||
|
|
155
|
-
&& (accountSettings === null || accountSettings === void 0 ? void 0 : accountSettings.unarchiveChats)) {
|
|
202
|
+
if ((isRealMsg || content?.reactionMessage?.key?.fromMe) && accountSettings?.unarchiveChats) {
|
|
156
203
|
chat.archived = false;
|
|
157
204
|
chat.readOnly = false;
|
|
158
205
|
}
|
|
159
|
-
const protocolMsg = content
|
|
206
|
+
const protocolMsg = content?.protocolMessage;
|
|
160
207
|
if (protocolMsg) {
|
|
208
|
+
// Mirror whatsmeow's `handleProtocolMessage` guard, but applied only to
|
|
209
|
+
// the protocol message types that originate from our own device — an
|
|
210
|
+
// attacker could otherwise spoof any of these to manipulate local state.
|
|
211
|
+
//
|
|
212
|
+
// Self-only types (drop if `!fromMe`):
|
|
213
|
+
// - HISTORY_SYNC_NOTIFICATION (our phone driving history sync)
|
|
214
|
+
// - APP_STATE_SYNC_KEY_SHARE (key share between our devices)
|
|
215
|
+
// - LID_MIGRATION_MAPPING_SYNC (server-initiated via our phone)
|
|
216
|
+
// - PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE (response from our phone to our PDO request)
|
|
217
|
+
//
|
|
218
|
+
// Cross-user types (must NOT be dropped — legitimately arrive from others):
|
|
219
|
+
// - REVOKE
|
|
220
|
+
// - MESSAGE_EDIT
|
|
221
|
+
// - EPHEMERAL_SETTING
|
|
222
|
+
// - GROUP_MEMBER_LABEL_CHANGE
|
|
223
|
+
//
|
|
224
|
+
// See https://github.com/tulir/whatsmeow/blob/8d3700152a/message.go#L842-L845
|
|
225
|
+
// for the reference architecture — whatsmeow's `handleProtocolMessage`
|
|
226
|
+
// only contains self-only types because edits are unwrapped from
|
|
227
|
+
// `EditedMessage` BEFORE this dispatch and revokes aren't routed here.
|
|
228
|
+
const SELF_ONLY_TYPES = new Set([
|
|
229
|
+
proto.Message.ProtocolMessage.Type.HISTORY_SYNC_NOTIFICATION,
|
|
230
|
+
proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_SHARE,
|
|
231
|
+
proto.Message.ProtocolMessage.Type.LID_MIGRATION_MAPPING_SYNC,
|
|
232
|
+
proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE
|
|
233
|
+
]);
|
|
234
|
+
if (protocolMsg.type !== null &&
|
|
235
|
+
protocolMsg.type !== undefined &&
|
|
236
|
+
SELF_ONLY_TYPES.has(protocolMsg.type) &&
|
|
237
|
+
!message.key.fromMe) {
|
|
238
|
+
logger?.warn({ msgId: message.key.id, type: protocolMsg.type, from: message.key.participant || message.key.remoteJid }, 'dropping spoofed self-only protocolMessage from non-self origin');
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
161
241
|
switch (protocolMsg.type) {
|
|
162
|
-
case
|
|
242
|
+
case proto.Message.ProtocolMessage.Type.HISTORY_SYNC_NOTIFICATION:
|
|
163
243
|
const histNotification = protocolMsg.historySyncNotification;
|
|
164
244
|
const process = shouldProcessHistoryMsg;
|
|
165
|
-
const isLatest = !
|
|
166
|
-
logger
|
|
245
|
+
const isLatest = !creds.processedHistoryMessages?.length;
|
|
246
|
+
logger?.info({
|
|
167
247
|
histNotification,
|
|
168
248
|
process,
|
|
169
249
|
id: message.key.id,
|
|
170
|
-
isLatest
|
|
250
|
+
isLatest
|
|
171
251
|
}, 'got history notification');
|
|
172
252
|
if (process) {
|
|
173
|
-
|
|
253
|
+
// TODO: investigate
|
|
254
|
+
if (histNotification.syncType !== proto.HistorySync.HistorySyncType.ON_DEMAND) {
|
|
174
255
|
ev.emit('creds.update', {
|
|
175
256
|
processedHistoryMessages: [
|
|
176
257
|
...(creds.processedHistoryMessages || []),
|
|
@@ -178,19 +259,25 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
178
259
|
]
|
|
179
260
|
});
|
|
180
261
|
}
|
|
181
|
-
const data = await
|
|
262
|
+
const data = await downloadAndProcessHistorySyncNotification(histNotification, options, logger);
|
|
263
|
+
if (data.lidPnMappings?.length) {
|
|
264
|
+
logger?.debug({ count: data.lidPnMappings.length }, 'processing LID-PN mappings from history sync');
|
|
265
|
+
await signalRepository.lidMapping
|
|
266
|
+
.storeLIDPNMappings(data.lidPnMappings)
|
|
267
|
+
.catch(err => logger?.warn({ err }, 'failed to store LID-PN mappings from history sync'));
|
|
268
|
+
}
|
|
269
|
+
await storeTcTokensFromHistorySync(data.chats, signalRepository, keyStore, logger);
|
|
182
270
|
ev.emit('messaging-history.set', {
|
|
183
271
|
...data,
|
|
184
|
-
isLatest: histNotification.syncType !==
|
|
185
|
-
|
|
186
|
-
: undefined,
|
|
272
|
+
isLatest: histNotification.syncType !== proto.HistorySync.HistorySyncType.ON_DEMAND ? isLatest : undefined,
|
|
273
|
+
chunkOrder: histNotification.chunkOrder,
|
|
187
274
|
peerDataRequestSessionId: histNotification.peerDataRequestSessionId
|
|
188
275
|
});
|
|
189
276
|
}
|
|
190
277
|
break;
|
|
191
|
-
case
|
|
278
|
+
case proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_SHARE:
|
|
192
279
|
const keys = protocolMsg.appStateSyncKeyShare.keys;
|
|
193
|
-
if (keys
|
|
280
|
+
if (keys?.length) {
|
|
194
281
|
let newAppStateSyncKeyId = '';
|
|
195
282
|
await keyStore.transaction(async () => {
|
|
196
283
|
const newKeys = [];
|
|
@@ -200,57 +287,85 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
200
287
|
await keyStore.set({ 'app-state-sync-key': { [strKeyId]: keyData } });
|
|
201
288
|
newAppStateSyncKeyId = strKeyId;
|
|
202
289
|
}
|
|
203
|
-
logger
|
|
204
|
-
});
|
|
290
|
+
logger?.info({ newAppStateSyncKeyId, newKeys }, 'injecting new app state sync keys');
|
|
291
|
+
}, meId);
|
|
205
292
|
ev.emit('creds.update', { myAppStateKeyId: newAppStateSyncKeyId });
|
|
206
293
|
}
|
|
207
294
|
else {
|
|
208
|
-
logger
|
|
295
|
+
logger?.info({ protocolMsg }, 'recv app state sync with 0 keys');
|
|
209
296
|
}
|
|
210
297
|
break;
|
|
211
|
-
case
|
|
298
|
+
case proto.Message.ProtocolMessage.Type.REVOKE:
|
|
212
299
|
ev.emit('messages.update', [
|
|
213
300
|
{
|
|
214
301
|
key: {
|
|
215
302
|
...message.key,
|
|
216
303
|
id: protocolMsg.key.id
|
|
217
304
|
},
|
|
218
|
-
update: { message: null, messageStubType:
|
|
305
|
+
update: { message: null, messageStubType: WAMessageStubType.REVOKE, key: message.key }
|
|
219
306
|
}
|
|
220
307
|
]);
|
|
221
308
|
break;
|
|
222
|
-
case
|
|
309
|
+
case proto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING:
|
|
223
310
|
Object.assign(chat, {
|
|
224
|
-
ephemeralSettingTimestamp:
|
|
311
|
+
ephemeralSettingTimestamp: toNumber(message.messageTimestamp),
|
|
225
312
|
ephemeralExpiration: protocolMsg.ephemeralExpiration || null
|
|
226
313
|
});
|
|
227
314
|
break;
|
|
228
|
-
case
|
|
315
|
+
case proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE:
|
|
229
316
|
const response = protocolMsg.peerDataOperationRequestResponseMessage;
|
|
230
317
|
if (response) {
|
|
231
|
-
placeholderResendCache === null || placeholderResendCache === void 0 ? void 0 : placeholderResendCache.del(response.stanzaId);
|
|
232
318
|
// TODO: IMPLEMENT HISTORY SYNC ETC (sticker uploads etc.).
|
|
233
|
-
const
|
|
319
|
+
const peerDataOperationResult = response.peerDataOperationResult || [];
|
|
234
320
|
for (const result of peerDataOperationResult) {
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
321
|
+
const retryResponse = result?.placeholderMessageResendResponse;
|
|
322
|
+
//eslint-disable-next-line max-depth
|
|
323
|
+
if (!retryResponse?.webMessageInfoBytes) {
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
//eslint-disable-next-line max-depth
|
|
327
|
+
try {
|
|
328
|
+
const webMessageInfo = proto.WebMessageInfo.decode(retryResponse.webMessageInfoBytes);
|
|
329
|
+
const msgId = webMessageInfo.key?.id;
|
|
330
|
+
// Retrieve cached original message data (preserves LID details,
|
|
331
|
+
// timestamps, etc. that the phone may omit in its PDO response)
|
|
332
|
+
const cachedData = msgId ? await placeholderResendCache?.get(msgId) : undefined;
|
|
333
|
+
//eslint-disable-next-line max-depth
|
|
334
|
+
if (msgId) {
|
|
335
|
+
await placeholderResendCache?.del(msgId);
|
|
336
|
+
}
|
|
337
|
+
let finalMsg;
|
|
338
|
+
//eslint-disable-next-line max-depth
|
|
339
|
+
if (cachedData && typeof cachedData === 'object') {
|
|
340
|
+
// Apply decoded message content onto cached metadata (preserves LID etc.)
|
|
341
|
+
cachedData.message = webMessageInfo.message;
|
|
342
|
+
//eslint-disable-next-line max-depth
|
|
343
|
+
if (webMessageInfo.messageTimestamp) {
|
|
344
|
+
cachedData.messageTimestamp = webMessageInfo.messageTimestamp;
|
|
345
|
+
}
|
|
346
|
+
finalMsg = cachedData;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
finalMsg = webMessageInfo;
|
|
350
|
+
}
|
|
351
|
+
logger?.debug({ msgId, requestId: response.stanzaId }, 'received placeholder resend');
|
|
352
|
+
ev.emit('messages.upsert', {
|
|
353
|
+
messages: [finalMsg],
|
|
354
|
+
type: 'notify',
|
|
355
|
+
requestId: response.stanzaId
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
catch (err) {
|
|
359
|
+
logger?.warn({ err, stanzaId: response.stanzaId }, 'failed to decode placeholder resend response');
|
|
246
360
|
}
|
|
247
361
|
}
|
|
248
362
|
}
|
|
249
|
-
|
|
363
|
+
break;
|
|
364
|
+
case proto.Message.ProtocolMessage.Type.MESSAGE_EDIT:
|
|
250
365
|
ev.emit('messages.update', [
|
|
251
366
|
{
|
|
252
367
|
// flip the sender / fromMe properties because they're in the perspective of the sender
|
|
253
|
-
key: { ...message.key, id:
|
|
368
|
+
key: { ...message.key, id: protocolMsg.key?.id },
|
|
254
369
|
update: {
|
|
255
370
|
message: {
|
|
256
371
|
editedMessage: {
|
|
@@ -258,122 +373,228 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
258
373
|
}
|
|
259
374
|
},
|
|
260
375
|
messageTimestamp: protocolMsg.timestampMs
|
|
261
|
-
? Math.floor(
|
|
376
|
+
? Math.floor(toNumber(protocolMsg.timestampMs) / 1000)
|
|
262
377
|
: message.messageTimestamp
|
|
263
378
|
}
|
|
264
379
|
}
|
|
265
380
|
]);
|
|
266
381
|
break;
|
|
382
|
+
case proto.Message.ProtocolMessage.Type.GROUP_MEMBER_LABEL_CHANGE:
|
|
383
|
+
const labelAssociationMsg = protocolMsg.memberLabel;
|
|
384
|
+
if (labelAssociationMsg?.label) {
|
|
385
|
+
ev.emit('group.member-tag.update', {
|
|
386
|
+
groupId: chat.id,
|
|
387
|
+
label: labelAssociationMsg.label,
|
|
388
|
+
participant: message.key.participant,
|
|
389
|
+
participantAlt: message.key.participantAlt,
|
|
390
|
+
messageTimestamp: Number(message.messageTimestamp)
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
break;
|
|
394
|
+
case proto.Message.ProtocolMessage.Type.LID_MIGRATION_MAPPING_SYNC:
|
|
395
|
+
const encodedPayload = protocolMsg.lidMigrationMappingSyncMessage?.encodedMappingPayload;
|
|
396
|
+
const { pnToLidMappings, chatDbMigrationTimestamp } = proto.LIDMigrationMappingSyncPayload.decode(encodedPayload);
|
|
397
|
+
logger?.debug({ pnToLidMappings, chatDbMigrationTimestamp }, 'got lid mappings and chat db migration timestamp');
|
|
398
|
+
const pairs = [];
|
|
399
|
+
for (const { pn, latestLid, assignedLid } of pnToLidMappings) {
|
|
400
|
+
const lid = latestLid || assignedLid;
|
|
401
|
+
pairs.push({ lid: `${lid}@lid`, pn: `${pn}@s.whatsapp.net` });
|
|
402
|
+
}
|
|
403
|
+
await signalRepository.lidMapping.storeLIDPNMappings(pairs);
|
|
404
|
+
if (pairs.length) {
|
|
405
|
+
for (const { pn, lid } of pairs) {
|
|
406
|
+
await signalRepository.migrateSession(pn, lid);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
267
409
|
}
|
|
268
410
|
}
|
|
269
|
-
else if (content
|
|
411
|
+
else if (content?.reactionMessage) {
|
|
270
412
|
const reaction = {
|
|
271
413
|
...content.reactionMessage,
|
|
272
|
-
key: message.key
|
|
414
|
+
key: message.key
|
|
273
415
|
};
|
|
274
|
-
ev.emit('messages.reaction', [
|
|
416
|
+
ev.emit('messages.reaction', [
|
|
417
|
+
{
|
|
275
418
|
reaction,
|
|
276
|
-
key:
|
|
277
|
-
}
|
|
419
|
+
key: content.reactionMessage?.key
|
|
420
|
+
}
|
|
421
|
+
]);
|
|
422
|
+
}
|
|
423
|
+
else if (content?.encEventResponseMessage) {
|
|
424
|
+
const encEventResponse = content.encEventResponseMessage;
|
|
425
|
+
const creationMsgKey = encEventResponse.eventCreationMessageKey;
|
|
426
|
+
// we need to fetch the event creation message to get the event enc key
|
|
427
|
+
const eventMsg = await getMessage(creationMsgKey);
|
|
428
|
+
if (eventMsg) {
|
|
429
|
+
try {
|
|
430
|
+
const meIdNormalised = jidNormalizedUser(meId);
|
|
431
|
+
// all jids need to be PN
|
|
432
|
+
const eventCreatorKey = creationMsgKey.participant || creationMsgKey.remoteJid;
|
|
433
|
+
const eventCreatorPn = isLidUser(eventCreatorKey)
|
|
434
|
+
? await signalRepository.lidMapping.getPNForLID(eventCreatorKey)
|
|
435
|
+
: eventCreatorKey;
|
|
436
|
+
const eventCreatorJid = getKeyAuthor({ remoteJid: jidNormalizedUser(eventCreatorPn), fromMe: meIdNormalised === eventCreatorPn }, meIdNormalised);
|
|
437
|
+
const responderJid = getKeyAuthor(message.key, meIdNormalised);
|
|
438
|
+
const eventEncKey = eventMsg?.messageContextInfo?.messageSecret;
|
|
439
|
+
if (!eventEncKey) {
|
|
440
|
+
logger?.warn({ creationMsgKey }, 'event response: missing messageSecret for decryption');
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
const responseMsg = decryptEventResponse(encEventResponse, {
|
|
444
|
+
eventEncKey,
|
|
445
|
+
eventCreatorJid,
|
|
446
|
+
eventMsgId: creationMsgKey.id,
|
|
447
|
+
responderJid
|
|
448
|
+
});
|
|
449
|
+
const eventResponse = {
|
|
450
|
+
eventResponseMessageKey: message.key,
|
|
451
|
+
senderTimestampMs: responseMsg.timestampMs,
|
|
452
|
+
response: responseMsg
|
|
453
|
+
};
|
|
454
|
+
ev.emit('messages.update', [
|
|
455
|
+
{
|
|
456
|
+
key: creationMsgKey,
|
|
457
|
+
update: {
|
|
458
|
+
eventResponses: [eventResponse]
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
]);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
catch (err) {
|
|
465
|
+
logger?.warn({ err, creationMsgKey }, 'failed to decrypt event response');
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
logger?.warn({ creationMsgKey }, 'event creation message not found, cannot decrypt response');
|
|
470
|
+
}
|
|
278
471
|
}
|
|
279
472
|
else if (message.messageStubType) {
|
|
280
|
-
const jid =
|
|
473
|
+
const jid = message.key?.remoteJid;
|
|
281
474
|
//let actor = whatsappID (message.participant)
|
|
282
475
|
let participants;
|
|
283
|
-
const emitParticipantsUpdate = (action) =>
|
|
476
|
+
const emitParticipantsUpdate = (action) => ev.emit('group-participants.update', {
|
|
477
|
+
id: jid,
|
|
478
|
+
author: message.key.participant,
|
|
479
|
+
authorPn: message.key.participantAlt,
|
|
480
|
+
authorUsername: message.key.participantUsername,
|
|
481
|
+
participants,
|
|
482
|
+
action
|
|
483
|
+
});
|
|
284
484
|
const emitGroupUpdate = (update) => {
|
|
285
|
-
|
|
286
|
-
|
|
485
|
+
ev.emit('groups.update', [
|
|
486
|
+
{
|
|
487
|
+
id: jid,
|
|
488
|
+
...update,
|
|
489
|
+
author: message.key.participant ?? undefined,
|
|
490
|
+
authorPn: message.key.participantAlt,
|
|
491
|
+
authorUsername: message.key.participantUsername
|
|
492
|
+
}
|
|
493
|
+
]);
|
|
287
494
|
};
|
|
288
495
|
const emitGroupRequestJoin = (participant, action, method) => {
|
|
289
|
-
ev.emit('group.join-request', {
|
|
496
|
+
ev.emit('group.join-request', {
|
|
497
|
+
id: jid,
|
|
498
|
+
author: message.key.participant,
|
|
499
|
+
authorPn: message.key.participantAlt,
|
|
500
|
+
authorUsername: message.key.participantUsername,
|
|
501
|
+
participant: participant.lid,
|
|
502
|
+
participantPn: participant.pn,
|
|
503
|
+
action,
|
|
504
|
+
method: method
|
|
505
|
+
});
|
|
290
506
|
};
|
|
291
|
-
const participantsIncludesMe = () => participants.find(jid =>
|
|
507
|
+
const participantsIncludesMe = () => participants.find(jid => areJidsSameUser(meId, jid.phoneNumber)); // ADD SUPPORT FOR LID
|
|
292
508
|
switch (message.messageStubType) {
|
|
293
|
-
case
|
|
294
|
-
participants = message.messageStubParameters || [];
|
|
509
|
+
case WAMessageStubType.GROUP_PARTICIPANT_CHANGE_NUMBER:
|
|
510
|
+
participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
|
|
295
511
|
emitParticipantsUpdate('modify');
|
|
296
512
|
break;
|
|
297
|
-
case
|
|
298
|
-
case
|
|
299
|
-
participants = message.messageStubParameters || [];
|
|
513
|
+
case WAMessageStubType.GROUP_PARTICIPANT_LEAVE:
|
|
514
|
+
case WAMessageStubType.GROUP_PARTICIPANT_REMOVE:
|
|
515
|
+
participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
|
|
300
516
|
emitParticipantsUpdate('remove');
|
|
301
517
|
// mark the chat read only if you left the group
|
|
302
518
|
if (participantsIncludesMe()) {
|
|
303
519
|
chat.readOnly = true;
|
|
304
520
|
}
|
|
305
521
|
break;
|
|
306
|
-
case
|
|
307
|
-
case
|
|
308
|
-
case
|
|
309
|
-
participants = message.messageStubParameters || [];
|
|
522
|
+
case WAMessageStubType.GROUP_PARTICIPANT_ADD:
|
|
523
|
+
case WAMessageStubType.GROUP_PARTICIPANT_INVITE:
|
|
524
|
+
case WAMessageStubType.GROUP_PARTICIPANT_ADD_REQUEST_JOIN:
|
|
525
|
+
participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
|
|
310
526
|
if (participantsIncludesMe()) {
|
|
311
527
|
chat.readOnly = false;
|
|
312
528
|
}
|
|
313
529
|
emitParticipantsUpdate('add');
|
|
314
530
|
break;
|
|
315
|
-
case
|
|
316
|
-
participants = message.messageStubParameters || [];
|
|
531
|
+
case WAMessageStubType.GROUP_PARTICIPANT_DEMOTE:
|
|
532
|
+
participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
|
|
317
533
|
emitParticipantsUpdate('demote');
|
|
318
534
|
break;
|
|
319
|
-
case
|
|
320
|
-
participants = message.messageStubParameters || [];
|
|
535
|
+
case WAMessageStubType.GROUP_PARTICIPANT_PROMOTE:
|
|
536
|
+
participants = message.messageStubParameters.map((a) => JSON.parse(a)) || [];
|
|
321
537
|
emitParticipantsUpdate('promote');
|
|
322
538
|
break;
|
|
323
|
-
case
|
|
324
|
-
const announceValue =
|
|
539
|
+
case WAMessageStubType.GROUP_CHANGE_ANNOUNCE:
|
|
540
|
+
const announceValue = message.messageStubParameters?.[0];
|
|
325
541
|
emitGroupUpdate({ announce: announceValue === 'true' || announceValue === 'on' });
|
|
326
542
|
break;
|
|
327
|
-
case
|
|
328
|
-
const restrictValue =
|
|
543
|
+
case WAMessageStubType.GROUP_CHANGE_RESTRICT:
|
|
544
|
+
const restrictValue = message.messageStubParameters?.[0];
|
|
329
545
|
emitGroupUpdate({ restrict: restrictValue === 'true' || restrictValue === 'on' });
|
|
330
546
|
break;
|
|
331
|
-
case
|
|
332
|
-
const name =
|
|
547
|
+
case WAMessageStubType.GROUP_CHANGE_SUBJECT:
|
|
548
|
+
const name = message.messageStubParameters?.[0];
|
|
333
549
|
chat.name = name;
|
|
334
550
|
emitGroupUpdate({ subject: name });
|
|
335
551
|
break;
|
|
336
|
-
case
|
|
337
|
-
const description =
|
|
552
|
+
case WAMessageStubType.GROUP_CHANGE_DESCRIPTION:
|
|
553
|
+
const description = message.messageStubParameters?.[0];
|
|
338
554
|
chat.description = description;
|
|
339
555
|
emitGroupUpdate({ desc: description });
|
|
340
556
|
break;
|
|
341
|
-
case
|
|
342
|
-
const code =
|
|
557
|
+
case WAMessageStubType.GROUP_CHANGE_INVITE_LINK:
|
|
558
|
+
const code = message.messageStubParameters?.[0];
|
|
343
559
|
emitGroupUpdate({ inviteCode: code });
|
|
344
560
|
break;
|
|
345
|
-
case
|
|
346
|
-
const memberAddValue =
|
|
561
|
+
case WAMessageStubType.GROUP_MEMBER_ADD_MODE:
|
|
562
|
+
const memberAddValue = message.messageStubParameters?.[0];
|
|
347
563
|
emitGroupUpdate({ memberAddMode: memberAddValue === 'all_member_add' });
|
|
348
564
|
break;
|
|
349
|
-
case
|
|
350
|
-
const approvalMode =
|
|
565
|
+
case WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE:
|
|
566
|
+
const approvalMode = message.messageStubParameters?.[0];
|
|
351
567
|
emitGroupUpdate({ joinApprovalMode: approvalMode === 'on' });
|
|
352
568
|
break;
|
|
353
|
-
case
|
|
354
|
-
const participant = (
|
|
355
|
-
const action =
|
|
356
|
-
const method =
|
|
569
|
+
case WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD: // TODO: Add other events
|
|
570
|
+
const participant = JSON.parse(message.messageStubParameters?.[0]);
|
|
571
|
+
const action = message.messageStubParameters?.[1];
|
|
572
|
+
const method = message.messageStubParameters?.[2];
|
|
357
573
|
emitGroupRequestJoin(participant, action, method);
|
|
358
574
|
break;
|
|
359
575
|
}
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
const creationMsgKey = content.pollUpdateMessage.pollCreationMessageKey;
|
|
576
|
+
} /* else if(content?.pollUpdateMessage) {
|
|
577
|
+
const creationMsgKey = content.pollUpdateMessage.pollCreationMessageKey!
|
|
363
578
|
// we need to fetch the poll creation message to get the poll enc key
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
const
|
|
369
|
-
const
|
|
579
|
+
// TODO: make standalone, remove getMessage reference
|
|
580
|
+
// TODO: Remove entirely
|
|
581
|
+
const pollMsg = await getMessage(creationMsgKey)
|
|
582
|
+
if(pollMsg) {
|
|
583
|
+
const meIdNormalised = jidNormalizedUser(meId)
|
|
584
|
+
const pollCreatorJid = getKeyAuthor(creationMsgKey, meIdNormalised)
|
|
585
|
+
const voterJid = getKeyAuthor(message.key, meIdNormalised)
|
|
586
|
+
const pollEncKey = pollMsg.messageContextInfo?.messageSecret!
|
|
587
|
+
|
|
370
588
|
try {
|
|
371
|
-
const voteMsg = decryptPollVote(
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
589
|
+
const voteMsg = decryptPollVote(
|
|
590
|
+
content.pollUpdateMessage.vote!,
|
|
591
|
+
{
|
|
592
|
+
pollEncKey,
|
|
593
|
+
pollCreatorJid,
|
|
594
|
+
pollMsgId: creationMsgKey.id!,
|
|
595
|
+
voterJid,
|
|
596
|
+
}
|
|
597
|
+
)
|
|
377
598
|
ev.emit('messages.update', [
|
|
378
599
|
{
|
|
379
600
|
key: creationMsgKey,
|
|
@@ -382,23 +603,28 @@ const processMessage = async (message, { shouldProcessHistoryMsg, placeholderRes
|
|
|
382
603
|
{
|
|
383
604
|
pollUpdateMessageKey: message.key,
|
|
384
605
|
vote: voteMsg,
|
|
385
|
-
senderTimestampMs: content.pollUpdateMessage.senderTimestampMs.toNumber(),
|
|
606
|
+
senderTimestampMs: (content.pollUpdateMessage.senderTimestampMs! as Long).toNumber(),
|
|
386
607
|
}
|
|
387
608
|
]
|
|
388
609
|
}
|
|
389
610
|
}
|
|
390
|
-
])
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
|
|
611
|
+
])
|
|
612
|
+
} catch(err) {
|
|
613
|
+
logger?.warn(
|
|
614
|
+
{ err, creationMsgKey },
|
|
615
|
+
'failed to decrypt poll vote'
|
|
616
|
+
)
|
|
394
617
|
}
|
|
618
|
+
} else {
|
|
619
|
+
logger?.warn(
|
|
620
|
+
{ creationMsgKey },
|
|
621
|
+
'poll creation message not found, cannot decrypt update'
|
|
622
|
+
)
|
|
395
623
|
}
|
|
396
|
-
|
|
397
|
-
logger === null || logger === void 0 ? void 0 : logger.warn({ creationMsgKey }, 'poll creation message not found, cannot decrypt update');
|
|
398
|
-
}
|
|
399
|
-
}
|
|
624
|
+
} */
|
|
400
625
|
if (Object.keys(chat).length > 1) {
|
|
401
626
|
ev.emit('chats.update', [chat]);
|
|
402
627
|
}
|
|
403
628
|
};
|
|
404
|
-
|
|
629
|
+
export default processMessage;
|
|
630
|
+
//# sourceMappingURL=process-message.js.map
|