@vanzxysenpai/baileys 0.0.0-stage → 0.0.2
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/CHANGELOG.md +30 -0
- package/LICENSE +25 -0
- package/NOTICE.md +158 -0
- package/README.md +5294 -2
- package/VanzxyBanner.js +134 -0
- package/WAProto/index.d.ts +13317 -0
- package/WAProto/index.js +147553 -0
- package/lib/Builders/A2UI.d.ts +131 -0
- package/lib/Builders/A2UI.js +343 -0
- package/lib/Builders/AIRich.d.ts +1021 -0
- package/lib/Builders/AIRich.js +2889 -0
- package/lib/Builders/Album.d.ts +51 -0
- package/lib/Builders/Album.js +99 -0
- package/lib/Builders/Button.d.ts +137449 -0
- package/lib/Builders/Button.js +1054 -0
- package/lib/Builders/ButtonV2.d.ts +43 -0
- package/lib/Builders/ButtonV2.js +175 -0
- package/lib/Builders/ButtonV3.d.ts +35 -0
- package/lib/Builders/ButtonV3.js +189 -0
- package/lib/Builders/Carousel.d.ts +68 -0
- package/lib/Builders/Carousel.js +161 -0
- package/lib/Builders/Event.d.ts +61 -0
- package/lib/Builders/Event.js +118 -0
- package/lib/Builders/Expiring.d.ts +17 -0
- package/lib/Builders/Expiring.js +27 -0
- package/lib/Builders/Poll.d.ts +63 -0
- package/lib/Builders/Poll.js +139 -0
- package/lib/Builders/VanzxyBaileys.d.ts +42 -0
- package/lib/Builders/VanzxyBaileys.js +110 -0
- package/lib/Builders/errors.d.ts +25 -0
- package/lib/Builders/errors.js +29 -0
- package/lib/Builders/index.d.ts +14 -0
- package/lib/Builders/index.js +23 -0
- package/lib/Builders/shared.d.ts +395 -0
- package/lib/Builders/shared.js +738 -0
- package/lib/Defaults/bot-jid.d.ts +1 -0
- package/lib/Defaults/bot-jid.js +1 -0
- package/lib/Defaults/index.d.ts +161 -0
- package/lib/Defaults/index.js +165 -0
- package/lib/Defaults/version.d.ts +1 -0
- package/lib/Defaults/version.js +1 -0
- package/lib/Framework/Bot.d.ts +865 -0
- package/lib/Framework/Bot.js +230 -0
- package/lib/Framework/Context.d.ts +17 -0
- package/lib/Framework/Context.js +90 -0
- package/lib/Framework/MediaManager.d.ts +15 -0
- package/lib/Framework/MediaManager.js +154 -0
- package/lib/Framework/SessionManager.d.ts +10 -0
- package/lib/Framework/SessionManager.js +34 -0
- package/lib/Framework/StatsManager.d.ts +20 -0
- package/lib/Framework/StatsManager.js +117 -0
- package/lib/Framework/Store/SQLiteStore.d.ts +13 -0
- package/lib/Framework/Store/SQLiteStore.js +68 -0
- package/lib/Framework/index.d.ts +6 -0
- package/lib/Framework/index.js +11 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
- package/lib/Signal/Group/ciphertext-message.js +11 -0
- package/lib/Signal/Group/group-session-builder.d.ts +7 -0
- package/lib/Signal/Group/group-session-builder.js +29 -0
- package/lib/Signal/Group/group_cipher.d.ts +10 -0
- package/lib/Signal/Group/group_cipher.js +81 -0
- package/lib/Signal/Group/index.d.ts +11 -0
- package/lib/Signal/Group/index.js +11 -0
- package/lib/Signal/Group/keyhelper.d.ts +6 -0
- package/lib/Signal/Group/keyhelper.js +17 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
- package/lib/Signal/Group/sender-chain-key.js +25 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +62 -0
- package/lib/Signal/Group/sender-key-message.d.ts +18 -0
- package/lib/Signal/Group/sender-key-message.js +65 -0
- package/lib/Signal/Group/sender-key-name.d.ts +11 -0
- package/lib/Signal/Group/sender-key-name.js +47 -0
- package/lib/Signal/Group/sender-key-record.d.ts +12 -0
- package/lib/Signal/Group/sender-key-record.js +40 -0
- package/lib/Signal/Group/sender-key-state.d.ts +16 -0
- package/lib/Signal/Group/sender-key-state.js +83 -0
- package/lib/Signal/Group/sender-message-key.d.ts +11 -0
- package/lib/Signal/Group/sender-message-key.js +25 -0
- package/lib/Signal/libsignal.d.ts +58 -0
- package/lib/Signal/libsignal.js +436 -0
- package/lib/Signal/lid-mapping.d.ts +20 -0
- package/lib/Signal/lid-mapping.js +276 -0
- package/lib/Socket/Client/index.d.ts +2 -0
- package/lib/Socket/Client/index.js +2 -0
- package/lib/Socket/Client/types.d.ts +5 -0
- package/lib/Socket/Client/types.js +10 -0
- package/lib/Socket/Client/websocket.d.ts +12 -0
- package/lib/Socket/Client/websocket.js +53 -0
- package/lib/Socket/business.d.ts +674 -0
- package/lib/Socket/business.js +379 -0
- package/lib/Socket/chats.d.ts +137 -0
- package/lib/Socket/chats.js +1299 -0
- package/lib/Socket/communities.d.ts +805 -0
- package/lib/Socket/communities.js +454 -0
- package/lib/Socket/dugong.d.ts +118 -0
- package/lib/Socket/dugong.js +810 -0
- package/lib/Socket/groups.d.ts +287 -0
- package/lib/Socket/groups.js +386 -0
- package/lib/Socket/index.d.ts +826 -0
- package/lib/Socket/index.js +35 -0
- package/lib/Socket/messages-recv.d.ts +613 -0
- package/lib/Socket/messages-recv.js +1851 -0
- package/lib/Socket/messages-send.d.ts +608 -0
- package/lib/Socket/messages-send.js +1574 -0
- package/lib/Socket/mex-fallback.d.ts +51 -0
- package/lib/Socket/mex-fallback.js +97 -0
- package/lib/Socket/mex.d.ts +1 -0
- package/lib/Socket/mex.js +41 -0
- package/lib/Socket/newsletter-ext.d.ts +47 -0
- package/lib/Socket/newsletter-ext.js +262 -0
- package/lib/Socket/newsletter.d.ts +285 -0
- package/lib/Socket/newsletter.js +223 -0
- package/lib/Socket/socket.d.ts +60 -0
- package/lib/Socket/socket.js +1001 -0
- package/lib/Socket/username.d.ts +842 -0
- package/lib/Socket/username.js +156 -0
- package/lib/Store/index.d.ts +3 -0
- package/lib/Store/index.js +3 -0
- package/lib/Store/make-in-memory-store.d.ts +62 -0
- package/lib/Store/make-in-memory-store.js +425 -0
- package/lib/Store/make-ordered-dictionary.d.ts +12 -0
- package/lib/Store/make-ordered-dictionary.js +78 -0
- package/lib/Store/object-repository.d.ts +10 -0
- package/lib/Store/object-repository.js +23 -0
- package/lib/Types/Auth.d.ts +1 -0
- package/lib/Types/Auth.js +1 -0
- package/lib/Types/Bussines.d.ts +1 -0
- package/lib/Types/Bussines.js +1 -0
- package/lib/Types/Call.d.ts +1 -0
- package/lib/Types/Call.js +1 -0
- package/lib/Types/Chat.d.ts +1 -0
- package/lib/Types/Chat.js +7 -0
- package/lib/Types/Contact.d.ts +1 -0
- package/lib/Types/Contact.js +1 -0
- package/lib/Types/Events.d.ts +1 -0
- package/lib/Types/Events.js +1 -0
- package/lib/Types/GroupMetadata.d.ts +1 -0
- package/lib/Types/GroupMetadata.js +1 -0
- package/lib/Types/Label.d.ts +2 -0
- package/lib/Types/Label.js +24 -0
- package/lib/Types/LabelAssociation.d.ts +2 -0
- package/lib/Types/LabelAssociation.js +6 -0
- package/lib/Types/Message.d.ts +11 -0
- package/lib/Types/Message.js +17 -0
- package/lib/Types/Mex.d.ts +2 -0
- package/lib/Types/Mex.js +38 -0
- package/lib/Types/Product.d.ts +1 -0
- package/lib/Types/Product.js +1 -0
- package/lib/Types/RichType.d.ts +2 -0
- package/lib/Types/RichType.js +22 -0
- package/lib/Types/Signal.d.ts +1 -0
- package/lib/Types/Signal.js +1 -0
- package/lib/Types/Socket.d.ts +1 -0
- package/lib/Types/Socket.js +1 -0
- package/lib/Types/State.d.ts +5 -0
- package/lib/Types/State.js +55 -0
- package/lib/Types/USync.d.ts +1 -0
- package/lib/Types/USync.js +1 -0
- package/lib/Types/index.d.ts +15 -0
- package/lib/Types/index.js +27 -0
- package/lib/Utils/PersistentStore.d.ts +83 -0
- package/lib/Utils/PersistentStore.js +592 -0
- package/lib/Utils/anchor-guard.d.ts +31 -0
- package/lib/Utils/anchor-guard.js +329 -0
- package/lib/Utils/android-stanza-id.d.ts +4 -0
- package/lib/Utils/android-stanza-id.js +21 -0
- package/lib/Utils/anti-delete.d.ts +62 -0
- package/lib/Utils/anti-delete.js +212 -0
- package/lib/Utils/auth-secure.d.ts +180 -0
- package/lib/Utils/auth-secure.js +791 -0
- package/lib/Utils/auth-utils.d.ts +59 -0
- package/lib/Utils/auth-utils.js +326 -0
- package/lib/Utils/auto-reconnect.d.ts +8 -0
- package/lib/Utils/auto-reconnect.js +204 -0
- package/lib/Utils/auto-reply.d.ts +35 -0
- package/lib/Utils/auto-reply.js +152 -0
- package/lib/Utils/bad-mac-handler.d.ts +59 -0
- package/lib/Utils/bad-mac-handler.js +119 -0
- package/lib/Utils/baileys-event-stream.d.ts +5 -0
- package/lib/Utils/baileys-event-stream.js +62 -0
- package/lib/Utils/browser-utils.d.ts +9 -0
- package/lib/Utils/browser-utils.js +29 -0
- package/lib/Utils/business.d.ts +49 -0
- package/lib/Utils/business.js +236 -0
- package/lib/Utils/button-helper-utils.d.ts +59 -0
- package/lib/Utils/button-helper-utils.js +266 -0
- package/lib/Utils/button-sender.d.ts +164 -0
- package/lib/Utils/button-sender.js +845 -0
- package/lib/Utils/chat-control.d.ts +98 -0
- package/lib/Utils/chat-control.js +231 -0
- package/lib/Utils/chat-history-helpers.d.ts +4 -0
- package/lib/Utils/chat-history-helpers.js +70 -0
- package/lib/Utils/chat-utils.d.ts +408 -0
- package/lib/Utils/chat-utils.js +879 -0
- package/lib/Utils/companion-reg-client-utils.d.ts +4 -0
- package/lib/Utils/companion-reg-client-utils.js +39 -0
- package/lib/Utils/connection-watchdog.d.ts +10 -0
- package/lib/Utils/connection-watchdog.js +74 -0
- package/lib/Utils/crypto.d.ts +41 -0
- package/lib/Utils/crypto.js +145 -0
- package/lib/Utils/decode-wa-message.d.ts +83 -0
- package/lib/Utils/decode-wa-message.js +315 -0
- package/lib/Utils/disconnect-reason.d.ts +13 -0
- package/lib/Utils/disconnect-reason.js +36 -0
- package/lib/Utils/event-buffer.d.ts +12 -0
- package/lib/Utils/event-buffer.js +640 -0
- package/lib/Utils/fetch-timeout.d.ts +4 -0
- package/lib/Utils/fetch-timeout.js +14 -0
- package/lib/Utils/ffmpeg-path.d.ts +5 -0
- package/lib/Utils/ffmpeg-path.js +130 -0
- package/lib/Utils/generics.d.ts +79 -0
- package/lib/Utils/generics.js +426 -0
- package/lib/Utils/group-metadata-cache.d.ts +3 -0
- package/lib/Utils/group-metadata-cache.js +25 -0
- package/lib/Utils/group-status-detection.d.ts +5 -0
- package/lib/Utils/group-status-detection.js +114 -0
- package/lib/Utils/history.d.ts +91 -0
- package/lib/Utils/history.js +144 -0
- package/lib/Utils/html-app.d.ts +14 -0
- package/lib/Utils/html-app.js +97 -0
- package/lib/Utils/html-multiplayer.d.ts +8 -0
- package/lib/Utils/html-multiplayer.js +90 -0
- package/lib/Utils/humanizer.d.ts +8 -0
- package/lib/Utils/humanizer.js +74 -0
- package/lib/Utils/identity-change-handler.d.ts +13 -0
- package/lib/Utils/identity-change-handler.js +49 -0
- package/lib/Utils/index.d.ts +88 -0
- package/lib/Utils/index.js +93 -0
- package/lib/Utils/jid-tools.d.ts +3 -0
- package/lib/Utils/jid-tools.js +78 -0
- package/lib/Utils/link-preview-metadata.d.ts +47 -0
- package/lib/Utils/link-preview-metadata.js +90 -0
- package/lib/Utils/link-preview.d.ts +12 -0
- package/lib/Utils/link-preview.js +84 -0
- package/lib/Utils/lock-manager.d.ts +5 -0
- package/lib/Utils/lock-manager.js +50 -0
- package/lib/Utils/logger.d.ts +2 -0
- package/lib/Utils/logger.js +2 -0
- package/lib/Utils/lt-hash.d.ts +12 -0
- package/lib/Utils/lt-hash.js +26 -0
- package/lib/Utils/make-mutex.d.ts +6 -0
- package/lib/Utils/make-mutex.js +32 -0
- package/lib/Utils/media-messages.d.ts +35 -0
- package/lib/Utils/media-messages.js +70 -0
- package/lib/Utils/media-processor.d.ts +6 -0
- package/lib/Utils/media-processor.js +174 -0
- package/lib/Utils/media-set.d.ts +6 -0
- package/lib/Utils/media-set.js +169 -0
- package/lib/Utils/message-kind.d.ts +26 -0
- package/lib/Utils/message-kind.js +138 -0
- package/lib/Utils/message-retry-manager.d.ts +79 -0
- package/lib/Utils/message-retry-manager.js +264 -0
- package/lib/Utils/message-search.d.ts +40 -0
- package/lib/Utils/message-search.js +181 -0
- package/lib/Utils/messages-media.d.ts +136 -0
- package/lib/Utils/messages-media.js +867 -0
- package/lib/Utils/messages.d.ts +66 -0
- package/lib/Utils/messages.js +2271 -0
- package/lib/Utils/meta-ai-msmsg.d.ts +3 -0
- package/lib/Utils/meta-ai-msmsg.js +132 -0
- package/lib/Utils/meta-ai.d.ts +4 -0
- package/lib/Utils/meta-ai.js +75 -0
- package/lib/Utils/migrate-auth-state.d.ts +23 -0
- package/lib/Utils/migrate-auth-state.js +126 -0
- package/lib/Utils/mini-app.d.ts +20 -0
- package/lib/Utils/mini-app.js +215 -0
- package/lib/Utils/mock-socket.d.ts +67 -0
- package/lib/Utils/mock-socket.js +254 -0
- package/lib/Utils/modern-messages.d.ts +64 -0
- package/lib/Utils/modern-messages.js +497 -0
- package/lib/Utils/native-flow.d.ts +19 -0
- package/lib/Utils/native-flow.js +112 -0
- package/lib/Utils/newsletter-status.d.ts +157 -0
- package/lib/Utils/newsletter-status.js +652 -0
- package/lib/Utils/noise-handler.d.ts +20 -0
- package/lib/Utils/noise-handler.js +200 -0
- package/lib/Utils/offline-node-processor.d.ts +9 -0
- package/lib/Utils/offline-node-processor.js +39 -0
- package/lib/Utils/pairing-utils.d.ts +5 -0
- package/lib/Utils/pairing-utils.js +29 -0
- package/lib/Utils/passkey.d.ts +4 -0
- package/lib/Utils/passkey.js +11 -0
- package/lib/Utils/past-participants.d.ts +2 -0
- package/lib/Utils/past-participants.js +40 -0
- package/lib/Utils/payment-detection.d.ts +40 -0
- package/lib/Utils/payment-detection.js +213 -0
- package/lib/Utils/payment-guard.d.ts +28 -0
- package/lib/Utils/payment-guard.js +143 -0
- package/lib/Utils/payment-messages.d.ts +42 -0
- package/lib/Utils/payment-messages.js +161 -0
- package/lib/Utils/payment-utils.d.ts +75 -0
- package/lib/Utils/payment-utils.js +145 -0
- package/lib/Utils/phone-utils.d.ts +3 -0
- package/lib/Utils/phone-utils.js +29 -0
- package/lib/Utils/pre-key-manager.d.ts +25 -0
- package/lib/Utils/pre-key-manager.js +105 -0
- package/lib/Utils/process-message.d.ts +103 -0
- package/lib/Utils/process-message.js +868 -0
- package/lib/Utils/qr-terminal.d.ts +1 -0
- package/lib/Utils/qr-terminal.js +16 -0
- package/lib/Utils/reconnect-backoff.d.ts +25 -0
- package/lib/Utils/reconnect-backoff.js +47 -0
- package/lib/Utils/reporting-utils.d.ts +12 -0
- package/lib/Utils/reporting-utils.js +257 -0
- package/lib/Utils/rich-message-utils.d.ts +54 -0
- package/lib/Utils/rich-message-utils.js +435 -0
- package/lib/Utils/rich-messages.d.ts +298 -0
- package/lib/Utils/rich-messages.js +1145 -0
- package/lib/Utils/scheduled-message.d.ts +81 -0
- package/lib/Utils/scheduled-message.js +101 -0
- package/lib/Utils/scheduling.d.ts +59 -0
- package/lib/Utils/scheduling.js +139 -0
- package/lib/Utils/signal.d.ts +82 -0
- package/lib/Utils/signal.js +200 -0
- package/lib/Utils/stanza-ack.d.ts +16 -0
- package/lib/Utils/stanza-ack.js +37 -0
- package/lib/Utils/status-stickers.d.ts +79 -0
- package/lib/Utils/status-stickers.js +261 -0
- package/lib/Utils/status.d.ts +107 -0
- package/lib/Utils/status.js +131 -0
- package/lib/Utils/sticker-pack-maker.d.ts +20 -0
- package/lib/Utils/sticker-pack-maker.js +112 -0
- package/lib/Utils/stickerpack.d.ts +18 -0
- package/lib/Utils/stickerpack.js +316 -0
- package/lib/Utils/sync-action-utils.d.ts +2 -0
- package/lib/Utils/sync-action-utils.js +48 -0
- package/lib/Utils/tag.d.ts +8 -0
- package/lib/Utils/tag.js +45 -0
- package/lib/Utils/tc-token-utils.d.ts +29 -0
- package/lib/Utils/tc-token-utils.js +162 -0
- package/lib/Utils/templates.d.ts +86 -0
- package/lib/Utils/templates.js +148 -0
- package/lib/Utils/text-format.d.ts +13 -0
- package/lib/Utils/text-format.js +81 -0
- package/lib/Utils/text-tools.d.ts +3 -0
- package/lib/Utils/text-tools.js +38 -0
- package/lib/Utils/ttl-cache.d.ts +29 -0
- package/lib/Utils/ttl-cache.js +123 -0
- package/lib/Utils/use-cache-manager-auth-state.d.ts +22 -0
- package/lib/Utils/use-cache-manager-auth-state.js +86 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +20 -0
- package/lib/Utils/use-multi-file-auth-state.js +201 -0
- package/lib/Utils/use-single-file-auth-state.d.ts +10 -0
- package/lib/Utils/use-single-file-auth-state.js +111 -0
- package/lib/Utils/use-sqlite-auth-state.d.ts +13 -0
- package/lib/Utils/use-sqlite-auth-state.js +171 -0
- package/lib/Utils/username.d.ts +22 -0
- package/lib/Utils/username.js +59 -0
- package/lib/Utils/validate-connection.d.ts +43 -0
- package/lib/Utils/validate-connection.js +197 -0
- package/lib/Utils/vcard.d.ts +40 -0
- package/lib/Utils/vcard.js +92 -0
- package/lib/Utils/voice-note.d.ts +13 -0
- package/lib/Utils/voice-note.js +47 -0
- package/lib/VoIP/audio-feeder.d.ts +15 -0
- package/lib/VoIP/audio-feeder.js +132 -0
- package/lib/VoIP/index.d.ts +22 -0
- package/lib/VoIP/index.js +277 -0
- package/lib/VoIP/relay-transport.d.ts +16 -0
- package/lib/VoIP/relay-transport.js +559 -0
- package/lib/VoIP/signaling.d.ts +16 -0
- package/lib/VoIP/signaling.js +624 -0
- package/lib/VoIP/types.d.ts +11 -0
- package/lib/VoIP/types.js +17 -0
- package/lib/VoIP/wasm-engine.d.ts +28 -0
- package/lib/VoIP/wasm-engine.js +1214 -0
- package/lib/VoIP/worker-bootstrap.d.ts +1 -0
- package/lib/VoIP/worker-bootstrap.js +1042 -0
- package/lib/WABinary/constants.d.ts +61 -0
- package/lib/WABinary/constants.js +1466 -0
- package/lib/WABinary/decode.d.ts +9 -0
- package/lib/WABinary/decode.js +261 -0
- package/lib/WABinary/encode.d.ts +2 -0
- package/lib/WABinary/encode.js +219 -0
- package/lib/WABinary/generic-utils.d.ts +45 -0
- package/lib/WABinary/generic-utils.js +285 -0
- package/lib/WABinary/index.d.ts +5 -0
- package/lib/WABinary/index.js +5 -0
- package/lib/WABinary/jid-utils.d.ts +32 -0
- package/lib/WABinary/jid-utils.js +102 -0
- package/lib/WABinary/types.d.ts +1 -0
- package/lib/WABinary/types.js +1 -0
- package/lib/WAM/BinaryInfo.d.ts +7 -0
- package/lib/WAM/BinaryInfo.js +9 -0
- package/lib/WAM/constants.d.ts +34926 -0
- package/lib/WAM/constants.js +22852 -0
- package/lib/WAM/encode.d.ts +1 -0
- package/lib/WAM/encode.js +149 -0
- package/lib/WAM/index.d.ts +3 -0
- package/lib/WAM/index.js +3 -0
- package/lib/WAUSync/Protocols/USyncBusinessProtocol.d.ts +43 -0
- package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +32 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +36 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +51 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +29 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +60 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +26 -0
- package/lib/WAUSync/Protocols/USyncFeatureProtocol.d.ts +13 -0
- package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +28 -0
- package/lib/WAUSync/Protocols/USyncPictureProtocol.d.ts +22 -0
- package/lib/WAUSync/Protocols/USyncPictureProtocol.js +28 -0
- package/lib/WAUSync/Protocols/USyncSidelistProtocol.d.ts +20 -0
- package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +23 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +37 -0
- package/lib/WAUSync/Protocols/USyncTextStatusProtocol.d.ts +14 -0
- package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +24 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +9 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +24 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +38 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +49 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +14 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +28 -0
- package/lib/WAUSync/Protocols/index.d.ts +12 -0
- package/lib/WAUSync/Protocols/index.js +12 -0
- package/lib/WAUSync/USyncQuery.d.ts +25 -0
- package/lib/WAUSync/USyncQuery.js +140 -0
- package/lib/WAUSync/USyncUser.d.ts +24 -0
- package/lib/WAUSync/USyncUser.js +47 -0
- package/lib/WAUSync/index.d.ts +3 -0
- package/lib/WAUSync/index.js +3 -0
- package/lib/assets/wasm/loader.js +5 -0
- package/lib/assets/wasm/whatsapp.wasm +0 -0
- package/lib/assets/wasm/worker-modules.js +273 -0
- package/lib/exports-extra.d.ts +45 -0
- package/lib/exports-extra.js +47 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.js +24 -0
- package/package.json +161 -4
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// Vanz@Port --- ported from @vinzsocket/baileys 3.3.13 (sticker-pack.js). Creator credits untouched. See NOTICE.md.
|
|
2
|
+
/**
|
|
3
|
+
* Default emojis assigned to stickers when none are provided.
|
|
4
|
+
* Rotates through this list by sticker index.
|
|
5
|
+
*/
|
|
6
|
+
const DEFAULT_EMOJIS = [
|
|
7
|
+
"😀",
|
|
8
|
+
"😂",
|
|
9
|
+
"😍",
|
|
10
|
+
"🔥",
|
|
11
|
+
"👍",
|
|
12
|
+
"🎉",
|
|
13
|
+
"😎",
|
|
14
|
+
"🤩",
|
|
15
|
+
"💯",
|
|
16
|
+
"🥳",
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Normalize a single sticker entry.
|
|
21
|
+
* Input can be:
|
|
22
|
+
* - Buffer
|
|
23
|
+
* - { url: string }
|
|
24
|
+
* - { sticker: Buffer | { url: string }, emojis?: string[], accessibilityLabel?: string }
|
|
25
|
+
*
|
|
26
|
+
* @param {Buffer | { url: string } | object} entry
|
|
27
|
+
* @param {number} index
|
|
28
|
+
* @returns {{ sticker: Buffer | { url: string }, emojis: string[], accessibilityLabel: string }}
|
|
29
|
+
*/
|
|
30
|
+
const normalizeSticker = (entry, index) => {
|
|
31
|
+
if (
|
|
32
|
+
Buffer.isBuffer(entry) ||
|
|
33
|
+
(entry &&
|
|
34
|
+
typeof entry === "object" &&
|
|
35
|
+
"url" in entry &&
|
|
36
|
+
!("sticker" in entry))
|
|
37
|
+
) {
|
|
38
|
+
return {
|
|
39
|
+
sticker: entry,
|
|
40
|
+
emojis: [DEFAULT_EMOJIS[index % DEFAULT_EMOJIS.length]],
|
|
41
|
+
accessibilityLabel: "",
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
sticker: entry.sticker || entry.data,
|
|
46
|
+
emojis: entry.emojis || [DEFAULT_EMOJIS[index % DEFAULT_EMOJIS.length]],
|
|
47
|
+
accessibilityLabel: entry.accessibilityLabel || "",
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Build a stickerPack message object ready to pass to sock.sendMessage.
|
|
53
|
+
*
|
|
54
|
+
* @param {object} options
|
|
55
|
+
* @param {string} options.name - Pack display name
|
|
56
|
+
* @param {string} [options.publisher] - Pack publisher/author name
|
|
57
|
+
* @param {string} [options.description] - Pack description
|
|
58
|
+
* @param {string} [options.packId] - Custom pack ID (auto-generated if omitted)
|
|
59
|
+
* @param {Array<Buffer | { url: string } | { sticker: Buffer | { url: string }, emojis?: string[] }>} options.stickers
|
|
60
|
+
* List of stickers — accepts raw buffers, URL objects, or full sticker descriptor objects.
|
|
61
|
+
* @param {Buffer | { url: string }} [options.cover]
|
|
62
|
+
* Tray/cover image. Defaults to the first sticker if omitted.
|
|
63
|
+
* @param {object} [options.contextInfo] - Optional context info (mentions, forwarding, etc.)
|
|
64
|
+
* @returns {{ stickerPack: object }}
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* // With buffers
|
|
68
|
+
* await sock.sendMessage(jid, makeStickerPack({
|
|
69
|
+
* name: 'My Pack',
|
|
70
|
+
* stickers: [buf1, buf2, buf3]
|
|
71
|
+
* }));
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* // With URLs
|
|
75
|
+
* await sock.sendMessage(jid, makeStickerPack({
|
|
76
|
+
* name: 'Anime Pack',
|
|
77
|
+
* publisher: 'Ourin AI',
|
|
78
|
+
* stickers: [
|
|
79
|
+
* { url: 'https://example.com/s1.webp', emojis: ['😀'] },
|
|
80
|
+
* { url: 'https://example.com/s2.webp' }
|
|
81
|
+
* ],
|
|
82
|
+
* cover: { url: 'https://example.com/cover.jpg' }
|
|
83
|
+
* }));
|
|
84
|
+
*/
|
|
85
|
+
export const makeStickerPack = ({
|
|
86
|
+
name,
|
|
87
|
+
publisher = "Ourin AI",
|
|
88
|
+
description = "",
|
|
89
|
+
packId,
|
|
90
|
+
stickers = [],
|
|
91
|
+
cover,
|
|
92
|
+
contextInfo,
|
|
93
|
+
} = {}) => {
|
|
94
|
+
if (!name) throw new Error("makeStickerPack: name is required");
|
|
95
|
+
if (!stickers.length)
|
|
96
|
+
throw new Error("makeStickerPack: at least one sticker is required");
|
|
97
|
+
|
|
98
|
+
const normalizedStickers = stickers.map(normalizeSticker);
|
|
99
|
+
const resolvedCover = cover ?? normalizedStickers[0].sticker;
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
stickerPack: {
|
|
103
|
+
name,
|
|
104
|
+
publisher,
|
|
105
|
+
description,
|
|
106
|
+
...(packId ? { packId } : {}),
|
|
107
|
+
stickers: normalizedStickers,
|
|
108
|
+
cover: resolvedCover,
|
|
109
|
+
},
|
|
110
|
+
...(contextInfo ? { contextInfo } : {}),
|
|
111
|
+
};
|
|
112
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function isWebPBuffer(buffer: any): boolean;
|
|
2
|
+
export function isAnimatedWebP(buffer: any): any;
|
|
3
|
+
export function isLottieBuffer(buffer: any): any;
|
|
4
|
+
export function convertToWebP(input: any): Promise<{
|
|
5
|
+
buffer: any;
|
|
6
|
+
isAnimated: any;
|
|
7
|
+
}>;
|
|
8
|
+
export function generateStickerPackId(): string;
|
|
9
|
+
export function buildStickerPackProto(pack: any): {
|
|
10
|
+
name: any;
|
|
11
|
+
publisher: any;
|
|
12
|
+
packId: any;
|
|
13
|
+
description: any;
|
|
14
|
+
};
|
|
15
|
+
/** stickerPack message type marker — for use with getMediaType()-style dispatch. */
|
|
16
|
+
export const STICKER_PACK_MESSAGE_TYPE: "sticker_pack";
|
|
17
|
+
export function prepareStickerPackMessageItsliaaa(message: any, options: any): Promise<proto.Message.StickerPackMessage>;
|
|
18
|
+
import { proto } from '../../WAProto/index.js';
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ported from Bail-master addons/stickerpack.ts.
|
|
3
|
+
*
|
|
4
|
+
* Adds support for building/sending WhatsApp Sticker Pack messages.
|
|
5
|
+
*
|
|
6
|
+
* Exports:
|
|
7
|
+
* - convertToWebP() — converts a Buffer, URL string, or Stream into a WebP
|
|
8
|
+
* sticker buffer (passthrough if already WebP), sharp → @napi-rs/image
|
|
9
|
+
* fallback chain, 512x512 'inside' fit, quality 80.
|
|
10
|
+
* - generateStickerPackId() — generates a random pack ID
|
|
11
|
+
* - buildStickerPackProto() — builds the proto-level payload for a StickerPackMessage
|
|
12
|
+
* - STICKER_PACK_MESSAGE_TYPE — the message type string 'sticker_pack'
|
|
13
|
+
* - prepareStickerPackMessageItsliaaa() — full ZIP-build + upload + thumbnail
|
|
14
|
+
* pipeline for a ready-to-send stickerPackMessage.
|
|
15
|
+
*
|
|
16
|
+
* NOTE: source imported isWebPBuffer/isAnimatedWebP from its own
|
|
17
|
+
* from-messages.ts, which is not part of this fork's port. Reimplemented
|
|
18
|
+
* below as small standalone binary-sniffing helpers (RIFF/WEBP header +
|
|
19
|
+
* ANIM chunk check) so this file has no external dependency on that addon.
|
|
20
|
+
*/
|
|
21
|
+
import { Boom } from '@hapi/boom';
|
|
22
|
+
import { zip } from 'fflate';
|
|
23
|
+
import { promises as fsPromises } from 'fs';
|
|
24
|
+
import { gunzipSync, gzipSync } from 'zlib';
|
|
25
|
+
import { proto } from '../../WAProto/index.js';
|
|
26
|
+
import { sha256 } from './crypto.js';
|
|
27
|
+
import { generateMessageIDV2, unixTimestampSeconds } from './generics.js';
|
|
28
|
+
import { encryptedStream, getImageProcessingLibrary, getStream, toBuffer } from './messages-media.js';
|
|
29
|
+
/** True if `buffer` starts with a RIFF....WEBP container header. */
|
|
30
|
+
export const isWebPBuffer = (buffer) => {
|
|
31
|
+
return (buffer.length > 12 &&
|
|
32
|
+
buffer.toString('ascii', 0, 4) === 'RIFF' &&
|
|
33
|
+
buffer.toString('ascii', 8, 12) === 'WEBP');
|
|
34
|
+
};
|
|
35
|
+
/** True if a WebP buffer contains an ANIM chunk (animated sticker). */
|
|
36
|
+
export const isAnimatedWebP = (buffer) => {
|
|
37
|
+
return isWebPBuffer(buffer) && buffer.includes(Buffer.from('ANIM', 'ascii'));
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Vanz@Port (2.0.3) --- from Bail-master addons/from-messages.ts (isLottieBuffer, PR #260 rsalcara/InfiniteAPI).
|
|
41
|
+
* Detects Lottie/WAS stickers: gzip-compressed Lottie JSON ("WAS") or raw Lottie JSON.
|
|
42
|
+
* Gunzip output is capped at 50 MB so a hostile gzip bomb cannot exhaust memory.
|
|
43
|
+
*/
|
|
44
|
+
export const isLottieBuffer = (buffer) => {
|
|
45
|
+
if (!Buffer.isBuffer(buffer) || buffer.length < 2) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
let jsonBuffer;
|
|
49
|
+
if (buffer[0] === 0x1f && buffer[1] === 0x8b) {
|
|
50
|
+
try {
|
|
51
|
+
jsonBuffer = gunzipSync(buffer, { maxOutputLength: 50 * 1024 * 1024 });
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (buffer[0] === 0x7b) {
|
|
58
|
+
jsonBuffer = buffer;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
const head = jsonBuffer.toString('utf8', 0, Math.min(jsonBuffer.length, 4096));
|
|
64
|
+
return head.includes('"v"') && head.includes('"layers"') && head.includes('"ip"') && head.includes('"op"');
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Convert a Buffer, URL string, or Stream into a WebP sticker buffer.
|
|
68
|
+
* If the input is already a valid WebP, it's returned untouched (and
|
|
69
|
+
* `isAnimated` reflects whether it's an animated WebP).
|
|
70
|
+
*/
|
|
71
|
+
export const convertToWebP = async (input) => {
|
|
72
|
+
const { stream } = await getStream(input);
|
|
73
|
+
const buffer = await toBuffer(stream);
|
|
74
|
+
if (isWebPBuffer(buffer)) {
|
|
75
|
+
return { buffer, isAnimated: isAnimatedWebP(buffer) };
|
|
76
|
+
}
|
|
77
|
+
const lib = await getImageProcessingLibrary();
|
|
78
|
+
const hasSharp = 'sharp' in lib && !!lib.sharp?.default;
|
|
79
|
+
const hasImage = 'image' in lib && !!lib.image?.Transformer;
|
|
80
|
+
if (!hasSharp && !hasImage) {
|
|
81
|
+
throw new Boom('No image processing library (sharp or @napi-rs/image) available for converting sticker to WebP.');
|
|
82
|
+
}
|
|
83
|
+
let webpBuffer;
|
|
84
|
+
if (hasSharp) {
|
|
85
|
+
webpBuffer = await lib.sharp
|
|
86
|
+
.default(buffer)
|
|
87
|
+
.resize(512, 512, { fit: 'inside' })
|
|
88
|
+
.webp({ quality: 80 })
|
|
89
|
+
.toBuffer();
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
webpBuffer = await new lib.image.Transformer(buffer).resize(512, 512).webp(80);
|
|
93
|
+
}
|
|
94
|
+
return { buffer: webpBuffer, isAnimated: false };
|
|
95
|
+
};
|
|
96
|
+
/** Generate a random sticker pack ID (16 hex chars). */
|
|
97
|
+
export const generateStickerPackId = () => {
|
|
98
|
+
const arr = new Uint8Array(8);
|
|
99
|
+
for (let i = 0; i < 8; i++)
|
|
100
|
+
arr[i] = Math.floor(Math.random() * 256);
|
|
101
|
+
return Array.from(arr)
|
|
102
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
103
|
+
.join('');
|
|
104
|
+
};
|
|
105
|
+
/** Build the proto-level stickerPackMessage payload (name/publisher/packId/description only). */
|
|
106
|
+
export const buildStickerPackProto = (pack) => ({
|
|
107
|
+
name: pack.name,
|
|
108
|
+
publisher: pack.publisher,
|
|
109
|
+
packId: pack.packId ?? generateStickerPackId(),
|
|
110
|
+
description: pack.description ?? ''
|
|
111
|
+
});
|
|
112
|
+
/** stickerPack message type marker — for use with getMediaType()-style dispatch. */
|
|
113
|
+
export const STICKER_PACK_MESSAGE_TYPE = 'sticker_pack';
|
|
114
|
+
const ITSL_CONCURRENCY_LIMIT = 15;
|
|
115
|
+
/**
|
|
116
|
+
* Build a complete, ready-to-send stickerPackMessage (ZIP built, encrypted,
|
|
117
|
+
* and uploaded) — full pipeline: per-sticker WebP conversion (15-way
|
|
118
|
+
* concurrency batching), 1MB per-sticker size limit, 60-sticker pack limit,
|
|
119
|
+
* cover→trayIcon-in-ZIP, and a separate 252×252 JPEG thumbnail upload.
|
|
120
|
+
*/
|
|
121
|
+
export const prepareStickerPackMessageItsliaaa = async (message, options) => {
|
|
122
|
+
const { cover, stickers = [], name = '📦 Sticker Pack', publisher = 'Vanzxy', description = '🏷️ vanzxy/baileys', packId } = message;
|
|
123
|
+
if (stickers.length > 60) {
|
|
124
|
+
throw new Boom('Sticker pack exceeds the maximum limit of 60 stickers', { statusCode: 400 });
|
|
125
|
+
}
|
|
126
|
+
if (stickers.length === 0) {
|
|
127
|
+
throw new Boom('Sticker pack must contain at least one sticker', { statusCode: 400 });
|
|
128
|
+
}
|
|
129
|
+
if (!cover) {
|
|
130
|
+
throw new Boom('Sticker pack must contain a cover', { statusCode: 400 });
|
|
131
|
+
}
|
|
132
|
+
const { logger } = options;
|
|
133
|
+
// Media caching (keyed by concatenated sticker URLs, if all stickers are URL-based)
|
|
134
|
+
let cacheableKey = false;
|
|
135
|
+
if (stickers.length && options.mediaCache) {
|
|
136
|
+
const urls = [];
|
|
137
|
+
for (const s of stickers) {
|
|
138
|
+
const data = s.data;
|
|
139
|
+
if (typeof data === 'object' && data?.url)
|
|
140
|
+
urls.push(data.url);
|
|
141
|
+
}
|
|
142
|
+
if (urls.length > 0)
|
|
143
|
+
cacheableKey = 'sticker:' + urls.join('@');
|
|
144
|
+
}
|
|
145
|
+
if (cacheableKey) {
|
|
146
|
+
const mediaBuff = await options.mediaCache.get(cacheableKey);
|
|
147
|
+
if (mediaBuff) {
|
|
148
|
+
logger?.debug({ cacheableKey }, 'got media cache hit');
|
|
149
|
+
return proto.Message.StickerPackMessage.decode(mediaBuff);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const lib = await getImageProcessingLibrary();
|
|
153
|
+
const hasSharp = 'sharp' in lib && !!lib.sharp?.default;
|
|
154
|
+
const hasImage = 'image' in lib && !!lib.image?.Transformer;
|
|
155
|
+
if (!hasSharp && !hasImage) {
|
|
156
|
+
throw new Boom('No image processing library (sharp or @napi-rs/image) available for converting sticker to WebP.');
|
|
157
|
+
}
|
|
158
|
+
const stickerPackIdValue = packId ?? generateMessageIDV2();
|
|
159
|
+
const stickerData = {};
|
|
160
|
+
const stickerMetadata = new Array(stickers.length);
|
|
161
|
+
for (let i = 0; i < stickers.length; i += ITSL_CONCURRENCY_LIMIT) {
|
|
162
|
+
const chunkEnd = Math.min(i + ITSL_CONCURRENCY_LIMIT, stickers.length);
|
|
163
|
+
const promises = [];
|
|
164
|
+
for (let j = i; j < chunkEnd; j++) {
|
|
165
|
+
promises.push((async (index) => {
|
|
166
|
+
const sticker = stickers[index];
|
|
167
|
+
const { stream } = await getStream(sticker.data);
|
|
168
|
+
const buffer = await toBuffer(stream);
|
|
169
|
+
let webpBuffer;
|
|
170
|
+
let isAnimated = false;
|
|
171
|
+
// Vanz@Port (2.0.3): Lottie/WAS stickers go into the pack as-is (raw JSON is gzipped to WAS)
|
|
172
|
+
// instead of being fed to sharp, which cannot decode them.
|
|
173
|
+
const isLottie = sticker.isLottie !== undefined ? !!sticker.isLottie : isLottieBuffer(buffer);
|
|
174
|
+
if (isLottie) {
|
|
175
|
+
const wasBuffer = buffer[0] === 0x7b ? gzipSync(buffer) : buffer;
|
|
176
|
+
if (wasBuffer.length > 1024 * 1024) {
|
|
177
|
+
throw new Boom(`Sticker at index ${index} exceeds the 1MB size limit`, { statusCode: 400 });
|
|
178
|
+
}
|
|
179
|
+
const wasName = `${sha256(wasBuffer).toString('base64').replace(/\//g, '-')}.was`;
|
|
180
|
+
stickerData[wasName] = [new Uint8Array(wasBuffer), { level: 0 }];
|
|
181
|
+
stickerMetadata[index] = {
|
|
182
|
+
fileName: wasName,
|
|
183
|
+
mimetype: 'application/was',
|
|
184
|
+
isAnimated: true,
|
|
185
|
+
isLottie: true,
|
|
186
|
+
emojis: sticker.emojis || ['✨'],
|
|
187
|
+
accessibilityLabel: sticker.accessibilityLabel || ''
|
|
188
|
+
};
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (isWebPBuffer(buffer)) {
|
|
192
|
+
webpBuffer = buffer;
|
|
193
|
+
isAnimated = isAnimatedWebP(buffer);
|
|
194
|
+
}
|
|
195
|
+
else if (hasSharp) {
|
|
196
|
+
webpBuffer = await lib.sharp
|
|
197
|
+
.default(buffer)
|
|
198
|
+
.resize(512, 512, { fit: 'inside' })
|
|
199
|
+
.webp({ quality: 80 })
|
|
200
|
+
.toBuffer();
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
webpBuffer = await new lib.image.Transformer(buffer).resize(512, 512).webp(80);
|
|
204
|
+
}
|
|
205
|
+
if (webpBuffer.length > 1024 * 1024) {
|
|
206
|
+
throw new Boom(`Sticker at index ${index} exceeds the 1MB size limit`, { statusCode: 400 });
|
|
207
|
+
}
|
|
208
|
+
const hash = sha256(webpBuffer).toString('base64').replace(/\//g, '-');
|
|
209
|
+
const fileName = `${hash}.webp`;
|
|
210
|
+
stickerData[fileName] = [new Uint8Array(webpBuffer), { level: 0 }];
|
|
211
|
+
stickerMetadata[index] = {
|
|
212
|
+
fileName,
|
|
213
|
+
mimetype: 'image/webp',
|
|
214
|
+
isAnimated,
|
|
215
|
+
emojis: sticker.emojis || ['✨'],
|
|
216
|
+
accessibilityLabel: sticker.accessibilityLabel || ''
|
|
217
|
+
};
|
|
218
|
+
})(j));
|
|
219
|
+
}
|
|
220
|
+
await Promise.all(promises);
|
|
221
|
+
}
|
|
222
|
+
const trayIconFileName = `${stickerPackIdValue}.webp`;
|
|
223
|
+
const { stream: coverStream } = await getStream(cover);
|
|
224
|
+
const coverBuffer = await toBuffer(coverStream);
|
|
225
|
+
let coverWebpBuffer;
|
|
226
|
+
if (isWebPBuffer(coverBuffer)) {
|
|
227
|
+
coverWebpBuffer = coverBuffer;
|
|
228
|
+
}
|
|
229
|
+
else if (hasSharp) {
|
|
230
|
+
coverWebpBuffer = await lib.sharp
|
|
231
|
+
.default(coverBuffer)
|
|
232
|
+
.resize(512, 512, { fit: 'inside' })
|
|
233
|
+
.webp({ quality: 80 })
|
|
234
|
+
.toBuffer();
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
coverWebpBuffer = await new lib.image.Transformer(coverBuffer).resize(512, 512).webp(80);
|
|
238
|
+
}
|
|
239
|
+
stickerData[trayIconFileName] = [new Uint8Array(coverWebpBuffer), { level: 0 }];
|
|
240
|
+
const zipBuffer = await new Promise((resolve, reject) => {
|
|
241
|
+
zip(stickerData, (error, data) => (error ? reject(error) : resolve(Buffer.from(data))));
|
|
242
|
+
});
|
|
243
|
+
const stickerPackUpload = await encryptedStream(zipBuffer, 'sticker-pack', { logger, opts: options.options });
|
|
244
|
+
let stickerPackUploadResult;
|
|
245
|
+
try {
|
|
246
|
+
stickerPackUploadResult = await options.upload(stickerPackUpload.encFilePath, {
|
|
247
|
+
fileEncSha256B64: stickerPackUpload.fileEncSha256.toString('base64'),
|
|
248
|
+
mediaType: 'sticker-pack',
|
|
249
|
+
timeoutMs: options.mediaUploadTimeoutMs
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
finally {
|
|
253
|
+
fsPromises.unlink(stickerPackUpload.encFilePath).catch(() => logger?.warn('failed to remove tmp file'));
|
|
254
|
+
}
|
|
255
|
+
const obj = {
|
|
256
|
+
name,
|
|
257
|
+
publisher,
|
|
258
|
+
stickerPackId: stickerPackIdValue,
|
|
259
|
+
packDescription: description,
|
|
260
|
+
stickerPackOrigin: proto.Message.StickerPackMessage.StickerPackOrigin.USER_CREATED,
|
|
261
|
+
stickerPackSize: zipBuffer.length,
|
|
262
|
+
stickers: stickerMetadata,
|
|
263
|
+
fileSha256: stickerPackUpload.fileSha256,
|
|
264
|
+
fileEncSha256: stickerPackUpload.fileEncSha256,
|
|
265
|
+
mediaKey: stickerPackUpload.mediaKey,
|
|
266
|
+
directPath: stickerPackUploadResult.directPath,
|
|
267
|
+
fileLength: stickerPackUpload.fileLength,
|
|
268
|
+
mediaKeyTimestamp: unixTimestampSeconds(),
|
|
269
|
+
trayIconFileName
|
|
270
|
+
};
|
|
271
|
+
try {
|
|
272
|
+
let thumbnailBuffer;
|
|
273
|
+
if (hasSharp) {
|
|
274
|
+
thumbnailBuffer = await lib.sharp.default(coverBuffer).resize(252, 252).jpeg().toBuffer();
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// hasImage is guaranteed here since hasSharp||hasImage is enforced above.
|
|
278
|
+
thumbnailBuffer = await new lib.image.Transformer(coverBuffer).resize(252, 252).jpeg();
|
|
279
|
+
}
|
|
280
|
+
if (!thumbnailBuffer || thumbnailBuffer.length === 0) {
|
|
281
|
+
throw new Error('Failed to generate thumbnail buffer');
|
|
282
|
+
}
|
|
283
|
+
const thumbUpload = await encryptedStream(thumbnailBuffer, 'thumbnail-sticker-pack', {
|
|
284
|
+
logger,
|
|
285
|
+
opts: options.options,
|
|
286
|
+
mediaKey: stickerPackUpload.mediaKey
|
|
287
|
+
});
|
|
288
|
+
let thumbUploadResult;
|
|
289
|
+
try {
|
|
290
|
+
thumbUploadResult = await options.upload(thumbUpload.encFilePath, {
|
|
291
|
+
fileEncSha256B64: thumbUpload.fileEncSha256.toString('base64'),
|
|
292
|
+
mediaType: 'thumbnail-sticker-pack',
|
|
293
|
+
timeoutMs: options.mediaUploadTimeoutMs
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
finally {
|
|
297
|
+
fsPromises.unlink(thumbUpload.encFilePath).catch(() => logger?.warn('failed to remove tmp file'));
|
|
298
|
+
}
|
|
299
|
+
Object.assign(obj, {
|
|
300
|
+
thumbnailDirectPath: thumbUploadResult.directPath,
|
|
301
|
+
thumbnailSha256: thumbUpload.fileSha256,
|
|
302
|
+
thumbnailEncSha256: thumbUpload.fileEncSha256,
|
|
303
|
+
thumbnailHeight: 252,
|
|
304
|
+
thumbnailWidth: 252,
|
|
305
|
+
imageDataHash: sha256(thumbnailBuffer).toString('base64')
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
logger?.warn(`Thumbnail generation failed: ${error}`);
|
|
310
|
+
}
|
|
311
|
+
if (cacheableKey) {
|
|
312
|
+
logger?.debug({ cacheableKey }, 'set cache (background)');
|
|
313
|
+
options.mediaCache.set(cacheableKey, Buffer.from(proto.Message.StickerPackMessage.encode(obj).finish()));
|
|
314
|
+
}
|
|
315
|
+
return proto.Message.StickerPackMessage.fromObject(obj);
|
|
316
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { proto } from '../../WAProto/index.js';
|
|
2
|
+
import { isLidUser, isPnUser } from '../WABinary/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Process contactAction and return events to emit.
|
|
5
|
+
* Pure function - no side effects.
|
|
6
|
+
*/
|
|
7
|
+
export const processContactAction = (action, id, logger) => {
|
|
8
|
+
const results = [];
|
|
9
|
+
if (!id) {
|
|
10
|
+
logger?.warn({ hasFullName: !!action.fullName, hasLidJid: !!action.lidJid, hasPnJid: !!action.pnJid }, 'contactAction sync: missing id in index');
|
|
11
|
+
return results;
|
|
12
|
+
}
|
|
13
|
+
const lidJid = action.lidJid;
|
|
14
|
+
const idIsPn = isPnUser(id);
|
|
15
|
+
// PN is in index[1], not in contactAction.pnJid which is usually null
|
|
16
|
+
const phoneNumber = idIsPn ? id : action.pnJid || undefined;
|
|
17
|
+
// Always emit contacts.upsert
|
|
18
|
+
results.push({
|
|
19
|
+
event: 'contacts.upsert',
|
|
20
|
+
data: [
|
|
21
|
+
{
|
|
22
|
+
id,
|
|
23
|
+
name: action.fullName || action.firstName || action.username || undefined,
|
|
24
|
+
username: action.username || undefined,
|
|
25
|
+
lid: lidJid || undefined,
|
|
26
|
+
phoneNumber
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
});
|
|
30
|
+
// Emit lid-mapping.update if we have valid LID-PN pair
|
|
31
|
+
if (lidJid && isLidUser(lidJid) && idIsPn) {
|
|
32
|
+
results.push({
|
|
33
|
+
event: 'lid-mapping.update',
|
|
34
|
+
data: { lid: lidJid, pn: id }
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return results;
|
|
38
|
+
};
|
|
39
|
+
export const emitSyncActionResults = (ev, results) => {
|
|
40
|
+
for (const result of results) {
|
|
41
|
+
if (result.event === 'contacts.upsert') {
|
|
42
|
+
ev.emit('contacts.upsert', result.data);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
ev.emit('lid-mapping.update', result.data);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function buildTagContent(participants: any, text?: string, opts1?: { [key: string]: any;
|
|
2
|
+
hide?: boolean;
|
|
3
|
+
}): {
|
|
4
|
+
text: string;
|
|
5
|
+
mentions: any;
|
|
6
|
+
};
|
|
7
|
+
export function tagAll(sock: any, jid: any, text?: string, options?: {}): Promise<any>;
|
|
8
|
+
export function hideTag(sock: any, jid: any, text?: string, options?: {}): Promise<any>;
|
package/lib/Utils/tag.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Vanz@Port (2.0.3) --- from @japofc/baileys 2.4.1 (MIT, author JAPofc / J.AP), lib/Utils/tag.js. See NOTICE.md.
|
|
2
|
+
/**
|
|
3
|
+
* JAP@Add --- tag-all / hide-tag senders for groups.
|
|
4
|
+
*
|
|
5
|
+
* ```js
|
|
6
|
+
* await tagAll(sock, groupJid, 'Meeting at 10!') // text + @everyone list
|
|
7
|
+
* await hideTag(sock, groupJid, 'Announcement 📢') // mentions everyone, shows no tags
|
|
8
|
+
* // or as socket methods: sock.tagAll(jid, ...), sock.hideTag(jid, ...)
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
import { Boom } from '@hapi/boom';
|
|
12
|
+
const participantJids = (participants) => (participants || [])
|
|
13
|
+
.map((p) => (typeof p === 'string' ? p : p?.id))
|
|
14
|
+
.filter((j) => typeof j === 'string' && j.includes('@'));
|
|
15
|
+
/** Build `sendMessage`-ready content mentioning every participant. */
|
|
16
|
+
export const buildTagContent = (participants, text = '', { hide = false } = {}) => {
|
|
17
|
+
const mentions = participantJids(participants);
|
|
18
|
+
if (!mentions.length) {
|
|
19
|
+
throw new Boom('tagAll: no participants to mention', { statusCode: 400 });
|
|
20
|
+
}
|
|
21
|
+
const body = hide
|
|
22
|
+
? String(text || '')
|
|
23
|
+
: `${String(text || '')}\n${mentions.map((j) => `@${j.split('@')[0]}`).join(' ')}`.trim();
|
|
24
|
+
return { text: body, mentions };
|
|
25
|
+
};
|
|
26
|
+
const assertGroupSock = (sock, jid) => {
|
|
27
|
+
if (!sock || typeof sock.sendMessage !== 'function' || typeof sock.groupMetadata !== 'function') {
|
|
28
|
+
throw new Boom('tagAll(sock, ...) requires an active Baileys socket with groupMetadata', { statusCode: 400 });
|
|
29
|
+
}
|
|
30
|
+
if (typeof jid !== 'string' || !jid.endsWith('@g.us')) {
|
|
31
|
+
throw new Boom('tagAll only works in groups (@g.us)', { statusCode: 400 });
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
/** Mention all group members with a visible @list. */
|
|
35
|
+
export const tagAll = async (sock, jid, text = '', options = {}) => {
|
|
36
|
+
assertGroupSock(sock, jid);
|
|
37
|
+
const meta = await sock.groupMetadata(jid);
|
|
38
|
+
return sock.sendMessage(jid, buildTagContent(meta.participants, text), options);
|
|
39
|
+
};
|
|
40
|
+
/** Mention all group members without showing any @tags. */
|
|
41
|
+
export const hideTag = async (sock, jid, text = '', options = {}) => {
|
|
42
|
+
assertGroupSock(sock, jid);
|
|
43
|
+
const meta = await sock.groupMetadata(jid);
|
|
44
|
+
return sock.sendMessage(jid, buildTagContent(meta.participants, text, { hide: true }), options);
|
|
45
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Read the persisted tctoken JID index and return its entries (never contains the sentinel key itself). */
|
|
2
|
+
export function readTcTokenIndex(keys: any): Promise<any[]>;
|
|
3
|
+
/** Build a SignalDataSet fragment that writes the merged index (persisted ∪ added) under the sentinel key. */
|
|
4
|
+
export function buildMergedTcTokenIndexWrite(keys: any, addedJids: any): Promise<{
|
|
5
|
+
__index: {
|
|
6
|
+
token: any;
|
|
7
|
+
};
|
|
8
|
+
}>;
|
|
9
|
+
export function isTcTokenExpired(timestamp: any): boolean;
|
|
10
|
+
export function shouldSendNewTcToken(senderTimestamp: any): boolean;
|
|
11
|
+
/** Resolve JID to LID for tctoken storage (WA Web stores under LID) */
|
|
12
|
+
export function resolveTcTokenJid(jid: any, getLIDForPN: any): Promise<any>;
|
|
13
|
+
/** Resolve target JID for issuing privacy token based on AB prop 14303 */
|
|
14
|
+
export function resolveIssuanceJid(jid: any, issueToLid: any, getLIDForPN: any, getPNForLID: any): Promise<any>;
|
|
15
|
+
export function buildTcTokenFromJid(opts1: { [key: string]: any;
|
|
16
|
+
authState: any;
|
|
17
|
+
jid: any;
|
|
18
|
+
baseContent?: any[];
|
|
19
|
+
getLIDForPN: any;
|
|
20
|
+
}): Promise<any[]>;
|
|
21
|
+
export function storeTcTokensFromIqResult(opts2: { [key: string]: any;
|
|
22
|
+
result: any;
|
|
23
|
+
fallbackJid: any;
|
|
24
|
+
keys: any;
|
|
25
|
+
getLIDForPN: any;
|
|
26
|
+
onNewJidStored: any;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
/** Sentinel key under `tctoken` store holding a JSON array of tracked storage JIDs for cross-session pruning. */
|
|
29
|
+
export const TC_TOKEN_INDEX_KEY: "__index";
|