Presença — REST e WebSocket
Módulo: PresenceModule
Estado: sessões em memória (Map) — reinício do processo limpa sessões
Tag REST: Presença (utilizadores ativos / DB_DEFAULT_PSTGS)
Catálogo: catalogo-completo.md §10. Runbook: runbooks/presenca.md.
REST — /api/v1/presence
Controller: PresenceV1Controller
Auth: Bearer
| Método | Rota | Descrição | Notas |
|---|---|---|---|
GET | /active-users | Sessões ativas no tenant | |
GET | /active-users-global | Todas as sessões | Só admin |
GET | /online-count/main-companies | Contagem — empresas mãe | |
GET | /online-count/sub-companies | Contagem — sub-empresas | |
GET | /online-count/aggregated-by-parent | Rede mãe + filhas |
WebSocket — namespace /presence
Gateway: PresenceGateway
Path Socket.IO: /socket.io (padrão)
Auth handshake: { token: "<JWT>" }
Salas
| Sala | Quem |
|---|---|
tenant:<tenantId> | Utilizadores do tenant |
admin:observer | Admins (não contam como online) |
Eventos (ex.)
presence:syncpresence:joinpresence:leavepresence:error- Cliente pode enviar
presence:status(@SubscribeMessage)
Integração
default-crmassina JWT com o mesmoJWT_SECRET(ouJWT_EXTERNAL_SECRETS).default_crm-frontabre o socket após login (centralPresenca).- Detalhe end-to-end:
docs/ENTENDIMENTO.md.