fix(client): apply rate limit focus refetch regardless of session state (#7048)

Co-authored-by: Alex Yang <himself65@outlook.com>
This commit is contained in:
Taesu
2025-12-31 21:36:19 +08:00
committed by Alex Yang
co-authored by Alex Yang
parent 016ba1df7e
commit bf42379be3
2 changed files with 8 additions and 14 deletions
@@ -172,7 +172,7 @@ describe("session-refresh", () => {
vi.useRealTimers();
});
it("should allow refetch on focus when session is null even within rate limit", async () => {
it("should rate limit refetch on focus when session is null", async () => {
const sessionAtom: SessionAtom = atom({
data: {
user: { id: "1", email: "test@test.com" },
@@ -223,15 +223,15 @@ describe("session-refresh", () => {
// Immediately trigger another focus event (within rate limit window)
manager.triggerRefetch({ event: "visibilitychange" });
// Signal should change because session is null (rate limit bypassed)
expect(signalChangeCount).toBeGreaterThan(signalCountAfterFirstFocus);
// Signal should NOT change because rate limit should apply even when session is null
expect(signalChangeCount).toBe(signalCountAfterFirstFocus);
unsubscribeSignal();
manager.cleanup();
vi.useRealTimers();
});
it("should allow refetch on focus when session is undefined even within rate limit", async () => {
it("should rate limit refetch on focus when session is undefined", async () => {
const sessionAtom: SessionAtom = atom({
data: {
user: { id: "1", email: "test@test.com" },
@@ -282,8 +282,8 @@ describe("session-refresh", () => {
// Immediately trigger another focus event (within rate limit window)
manager.triggerRefetch({ event: "visibilitychange" });
// Signal should change because session is undefined (rate limit bypassed)
expect(signalChangeCount).toBeGreaterThan(signalCountAfterFirstFocus);
// Signal should NOT change because rate limit should apply even when session is undefined
expect(signalChangeCount).toBe(signalCountAfterFirstFocus);
unsubscribeSignal();
manager.cleanup();
@@ -100,13 +100,10 @@ export function createSessionRefreshManager(opts: SessionRefreshOptions) {
// Rate limit: don't refetch on focus if a session request was made recently
if (event?.event === "visibilitychange") {
const timeSinceLastRequest = now() - state.lastSessionRequest;
if (
timeSinceLastRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS &&
currentSession?.data !== null &&
currentSession?.data !== undefined
) {
if (timeSinceLastRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS) {
return;
}
state.lastSessionRequest = now();
}
if (
@@ -114,9 +111,6 @@ export function createSessionRefreshManager(opts: SessionRefreshOptions) {
currentSession?.data === undefined ||
event?.event === "visibilitychange"
) {
if (event?.event === "visibilitychange") {
state.lastSessionRequest = now();
}
state.lastSync = now();
sessionSignal.set(!sessionSignal.get());
}