@violetix/baileys 0.0.0-stage → 0.4.0
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 +22 -0
- package/README.md +3017 -2
- package/WAProto/index.d.ts +15932 -0
- package/WAProto/index.js +115856 -0
- package/engine-requirements.js +13 -0
- package/lib/Defaults/index.d.ts +145 -0
- package/lib/Defaults/index.d.ts.map +1 -0
- package/lib/Defaults/index.js +157 -0
- package/lib/Defaults/index.js.map +1 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
- package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
- package/lib/Signal/Group/ciphertext-message.js +12 -0
- package/lib/Signal/Group/ciphertext-message.js.map +1 -0
- package/lib/Signal/Group/group-session-builder.d.ts +8 -0
- package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
- package/lib/Signal/Group/group-session-builder.js +30 -0
- package/lib/Signal/Group/group-session-builder.js.map +1 -0
- package/lib/Signal/Group/group_cipher.d.ts +11 -0
- package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
- package/lib/Signal/Group/group_cipher.js +82 -0
- package/lib/Signal/Group/group_cipher.js.map +1 -0
- package/lib/Signal/Group/index.d.ts +12 -0
- package/lib/Signal/Group/index.d.ts.map +1 -0
- package/lib/Signal/Group/index.js +12 -0
- package/lib/Signal/Group/index.js.map +1 -0
- package/lib/Signal/Group/keyhelper.d.ts +7 -0
- package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
- package/lib/Signal/Group/keyhelper.js +18 -0
- package/lib/Signal/Group/keyhelper.js.map +1 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
- package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-chain-key.js +26 -0
- package/lib/Signal/Group/sender-chain-key.js.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +63 -0
- package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-message.d.ts +19 -0
- package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-message.js +66 -0
- package/lib/Signal/Group/sender-key-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-name.d.ts +12 -0
- package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-name.js +48 -0
- package/lib/Signal/Group/sender-key-name.js.map +1 -0
- package/lib/Signal/Group/sender-key-record.d.ts +13 -0
- package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-record.js +41 -0
- package/lib/Signal/Group/sender-key-record.js.map +1 -0
- package/lib/Signal/Group/sender-key-state.d.ts +17 -0
- package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-state.js +84 -0
- package/lib/Signal/Group/sender-key-state.js.map +1 -0
- package/lib/Signal/Group/sender-message-key.d.ts +12 -0
- package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-message-key.js +26 -0
- package/lib/Signal/Group/sender-message-key.js.map +1 -0
- package/lib/Signal/libsignal.d.ts +55 -0
- package/lib/Signal/libsignal.d.ts.map +1 -0
- package/lib/Signal/libsignal.js +403 -0
- package/lib/Signal/libsignal.js.map +1 -0
- package/lib/Signal/lid-mapping.d.ts +21 -0
- package/lib/Signal/lid-mapping.d.ts.map +1 -0
- package/lib/Signal/lid-mapping.js +277 -0
- package/lib/Signal/lid-mapping.js.map +1 -0
- package/lib/Socket/Client/index.d.ts +3 -0
- package/lib/Socket/Client/index.d.ts.map +1 -0
- package/lib/Socket/Client/index.js +3 -0
- package/lib/Socket/Client/index.js.map +1 -0
- package/lib/Socket/Client/types.d.ts +6 -0
- package/lib/Socket/Client/types.d.ts.map +1 -0
- package/lib/Socket/Client/types.js +93 -0
- package/lib/Socket/Client/types.js.map +1 -0
- package/lib/Socket/Client/websocket.d.ts +13 -0
- package/lib/Socket/Client/websocket.d.ts.map +1 -0
- package/lib/Socket/Client/websocket.js +57 -0
- package/lib/Socket/Client/websocket.js.map +1 -0
- package/lib/Socket/business.d.ts +428 -0
- package/lib/Socket/business.d.ts.map +1 -0
- package/lib/Socket/business.js +380 -0
- package/lib/Socket/business.js.map +1 -0
- package/lib/Socket/chats.d.ts +176 -0
- package/lib/Socket/chats.d.ts.map +1 -0
- package/lib/Socket/chats.js +1238 -0
- package/lib/Socket/chats.js.map +1 -0
- package/lib/Socket/communities.d.ts +595 -0
- package/lib/Socket/communities.d.ts.map +1 -0
- package/lib/Socket/communities.js +432 -0
- package/lib/Socket/communities.js.map +1 -0
- package/lib/Socket/graphql.js +908 -0
- package/lib/Socket/groups.d.ts +318 -0
- package/lib/Socket/groups.d.ts.map +1 -0
- package/lib/Socket/groups.js +364 -0
- package/lib/Socket/groups.js.map +1 -0
- package/lib/Socket/index.d.ts +947 -0
- package/lib/Socket/index.d.ts.map +1 -0
- package/lib/Socket/index.js +19 -0
- package/lib/Socket/index.js.map +1 -0
- package/lib/Socket/interop.js +562 -0
- package/lib/Socket/managed-account.js +210 -0
- package/lib/Socket/messages-recv.d.ts +367 -0
- package/lib/Socket/messages-recv.d.ts.map +1 -0
- package/lib/Socket/messages-recv.js +2199 -0
- package/lib/Socket/messages-recv.js.map +1 -0
- package/lib/Socket/messages-send.d.ts +364 -0
- package/lib/Socket/messages-send.d.ts.map +1 -0
- package/lib/Socket/messages-send.js +1631 -0
- package/lib/Socket/messages-send.js.map +1 -0
- package/lib/Socket/mex.d.ts +2 -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 +315 -0
- package/lib/Socket/newsletter.d.ts.map +1 -0
- package/lib/Socket/newsletter.js +235 -0
- package/lib/Socket/newsletter.js.map +1 -0
- package/lib/Socket/privacy.js +448 -0
- package/lib/Socket/registration.js +430 -0
- package/lib/Socket/socket.d.ts +99 -0
- package/lib/Socket/socket.d.ts.map +1 -0
- package/lib/Socket/socket.js +1290 -0
- package/lib/Socket/socket.js.map +1 -0
- package/lib/Store/index.d.ts +4 -0
- package/lib/Store/index.d.ts.map +1 -0
- package/lib/Store/index.js +4 -0
- package/lib/Store/index.js.map +1 -0
- package/lib/Store/make-in-memory-store.d.ts +63 -0
- package/lib/Store/make-in-memory-store.d.ts.map +1 -0
- package/lib/Store/make-in-memory-store.js +462 -0
- package/lib/Store/make-in-memory-store.js.map +1 -0
- package/lib/Store/make-ordered-dictionary.d.ts +13 -0
- package/lib/Store/make-ordered-dictionary.d.ts.map +1 -0
- package/lib/Store/make-ordered-dictionary.js +79 -0
- package/lib/Store/make-ordered-dictionary.js.map +1 -0
- package/lib/Store/object-repository.d.ts +11 -0
- package/lib/Store/object-repository.d.ts.map +1 -0
- package/lib/Store/object-repository.js +24 -0
- package/lib/Store/object-repository.js.map +1 -0
- package/lib/Types/Auth.d.ts +60 -0
- package/lib/Types/Auth.d.ts.map +1 -0
- package/lib/Types/Auth.js +2 -0
- package/lib/Types/Auth.js.map +1 -0
- package/lib/Types/Bussines.d.ts +9 -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 +22 -0
- package/lib/Types/Call.d.ts.map +1 -0
- package/lib/Types/Call.js +2 -0
- package/lib/Types/Call.js.map +1 -0
- package/lib/Types/Chat.d.ts +3 -0
- package/lib/Types/Chat.d.ts.map +1 -0
- package/lib/Types/Chat.js +8 -0
- package/lib/Types/Chat.js.map +1 -0
- package/lib/Types/Contact.d.ts +11 -0
- package/lib/Types/Contact.d.ts.map +1 -0
- package/lib/Types/Contact.js +2 -0
- package/lib/Types/Contact.js.map +1 -0
- package/lib/Types/Events.d.ts +41 -0
- package/lib/Types/Events.d.ts.map +1 -0
- package/lib/Types/Events.js +2 -0
- package/lib/Types/Events.js.map +1 -0
- package/lib/Types/GroupMetadata.d.ts +36 -0
- package/lib/Types/GroupMetadata.d.ts.map +1 -0
- package/lib/Types/GroupMetadata.js +2 -0
- package/lib/Types/GroupMetadata.js.map +1 -0
- package/lib/Types/Label.d.ts +3 -0
- package/lib/Types/Label.d.ts.map +1 -0
- package/lib/Types/Label.js +25 -0
- package/lib/Types/Label.js.map +1 -0
- package/lib/Types/LabelAssociation.d.ts +3 -0
- package/lib/Types/LabelAssociation.d.ts.map +1 -0
- package/lib/Types/LabelAssociation.js +7 -0
- package/lib/Types/LabelAssociation.js.map +1 -0
- package/lib/Types/Message.d.ts +22 -0
- package/lib/Types/Message.d.ts.map +1 -0
- package/lib/Types/Message.js +18 -0
- package/lib/Types/Message.js.map +1 -0
- package/lib/Types/Mex.d.ts +3 -0
- package/lib/Types/Mex.d.ts.map +1 -0
- package/lib/Types/Mex.js +49 -0
- package/lib/Types/Mex.js.map +1 -0
- package/lib/Types/Product.d.ts +5 -0
- package/lib/Types/Product.d.ts.map +1 -0
- package/lib/Types/Product.js +2 -0
- package/lib/Types/Product.js.map +1 -0
- package/lib/Types/RichType.d.ts +3 -0
- package/lib/Types/RichType.d.ts.map +1 -0
- package/lib/Types/RichType.js +23 -0
- package/lib/Types/RichType.js.map +1 -0
- package/lib/Types/Signal.d.ts +10 -0
- package/lib/Types/Signal.d.ts.map +1 -0
- package/lib/Types/Signal.js +2 -0
- package/lib/Types/Signal.js.map +1 -0
- package/lib/Types/Socket.d.ts +33 -0
- package/lib/Types/Socket.d.ts.map +1 -0
- package/lib/Types/Socket.js +2 -0
- package/lib/Types/Socket.js.map +1 -0
- package/lib/Types/State.d.ts +6 -0
- package/lib/Types/State.d.ts.map +1 -0
- package/lib/Types/State.js +56 -0
- package/lib/Types/State.js.map +1 -0
- package/lib/Types/USync.d.ts +9 -0
- package/lib/Types/USync.d.ts.map +1 -0
- package/lib/Types/USync.js +2 -0
- package/lib/Types/USync.js.map +1 -0
- package/lib/Types/index.d.ts +16 -0
- package/lib/Types/index.d.ts.map +1 -0
- package/lib/Types/index.js +26 -0
- package/lib/Types/index.js.map +1 -0
- package/lib/Utils/a2ui.d.ts +50 -0
- package/lib/Utils/a2ui.js +168 -0
- package/lib/Utils/anchor-guard.d.ts +71 -0
- package/lib/Utils/anchor-guard.js +404 -0
- package/lib/Utils/async-utils.js +7 -0
- package/lib/Utils/auth-utils.d.ts +59 -0
- package/lib/Utils/auth-utils.d.ts.map +1 -0
- package/lib/Utils/auth-utils.js +306 -0
- package/lib/Utils/auth-utils.js.map +1 -0
- package/lib/Utils/browser-utils.d.ts +10 -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 +50 -0
- package/lib/Utils/business.d.ts.map +1 -0
- package/lib/Utils/business.js +245 -0
- package/lib/Utils/business.js.map +1 -0
- package/lib/Utils/chat-utils.d.ts +409 -0
- package/lib/Utils/chat-utils.d.ts.map +1 -0
- package/lib/Utils/chat-utils.js +872 -0
- package/lib/Utils/chat-utils.js.map +1 -0
- package/lib/Utils/companion-reg-client-utils.d.ts +10 -0
- package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
- package/lib/Utils/companion-reg-client-utils.js +69 -0
- package/lib/Utils/companion-reg-client-utils.js.map +1 -0
- package/lib/Utils/crypto-worker.js +20 -0
- package/lib/Utils/crypto.d.ts +40 -0
- package/lib/Utils/crypto.d.ts.map +1 -0
- package/lib/Utils/crypto.js +118 -0
- package/lib/Utils/crypto.js.map +1 -0
- package/lib/Utils/decode-wa-message.d.ts +85 -0
- package/lib/Utils/decode-wa-message.d.ts.map +1 -0
- package/lib/Utils/decode-wa-message.js +467 -0
- package/lib/Utils/decode-wa-message.js.map +1 -0
- package/lib/Utils/event-buffer.d.ts +13 -0
- package/lib/Utils/event-buffer.d.ts.map +1 -0
- package/lib/Utils/event-buffer.js +651 -0
- package/lib/Utils/event-buffer.js.map +1 -0
- package/lib/Utils/generics.d.ts +64 -0
- package/lib/Utils/generics.d.ts.map +1 -0
- package/lib/Utils/generics.js +442 -0
- package/lib/Utils/generics.js.map +1 -0
- package/lib/Utils/history.d.ts +77 -0
- package/lib/Utils/history.d.ts.map +1 -0
- package/lib/Utils/history.js +188 -0
- package/lib/Utils/history.js.map +1 -0
- package/lib/Utils/identity-change-handler.d.ts +14 -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/ignore-key.d.ts +51 -0
- package/lib/Utils/ignore-key.js +174 -0
- package/lib/Utils/index.d.ts +29 -0
- package/lib/Utils/index.d.ts.map +1 -0
- package/lib/Utils/index.js +29 -0
- package/lib/Utils/index.js.map +1 -0
- package/lib/Utils/link-preview.d.ts +13 -0
- package/lib/Utils/link-preview.d.ts.map +1 -0
- package/lib/Utils/link-preview.js +85 -0
- package/lib/Utils/link-preview.js.map +1 -0
- package/lib/Utils/listener-guard.js +48 -0
- package/lib/Utils/logger.d.ts +3 -0
- package/lib/Utils/logger.d.ts.map +1 -0
- package/lib/Utils/logger.js +3 -0
- package/lib/Utils/logger.js.map +1 -0
- package/lib/Utils/lt-hash.d.ts +7 -0
- package/lib/Utils/lt-hash.d.ts.map +1 -0
- package/lib/Utils/lt-hash.js +8 -0
- package/lib/Utils/lt-hash.js.map +1 -0
- package/lib/Utils/make-mutex.d.ts +7 -0
- package/lib/Utils/make-mutex.d.ts.map +1 -0
- package/lib/Utils/make-mutex.js +33 -0
- package/lib/Utils/make-mutex.js.map +1 -0
- package/lib/Utils/message-retry-manager.d.ts +80 -0
- package/lib/Utils/message-retry-manager.d.ts.map +1 -0
- package/lib/Utils/message-retry-manager.js +285 -0
- package/lib/Utils/message-retry-manager.js.map +1 -0
- package/lib/Utils/messages-media.d.ts +166 -0
- package/lib/Utils/messages-media.d.ts.map +1 -0
- package/lib/Utils/messages-media.js +979 -0
- package/lib/Utils/messages-media.js.map +1 -0
- package/lib/Utils/messages.d.ts +47 -0
- package/lib/Utils/messages.d.ts.map +1 -0
- package/lib/Utils/messages.js +1959 -0
- package/lib/Utils/messages.js.map +1 -0
- package/lib/Utils/meta-ai-msmsg.d.ts +12 -0
- package/lib/Utils/meta-ai-msmsg.js +124 -0
- package/lib/Utils/noise-handler.d.ts +21 -0
- package/lib/Utils/noise-handler.d.ts.map +1 -0
- package/lib/Utils/noise-handler.js +206 -0
- package/lib/Utils/noise-handler.js.map +1 -0
- package/lib/Utils/offline-node-processor.d.ts +10 -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 +26 -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 +102 -0
- package/lib/Utils/process-message.d.ts.map +1 -0
- package/lib/Utils/process-message.js +798 -0
- package/lib/Utils/process-message.js.map +1 -0
- package/lib/Utils/reporting-utils.d.ts +13 -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 +369 -0
- package/lib/Utils/rich-message-utils.js.map +1 -0
- package/lib/Utils/session-queue.js +33 -0
- package/lib/Utils/signal.d.ts +83 -0
- package/lib/Utils/signal.d.ts.map +1 -0
- package/lib/Utils/signal.js +201 -0
- package/lib/Utils/signal.js.map +1 -0
- package/lib/Utils/stanza-ack.d.ts +22 -0
- package/lib/Utils/stanza-ack.d.ts.map +1 -0
- package/lib/Utils/stanza-ack.js +72 -0
- package/lib/Utils/stanza-ack.js.map +1 -0
- package/lib/Utils/sync-action-utils.d.ts +3 -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 +30 -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 +13 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +196 -0
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
- package/lib/Utils/use-single-file-auth-state.d.ts +11 -0
- package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-single-file-auth-state.js +118 -0
- 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 +44 -0
- package/lib/Utils/validate-connection.d.ts.map +1 -0
- package/lib/Utils/validate-connection.js +210 -0
- package/lib/Utils/validate-connection.js.map +1 -0
- package/lib/Utils/worker-pool.js +73 -0
- package/lib/WABinary/constants.d.ts +62 -0
- package/lib/WABinary/constants.d.ts.map +1 -0
- package/lib/WABinary/constants.js +1467 -0
- package/lib/WABinary/constants.js.map +1 -0
- package/lib/WABinary/decode.d.ts +10 -0
- package/lib/WABinary/decode.d.ts.map +1 -0
- package/lib/WABinary/decode.js +262 -0
- package/lib/WABinary/decode.js.map +1 -0
- package/lib/WABinary/encode.d.ts +3 -0
- package/lib/WABinary/encode.d.ts.map +1 -0
- package/lib/WABinary/encode.js +220 -0
- package/lib/WABinary/encode.js.map +1 -0
- package/lib/WABinary/generic-utils.d.ts +77 -0
- package/lib/WABinary/generic-utils.d.ts.map +1 -0
- package/lib/WABinary/generic-utils.js +226 -0
- package/lib/WABinary/generic-utils.js.map +1 -0
- package/lib/WABinary/index.d.ts +6 -0
- package/lib/WABinary/index.d.ts.map +1 -0
- package/lib/WABinary/index.js +6 -0
- package/lib/WABinary/index.js.map +1 -0
- package/lib/WABinary/jid-utils.d.ts +29 -0
- package/lib/WABinary/jid-utils.d.ts.map +1 -0
- package/lib/WABinary/jid-utils.js +96 -0
- package/lib/WABinary/jid-utils.js.map +1 -0
- package/lib/WABinary/types.d.ts +6 -0
- package/lib/WABinary/types.d.ts.map +1 -0
- package/lib/WABinary/types.js +2 -0
- package/lib/WABinary/types.js.map +1 -0
- package/lib/WAM/BinaryInfo.d.ts +8 -0
- package/lib/WAM/BinaryInfo.d.ts.map +1 -0
- package/lib/WAM/BinaryInfo.js +10 -0
- package/lib/WAM/BinaryInfo.js.map +1 -0
- package/lib/WAM/constants.d.ts +34927 -0
- package/lib/WAM/constants.d.ts.map +1 -0
- package/lib/WAM/constants.js +22853 -0
- package/lib/WAM/constants.js.map +1 -0
- package/lib/WAM/encode.d.ts +2 -0
- package/lib/WAM/encode.d.ts.map +1 -0
- package/lib/WAM/encode.js +150 -0
- package/lib/WAM/encode.js.map +1 -0
- package/lib/WAM/index.d.ts +4 -0
- package/lib/WAM/index.d.ts.map +1 -0
- package/lib/WAM/index.js +4 -0
- package/lib/WAM/index.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncBusinessProtocol.d.ts +8 -0
- package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +99 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +37 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +53 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +23 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +54 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +13 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncFeatureProtocol.d.ts +9 -0
- package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +70 -0
- package/lib/WAUSync/Protocols/USyncPictureProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncPictureProtocol.js +28 -0
- package/lib/WAUSync/Protocols/USyncSidelistProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +25 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +13 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +38 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncTextStatusProtocol.d.ts +11 -0
- package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +34 -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 +31 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +39 -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 +15 -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 +11 -0
- package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/index.js +11 -0
- package/lib/WAUSync/Protocols/index.js.map +1 -0
- package/lib/WAUSync/USyncQuery.d.ts +32 -0
- package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
- package/lib/WAUSync/USyncQuery.js +185 -0
- package/lib/WAUSync/USyncQuery.js.map +1 -0
- package/lib/WAUSync/USyncUser.d.ts +25 -0
- package/lib/WAUSync/USyncUser.d.ts.map +1 -0
- package/lib/WAUSync/USyncUser.js +48 -0
- package/lib/WAUSync/USyncUser.js.map +1 -0
- package/lib/WAUSync/index.d.ts +4 -0
- package/lib/WAUSync/index.d.ts.map +1 -0
- package/lib/WAUSync/index.js +4 -0
- package/lib/WAUSync/index.js.map +1 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/package.json +122 -5
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { prepareWAMessageMedia } from './messages.js';
|
|
2
|
+
import { extractImageThumb, getHttpStream } from './messages-media.js';
|
|
3
|
+
const THUMBNAIL_WIDTH_PX = 192;
|
|
4
|
+
/** Fetches an image and generates a thumbnail for it */
|
|
5
|
+
const getCompressedJpegThumbnail = async (url, { thumbnailWidth, fetchOpts }) => {
|
|
6
|
+
const stream = await getHttpStream(url, fetchOpts);
|
|
7
|
+
const result = await extractImageThumb(stream, thumbnailWidth);
|
|
8
|
+
return result;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Given a piece of text, checks for any URL present, generates link preview for the same and returns it
|
|
12
|
+
* Return undefined if the fetch failed or no URL was found
|
|
13
|
+
* @param text first matched URL in text
|
|
14
|
+
* @returns the URL info required to generate link preview
|
|
15
|
+
*/
|
|
16
|
+
export const getUrlInfo = async (text, opts = {
|
|
17
|
+
thumbnailWidth: THUMBNAIL_WIDTH_PX,
|
|
18
|
+
fetchOpts: { timeout: 3000 }
|
|
19
|
+
}) => {
|
|
20
|
+
try {
|
|
21
|
+
// retries
|
|
22
|
+
let retries = 0;
|
|
23
|
+
const maxRetry = 5;
|
|
24
|
+
const { getLinkPreview } = await import('link-preview-js');
|
|
25
|
+
let previewLink = text;
|
|
26
|
+
if (!text.startsWith('https://') && !text.startsWith('http://')) {
|
|
27
|
+
previewLink = 'https://' + previewLink;
|
|
28
|
+
}
|
|
29
|
+
const info = await getLinkPreview(previewLink, {
|
|
30
|
+
...opts.fetchOpts,
|
|
31
|
+
followRedirects: 'follow',
|
|
32
|
+
handleRedirects: (baseURL, forwardedURL) => {
|
|
33
|
+
const urlObj = new URL(baseURL);
|
|
34
|
+
const forwardedURLObj = new URL(forwardedURL);
|
|
35
|
+
if (retries >= maxRetry) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (forwardedURLObj.hostname === urlObj.hostname ||
|
|
39
|
+
forwardedURLObj.hostname === 'www.' + urlObj.hostname ||
|
|
40
|
+
'www.' + forwardedURLObj.hostname === urlObj.hostname) {
|
|
41
|
+
retries += 1;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
headers: opts.fetchOpts?.headers
|
|
49
|
+
});
|
|
50
|
+
if (info && 'title' in info && info.title) {
|
|
51
|
+
const [image] = info.images;
|
|
52
|
+
const urlInfo = {
|
|
53
|
+
'canonical-url': info.url,
|
|
54
|
+
'matched-text': text,
|
|
55
|
+
title: info.title,
|
|
56
|
+
description: info.description,
|
|
57
|
+
originalThumbnailUrl: image
|
|
58
|
+
};
|
|
59
|
+
if (opts.uploadImage) {
|
|
60
|
+
const { imageMessage } = await prepareWAMessageMedia({ image: { url: image } }, {
|
|
61
|
+
upload: opts.uploadImage,
|
|
62
|
+
mediaTypeOverride: 'thumbnail-link',
|
|
63
|
+
options: opts.fetchOpts
|
|
64
|
+
});
|
|
65
|
+
urlInfo.jpegThumbnail = imageMessage?.jpegThumbnail ? Buffer.from(imageMessage.jpegThumbnail) : undefined;
|
|
66
|
+
urlInfo.highQualityThumbnail = imageMessage || undefined;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
try {
|
|
70
|
+
urlInfo.jpegThumbnail = image ? (await getCompressedJpegThumbnail(image, opts)).buffer : undefined;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
opts.logger?.debug({ err: error.stack, url: previewLink }, 'error in generating thumbnail');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return urlInfo;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (!error.message.includes('receive a valid')) {
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=link-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-preview.js","sourceRoot":"","sources":["../../src/Utils/link-preview.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventEmitter discards whatever a listener returns. An async listener that rejects therefore
|
|
3
|
+
* becomes an unhandled rejection, and Node's default for those is to terminate the process.
|
|
4
|
+
*
|
|
5
|
+
* In a host that runs one socket per account that is the difference between one account having a
|
|
6
|
+
* bad minute and every account in the process being disconnected at once: a single stanza that
|
|
7
|
+
* arrives while its own connection is closing takes the whole fleet down. Wrapping a listener keeps
|
|
8
|
+
* the failure where it happened.
|
|
9
|
+
*
|
|
10
|
+
* Wrappers are remembered per original function so `off(event, handler)` still finds the
|
|
11
|
+
* registration made by `on(event, handler)` - without that, every listener would leak.
|
|
12
|
+
*
|
|
13
|
+
* Deliberately importless: this is used from the transport client and from the event buffer, and a
|
|
14
|
+
* cycle through Utils/index.js would be easy to introduce and annoying to find.
|
|
15
|
+
*/
|
|
16
|
+
export const makeListenerGuard = (onError) => {
|
|
17
|
+
const wrappers = new WeakMap()
|
|
18
|
+
return {
|
|
19
|
+
/** the function to hand to EventEmitter in place of `listener` */
|
|
20
|
+
wrap (listener) {
|
|
21
|
+
if (typeof listener !== 'function') return listener
|
|
22
|
+
const existing = wrappers.get(listener)
|
|
23
|
+
if (existing) return existing
|
|
24
|
+
const wrapper = function (...args) {
|
|
25
|
+
let result
|
|
26
|
+
try {
|
|
27
|
+
result = listener.apply(this, args)
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
onError(err)
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
// Only promises need the catch; a sync listener already returned normally.
|
|
34
|
+
if (result && typeof result.catch === 'function') result.catch(onError)
|
|
35
|
+
return result
|
|
36
|
+
}
|
|
37
|
+
// Preserve the identity EventEmitter uses to remove once wrappers and list callbacks.
|
|
38
|
+
wrapper.listener = listener.listener || listener
|
|
39
|
+
wrappers.set(listener, wrapper)
|
|
40
|
+
return wrapper
|
|
41
|
+
},
|
|
42
|
+
/** the registration made for `listener`, so removal works on the original reference */
|
|
43
|
+
unwrap (listener) {
|
|
44
|
+
if (typeof listener !== 'function') return listener
|
|
45
|
+
return wrappers.get(listener) || listener
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/Utils/logger.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/Utils/logger.js"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,CAAC;AACrB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data
|
|
3
|
+
* over a series of mutations. You can add/remove mutations and it'll return a hash equal to
|
|
4
|
+
* if the same series of mutations was made sequentially.
|
|
5
|
+
*/
|
|
6
|
+
export const LT_HASH_ANTI_TAMPERING: any;
|
|
7
|
+
//# sourceMappingURL=lt-hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lt-hash.d.ts","sourceRoot":"","sources":["../../src/Utils/lt-hash.js"],"names":[],"mappings":"AACA;;;;GAIG;AACH,yCAAgE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LTHashAntiTampering } from 'whatsapp-rust-bridge';
|
|
2
|
+
/**
|
|
3
|
+
* LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data
|
|
4
|
+
* over a series of mutations. You can add/remove mutations and it'll return a hash equal to
|
|
5
|
+
* if the same series of mutations was made sequentially.
|
|
6
|
+
*/
|
|
7
|
+
export const LT_HASH_ANTI_TAMPERING = new LTHashAntiTampering();
|
|
8
|
+
//# sourceMappingURL=lt-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lt-hash.js","sourceRoot":"","sources":["../../src/Utils/lt-hash.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-mutex.d.ts","sourceRoot":"","sources":["../../src/Utils/make-mutex.js"],"names":[],"mappings":"AACO;;EAON;AACM;;EAsBN"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Mutex as AsyncMutex } from 'async-mutex';
|
|
2
|
+
export const makeMutex = () => {
|
|
3
|
+
const mutex = new AsyncMutex();
|
|
4
|
+
return {
|
|
5
|
+
mutex(code) {
|
|
6
|
+
return mutex.runExclusive(code);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export const makeKeyedMutex = () => {
|
|
11
|
+
const map = new Map();
|
|
12
|
+
return {
|
|
13
|
+
async mutex(key, task) {
|
|
14
|
+
let entry = map.get(key);
|
|
15
|
+
if (!entry) {
|
|
16
|
+
entry = { mutex: new AsyncMutex(), refCount: 0 };
|
|
17
|
+
map.set(key, entry);
|
|
18
|
+
}
|
|
19
|
+
entry.refCount++;
|
|
20
|
+
try {
|
|
21
|
+
return await entry.mutex.runExclusive(task);
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
entry.refCount--;
|
|
25
|
+
// only delete it if this is still the current entry
|
|
26
|
+
if (entry.refCount === 0 && map.get(key) === entry) {
|
|
27
|
+
map.delete(key);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=make-mutex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-mutex.js","sourceRoot":"","sources":["../../src/Utils/make-mutex.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;IAC/B,OAAO;QACH,KAAK,CAAC,IAAI;YACN,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACtB,OAAO;QACH,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI;YACjB,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACjD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,IAAI,CAAC;gBACD,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;oBACO,CAAC;gBACL,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjB,oDAAoD;gBACpD,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;oBACjD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACL,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export const RetryReason: any;
|
|
2
|
+
export class MessageRetryManager {
|
|
3
|
+
constructor(logger: any, maxMsgRetryCount: any);
|
|
4
|
+
logger: any;
|
|
5
|
+
recentMessagesMap: any;
|
|
6
|
+
messageKeyIndex: Map<any, any>;
|
|
7
|
+
sessionRecreateHistory: any;
|
|
8
|
+
retryCounters: any;
|
|
9
|
+
baseKeys: any;
|
|
10
|
+
pendingPhoneRequests: {};
|
|
11
|
+
maxMsgRetryCount: any;
|
|
12
|
+
statistics: {
|
|
13
|
+
totalRetries: number;
|
|
14
|
+
successfulRetries: number;
|
|
15
|
+
failedRetries: number;
|
|
16
|
+
mediaRetries: number;
|
|
17
|
+
sessionRecreations: number;
|
|
18
|
+
phoneRequests: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Add a recent message to the cache for retry handling
|
|
22
|
+
*/
|
|
23
|
+
addRecentMessage(to: any, id: any, message: any): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get a recent message from the cache
|
|
26
|
+
*/
|
|
27
|
+
getRecentMessage(to: any, id: any): any;
|
|
28
|
+
/**
|
|
29
|
+
* Check if a session should be recreated based on retry count, history, and error code.
|
|
30
|
+
* MAC errors (codes 4 and 7) trigger immediate session recreation regardless of timeout.
|
|
31
|
+
*/
|
|
32
|
+
shouldRecreateSession(jid: any, hasSession: any, errorCode: any): {
|
|
33
|
+
reason: string;
|
|
34
|
+
recreate: boolean;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Parse error code from retry receipt's retry node.
|
|
38
|
+
* Returns undefined if no error code is present.
|
|
39
|
+
*/
|
|
40
|
+
parseRetryErrorCode(errorAttr: any): any;
|
|
41
|
+
/**
|
|
42
|
+
* Check if an error code indicates a MAC failure
|
|
43
|
+
*/
|
|
44
|
+
isMacError(errorCode: any): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Increment retry counter for a message
|
|
47
|
+
*/
|
|
48
|
+
incrementRetryCount(messageId: any): any;
|
|
49
|
+
/**
|
|
50
|
+
* Get retry count for a message
|
|
51
|
+
*/
|
|
52
|
+
getRetryCount(messageId: any): any;
|
|
53
|
+
/**
|
|
54
|
+
* Check if message has exceeded maximum retry attempts
|
|
55
|
+
*/
|
|
56
|
+
hasExceededMaxRetries(messageId: any): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Mark retry as successful
|
|
59
|
+
*/
|
|
60
|
+
markRetrySuccess(messageId: any): void;
|
|
61
|
+
/**
|
|
62
|
+
* Mark retry as failed
|
|
63
|
+
*/
|
|
64
|
+
markRetryFailed(messageId: any): void;
|
|
65
|
+
/**
|
|
66
|
+
* Schedule a phone request with delay
|
|
67
|
+
*/
|
|
68
|
+
schedulePhoneRequest(messageId: any, callback: any, delay?: number): void;
|
|
69
|
+
/**
|
|
70
|
+
* Cancel pending phone request
|
|
71
|
+
*/
|
|
72
|
+
cancelPendingPhoneRequest(messageId: any): void;
|
|
73
|
+
clear(): void;
|
|
74
|
+
saveBaseKey(addr: any, msgId: any, baseKey: any): void;
|
|
75
|
+
hasSameBaseKey(addr: any, msgId: any, baseKey: any): boolean;
|
|
76
|
+
deleteBaseKey(addr: any, msgId: any): void;
|
|
77
|
+
keyToString(key: any): string;
|
|
78
|
+
removeRecentMessage(messageId: any): void;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=message-retry-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-retry-manager.d.ts","sourceRoot":"","sources":["../../src/Utils/message-retry-manager.js"],"names":[],"mappings":"AAQA,8BAAuB;AAqBvB;IACI,gDAwCC;IAvCG,YAAoB;IACpB,uBAWE;IACF,+BAAgC;IAChC,4BAGE;IACF,mBAIE;IACF,cAIE;IACF,yBAA8B;IAC9B,sBAAyB;IACzB;;;;;;;MAOC;IAGL;;OAEG;IACH,uDAUC;IACD;;OAEG;IACH,wCAIC;IACD;;;OAGG;IACH;;;MAgCC;IACD;;;OAGG;IACH,yCAaC;IACD;;OAEG;IACH,oCAEC;IACD;;OAEG;IACH,yCAIC;IACD;;OAEG;IACH,mCAEC;IACD;;OAEG;IACH,+CAEC;IACD;;OAEG;IACH,uCAMC;IACD;;OAEG;IACH,sCAKC;IACD;;OAEG;IACH,0EASC;IACD;;OAEG;IACH,gDAOC;IACD,cAiBC;IACD,uDAEC;IACD,6DAUC;IACD,2CAEC;IACD,8BAEC;IACD,0CAOC;CACJ"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { LRUCache } from 'lru-cache';
|
|
2
|
+
/** Number of sent messages to cache in memory for handling retry receipts */
|
|
3
|
+
const RECENT_MESSAGES_SIZE = 1024;
|
|
4
|
+
/**
|
|
5
|
+
* Entry caps for the two caches below that only had a `ttl`.
|
|
6
|
+
*
|
|
7
|
+
* lru-cache's own docs: "Even if ttl tracking is enabled, it is strongly recommended to set a `max` to
|
|
8
|
+
* prevent unbounded growth of the cache." `recentMessagesMap` and `baseKeys` were capped at
|
|
9
|
+
* RECENT_MESSAGES_SIZE; `sessionRecreateHistory` and `retryCounters` were not, so their only bound was
|
|
10
|
+
* expiry — and one MessageRetryManager exists PER SOCKET (messages-send.js:87, on by default via
|
|
11
|
+
* `enableRecentMessageCache`). A host running a bot fleet holds one per bot.
|
|
12
|
+
*
|
|
13
|
+
* `retryCounters` is the worse of the two: it is keyed per message and sets `updateAgeOnGet`, so
|
|
14
|
+
* `hasExceededMaxRetries()` — which reads it — refreshes the TTL on every check. A message stuck in a
|
|
15
|
+
* retry loop therefore kept its entry alive indefinitely, which is the opposite of what a TTL backstop
|
|
16
|
+
* is for. The age semantics are left alone (dropping them would hand a long retry a fresh count and
|
|
17
|
+
* extra attempts past maxMsgRetryCount); the cap is what makes the growth bounded either way, and LRU
|
|
18
|
+
* eviction of the oldest counter has the same effect the TTL already intended.
|
|
19
|
+
*/
|
|
20
|
+
const SESSION_HISTORY_SIZE = 1024;
|
|
21
|
+
const RETRY_COUNTER_SIZE = 4096;
|
|
22
|
+
const MESSAGE_KEY_SEPARATOR = '\u0000';
|
|
23
|
+
/** Timeout for session recreation - 1 hour */
|
|
24
|
+
const RECREATE_SESSION_TIMEOUT = 60 * 60 * 1000; // 1 hour in milliseconds
|
|
25
|
+
const PHONE_REQUEST_DELAY = 3000;
|
|
26
|
+
// Retry reason codes matching WhatsApp Web's Signal error codes.
|
|
27
|
+
export var RetryReason;
|
|
28
|
+
(function (RetryReason) {
|
|
29
|
+
RetryReason[RetryReason["UnknownError"] = 0] = "UnknownError";
|
|
30
|
+
RetryReason[RetryReason["SignalErrorNoSession"] = 1] = "SignalErrorNoSession";
|
|
31
|
+
RetryReason[RetryReason["SignalErrorInvalidKey"] = 2] = "SignalErrorInvalidKey";
|
|
32
|
+
RetryReason[RetryReason["SignalErrorInvalidKeyId"] = 3] = "SignalErrorInvalidKeyId";
|
|
33
|
+
/** MAC verification failed - most common cause of decryption failures */
|
|
34
|
+
RetryReason[RetryReason["SignalErrorInvalidMessage"] = 4] = "SignalErrorInvalidMessage";
|
|
35
|
+
RetryReason[RetryReason["SignalErrorInvalidSignature"] = 5] = "SignalErrorInvalidSignature";
|
|
36
|
+
RetryReason[RetryReason["SignalErrorFutureMessage"] = 6] = "SignalErrorFutureMessage";
|
|
37
|
+
/** Explicit MAC failure - session is definitely out of sync */
|
|
38
|
+
RetryReason[RetryReason["SignalErrorBadMac"] = 7] = "SignalErrorBadMac";
|
|
39
|
+
RetryReason[RetryReason["SignalErrorInvalidSession"] = 8] = "SignalErrorInvalidSession";
|
|
40
|
+
RetryReason[RetryReason["SignalErrorInvalidMsgKey"] = 9] = "SignalErrorInvalidMsgKey";
|
|
41
|
+
RetryReason[RetryReason["BadBroadcastEphemeralSetting"] = 10] = "BadBroadcastEphemeralSetting";
|
|
42
|
+
RetryReason[RetryReason["UnknownCompanionNoPrekey"] = 11] = "UnknownCompanionNoPrekey";
|
|
43
|
+
RetryReason[RetryReason["AdvFailure"] = 12] = "AdvFailure";
|
|
44
|
+
RetryReason[RetryReason["StatusRevokeDelay"] = 13] = "StatusRevokeDelay";
|
|
45
|
+
})(RetryReason || (RetryReason = {}));
|
|
46
|
+
/** Error codes that indicate a MAC failure and require immediate session recreation */
|
|
47
|
+
const MAC_ERROR_CODES = new Set([RetryReason.SignalErrorInvalidMessage, RetryReason.SignalErrorBadMac]);
|
|
48
|
+
export class MessageRetryManager {
|
|
49
|
+
constructor(logger, maxMsgRetryCount) {
|
|
50
|
+
this.logger = logger;
|
|
51
|
+
this.recentMessagesMap = new LRUCache({
|
|
52
|
+
max: RECENT_MESSAGES_SIZE,
|
|
53
|
+
ttl: 5 * 60 * 1000,
|
|
54
|
+
ttlAutopurge: true,
|
|
55
|
+
dispose: (_value, key) => {
|
|
56
|
+
const separatorIndex = key.lastIndexOf(MESSAGE_KEY_SEPARATOR);
|
|
57
|
+
if (separatorIndex > -1) {
|
|
58
|
+
const messageId = key.slice(separatorIndex + MESSAGE_KEY_SEPARATOR.length);
|
|
59
|
+
this.messageKeyIndex.delete(messageId);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
this.messageKeyIndex = new Map();
|
|
64
|
+
this.sessionRecreateHistory = new LRUCache({
|
|
65
|
+
max: SESSION_HISTORY_SIZE,
|
|
66
|
+
ttl: RECREATE_SESSION_TIMEOUT * 2,
|
|
67
|
+
ttlAutopurge: true
|
|
68
|
+
});
|
|
69
|
+
this.retryCounters = new LRUCache({
|
|
70
|
+
max: RETRY_COUNTER_SIZE,
|
|
71
|
+
ttl: 15 * 60 * 1000,
|
|
72
|
+
ttlAutopurge: true,
|
|
73
|
+
updateAgeOnGet: true
|
|
74
|
+
}); // 15 minutes TTL
|
|
75
|
+
this.baseKeys = new LRUCache({
|
|
76
|
+
max: 1024,
|
|
77
|
+
ttl: 15 * 60 * 1000,
|
|
78
|
+
ttlAutopurge: true
|
|
79
|
+
});
|
|
80
|
+
this.pendingPhoneRequests = {};
|
|
81
|
+
this.maxMsgRetryCount = 5;
|
|
82
|
+
this.statistics = {
|
|
83
|
+
totalRetries: 0,
|
|
84
|
+
successfulRetries: 0,
|
|
85
|
+
failedRetries: 0,
|
|
86
|
+
mediaRetries: 0,
|
|
87
|
+
sessionRecreations: 0,
|
|
88
|
+
phoneRequests: 0
|
|
89
|
+
};
|
|
90
|
+
this.maxMsgRetryCount = maxMsgRetryCount;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Add a recent message to the cache for retry handling
|
|
94
|
+
*/
|
|
95
|
+
addRecentMessage(to, id, message) {
|
|
96
|
+
const key = { to, id };
|
|
97
|
+
const keyStr = this.keyToString(key);
|
|
98
|
+
// Add new message
|
|
99
|
+
this.recentMessagesMap.set(keyStr, {
|
|
100
|
+
message,
|
|
101
|
+
timestamp: Date.now()
|
|
102
|
+
});
|
|
103
|
+
this.messageKeyIndex.set(id, keyStr);
|
|
104
|
+
this.logger.debug(`Added message to retry cache: ${to}/${id}`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get a recent message from the cache
|
|
108
|
+
*/
|
|
109
|
+
getRecentMessage(to, id) {
|
|
110
|
+
const key = { to, id };
|
|
111
|
+
const keyStr = this.keyToString(key);
|
|
112
|
+
return this.recentMessagesMap.get(keyStr);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check if a session should be recreated based on retry count, history, and error code.
|
|
116
|
+
* MAC errors (codes 4 and 7) trigger immediate session recreation regardless of timeout.
|
|
117
|
+
*/
|
|
118
|
+
shouldRecreateSession(jid, hasSession, errorCode) {
|
|
119
|
+
// If we don't have a session, always recreate
|
|
120
|
+
if (!hasSession) {
|
|
121
|
+
this.sessionRecreateHistory.set(jid, Date.now());
|
|
122
|
+
this.statistics.sessionRecreations++;
|
|
123
|
+
return {
|
|
124
|
+
reason: "we don't have a Signal session with them",
|
|
125
|
+
recreate: true
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// IMMEDIATE recreation for MAC errors - session is definitely out of sync
|
|
129
|
+
if (errorCode !== undefined && MAC_ERROR_CODES.has(errorCode)) {
|
|
130
|
+
this.sessionRecreateHistory.set(jid, Date.now());
|
|
131
|
+
this.statistics.sessionRecreations++;
|
|
132
|
+
this.logger.warn({ jid, errorCode: RetryReason[errorCode] }, 'MAC error detected, forcing immediate session recreation');
|
|
133
|
+
return {
|
|
134
|
+
reason: `MAC error (code ${errorCode}: ${RetryReason[errorCode]}), immediate session recreation`,
|
|
135
|
+
recreate: true
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
const now = Date.now();
|
|
139
|
+
const prevTime = this.sessionRecreateHistory.get(jid);
|
|
140
|
+
// If no previous recreation or it's been more than an hour
|
|
141
|
+
if (!prevTime || now - prevTime > RECREATE_SESSION_TIMEOUT) {
|
|
142
|
+
this.sessionRecreateHistory.set(jid, now);
|
|
143
|
+
this.statistics.sessionRecreations++;
|
|
144
|
+
return {
|
|
145
|
+
reason: 'retry count > 1 and over an hour since last recreation',
|
|
146
|
+
recreate: true
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return { reason: '', recreate: false };
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Parse error code from retry receipt's retry node.
|
|
153
|
+
* Returns undefined if no error code is present.
|
|
154
|
+
*/
|
|
155
|
+
parseRetryErrorCode(errorAttr) {
|
|
156
|
+
if (errorAttr === undefined || errorAttr === '') {
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
const code = parseInt(errorAttr, 10);
|
|
160
|
+
if (Number.isNaN(code)) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
// Validate it's a known RetryReason
|
|
164
|
+
if (code >= RetryReason.UnknownError && code <= RetryReason.StatusRevokeDelay) {
|
|
165
|
+
return code;
|
|
166
|
+
}
|
|
167
|
+
return RetryReason.UnknownError;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Check if an error code indicates a MAC failure
|
|
171
|
+
*/
|
|
172
|
+
isMacError(errorCode) {
|
|
173
|
+
return errorCode !== undefined && MAC_ERROR_CODES.has(errorCode);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Increment retry counter for a message
|
|
177
|
+
*/
|
|
178
|
+
incrementRetryCount(messageId) {
|
|
179
|
+
this.retryCounters.set(messageId, (this.retryCounters.get(messageId) || 0) + 1);
|
|
180
|
+
this.statistics.totalRetries++;
|
|
181
|
+
return this.retryCounters.get(messageId);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get retry count for a message
|
|
185
|
+
*/
|
|
186
|
+
getRetryCount(messageId) {
|
|
187
|
+
return this.retryCounters.get(messageId) || 0;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Check if message has exceeded maximum retry attempts
|
|
191
|
+
*/
|
|
192
|
+
hasExceededMaxRetries(messageId) {
|
|
193
|
+
return this.getRetryCount(messageId) >= this.maxMsgRetryCount;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Mark retry as successful
|
|
197
|
+
*/
|
|
198
|
+
markRetrySuccess(messageId) {
|
|
199
|
+
this.statistics.successfulRetries++;
|
|
200
|
+
// Clean up retry counter for successful message
|
|
201
|
+
this.retryCounters.delete(messageId);
|
|
202
|
+
this.cancelPendingPhoneRequest(messageId);
|
|
203
|
+
this.removeRecentMessage(messageId);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Mark retry as failed
|
|
207
|
+
*/
|
|
208
|
+
markRetryFailed(messageId) {
|
|
209
|
+
this.statistics.failedRetries++;
|
|
210
|
+
this.retryCounters.delete(messageId);
|
|
211
|
+
this.cancelPendingPhoneRequest(messageId);
|
|
212
|
+
this.removeRecentMessage(messageId);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Schedule a phone request with delay
|
|
216
|
+
*/
|
|
217
|
+
schedulePhoneRequest(messageId, callback, delay = PHONE_REQUEST_DELAY) {
|
|
218
|
+
// Cancel any existing request for this message
|
|
219
|
+
this.cancelPendingPhoneRequest(messageId);
|
|
220
|
+
this.pendingPhoneRequests[messageId] = setTimeout(() => {
|
|
221
|
+
delete this.pendingPhoneRequests[messageId];
|
|
222
|
+
this.statistics.phoneRequests++;
|
|
223
|
+
callback();
|
|
224
|
+
}, delay);
|
|
225
|
+
this.logger.debug(`Scheduled phone request for message ${messageId} with ${delay}ms delay`);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Cancel pending phone request
|
|
229
|
+
*/
|
|
230
|
+
cancelPendingPhoneRequest(messageId) {
|
|
231
|
+
const timeout = this.pendingPhoneRequests[messageId];
|
|
232
|
+
if (timeout) {
|
|
233
|
+
clearTimeout(timeout);
|
|
234
|
+
delete this.pendingPhoneRequests[messageId];
|
|
235
|
+
this.logger.debug(`Cancelled pending phone request for message ${messageId}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
clear() {
|
|
239
|
+
this.recentMessagesMap.clear();
|
|
240
|
+
this.messageKeyIndex.clear();
|
|
241
|
+
this.sessionRecreateHistory.clear();
|
|
242
|
+
this.retryCounters.clear();
|
|
243
|
+
this.baseKeys.clear();
|
|
244
|
+
for (const messageId of Object.keys(this.pendingPhoneRequests)) {
|
|
245
|
+
this.cancelPendingPhoneRequest(messageId);
|
|
246
|
+
}
|
|
247
|
+
this.statistics = {
|
|
248
|
+
totalRetries: 0,
|
|
249
|
+
successfulRetries: 0,
|
|
250
|
+
failedRetries: 0,
|
|
251
|
+
mediaRetries: 0,
|
|
252
|
+
sessionRecreations: 0,
|
|
253
|
+
phoneRequests: 0
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
saveBaseKey(addr, msgId, baseKey) {
|
|
257
|
+
this.baseKeys.set(`${addr}:${msgId}`, baseKey);
|
|
258
|
+
}
|
|
259
|
+
hasSameBaseKey(addr, msgId, baseKey) {
|
|
260
|
+
const stored = this.baseKeys.get(`${addr}:${msgId}`);
|
|
261
|
+
if (!stored || stored.length !== baseKey.length) {
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
for (let i = 0; i < stored.length; i++) {
|
|
265
|
+
if (stored[i] !== baseKey[i])
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
deleteBaseKey(addr, msgId) {
|
|
271
|
+
this.baseKeys.delete(`${addr}:${msgId}`);
|
|
272
|
+
}
|
|
273
|
+
keyToString(key) {
|
|
274
|
+
return `${key.to}${MESSAGE_KEY_SEPARATOR}${key.id}`;
|
|
275
|
+
}
|
|
276
|
+
removeRecentMessage(messageId) {
|
|
277
|
+
const keyStr = this.messageKeyIndex.get(messageId);
|
|
278
|
+
if (!keyStr) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
this.recentMessagesMap.delete(keyStr);
|
|
282
|
+
this.messageKeyIndex.delete(messageId);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=message-retry-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-retry-manager.js","sourceRoot":"","sources":["../../src/Utils/message-retry-manager.js"],"names":[],"mappings":"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"}
|