Commit Graph

209 Commits

Author SHA1 Message Date
Renato Alcara d95b2236c0 fix(album): resolve TypeScript strict array access errors
Fix TS2345 errors where array element access (medias[i]) was inferred as
`AlbumMediaItem | undefined` instead of `AlbumMediaItem`.

Changes:
- Add non-null assertion (!) after array access in for loops
- Add explicit cast to AnyMessageContent for hasNonNullishProperty calls

The non-null assertion is safe here because we iterate with `i < medias.length`,
guaranteeing the index is valid.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 15:48:09 -03:00
Renato Alcara 6e0694e72a feat(album): add album message sending with intelligent retry and adaptive delay
Implements WhatsApp album messages (grouped media) with the following features:

- Send 2-10 images/videos grouped as a single album message
- Adaptive delay between sends based on media type (videos get 2x delay)
- Intelligent retry with exponential backoff for failed items
- parentMessageKey reference to album root (as suggested by maintainer)
- Complete result structure with success/failure tracking per item
- Validation for min (2) and max (10) media items

Types added:
- AlbumMediaItem: Single image/video with caption, mentions, dimensions
- AlbumMessageOptions: Configuration for delay, retry, continueOnFailure
- AlbumMediaResult: Per-item result with latency and retry attempts
- AlbumSendResult: Complete result with albumKey and statistics

Based on PR #2058 from WhiskeySockets/Baileys with improvements.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 14:41:19 -03:00
Renato Alcara 87ed383ba4 fix(messages): reorganize interactive message processing to execute correctly
Critical bug fix: Interactive message blocks were never being executed because
they were placed AFTER the normal text message processing block. Messages with
text+buttons were processed as plain text, ignoring the interactive features.

Changes:
- Move all interactive message processing (buttons, lists, templates, carousel)
  to BEFORE the normal text processing block
- Remove duplicate interactive message blocks that were unreachable
- Ensure correct execution order: check for interactive features first, then
  fallback to normal text processing

This fixes the runtime error where interactive message functions were not
being called properly when sending messages with buttons/lists.

Structure now:
1. Check text + buttons → buttonsMessage
2. Check text + templateButtons → templateMessage
3. Check sections → listMessage
4. Check carousel → interactiveMessage
5. Check text (normal) → extendedTextMessage
6. Other message types...

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 01:23:24 -03:00
Renato Alcara b48dbd7038 fix(types): resolve TypeScript compilation errors in interactive messages
Fixes type incompatibility error when processing buttons with media:
- Extract only media properties before passing to prepareWAMessageMedia
- Remove problematic interactiveMessage type from AnyRegularMessageContent
- Move Carouselable to text message type as Partial

This resolves the compilation error:
  error TS2345: Argument of type '...' is not assignable to parameter
  of type 'AnyMediaMessageContent'

Changes:
- src/Utils/messages.ts: Extract media content explicitly for type safety
- src/Types/Message.ts: Simplify type definitions, add Carouselable to text messages

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 01:14:58 -03:00
Renato Alcara 90db2512d9 feat(experimental): add interactive messages support (buttons, lists, templates, carousel)
⚠️ EXPERIMENTAL FEATURE - Use only for testing with disposable accounts

Implements full support for WhatsApp interactive messages including:
- Simple text buttons (up to 3 buttons)
- Buttons with images/videos
- List messages (up to 10 items in sections)
- Template buttons (quick reply, URL, call actions)
- Carousel messages (up to 10 scrollable cards)

Features:
- Feature flag 'enableInteractiveMessages' (default: true for dev/testing)
- Prometheus metrics for tracking sends, successes, failures, and latency
- Comprehensive TypeScript types for all interactive message formats
- Extensive logging with warnings about potential account bans
- Automatic 'biz' node injection when feature is enabled

CRITICAL WARNINGS:
- These features may NOT work on non-business WhatsApp accounts
- Can cause temporary or permanent account BANS
- WhatsApp actively blocks this functionality since April 2022
- Messages may be rejected or fail silently
- Use ONLY in dev environment with test accounts

