/api/v1/config é o único contrato destinado à interface web para consultar e alterar a
configuração persistida do agente. Ele substitui a edição direta de %APPDATA%\MultiSend\config.json
pelas telas de produto.
A rota existe somente na API loopback e passa pelas mesmas validações de Host e Origin da UI
incorporada.
Retorna três grupos:
config: campos explicitamente editáveis;runtime: identidade, versão, portas selecionadas e faixas de porta somente para leitura;- metadados de segurança e aplicação.
Exemplo reduzido:
{
"config": {
"display_name": "PC-01",
"receive_path": "C:\\Users\\Public\\Downloads\\MultiSend",
"interface_policy": "auto",
"require_auth": false,
"remote_send_roots": []
},
"runtime": {
"node_id": "PC-01-1234",
"app_version": "0.1.0",
"selected_ports": {
"transfer": 56200,
"discovery": 56211,
"local_api": 56221,
"control": 56231
}
},
"secret_configured": true,
"secret_exposed": false,
"restart_required": false
}node_secret nunca faz parte da resposta. secret_configured informa apenas se o agente possui um
segredo.
Recebe o objeto completo contido em config. Não é PATCH: campos booleanos omitidos seriam
ambíguos, então a UI deve primeiro executar GET, editar a cópia e enviar todos os campos.
Campos editáveis:
- identidade:
display_name,receive_path; - interfaces: política, atualização, flags e listas permitidas/manuais/ignoradas;
- limpeza e resultado de recebimento de pastas;
- pipeline, concorrência por interface, estratégia e percentual Ethernet;
require_autheremote_send_roots.
Após salvar, restart_required é true. Alguns componentes internos já recarregam subconjuntos do
arquivo, mas o contrato do produto considera a configuração completamente aplicada somente depois
de reiniciar o agente.
- nome: 1 a 128 caracteres imprimíveis;
- pasta de recebimento: absoluta após normalização e nunca uma raiz de filesystem;
- a pasta de recebimento é criada antes da gravação;
- política:
auto,manualouall; - atualização de interfaces: 2 a 60 segundos;
- listas: trim, remoção de vazios e duplicados sem diferenciar maiúsculas;
- resultado de pasta:
zipouextract; - pipeline:
legacyoupipelined; - concorrência por interface: 1 a 16;
- estratégia:
dynamicoustrict_split; - percentual Ethernet: 1 a 99;
- raízes remotas: devem existir, ser diretórios e não podem ser raízes de volume.
Uma requisição inválida retorna 400 invalid_config e não modifica o arquivo. A gravação válida usa
arquivo temporário, flush e rename para evitar JSON parcialmente escrito.
Ao mudar require_auth para true, o agente preserva o segredo existente. Se não houver segredo,
gera um localmente antes de salvar. O valor não é retornado para o navegador nem incluído em logs.
Exportação, revelação e pareamento de segredos continuam fora da UI web. Essas operações exigem um fluxo nativo explícito antes de substituir o fallback PowerShell.
Erros seguem o envelope comum da API:
{
"error": "invalid_config",
"message": "receive_path: filesystem root is not allowed",
"status": 400,
"method": "PUT",
"path": "/api/v1/config",
"request_id": "req-..."
}Outros códigos relevantes:
400 bad_json;400 receive_path_unavailable;403 invalid_hostouinvalid_origin;405 method_not_allowed;500 config_read_failedouconfig_save_failed.
multisend-settings-ui.ps1 permanece no instalador temporariamente para exportação de segredo e
recuperação manual. Os atalhos principais já abrem /ui/?view=settings; a tela web não edita o JSON
diretamente.