Skip to content

Commit 9c401b5

Browse files
committed
refactor: extract account manager cache entry wrapper
1 parent f8a68bf commit 9c401b5

3 files changed

Lines changed: 102 additions & 8 deletions

File tree

index.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,10 @@ import {
197197
invalidateAccountManagerCacheState,
198198
reloadAccountManagerFromDiskState,
199199
} from "./lib/runtime/account-manager-cache.js";
200+
import {
201+
invalidateAccountManagerCacheEntry,
202+
reloadAccountManagerFromDiskEntry,
203+
} from "./lib/runtime/account-manager-cache-entry.js";
200204
import {
201205
type TokenSuccessWithAccount as AccountPoolTokenSuccessWithAccount,
202206
persistAccountPoolResults,
@@ -524,28 +528,36 @@ export const OpenAIOAuthPlugin: Plugin = async ({ client }: PluginInput) => {
524528
};
525529

526530
const invalidateAccountManagerCache = (): void => {
527-
const next = invalidateAccountManagerCacheState();
528-
cachedAccountManager = next.cachedAccountManager;
529-
accountManagerPromise = next.accountManagerPromise;
531+
invalidateAccountManagerCacheEntry<AccountManager>({
532+
invalidateAccountManagerCacheState,
533+
setCachedAccountManager: (manager) => {
534+
cachedAccountManager = manager;
535+
},
536+
setAccountManagerPromise: (promise) => {
537+
accountManagerPromise = promise;
538+
},
539+
});
530540
};
531541

532542
const reloadAccountManagerFromDisk = async (
533543
authFallback?: OAuthAuthDetails,
534-
): Promise<AccountManager> => {
535-
accountReloadInFlight = reloadAccountManagerFromDiskState({
544+
): Promise<AccountManager> =>
545+
reloadAccountManagerFromDiskEntry<AccountManager>({
546+
authFallback,
536547
currentReloadInFlight: accountReloadInFlight,
548+
reloadAccountManagerFromDiskState,
537549
loadFromDisk: (fallback) => AccountManager.loadFromDisk(fallback),
538-
authFallback,
539550
onLoaded: (reloaded) => {
540551
cachedAccountManager = reloaded;
541552
accountManagerPromise = Promise.resolve(reloaded);
542553
},
543554
onSettled: () => {
544555
accountReloadInFlight = null;
545556
},
557+
setReloadInFlight: (promise) => {
558+
accountReloadInFlight = promise;
559+
},
546560
});
547-
return accountReloadInFlight;
548-
};
549561

550562
const applyAccountStorageScope = (
551563
pluginConfig: ReturnType<typeof loadPluginConfig>,
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import type { OAuthAuthDetails } from "../types.js";
2+
3+
export function invalidateAccountManagerCacheEntry<TManager>(params: {
4+
invalidateAccountManagerCacheState: () => {
5+
cachedAccountManager: null;
6+
accountManagerPromise: null;
7+
};
8+
setCachedAccountManager: (manager: TManager | null) => void;
9+
setAccountManagerPromise: (promise: Promise<TManager> | null) => void;
10+
}): void {
11+
const next = params.invalidateAccountManagerCacheState();
12+
params.setCachedAccountManager(next.cachedAccountManager);
13+
params.setAccountManagerPromise(next.accountManagerPromise);
14+
}
15+
16+
export async function reloadAccountManagerFromDiskEntry<TManager>(params: {
17+
authFallback?: OAuthAuthDetails;
18+
currentReloadInFlight: Promise<TManager> | null;
19+
reloadAccountManagerFromDiskState: (args: {
20+
currentReloadInFlight: Promise<TManager> | null;
21+
loadFromDisk: (authFallback?: OAuthAuthDetails) => Promise<TManager>;
22+
authFallback?: OAuthAuthDetails;
23+
onLoaded: (manager: TManager) => void;
24+
onSettled: () => void;
25+
}) => Promise<TManager>;
26+
loadFromDisk: (authFallback?: OAuthAuthDetails) => Promise<TManager>;
27+
onLoaded: (manager: TManager) => void;
28+
onSettled: () => void;
29+
setReloadInFlight: (promise: Promise<TManager>) => void;
30+
}): Promise<TManager> {
31+
const inFlight = params.reloadAccountManagerFromDiskState({
32+
currentReloadInFlight: params.currentReloadInFlight,
33+
loadFromDisk: params.loadFromDisk,
34+
authFallback: params.authFallback,
35+
onLoaded: params.onLoaded,
36+
onSettled: params.onSettled,
37+
});
38+
params.setReloadInFlight(inFlight);
39+
return inFlight;
40+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { describe, expect, it, vi } from "vitest";
2+
import {
3+
invalidateAccountManagerCacheEntry,
4+
reloadAccountManagerFromDiskEntry,
5+
} from "../lib/runtime/account-manager-cache-entry.js";
6+
7+
describe("account manager cache entry", () => {
8+
it("delegates cache invalidation state into the setter callbacks", () => {
9+
const setCachedAccountManager = vi.fn();
10+
const setAccountManagerPromise = vi.fn();
11+
12+
invalidateAccountManagerCacheEntry({
13+
invalidateAccountManagerCacheState: () => ({
14+
cachedAccountManager: null,
15+
accountManagerPromise: null,
16+
}),
17+
setCachedAccountManager,
18+
setAccountManagerPromise,
19+
});
20+
21+
expect(setCachedAccountManager).toHaveBeenCalledWith(null);
22+
expect(setAccountManagerPromise).toHaveBeenCalledWith(null);
23+
});
24+
25+
it("delegates reload state into the injected runtime callbacks", async () => {
26+
const reloadState = vi.fn(async () => ({ id: 1 }));
27+
const setReloadInFlight = vi.fn();
28+
29+
const result = await reloadAccountManagerFromDiskEntry({
30+
currentReloadInFlight: null,
31+
reloadAccountManagerFromDiskState: reloadState,
32+
loadFromDisk: vi.fn(async () => ({ id: 1 })),
33+
onLoaded: vi.fn(),
34+
onSettled: vi.fn(),
35+
setReloadInFlight,
36+
});
37+
38+
expect(reloadState).toHaveBeenCalled();
39+
expect(setReloadInFlight).toHaveBeenCalledWith(expect.any(Promise));
40+
expect(result).toEqual({ id: 1 });
41+
});
42+
});

0 commit comments

Comments
 (0)