Saltar al contenido principal

Instalación

Find the anon key with npx @insforge/cli secrets get ANON_KEY, or in the dashboard: click Install and open API Keys.

Modelo mental

El SDK de TypeScript abre una conexión Socket.IO a tu backend de InsForge. Te suscribes a canales con nombre, escuchas nombres de eventos y opcionalmente publicas eventos de vuelta a los canales a los que te has unido. Los eventos pueden provenir de dos lugares:
  • Disparadores de base de datos que llaman a realtime.publish(channel, event, payload).
  • Clientes que llaman a insforge.realtime.publish(channel, event, payload).
Para el modelo de canal de backend y RLS, consulta Descripción general de tiempo real.

Inicio rápido

Registra los manejadores connect, disconnect, connect_error y error antes de llamar a connect() para que las fallas tempranas de conexión sean visibles.

connect()

Establece una conexión WebSocket.
Devuelve:
Notas:
  • El SDK incluye el token de autenticación actual cuando existe uno. Si no hay un usuario que ha iniciado sesión, puede usar la clave anónima configurada.
  • Múltiples llamadas a connect() mientras una conexión ya está en progreso reutilizan la misma promesa de conexión.
  • El intento de conexión expira después de 10 segundos.

subscribe()

Suscríbete a un canal y recibe la instantánea de presencia actual.
Parámetros:
ParámetroTipoDescripción
channelstringNombre de canal resuelto, como orders, order:123 o chat:room-1.
Devuelve:
subscribe() se conecta automáticamente si es necesario. Aún se recomienda llamar a connect() explícitamente para que los manejadores de eventos de conexión ya estén adjuntos. subscribe() es idempotente: llamarlo de nuevo para un canal al que ya te uniste vuelve a solicitar la suscripción y resuelve la instantánea de presencia actual del servidor. El servidor rastrea la presencia por miembro lógico, por lo que las suscripciones repetidas nunca producen miembros duplicados ni eventos presence:join espurios.

publish()

Publica un evento en un canal.
Parámetros:
ParámetroTipoDescripción
channelstringCanal en el que publicar. El cliente ya debe estar suscrito.
eventstringNombre del evento que escuchan los suscriptores.
payloadRecord<string, unknown>Carga útil del mensaje serializable en JSON.
La publicación requiere una suscripción previa exitosa al mismo canal. Si RLS está habilitado en realtime.messages, la publicación también se verifica contra las políticas INSERT.
Las fallas de publicación se emiten a través del evento error.

on()

Escucha eventos personalizados, eventos de conexión, eventos de presencia y errores de tiempo real.
Eventos reservados:
EventoCarga útilDescripción
connectNingunaEl WebSocket se conectó.
connect_errorErrorLa conexión inicial o reconexión falló.
disconnectstringEl WebSocket se desconectó.
errorRealtimeErrorPayloadLa suscripción o publicación falló.
presence:joinPresenceJoinMessageUn miembro lógico pasó a estar presente en un canal.
presence:leavePresenceLeaveMessageUn miembro lógico ya no está presente en un canal.
presence:syncPresenceSyncEventUna instantánea de presencia nueva para un canal. Se dispara en cada suscripción exitosa, incluyendo resuscripciones automáticas después de una reconexión.

once()

Escucha un evento una vez, luego elimina el listener automáticamente.

off()

Elimina un listener de eventos.

unsubscribe()

Abandona un canal.
unsubscribe() es de disparar y olvidar. Si este era el último socket de un miembro lógico, otros suscriptores reciben presence:leave.

disconnect()

Cierra el WebSocket y limpia las suscripciones locales.

Forma del mensaje

Los mensajes entregados incluyen los campos de tu carga útil más los metadatos del servidor.
Metadatos:
senderType es system para mensajes disparados por la base de datos y user para mensajes publicados por el cliente.

Presencia

Una suscripción exitosa devuelve la instantánea de presencia actual.
Miembro de presencia:
Escucha los cambios:

Lectura del estado de presencia

El SDK mantiene la lista de miembros de cada canal suscrito — inicializada desde la instantánea de suscripción y mantenida actualizada a partir de los deltas presence:join/presence:leave y las resincronizaciones de reconexión. Léela en cualquier momento en lugar de fusionar los deltas tú mismo:
Devuelve una matriz vacía para canales a los que no estás suscrito. Mientras el socket está brevemente desconectado, mantiene el último estado conocido, reemplazado por una instantánea nueva tan pronto como el canal se vuelve a suscribir.

Reconexiones

Cuando la conexión se cae, el SDK vuelve a suscribirse automáticamente a cada canal en la reconexión y emite presence:sync con la instantánea de presencia nueva para cada uno. Los miembros que se unieron o abandonaron mientras estabas desconectado no producen deltas individuales presence:join/presence:leave, por lo que reemplaza — no fusiones — cualquier estado que mantengas fuera del SDK:
Si renderizas directamente desde getPresenceState(), presence:sync es simplemente tu señal de re-renderizado. Si una resuscripción es rechazada (por ejemplo, el acceso del usuario fue revocado mientras estaba desconectado), el SDK descarta el canal y emite error en su lugar.

Actualizaciones de tokens

Cuando el token de acceso del usuario que ha iniciado sesión se actualiza, el SDK deja conectado un socket establecido — no hay reautenticación en banda, reconexión ni rotación de presencia. Una conexión inicial posterior o reconexión de red obtiene el token de acceso más reciente antes de su handshake. El inicio de sesión, el cierre de sesión o el cambio de usuario reconecta el socket bajo la nueva identidad. Las reducciones de acceso se aplican de forma diferida en una conexión activa: la publicación se vuelve a verificar contra RLS en cada mensaje y las nuevas suscripciones se vuelven a verificar en el momento de unirse, pero la recepción continua en canales ya unidos persiste hasta que el cliente cancela la suscripción o se reconecta.

Propiedades

PropiedadTipoDescripción
isConnectedbooleanSi el socket está actualmente conectado.
connectionState'disconnected' | 'connecting' | 'connected'Estado de conexión actual del SDK.
socketIdstring | undefinedID de Socket.IO cuando está conectado.
getSubscribedChannels()() => string[]Lista local de canales suscritos.
getPresenceState(channel)(channel: string) => PresenceMember[]Miembros actuales de un canal suscrito, mantenidos por el SDK.

Manejo de errores

Códigos de error de tiempo real comunes:
CódigoSignificado
REALTIME_UNAUTHORIZEDRLS o la coincidencia de canal denegó la suscripción o publicación.
REALTIME_NOT_SUBSCRIBEDEl cliente intentó publicar antes de suscribirse al canal.
INTERNAL_ERROREl backend no pudo completar la operación de tiempo real.

Ejemplo completo