baileys-joss 1.0.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 +21 -0
- package/README.md +377 -0
- package/WAProto/GenerateStatics.sh +3 -0
- package/WAProto/WAProto.proto +5479 -0
- package/WAProto/fix-imports.js +81 -0
- package/WAProto/index.d.ts +14017 -0
- package/WAProto/index.js +97687 -0
- package/engine-requirements.js +10 -0
- package/lib/Defaults/index.d.ts +66 -0
- package/lib/Defaults/index.d.ts.map +1 -0
- package/lib/Defaults/index.js +120 -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 +15 -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 +17 -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 +11 -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 +18 -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 +31 -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 +39 -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 +5 -0
- package/lib/Signal/libsignal.d.ts.map +1 -0
- package/lib/Signal/libsignal.js +342 -0
- package/lib/Signal/libsignal.js.map +1 -0
- package/lib/Signal/lid-mapping.d.ts +24 -0
- package/lib/Signal/lid-mapping.d.ts.map +1 -0
- package/lib/Signal/lid-mapping.js +220 -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 +16 -0
- package/lib/Socket/Client/types.d.ts.map +1 -0
- package/lib/Socket/Client/types.js +11 -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 +54 -0
- package/lib/Socket/Client/websocket.js.map +1 -0
- package/lib/Socket/business.d.ts +200 -0
- package/lib/Socket/business.d.ts.map +1 -0
- package/lib/Socket/business.js +379 -0
- package/lib/Socket/business.js.map +1 -0
- package/lib/Socket/chats.d.ts +109 -0
- package/lib/Socket/chats.d.ts.map +1 -0
- package/lib/Socket/chats.js +978 -0
- package/lib/Socket/chats.js.map +1 -0
- package/lib/Socket/communities.d.ts +256 -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/groups.d.ts +148 -0
- package/lib/Socket/groups.d.ts.map +1 -0
- package/lib/Socket/groups.js +327 -0
- package/lib/Socket/groups.js.map +1 -0
- package/lib/Socket/index.d.ts +243 -0
- package/lib/Socket/index.d.ts.map +1 -0
- package/lib/Socket/index.js +12 -0
- package/lib/Socket/index.js.map +1 -0
- package/lib/Socket/messages-recv.d.ts +185 -0
- package/lib/Socket/messages-recv.d.ts.map +1 -0
- package/lib/Socket/messages-recv.js +1294 -0
- package/lib/Socket/messages-recv.js.map +1 -0
- package/lib/Socket/messages-send.d.ts +181 -0
- package/lib/Socket/messages-send.d.ts.map +1 -0
- package/lib/Socket/messages-send.js +1043 -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 +158 -0
- package/lib/Socket/newsletter.d.ts.map +1 -0
- package/lib/Socket/newsletter.js +181 -0
- package/lib/Socket/newsletter.js.map +1 -0
- package/lib/Socket/socket.d.ts +53 -0
- package/lib/Socket/socket.d.ts.map +1 -0
- package/lib/Socket/socket.js +887 -0
- package/lib/Socket/socket.js.map +1 -0
- package/lib/Types/Auth.d.ts +115 -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 +25 -0
- package/lib/Types/Bussines.d.ts.map +1 -0
- package/lib/Types/Bussines.js +2 -0
- package/lib/Types/Bussines.js.map +1 -0
- package/lib/Types/Call.d.ts +14 -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 +123 -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 +24 -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 +236 -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 +67 -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 +47 -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 +30 -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 +305 -0
- package/lib/Types/Message.d.ts.map +1 -0
- package/lib/Types/Message.js +11 -0
- package/lib/Types/Message.js.map +1 -0
- package/lib/Types/Newsletter.d.ts +135 -0
- package/lib/Types/Newsletter.d.ts.map +1 -0
- package/lib/Types/Newsletter.js +31 -0
- package/lib/Types/Newsletter.js.map +1 -0
- package/lib/Types/Product.d.ts +79 -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/Signal.d.ts +76 -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 +133 -0
- package/lib/Types/Socket.d.ts.map +1 -0
- package/lib/Types/Socket.js +3 -0
- package/lib/Types/Socket.js.map +1 -0
- package/lib/Types/State.d.ts +39 -0
- package/lib/Types/State.d.ts.map +1 -0
- package/lib/Types/State.js +13 -0
- package/lib/Types/State.js.map +1 -0
- package/lib/Types/USync.d.ts +26 -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 +65 -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/anti-delete.d.ts +153 -0
- package/lib/Utils/anti-delete.d.ts.map +1 -0
- package/lib/Utils/anti-delete.js +269 -0
- package/lib/Utils/anti-delete.js.map +1 -0
- package/lib/Utils/auth-utils.d.ts +19 -0
- package/lib/Utils/auth-utils.d.ts.map +1 -0
- package/lib/Utils/auth-utils.js +290 -0
- 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 +23 -0
- package/lib/Utils/business.d.ts.map +1 -0
- package/lib/Utils/business.js +231 -0
- package/lib/Utils/business.js.map +1 -0
- package/lib/Utils/chat-utils.d.ts +70 -0
- package/lib/Utils/chat-utils.d.ts.map +1 -0
- package/lib/Utils/chat-utils.js +812 -0
- package/lib/Utils/chat-utils.js.map +1 -0
- package/lib/Utils/crypto.d.ts +41 -0
- package/lib/Utils/crypto.d.ts.map +1 -0
- package/lib/Utils/crypto.js +142 -0
- package/lib/Utils/crypto.js.map +1 -0
- package/lib/Utils/decode-wa-message.d.ts +48 -0
- package/lib/Utils/decode-wa-message.d.ts.map +1 -0
- package/lib/Utils/decode-wa-message.js +283 -0
- package/lib/Utils/decode-wa-message.js.map +1 -0
- package/lib/Utils/event-buffer.d.ts +34 -0
- package/lib/Utils/event-buffer.d.ts.map +1 -0
- package/lib/Utils/event-buffer.js +574 -0
- package/lib/Utils/event-buffer.js.map +1 -0
- package/lib/Utils/generics.d.ts +91 -0
- package/lib/Utils/generics.d.ts.map +1 -0
- package/lib/Utils/generics.js +384 -0
- package/lib/Utils/generics.js.map +1 -0
- package/lib/Utils/group-utils.d.ts +190 -0
- package/lib/Utils/group-utils.d.ts.map +1 -0
- package/lib/Utils/group-utils.js +241 -0
- package/lib/Utils/group-utils.js.map +1 -0
- package/lib/Utils/history.d.ts +22 -0
- package/lib/Utils/history.d.ts.map +1 -0
- package/lib/Utils/history.js +131 -0
- package/lib/Utils/history.js.map +1 -0
- package/lib/Utils/identity-change-handler.d.ts +37 -0
- package/lib/Utils/identity-change-handler.d.ts.map +1 -0
- package/lib/Utils/identity-change-handler.js +49 -0
- package/lib/Utils/identity-change-handler.js.map +1 -0
- package/lib/Utils/index.d.ts +26 -0
- package/lib/Utils/index.d.ts.map +1 -0
- package/lib/Utils/index.js +35 -0
- package/lib/Utils/index.js.map +1 -0
- package/lib/Utils/interactive-message.d.ts +262 -0
- package/lib/Utils/interactive-message.d.ts.map +1 -0
- package/lib/Utils/interactive-message.js +264 -0
- package/lib/Utils/interactive-message.js.map +1 -0
- package/lib/Utils/jid-plotting.d.ts +167 -0
- package/lib/Utils/jid-plotting.d.ts.map +1 -0
- package/lib/Utils/jid-plotting.js +266 -0
- package/lib/Utils/jid-plotting.js.map +1 -0
- package/lib/Utils/link-preview.d.ts +21 -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/logger.d.ts +13 -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 +13 -0
- package/lib/Utils/lt-hash.d.ts.map +1 -0
- package/lib/Utils/lt-hash.js +48 -0
- package/lib/Utils/lt-hash.js.map +1 -0
- package/lib/Utils/make-mutex.d.ts +9 -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 +82 -0
- package/lib/Utils/message-retry-manager.d.ts.map +1 -0
- package/lib/Utils/message-retry-manager.js +168 -0
- package/lib/Utils/message-retry-manager.js.map +1 -0
- package/lib/Utils/messages-media.d.ts +130 -0
- package/lib/Utils/messages-media.d.ts.map +1 -0
- package/lib/Utils/messages-media.js +774 -0
- package/lib/Utils/messages-media.js.map +1 -0
- package/lib/Utils/messages.d.ts +91 -0
- package/lib/Utils/messages.d.ts.map +1 -0
- package/lib/Utils/messages.js +870 -0
- package/lib/Utils/messages.js.map +1 -0
- package/lib/Utils/noise-handler.d.ts +20 -0
- package/lib/Utils/noise-handler.d.ts.map +1 -0
- package/lib/Utils/noise-handler.js +201 -0
- package/lib/Utils/noise-handler.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 +60 -0
- package/lib/Utils/process-message.d.ts.map +1 -0
- package/lib/Utils/process-message.js +504 -0
- 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/signal.d.ts +34 -0
- package/lib/Utils/signal.d.ts.map +1 -0
- package/lib/Utils/signal.js +159 -0
- package/lib/Utils/signal.js.map +1 -0
- package/lib/Utils/sticker-maker.d.ts +106 -0
- package/lib/Utils/sticker-maker.d.ts.map +1 -0
- package/lib/Utils/sticker-maker.js +240 -0
- package/lib/Utils/sticker-maker.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 +48 -0
- package/lib/Utils/sync-action-utils.js.map +1 -0
- package/lib/Utils/tc-token-utils.d.ts +12 -0
- package/lib/Utils/tc-token-utils.d.ts.map +1 -0
- package/lib/Utils/tc-token-utils.js +18 -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 +121 -0
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
- package/lib/Utils/validate-connection.d.ts +11 -0
- package/lib/Utils/validate-connection.d.ts.map +1 -0
- package/lib/Utils/validate-connection.js +200 -0
- package/lib/Utils/validate-connection.js.map +1 -0
- package/lib/Utils/view-once.d.ts +172 -0
- package/lib/Utils/view-once.d.ts.map +1 -0
- package/lib/Utils/view-once.js +507 -0
- package/lib/Utils/view-once.js.map +1 -0
- package/lib/WABinary/constants.d.ts +28 -0
- package/lib/WABinary/constants.d.ts.map +1 -0
- package/lib/WABinary/constants.js +1301 -0
- package/lib/WABinary/constants.js.map +1 -0
- package/lib/WABinary/decode.d.ts +7 -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 +15 -0
- package/lib/WABinary/generic-utils.d.ts.map +1 -0
- package/lib/WABinary/generic-utils.js +113 -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 +48 -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 +19 -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 +9 -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 +40 -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 +3 -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/USyncContactProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +29 -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/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/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 +5 -0
- package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/index.js +5 -0
- package/lib/WAUSync/Protocols/index.js.map +1 -0
- package/lib/WAUSync/USyncQuery.d.ts +29 -0
- package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
- package/lib/WAUSync/USyncQuery.js +94 -0
- package/lib/WAUSync/USyncQuery.js.map +1 -0
- package/lib/WAUSync/USyncUser.d.ts +13 -0
- package/lib/WAUSync/USyncUser.d.ts.map +1 -0
- package/lib/WAUSync/USyncUser.js +23 -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 +11 -0
- package/lib/index.js.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LID & SenderPn Plotting Utilities untuk Baileys-Joss
|
|
3
|
+
*
|
|
4
|
+
* senderPn = nomor WA yang sedang digunakan (current session)
|
|
5
|
+
* LID = Linked ID yang dipakai WhatsApp untuk identifikasi
|
|
6
|
+
*
|
|
7
|
+
* @module jid-plotting
|
|
8
|
+
*/
|
|
9
|
+
import type { AuthenticationCreds } from '../Types/index.js';
|
|
10
|
+
export interface JidInfo {
|
|
11
|
+
/** Full JID string */
|
|
12
|
+
jid: string;
|
|
13
|
+
/** User part (phone number or LID) */
|
|
14
|
+
user: string;
|
|
15
|
+
/** Server/domain part */
|
|
16
|
+
server: string;
|
|
17
|
+
/** Device number (0 = primary) */
|
|
18
|
+
device: number;
|
|
19
|
+
/** Agent (0 = user, 1 = agent) */
|
|
20
|
+
agent: number;
|
|
21
|
+
/** Is this a LID? */
|
|
22
|
+
isLid: boolean;
|
|
23
|
+
/** Is this a phone number (PN)? */
|
|
24
|
+
isPn: boolean;
|
|
25
|
+
/** Is this a hosted account? */
|
|
26
|
+
isHosted: boolean;
|
|
27
|
+
/** Is this a group? */
|
|
28
|
+
isGroup: boolean;
|
|
29
|
+
/** Is this a newsletter? */
|
|
30
|
+
isNewsletter: boolean;
|
|
31
|
+
/** Normalized user (without device) */
|
|
32
|
+
normalizedUser: string;
|
|
33
|
+
}
|
|
34
|
+
export interface PlottedJid {
|
|
35
|
+
/** Original JID yang diberikan */
|
|
36
|
+
original: string;
|
|
37
|
+
/** Phone number JID */
|
|
38
|
+
pn?: string;
|
|
39
|
+
/** LID */
|
|
40
|
+
lid?: string;
|
|
41
|
+
/** Resolved (primary identifier) */
|
|
42
|
+
primary: string;
|
|
43
|
+
/** Info lengkap */
|
|
44
|
+
info: JidInfo;
|
|
45
|
+
}
|
|
46
|
+
export interface SenderPnInfo {
|
|
47
|
+
/** Phone number dengan @s.whatsapp.net */
|
|
48
|
+
phoneJid: string;
|
|
49
|
+
/** Phone number tanpa domain */
|
|
50
|
+
phoneNumber: string;
|
|
51
|
+
/** LID jika tersedia */
|
|
52
|
+
lid?: string;
|
|
53
|
+
/** Device ID */
|
|
54
|
+
deviceId: number;
|
|
55
|
+
/** Nama yang tersimpan di account */
|
|
56
|
+
pushName?: string;
|
|
57
|
+
/** Platform (android/ios/web/etc) */
|
|
58
|
+
platform?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse dan extract informasi lengkap dari JID
|
|
62
|
+
*/
|
|
63
|
+
export declare const parseJid: (jid: string) => JidInfo | null;
|
|
64
|
+
/**
|
|
65
|
+
* Get senderPn (current session phone number) dari AuthenticationCreds
|
|
66
|
+
*/
|
|
67
|
+
export declare const getSenderPn: (creds: AuthenticationCreds) => SenderPnInfo | null;
|
|
68
|
+
/**
|
|
69
|
+
* Get current sender info dari authState
|
|
70
|
+
* Ini function yang paling sering dipakai
|
|
71
|
+
*/
|
|
72
|
+
export declare const getCurrentSenderInfo: (authState: {
|
|
73
|
+
creds: AuthenticationCreds;
|
|
74
|
+
}) => SenderPnInfo | null;
|
|
75
|
+
/**
|
|
76
|
+
* Check apakah JID adalah diri sendiri (current sender)
|
|
77
|
+
*/
|
|
78
|
+
export declare const isSelf: (jid: string, senderPn: SenderPnInfo) => boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Plot JID - convert antara PN dan LID
|
|
81
|
+
* Ini memerlukan LIDMappingStore untuk full functionality
|
|
82
|
+
*/
|
|
83
|
+
export declare const plotJid: (jid: string) => PlottedJid | null;
|
|
84
|
+
/**
|
|
85
|
+
* Normalize berbagai format nomor ke JID yang valid
|
|
86
|
+
*/
|
|
87
|
+
export declare const normalizePhoneToJid: (phone: string) => string;
|
|
88
|
+
/**
|
|
89
|
+
* Extract phone number dari JID (tanpa domain)
|
|
90
|
+
*/
|
|
91
|
+
export declare const extractPhoneNumber: (jid: string) => string | null;
|
|
92
|
+
/**
|
|
93
|
+
* Buat formatted display untuk JID
|
|
94
|
+
*/
|
|
95
|
+
export declare const formatJidDisplay: (jid: string, options?: {
|
|
96
|
+
showDevice?: boolean;
|
|
97
|
+
showType?: boolean;
|
|
98
|
+
}) => string;
|
|
99
|
+
/**
|
|
100
|
+
* Compare dua JID apakah merujuk ke user yang sama
|
|
101
|
+
*/
|
|
102
|
+
export declare const isSameUser: (jid1: string, jid2: string) => boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Get all JID variants dari satu nomor
|
|
105
|
+
* Useful untuk searching across different formats
|
|
106
|
+
*/
|
|
107
|
+
export declare const getJidVariants: (phone: string) => string[];
|
|
108
|
+
/**
|
|
109
|
+
* Construct JID dengan device ID
|
|
110
|
+
*/
|
|
111
|
+
export declare const constructJidWithDevice: (user: string, device: number, server?: string) => string;
|
|
112
|
+
/**
|
|
113
|
+
* Helper untuk mendapatkan remoteJid yang benar dari message
|
|
114
|
+
* Memperhitungkan group dan direct messages
|
|
115
|
+
*/
|
|
116
|
+
export declare const getRemoteJidFromMessage: (msg: {
|
|
117
|
+
key: {
|
|
118
|
+
remoteJid?: string;
|
|
119
|
+
participant?: string;
|
|
120
|
+
};
|
|
121
|
+
}) => {
|
|
122
|
+
chatJid: string;
|
|
123
|
+
senderJid: string;
|
|
124
|
+
} | null;
|
|
125
|
+
/**
|
|
126
|
+
* Interface untuk plotting dengan external mapping
|
|
127
|
+
*/
|
|
128
|
+
export interface JidPlotterWithMapping {
|
|
129
|
+
plotToLid: (pn: string) => Promise<string | null>;
|
|
130
|
+
plotToPn: (lid: string) => Promise<string | null>;
|
|
131
|
+
plotBidirectional: (jid: string) => Promise<PlottedJid>;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Create plotter yang bisa resolve LID <-> PN
|
|
135
|
+
* Membutuhkan getLIDForPN dan getPNForLID dari LIDMappingStore
|
|
136
|
+
*/
|
|
137
|
+
export declare const createJidPlotter: (getLIDForPN: (pn: string) => Promise<string | null>, getPNForLID: (lid: string) => Promise<string | null>) => JidPlotterWithMapping;
|
|
138
|
+
declare const _default: {
|
|
139
|
+
parseJid: (jid: string) => JidInfo | null;
|
|
140
|
+
getSenderPn: (creds: AuthenticationCreds) => SenderPnInfo | null;
|
|
141
|
+
getCurrentSenderInfo: (authState: {
|
|
142
|
+
creds: AuthenticationCreds;
|
|
143
|
+
}) => SenderPnInfo | null;
|
|
144
|
+
isSelf: (jid: string, senderPn: SenderPnInfo) => boolean;
|
|
145
|
+
plotJid: (jid: string) => PlottedJid | null;
|
|
146
|
+
normalizePhoneToJid: (phone: string) => string;
|
|
147
|
+
extractPhoneNumber: (jid: string) => string | null;
|
|
148
|
+
formatJidDisplay: (jid: string, options?: {
|
|
149
|
+
showDevice?: boolean;
|
|
150
|
+
showType?: boolean;
|
|
151
|
+
}) => string;
|
|
152
|
+
isSameUser: (jid1: string, jid2: string) => boolean;
|
|
153
|
+
getJidVariants: (phone: string) => string[];
|
|
154
|
+
constructJidWithDevice: (user: string, device: number, server?: string) => string;
|
|
155
|
+
getRemoteJidFromMessage: (msg: {
|
|
156
|
+
key: {
|
|
157
|
+
remoteJid?: string;
|
|
158
|
+
participant?: string;
|
|
159
|
+
};
|
|
160
|
+
}) => {
|
|
161
|
+
chatJid: string;
|
|
162
|
+
senderJid: string;
|
|
163
|
+
} | null;
|
|
164
|
+
createJidPlotter: (getLIDForPN: (pn: string) => Promise<string | null>, getPNForLID: (lid: string) => Promise<string | null>) => JidPlotterWithMapping;
|
|
165
|
+
};
|
|
166
|
+
export default _default;
|
|
167
|
+
//# sourceMappingURL=jid-plotting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jid-plotting.d.ts","sourceRoot":"","sources":["../../src/Utils/jid-plotting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LID & SenderPn Plotting Utilities untuk Baileys-Joss
|
|
3
|
+
*
|
|
4
|
+
* senderPn = nomor WA yang sedang digunakan (current session)
|
|
5
|
+
* LID = Linked ID yang dipakai WhatsApp untuk identifikasi
|
|
6
|
+
*
|
|
7
|
+
* @module jid-plotting
|
|
8
|
+
*/
|
|
9
|
+
import { jidDecode, jidEncode, jidNormalizedUser, isLidUser, isPnUser, isHostedLidUser, isHostedPnUser, S_WHATSAPP_NET } from '../WABinary/index.js';
|
|
10
|
+
// =====================================================
|
|
11
|
+
// CORE FUNCTIONS
|
|
12
|
+
// =====================================================
|
|
13
|
+
/**
|
|
14
|
+
* Parse dan extract informasi lengkap dari JID
|
|
15
|
+
*/
|
|
16
|
+
export const parseJid = (jid) => {
|
|
17
|
+
if (!jid)
|
|
18
|
+
return null;
|
|
19
|
+
const decoded = jidDecode(jid);
|
|
20
|
+
if (!decoded)
|
|
21
|
+
return null;
|
|
22
|
+
const isLidVal = isLidUser(jid) || isHostedLidUser(jid);
|
|
23
|
+
const isPnVal = isPnUser(jid) || isHostedPnUser(jid);
|
|
24
|
+
const isGroup = jid.endsWith('@g.us');
|
|
25
|
+
const isNewsletter = jid.endsWith('@newsletter');
|
|
26
|
+
const isHostedVal = jid.includes('@hosted') || isHostedLidUser(jid) || isHostedPnUser(jid);
|
|
27
|
+
return {
|
|
28
|
+
jid,
|
|
29
|
+
user: decoded.user,
|
|
30
|
+
server: decoded.server,
|
|
31
|
+
device: decoded.device || 0,
|
|
32
|
+
agent: 0,
|
|
33
|
+
isLid: !!isLidVal,
|
|
34
|
+
isPn: !!isPnVal,
|
|
35
|
+
isHosted: !!isHostedVal,
|
|
36
|
+
isGroup,
|
|
37
|
+
isNewsletter,
|
|
38
|
+
normalizedUser: jidNormalizedUser(jid)
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Get senderPn (current session phone number) dari AuthenticationCreds
|
|
43
|
+
*/
|
|
44
|
+
export const getSenderPn = (creds) => {
|
|
45
|
+
if (!creds?.me?.id)
|
|
46
|
+
return null;
|
|
47
|
+
const decoded = jidDecode(creds.me.id);
|
|
48
|
+
if (!decoded)
|
|
49
|
+
return null;
|
|
50
|
+
const phoneNumber = decoded.user;
|
|
51
|
+
const phoneJid = `${phoneNumber}@s.whatsapp.net`;
|
|
52
|
+
return {
|
|
53
|
+
phoneJid,
|
|
54
|
+
phoneNumber,
|
|
55
|
+
lid: creds.me.lid || undefined,
|
|
56
|
+
deviceId: decoded.device || 0,
|
|
57
|
+
pushName: creds.me.name,
|
|
58
|
+
platform: creds.platform
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Get current sender info dari authState
|
|
63
|
+
* Ini function yang paling sering dipakai
|
|
64
|
+
*/
|
|
65
|
+
export const getCurrentSenderInfo = (authState) => {
|
|
66
|
+
return getSenderPn(authState.creds);
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Check apakah JID adalah diri sendiri (current sender)
|
|
70
|
+
*/
|
|
71
|
+
export const isSelf = (jid, senderPn) => {
|
|
72
|
+
if (!jid || !senderPn)
|
|
73
|
+
return false;
|
|
74
|
+
const normalizedJid = jidNormalizedUser(jid);
|
|
75
|
+
const normalizedSelf = jidNormalizedUser(senderPn.phoneJid);
|
|
76
|
+
// Check phone number match
|
|
77
|
+
if (normalizedJid === normalizedSelf)
|
|
78
|
+
return true;
|
|
79
|
+
// Check LID match if available
|
|
80
|
+
if (senderPn.lid) {
|
|
81
|
+
const normalizedLid = jidNormalizedUser(senderPn.lid);
|
|
82
|
+
if (normalizedJid === normalizedLid)
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
return false;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Plot JID - convert antara PN dan LID
|
|
89
|
+
* Ini memerlukan LIDMappingStore untuk full functionality
|
|
90
|
+
*/
|
|
91
|
+
export const plotJid = (jid) => {
|
|
92
|
+
const info = parseJid(jid);
|
|
93
|
+
if (!info)
|
|
94
|
+
return null;
|
|
95
|
+
const result = {
|
|
96
|
+
original: jid,
|
|
97
|
+
primary: jid,
|
|
98
|
+
info
|
|
99
|
+
};
|
|
100
|
+
// Determine what type this is
|
|
101
|
+
if (info.isPn) {
|
|
102
|
+
result.pn = info.normalizedUser;
|
|
103
|
+
result.primary = info.normalizedUser;
|
|
104
|
+
}
|
|
105
|
+
else if (info.isLid) {
|
|
106
|
+
result.lid = info.normalizedUser;
|
|
107
|
+
result.primary = info.normalizedUser;
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Normalize berbagai format nomor ke JID yang valid
|
|
113
|
+
*/
|
|
114
|
+
export const normalizePhoneToJid = (phone) => {
|
|
115
|
+
// Hapus karakter non-numeric kecuali @
|
|
116
|
+
let cleaned = phone.replace(/[^\d@]/g, '');
|
|
117
|
+
// Jika sudah ada domain, return as-is setelah normalize
|
|
118
|
+
if (phone.includes('@')) {
|
|
119
|
+
return jidNormalizedUser(phone);
|
|
120
|
+
}
|
|
121
|
+
// Tambah domain
|
|
122
|
+
return `${cleaned}@s.whatsapp.net`;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Extract phone number dari JID (tanpa domain)
|
|
126
|
+
*/
|
|
127
|
+
export const extractPhoneNumber = (jid) => {
|
|
128
|
+
const info = parseJid(jid);
|
|
129
|
+
if (!info || !info.isPn)
|
|
130
|
+
return null;
|
|
131
|
+
return info.user;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Buat formatted display untuk JID
|
|
135
|
+
*/
|
|
136
|
+
export const formatJidDisplay = (jid, options) => {
|
|
137
|
+
const info = parseJid(jid);
|
|
138
|
+
if (!info)
|
|
139
|
+
return jid;
|
|
140
|
+
let display = info.user;
|
|
141
|
+
if (options?.showDevice && info.device > 0) {
|
|
142
|
+
display += `:${info.device}`;
|
|
143
|
+
}
|
|
144
|
+
if (options?.showType) {
|
|
145
|
+
if (info.isLid)
|
|
146
|
+
display += ' (LID)';
|
|
147
|
+
else if (info.isGroup)
|
|
148
|
+
display += ' (Group)';
|
|
149
|
+
else if (info.isNewsletter)
|
|
150
|
+
display += ' (Newsletter)';
|
|
151
|
+
else if (info.isPn)
|
|
152
|
+
display += ' (PN)';
|
|
153
|
+
}
|
|
154
|
+
return display;
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Compare dua JID apakah merujuk ke user yang sama
|
|
158
|
+
*/
|
|
159
|
+
export const isSameUser = (jid1, jid2) => {
|
|
160
|
+
const info1 = parseJid(jid1);
|
|
161
|
+
const info2 = parseJid(jid2);
|
|
162
|
+
if (!info1 || !info2)
|
|
163
|
+
return false;
|
|
164
|
+
// Normalize dan compare
|
|
165
|
+
return info1.normalizedUser === info2.normalizedUser;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Get all JID variants dari satu nomor
|
|
169
|
+
* Useful untuk searching across different formats
|
|
170
|
+
*/
|
|
171
|
+
export const getJidVariants = (phone) => {
|
|
172
|
+
const cleaned = phone.replace(/[^\d]/g, '');
|
|
173
|
+
return [
|
|
174
|
+
`${cleaned}@s.whatsapp.net`,
|
|
175
|
+
`${cleaned}:0@s.whatsapp.net`,
|
|
176
|
+
`${cleaned}@lid`,
|
|
177
|
+
// Dengan device IDs
|
|
178
|
+
`${cleaned}:1@s.whatsapp.net`,
|
|
179
|
+
`${cleaned}:2@s.whatsapp.net`,
|
|
180
|
+
];
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Construct JID dengan device ID
|
|
184
|
+
*/
|
|
185
|
+
export const constructJidWithDevice = (user, device, server = 's.whatsapp.net') => {
|
|
186
|
+
if (device === 0) {
|
|
187
|
+
return `${user}@${server}`;
|
|
188
|
+
}
|
|
189
|
+
return `${user}:${device}@${server}`;
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* Helper untuk mendapatkan remoteJid yang benar dari message
|
|
193
|
+
* Memperhitungkan group dan direct messages
|
|
194
|
+
*/
|
|
195
|
+
export const getRemoteJidFromMessage = (msg) => {
|
|
196
|
+
if (!msg?.key?.remoteJid)
|
|
197
|
+
return null;
|
|
198
|
+
const chatJid = msg.key.remoteJid;
|
|
199
|
+
const isGroupMsg = chatJid.endsWith('@g.us');
|
|
200
|
+
// For group messages, sender is in participant
|
|
201
|
+
// For direct messages, sender is remoteJid
|
|
202
|
+
const senderJid = isGroupMsg
|
|
203
|
+
? (msg.key.participant || chatJid)
|
|
204
|
+
: chatJid;
|
|
205
|
+
return { chatJid, senderJid };
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* Create plotter yang bisa resolve LID <-> PN
|
|
209
|
+
* Membutuhkan getLIDForPN dan getPNForLID dari LIDMappingStore
|
|
210
|
+
*/
|
|
211
|
+
export const createJidPlotter = (getLIDForPN, getPNForLID) => {
|
|
212
|
+
return {
|
|
213
|
+
plotToLid: async (pn) => {
|
|
214
|
+
return await getLIDForPN(pn);
|
|
215
|
+
},
|
|
216
|
+
plotToPn: async (lid) => {
|
|
217
|
+
return await getPNForLID(lid);
|
|
218
|
+
},
|
|
219
|
+
plotBidirectional: async (jid) => {
|
|
220
|
+
const info = parseJid(jid);
|
|
221
|
+
if (!info) {
|
|
222
|
+
return {
|
|
223
|
+
original: jid,
|
|
224
|
+
primary: jid,
|
|
225
|
+
info: parseJid(jid)
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
const result = {
|
|
229
|
+
original: jid,
|
|
230
|
+
primary: jid,
|
|
231
|
+
info
|
|
232
|
+
};
|
|
233
|
+
if (info.isPn) {
|
|
234
|
+
result.pn = info.normalizedUser;
|
|
235
|
+
const lid = await getLIDForPN(jid);
|
|
236
|
+
if (lid)
|
|
237
|
+
result.lid = lid;
|
|
238
|
+
result.primary = info.normalizedUser;
|
|
239
|
+
}
|
|
240
|
+
else if (info.isLid) {
|
|
241
|
+
result.lid = info.normalizedUser;
|
|
242
|
+
const pn = await getPNForLID(jid);
|
|
243
|
+
if (pn)
|
|
244
|
+
result.pn = pn;
|
|
245
|
+
result.primary = result.pn || info.normalizedUser;
|
|
246
|
+
}
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
};
|
|
251
|
+
export default {
|
|
252
|
+
parseJid,
|
|
253
|
+
getSenderPn,
|
|
254
|
+
getCurrentSenderInfo,
|
|
255
|
+
isSelf,
|
|
256
|
+
plotJid,
|
|
257
|
+
normalizePhoneToJid,
|
|
258
|
+
extractPhoneNumber,
|
|
259
|
+
formatJidDisplay,
|
|
260
|
+
isSameUser,
|
|
261
|
+
getJidVariants,
|
|
262
|
+
constructJidWithDevice,
|
|
263
|
+
getRemoteJidFromMessage,
|
|
264
|
+
createJidPlotter
|
|
265
|
+
};
|
|
266
|
+
//# sourceMappingURL=jid-plotting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jid-plotting.js","sourceRoot":"","sources":["../../src/Utils/jid-plotting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { WAMediaUploadFunction, WAUrlInfo } from '../Types/index.js';
|
|
2
|
+
import type { ILogger } from './logger.js';
|
|
3
|
+
export type URLGenerationOptions = {
|
|
4
|
+
thumbnailWidth: number;
|
|
5
|
+
fetchOpts: {
|
|
6
|
+
/** Timeout in ms */
|
|
7
|
+
timeout: number;
|
|
8
|
+
proxyUrl?: string;
|
|
9
|
+
headers?: HeadersInit;
|
|
10
|
+
};
|
|
11
|
+
uploadImage?: WAMediaUploadFunction;
|
|
12
|
+
logger?: ILogger;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Given a piece of text, checks for any URL present, generates link preview for the same and returns it
|
|
16
|
+
* Return undefined if the fetch failed or no URL was found
|
|
17
|
+
* @param text first matched URL in text
|
|
18
|
+
* @returns the URL info required to generate link preview
|
|
19
|
+
*/
|
|
20
|
+
export declare const getUrlInfo: (text: string, opts?: URLGenerationOptions) => Promise<WAUrlInfo | undefined>;
|
|
21
|
+
//# sourceMappingURL=link-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-preview.d.ts","sourceRoot":"","sources":["../../src/Utils/link-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAavC,MAAM,MAAM,oBAAoB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE;QACV,oBAAoB;QACpB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,OAAO,CAAC,EAAE,WAAW,CAAA;KACrB,CAAA;IACD,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACtB,MAAM,MAAM,EACZ,OAAM,oBAGL,KACC,OAAO,CAAC,SAAS,GAAG,SAAS,CAwE/B,CAAA"}
|
|
@@ -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
|
+
const 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.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import P from 'pino';
|
|
2
|
+
export interface ILogger {
|
|
3
|
+
level: string;
|
|
4
|
+
child(obj: Record<string, unknown>): ILogger;
|
|
5
|
+
trace(obj: unknown, msg?: string): void;
|
|
6
|
+
debug(obj: unknown, msg?: string): void;
|
|
7
|
+
info(obj: unknown, msg?: string): void;
|
|
8
|
+
warn(obj: unknown, msg?: string): void;
|
|
9
|
+
error(obj: unknown, msg?: string): void;
|
|
10
|
+
}
|
|
11
|
+
declare const _default: P.Logger<never, boolean>;
|
|
12
|
+
export default _default;
|
|
13
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/Utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,CAAA;AAEpB,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC5C,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvC;;AAED,wBAAyE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/Utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,CAAA;AAYpB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare class LTHash {
|
|
2
|
+
salt: string;
|
|
3
|
+
constructor(e: string);
|
|
4
|
+
add(e: ArrayBuffer, t: ArrayBuffer[]): Promise<ArrayBuffer>;
|
|
5
|
+
subtract(e: ArrayBuffer, t: ArrayBuffer[]): Promise<ArrayBuffer>;
|
|
6
|
+
subtractThenAdd(e: ArrayBuffer, addList: ArrayBuffer[], subtractList: ArrayBuffer[]): Promise<ArrayBuffer>;
|
|
7
|
+
private _addSingle;
|
|
8
|
+
private _subtractSingle;
|
|
9
|
+
private performPointwiseWithOverflow;
|
|
10
|
+
}
|
|
11
|
+
export declare const LT_HASH_ANTI_TAMPERING: LTHash;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=lt-hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lt-hash.d.ts","sourceRoot":"","sources":["../../src/Utils/lt-hash.ts"],"names":[],"mappings":"AASA,cAAM,MAAM;IACX,IAAI,EAAE,MAAM,CAAA;gBAEA,CAAC,EAAE,MAAM;IAIf,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3D,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAQhE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;YAKlG,UAAU;YAKV,eAAe;IAK7B,OAAO,CAAC,4BAA4B;CAgBpC;AACD,eAAO,MAAM,sBAAsB,QAAyC,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { hkdf } from './crypto.js';
|
|
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
|
+
const o = 128;
|
|
8
|
+
class LTHash {
|
|
9
|
+
constructor(e) {
|
|
10
|
+
this.salt = e;
|
|
11
|
+
}
|
|
12
|
+
async add(e, t) {
|
|
13
|
+
for (const item of t) {
|
|
14
|
+
e = await this._addSingle(e, item);
|
|
15
|
+
}
|
|
16
|
+
return e;
|
|
17
|
+
}
|
|
18
|
+
async subtract(e, t) {
|
|
19
|
+
for (const item of t) {
|
|
20
|
+
e = await this._subtractSingle(e, item);
|
|
21
|
+
}
|
|
22
|
+
return e;
|
|
23
|
+
}
|
|
24
|
+
async subtractThenAdd(e, addList, subtractList) {
|
|
25
|
+
const subtracted = await this.subtract(e, subtractList);
|
|
26
|
+
return this.add(subtracted, addList);
|
|
27
|
+
}
|
|
28
|
+
async _addSingle(e, t) {
|
|
29
|
+
const derived = new Uint8Array(await hkdf(Buffer.from(t), o, { info: this.salt })).buffer;
|
|
30
|
+
return this.performPointwiseWithOverflow(e, derived, (a, b) => a + b);
|
|
31
|
+
}
|
|
32
|
+
async _subtractSingle(e, t) {
|
|
33
|
+
const derived = new Uint8Array(await hkdf(Buffer.from(t), o, { info: this.salt })).buffer;
|
|
34
|
+
return this.performPointwiseWithOverflow(e, derived, (a, b) => a - b);
|
|
35
|
+
}
|
|
36
|
+
performPointwiseWithOverflow(e, t, op) {
|
|
37
|
+
const n = new DataView(e);
|
|
38
|
+
const i = new DataView(t);
|
|
39
|
+
const out = new ArrayBuffer(n.byteLength);
|
|
40
|
+
const s = new DataView(out);
|
|
41
|
+
for (let offset = 0; offset < n.byteLength; offset += 2) {
|
|
42
|
+
s.setUint16(offset, op(n.getUint16(offset, true), i.getUint16(offset, true)), true);
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export const LT_HASH_ANTI_TAMPERING = new LTHash('WhatsApp Patch Integrity');
|
|
48
|
+
//# sourceMappingURL=lt-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lt-hash.js","sourceRoot":"","sources":["../../src/Utils/lt-hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B;;;;GAIG;AACH,MAAM,CAAC,GAAG,GAAG,CAAA;AAEb,MAAM,MAAM;IAGX,YAAY,CAAS;QACpB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,CAAc,EAAE,CAAgB;QACzC,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;YACtB,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACnC,CAAC;QAED,OAAO,CAAC,CAAA;IACT,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,CAAc,EAAE,CAAgB;QAC9C,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;YACtB,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACxC,CAAC;QAED,OAAO,CAAC,CAAA;IACT,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,CAAc,EAAE,OAAsB,EAAE,YAA2B;QACxF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,CAAc,EAAE,CAAc;QACtD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACzF,OAAO,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACtE,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,CAAc,EAAE,CAAc;QAC3D,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACzF,OAAO,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACtE,CAAC;IAEO,4BAA4B,CACnC,CAAc,EACd,CAAc,EACd,EAAoC;QAEpC,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAA;QAE3B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACzD,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACpF,CAAC;QAED,OAAO,GAAG,CAAA;IACX,CAAC;CACD;AACD,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,MAAM,CAAC,0BAA0B,CAAC,CAAA"}
|