feat: persist selected provider and keys globally via node backend, remove Claude, Azure, and MiniMax from UI

This commit is contained in:
2026-06-23 16:50:35 +00:00
parent 7898b131ec
commit 94a41e6a6e
5 changed files with 157 additions and 33 deletions
+47
View File
@@ -23,6 +23,7 @@ const App: React.FC = () => {
const [error, setError] = useState<string | null>(null);
useEffect(() => {
// 1. Tentar ler do localStorage primeiro
const savedApiKey = localStorage.getItem('api-key');
const savedProvider = localStorage.getItem('ai-provider') as AIProvider;
const savedModel = localStorage.getItem('model-' + savedProvider);
@@ -35,6 +36,33 @@ const App: React.FC = () => {
if (savedEndpoint) setEndpoint(savedEndpoint);
setHasKey(true);
}
// 2. Sincronizar com as configurações globais persistidas no servidor (mesmo em outros navegadores)
fetch('/api/config')
.then(res => res.json())
.then(config => {
if (config.provider) {
setProvider(config.provider);
if (config.apiKey) setApiKey(config.apiKey);
if (config.model) setModel(config.model);
if (config.endpoint) setEndpoint(config.endpoint);
setHasKey(true);
// Sincroniza o localStorage
localStorage.setItem('ai-provider', config.provider);
if (config.apiKey) {
localStorage.setItem('api-key', config.apiKey);
localStorage.setItem('last-api-key', config.apiKey);
}
if (config.model) {
localStorage.setItem('model-' + config.provider, config.model);
}
if (config.endpoint) {
localStorage.setItem('ollama-endpoint', config.endpoint);
}
}
})
.catch(err => console.warn('Erro ao carregar configurações do servidor:', err));
}, []);
const handleFileChange = useCallback((selectedFile: File | null) => {
@@ -60,6 +88,18 @@ const App: React.FC = () => {
localStorage.setItem('ai-provider', newProvider);
localStorage.setItem('model-' + newProvider, newModel);
setHasKey(true);
// Salvar no servidor para persistência multi-navegador
fetch('/api/config', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
provider: newProvider,
apiKey: key,
model: newModel,
endpoint: newEndpoint || ''
})
}).catch(err => console.error('Erro ao persistir configurações no servidor:', err));
}, []);
const handleAnalyzeClick = async () => {
@@ -117,6 +157,13 @@ const App: React.FC = () => {
localStorage.removeItem('api-key');
setHasKey(false);
handleReset();
// Limpar no servidor
fetch('/api/config', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({})
}).catch(err => console.error('Erro ao limpar configurações no servidor:', err));
}, [handleReset]);
const handleExport = (action: 'preview' | 'download') => {