Build on the exact feed
Los mismos eventos en vivo que usa el panel — enviados en el instante en que ocurren.
import { createClient } from "@supabase/supabase-js";
const supabase = createClient("https://api.busymate.net", PUBLISHABLE_KEY, {
global: { headers: { Authorization: `Bearer ${oauthToken}` } },
});
supabase
.channel("ws:<workspace_id>")
.on("broadcast", { event: "entry" }, ({ payload }) => {
console.log("new request", payload.method, payload.url, payload.status);
})
.subscribe();Push,
Impulsado por push de extremo a extremo. Suscríbete desde tu propio código en cuanto cambien el tráfico, el estado o la auditoría.
La manguera de entradas
Cada petición capturada se difunde en cuanto aterriza — por el mismo canal que consume el propio panel. Tu monitor ve lo que ve el equipo, en el mismo instante.
Cambios de tablas como streams
Dispositivos, ajustes, etiquetas, grupos de servicios, el tablero de tareas compartido — todo llega como eventos postgres_changes. Si cambió en la base de datos, te enteras. Sin timers, sin bucles de refresco.
Más que tráfico
El registro de auditoría en vivo, el progreso de importación de memoria y los eventos de control de dispositivos también son suscribibles. Construye bots de alertas, paneles de pared o automatizaciones que reaccionan a la propia plataforma.
Suscríbete desde la documentación
El explorador WS del panel se une a canales reales con tu propio token y muestra los eventos formateados según llegan. Mira el feed antes de escribir una sola línea de código.
Subscribe once,
Realtime-not-polling is a standing engineering rule here — every feature is push-driven end to end, and the dashboard itself never polls.
- 01
Connect once
One WebSocket to api.busymate.net's Realtime service, authenticated with the same OAuth token as REST and MCP.
- 02
Join channels
Subscribe to topics — a workspace firehose, a single device, fleet-wide status — each authorized by the same row-level security as the tables themselves.
- 03
Events push to you
Database triggers broadcast changes the instant rows land. No polling loop, no missed window between polls — the push IS the source of truth arriving.
- 04
React — or publish back
Feed alerting, wall dashboards and bots — or drive control flows the other way, like continuing a paused breakpoint over the proxy-control channel.
// Raw table changes — the shared to-do board
supabase
.channel("todos:all")
.on(
"postgres_changes",
{ event: "*", schema: "public", table: "todos" },
(change) => console.log(change.eventType, change.new),
)
.subscribe();A map of the
The channels your code can join — the same canonical list the in-dashboard WS explorer documents and subscribes.
ws:<workspace_id>broadcastThe workspace entries firehose — every captured request from every device, the moment it lands. The exact channel the dashboard feed renders.
ws:<workspace_id>:<owner_user_id>broadcastThe same firehose narrowed to one owner's devices — what a non-operator account subscribes.
device:<uuid>broadcastPer-device control plane: settings pushes, VPN and unpair commands, browser and farm command round-trips, live-activity messages.
devices:alldbDevice renames, pairing and status changes, fleet-wide — the reason device lists everywhere update without a refresh.
proxy-controlbroadcastDashboard ↔ proxy control flow: continue a request paused at a breakpoint, or resend a captured request.
settings:global · settings_device:all · settings_user:alldbSettings pushes at every tier — capture engines refetch their effective settings the moment any layer changes.
service_groups:alldbService-group membership and rule changes, so grouped devices re-apply rules live.
breakpoint_events:alldbEvery request pausing and resuming at a breakpoint, as it happens — the read side of the continue flow.
audit:all · audit:<actor_uuid>dbThe live audit trail — every action by every human and agent, fleet-wide for operators or scoped to your own events.
todos:allpostgres_changesThe shared to-do board as raw table-change events — the simplest channel to start with.
React in
Alerting bots
Watch the firehose for error spikes on a production host and page your team the second they start — not on the next poll.
Wall dashboards
Render live traffic, device fleet state and the audit trail on a NOC screen — the same push the product dashboard consumes.
Reactive automation
React to a device going offline, a breakpoint pausing, or a settings change — then act back through MCP or the proxy-control channel.
Push is one of
Every capability aligns across the dashboard, MCP, REST, WebSockets and BusyBro — a standing rule, checked on every ship. Read over REST, subscribe over WS, act over MCP: one identity, one permission model.
Before you
What do I connect with?
supabase-js is the shortest path (it handles the Realtime protocol, auth and reconnection), but any client that speaks the Supabase Realtime protocol over WebSockets works. Authenticate with the same OAuth token as REST and MCP.
Broadcast vs postgres_changes — what's the difference?
Most channels are database-triggered broadcasts: a trigger fans a shaped payload to a named topic the instant a row lands — scalable and authorized per topic. A few simple tables (like the to-do board) stream raw postgres_changes events instead.
Can I publish, or only subscribe?
Both. Subscriptions cover the feeds; control flows publish back — the proxy-control channel carries breakpoint-continue and resend-request, and the confirm-gated MCP tools publish device commands on your behalf.
Will I see other people's traffic?
No — channel access is authorized by row-level security on the Realtime layer. Plain accounts get their own devices' feed; the fleet-wide firehose and audit stream require operator capabilities.
Why not just poll the REST API?
Realtime-not-polling is a standing engineering rule here: every feature is push-driven end to end, and the dashboard itself never polls. Push gives you lower latency, no missed events between polls, and no wasted queries.
Wire up the
Canales y formatos de carga en la documentación — o suscríbete desde el explorador del panel.