diff --git a/backend/internal/api/handlers/management/auth_files_provider_oauth.go b/backend/internal/api/handlers/management/auth_files_provider_oauth.go index 3928d60..549a0d0 100644 --- a/backend/internal/api/handlers/management/auth_files_provider_oauth.go +++ b/backend/internal/api/handlers/management/auth_files_provider_oauth.go @@ -317,8 +317,13 @@ func (h *Handler) RequestCodexToken(c *gin.Context) { FileName: fileName, Storage: tokenStorage, Metadata: map[string]any{ - "email": tokenStorage.Email, - "account_id": tokenStorage.AccountID, + "email": tokenStorage.Email, + "account_id": tokenStorage.AccountID, + "access_token": tokenStorage.AccessToken, + "refresh_token": tokenStorage.RefreshToken, + "id_token": tokenStorage.IDToken, + "expired": tokenStorage.Expire, + "last_refresh": tokenStorage.LastRefresh, }, } if errGuard := guardOAuthSessionPendingForSave(state, "codex"); errGuard != nil { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index f81b88d..85df36d 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -32,26 +32,23 @@ import { Spinner, Tooltip, TooltipContent, + TooltipProvider, TooltipTrigger, useTheme, } from '@methanium/ui'; import { AlertTriangle, Check, - CheckCircle2, Clock3, ExternalLink, Eye, - EyeClosed, EyeOff, - EyeOffIcon, KeyRound, LogOut, Moon, Plus, RefreshCw, ShieldAlert, - Star, Sun, Trash2, UserRound, @@ -101,6 +98,21 @@ function titleFromKey(key: string) { return key.replace(/[_-]+/g, ' ').replace(/\b\w/g, (letter) => letter.toUpperCase()); } +function quotaWindowLabel(record: Record, key: string) { + const rawSeconds = + record.limit_window_seconds ?? record.limitWindowSeconds ?? record.window_seconds; + if (typeof rawSeconds === 'number') { + if (rawSeconds === 5 * 60 * 60) return '5-hour limit'; + if (rawSeconds === 7 * 24 * 60 * 60) return 'Weekly limit'; + + const days = rawSeconds / 86400; + if (Number.isInteger(days)) return `${days}-day limit`; + const hours = rawSeconds / 3600; + if (Number.isInteger(hours)) return `${hours}-hour limit`; + } + return titleFromKey(key); +} + function quotaWindows(data: unknown) { const windows: Array<{ key: string; @@ -119,7 +131,7 @@ function quotaWindows(data: unknown) { const rawResetAfter = record.reset_after_seconds ?? record.resetAfterSeconds; windows.push({ key, - label: titleFromKey(path[path.length - 1] || 'Usage'), + label: quotaWindowLabel(record, path[path.length - 1] || 'Usage'), usedPercent: Math.max(0, Math.min(100, used)), resetAt: typeof rawResetAt === 'number' ? rawResetAt : undefined, resetAfterSeconds: typeof rawResetAfter === 'number' ? rawResetAfter : undefined, @@ -302,22 +314,17 @@ function AccountCard({ {emailHidden ? ( - - - - {Array.from({ length: (identity || account.name).length }).map((_, index) => ( - * - ))} - - - {account.name} - + + {Array.from({ length: (identity || account.name).length }).map((_, index) => ( + * + ))} + ) : ( - - {identity || account.name} - - {account.name} + {identity || account.name}} + /> + {account.name} )}