Novidades

9 min de leitura

Novidades

Informações mais detalhadas sobre as alterações em cada versão podem ser encontradas diretamente em GitHub Releases.

v3.0.0

  • 🔑 Novo endpoint de login (breaking): o método JSON-RPC get_jwt foi substituído por POST /{prefix}/{database}/token, que recebe o login e a senha do PostgreSQL como autenticação HTTP Basic — as credenciais deixam de viajar no corpo do pedido e um proxy reverso pode limitar logins por URL. get_jwt em /jsonrpc agora responde 404 / -32601. Migração: curl -X POST …/token -u login:password.
  • 📥 Download de arquivos: o novo endpoint POST /{prefix}/{database}/file serve arquivos binários a partir de funções PostgreSQL que retornam conjuntos de linhas — uma linha diretamente, várias linhas como ZIP em streaming — com a mesma autenticação, troca de função e limitação de taxa do JSON-RPC. capabilities() informa kind: "file". Reaplique sql/schema.sql (é idempotente) para obter os novos campos.
  • 🧰 Ferramentas: novo JWT Signer, que assina tokens localmente no navegador a partir de um JWT_SECRET digitado manualmente (sem acesso à rede, o segredo nunca é guardado), capturas de tela e versões hospedadas de cada ferramenta (explorer., sse-tester., jwt-getter., jwt-signer.pgarachne.com), cartões clicáveis e links cruzados. As pastas em tools/ foram renomeadas para explorer, jwt-getter e sse-tester — atualize STATIC_FILES_PATH se as serve.
  • 🐛 Correções e reforço: uma função que retorna NULL SQL agora produz "result": null em vez de HTTP 500; os caminhos ZIP de /file rejeitam nomes hostis ao Windows e colisões sem distinção de maiúsculas; resultados vazios são revertidos (rollback).
  • 📚 Documentação e dependências: Quick Start passo a passo, página JSON-RPC como referência pura, a decisão de arquitetura «Por que PostgreSQL», orientações de proxy reverso para downloads grandes e módulos Go atualizados (atualização de segurança do golang.org/x/net).

v2.2.0

  • 🔑 JWT opcional: JWT_SECRET deixa de ser obrigatório. Sem ele, o JWT fica desativado (get_jwt devolve 404 / -32601) e os clientes usam credenciais HTTP Basic ou tokens de API.
  • 🛡️ Limite de tentativas para todos os métodos de autenticação (segurança): LOGIN_RATE_LIMIT passa a abranger também HTTP Basic e Bearer (JWT/token de API) em todos os endpoints, não apenas get_jwt. Antes, era possível adivinhar palavras-passe sem limite através de Authorization: Basic.
  • 🔒 Acesso governado apenas por privilégios (breaking): pgarachne.allowed_schemas() foi removida. capabilities() (e, com ela, MCP tools/list e a exportação OpenAPI) lista todas as funções jsonb que quem chama pode executar e cujo esquema pode usar. Revogue EXECUTE/USAGE onde não for desejado; veja a página Segurança.
  • ⚠️ Outras alterações incompatíveis: save_idempotency_key passa a receber um âmbito por papel (volte a aplicar sql/schema.sql antes de atualizar o binário), universal_update/universal_delete recusam filtros vazios, a menos que seja passado "all": true, e universal_read só aceita * ou nomes de coluna simples em select (fecha uma falha de SQL injection).
  • 🐛 Correções: deadlock do SSE ao reconectar o listener, inícios de sessão lentos ou com palavra-passe errada que bloqueavam outros pedidos, renderização de argumentos em MCP prompts/get, um comentário de função malformado que quebrava capabilities, resultados «falsy» mostrados como erros no Explorer e um XSS na vista de resultados do Explorer.
  • 📚 Documentação: novo llms-full.txt, cartão GitHub Sponsors, dicas nos ícones da barra de navegação; esta página passa a listar também v2.0.3 e v2.1.0.

