Fix garmin status showing stale connection state
All checks were successful
Deploy / deploy (push) Successful in 1m37s

Fetch fresh user data from database in status endpoint instead of
relying on auth store cookie, which may be stale after token save.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-12 21:45:35 +00:00
parent 6bd5eb663b
commit dbf0c32588
2 changed files with 27 additions and 10 deletions

View File

@@ -9,11 +9,26 @@ import type { User } from "@/types";
// Module-level variable to control mock user in tests
let currentMockUser: User | null = null;
// Create a mock PocketBase client that returns the current mock user
const createMockPb = () => ({
collection: vi.fn(() => ({
getOne: vi.fn(() =>
Promise.resolve(
currentMockUser
? {
...currentMockUser,
garminTokenExpiresAt:
currentMockUser.garminTokenExpiresAt?.toISOString(),
}
: null,
),
),
})),
});
// Mock PocketBase
vi.mock("@/lib/pocketbase", () => ({
createPocketBaseClient: vi.fn(() => ({
collection: vi.fn(),
})),
createPocketBaseClient: vi.fn(() => createMockPb()),
}));
// Mock the auth-middleware module
@@ -23,7 +38,8 @@ vi.mock("@/lib/auth-middleware", () => ({
if (!currentMockUser) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
return handler(request, currentMockUser);
const mockPb = createMockPb();
return handler(request, currentMockUser, mockPb);
};
}),
}));

View File

@@ -5,8 +5,10 @@ import { NextResponse } from "next/server";
import { withAuth } from "@/lib/auth-middleware";
import { daysUntilExpiry, isTokenExpired } from "@/lib/garmin";
export const GET = withAuth(async (_request, user) => {
const connected = user.garminConnected;
export const GET = withAuth(async (_request, user, pb) => {
// Fetch fresh user data from database (auth store cookie may be stale)
const freshUser = await pb.collection("users").getOne(user.id);
const connected = freshUser.garminConnected;
if (!connected) {
return NextResponse.json({
@@ -17,10 +19,9 @@ export const GET = withAuth(async (_request, user) => {
});
}
const expiresAt =
user.garminTokenExpiresAt instanceof Date
? user.garminTokenExpiresAt.toISOString()
: String(user.garminTokenExpiresAt);
const expiresAt = freshUser.garminTokenExpiresAt
? String(freshUser.garminTokenExpiresAt)
: "";
const tokens = {
oauth1: "",