GOWS: FAILED has no reason, and temporary ban / stream replaced / client outdated leave the session silently dead
Maintainers usually reply within 2 days
@diego-goncalves-teixeira is already working on this.
Since Oct 16, 2026.
- #2318 by @diego-goncalves-teixeira — open
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 25/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Stale
- Tech stack
- go, typescript
Research direction
The issue identifies GOWS session status handling and says no Go engine change is needed, but names no files or tests. Start by tracing how existing PASSKEY_* and WORKING status data is produced and how GOWS events reach session status handling. Done means the listed disconnect events update status to FAILED with the specified reason fields; an open linked pull request already covers this work.
Written by the indexing model from the issue text.
Description
Is your feature request related to a problem? Please describe.
When WhatsApp ends a GOWS session, session.status doesn't tell why - and in several cases the status doesn't change at all.
whatsmeow emits these events and does not reconnect after any of them:
| whatsmeow event | When | WAHA today |
|---|---|---|
events.LoggedOut |
unpaired from the phone, or logout on connect (401 / 403 "LOCKED" / 406 "BANNED") | FAILED, no reason |
events.TemporaryBan |
connect failure 402 - temporary ban, with the ban reason code (101 too many messages to unknown people, 102 blocked by too many people, 103 too many groups, 104 same message to too many people, 106 broadcast list) and when it ends | not handled - status stays as it was |
events.StreamReplaced |
another client connected with the same session | not handled |
events.ClientOutdated |
connect failure 405 | not handled |
events.ConnectFailure |
any other connect failure whatsmeow doesn't handle | not handled |
So with a temporary ban the session silently stops working while still looking fine from the API, and for a plain logout there is no way to tell "unlinked from the phone" from "banned".
Describe the solution you'd like
Set FAILED with the reason in the status data, the same way PASSKEY_* and WORKING - { reachoutTimelock } already carry their extra info:
{
"event": "session.status",
"payload": {
"status": "FAILED",
"data": {
"reason": {
"type": "TEMPORARY_BAN",
"code": 402,
"banCode": 102,
"banExpiresAt": 1784477333
}
}
}
}
type: LOGGED_OUT | TEMPORARY_BAN | MAIN_DEVICE_GONE | UNKNOWN_LOGOUT | STREAM_REPLACED | CLIENT_OUTDATED | CONNECT_FAILURE (open set), plus the raw code, and banCode / banExpiresAt (unix seconds, like timeEnforcementEnds) for bans.
Describe alternatives you've considered
Subscribing to engine.event gives the raw whatsmeow events, but it means receiving every message, receipt and presence just to catch a disconnect (it can't be filtered by event type), and each consumer has to re-implement the whatsmeow codes. It also doesn't fix the session keeping its previous status after a temporary ban.
Additional context
GOWS, WAHA 2026.9.2. No engine (Go) change is needed - gows already streams these events. I have a PR ready for this.
- Dominant language
- TypeScript
- Stars
- 7.6k
- Forks
- 1.8k
- Avg merge
- 2d 21h
- Merged PRs (30d)
- 7
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from devlikeapro/waha
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
devlikeapro/waha#2322 ·
Maintainers usually reply within 2 days
-
patron:PLUS
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
devlikeapro/waha#2167 · 1 comment ·
Maintainers usually reply within 2 days
-
Difficulty 3/5 1-2 days Newbie friendliness 55/100
devlikeapro/waha#2324 ·
Maintainers usually reply within 2 days
-
Difficulty 3/5 1-2 days Newbie friendliness 52/100
devlikeapro/waha#2321 ·
Maintainers usually reply within 2 days
-
patron:PLUS
Difficulty 5/5 Over a week Newbie friendliness 45/100
devlikeapro/waha#2320 ·
Maintainers usually reply within 2 days
All issues in devlikeapro/waha
Similar issues
-
createAI: the ai peer range allows ai@6, which the provider cannot work withPossibly taken @akhil9tiet claimed this today. Openbug
Difficulty 1/5 Under an hour Newbie friendliness 83/100
cloudflare/agents#2690 · 3 comments ·
Maintainers usually reply within 1 day
-
[fullsend] E2E: theme — global-header ignores app.branding.fullLogo (RHDHBUGS-3670)Possibly taken @fullsend-ai-coder claimed this today. Opene2e-failure ready-to-code
Difficulty 1/5 Under an hour Newbie friendliness 78/100
redhat-developer/rhdh-plugin-export-overlays#4503 · 1 comment ·
Maintainers usually reply within 1 day
-
needs triage 📥
Difficulty 1/5 Under an hour Newbie friendliness 86/100
ethereum/ethereum-org-website#19601 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
cloudscape-design/components#5184 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
agilepathway/label-checker#805 ·
Maintainers usually reply within 1 day