sistema-de-chamados/docs/archive/plano-app-desktop-dispositivos.md

8.6 KiB
Raw Blame History

Plano Integrado App Desktop & Inventário por Dispositivo (Arquivo)

Documento vivo. Atualize após cada marco relevante.

Contexto

  • Objetivo: Expandir o Sistema de Chamados (Next.js + Convex + Better Auth) para suportar:
    • Cliente desktop nativo (Tauri) mantendo UI web e realtime.
    • Autenticação dispositivo-a-dispositivo usando tokens derivados do inventário.
    • Integração com agente de inventário (osquery/FleetDM) para registrar hardware, software e heartbeats.
    • Pipeline de distribuição para Windows/macOS/Linux.
  • Escopo inicial: Focar no fluxo mínimo viável com inventário básico (hostname, OS, identificadores, carga resumida). Métricas avançadas e distribuição automatizada ficam para iteração seguinte.

Estado Geral

  • Web atual permanece operacional com login por usuário/senha.
  • Novas features serão adições compatíveis (machine login opcional).
  • Melhor abordagem para inventário: usar osquery + FleetDM (stack pronta) integrando registros no Convex.
  • Agente desktop coleta inventário básico + estendido por SO (Linux: dpkg/rpm + systemd + lsblk/lspci/lsusb/smartctl; Windows: WMI/registry via PowerShell; macOS: system_profiler/pkgutil/launchctl) e envia via heartbeat e/ou /api/machines/inventory.

Marcos & Progresso

