


















@@ -17,6 +17,14 @@ function createJsonResponse(body: unknown, init?: { status?: number }) {
1717});
1818}
191920+function fetchCall(fetchMock: ReturnType<typeof vi.fn<typeof fetch>>, index: number) {
21+const call = fetchMock.mock.calls[index];
22+if (!call) {
23+throw new Error(`expected fetch call ${index}`);
24+}
25+return call;
26+}
27+2028describe("loginOpenAICodexDeviceCode", () => {
2129it("requests a device code, polls for authorization, and exchanges OAuth tokens", async () => {
2230vi.useFakeTimers();
@@ -74,30 +82,30 @@ describe("loginOpenAICodexDeviceCode", () => {
7482await vi.advanceTimersByTimeAsync(1);
7583const credentials = await credentialsPromise;
768477-const userCodeRequest = fetchMock.mock.calls.at(0);
78-expect(userCodeRequest?.[0]).toBe("https://auth.openai.com/api/accounts/deviceauth/usercode");
79-expect(userCodeRequest?.[1]?.method).toBe("POST");
80-expect(userCodeRequest?.[1]?.headers).toEqual({
85+const userCodeRequest = fetchCall(fetchMock, 0);
86+expect(userCodeRequest[0]).toBe("https://auth.openai.com/api/accounts/deviceauth/usercode");
87+expect(userCodeRequest[1]?.method).toBe("POST");
88+expect(userCodeRequest[1]?.headers).toEqual({
8189"Content-Type": "application/json",
8290originator: "openclaw",
8391version: "2026.3.22",
8492"User-Agent": "openclaw/2026.3.22",
8593});
869487-const deviceTokenRequest = fetchMock.mock.calls.at(1);
88-expect(deviceTokenRequest?.[0]).toBe("https://auth.openai.com/api/accounts/deviceauth/token");
89-expect(deviceTokenRequest?.[1]?.method).toBe("POST");
90-expect(deviceTokenRequest?.[1]?.headers).toEqual({
95+const deviceTokenRequest = fetchCall(fetchMock, 1);
96+expect(deviceTokenRequest[0]).toBe("https://auth.openai.com/api/accounts/deviceauth/token");
97+expect(deviceTokenRequest[1]?.method).toBe("POST");
98+expect(deviceTokenRequest[1]?.headers).toEqual({
9199"Content-Type": "application/json",
92100originator: "openclaw",
93101version: "2026.3.22",
94102"User-Agent": "openclaw/2026.3.22",
95103});
9610497-const oauthTokenRequest = fetchMock.mock.calls.at(3);
98-expect(oauthTokenRequest?.[0]).toBe("https://auth.openai.com/oauth/token");
99-expect(oauthTokenRequest?.[1]?.method).toBe("POST");
100-expect(oauthTokenRequest?.[1]?.headers).toEqual({
105+const oauthTokenRequest = fetchCall(fetchMock, 3);
106+expect(oauthTokenRequest[0]).toBe("https://auth.openai.com/oauth/token");
107+expect(oauthTokenRequest[1]?.method).toBe("POST");
108+expect(oauthTokenRequest[1]?.headers).toEqual({
101109"Content-Type": "application/x-www-form-urlencoded",
102110originator: "openclaw",
103111version: "2026.3.22",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。