@pontalabs/baileys 1.0.4 → 1.0.6
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 +267 -839
- package/WAProto/GenerateStatics.sh +3 -4
- package/WAProto/WAProto.proto +1215 -511
- package/WAProto/fix-imports.js +85 -0
- package/WAProto/index.d.ts +14017 -55
- package/WAProto/index.js +97689 -29
- package/engine-requirements.js +10 -0
- package/lib/Defaults/index.d.ts +72 -74
- package/lib/Defaults/index.d.ts.map +1 -0
- package/lib/Defaults/index.js +94 -108
- package/lib/Defaults/index.js.map +1 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +8 -7
- package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
- package/lib/Signal/Group/ciphertext-message.js +9 -16
- package/lib/Signal/Group/ciphertext-message.js.map +1 -0
- package/lib/Signal/Group/group-session-builder.d.ts +11 -13
- package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
- package/lib/Signal/Group/group-session-builder.js +19 -61
- package/lib/Signal/Group/group-session-builder.js.map +1 -0
- package/lib/Signal/Group/group_cipher.d.ts +14 -16
- package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
- package/lib/Signal/Group/group_cipher.js +41 -70
- 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 -61
- package/lib/Signal/Group/index.js.map +1 -0
- package/lib/Signal/Group/keyhelper.d.ts +9 -14
- package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
- package/lib/Signal/Group/keyhelper.js +10 -58
- package/lib/Signal/Group/keyhelper.js.map +1 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +13 -13
- package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-chain-key.js +13 -34
- package/lib/Signal/Group/sender-chain-key.js.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -16
- package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +28 -36
- package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-message.d.ts +18 -18
- package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-message.js +38 -45
- package/lib/Signal/Group/sender-key-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-name.d.ts +14 -15
- package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-name.js +20 -31
- package/lib/Signal/Group/sender-key-name.js.map +1 -0
- package/lib/Signal/Group/sender-key-record.d.ts +24 -25
- package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-record.js +18 -35
- package/lib/Signal/Group/sender-key-record.js.map +1 -0
- package/lib/Signal/Group/sender-key-state.d.ts +29 -34
- package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-state.js +37 -100
- package/lib/Signal/Group/sender-key-state.js.map +1 -0
- package/lib/Signal/Group/sender-message-key.d.ts +11 -10
- package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-message-key.js +15 -22
- package/lib/Signal/Group/sender-message-key.js.map +1 -0
- package/lib/Signal/libsignal.d.ts +5 -8
- package/lib/Signal/libsignal.d.ts.map +1 -0
- package/lib/Signal/libsignal.js +279 -121
- package/lib/Signal/libsignal.js.map +1 -0
- package/lib/Signal/lid-mapping.d.ts +23 -28
- package/lib/Signal/lid-mapping.d.ts.map +1 -0
- package/lib/Signal/lid-mapping.js +277 -184
- 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 -22
- package/lib/Socket/Client/index.js.map +1 -0
- package/lib/Socket/Client/types.d.ts +15 -15
- package/lib/Socket/Client/types.d.ts.map +1 -0
- package/lib/Socket/Client/types.js +8 -15
- package/lib/Socket/Client/types.js.map +1 -0
- package/lib/Socket/Client/websocket.d.ts +12 -12
- package/lib/Socket/Client/websocket.d.ts.map +1 -0
- package/lib/Socket/Client/websocket.js +29 -37
- package/lib/Socket/Client/websocket.js.map +1 -0
- package/lib/Socket/business.d.ts +208 -178
- package/lib/Socket/business.d.ts.map +1 -0
- package/lib/Socket/business.js +91 -127
- package/lib/Socket/business.js.map +1 -0
- package/lib/Socket/chats.d.ts +120 -93
- package/lib/Socket/chats.d.ts.map +1 -0
- package/lib/Socket/chats.js +727 -652
- package/lib/Socket/chats.js.map +1 -0
- package/lib/Socket/communities.d.ts +273 -0
- package/lib/Socket/communities.d.ts.map +1 -0
- package/lib/Socket/communities.js +431 -0
- package/lib/Socket/communities.js.map +1 -0
- package/lib/Socket/dugong.js +261 -0
- package/lib/Socket/dugong.js.bak +204 -0
- package/lib/Socket/groups.d.ts +143 -111
- package/lib/Socket/groups.d.ts.map +1 -0
- package/lib/Socket/groups.js +165 -177
- package/lib/Socket/groups.js.map +1 -0
- package/lib/Socket/index.d.ts +252 -183
- package/lib/Socket/index.d.ts.map +1 -0
- package/lib/Socket/index.js +38 -18
- package/lib/Socket/index.js.bak +44 -0
- package/lib/Socket/index.js.map +1 -0
- package/lib/Socket/messages-recv.d.ts +196 -167
- package/lib/Socket/messages-recv.d.ts.map +1 -0
- package/lib/Socket/messages-recv.js +1443 -1563
- package/lib/Socket/messages-recv.js.map +1 -0
- package/lib/Socket/messages-send.d.ts +192 -158
- package/lib/Socket/messages-send.d.ts.map +1 -0
- package/lib/Socket/messages-send.js +1102 -1208
- package/lib/Socket/messages-send.js.bak +1400 -0
- package/lib/Socket/messages-send.js.map +1 -0
- package/lib/Socket/mex.d.ts +3 -0
- package/lib/Socket/mex.d.ts.map +1 -0
- package/lib/Socket/mex.js +42 -0
- package/lib/Socket/mex.js.map +1 -0
- package/lib/Socket/newsletter.d.ts +163 -138
- package/lib/Socket/newsletter.d.ts.map +1 -0
- package/lib/Socket/newsletter.js +153 -249
- package/lib/Socket/newsletter.js.map +1 -0
- package/lib/Socket/socket.d.ts +50 -36
- package/lib/Socket/socket.d.ts.map +1 -0
- package/lib/Socket/socket.js +749 -820
- package/lib/Socket/socket.js.map +1 -0
- package/lib/Store/index.d.ts +4 -4
- package/lib/Store/index.d.ts.map +1 -0
- package/lib/Store/index.js +4 -24
- package/lib/Store/index.js.map +1 -0
- package/lib/Store/make-in-memory-store.d.ts +44 -104
- package/lib/Store/make-in-memory-store.d.ts.map +1 -0
- package/lib/Store/make-in-memory-store.js +199 -213
- package/lib/Store/make-in-memory-store.js.map +1 -0
- package/lib/Store/make-ordered-dictionary.d.ts +13 -12
- package/lib/Store/make-ordered-dictionary.d.ts.map +1 -0
- package/lib/Store/make-ordered-dictionary.js +38 -45
- package/lib/Store/make-ordered-dictionary.js.map +1 -0
- package/lib/Store/object-repository.d.ts +11 -10
- package/lib/Store/object-repository.d.ts.map +1 -0
- package/lib/Store/object-repository.js +9 -16
- package/lib/Store/object-repository.js.map +1 -0
- package/lib/Types/Auth.d.ts +93 -97
- package/lib/Types/Auth.d.ts.map +1 -0
- package/lib/Types/Auth.js +2 -3
- 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 -3
- package/lib/Types/Bussines.js.map +1 -0
- package/lib/Types/Call.d.ts +14 -13
- package/lib/Types/Call.d.ts.map +1 -0
- package/lib/Types/Call.js +2 -3
- package/lib/Types/Call.js.map +1 -0
- package/lib/Types/Chat.d.ts +78 -97
- package/lib/Types/Chat.d.ts.map +1 -0
- package/lib/Types/Chat.js +8 -9
- package/lib/Types/Chat.js.map +1 -0
- package/lib/Types/Contact.d.ts +12 -9
- package/lib/Types/Contact.d.ts.map +1 -0
- package/lib/Types/Contact.js +2 -3
- package/lib/Types/Contact.js.map +1 -0
- package/lib/Types/Events.d.ts +206 -176
- package/lib/Types/Events.d.ts.map +1 -0
- package/lib/Types/Events.js +2 -3
- package/lib/Types/Events.js.map +1 -0
- package/lib/Types/GroupMetadata.d.ts +53 -48
- package/lib/Types/GroupMetadata.d.ts.map +1 -0
- package/lib/Types/GroupMetadata.js +2 -3
- package/lib/Types/GroupMetadata.js.map +1 -0
- package/lib/Types/Label.d.ts +13 -14
- package/lib/Types/Label.d.ts.map +1 -0
- package/lib/Types/Label.js +24 -30
- package/lib/Types/Label.js.map +1 -0
- package/lib/Types/LabelAssociation.d.ts +15 -20
- package/lib/Types/LabelAssociation.d.ts.map +1 -0
- package/lib/Types/LabelAssociation.js +6 -12
- package/lib/Types/LabelAssociation.js.map +1 -0
- package/lib/Types/Message.d.ts +248 -412
- package/lib/Types/Message.d.ts.map +1 -0
- package/lib/Types/Message.js +17 -19
- package/lib/Types/Message.js.map +1 -0
- package/lib/Types/Mex.d.ts +141 -0
- package/lib/Types/Mex.d.ts.map +1 -0
- package/lib/Types/Mex.js +37 -0
- package/lib/Types/Mex.js.map +1 -0
- package/lib/Types/Product.d.ts +58 -71
- package/lib/Types/Product.d.ts.map +1 -0
- package/lib/Types/Product.js +2 -3
- package/lib/Types/Product.js.map +1 -0
- package/lib/Types/RichType.d.ts +3 -0
- package/lib/Types/RichType.d.ts.map +1 -0
- package/lib/Types/RichType.js +23 -0
- package/lib/Types/RichType.js.bak +23 -0
- package/lib/Types/RichType.js.map +1 -0
- package/lib/Types/Signal.d.ts +71 -82
- package/lib/Types/Signal.d.ts.map +1 -0
- package/lib/Types/Signal.js +2 -3
- package/lib/Types/Signal.js.map +1 -0
- package/lib/Types/Socket.d.ts +76 -81
- package/lib/Types/Socket.d.ts.map +1 -0
- package/lib/Types/Socket.js +3 -3
- package/lib/Types/Socket.js.map +1 -0
- package/lib/Types/State.d.ts +75 -19
- package/lib/Types/State.d.ts.map +1 -0
- package/lib/Types/State.js +56 -14
- package/lib/Types/State.js.map +1 -0
- package/lib/Types/USync.d.ts +8 -8
- package/lib/Types/USync.d.ts.map +1 -0
- package/lib/Types/USync.js +2 -3
- package/lib/Types/USync.js.map +1 -0
- package/lib/Types/index.d.ts +47 -62
- package/lib/Types/index.d.ts.map +1 -0
- package/lib/Types/index.js +26 -50
- package/lib/Types/index.js.map +1 -0
- package/lib/Utils/auth-utils.d.ts +13 -10
- package/lib/Utils/auth-utils.d.ts.map +1 -0
- package/lib/Utils/auth-utils.js +213 -454
- 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 +28 -0
- package/lib/Utils/browser-utils.js.map +1 -0
- package/lib/Utils/business.d.ts +14 -20
- package/lib/Utils/business.d.ts.map +1 -0
- package/lib/Utils/business.js +110 -134
- package/lib/Utils/business.js.map +1 -0
- package/lib/Utils/chat-utils.d.ts +88 -70
- package/lib/Utils/chat-utils.d.ts.map +1 -0
- package/lib/Utils/chat-utils.js +466 -403
- 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 +27 -46
- package/lib/Utils/crypto.d.ts.map +1 -0
- package/lib/Utils/crypto.js +117 -188
- package/lib/Utils/crypto.js.map +1 -0
- package/lib/Utils/decode-wa-message.d.ts +58 -45
- package/lib/Utils/decode-wa-message.d.ts.map +1 -0
- package/lib/Utils/decode-wa-message.js +213 -303
- package/lib/Utils/decode-wa-message.js.map +1 -0
- package/lib/Utils/event-buffer.d.ts +14 -17
- package/lib/Utils/event-buffer.d.ts.map +1 -0
- package/lib/Utils/event-buffer.js +321 -296
- package/lib/Utils/event-buffer.js.map +1 -0
- package/lib/Utils/generics.d.ts +66 -92
- package/lib/Utils/generics.d.ts.map +1 -0
- package/lib/Utils/generics.js +270 -436
- package/lib/Utils/generics.js.map +1 -0
- package/lib/Utils/history.d.ts +24 -23
- package/lib/Utils/history.d.ts.map +1 -0
- package/lib/Utils/history.js +106 -76
- 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 +24 -21
- package/lib/Utils/index.d.ts.map +1 -0
- package/lib/Utils/index.js +24 -41
- package/lib/Utils/index.js.map +1 -0
- package/lib/Utils/link-preview.d.ts +12 -14
- package/lib/Utils/link-preview.d.ts.map +1 -0
- package/lib/Utils/link-preview.js +40 -75
- package/lib/Utils/link-preview.js.map +1 -0
- package/lib/Utils/logger.d.ts +10 -11
- package/lib/Utils/logger.d.ts.map +1 -0
- package/lib/Utils/logger.js +3 -7
- package/lib/Utils/logger.js.map +1 -0
- package/lib/Utils/lt-hash.d.ts +8 -14
- package/lib/Utils/lt-hash.d.ts.map +1 -0
- package/lib/Utils/lt-hash.js +3 -53
- package/lib/Utils/lt-hash.js.map +1 -0
- package/lib/Utils/make-mutex.d.ts +7 -7
- package/lib/Utils/make-mutex.d.ts.map +1 -0
- package/lib/Utils/make-mutex.js +28 -44
- package/lib/Utils/make-mutex.js.map +1 -0
- package/lib/Utils/message-retry-manager.d.ts +115 -88
- package/lib/Utils/message-retry-manager.d.ts.map +1 -0
- package/lib/Utils/message-retry-manager.js +265 -160
- package/lib/Utils/message-retry-manager.js.map +1 -0
- package/lib/Utils/messages-media.d.ts +105 -107
- package/lib/Utils/messages-media.d.ts.map +1 -0
- package/lib/Utils/messages-media.js +548 -619
- package/lib/Utils/messages-media.js.bak +786 -0
- package/lib/Utils/messages-media.js.map +1 -0
- package/lib/Utils/messages.d.ts +52 -66
- package/lib/Utils/messages.d.ts.map +1 -0
- package/lib/Utils/messages.js +1730 -1558
- package/lib/Utils/messages.js.backup +1768 -0
- package/lib/Utils/messages.js.bak +1809 -0
- package/lib/Utils/messages.js.bak2 +893 -0
- package/lib/Utils/messages.js.bak3 +1183 -0
- package/lib/Utils/messages.js.map +1 -0
- package/lib/Utils/noise-handler.d.ts +18 -18
- package/lib/Utils/noise-handler.d.ts.map +1 -0
- package/lib/Utils/noise-handler.js +176 -130
- 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 +43 -32
- package/lib/Utils/process-message.d.ts.map +1 -0
- package/lib/Utils/process-message.js +484 -282
- 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/rich-message-utils.d.ts +49 -0
- package/lib/Utils/rich-message-utils.d.ts.map +1 -0
- package/lib/Utils/rich-message-utils.js +1220 -724
- package/lib/Utils/rich-message-utils.js.backup +706 -0
- package/lib/Utils/rich-message-utils.js.bak +246 -0
- package/lib/Utils/rich-message-utils.js.map +1 -0
- package/lib/Utils/rich-message-utils.js.original +1332 -0
- package/lib/Utils/signal.d.ts +37 -32
- package/lib/Utils/signal.d.ts.map +1 -0
- package/lib/Utils/signal.js +140 -105
- package/lib/Utils/signal.js.map +1 -0
- package/lib/Utils/stanza-ack.d.ts +11 -0
- package/lib/Utils/stanza-ack.d.ts.map +1 -0
- package/lib/Utils/stanza-ack.js +38 -0
- package/lib/Utils/stanza-ack.js.map +1 -0
- package/lib/Utils/sync-action-utils.d.ts +19 -0
- package/lib/Utils/sync-action-utils.d.ts.map +1 -0
- package/lib/Utils/sync-action-utils.js +49 -0
- package/lib/Utils/sync-action-utils.js.map +1 -0
- package/lib/Utils/tc-token-utils.d.ts +37 -0
- package/lib/Utils/tc-token-utils.d.ts.map +1 -0
- package/lib/Utils/tc-token-utils.js +163 -0
- package/lib/Utils/tc-token-utils.js.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +5 -5
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +70 -120
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
- package/lib/Utils/use-single-file-auth-state.d.ts +11 -13
- package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-single-file-auth-state.js +92 -66
- package/lib/Utils/use-single-file-auth-state.js.map +1 -0
- package/lib/Utils/use-sqlite-auth-state.d.ts +11 -0
- package/lib/Utils/use-sqlite-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-sqlite-auth-state.js +109 -0
- package/lib/Utils/use-sqlite-auth-state.js.map +1 -0
- package/lib/Utils/validate-connection.d.ts +11 -13
- package/lib/Utils/validate-connection.d.ts.map +1 -0
- package/lib/Utils/validate-connection.js +128 -113
- package/lib/Utils/validate-connection.js.map +1 -0
- package/lib/WABinary/constants.d.ts +25 -27
- package/lib/WABinary/constants.d.ts.map +1 -0
- package/lib/WABinary/constants.js +1451 -1292
- package/lib/WABinary/constants.js.bak +1373 -0
- package/lib/WABinary/constants.js.map +1 -0
- package/lib/WABinary/decode.d.ts +7 -9
- package/lib/WABinary/decode.d.ts.map +1 -0
- package/lib/WABinary/decode.js +163 -189
- package/lib/WABinary/decode.js.map +1 -0
- package/lib/WABinary/encode.d.ts +3 -3
- package/lib/WABinary/encode.d.ts.map +1 -0
- package/lib/WABinary/encode.js +110 -155
- package/lib/WABinary/encode.js.map +1 -0
- package/lib/WABinary/generic-utils.d.ts +14 -27
- package/lib/WABinary/generic-utils.d.ts.map +1 -0
- package/lib/WABinary/generic-utils.js +177 -105
- 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 -25
- package/lib/WABinary/index.js.map +1 -0
- package/lib/WABinary/jid-utils.d.ts +41 -51
- package/lib/WABinary/jid-utils.d.ts.map +1 -0
- package/lib/WABinary/jid-utils.js +83 -120
- package/lib/WABinary/jid-utils.js.map +1 -0
- package/lib/WABinary/types.d.ts +10 -13
- package/lib/WABinary/types.d.ts.map +1 -0
- package/lib/WABinary/types.js +2 -3
- package/lib/WABinary/types.js.map +1 -0
- package/lib/WAM/BinaryInfo.d.ts +8 -15
- package/lib/WAM/BinaryInfo.d.ts.map +1 -0
- package/lib/WAM/BinaryInfo.js +7 -14
- package/lib/WAM/BinaryInfo.js.map +1 -0
- package/lib/WAM/constants.d.ts +30 -37
- package/lib/WAM/constants.d.ts.map +1 -0
- package/lib/WAM/constants.js +19193 -11711
- package/lib/WAM/constants.js.map +1 -0
- package/lib/WAM/encode.d.ts +3 -3
- package/lib/WAM/encode.d.ts.map +1 -0
- package/lib/WAM/encode.js +95 -109
- 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 -23
- package/lib/WAM/index.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -9
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +37 -21
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +19 -22
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +18 -26
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +11 -12
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +12 -20
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +11 -12
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +16 -24
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +26 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +51 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +29 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/index.d.ts +6 -6
- package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/index.js +6 -26
- package/lib/WAUSync/Protocols/index.js.map +1 -0
- package/lib/WAUSync/USyncQuery.d.ts +27 -28
- package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
- package/lib/WAUSync/USyncQuery.js +68 -62
- package/lib/WAUSync/USyncQuery.js.map +1 -0
- package/lib/WAUSync/USyncUser.d.ts +15 -10
- package/lib/WAUSync/USyncUser.d.ts.map +1 -0
- package/lib/WAUSync/USyncUser.js +20 -19
- 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 -23
- package/lib/WAUSync/index.js.map +1 -0
- package/lib/index.d.ts +11 -12
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +12 -39
- package/lib/index.js.map +1 -0
- package/package.json +86 -42
|
@@ -1,24 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { Boom } from '@hapi/boom';
|
|
2
|
+
import { proto } from '../../WAProto/index.js';
|
|
3
|
+
import { areJidsSameUser, isHostedLidUser, isHostedPnUser, isJidBroadcast, isJidGroup, isJidMetaAI, isJidNewsletter, isJidStatusBroadcast, isLidUser, isPnUser
|
|
4
|
+
// transferDevice
|
|
5
|
+
} from '../WABinary/index.js';
|
|
6
|
+
import { unpadRandomMax16 } from './generics.js';
|
|
7
|
+
export const getDecryptionJid = async (sender, repository) => {
|
|
8
|
+
if (isLidUser(sender) || isHostedLidUser(sender)) {
|
|
9
|
+
return sender;
|
|
10
|
+
}
|
|
11
|
+
const mapped = await repository.lidMapping.getLIDForPN(sender);
|
|
12
|
+
return mapped || sender;
|
|
13
|
+
};
|
|
14
|
+
const storeMappingFromEnvelope = async (stanza, sender, repository, decryptionJid, logger) => {
|
|
15
|
+
// TODO: Handle hosted IDs
|
|
16
|
+
const { senderAlt } = extractAddressingContext(stanza);
|
|
17
|
+
if (senderAlt && isLidUser(senderAlt) && isPnUser(sender) && decryptionJid === sender) {
|
|
18
|
+
try {
|
|
19
|
+
await repository.lidMapping.storeLIDPNMappings([{ lid: senderAlt, pn: sender }]);
|
|
20
|
+
await repository.migrateSession(sender, senderAlt);
|
|
21
|
+
logger.debug({ sender, senderAlt }, 'Stored LID mapping from envelope');
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
logger.warn({ sender, senderAlt, error }, 'Failed to store LID mapping');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
export const NO_MESSAGE_FOUND_ERROR_TEXT = 'Message absent from node';
|
|
29
|
+
export const MISSING_KEYS_ERROR_TEXT = 'Key used already or never filled';
|
|
30
|
+
export const ACCOUNT_RESTRICTED_TEXT = 'Your account has been restricted';
|
|
31
|
+
// Retry configuration for failed decryption
|
|
32
|
+
export const DECRYPTION_RETRY_CONFIG = {
|
|
16
33
|
maxRetries: 3,
|
|
17
34
|
baseDelayMs: 100,
|
|
18
35
|
sessionRecordErrors: ['No session record', 'SessionError: No session record']
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const NACK_REASONS = {
|
|
36
|
+
};
|
|
37
|
+
/** NACK reason codes we send to the server (client → server) */
|
|
38
|
+
export const NACK_REASONS = {
|
|
39
|
+
SenderReachoutTimelocked: 463,
|
|
22
40
|
ParsingError: 487,
|
|
23
41
|
UnrecognizedStanza: 488,
|
|
24
42
|
UnrecognizedStanzaClass: 489,
|
|
@@ -32,337 +50,235 @@ const NACK_REASONS = {
|
|
|
32
50
|
UnsupportedAdminRevoke: 550,
|
|
33
51
|
UnsupportedLIDGroup: 551,
|
|
34
52
|
DBOperationFailed: 552
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Server-side error codes returned in ack stanzas (server → client) that we
|
|
56
|
+
* currently have dedicated handlers for. Extend as more handlers are added.
|
|
57
|
+
* Distinct from the client-side NackReason enum (WAWebCreateNackFromStanza).
|
|
58
|
+
*/
|
|
59
|
+
export const SERVER_ERROR_CODES = {
|
|
60
|
+
/**
|
|
61
|
+
* 1:1 message missing privacy token (tctoken). Usually means the account is
|
|
62
|
+
* restricted: WhatsApp blocks starting new chats but preserves existing ones,
|
|
63
|
+
* since established chats already carry a tctoken.
|
|
64
|
+
*/
|
|
65
|
+
MessageAccountRestriction: '463',
|
|
66
|
+
/** Stanza validation failure (SMAX_INVALID) — likely stale device session */
|
|
67
|
+
SmaxInvalid: '479'
|
|
68
|
+
};
|
|
69
|
+
export const extractAddressingContext = (stanza) => {
|
|
70
|
+
let senderAlt;
|
|
71
|
+
let recipientAlt;
|
|
72
|
+
const sender = stanza.attrs.participant || stanza.attrs.from;
|
|
73
|
+
const addressingMode = stanza.attrs.addressing_mode || (sender?.endsWith('lid') ? 'lid' : 'pn');
|
|
74
|
+
if (addressingMode === 'lid') {
|
|
75
|
+
// Message is LID-addressed: sender is LID, extract corresponding PN
|
|
76
|
+
// without device data
|
|
77
|
+
senderAlt = stanza.attrs.participant_pn || stanza.attrs.sender_pn || stanza.attrs.peer_recipient_pn;
|
|
78
|
+
recipientAlt = stanza.attrs.recipient_pn;
|
|
79
|
+
// with device data
|
|
80
|
+
//if (sender && senderAlt) senderAlt = transferDevice(sender, senderAlt)
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Message is PN-addressed: sender is PN, extract corresponding LID
|
|
84
|
+
// without device data
|
|
85
|
+
senderAlt = stanza.attrs.participant_lid || stanza.attrs.sender_lid || stanza.attrs.peer_recipient_lid;
|
|
86
|
+
recipientAlt = stanza.attrs.recipient_lid;
|
|
87
|
+
//with device data
|
|
88
|
+
//if (sender && senderAlt) senderAlt = transferDevice(sender, senderAlt)
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
addressingMode,
|
|
92
|
+
senderAlt,
|
|
93
|
+
recipientAlt
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Decode the received node as a message.
|
|
98
|
+
* @note this will only parse the message, not decrypt it
|
|
99
|
+
*/
|
|
100
|
+
export function decodeMessageNode(stanza, meId, meLid) {
|
|
101
|
+
let msgType;
|
|
102
|
+
let chatId;
|
|
103
|
+
let author;
|
|
104
|
+
let fromMe = false;
|
|
105
|
+
const msgId = stanza.attrs.id;
|
|
106
|
+
const from = stanza.attrs.from;
|
|
107
|
+
const participant = stanza.attrs.participant;
|
|
108
|
+
const recipient = stanza.attrs.recipient;
|
|
109
|
+
if (!msgId) {
|
|
110
|
+
throw new Boom('Invalid message stanza: missing id attribute', { data: stanza });
|
|
111
|
+
}
|
|
112
|
+
if (!from) {
|
|
113
|
+
throw new Boom('Invalid message stanza: missing from attribute', { data: stanza });
|
|
114
|
+
}
|
|
115
|
+
const addressingContext = extractAddressingContext(stanza);
|
|
116
|
+
const isMe = (jid) => areJidsSameUser(jid, meId);
|
|
117
|
+
const isMeLid = (jid) => areJidsSameUser(jid, meLid);
|
|
118
|
+
if (isPnUser(from) || isLidUser(from) || isHostedLidUser(from) || isHostedPnUser(from)) {
|
|
119
|
+
if (recipient && !isJidMetaAI(recipient)) {
|
|
120
|
+
if (!isMe(from) && !isMeLid(from)) {
|
|
121
|
+
throw new Boom('receipient present, but msg not from me', { data: stanza });
|
|
58
122
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
else {
|
|
62
|
-
chat_id = from
|
|
63
|
-
}
|
|
64
|
-
msg_type = 'chat'
|
|
65
|
-
author = from
|
|
66
|
-
} else if (WABinary_1.isLidUser(from)) {
|
|
67
|
-
if (recipient) {
|
|
68
|
-
if (!isMeLid(from)) {
|
|
69
|
-
throw new boom_1.Boom('receipient present, but msg not from me', { data: stanza })
|
|
123
|
+
if (isMe(from) || isMeLid(from)) {
|
|
124
|
+
fromMe = true;
|
|
70
125
|
}
|
|
71
|
-
|
|
72
|
-
chat_id = stanza.attrs.peer_recipient_pn
|
|
73
|
-
? WABinary_1.jidNormalizedUser(stanza.attrs.peer_recipient_pn)
|
|
74
|
-
: recipient
|
|
126
|
+
chatId = recipient;
|
|
75
127
|
}
|
|
76
128
|
else {
|
|
77
|
-
|
|
78
|
-
chat_id = stanza.attrs.sender_pn
|
|
79
|
-
? WABinary_1.jidNormalizedUser(stanza.attrs.sender_pn)
|
|
80
|
-
: stanza.attrs.peer_recipient_pn
|
|
81
|
-
? WABinary_1.jidNormalizedUser(stanza.attrs.peer_recipient_pn)
|
|
82
|
-
: from
|
|
129
|
+
chatId = from;
|
|
83
130
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|| stanza.attrs.participant_pn
|
|
89
|
-
|| stanza.attrs.peer_recipient_pn
|
|
90
|
-
|| from
|
|
91
|
-
} else if (WABinary_1.isJidGroup(from)) {
|
|
131
|
+
msgType = 'chat';
|
|
132
|
+
author = from;
|
|
133
|
+
}
|
|
134
|
+
else if (isJidGroup(from)) {
|
|
92
135
|
if (!participant) {
|
|
93
|
-
throw new
|
|
136
|
+
throw new Boom('No participant in group message');
|
|
137
|
+
}
|
|
138
|
+
if (isMe(participant) || isMeLid(participant)) {
|
|
139
|
+
fromMe = true;
|
|
94
140
|
}
|
|
95
|
-
|
|
96
|
-
author = participant
|
|
97
|
-
|
|
98
|
-
}
|
|
141
|
+
msgType = 'group';
|
|
142
|
+
author = participant;
|
|
143
|
+
chatId = from;
|
|
144
|
+
}
|
|
145
|
+
else if (isJidBroadcast(from)) {
|
|
99
146
|
if (!participant) {
|
|
100
|
-
throw new
|
|
147
|
+
throw new Boom('No participant in group message');
|
|
101
148
|
}
|
|
102
|
-
const isParticipantMe = isMe(participant)
|
|
103
|
-
if (
|
|
104
|
-
|
|
149
|
+
const isParticipantMe = isMe(participant);
|
|
150
|
+
if (isJidStatusBroadcast(from)) {
|
|
151
|
+
msgType = isParticipantMe ? 'direct_peer_status' : 'other_status';
|
|
105
152
|
}
|
|
106
153
|
else {
|
|
107
|
-
|
|
154
|
+
msgType = isParticipantMe ? 'peer_broadcast' : 'other_broadcast';
|
|
108
155
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
msg_type = 'newsletter'
|
|
113
|
-
chat_id = from
|
|
114
|
-
author = from
|
|
115
|
-
} else {
|
|
116
|
-
throw new boom_1.Boom('Unknown message type', { data: stanza })
|
|
156
|
+
fromMe = isParticipantMe;
|
|
157
|
+
chatId = from;
|
|
158
|
+
author = participant;
|
|
117
159
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const pushname = stanza?.attrs?.notify
|
|
160
|
+
else if (isJidNewsletter(from)) {
|
|
161
|
+
msgType = 'newsletter';
|
|
162
|
+
chatId = from;
|
|
163
|
+
author = from;
|
|
164
|
+
if (isMe(from) || isMeLid(from)) {
|
|
165
|
+
fromMe = true;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
throw new Boom('Unknown message type', { data: stanza });
|
|
170
|
+
}
|
|
171
|
+
const pushname = stanza?.attrs?.notify;
|
|
130
172
|
const key = {
|
|
131
|
-
remoteJid:
|
|
173
|
+
remoteJid: chatId,
|
|
174
|
+
remoteJidAlt: !isJidGroup(chatId) ? addressingContext.senderAlt : undefined,
|
|
175
|
+
remoteJidUsername: !isJidGroup(chatId)
|
|
176
|
+
? stanza.attrs.peer_recipient_username || stanza.attrs.recipient_username
|
|
177
|
+
: undefined,
|
|
132
178
|
fromMe,
|
|
133
179
|
id: msgId,
|
|
134
|
-
participant
|
|
135
|
-
|
|
136
|
-
|
|
180
|
+
participant,
|
|
181
|
+
participantAlt: isJidGroup(chatId) ? addressingContext.senderAlt : undefined,
|
|
182
|
+
participantUsername: stanza.attrs.participant ? stanza.attrs.participant_username : undefined,
|
|
183
|
+
addressingMode: addressingContext.addressingMode,
|
|
184
|
+
...(msgType === 'newsletter' && stanza.attrs.server_id ? { server_id: stanza.attrs.server_id } : {})
|
|
185
|
+
};
|
|
137
186
|
const fullMessage = {
|
|
138
187
|
key,
|
|
188
|
+
category: stanza.attrs.category,
|
|
139
189
|
messageTimestamp: +stanza.attrs.t,
|
|
140
190
|
pushName: pushname,
|
|
141
|
-
broadcast:
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
if (msg_type === 'newsletter') {
|
|
145
|
-
fullMessage.newsletter_server_id = +stanza.attrs?.server_id
|
|
146
|
-
}
|
|
191
|
+
broadcast: isJidBroadcast(from)
|
|
192
|
+
};
|
|
147
193
|
if (key.fromMe) {
|
|
148
|
-
fullMessage.status =
|
|
149
|
-
}
|
|
150
|
-
if (!key.fromMe) {
|
|
151
|
-
fullMessage.platform = messages_1.getDevice(key.id)
|
|
194
|
+
fullMessage.status = proto.WebMessageInfo.Status.SERVER_ACK;
|
|
152
195
|
}
|
|
153
196
|
return {
|
|
154
197
|
fullMessage,
|
|
155
198
|
author,
|
|
156
|
-
sender:
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const getDecryptionJid = async (sender, repository) => {
|
|
161
|
-
if (WABinary_1.isLidUser(sender)) {
|
|
162
|
-
return sender
|
|
163
|
-
}
|
|
164
|
-
const mapped = await repository.lidMapping.getLIDForPN(sender)
|
|
165
|
-
if (!mapped) {
|
|
166
|
-
return sender
|
|
167
|
-
}
|
|
168
|
-
// FIX: pontalabs gak punya migrateSession (beda dari levvleys) yang
|
|
169
|
-
// mindahin sesi Signal dari address PN ke address LID begitu mapping
|
|
170
|
-
// disimpan. Jadi mapping doang gak jamin ada sesi beneran di address LID
|
|
171
|
-
// itu -- kalau dipaksa pakai, decrypt gagal "No session record" walau
|
|
172
|
-
// pesannya normal (msg, bukan pkmsg). Ini yang bikin pesan self-chat/PN
|
|
173
|
-
// ilang total: begitu mapping ke-cache, semua decrypt berikutnya diarahin
|
|
174
|
-
// ke LID yang sesinya gak pernah ada. Makanya sebelum pakai LID, pastikan
|
|
175
|
-
// dulu ada sesi aktif di situ; kalau enggak, tetep pakai address asli (PN).
|
|
176
|
-
try {
|
|
177
|
-
const lidSession = await repository.validateSession(mapped)
|
|
178
|
-
if (lidSession.exists) {
|
|
179
|
-
return mapped
|
|
180
|
-
}
|
|
181
|
-
} catch {
|
|
182
|
-
// biarin jatuh ke fallback sender di bawah kalau validateSession error
|
|
183
|
-
}
|
|
184
|
-
return sender
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// FIX: pontalabs sebelumnya gak pernah menyimpan mapping LID<->PN saat pesan
|
|
188
|
-
// masuk (levvleys punya storeMappingFromEnvelope, di sini gak ada). Akibatnya
|
|
189
|
-
// untuk kontak yang pakai addressing LID, getDecryptionJid bisa gagal nemuin
|
|
190
|
-
// sesi yang benar secara intermiten (tergantung cache mapping ada atau belum),
|
|
191
|
-
// bikin decrypt gagal -> pesan jadi CIPHERTEXT -> gak pernah nyampe ke bot.
|
|
192
|
-
const extractSenderAlt = (stanza) => {
|
|
193
|
-
const sender = stanza.attrs.participant || stanza.attrs.from
|
|
194
|
-
const addressingMode = stanza.attrs.addressing_mode || (sender?.endsWith('lid') ? 'lid' : 'pn')
|
|
195
|
-
if (addressingMode === 'lid') {
|
|
196
|
-
return stanza.attrs.participant_pn || stanza.attrs.sender_pn || stanza.attrs.peer_recipient_pn
|
|
197
|
-
}
|
|
198
|
-
return stanza.attrs.participant_lid || stanza.attrs.sender_lid || stanza.attrs.peer_recipient_lid
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const storeMappingFromEnvelope = async (stanza, sender, repository, decryptionJid, logger) => {
|
|
202
|
-
const senderAlt = extractSenderAlt(stanza)
|
|
203
|
-
if (senderAlt && WABinary_1.isLidUser(senderAlt) && WABinary_1.isJidUser(sender) && decryptionJid === sender) {
|
|
204
|
-
try {
|
|
205
|
-
await repository.lidMapping.storeLIDPNMappings([{ lid: senderAlt, pn: sender }])
|
|
206
|
-
if (typeof repository.migrateSession === 'function') {
|
|
207
|
-
await repository.migrateSession(sender, senderAlt)
|
|
208
|
-
}
|
|
209
|
-
logger.debug({ sender, senderAlt }, 'Stored LID mapping from envelope')
|
|
210
|
-
} catch (error) {
|
|
211
|
-
logger.warn({ sender, senderAlt, error }, 'Failed to store LID mapping')
|
|
212
|
-
}
|
|
213
|
-
}
|
|
199
|
+
sender: msgType === 'chat' ? author : chatId
|
|
200
|
+
};
|
|
214
201
|
}
|
|
215
|
-
|
|
216
|
-
const
|
|
217
|
-
const { fullMessage, author, sender } = decodeMessageNode(stanza, meId, meLid)
|
|
202
|
+
export const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
|
|
203
|
+
const { fullMessage, author, sender } = decodeMessageNode(stanza, meId, meLid);
|
|
218
204
|
return {
|
|
219
205
|
fullMessage,
|
|
220
206
|
category: stanza.attrs.category,
|
|
221
207
|
author,
|
|
222
208
|
async decrypt() {
|
|
223
|
-
let decryptables = 0
|
|
209
|
+
let decryptables = 0;
|
|
224
210
|
if (Array.isArray(stanza.content)) {
|
|
225
|
-
|
|
226
|
-
// skmsg. Root cause "bot diam/nunggu" pas ada member baru join grup lalu
|
|
227
|
-
// langsung kirim pesan: satu stanza berisi 2 node <enc> - satu tipe
|
|
228
|
-
// pkmsg/msg (isinya SenderKeyDistributionMessage buat kamu) dan satu lagi
|
|
229
|
-
// tipe skmsg (isi pesan asli, dienkripsi pakai sender-key grup). Urutan
|
|
230
|
-
// array stanza.content dari server TIDAK dijamin naruh pkmsg/msg duluan.
|
|
231
|
-
// Kalau skmsg kebetulan diproses duluan, sender-key belum ada di store ->
|
|
232
|
-
// decryptGroupMessage() gagal "No SenderKeyRecord found" -> pesan pertama
|
|
233
|
-
// dari member baru selalu gagal decrypt & jadi stub CIPHERTEXT, padahal
|
|
234
|
-
// SKDM-nya baru "sampai" sepersekian detik kemudian di iterasi berikutnya.
|
|
235
|
-
// Reorder di sini (stable, gak ubah urutan relatif node lain seperti
|
|
236
|
-
// verified_name/unavailable) supaya skmsg selalu diproses PALING TERAKHIR,
|
|
237
|
-
// setelah semua kemungkinan SKDM sudah didaftarkan ke sender-key store.
|
|
238
|
-
const orderedContent = [
|
|
239
|
-
...stanza.content.filter(({ tag, attrs }) => !(tag === 'enc' && attrs.type === 'skmsg')),
|
|
240
|
-
...stanza.content.filter(({ tag, attrs }) => tag === 'enc' && attrs.type === 'skmsg')
|
|
241
|
-
]
|
|
242
|
-
for (const { tag, attrs, content } of orderedContent) {
|
|
211
|
+
for (const { tag, attrs, content } of stanza.content) {
|
|
243
212
|
if (tag === 'verified_name' && content instanceof Uint8Array) {
|
|
244
|
-
const cert =
|
|
245
|
-
const details =
|
|
246
|
-
fullMessage.verifiedBizName = details.verifiedName
|
|
213
|
+
const cert = proto.VerifiedNameCertificate.decode(content);
|
|
214
|
+
const details = proto.VerifiedNameCertificate.Details.decode(cert.details);
|
|
215
|
+
fullMessage.verifiedBizName = details.verifiedName;
|
|
247
216
|
}
|
|
248
217
|
if (tag === 'unavailable' && attrs.type === 'view_once') {
|
|
249
|
-
fullMessage.key.isViewOnce = true;
|
|
218
|
+
fullMessage.key.isViewOnce = true; // TODO: remove from here and add a STUB TYPE
|
|
250
219
|
}
|
|
251
220
|
if (attrs.count && tag === 'enc') {
|
|
252
|
-
fullMessage.retryCount = Number(attrs.count)
|
|
221
|
+
fullMessage.retryCount = Number(attrs.count);
|
|
253
222
|
}
|
|
254
223
|
if (tag !== 'enc' && tag !== 'plaintext') {
|
|
255
|
-
continue
|
|
224
|
+
continue;
|
|
256
225
|
}
|
|
257
226
|
if (!(content instanceof Uint8Array)) {
|
|
258
|
-
continue
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
decryptables += 1;
|
|
230
|
+
let msgBuffer;
|
|
231
|
+
const decryptionJid = await getDecryptionJid(author, repository);
|
|
232
|
+
if (tag !== 'plaintext') {
|
|
233
|
+
// TODO: Handle hosted devices
|
|
234
|
+
await storeMappingFromEnvelope(stanza, author, repository, decryptionJid, logger);
|
|
259
235
|
}
|
|
260
|
-
decryptables += 1
|
|
261
|
-
let msgBuffer
|
|
262
236
|
try {
|
|
263
|
-
const e2eType = tag === 'plaintext' ? 'plaintext' : attrs.type
|
|
237
|
+
const e2eType = tag === 'plaintext' ? 'plaintext' : attrs.type;
|
|
264
238
|
switch (e2eType) {
|
|
265
239
|
case 'skmsg':
|
|
266
240
|
msgBuffer = await repository.decryptGroupMessage({
|
|
267
241
|
group: sender,
|
|
268
242
|
authorJid: author,
|
|
269
243
|
msg: content
|
|
270
|
-
})
|
|
271
|
-
break
|
|
244
|
+
});
|
|
245
|
+
break;
|
|
272
246
|
case 'pkmsg':
|
|
273
|
-
case 'msg':
|
|
274
|
-
const decryptionJid = await getDecryptionJid(author, repository)
|
|
275
|
-
await storeMappingFromEnvelope(stanza, author, repository, decryptionJid, logger)
|
|
247
|
+
case 'msg':
|
|
276
248
|
msgBuffer = await repository.decryptMessage({
|
|
277
249
|
jid: decryptionJid,
|
|
278
250
|
type: e2eType,
|
|
279
251
|
ciphertext: content
|
|
280
|
-
})
|
|
281
|
-
break
|
|
282
|
-
}
|
|
252
|
+
});
|
|
253
|
+
break;
|
|
283
254
|
case 'plaintext':
|
|
284
|
-
msgBuffer = content
|
|
285
|
-
break
|
|
255
|
+
msgBuffer = content;
|
|
256
|
+
break;
|
|
286
257
|
default:
|
|
287
|
-
throw new Error(`Unknown e2e type: ${e2eType}`)
|
|
258
|
+
throw new Error(`Unknown e2e type: ${e2eType}`);
|
|
288
259
|
}
|
|
289
|
-
let msg =
|
|
290
|
-
msg = msg.deviceSentMessage?.message || msg
|
|
260
|
+
let msg = proto.Message.decode(e2eType !== 'plaintext' ? unpadRandomMax16(msgBuffer) : msgBuffer);
|
|
261
|
+
msg = msg.deviceSentMessage?.message || msg;
|
|
291
262
|
if (msg.senderKeyDistributionMessage) {
|
|
263
|
+
//eslint-disable-next-line max-depth
|
|
292
264
|
try {
|
|
293
265
|
await repository.processSenderKeyDistributionMessage({
|
|
294
266
|
authorJid: author,
|
|
295
267
|
item: msg.senderKeyDistributionMessage
|
|
296
|
-
})
|
|
297
|
-
}
|
|
298
|
-
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
logger.error({ key: fullMessage.key, err }, 'failed to process sender key distribution message');
|
|
299
272
|
}
|
|
300
273
|
}
|
|
301
274
|
if (fullMessage.message) {
|
|
302
|
-
Object.assign(fullMessage.message, msg)
|
|
303
|
-
} else {
|
|
304
|
-
fullMessage.message = msg
|
|
275
|
+
Object.assign(fullMessage.message, msg);
|
|
305
276
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
const message = fullMessage.message?.[mtype]
|
|
309
|
-
const contextInfo = message?.contextInfo
|
|
310
|
-
const mentionedJid = contextInfo?.mentionedJid
|
|
311
|
-
const processMessageLIDs = async (msgObj, msgType) => {
|
|
312
|
-
if (!msgObj?.contextInfo) return false
|
|
313
|
-
const contextInfo = msgObj.contextInfo
|
|
314
|
-
const mentionedJid = contextInfo.mentionedJid
|
|
315
|
-
let needsUpdate = false
|
|
316
|
-
if (Array.isArray(mentionedJid) && mentionedJid.length > 0) {
|
|
317
|
-
const metadata = await global.groupMetadataCache(sender)
|
|
318
|
-
const updatedMentionedJid = []
|
|
319
|
-
for (const mentionedLid of mentionedJid) {
|
|
320
|
-
if (typeof mentionedLid === "string" && mentionedLid.endsWith('@lid')) {
|
|
321
|
-
const found = metadata.participants.find(p => p.lid === mentionedLid)
|
|
322
|
-
if (found) {
|
|
323
|
-
updatedMentionedJid.push(found.id)
|
|
324
|
-
if (msgObj.text) {
|
|
325
|
-
msgObj.text = msgObj.text.replace(new RegExp(`@${mentionedLid.split("@")[0]}`, "g"), `@${found.id.split("@")[0]}`);
|
|
326
|
-
} else if (msgObj.caption) {
|
|
327
|
-
msgObj.caption = msgObj.caption.replace(new RegExp(`@${mentionedLid.split("@")[0]}`, "g"), `@${found.id.split("@")[0]}`);
|
|
328
|
-
}
|
|
329
|
-
} else {
|
|
330
|
-
const lid = WABinary_1.jidNormalizedUser(mentionedLid)
|
|
331
|
-
const mentioned_jid = await repository.lidMapping.getPNForLID(mentionedLid)
|
|
332
|
-
if (mentioned_jid) {
|
|
333
|
-
const pn = WABinary_1.jidNormalizedUser(mentioned_jid)
|
|
334
|
-
await repository.lidMapping.storeLIDPNMappings([{ lid, pn }])
|
|
335
|
-
updatedMentionedJid.push(pn)
|
|
336
|
-
if (msgObj.text) {
|
|
337
|
-
msgObj.text = msgObj.text.replace(new RegExp(`@${mentionedLid.split("@")[0]}`, "g"), `@${pn.split("@")[0]}`);
|
|
338
|
-
} else if (msgObj.caption) {
|
|
339
|
-
msgObj.caption = msgObj.caption.replace(new RegExp(`@${mentionedLid.split("@")[0]}`, "g"), `@${pn.split("@")[0]}`);
|
|
340
|
-
}
|
|
341
|
-
} else {
|
|
342
|
-
updatedMentionedJid.push(mentionedLid)
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
needsUpdate = true
|
|
346
|
-
} else {
|
|
347
|
-
updatedMentionedJid.push(mentionedLid)
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
if (needsUpdate) {
|
|
351
|
-
msgObj.contextInfo.mentionedJid = updatedMentionedJid
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
return needsUpdate
|
|
355
|
-
}
|
|
356
|
-
const quotedMessage = contextInfo?.quotedMessage
|
|
357
|
-
if (quotedMessage) {
|
|
358
|
-
const quotedMtype = getTypeMessage(quotedMessage)
|
|
359
|
-
const quotedMsgObj = quotedMessage[quotedMtype]
|
|
360
|
-
if (quotedMsgObj?.contextInfo) {
|
|
361
|
-
await processMessageLIDs(quotedMsgObj, quotedMtype)
|
|
362
|
-
}
|
|
363
|
-
}
|
|
277
|
+
else {
|
|
278
|
+
fullMessage.message = msg;
|
|
364
279
|
}
|
|
365
|
-
}
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
366
282
|
const errorContext = {
|
|
367
283
|
key: fullMessage.key,
|
|
368
284
|
err,
|
|
@@ -370,32 +286,26 @@ const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
|
|
|
370
286
|
sender,
|
|
371
287
|
author,
|
|
372
288
|
isSessionRecordError: isSessionRecordError(err)
|
|
373
|
-
}
|
|
374
|
-
logger.error(errorContext, 'failed to decrypt message')
|
|
375
|
-
fullMessage.messageStubType =
|
|
376
|
-
fullMessage.messageStubParameters = [err.message.toString()]
|
|
289
|
+
};
|
|
290
|
+
logger.error(errorContext, 'failed to decrypt message');
|
|
291
|
+
fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT;
|
|
292
|
+
fullMessage.messageStubParameters = [err.message.toString()];
|
|
377
293
|
}
|
|
378
294
|
}
|
|
379
295
|
}
|
|
380
|
-
|
|
296
|
+
// if nothing was found to decrypt
|
|
381
297
|
if (!decryptables && !fullMessage.key?.isViewOnce) {
|
|
382
|
-
fullMessage.messageStubType =
|
|
383
|
-
fullMessage.messageStubParameters = [NO_MESSAGE_FOUND_ERROR_TEXT]
|
|
298
|
+
fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT;
|
|
299
|
+
fullMessage.messageStubParameters = [NO_MESSAGE_FOUND_ERROR_TEXT];
|
|
384
300
|
}
|
|
385
301
|
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
|
|
302
|
+
};
|
|
303
|
+
};
|
|
304
|
+
/**
|
|
305
|
+
* Utility function to check if an error is related to missing session record
|
|
306
|
+
*/
|
|
389
307
|
function isSessionRecordError(error) {
|
|
390
|
-
const errorMessage = error?.message || error?.toString() || ''
|
|
391
|
-
return DECRYPTION_RETRY_CONFIG.sessionRecordErrors.some(errorPattern => errorMessage.includes(errorPattern))
|
|
308
|
+
const errorMessage = error?.message || error?.toString() || '';
|
|
309
|
+
return DECRYPTION_RETRY_CONFIG.sessionRecordErrors.some(errorPattern => errorMessage.includes(errorPattern));
|
|
392
310
|
}
|
|
393
|
-
|
|
394
|
-
module.exports = {
|
|
395
|
-
NACK_REASONS,
|
|
396
|
-
decodeMessageNode,
|
|
397
|
-
decryptMessageNode,
|
|
398
|
-
MISSING_KEYS_ERROR_TEXT,
|
|
399
|
-
DECRYPTION_RETRY_CONFIG,
|
|
400
|
-
NO_MESSAGE_FOUND_ERROR_TEXT
|
|
401
|
-
}
|
|
311
|
+
//# sourceMappingURL=decode-wa-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode-wa-message.js","sourceRoot":"","sources":["../../src/Utils/decode-wa-message.ts"],"names":[],"mappings":"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"}
|