@@ -630,14 +630,15 @@ describe("loginGeminiCliOAuth", () => {
|
630 | 630 | |
631 | 631 | function installGeminiOAuthFetchMock( |
632 | 632 | handleRequest: (request: RecordedFetchRequest) => Response | undefined, |
| 633 | +options: { tokenResponse?: () => Response } = {}, |
633 | 634 | ) { |
634 | 635 | const requests: RecordedFetchRequest[] = []; |
635 | 636 | const fetchMock = vi.fn(async (input: string | URL | Request, init?: RequestInit) => { |
636 | 637 | const request = { url: getRequestUrl(input), init }; |
637 | 638 | requests.push(request); |
638 | 639 | |
639 | 640 | if (request.url === TOKEN_URL) { |
640 | | -return tokenResponse(); |
| 641 | +return (options.tokenResponse ?? tokenResponse)(); |
641 | 642 | } |
642 | 643 | if (request.url === USERINFO_URL) { |
643 | 644 | return userInfoResponse(); |
@@ -919,4 +920,34 @@ describe("loginGeminiCliOAuth", () => {
|
919 | 920 | }); |
920 | 921 | expect(requests.map(({ url }) => url)).toEqual([TOKEN_URL, USERINFO_URL]); |
921 | 922 | }); |
| 923 | + |
| 924 | +it("keeps malformed token expiry values out of refreshed Gemini CLI credentials", async () => { |
| 925 | +mockSettingsExistsSync.mockReturnValue(true); |
| 926 | +mockSettingsReadFileSync.mockReturnValue( |
| 927 | +JSON.stringify({ |
| 928 | +security: { |
| 929 | +auth: { |
| 930 | +selectedType: "oauth-personal", |
| 931 | +}, |
| 932 | +}, |
| 933 | +}), |
| 934 | +); |
| 935 | + |
| 936 | +const beforeRefresh = Date.now(); |
| 937 | +installGeminiOAuthFetchMock(() => undefined, { |
| 938 | +tokenResponse: () => |
| 939 | +responseJson({ |
| 940 | +access_token: "access-token", |
| 941 | +expires_in: Number.NaN, |
| 942 | +}), |
| 943 | +}); |
| 944 | +const { refreshTokensForGeminiCli } = await import("./oauth.token.js"); |
| 945 | +const result = await refreshTokensForGeminiCli({ |
| 946 | +refresh: "refresh-token", |
| 947 | +email: "lobster@openclaw.ai", |
| 948 | +}); |
| 949 | + |
| 950 | +expect(Number.isFinite(result.expires)).toBe(true); |
| 951 | +expect(result.expires).toBeLessThanOrEqual(beforeRefresh); |
| 952 | +}); |
922 | 953 | }); |