Architecture:
- Added ButtonInfo, Templatable, Listable, Carouselable types to Message.ts
- Extended AnyMediaMessageContent and AnyRegularMessageContent
- Implemented message generation in messages.ts
- Added getButtonType() and getButtonArgs() helpers in messages-send.ts
- Injected 'biz' node in stanza construction with metrics tracking
- Added 4 new Prometheus metrics: interactiveMessagesSent, Success, Failures, Latency

Documentation:
- Complete usage guide in INTERACTIVE_MESSAGES.md
- Examples for all interactive message types
- Metrics monitoring queries
- Troubleshooting guide
- Migration path to WhatsApp Business API

Related issues:
- https://github.com/WhiskeySockets/Baileys/issues/56
- https://github.com/WhiskeySockets/Baileys/issues/25
- https://github.com/WhiskeySockets/Baileys/pull/2291

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 00:51:33 -03:00
Enzo Nascimento a1d69f72c9 fix(utils.normalizeMessageContent): add associatedChildMessage as one of the options to normalize (#1874)
Co-authored-by: Rajeh Taher <rajeh@reforward.dev>
2026-01-20 12:46:03 +02:00
David ??? d36d9c194c Add groupStatusMessage checks in message handling (#2258) 2026-01-20 12:41:33 +02:00
vini 0b3b2a88cd fix(messages): enhance nullish value checks in message content generation (#2180) 2026-01-18 01:11:33 +02:00
João Lucas de Oliveira Lopes c9c3481817 implement message reporting tokens (#1906)
* feat: implement message reporting tokens and privacy token handling

* feat: add support for privacy tokens in profile picture requests and history sync

* chore: pr feedback purpshell

* fix: improve privacy token handling and error messaging in socket configuration

* feat: enhance privacy token handling with improved sender mapping

* chore: removing tc token in favor of #2080

* chore: revert some unecessary changes

* feat(reporting): enhance reporting token extraction and compilation logic

* feat(reporting): add unit tests for reporting token utilities

* fix(reporting): streamline reporting token attachment logic in message sending

* fix: adjust reporting token inclusion logic to prevent retries

* chore: add return type to shouldIncludeReportingToken and improve getToken function type safety
2026-01-08 21:50:49 +02:00
vini 40f128d88a feat(events): decrypt event responses (#2056) 2025-11-19 15:17:21 +02:00
Bob f9abf44994 Feat: limitSharing (advanced conversation privacy) (#1899)
* Update messages.ts

* Update Message.ts

* lint

* lint
2025-10-11 13:46:03 +03:00
Rajeh Taher 334977f983 general: revert #1665 2025-10-03 18:14:30 +03:00
Rajeh Taher b8f695cc82 general: linting 2025-10-02 21:41:12 +03:00
João Lucas de Oliveira Lopes fb12f6d9d3 refactor: replace axios with fetch API and update related types (#1666) 2025-09-28 05:52:43 +03:00
Rajeh Taher 86d45758bb messages: add missing property in sticker messages 2025-09-26 09:20:16 +03:00
João Lucas de Oliveira Lopes 3b46d43beb fix: harden Protobuf Deserialization and Refactor Utilities (#1820)
* refactor: reorganize browser utility functions and improve buffer handling

* fix: harden protobuf deserialization and clean up code

* refactor: simplify data handling in GroupCipher and SenderKey classes

* fix: Ensure consistent Buffer hydration and remove redundant code

* refactor: update decodeAndHydrate calls to use proto types for improved type safety
2025-09-26 04:45:30 +03:00
Martín Schere 8029446511 Async + Multi Cache (#1741)
* fix: handle invalid signatureKeyPublic types in sender-key-state

- added extra check to ensure signatureKeyPublic is either a base64 string or a Buffer
- fallback to empty buffer when unexpected object type is received
- prevents ERR_INVALID_ARG_TYPE error in Buffer.from

* adjusted based on  @jlucaso1 recommmendation

* fix: handle chain key objects for skmsg group message decryption

previously, some sender chain keys were stored or retrieved as plain objects
(e.g. { '0': 85, '1': 100, ... }) instead of Buffers. this caused
"ERR_INVALID_ARG_TYPE" during initial decryption of skmsg group messages.

this fixes any chain key object is converted to a proper Buffer
before being passed to SenderChainKey.

* fix: add more robust checks and fallbacks

* feat: async cache

feat: async caching

* fix: linting issues

* fix: mget logic

---------

Co-authored-by: αѕтяσχ11 <devastro0010@gmail.com>
2025-09-14 17:13:11 +03:00
Rajeh Taher 076daae89d types: fix circular import
closes #1746
2025-09-07 14:51:13 +03:00
vini 084761dc31 feat: eventMessage sending / call link creation (#1677) 2025-09-07 14:08:18 +03:00
João Lucas de Oliveira Lopes 4d4339dae6 feat(WAProto): Optimize protobuf generation for 80%+ bundle size reduction (#1665)
* chore: remove comments and veirfy from generated proto files (improve size)

* refactor: replace fromObject with create for proto message instantiation and flag no beautiful

* chore: lint issues
2025-09-07 14:08:11 +03:00
Nurutomo cdd2f0d53f fix: correcting if logic for contextInfo (#1628) (#1629)
* fix: correcting if logic for contextInfo

* fix: typing of the logic
[BUG] Can't mention number/someone
Fixes #1628

* lint: whitespace issues
2025-07-27 00:58:14 +03:00
Rajeh Taher 8dc852ee89 proto: fix proto generation, tsc: fix node imports of compiled code 2025-07-19 23:16:35 +03:00
Rajeh Taher 90781ce0f2 eslint: upgrade to version 9 + tests: remove tests 2025-07-18 22:30:50 +03:00
Rajeh Taher 787aed88b8 project: Move to ESM Modules 2025-07-17 13:54:17 +03:00
João Lucas de Oliveira Lopes 8391c02e0b [READY FOR MERGE] Implement newsletter (#1532)
* feat: implement basic newsletter functionality with socket integration and event handling

* feat: enhance media handling for newsletters with raw media upload support

* feat: working updatePicture, removePicure, adminCount, mute, Unmute

* fix: fetchMessages

* chore: cleanup

* fix: update newsletter metadata path and query ID for consistency. newsletterMetadata works now

* chore: enhance newsletter metadata parsing and error handling

* fix: correct DELETE QueryId value in Newsletter.ts

* chore: split mex stuffs to own file

* chore: remove as any
2025-06-30 23:22:09 -03:00
devlikeapro 5ffb19120d Show poll on the sender device (#1567)
fix #675
2025-06-30 16:15:11 -03:00
Gustavo Quadri cf514fa8d7 Fix Removed Reactions Events: Emit a Socket Event in "messages.reaction" (#1371)
* fix: emit event with empty reactions

* chore: fix lint

---------

Co-authored-by: Cassio Santos <cassio@economicros.com.br>
2025-06-18 08:30:19 -03:00
canove ae0de94307 chore: fix format 2025-05-28 22:44:21 -03:00
canove eb6c6c8ba9 Merge branch 'master' of https://github.com/WhiskeySockets/Baileys into fix-eslint-prettier-editorconfig-rules 2025-05-28 22:42:28 -03:00
canove fb83e4799d chore: remove unused variables 2025-05-13 18:35:29 -03:00
canove fa706d0b50 chore: format everything 2025-05-06 12:10:19 -03:00
canove f58a38fde9 fix: allow media upload retries 2025-05-06 08:06:05 -03:00
canove 8cc8b44724 chore: lint 2025-05-05 21:33:35 -03:00
canove bff86ed4c1 fix: memory blow on large files sending through URL 2025-05-05 21:11:40 -03:00
w3nder dfe8bb3283 refactor(messageId): update all remaining usages to v2 format consistently 2025-04-30 00:59:19 -03:00
Rajeh Taher 99142aac96 proto: update manually to 2.3000.1020608496 2025-03-06 04:22:17 +02:00
contato.mateusfr@gmail.com 21f8431e61 Dependency Inversion for Logger (#1153)
* feat: interface "ILogger" created
feat: interface "ILogger" used instead of pino logger
feat: "PinoLoggerAdapter" created to implement "ILogger" interface

* feat: PinoLoggerAdapter removed
feat: ILogger mapping the features we're using from pino

* fix: sort imports

---------

Co-authored-by: Mateus Franchini de Freitas <contato.mateusfr@outlook.com>
Co-authored-by: Mateus Franchini de Freitas <mfranchini@domtec.com.br>
Co-authored-by: Rajeh Taher <rajeh@reforward.dev>
2025-03-01 18:30:51 +02:00
AstroX11 89b28a438b feat: add Id support for desktop (#1240)
* feat: add Id support for desktop

This commit adjusts the ID length check for desktop, fixing the issue where some desktop IDs were incorrectly classified as "unknown."

Baileys stopped identifying if a message was from WA Desktop (Based on my observations last Year).

This adjustment addresses this issue.

* redundancy removed

* fix: linting
2025-02-24 03:24:44 +02:00
Lucas Maia b78902fc8d messages: fix EPERM error by verifying temp file removal when sending images (#1227)
* messages: add verification to remove temp file, solve EPERM operation not permitted

* fix lint on messages

* another try to fix lint for pr health

* Fixed, too many changes were breaking the code; this should be enough

* another try to fix this
2025-02-02 11:52:55 +02:00
vini 31bc8ab4e2 [chore]: remove duplicated waveform generation (#1169) 2024-12-23 21:26:10 +02:00
Rajeh Taher 18ac07df8e lint: 0 warnings left 2024-10-14 05:15:10 +03:00
Rajeh Taher 7c9f2ebd46 feat(feature/group-invite-v4): initial/final commit (#958) 2024-08-14 12:10:37 +03:00
Rajeh Taher 020add8b9b feature(feature/pin-message): initial/final commit (#959) 2024-08-14 12:09:29 +03:00
Rajeh Taher 35f6d75cf8 fix(fix/buttons-deprecation): initial/final commit (#956) 2024-08-14 12:07:12 +03:00
Rajeh Taher e91501026c feat(feature/poll-v3): initial/final commit (#957) 2024-08-14 12:06:32 +03:00
azudin 6af6bffe31 Fix: sending ptv if true (#856) 2024-06-10 20:00:23 +03:00
azudin 8076745abf Video Note (ptvMessage) support (#840)
* Update messages-recv.ts

revert back jid to from

* fix productMessage

fixed sending catalog

* Update messages-recv.ts

* Update messages-recv.ts

* Update messages.ts

* Update ptvMessage

* Update messages.ts

* Update README.md

* Update src/Socket/messages-recv.ts

---------

Co-authored-by: Rajeh Taher <rajeh@reforward.dev>
2024-06-10 14:01:13 +03:00
arthur simas 2ae664c655 fix: downloadMediaMessage return type matched parameter (#757)
* fix: downloadMediaMessage return type matched parameter

* chore: keyword-spacing eslint rule warn instead of error

* chore: linting

aaaaaaaaaaaaaaaaaaaa
2024-05-15 18:34:06 +03:00
arthur simas d91967aa1c Revert "fix: inefficient method of extracting url from text (#741)" (#748)
* Revert "fix: inefficient method of extracting url from text (#741)"

This reverts commit f5c1affc4d.

* fix: link preview should follow redirects

* fix: allow link preview of URLs with @ sign

---------

Co-authored-by: Ezequiel Moraes <ezequielmoraesdev@gmail.com>
2024-04-29 10:44:42 +03:00
arthur simas 03f82f599e fix: enable viewOnce messages to quote (#736) 2024-04-28 14:18:29 +03:00