diff --git a/frontend-modern/src/components/UpdateBanner.tsx b/frontend-modern/src/components/UpdateBanner.tsx index d986dfa..e0c7519 100644 --- a/frontend-modern/src/components/UpdateBanner.tsx +++ b/frontend-modern/src/components/UpdateBanner.tsx @@ -1,20 +1,14 @@ -import { Show, createSignal, createEffect, For, useContext } from 'solid-js'; -import { useNavigate } from '@solidjs/router'; +import { Show, createSignal, createEffect, For } from 'solid-js'; import { updateStore } from '@/stores/updates'; import { UpdatesAPI, type UpdatePlan } from '@/api/updates'; import { UpdateConfirmationModal } from './UpdateConfirmationModal'; -import { UpdateProgressModal } from './UpdateProgressModal'; -import { WebSocketContext } from '@/App'; import { copyToClipboard } from '@/utils/clipboard'; import { logger } from '@/utils/logger'; export function UpdateBanner() { - const navigate = useNavigate(); - const wsContext = useContext(WebSocketContext); const [isExpanded, setIsExpanded] = createSignal(false); const [updatePlan, setUpdatePlan] = createSignal(null); const [showConfirmModal, setShowConfirmModal] = createSignal(false); - const [showProgressModal, setShowProgressModal] = createSignal(false); const [isApplying, setIsApplying] = createSignal(false); const [copiedIndex, setCopiedIndex] = createSignal(null); @@ -42,9 +36,8 @@ export function UpdateBanner() { setIsApplying(true); try { await UpdatesAPI.applyUpdate(info.downloadUrl); - // Close confirmation and show progress + // Close confirmation - GlobalUpdateProgressWatcher will auto-open the progress modal setShowConfirmModal(false); - setShowProgressModal(true); } catch (error) { logger.error('Failed to start update', error); alert('Failed to start update. Please try again.'); @@ -295,18 +288,6 @@ export function UpdateBanner() { }} isApplying={isApplying()} /> - - {/* Update Progress Modal */} - setShowProgressModal(false)} - onViewHistory={() => { - setShowProgressModal(false); - navigate('/settings/updates'); - }} - connected={wsContext?.connected} - reconnecting={wsContext?.reconnecting} - /> ); } diff --git a/internal/api/rate_limit_config.go b/internal/api/rate_limit_config.go index cb8a98a..fe2eec7 100644 --- a/internal/api/rate_limit_config.go +++ b/internal/api/rate_limit_config.go @@ -36,8 +36,8 @@ func InitializeRateLimiters() { // Recovery operations: extremely strict RecoveryEndpoints: NewRateLimiter(3, 10*time.Minute), // 3 attempts per 10 minutes - // Update operations: moderate limits - UpdateEndpoints: NewRateLimiter(20, 1*time.Minute), // 20 checks per minute + // Update operations: allow frequent polling during updates + UpdateEndpoints: NewRateLimiter(60, 1*time.Minute), // 60 checks per minute (modal polls every 2s) // WebSocket connections: per-connection limits WebSocketEndpoints: NewRateLimiter(30, 1*time.Minute), // 30 new connections per minute