Referência: Boundary IPC
Catálogo dos comandos (invoke), eventos (emit) e tipos que cruzam a fronteira
Rust ↔ TypeScript. Fonte de verdade do lado Rust: src-tauri/src/commands.rs e
src-tauri/src/events.rs. Fonte de verdade do lado TS: src/types/ipc.ts (tipos) e
src/lib/ipc.ts (wrappers de invoke). Sobre por que esse espelhamento é manual e
quando isso deve mudar, veja Geração automática da boundary IPC.
Comandos
Comandos marcados desktop só existem em builds desktop; no mobile o wrapper TS
correspondente não deve ser chamado (não há stub, a ausência é intencional, ao
contrário dos comandos "espelhados com stub" descritos em
Como adicionar suporte a uma plataforma).
Comandos marcados mobile-only têm uma variante desktop que sempre retorna erro
(mantendo a boundary idêntica entre plataformas). check_for_updates/install_update
seguem esse padrão de espelhado com stub: existem em ambas as plataformas, mas a
variante mobile não faz nada (check_for_updates) ou sempre rejeita (install_update),
já que a atualização automática não se aplica a lojas de app.
Diagnóstico
| Comando |
Retorno |
Descrição |
health_check |
HealthStatus |
Verificação mínima de que a boundary está funcional; inclui isMobile, dbSizeBytes (via dbstat) e pendingOpsCount, para a UI sinalizar um banco anormalmente grande ou uma fila offline parada. |
get_sync_state |
SyncStateSnapshot |
Estado corrente do sync (idle/scanning/syncing/conflict/error), para a UI renderizar o estado certo ao montar, sem depender de eventos anteriores perdidos. |
get_recent_errors |
Vec<ErrorEntry> |
Histórico dos últimos 100 erros de sync em memória (perdido a cada reinício), mais antigo primeiro. |
clear_errors |
void |
Esvazia o histórico de erros em memória. |
export_diagnostics desktop |
String |
Gera um .zip de diagnóstico na pasta de Downloads (configurações com segredos redigidos, manifest, conflitos, fila offline, info do app, final do log de hoje). Retorna o caminho gerado. |
Autenticação e provedor de storage
Ver Provedores de storage para o que cada provedor
suporta hoje: connect_dropbox/connect_onedrive existem na boundary e funcionam de ponta a
ponta, mas ficam sem botão acessível na UI até terem credenciais de produção cadastradas.
| Comando |
Retorno |
Descrição |
connect_google_drive |
AuthStatus |
Abre o consentimento OAuth2 do Google e aguarda autorização. Desktop: loopback TCP. Mobile: deep link slot2sync://oauth. Emite auth:status. |
connect_dropbox |
AuthStatus |
Mesmo fluxo OAuth2+PKCE, para o Dropbox (sem proxy, client público). |
connect_onedrive |
AuthStatus |
Mesmo fluxo OAuth2+PKCE, para o OneDrive/Microsoft Graph (sem proxy, client público). |
connect_local_folder |
AuthStatus |
Valida que o caminho informado existe e é gravável (cria se preciso) e o adota como provedor ativo. Sem OAuth. |
get_auth_status |
AuthStatus |
Status do provedor ativo, sem disparar fluxo interativo (provedores OAuth: consulta o keyring/SecretStore; pasta local: confere se o caminho salvo ainda existe). |
disconnect_provider |
AuthStatus |
Desconecta do provedor ativo (qualquer um): remove o refresh token quando OAuth e limpa o cache de IDs de pasta. Emite auth:status. |
Emuladores: detecção e cadastro
| Comando |
Retorno |
Descrição |
pick_emulator_folder mobile-only |
String |
Abre o seletor nativo SAF e retorna a URI da árvore concedida. |
detect_emulator_mobile mobile-only |
Option<EmulatorProfile> |
Reconhece o emulador numa árvore SAF testando o catálogo de profiles.toml via chamadas assíncronas ao plugin nativo. |
detect_emulator |
Option<EmulatorProfile> |
Reconhece o emulador numa pasta do filesystem (desktop) via marcadores declarados em profiles.toml. |
add_emulator |
EmulatorProfile |
Detecta e registra o emulador. No mobile usa o caminho assíncrono (URI SAF); no desktop, detect_emulator. |
add_emulator_manual |
EmulatorProfile |
Registra um emulador com pastas informadas manualmente (fallback quando a detecção falha). Não sobrescreve um já existente. |
discover_emulators |
Vec<DiscoveredEmulator> |
Varre locais conhecidos e (no Windows) o registro por emuladores do catálogo instalados. Não persiste, é sugestão. |
list_emulators |
Vec<EmulatorProfile> |
Emuladores registrados. |
remove_emulator |
void |
Remove o emulador do sync (manifest, categorias, conflitos, fila, stats). Não apaga nada no Drive nem localmente. |
Jogos e estatísticas
| Comando |
Retorno |
Descrição |
list_synced_games |
Vec<SyncedGame> |
Jogos sincronizados, agregados do manifest, com serial traduzido para nome quando conhecido. |
get_emulator_stats |
Option<EmulatorStats> |
Contadores acumulados de um emulador. None = nunca houve atividade. |
list_emulator_stats |
Vec<EmulatorStats> |
Contadores acumulados de todos os emuladores com atividade. |
get_emulator_summary |
EmulatorSummary |
Retrato de um emulador para o card: volume local, volume conhecido no provedor remoto, estimativa de arquivos fora de sincronia e estado corrente. Sem chamada de rede. |
list_emulator_summaries |
Vec<EmulatorSummary> |
get_emulator_summary de todos os emuladores configurados, de uma vez. |
Sincronização e conflitos
| Comando |
Retorno |
Descrição |
sync_now |
SyncSummary |
Sync manual (bidirecional), gatilho manual. |
get_last_sync |
Option<LastSync> |
Último sync concluído nesta execução do app. |
list_conflicts |
Vec<Conflict> |
Conflitos pendentes (ambos os lados mudaram desde o último sync). |
resolve_conflict |
void |
Resolve um conflito mantendo local ou remote; desbloqueia o sync do emulador. |
list_pending_ops |
Vec<PendingOp> |
Fila offline visível: arquivos cuja transferência falhou e será refeita. Prioritárias listadas primeiro. |
get_sync_queue |
SyncQueueSnapshot |
Fila do sync em andamento (em voo e ainda não iniciada); vazia fora de um sync. |
bring_to_front |
bool |
Antecipa um arquivo da fila do sync em andamento. false = não está mais na fila. Distinto de bump_pending_op, que prioriza na fila offline de pendências. |
retry_pending_op |
void |
Zera tentativas/backoff de uma pendência (inclusive mortas), liberando retry no próximo sync. |
bump_pending_op |
void |
Marca a pendência como prioritária ("mover para frente da fila") e libera o backoff: mesmo efeito imediato de retry_pending_op, mais a marca persistida. |
Categorias e exclusões por emulador
| Comando |
Retorno |
Descrição |
get_emulator_categories |
SyncCategories |
Categorias habilitadas (saves/savestates/config) para um emulador. |
set_emulator_categories |
void |
Define quais categorias sincronizar. |
set_exclude_patterns |
void |
Define padrões glob de exclusão do emulador; valida cada padrão antes de gravar. |
Configurações globais
| Comando |
Retorno |
Descrição |
get_settings |
Settings |
Configurações do usuário; autostart é lido do SO (só desktop) e injetado na resposta. |
set_autostart desktop |
void |
Liga/desliga início automático com o sistema (persistido pelo SO). |
set_triggers |
void |
Liga/desliga os gatilhos automáticos de sync (startup/emulatorStart/emulatorStop). O sync manual nunca é afetado. |
set_notification_level |
void |
Define o nível de notificações nativas. |
set_device_name |
void |
Define o nome amigável deste dispositivo (não pode ser vazio). |
set_backup_retention_days |
void |
Retenção dos backups locais em dias (0 = para sempre). Limpeza roda no próximo startup. |
set_max_backup_versions |
void |
Máximo de versões arquivadas por arquivo no histórico (mínimo 1). |
set_bandwidth_limits |
void |
Limites de upload/download em KB/s (0 = ilimitado); aplicados na próxima operação. |
set_scan_interval_minutes |
void |
Intervalo do scan periódico em minutos (0 = desativado); o timer relê a cada ciclo. |
Backups e versionamento
| Comando |
Retorno |
Descrição |
open_backup_folder desktop |
void |
Abre a pasta de backups locais no gerenciador de arquivos do SO (cria se não existir). |
reveal_backup_path desktop |
void |
Mostra um arquivo de backup específico no gerenciador de arquivos; recusa caminhos fora da árvore de backups. |
list_file_versions |
Vec<FileVersion> |
Versões arquivadas de um arquivo no histórico pré-download, mais recentes primeiro. |
restore_version |
void |
Restaura uma versão arquivada por cima do arquivo atual. O estado atual é arquivado antes (nada se perde); mtime atualizado para o próximo sync reenviar ao Drive. |
list_backups |
Vec<BackupEntry> |
Histórico de backups criados antes de sobrescritas (primeiro sync / resolução de conflito). Só leitura. |
Avisos dispensáveis
| Comando |
Retorno |
Descrição |
list_dismissed_notices |
Vec<String> |
IDs de banners informativos que o usuário já dispensou. |
dismiss_notice |
void |
Dispensa um banner de forma persistente e idempotente. |
Atualização do app
| Comando |
Retorno |
Descrição |
check_for_updates |
Option<UpdateInfo> |
Consulta o endpoint de update configurado (tauri-plugin-updater). None = já está na versão mais recente ou a checagem falhou (não é erro fatal). No mobile sempre retorna None. |
install_update |
void |
Baixa e instala a atualização encontrada e reinicia o app. No mobile sempre rejeita (atualização automática não se aplica a lojas de app). |
Logs e diagnóstico ao vivo
| Comando |
Retorno |
Descrição |
get_logs |
Vec<LogEntry> |
Últimas linhas do log em disco, mais antigas primeiro, até o teto interno de linhas. |
set_log_streaming |
void |
Liga/desliga o evento log:entry; a janela de diagnóstico liga ao abrir e desliga ao fechar. |
Eventos
| Evento |
Payload |
Quando dispara |
sync:started |
SyncStarted |
Início de um sync (qualquer gatilho). |
sync:progress |
SyncProgress |
Retrato consolidado do progresso da categoria em andamento, a cada 500ms (não mais por arquivo), mais uma emissão final garantida com completed == total. |
sync:completed |
SyncSummary |
Fim de um sync bem-sucedido. |
sync:error |
SyncErrorEvent |
Erro que interrompeu o sync. emulator: null = erro geral, não específico de um emulador. |
sync:conflict |
Conflict |
Conflito detectado (ambos os lados mudaram). |
sync:state-changed |
SyncStateChangedEvent |
Transição do SyncState do motor. Conflict/Error são momentâneos: o sync_all segue para os demais emuladores e volta a idle só ao fim da leva. |
auth:status |
AuthStatus |
Após connect_google_drive/connect_dropbox/connect_onedrive/disconnect_provider. |
emulator:status |
EmulatorStatusEvent |
Emulador monitorado abriu ou fechou (process watcher). |
sync:cancelled |
SyncSummary |
Sync interrompido pelo desligamento do app (menu "Sair"): as operações que faltavam não foram executadas. |
log:entry |
LogEntry |
Linha de log em tempo real, só publicada enquanto a janela de diagnóstico está aberta (set_log_streaming). |
update:available |
UpdateInfo |
Versão nova encontrada por check_for_updates. |
app:panic |
AppPanicPayload |
Panic capturado pelo hook global; o app segue vivo, mas a UI avisa que algo falhou de forma inesperada. |
Tipos compartilhados
Ver src/types/ipc.ts para a forma exata de cada interface (é o espelho TS oficial,
gerado manualmente a partir das structs Rust com #[serde(rename_all = "camelCase")]).
Tipos principais: HealthStatus, AuthStatus, ProviderKind (qual provedor de storage está
ativo: ver Provedores de storage), Settings +
TriggerSettings + NotificationLevel, EmulatorProfile + DiscoveredEmulator +
DiscoverySource, SyncCategories, SyncedGame, EmulatorStats, EmulatorSummary,
SyncSummary + SyncProgress + SyncStarted + SyncDirection + LastSync, Conflict +
ConflictResolution, PendingOp (inclui priority), QueuedOp + SyncQueueSnapshot,
FileVersion, BackupEntry, SyncStateSnapshot + SyncStateChangedEvent + SyncStateKind,
ErrorEntry, LogEntry, UpdateInfo, AppPanicPayload.
Erros
Todo comando que falha rejeita com o shape AppErrorPayload { code, message, detail }.
code é um enum fechado: ver a lista completa em src/types/ipc.ts (AppErrorPayload.code)
e sua origem em src-tauri/src/error.rs::AppError. Adicionar uma variante exige
atualizar os dois lados; o frontend localiza a mensagem pelo code e anexa o detail
(texto técnico sem prefixo: caminho, nome, mensagem de lib).
Manutenção do contrato
O espelhamento é manual: toda mudança numa struct/enum/comando do lado Rust precisa
da edição correspondente em src/types/ipc.ts e src/lib/ipc.ts. Não há checagem
automática de drift entre os dois lados: a mitigação atual são testes de
serialização do lado Rust. Ver Geração automática da boundary IPC
para a decisão em aberto de adotar geração automática (ts-rs/tauri-specta).