v2.1.0

  • 📄 Exportação OpenAPI por método: generate_openapi_spec() agora também gera um caminho apenas para documentação por cada método exposto, para ferramentas que esperam uma operação por caminho (Swagger UI, Postman, geração de código). Um novo endpoint openapi.yaml devolve a mesma especificação em YAML.
  • 🔒 Exportação OpenAPI autenticada e filtrada por papel: /openapi.json agora exige a mesma autenticação que /jsonrpc e lista apenas os métodos que o papel de quem chama pode executar — anteriormente o endpoint não exigia autenticação e listava todos os métodos a qualquer pessoa.
  • 🔌 Atualização do protocolo MCP: o endpoint MCP passa agora a falar exclusivamente a versão de protocolo 2026-07-28; o antigo handshake initialize/ping deixou de ser suportado. Consulte AGENTS.md para a referência completa.
  • 🐛 Correção no pool de conexões: os pools de conexão de autenticação direta (Basic Auth) são agora corretamente removidos quando ociosos, corrigindo um problema em que a rotação de rotina de senhas podia acabar por bloquear novas credenciais.
  • 📦 Atualização de dependências e CI: atualização de rotina das dependências Go (agora requer Go 1.26) e os correspondentes ajustes nas ferramentas de CI.

v2.0.3

  • 🔒 Reforço de segurança: a troca de papel deixou de construir SQL por concatenação de strings (usa agora a função parametrizada set_config()), o serviço de ficheiros estáticos passa a resolver caminhos através de os.Root para que um symlink não consiga escapar do diretório servido, permissões mais restritas para os ficheiros de log/PID, e validação mais rigorosa dos links de resultados de pesquisa do site de documentação.
  • 🚀 Nova página de Início Rápido (nos 10 idiomas): um caminho rápido da instalação até um endpoint funcional, sem o desvio completo por Instalação/Configuração.
  • 📄 Descoberta do llms.txt: agora ligado a partir da página inicial, da página MCP, do README e do cabeçalho de todas as páginas, para que os crawlers de LLM o consigam encontrar.
  • 🐛 Correções: o alternador do menu móvel passa a mostrar corretamente um botão Início funcional em ecrãs largos, os links da página 404 personalizada passam a resolver corretamente independentemente da profundidade do URL, e o menu móvel ganhou uma entrada «Início».

v2.0.2

  • 🔒 Reforço de segurança: Corrigidos vários achados de análise estática — as chaves de cache do pool de autenticação direta agora usam HMAC (em vez de um SHA-256 simples), uma verificação explícita de contenção para o serviço de ficheiros estáticos, escaping de HTML do texto de estado de login do SSE Tester, uma lista de permissões de esquemas de URL para os links de resultados de pesquisa do site de documentação, e permissões de privilégio mínimo no workflow de CI.
  • 📦 Atualização de dependências: Atualizadas todas as dependências Go, incluindo gin-gonic/gin para a v1.12.0 e lib/pq para a v1.12.3 (agora requer Go 1.25).
  • 🌐 3 novos idiomas: O site de documentação já está disponível em polaco, ucraniano e grego — 10 idiomas no total.

v2.0.1

  • 🔒 Correção de segurança: Atualizada a dependência transitiva de HTTP/3 quic-go para a v0.59.1, corrigindo uma vulnerabilidade de expansão de trailers QPACK que podia permitir que um peer malicioso esgotasse a memória do servidor ou do cliente.
  • 🎨 Melhorias no site de documentação: Novo alternador de tema claro/escuro/automático e alternador de idioma apenas com ícones, links de ícone do GitHub/Apoio na barra de navegação, correção dos dados estruturados JSON-LD codificados em duplicidade, e um llms.txt ampliado.

v2.0.0

  • 🔒 Padrões seguros (com quebra de compatibilidade): DB_SSLMODE agora tem como padrão require, ALLOWED_ORIGINS deixou de ter * como padrão, e JWT_SECRET deve ter no mínimo 32 bytes. Implantações existentes devem revisar a configuração antes de atualizar.
  • 🧹 Limpeza de itens legados: Removidas as rotas de redirecionamento /api/… e /sse/… e o alias JSON-RPC obsoleto login. Use diretamente /{prefix}/:database/… e get_jwt.
  • 🛡️ Autenticação e tratamento de erros mais rígidos: Um novo limite de login por IP (LOGIN_RATE_LIMIT_PER_IP) fecha uma brecha de credential spraying, e os erros das ferramentas MCP não expõem mais o texto de erro bruto do PostgreSQL por padrão (pode ser reativado com MCP_SQL_ERROR_DETAIL).
  • ⚙️ Limites de conexão configuráveis: O limite do pool de conexões de autenticação direta agora é configurável via DIRECT_POOL_LIMIT.
  • 🔑 Suporte a IdPs externos (BYO JWT): As novas configurações JWT_ISSUER, JWT_AUDIENCE e JWT_LEEWAY vinculam os tokens emitidos a um emissor/audiência específicos e permitem ajustar a tolerância de desvio de relógio.
  • 🧰 Novas ferramentas: Um JWT Getter (/tools/get-jwt) e um SSE Tester (/tools/test-sse) independentes se juntam ao Explorer para testes manuais rápidos.
  • 🐛 Correções de confiabilidade: Corrigido um bloqueio no encerramento do SSE e um bug na recuperação de conexões mortas que podia deixar o servidor incapaz de reconectar ao PostgreSQL.
  • 🧪 Reforço de CI: Adicionados golangci-lint, o detector de race conditions do Go e govulncheck a cada build, além de maior cobertura de testes.
  • 📦 Processo de lançamento: Adicionado o CHANGELOG.md e dividido o fluxo de lançamento em make release-local (build e verificação) e make release (tag, publicação, atualização do tap Homebrew).