Macro-entrega Status Observações
Documento de arquitetura e roadmap 🔄 Em andamento Estrutura criada, aguardando detalhamento incremental a cada etapa.
Projeto Tauri inicial apontando para UI Next 🔄 Em andamento Estrutura apps/desktop criada; pendente testar build após instalar toolchain Rust.
Schema Convex + tokens de dispositivo Concluído Tabelas machines / machineTokens criadas com TTL e fingerprint.
API de registro/heartbeat e exchange Better Auth 🔄 Em andamento Endpoints /api/machines/* disponíveis; falta testar fluxo end-to-end com app desktop.
Endpoint upsert de inventário dedicado Concluído POST /api/machines/inventory (modo por token ou provisioningSecret).
Integração FleetDM → Convex (inventário básico) 🔄 Em andamento Endpoint /api/integrations/fleet/hosts criado; falta validar payload real e ajustes de métricas/empresa.
Admin > Dispositivos (listagem, detalhes, métricas) Concluído Página /admin/devices exibe parque completo com status ao vivo, inventário e métricas.
Ajustes na UI/Next para sessão por dispositivo A fazer Detectar token e exibir info da dispositivo em tickets.
Pipeline de build/distribuição Tauri A fazer Definir estratégia CI/CD + auto-update.
Guia operacional (instalação, uso, suporte) A fazer Gerar instruções finais com casos de uso.

Legenda: concluído · 🔄 em andamento · a fazer.

Dependências Técnicas

  • Tauri Desktop: Rust + toolchain específico por SO, libwebkit2gtk (Linux), WebView2 (Windows), Xcode (macOS).
  • FleetDM/osquery: Servidor Fleet (Docker ou VM), enrollment secret por tenant, agentes osquery instalados.
  • Better Auth: Mechanismo para criar sessões usando subject machine:* com escopos restritos.
  • Convex: Novas tabelas machines e machineTokens, mutações para registro/heartbeat/exchange.
  • Infra extra: Endpoints públicos para updater do Tauri, armazenamento de inventário seguro, certificados para assinatura de builds.

Próximos Passos Imediatos

  1. Desktop: finalizar UX das abas (mais detalhes em Diagnóstico e Configurações) e gráficos leves.
  2. Coletores Windows/macOS: normalizar campos de software/serviços (nome/versão/fonte/status) e whitelists.
  3. Regras: janela temporal real para CPU (dados de 5 min), whitelists por tenant, mais sinais SMART (temperatura e contadores).
  4. Admin UI: diálogo “Inventário completo” com busca em JSON, export CSV de softwares/serviços, badges no grid com contagens.
  5. Release: ativar secrets de assinatura e publicar binários por SO.

Notas de Implementação (Atual)

  • Criada pasta apps/desktop via create-tauri-app com template vanilla-ts.
  • O agente desktop agora possui fluxo próprio: coleta inventário local via comandos Rust, solicita o código de provisionamento, registra a dispositivo e inicia heartbeats periódicos (src-tauri/src/agent.rs + src/main.ts).
  • Formulário inicial exibe resumo de hardware/OS e salva o token em ~/.config/Sistema de Chamados Desktop/machine-agent.json (ou equivalente por SO) para reaproveitamento em relançamentos.
  • URLs configuráveis via .env do app desktop:
    • VITE_APP_URL → aponta para a interface Next (padrao produção: https://tickets.esdrasrenan.com.br).
    • VITE_API_BASE_URL → base usada nas chamadas REST (/api/machines/*), normalmente igual ao APP_URL.
  • Após provisionar ou encontrar token válido, o agente dispara /machines/handshake?token=... que autentica a dispositivo no Better Auth, devolve cookies e redireciona para a UI. Em produção, mantemos a navegação toplevel pelo handshake para garantir a aceitação de cookies na WebView (mesmo quando POST /api/machines/sessions é tentado antes).
  • apps/desktop/src-tauri/tauri.conf.json ajustado para rodar pnpm run dev/build, servir dist/ e abrir janela 1100x720.
  • Novas tabelas Convex: machines (fingerprint, heartbeat, vínculo com AuthUser) e machineTokens (hash + TTL).
  • Novos endpoints Next:
    • POST /api/machines/register — provisiona dispositivo, gera token e usuário Better Auth (role machine).
    • POST /api/machines/heartbeat — atualiza estado, métricas e renova TTL.
    • POST /api/machines/sessions — troca machineToken por sessão Better Auth e devolve cookies.
  • As rotas /api/machines/* respondem a preflight OPTIONS com CORS liberado para o agente (https://tickets.esdrasrenan.com.br, tauri://localhost, http://localhost:1420).
  • Rota GET /machines/handshake realiza o login automático da dispositivo (seta cookies e redireciona).
    • As rotas sessions/handshake foram ajustadas para usar NextResponse.cookies.set(...), aplicando cada cookie da Better Auth (sessão e assinatura) individualmente.
    • CORS: as respostas incluem Access-Control-Allow-Credentials: true para origens permitidas (Tauri WebView e app).
  • Página de diagnóstico: /portal/debug exibe get-session e machines/session com os mesmos cookies da aba — útil para validar se o desktop está autenticado como dispositivo.
    • O desktop pode redirecionar automaticamente para essa página durante os testes.
  • Webhook FleetDM: POST /api/integrations/fleet/hosts (header x-fleet-secret) sincroniza inventário/métricas utilizando machines.upsertInventory.
  • Script ensureMachineAccount garante usuário AuthUser e senha sincronizada com o token atual.

Inventário — Windows (fallback)

  • O agente coleta extended.windows.osInfo via PowerShell/WMI. Caso o script falhe (política ou permissão), aplicamos um fallback com sysinfo para preencher ao menos ProductName, Version e BuildNumber — evitando bloco vazio no inventário exibido.

Portal do Cliente (UX)

  • Quando autenticado como dispositivo (colaborador/gestor):
    • O portal deriva o papel a partir do machineContext (mesmo se /api/auth/get-session vier null).
    • A listagem exibe apenas os tickets onde o colaborador é o solicitante.
    • Informações internas (Fila, Prioridade) são ocultadas; o responsável aparece quando definido.
    • A descrição do chamado vira o primeiro comentário (editor rico + anexos). A permissão de comentar pelo solicitante foi ajustada no Convex.
  • O botão “Sair” é ocultado no desktop (faz sentido apenas fechar o app).
  • Variáveis .env novas: MACHINE_PROVISIONING_SECRET (obrigatória) e MACHINE_TOKEN_TTL_MS (opcional, padrão 30 dias).
  • Variável adicional FLEET_SYNC_SECRET (opcional) para autenticar webhook do Fleet; se ausente, reutiliza MACHINE_PROVISIONING_SECRET.
  • Dashboard administrativo: /admin/devices usa AdminMachinesOverview com dados em tempo real (status, heartbeat, token, inventário enviado pelo agente/Fleet).

Checklist de dependências Tauri (Linux)

sudo apt update
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \
  libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
# reinicie o terminal e confirme: rustc --version

Ajuste conforme seu sistema operacional (ver https://tauri.app/start/prerequisites/).


Histórico de atualizações:

  • 2025-02-20 — Fluxo completo do agente desktop, heartbeats e rota /machines/handshake documentados (assistente).
  • 2025-02-14 — Documento criado com visão geral e plano macro (assistente).