Description
Apollo (hermes#9550) added a new `REVOKED` value to the connected-account status enum. The auto-generated OpenAPI client (`src/generated/api.d.ts`) already includes `"REVOKED"` in every response status union (verified — 13 hits in the freshly-generated file), so the new value flows in cleanly to all read-paths.
But three hand-written status-style lookup maps fell back to `""` / `INACTIVE` for unknown keys, which made REVOKED accounts render as a neutral/empty badge — visually indistinguishable from `INACTIVE`. This was the only DEGRADED behavior I found in the dashboard audit; everything else handles `REVOKED` correctly.
What changed
| File | Change |
|---|
| `src/app/(project)/[org]/[project]/users/[id]/_components/status-utils.ts` | Add `REVOKED` entry → destructive (red) badge |
| `src/app/(project)/[org]/[project]/sessions/[id]/_components/sidebar/toolkit-entry.tsx` | Add `REVOKED` entry → destructive (red) badge |
| `src/components/core/listing-tables/connected-accounts-table/connected-accounts-columns.tsx` | Add `REVOKED` to `CONNECTED_ACCOUNT_STATUS` map → `{ label: "Revoked", variant: "destructive" }` |
REVOKED is treated identically to EXPIRED / FAILED — the closest existing terminal-with-no-usable-token states.
What did NOT need to change
- `src/app/(project)/[org]/[project]/users/[id]/_components/connected-account-panel.tsx` already handles `REVOKED` correctly: `showRefresh = false` (revoked tokens can't be refreshed) and `showToggleStatus = false` (revoked is a terminal state, not a simple ACTIVE↔INACTIVE toggle).
- `src/server/api/routers/consumer/resolveConnectedAccountAlias.ts` already gates on `status !== "ACTIVE"` and correctly rejects revoked accounts.
- The link-card form (`src/components/core/link-card/form-content.tsx`) operates on freshly-created connections only — `REVOKED` cannot appear there.
- `src/app/(public)/(link)/link/[token]/_components/link-screen.tsx` intentionally narrows to the four creation-time statuses (`INITIALIZING | INITIATED | ACTIVE | FAILED`).
- `src/generated/api.d.ts` is auto-regenerated from the Apollo OpenAPI spec — already includes `REVOKED`.
How did I test this PR
- `pnpm typecheck` — clean (exit 0)
- `pnpm lint` — only pre-existing errors (none in any of the three files I touched; verified with a per-file grep)
- `pnpm openapi:generate:local` — runs against staging and confirms `"REVOKED"` is in the generated client (already was)
End-to-end visual verification of a `REVOKED` badge in the running dashboard is not feasible from this sandbox: hermes#9550 is the primitives PR — the public `/api/v3.1/connected_accounts/{id}/revoke` endpoint is internal-only at this point and the Apollo team's PR description explicitly defers wiring up a public revoke route + delete-time cascade to follow-up PRs. There is no current code path that produces a `REVOKED` connection in staging or local Apollo, so I cannot demo the badge against a real account.
The change is purely additive: three keys added to three string→string lookup maps. Behavior for every other status is unchanged.
Triggered by: sarthak@composio.dev | Source: web
Session: https://zen-api-production-4c98.up.railway.app/dashboard/#/chat/zen-14dc825802da