mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-23 19:44:30 -07:00
feat(ide): add auth token support to IdeClient (#8490)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
This commit is contained in:
@@ -656,4 +656,34 @@ describe('IdeClient', () => {
|
|||||||
expect(ideClient.isDiffingEnabled()).toBe(true);
|
expect(ideClient.isDiffingEnabled()).toBe(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('authentication', () => {
|
||||||
|
it('should connect with an auth token if provided in the discovery file', async () => {
|
||||||
|
const authToken = 'test-auth-token';
|
||||||
|
const config = { port: '8080', authToken };
|
||||||
|
vi.mocked(fs.promises.readFile).mockResolvedValue(JSON.stringify(config));
|
||||||
|
(
|
||||||
|
vi.mocked(fs.promises.readdir) as Mock<
|
||||||
|
(path: fs.PathLike) => Promise<string[]>
|
||||||
|
>
|
||||||
|
).mockResolvedValue([]);
|
||||||
|
|
||||||
|
const ideClient = await IdeClient.getInstance();
|
||||||
|
await ideClient.connect();
|
||||||
|
|
||||||
|
expect(StreamableHTTPClientTransport).toHaveBeenCalledWith(
|
||||||
|
new URL('http://localhost:8080/mcp'),
|
||||||
|
expect.objectContaining({
|
||||||
|
requestInit: {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${authToken}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
expect(ideClient.getConnectionStatus().status).toBe(
|
||||||
|
IDEConnectionStatus.Connected,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ type StdioConfig = {
|
|||||||
type ConnectionConfig = {
|
type ConnectionConfig = {
|
||||||
port?: string;
|
port?: string;
|
||||||
stdio?: StdioConfig;
|
stdio?: StdioConfig;
|
||||||
|
authToken?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
function getRealPath(path: string): string {
|
function getRealPath(path: string): string {
|
||||||
@@ -86,6 +87,7 @@ export class IdeClient {
|
|||||||
private currentIde: DetectedIde | undefined;
|
private currentIde: DetectedIde | undefined;
|
||||||
private currentIdeDisplayName: string | undefined;
|
private currentIdeDisplayName: string | undefined;
|
||||||
private ideProcessInfo: { pid: number; command: string } | undefined;
|
private ideProcessInfo: { pid: number; command: string } | undefined;
|
||||||
|
private authToken: string | undefined;
|
||||||
private diffResponses = new Map<string, (result: DiffUpdateResult) => void>();
|
private diffResponses = new Map<string, (result: DiffUpdateResult) => void>();
|
||||||
private statusListeners = new Set<(state: IDEConnectionState) => void>();
|
private statusListeners = new Set<(state: IDEConnectionState) => void>();
|
||||||
private trustChangeListeners = new Set<(isTrusted: boolean) => void>();
|
private trustChangeListeners = new Set<(isTrusted: boolean) => void>();
|
||||||
@@ -145,6 +147,9 @@ export class IdeClient {
|
|||||||
this.setState(IDEConnectionStatus.Connecting);
|
this.setState(IDEConnectionStatus.Connecting);
|
||||||
|
|
||||||
const configFromFile = await this.getConnectionConfigFromFile();
|
const configFromFile = await this.getConnectionConfigFromFile();
|
||||||
|
if (configFromFile?.authToken) {
|
||||||
|
this.authToken = configFromFile.authToken;
|
||||||
|
}
|
||||||
const workspacePath =
|
const workspacePath =
|
||||||
configFromFile?.workspacePath ??
|
configFromFile?.workspacePath ??
|
||||||
process.env['GEMINI_CLI_IDE_WORKSPACE_PATH'];
|
process.env['GEMINI_CLI_IDE_WORKSPACE_PATH'];
|
||||||
@@ -772,6 +777,11 @@ export class IdeClient {
|
|||||||
new URL(`http://${getIdeServerHost()}:${port}/mcp`),
|
new URL(`http://${getIdeServerHost()}:${port}/mcp`),
|
||||||
{
|
{
|
||||||
fetch: this.createProxyAwareFetch(),
|
fetch: this.createProxyAwareFetch(),
|
||||||
|
requestInit: {
|
||||||
|
headers: this.authToken
|
||||||
|
? { Authorization: `Bearer ${this.authToken}` }
|
||||||
|
: {},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
await this.client.connect(transport);
|
await this.client.connect(transport);
|
||||||
|
|||||||
Reference in New Issue
Block a user