Fix garmin status showing stale connection state
All checks were successful
Deploy / deploy (push) Successful in 1m37s
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:
@@ -9,11 +9,26 @@ import type { User } from "@/types";
|
|||||||
// Module-level variable to control mock user in tests
|
// Module-level variable to control mock user in tests
|
||||||
let currentMockUser: User | null = null;
|
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
|
// Mock PocketBase
|
||||||
vi.mock("@/lib/pocketbase", () => ({
|
vi.mock("@/lib/pocketbase", () => ({
|
||||||
createPocketBaseClient: vi.fn(() => ({
|
createPocketBaseClient: vi.fn(() => createMockPb()),
|
||||||
collection: vi.fn(),
|
|
||||||
})),
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Mock the auth-middleware module
|
// Mock the auth-middleware module
|
||||||
@@ -23,7 +38,8 @@ vi.mock("@/lib/auth-middleware", () => ({
|
|||||||
if (!currentMockUser) {
|
if (!currentMockUser) {
|
||||||
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
||||||
}
|
}
|
||||||
return handler(request, currentMockUser);
|
const mockPb = createMockPb();
|
||||||
|
return handler(request, currentMockUser, mockPb);
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ import { NextResponse } from "next/server";
|
|||||||
import { withAuth } from "@/lib/auth-middleware";
|
import { withAuth } from "@/lib/auth-middleware";
|
||||||
import { daysUntilExpiry, isTokenExpired } from "@/lib/garmin";
|
import { daysUntilExpiry, isTokenExpired } from "@/lib/garmin";
|
||||||
|
|
||||||
export const GET = withAuth(async (_request, user) => {
|
export const GET = withAuth(async (_request, user, pb) => {
|
||||||
const connected = user.garminConnected;
|
// 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) {
|
if (!connected) {
|
||||||
return NextResponse.json({
|
return NextResponse.json({
|
||||||
@@ -17,10 +19,9 @@ export const GET = withAuth(async (_request, user) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const expiresAt =
|
const expiresAt = freshUser.garminTokenExpiresAt
|
||||||
user.garminTokenExpiresAt instanceof Date
|
? String(freshUser.garminTokenExpiresAt)
|
||||||
? user.garminTokenExpiresAt.toISOString()
|
: "";
|
||||||
: String(user.garminTokenExpiresAt);
|
|
||||||
|
|
||||||
const tokens = {
|
const tokens = {
|
||||||
oauth1: "",
|
oauth1: "",
|
||||||
|
|||||||
Reference in New Issue
Block a user