Skip to content

Commit 5b7e95d

Browse files
committed
refactor: extract refresh guardian wrapper
1 parent 56323b4 commit 5b7e95d

3 files changed

Lines changed: 91 additions & 4 deletions

File tree

index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ import {
215215
applyPreemptiveQuotaSettingsFromConfig,
216216
resolveUiRuntimeFromConfig,
217217
} from "./lib/runtime/quota-settings.js";
218+
import { ensureRefreshGuardianEntry } from "./lib/runtime/refresh-guardian-entry.js";
218219
import {
219220
ensureLiveAccountSyncState,
220221
ensureRefreshGuardianState,
@@ -591,18 +592,20 @@ export const OpenAIOAuthPlugin: Plugin = async ({ client }: PluginInput) => {
591592
const ensureRefreshGuardian = (
592593
pluginConfig: ReturnType<typeof loadPluginConfig>,
593594
): void => {
594-
const next = ensureRefreshGuardianState({
595-
enabled: getProactiveRefreshGuardian(pluginConfig),
596-
intervalMs: getProactiveRefreshIntervalMs(pluginConfig),
597-
bufferMs: getProactiveRefreshBufferMs(pluginConfig),
595+
const next = ensureRefreshGuardianEntry({
596+
pluginConfig,
598597
currentGuardian: refreshGuardian,
599598
currentConfigKey: refreshGuardianConfigKey,
599+
getProactiveRefreshGuardian,
600+
getProactiveRefreshIntervalMs,
601+
getProactiveRefreshBufferMs,
600602
createGuardian: ({ intervalMs, bufferMs }) =>
601603
new RefreshGuardian(() => cachedAccountManager, {
602604
intervalMs,
603605
bufferMs,
604606
}),
605607
registerCleanup,
608+
ensureRefreshGuardianState,
606609
});
607610
refreshGuardian = next.refreshGuardian;
608611
refreshGuardianConfigKey = next.refreshGuardianConfigKey;
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
export function ensureRefreshGuardianEntry<TGuardian>(params: {
2+
pluginConfig: ReturnType<typeof import("../config.js").loadPluginConfig>;
3+
currentGuardian: TGuardian | null;
4+
currentConfigKey: string | null;
5+
getProactiveRefreshGuardian: (
6+
config: ReturnType<typeof import("../config.js").loadPluginConfig>,
7+
) => boolean;
8+
getProactiveRefreshIntervalMs: (
9+
config: ReturnType<typeof import("../config.js").loadPluginConfig>,
10+
) => number;
11+
getProactiveRefreshBufferMs: (
12+
config: ReturnType<typeof import("../config.js").loadPluginConfig>,
13+
) => number;
14+
createGuardian: (options: {
15+
intervalMs: number;
16+
bufferMs: number;
17+
}) => TGuardian;
18+
registerCleanup: (cleanup: () => void) => void;
19+
ensureRefreshGuardianState: (args: {
20+
enabled: boolean;
21+
intervalMs: number;
22+
bufferMs: number;
23+
currentGuardian: TGuardian | null;
24+
currentConfigKey: string | null;
25+
createGuardian: (options: {
26+
intervalMs: number;
27+
bufferMs: number;
28+
}) => TGuardian;
29+
registerCleanup: (cleanup: () => void) => void;
30+
}) => {
31+
refreshGuardian: TGuardian | null;
32+
refreshGuardianConfigKey: string | null;
33+
};
34+
}): {
35+
refreshGuardian: TGuardian | null;
36+
refreshGuardianConfigKey: string | null;
37+
} {
38+
return params.ensureRefreshGuardianState({
39+
enabled: params.getProactiveRefreshGuardian(params.pluginConfig),
40+
intervalMs: params.getProactiveRefreshIntervalMs(params.pluginConfig),
41+
bufferMs: params.getProactiveRefreshBufferMs(params.pluginConfig),
42+
currentGuardian: params.currentGuardian,
43+
currentConfigKey: params.currentConfigKey,
44+
createGuardian: params.createGuardian,
45+
registerCleanup: params.registerCleanup,
46+
});
47+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { describe, expect, it, vi } from "vitest";
2+
import { ensureRefreshGuardianEntry } from "../lib/runtime/refresh-guardian-entry.js";
3+
4+
describe("refresh guardian entry", () => {
5+
it("delegates config-derived arguments into the refresh guardian state helper", () => {
6+
const ensureRefreshGuardianState = vi.fn(() => ({
7+
refreshGuardian: { id: 1 },
8+
refreshGuardianConfigKey: "1000:100",
9+
}));
10+
11+
const result = ensureRefreshGuardianEntry({
12+
pluginConfig: {} as never,
13+
currentGuardian: null,
14+
currentConfigKey: null,
15+
getProactiveRefreshGuardian: () => true,
16+
getProactiveRefreshIntervalMs: () => 1000,
17+
getProactiveRefreshBufferMs: () => 100,
18+
createGuardian: vi.fn(() => ({ id: 1 })),
19+
registerCleanup: vi.fn(),
20+
ensureRefreshGuardianState,
21+
});
22+
23+
expect(ensureRefreshGuardianState).toHaveBeenCalledWith({
24+
enabled: true,
25+
intervalMs: 1000,
26+
bufferMs: 100,
27+
currentGuardian: null,
28+
currentConfigKey: null,
29+
createGuardian: expect.any(Function),
30+
registerCleanup: expect.any(Function),
31+
});
32+
expect(result).toEqual({
33+
refreshGuardian: { id: 1 },
34+
refreshGuardianConfigKey: "1000:100",
35+
});
36+
});
37+
});

0 commit comments

Comments
 (0)