Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

GOWS: FAILED has no reason, and temporary ban / stream replaced / client outdated leave the session silently dead

Open
#2,317 0 comments 0 reactions 0 assignees View on GitHub

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
Domain
api, backend

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

patron:PLUS

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.

patron:PLUS

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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from devlikeapro/waha

All issues in devlikeapro/waha

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.