diff --git a/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js b/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js
index ee0a03cb..b75028c9 100644
--- a/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js
+++ b/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js
@@ -131,7 +131,6 @@ export default function ProviderLimits() {
const [lastUpdated, setLastUpdated] = useState(null);
const [hasHydratedAutoRefresh, setHasHydratedAutoRefresh] = useState(false);
const [refreshingAll, setRefreshingAll] = useState(false);
- const [countdown, setCountdown] = useState(60);
const [connectionsLoading, setConnectionsLoading] = useState(true);
const [deletingId, setDeletingId] = useState(null);
const [togglingId, setTogglingId] = useState(null);
@@ -165,7 +164,6 @@ export default function ProviderLimits() {
});
const intervalRef = useRef(null);
- const countdownRef = useRef(null);
const tickCountRef = useRef(0);
const fetchConnections = useCallback(
@@ -461,7 +459,6 @@ export default function ProviderLimits() {
if (refreshingAll) return;
setRefreshingAll(true);
- setCountdown(60);
// Throttle Claude: poll its quota every Nth auto-tick (manual force bypasses)
const tick = (tickCountRef.current += 1);
@@ -571,10 +568,6 @@ export default function ProviderLimits() {
clearInterval(intervalRef.current);
intervalRef.current = null;
}
- if (countdownRef.current) {
- clearInterval(countdownRef.current);
- countdownRef.current = null;
- }
return;
}
@@ -583,17 +576,8 @@ export default function ProviderLimits() {
refreshAll();
}, REFRESH_INTERVAL_MS);
- // Countdown interval
- countdownRef.current = setInterval(() => {
- setCountdown((prev) => {
- if (prev <= 1) return 60;
- return prev - 1;
- });
- }, 1000);
-
return () => {
if (intervalRef.current) clearInterval(intervalRef.current);
- if (countdownRef.current) clearInterval(countdownRef.current);
};
}, [autoRefresh, refreshAll, hasHydratedAutoRefresh]);
@@ -605,16 +589,9 @@ export default function ProviderLimits() {
clearInterval(intervalRef.current);
intervalRef.current = null;
}
- if (countdownRef.current) {
- clearInterval(countdownRef.current);
- countdownRef.current = null;
- }
} else if (autoRefresh && hasHydratedAutoRefresh) {
// Resume auto-refresh when tab becomes visible
intervalRef.current = setInterval(() => refreshAll(), REFRESH_INTERVAL_MS);
- countdownRef.current = setInterval(() => {
- setCountdown((prev) => (prev <= 1 ? 60 : prev - 1));
- }, 1000);
}
};
@@ -927,11 +904,6 @@ export default function ProviderLimits() {
Auto-refresh
- {autoRefresh && (
-
- ({countdown}s)
-
- )}
diff --git a/src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js b/src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js
index 87bf05ab..f65d3bb3 100644
--- a/src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js
+++ b/src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js
@@ -287,7 +287,7 @@ export default function RequestDetailsTab() {
className="border-b border-black/5 dark:border-white/5 last:border-b-0 hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors"
>
- {formatVietnamDateTime(detail.timestamp, { dateStyle: "medium", timeStyle: "medium" }) || "—"}
+ {formatVietnamDateTime(detail.timestamp, { dateStyle: "medium", timeStyle: "short" }) || "—"}
|
{detail.model}
@@ -359,7 +359,7 @@ export default function RequestDetailsTab() {
Timestamp:{" "}
- {formatVietnamDateTime(selectedDetail.timestamp, { dateStyle: "medium", timeStyle: "medium" }) || "—"}
+ {formatVietnamDateTime(selectedDetail.timestamp, { dateStyle: "medium", timeStyle: "short" }) || "—"}
Provider:{" "}
diff --git a/src/app/api/settings/route.js b/src/app/api/settings/route.js
index 0c07bd83..ee92c05b 100644
--- a/src/app/api/settings/route.js
+++ b/src/app/api/settings/route.js
@@ -4,7 +4,7 @@ import { applyOutboundProxyEnv } from "@/lib/network/outboundProxy";
import { resetComboRotation } from "open-sse/services/combo.js";
import { runQuotaAutoPingTick } from "@/shared/services/quotaAutoPing";
import { requireCurrentDashboardUser, requireUsageDashboardUser } from "@/lib/auth/currentUser";
-import { updateUser, verifyUserPassword } from "@/lib/db";
+import { updateUser } from "@/lib/db";
export const dynamic = "force-dynamic";
export const revalidate = 0;
@@ -115,7 +115,7 @@ export async function PATCH(request) {
// Strip protected secrets before any internal handling sets them
for (const key of PROTECTED_SETTING_KEYS) delete body[key];
- // If updating password, hash it
+ // An authenticated dashboard session is sufficient to change its own password.
if (body.newPassword) {
let user;
try {
@@ -124,12 +124,6 @@ export async function PATCH(request) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
- if (!body.currentPassword) {
- return NextResponse.json({ error: "Current password required" }, { status: 400 });
- }
- if (!(await verifyUserPassword(user.id, body.currentPassword))) {
- return NextResponse.json({ error: "Invalid current password" }, { status: 401 });
- }
await updateUser(user.id, { password: body.newPassword });
delete body.newPassword;
delete body.currentPassword;
diff --git a/src/lib/db/repos/usageRepo.js b/src/lib/db/repos/usageRepo.js
index fe5bbb51..943857e6 100644
--- a/src/lib/db/repos/usageRepo.js
+++ b/src/lib/db/repos/usageRepo.js
@@ -1002,7 +1002,6 @@ function formatLogDate(date = new Date()) {
year: "numeric",
hour: "2-digit",
minute: "2-digit",
- second: "2-digit",
hourCycle: "h23",
});
}
diff --git a/src/shared/components/RequestLogger.js b/src/shared/components/RequestLogger.js
index f13b518a..686bfbf6 100644
--- a/src/shared/components/RequestLogger.js
+++ b/src/shared/components/RequestLogger.js
@@ -43,7 +43,7 @@ export default function RequestLogger() {
Request Logs
|