API backend em TypeScript com Express e Socket.IO.
O consumer pode enviar comandos ao plug_agente por dois canais: REST
(POST /api/v1/agents/commands) ou Socket.IO no namespace /consumers
(agents:command, relay relay:*, etc.). O mesmo JSON-RPC é aceite nos dois;
o REST não expõe streaming progressivo (o hub agrega o resultado num único
JSON). Para chunks em tempo real e backpressure, usar Socket. O agente
liga-se sempre ao hub em /agents. Resumo e tabela em
docs/PROJECT_OVERVIEW.md (Canais de comunicacao).
- Node.js + TypeScript
- Express (REST)
- Socket.IO (tempo real)
- Zod (validacao)
- JWT access + refresh token rotation; contas
blocked, bloqueio admin,PATCH /auth/me(celular) e métricas em docs/user_status.md - Vitest + Supertest
- docs/PROJECT_OVERVIEW.md — visão geral, papéis, canais e arquitetura
- docs/configuration.md — onde estão os defaults (
env.ts,.env.example) - docs/nginx_production.md — ajustes de Nginx para produção (API, Socket.IO e uploads)
- CHANGELOG.md — mudancas, migracao e roadmap tecnico
- docs/api_rest_bridge.md —
POST /api/v1/agents/commandse canal legadoagents:* - docs/socket_client_sdk.md — relay
PayloadFrame,agents:command, exemplos - docs/socket_relay_protocol.md — contrato relay (
relay:*), quotas e metricas - docs/performance_hub_agent.md — tuning hub ↔ agente (presets
.env+ checklist) - docs/observability.md — métricas,
test:contract, tracing, exemplos de alertas (incl.plug_auth_*,plug_admin_user_status_set_total) - docs/user_status.md — estados da conta (
pending,active,rejected,blocked), API admin e métricas Prometheus - docs/load_testing.md — notas para carga HTTP/Socket
- docs/scaling_and_roadmap.md — multi-instância, SSE, OpenTelemetry, SDK
- docs/client_agent_business_rules.md — regras User / Agent / Client;
GET /api/v1/client/me/agentseGET /api/v1/client/me/agents/{agentId}expõemisHubConnected(ligado a este processo do hub apósagent:registerno Socket/agents; contrato emGET /docs.json, componenteClientAccessibleAgent). Opcional:HUB_INSTANCE_IDno.envenvia o headerX-Hub-Instance-Id; métricasplug_client_me_agents_*emGET /metrics(verdocs/observability.md)
npm run dev- desenvolvimentonpm run typecheck- checagem de tiposnpm run lint- lintnpm run test- testes (unit/integration/contract; e2e excluídos)npm run test:access-flow- regressão focada no fluxo cliente→agente (pedido, inbox owner, rotas/client-access/*, unitário do serviço); útil antes de deploy ou após alterações nessa áreanpm run test:e2e- Vitest e2e (HTTP + Socket.IO). ComE2E_TESTS_ENABLED=trueno.enveDATABASE_URLacessível (ver.env.example); se estiver desligado, termina com exit 0 sem correr a suíte. Pode ser invocado no CI apósnpm run test(idempotente quando desligado).npm run build- build de producao
- Manter a mesma versão da API em todos os nós.
- Configurar
DATABASE_URLpara transações interativas do Prisma (poolers tipo PgBouncer em modo inadequado podem falhar nas operações atómicas de aprovação/recusa). - Em falhas ao aprovar ou recusar, a API pode responder 503; consultar logs estruturados
client_agent_access_txn_failedeclient_agent_access_txn_prisma_error(ver também docs/observability.md). - Detalhes adicionais em
.env.examplejunto aDATABASE_URL. - Para regressão E2E opcional do link público (review HTML + POST approve), ativar
E2E_TESTS_ENABLED=truee corrernpm run test:e2e(ficheirotests/e2e/flows/client_access_public_token.e2e.test.ts).