Athena — servidor de telemetria EDR. ═══ AGENTES (gRPC, porta 8888/h2c) ═══════════════════════════════════════════ Autenticação de agente (dispensa sessão) athena.agent.v1.AgentAuth/RequestChallenge athena.agent.v1.AgentAuth/Authenticate ECDSA P-256 sobre "ARGOS-AUTH-V1" || agent_id || challenge Ingestão (exige sessão) edr.ingest.v1.TelemetryIngest/StreamEnvelopes (client streaming) edr.ingest.v1.TelemetryIngest/StreamEvents (client streaming) metadata: authorization: Bearer ═══ OPERADORES (REST, porta 8889) ══════════════════════════════════════════ Uma autenticação só para toda a superfície REST: usuário e senha -> JWT. Identidade POST /api/v1/auth/login usuario + senha -> access + refresh POST /api/v1/auth/refresh rotaciona o par de tokens POST /api/v1/auth/logout encerra a sessão corrente POST /api/v1/auth/logout-all encerra todas as sessões GET /api/v1/auth/me quem sou eu POST /api/v1/auth/change-password troca a própria senha GET /api/v1/auth/sessions sessões ativas DELETE /api/v1/auth/sessions/ revoga uma sessão Usuários (exige platform_admin) /api/v1/users Gestão (exige platform_staff) /api/v1/companies, /api/v1/machines, /api/v1/product-keys, /api/v1/agents Painel ao vivo (exige platform_staff) GET /api/admin/stream/metrics text/event-stream Console do analista (exige platform_staff) GET /api/admin/stream/logs text/event-stream (tail NRT) ?tenantId&endpointId&eventType&source eventos: open, backlog, logs, :keepalive GET /api/admin/logs historico paginado por cursor GET /api/admin/logs/ detalhe de linha do historico GET /api/admin/logs/resolve detalhe de linha do tail ao vivo GET /api/admin/agents seletor de agentes (memoria) GET /api/admin/tenants seletor de empresas (memoria) Em todas: header Authorization: Bearer (o stream aceita o cookie athena.jwt, porque EventSource não permite header) ═══ INSTALAÇÃO (REST, porta 8889) ═══════════════════════════════════════ Chamada pela APKR. Aceita o IP dela (Apkr:AllowedIps) OU um token de operador. POST /api/v1/apkr/activations reserva a licença GET /api/v1/apkr/activations/ estado da tentativa POST /api/v1/apkr/activations//company-code confere o CompanyCode POST /api/v1/apkr/activations//installation-code emite o InstallationCode POST /api/v1/apkr/installation-codes/verify autoriza o download POST /api/v1/apkr/agents PK + agent_id + public key DELETE /api/v1/apkr/activations/ cancela a instalação GET /api/v1/apkr/linux/install-script presigned URL do install.sh Nos passos ligados a uma tentativa: header X-Athena-Activation-Token: ═══ ATUALIZAÇÃO DE AGENTE (REST, porta 8889) ════════════════════════════ Plano de controle do auto-update. Chamada pelo launcher do Argos com o MESMO token de sessão do gRPC — o único ponto REST falado por um agente. POST /api/agent/update/check current_version + target -> versão + downloads header Authorization: Bearer ═══ RELEASES DO AGENTE (REST, porta 8889) ═══════════════════════════════ Callback do CI/CD que preenche o estado de rollout lido acima. Exige platform_admin (o CI entra como usuário de serviço; publicar define o que TODA a frota baixa). Registrar e publicar são passos distintos. GET /api/v1/agent-releases/ lista as versões do target GET /api/v1/agent-releases// uma versão PUT /api/v1/agent-releases// registra/atualiza (rascunho) body: files[name,sha256,objectKey?], publish? POST /api/v1/agent-releases///publish coloca no ar POST /api/v1/agent-releases///unpublish rollback header Authorization: Bearer