Skip to content

feat(portal): nome do PC e "Adicionar PC" por usuário vindos do portal - #21

Merged
tbc-joaovitor merged 5 commits into
mainfrom
feat/portal-pc-param
Oct 19, 2026
Merged

tbc-joaovitor merged 5 commits into
mainfrom
feat/portal-pc-param

Conversation

@tbc-joaovitor

Copy link
Copy Markdown
Collaborator

O que muda

O admin do portal passa a definir, por usuário, o nome do PC e se ele pode adicionar PC. O fork lê isso do GET /api/portal/me, no campo pc: {name, add_pc} (contrato fechado com o portal, branch feat/pc-dedicado do herdr-portal).

  • name preenchido: substitui o nome da máquina local (local). É aplicado num único useMemo sobre o roster.

  • add_pc: false: some todo controle que leva ao startMachineSetup (POST /api/machines/setup, a rota que o proxy do portal bloqueia com 403 add_pc_disabled):

    • "Add PC" no rodapé da barra lateral, na paleta e em Settings;
    • "Reconnect / setup" e "Update bridge…" do PC;
    • "Reconnect", "Sign in and update…" e "Set up…" dos avisos e do banner.

    Continuam Connect/Disconnect, Remove PC, Rename e o "Update bridge" de um clique. Quando ele falha, o erro agora aparece por PC no banner; antes ele caía no diálogo de setup.

  • Os controles de setup só aparecem depois que o /me responde. A chamada tem limite de 10 s (AbortController). Sem resposta, com erro, ou com o campo ausente ou null, tudo fica como hoje. A trava de verdade é a do proxy.

Testes

  • src/lib/portal.test.ts: 9 pass. O teste reprova quando a leitura de add_pc é quebrada.
  • scripts/portal-pc-regression.ts (novo, no ci-browser.sh): cobre pc ausente, null e ligado/desligado, o /me lento, update_bridge, bridge_conflict, o erro do banner e o clique duplo (1 POST). Ele reprova quando as guardas são removidas.
  • bun run check fast ok. ui-regression.ts com 88 PASS.

O bun run check full (que roda os scripts de navegador na CI) não rodou localmente. Fica para a CI deste PR.

Revisão

Passou por 4 rodadas de code-review e 1 de security-review, cada uma num agente novo e sem contexto. A última foi "merge-ready", sem achados críticos nem importantes.

Fica aberto um ponto menor: o sending do banner é global. Se a atualização do PC A estiver em andamento e o banner passar a mostrar o B, o botão do B fica desativado até o pedido do A terminar.

🤖 Generated with Claude Code

tbc-joaovitor and others added 5 commits October 18, 2026 21:58
O /api/portal/me ganha o campo pc: { name, add_pc }. Com name, o PC local
aparece com esse nome (mapeamento único sobre a lista de máquinas, para que
sidebar, paleta e feedback vejam o mesmo). Com add_pc false somem todos os
controles que terminam em startMachineSetup: Adicionar PC (rodapé, paleta,
Configurações), Reconectar/configurar, Atualizar bridge…, os avisos e o
banner. Conectar/Desconectar, Remover PC e o update-bridge sem login ficam.
Sem o campo (ou fora do portal) nada muda.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… do update-bridge visível

- canAddPc fica falso até o /api/portal/me responder (sem piscar os botões) e
  fechar o diálogo de PC se virar falso.
- O banner "Update bridge" mostra o erro quando o POST falha e não há setup
  para onde cair; com setup, o fallback continua.
- Regressão cobre update_bridge e bridge_conflict com add_pc false.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a lenta

- fetchPortalSession desiste após 10 s (AbortSignal.timeout) e vale NO_PORTAL,
  para um /me pendurado não esconder para sempre os controles de PC.
- A regressão atrasa o /me em 1,5 s e confere que "Add PC" não aparece antes da
  resposta (add_pc false) e aparece depois (add_pc true).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ortSignal.timeout

- O erro do "Update bridge" do banner guarda o id do PC e só aparece para ele;
  limpa ao novo clique e o botão fica desabilitado enquanto o POST voa.
- fetchPortalSession usa AbortController + setTimeout (limpo no finally):
  AbortSignal.timeout lança em Safari/Chrome antigos.
- Remove o efeito que fechava o diálogo (canAddPc nunca vai de true a false).
- A regressão espera a resposta do /me antes de contar botões.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tbc-joaovitor
tbc-joaovitor merged commit f8bb39e into main Oct 19, 2026
3 checks passed
@tbc-joaovitor
tbc-joaovitor deleted the feat/portal-pc-param branch October 19, 2026 13:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant