Skip to content

Commit a967592

Browse files
committed
Also refresh token before completePrompt()
1 parent 0093db7 commit a967592

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

src/api/providers/__tests__/roo.spec.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,21 @@ describe("RooHandler", () => {
182182
handler = new RooHandler(mockOptions)
183183
})
184184

185+
it("should update API key before making request", async () => {
186+
// Set up a fresh token that will be returned when createMessage is called
187+
const freshToken = "fresh-session-token"
188+
mockGetSessionTokenFn.mockReturnValue(freshToken)
189+
190+
const stream = handler.createMessage(systemPrompt, messages)
191+
// Consume the stream to trigger the API call
192+
for await (const _chunk of stream) {
193+
// Just consume
194+
}
195+
196+
// Verify getSessionToken was called to get the fresh token
197+
expect(mockGetSessionTokenFn).toHaveBeenCalled()
198+
})
199+
185200
it("should handle streaming responses", async () => {
186201
const stream = handler.createMessage(systemPrompt, messages)
187202
const chunks: any[] = []
@@ -290,6 +305,25 @@ describe("RooHandler", () => {
290305
})
291306
})
292307

308+
it("should update API key before making request", async () => {
309+
// Set up a fresh token that will be returned when completePrompt is called
310+
const freshToken = "fresh-session-token"
311+
mockGetSessionTokenFn.mockReturnValue(freshToken)
312+
313+
// Access the client's apiKey property to verify it gets updated
314+
const clientApiKeyGetter = vitest.fn()
315+
Object.defineProperty(handler["client"], "apiKey", {
316+
get: clientApiKeyGetter,
317+
set: vitest.fn(),
318+
configurable: true,
319+
})
320+
321+
await handler.completePrompt("Test prompt")
322+
323+
// Verify getSessionToken was called to get the fresh token
324+
expect(mockGetSessionTokenFn).toHaveBeenCalled()
325+
})
326+
293327
it("should handle API errors", async () => {
294328
mockCreate.mockRejectedValueOnce(new Error("API Error"))
295329
await expect(handler.completePrompt("Test prompt")).rejects.toThrow(

src/api/providers/roo.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,7 @@ export class RooHandler extends BaseOpenAiCompatibleProvider<string> {
3636
private fetcherBaseURL: string
3737

3838
constructor(options: ApiHandlerOptions) {
39-
let sessionToken: string | undefined = undefined
40-
41-
if (CloudService.hasInstance()) {
42-
sessionToken = CloudService.instance.authService?.getSessionToken()
43-
}
39+
const sessionToken = getSessionToken()
4440

4541
let baseURL = process.env.ROO_CODE_PROVIDER_URL ?? "https://api.roocode.com/proxy"
4642

@@ -55,7 +51,7 @@ export class RooHandler extends BaseOpenAiCompatibleProvider<string> {
5551
...options,
5652
providerName: "Roo Code Cloud",
5753
baseURL, // Already has /v1 suffix
58-
apiKey: getSessionToken(),
54+
apiKey: sessionToken,
5955
defaultProviderModelId: rooDefaultModelId,
6056
providerModels: {},
6157
defaultTemperature: 0.7,
@@ -176,6 +172,11 @@ export class RooHandler extends BaseOpenAiCompatibleProvider<string> {
176172
}
177173
}
178174
}
175+
override async completePrompt(prompt: string): Promise<string> {
176+
// Update API key before making request to ensure we use the latest session token
177+
this.client.apiKey = getSessionToken()
178+
return super.completePrompt(prompt)
179+
}
179180

180181
private async loadDynamicModels(baseURL: string, apiKey?: string): Promise<void> {
181182
try {

0 commit comments

Comments
 (0)