v1.3.0

  • 🌐 PgArachne Explorer – PWA moderno: Renovação visual e funcional completa – tema escuro/claro (automático), layout de cartões responsivo, realce de sintaxe JSON, botão copiar para área de transferência, melhor experiência de autenticação (abas senha/token), suporte à instalação PWA (manifesto, ícones, service worker), links compartilháveis via parâmetro ?url=….
  • 🛠️ Suporte ao Model Context Protocol (MCP): Novo endpoint /{prefix}/{db}/mcp com métodos padrão resources/list, resources/read, prompts/list, prompts/get – totalmente suportado por funções PostgreSQL e reutilizando a autenticação e troca de papel existentes.
  • 🔧 Prefixo de API configurável: O padrão foi alterado para /db/{database}/jsonrpc e /db/{database}/sse, as rotas antigas /api/… e /sse/… permanecem como redirecionamentos 307 por compatibilidade. Controlado pela variável de ambiente API_PREFIX.
  • 🛡️ Proteção de idempotência: Campo opcional idempotencyKey em requisições JSON-RPC – detecção automática de duplicatas (HTTP 409 + código de erro em caso de colisão) usando pgarachne.save_idempotency_key().
  • 📚 Melhorias na documentação: Nova seção /tools/ com cartões (Explorer + futura barra de ferramentas para macOS), nova página «Architectural Decisions», SECURITY.md com instruções para comunicar vulnerabilidades, melhor tipografia em todos os idiomas via TypoLima, suporte aprimorado para página 404 no GitHub Pages.
  • 📝 Renomeação do método de login: O método JSON-RPC login foi renomeado para get_jwt (o nome antigo permanece como alias obsoleto com aviso nos logs).
  • 📊 Limpeza de registros (logging): Ao registrar em arquivo, o console exibe apenas informações mínimas de inicialização → saída mais limpa em ambientes de produção/Docker.

v1.2.0

  • 🛡️ Segurança: A validação do token de acesso ocorre antes de estabelecer uma conexão com o banco de dados. Melhoria na proteção contra falsificação de IP (adicionada a configuração TRUSTED_PROXIES) e ocultação de erros internos do banco de dados para o utilizador final.
  • 📊 Métricas isoladas: O endpoint Prometheus /metrics foi movido da API pública para a sua própria porta segura (por padrão, disponível apenas em 127.0.0.1:9090).
  • 📦 Nova opção de instalação: O projeto conta agora com um tap Homebrew oficial para macOS e Linux. As compilações são assinadas e geradas via GoReleaser.
  • 📚 Documentação reformulada: Visual totalmente novo construído sobre o framework Hugo. Adição de busca rápida de texto completo, opção de copiar código e exemplos de implantação em produção (hardening com Nginx, BYO JWT).
  • ⚙️ Gerenciamento aprimorado de daemon: Adicionado suporte para configuração de caminho personalizado do PID_FILE.

v1.1.0

  • 🔌 API unificada: Chamadas via POST /api/<db> (o método chamado é especificado no corpo JSON-RPC).
  • ⚡ Notificações em tempo real: Novo endpoint GET /sse/<db>?channels=... para escutar eventos do banco de dados com suporte a múltiplos canais.
  • 📈 Observabilidade: Métricas detalhadas do Prometheus para HTTP, autenticação, JSON-RPC e SSE.
  • 🏋️ Melhoria substancial na estabilidade: Proteção contra clientes lentos, limites de tempo rigorosos e limpeza automática de conexões.