sistema-de-chamados/apps/desktop
rever-tecnologia 90d2221240 Fix RustDesk sync before auto-launch redirect
The RustDesk data saved by Rust directly to file was not being
synced to the backend because the app redirected to the web platform
before the sync could complete.

- Reload store from disk in openSystem to get Rust-saved data
- Sync RustDesk before redirecting with 3s timeout
- Fire-and-forget sync to avoid blocking the redirect

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 15:38:35 -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 fix(tauri): remove aspas no cmd /C para tauri.cmd com espaços 2025-11-25 13:57:52 -03:00
src Fix RustDesk sync before auto-launch redirect 2025-12-05 15:38:35 -03:00
src-tauri Salvar dados do RustDesk diretamente no machine-agent.json pelo Rust 2025-12-05 14:56:12 -03:00
.env.example chore(desktop): update .env.example for RustDesk defaults 2025-11-13 13:22:39 -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 Improve loan page and add company filter to USB bulk control 2025-12-04 14:52:27 -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.