Removed troubleshooting section related to Bridge application and MCP server as it is no longer required and code can automatically update WA web client version
* fix: proper tag version for docker images
* update: Clean up docker-publish.yml by removing blank lines
Removed unnecessary blank lines in the Docker publish workflow.
---------
Co-authored-by: Atul_Singh <atul.singh@carvaloo.com>
* update: README and screenshot
* fix: image path for n8n demo in README
* fix: convert screenshot section to HTML table format
Updated the README to use HTML table for screenshots.
* fix: remove table headers from README
Removed table headers from README.
* feat: ratelimit, ghcr package and proper project refactor from askarzh
* fix(bridge): validate media path
* update: dependencies
* fix: added LID to contact number migration
The three Send* helpers in helpers/whatsapp.go construct their HTTP
requests directly instead of going through callAPI, and were missing the
Bearer token that the bridge's JWT middleware requires. Calls reached the
bridge as 401 Unauthorized.
In practice sendMessageHandler in mcp_tool.go bypasses SendMessage and
calls callAPI directly, so the text-send path happens to work; but the
file and audio-message MCP handlers route through SendFile and
SendAudioVoiceMessage respectively, so send_file and send_audio_message
were broken end-to-end.
Same shape as the recent DownloadMedia fix: fetch a JWT via
GetOrRefreshJwtToken and add Authorization: Bearer <token> on the
outgoing request.
The HTTP API uses a JWT-based scheme, not an "ApiKey <key>" scheme.
`auth/login.go` accepts `Authorization: Bearer <api-key>` on
`/auth/login`, returns a JWT, and the JwtAuthMiddleware then expects
`Authorization: Bearer <jwt>` on every `/api/*` request. The previous
example would 401.
Replace the section with the actual two-step flow plus a working
`curl` invocation for each step. Also fix the endpoint path
(`/api/messages`, not `/messages`).
* Drop the obsolete top-level `version: "3.9"` key (Compose v2 ignores it
with a warning).
* Align `POSTGRES_DB` with the database name the bridge actually opens.
main.go opens "whatsapp" unconditionally, so the previous "testdb"
default makes the stack fail on first `docker compose up` with
`pq: database "whatsapp" does not exist`.
* Replace the public placeholder `API_KEY` / `JWT_SECRET` values with
CHANGE_ME markers and an inline command for generating safe ones, so a
user who copy-pastes the file can't accidentally bring up a bridge with
publicly-known credentials.
* Drop the hard-coded `WEBHOOK_URL` pointing at a private 192.168.x
n8n instance and replace with a commented optional example. The env
var is read with `os.Getenv`, so leaving it unset is supported.
DownloadMedia builds its HTTP request directly instead of going through
callAPI, and was missing the Bearer token that the bridge's JWT middleware
requires. As a result, every download_media MCP tool call returned 401.
Fetch a JWT via GetOrRefreshJwtToken (same path the rest of the helpers
use) and set the Authorization header on the request.
- Added ::int type casting to LIMIT and OFFSET parameters for PostgreSQL
- Fixed parameter numbering: changed placeholder(len(args)+2) to placeholder(len(args)+1) for OFFSET clause
- Resolves error: pq: could not determine data type of parameter (42P18)
This fix ensures proper parameter binding when using PostgreSQL with the
whatsapp-bridge ListChats endpoint, which is used by the MCP server
to retrieve WhatsApp chat lists.