sistema-de-chamados/apps/desktop
rever-tecnologia efc3af3fde fix: corrige contador de mensagens nao lidas e chat desktop abrindo expandido
- Web: adiciona ref hasMarkedReadRef para evitar chamadas duplicadas ao
  markChatRead e garante que mensagens sejam marcadas como lidas mesmo
  quando o chat carrega apos isOpen se tornar true
- Desktop: aumenta periodo de estabilizacao do resize handler para 500ms,
  evitando que eventos transitórios alterem o estado isMinimized

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 16:16:23 -03:00
..
.vscode feat: adicionar painel de máquinas e autenticação por agente 2025-10-07 21:37:41 -03:00
docs chore: update docs and configs 2025-11-05 20:49:19 -03:00
public Atualiza desktop para versão 0.1.6 2025-10-13 21:08:37 -03:00
scripts feat: add health dashboard and local ticket archive 2025-12-10 14:43:13 -03:00
src fix: corrige contador de mensagens nao lidas e chat desktop abrindo expandido 2025-12-11 16:16:23 -03:00
src-tauri Corrige comportamentos do chat e melhora UX 2025-12-11 15:21:24 -03:00
.env.example feat: add health dashboard and local ticket archive 2025-12-10 14:43:13 -03:00
.gitignore feat: adicionar painel de máquinas e autenticação por agente 2025-10-07 21:37:41 -03:00
index.html feat(desktop): add Tauri updater (GitHub Releases), updater UI button, hide PowerShell windows; fix Windows inventory arrays and activation; improve metrics parsing; branding rename to Raven across app; avoid localhost fallback in auth-server; inject APP_URL/AUTH_URL in stack 2025-10-10 20:39:39 -03:00
package.json feat(frontend): implementar paginacao numerada em listagens de tickets 2025-12-09 20:17:22 -03:00
README.md chore: update docs and configs 2025-11-05 20:49:19 -03:00
tsconfig.json feat(desktop): migra abas do Tauri para shadcn/Radix Tabs, adiciona status badge e botão 'Enviar inventário agora'\n\nfix(web): corrige tipo do DetailLine (classNameValue) para build no CI\n\nchore(prisma): padroniza fluxo local DEV com DATABASE_URL=file:./prisma/db.dev.sqlite (db push + seed)\n\nchore: atualiza pnpm-lock.yaml após dependências do desktop 2025-10-10 11:56:48 -03:00
vite.config.ts docs: registrar fluxo do updater e atualizar chaves 2025-10-12 04:06:29 -03:00

Sistema de Chamados — App Desktop (Tauri)

Cliente desktop (Tauri v2 + Vite) que:

  • Coleta perfil/métricas da dispositivo via comandos Rust.
  • Registra a dispositivo com um código de provisionamento.
  • Envia heartbeat periódico ao backend (/api/machines/heartbeat).
  • Redireciona para a UI web do sistema após provisionamento.
  • Armazena o token da dispositivo com segurança no cofre do SO (Keyring).
  • Exibe abas de Resumo, Inventário, Diagnóstico e Configurações; permite “Enviar inventário agora”.

URLs e ambiente

  • Em produção, o app usa por padrão https://tickets.esdrasrenan.com.br.
  • Em desenvolvimento, use apps/desktop/.env (copiado do .env.example):
VITE_APP_URL=http://localhost:3000
# Opcional: se vazio, usa o mesmo do APP_URL
VITE_API_BASE_URL=

Comandos

  • Dev (abre janela Tauri e Vite em 1420):
    • bun run --cwd apps/desktop tauri dev
  • Build frontend (somente Vite):
    • bun run --cwd apps/desktop build
  • Build executável (bundle):
    • bun run --cwd apps/desktop tauri build

Saída dos pacotes: apps/desktop/src-tauri/target/release/bundle/.

Windows (NSIS) — instalação e dados

  • Instalador NSIS com suporte a “perMachine” (Arquivos de Programas) e diretório customizável (ex.: C:\Raven).
  • Atalho é criado na Área de Trabalho apontando para o executável instalado.
  • Dados do app (token/config) ficam em AppData local do usuário (via @tauri-apps/plugin-store com appLocalDataDir).

NSIS — Idiomas e modo de instalação

  • Idioma: o instalador inclui Português do Brasil e exibe seletor de idioma.
    • Arquivo: apps/desktop/src-tauri/tauri.conf.json:54"displayLanguageSelector": true
    • Arquivo: apps/desktop/src-tauri/tauri.conf.json:57"languages": ["PortugueseBR"]
    • Comportamento: usa o idioma do SO; sem correspondência, cai no primeiro da lista.
    • Referência de idiomas NSIS: NSIS “Language files/PortugueseBR”.
  • Modo de instalação: Program Files (requer elevação/UAC).
    • Arquivo: apps/desktop/src-tauri/tauri.conf.json:56"installMode": "perMachine"
    • Alternativas: "currentUser" (padrão) ou "both" (usuário escolhe; exige UAC).

Build rápido e leve em dev:

bun run --cwd apps/desktop tauri build --bundles nsis

Assinatura do updater (opcional em dev):

$privB64 = '<COLE_SUA_CHAVE_PRIVADA_EM_BASE64>'
$env:TAURI_SIGNING_PRIVATE_KEY = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($privB64))
$env:TAURI_SIGNING_PRIVATE_KEY_PASSWORD = 'SENHA_AQUI'
bun run --cwd apps/desktop tauri build --bundles nsis

Prérequisitos Tauri

Fluxo (resumo)

  1. Ao abrir, o app coleta o perfil da dispositivo e exibe um resumo.
  2. Informe o “código de provisionamento” (chave definida no servidor) e confirme.
  3. O servidor retorna um machineToken; o app salva e inicia o heartbeat.
  4. O app abre APP_URL/machines/handshake?token=... no WebView para autenticar a sessão na UI.
  5. Pelas abas, é possível revisar inventário local e disparar sincronização manual.

Segurança do token

  • O machineToken é salvo no cofre nativo do SO via plugin Keyring (Linux Secret Service, Windows Credential Manager, macOS Keychain).
  • O arquivo de preferências (Store) guarda apenas metadados não sensíveis (IDs, URLs, datas).

Suporte

  • Logs do Rust aparecem no console do Tauri (dev) e em stderr (release). Em caso de falha de rede, o app exibe alertas na própria UI.
  • Para alterar endpoints/domínios, use as variáveis de ambiente acima.