Environment variables (server)
All four keys are required to enable the publisher; the fifth is optional.When any of the four required keys is missing,
getPusherClient() returns
null, the publisher degrades to log-only mode and the health probe reports
the component as down.Health probe
The integration health service issues a cheap authenticatedGET /channels
against the Pusher HTTP API (checkPusher()), combined with real publish
traffic recorded via recordIntegrationOutcome("pusher", ...). Better Stack
tracks the component as INT-06 on the status page.
Troubleshooting
Client shows status: disabled
Client shows status: disabled
NEXT_PUBLIC_PUSHER_KEY is empty. Set it for the environment (public value)
and redeploy the app so the build-time variable is baked in.Private channel subscription fails with AuthError
Private channel subscription fails with AuthError
The auth endpoint is misconfigured or the caller lacks
pusher:auth. Verify
the app proxies to POST /api/v3/realtime/pusher/auth and the channel
matches private-(contract|account)-{uuid}.Events are published but never received
Events are published but never received
Confirm the client cluster matches the server cluster
(
INTEGRATION_PUSHER_CLUSTER vs NEXT_PUBLIC_PUSHER_CLUSTER) and that both
sides use the same Pusher app.Health shows Pusher down but publishing works
Health shows Pusher down but publishing works
A
4xx never flips the verdict, but a missing GET /channels capability or
a network error will. Check the server credentials and outbound network.Client-side debug
usePusherChannel prints verbose lifecycle logs when either
localStorage.setItem("bbl:pusher:debug", "1") is set from the browser console
or ?pusher_debug=1 is appended to the URL.