@google/gemini-cli-core 0.1.10 → 0.1.11-nightly.250713.4442e893
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/google-gemini-cli-core-0.1.11.tgz +0 -0
- package/dist/src/code_assist/codeAssist.d.ts +2 -1
- package/dist/src/code_assist/codeAssist.js +2 -2
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/oauth2.d.ts +2 -8
- package/dist/src/code_assist/oauth2.js +92 -73
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +75 -33
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +4 -0
- package/dist/src/code_assist/server.js +33 -0
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/config/config.d.ts +8 -0
- package/dist/src/config/config.js +17 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +23 -23
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/core/client.d.ts +3 -1
- package/dist/src/core/client.js +13 -3
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +90 -12
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +4 -1
- package/dist/src/core/contentGenerator.js +2 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +3 -2
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +24 -3
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/geminiChat.js +2 -2
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +8 -2
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/prompts.js +9 -8
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/turn.d.ts +6 -2
- package/dist/src/core/turn.js +1 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +50 -28
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +3 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +4 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +1 -0
- package/dist/src/telemetry/constants.js +1 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +2 -2
- package/dist/src/telemetry/index.js +2 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +18 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +27 -7
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +13 -4
- package/dist/src/telemetry/types.js +19 -3
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/grep.test.js +1 -1
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/mcp-client.js +8 -11
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +46 -1
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/read-file.js +1 -2
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-many-files.js +1 -1
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +21 -10
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/shell.js +3 -1
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/tool-registry.js +3 -1
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +19 -1
- package/dist/src/tools/tools.js +8 -1
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/utils/paths.d.ts +1 -0
- package/dist/src/utils/paths.js +1 -0
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/summarizer.d.ts +25 -0
- package/dist/src/utils/summarizer.js +79 -0
- package/dist/src/utils/summarizer.js.map +1 -0
- package/dist/src/utils/summarizer.test.d.ts +6 -0
- package/dist/src/utils/summarizer.test.js +131 -0
- package/dist/src/utils/summarizer.test.js.map +1 -0
- package/dist/src/utils/user_account.d.ts +9 -0
- package/dist/src/utils/user_account.js +99 -0
- package/dist/src/utils/user_account.js.map +1 -0
- package/dist/src/utils/user_account.test.d.ts +6 -0
- package/dist/src/utils/user_account.test.js +153 -0
- package/dist/src/utils/user_account.test.js.map +1 -0
- package/dist/src/utils/user_id.d.ts +0 -6
- package/dist/src/utils/user_id.js +0 -21
- package/dist/src/utils/user_id.js.map +1 -1
- package/dist/src/utils/user_id.test.js +1 -22
- package/dist/src/utils/user_id.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/google-gemini-cli-core-0.1.9.tgz +0 -0
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ The Gemini API provides a free tier with [100 requests per day](https://ai.googl
|
|
|
53
53
|
|
|
54
54
|
### Use a Vertex AI API key:
|
|
55
55
|
|
|
56
|
-
The Vertex AI provides [free tier](https://cloud.google.com/vertex-ai/generative-ai/docs/start/express-mode/overview) using express mode for Gemini 2.5 Pro, control over which model you use, and access to higher rate limits with a billing account:
|
|
56
|
+
The Vertex AI API provides a [free tier](https://cloud.google.com/vertex-ai/generative-ai/docs/start/express-mode/overview) using express mode for Gemini 2.5 Pro, control over which model you use, and access to higher rate limits with a billing account:
|
|
57
57
|
|
|
58
58
|
1. Generate a key from [Google Cloud](https://cloud.google.com/vertex-ai/generative-ai/docs/start/api-keys).
|
|
59
59
|
2. Set it as an environment variable in your terminal. Replace `YOUR_API_KEY` with your generated key and set GOOGLE_GENAI_USE_VERTEXAI to true
|
|
Binary file
|
|
@@ -5,4 +5,5 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { AuthType, ContentGenerator } from '../core/contentGenerator.js';
|
|
7
7
|
import { HttpOptions } from './server.js';
|
|
8
|
-
|
|
8
|
+
import { Config } from '../config/config.js';
|
|
9
|
+
export declare function createCodeAssistContentGenerator(httpOptions: HttpOptions, authType: AuthType, config: Config, sessionId?: string): Promise<ContentGenerator>;
|
|
@@ -7,10 +7,10 @@ import { AuthType } from '../core/contentGenerator.js';
|
|
|
7
7
|
import { getOauthClient } from './oauth2.js';
|
|
8
8
|
import { setupUser } from './setup.js';
|
|
9
9
|
import { CodeAssistServer } from './server.js';
|
|
10
|
-
export async function createCodeAssistContentGenerator(httpOptions, authType, sessionId) {
|
|
10
|
+
export async function createCodeAssistContentGenerator(httpOptions, authType, config, sessionId) {
|
|
11
11
|
if (authType === AuthType.LOGIN_WITH_GOOGLE ||
|
|
12
12
|
authType === AuthType.CLOUD_SHELL) {
|
|
13
|
-
const authClient = await getOauthClient(authType);
|
|
13
|
+
const authClient = await getOauthClient(authType, config);
|
|
14
14
|
const projectId = await setupUser(authClient);
|
|
15
15
|
return new CodeAssistServer(authClient, projectId, httpOptions, sessionId);
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeAssist.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAoB,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAe,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"codeAssist.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAoB,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAe,MAAM,aAAa,CAAC;AAG5D,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAwB,EACxB,QAAkB,EAClB,MAAc,EACd,SAAkB;IAElB,IACE,QAAQ,KAAK,QAAQ,CAAC,iBAAiB;QACvC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EACjC,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9C,OAAO,IAAI,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { OAuth2Client } from 'google-auth-library';
|
|
7
|
+
import { Config } from '../config/config.js';
|
|
7
8
|
import { AuthType } from '../core/contentGenerator.js';
|
|
8
9
|
/**
|
|
9
10
|
* An Authentication URL for updating the credentials of a Oauth2Client
|
|
@@ -14,13 +15,6 @@ export interface OauthWebLogin {
|
|
|
14
15
|
authUrl: string;
|
|
15
16
|
loginCompletePromise: Promise<void>;
|
|
16
17
|
}
|
|
17
|
-
export declare function getOauthClient(authType: AuthType): Promise<OAuth2Client>;
|
|
18
|
+
export declare function getOauthClient(authType: AuthType, config: Config): Promise<OAuth2Client>;
|
|
18
19
|
export declare function getAvailablePort(): Promise<number>;
|
|
19
|
-
export declare function getCachedGoogleAccountId(): string | null;
|
|
20
20
|
export declare function clearCachedCredentialFile(): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Retrieves the authenticated user's Google Account ID from Google's UserInfo API.
|
|
23
|
-
* @param client - The authenticated OAuth2Client
|
|
24
|
-
* @returns The user's Google Account ID or null if not available
|
|
25
|
-
*/
|
|
26
|
-
export declare function getRawGoogleAccountId(client: OAuth2Client): Promise<string | null>;
|
|
@@ -3,17 +3,19 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { OAuth2Client, Compute } from 'google-auth-library';
|
|
6
|
+
import { OAuth2Client, Compute, CodeChallengeMethod, } from 'google-auth-library';
|
|
7
7
|
import * as http from 'http';
|
|
8
8
|
import url from 'url';
|
|
9
9
|
import crypto from 'crypto';
|
|
10
10
|
import * as net from 'net';
|
|
11
11
|
import open from 'open';
|
|
12
12
|
import path from 'node:path';
|
|
13
|
-
import { promises as fs
|
|
13
|
+
import { promises as fs } from 'node:fs';
|
|
14
14
|
import * as os from 'os';
|
|
15
15
|
import { getErrorMessage } from '../utils/errors.js';
|
|
16
|
+
import { cacheGoogleAccount, getCachedGoogleAccount, clearCachedGoogleAccount, } from '../utils/user_account.js';
|
|
16
17
|
import { AuthType } from '../core/contentGenerator.js';
|
|
18
|
+
import readline from 'node:readline';
|
|
17
19
|
// OAuth Client ID used to initiate OAuth2Client class.
|
|
18
20
|
const OAUTH_CLIENT_ID = '681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';
|
|
19
21
|
// OAuth Secret value used to initiate OAuth2Client class.
|
|
@@ -34,8 +36,7 @@ const SIGN_IN_SUCCESS_URL = 'https://developers.google.com/gemini-code-assist/au
|
|
|
34
36
|
const SIGN_IN_FAILURE_URL = 'https://developers.google.com/gemini-code-assist/auth_failure_gemini';
|
|
35
37
|
const GEMINI_DIR = '.gemini';
|
|
36
38
|
const CREDENTIAL_FILENAME = 'oauth_creds.json';
|
|
37
|
-
|
|
38
|
-
export async function getOauthClient(authType) {
|
|
39
|
+
export async function getOauthClient(authType, config) {
|
|
39
40
|
const client = new OAuth2Client({
|
|
40
41
|
clientId: OAUTH_CLIENT_ID,
|
|
41
42
|
clientSecret: OAUTH_CLIENT_SECRET,
|
|
@@ -46,13 +47,10 @@ export async function getOauthClient(authType) {
|
|
|
46
47
|
// If there are cached creds on disk, they always take precedence
|
|
47
48
|
if (await loadCachedCredentials(client)) {
|
|
48
49
|
// Found valid cached credentials.
|
|
49
|
-
// Check if we need to retrieve Google Account ID
|
|
50
|
-
if (!
|
|
50
|
+
// Check if we need to retrieve Google Account ID or Email
|
|
51
|
+
if (!getCachedGoogleAccount()) {
|
|
51
52
|
try {
|
|
52
|
-
|
|
53
|
-
if (googleAccountId) {
|
|
54
|
-
await cacheGoogleAccountId(googleAccountId);
|
|
55
|
-
}
|
|
53
|
+
await fetchAndCacheUserInfo(client);
|
|
56
54
|
}
|
|
57
55
|
catch {
|
|
58
56
|
// Non-fatal, continue with existing auth.
|
|
@@ -80,16 +78,74 @@ export async function getOauthClient(authType) {
|
|
|
80
78
|
throw new Error(`Could not authenticate using Cloud Shell credentials. Please select a different authentication method or ensure you are in a properly configured environment. Error: ${getErrorMessage(e)}`);
|
|
81
79
|
}
|
|
82
80
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
if (config.getNoBrowser()) {
|
|
82
|
+
let success = false;
|
|
83
|
+
const maxRetries = 2;
|
|
84
|
+
for (let i = 0; !success && i < maxRetries; i++) {
|
|
85
|
+
success = await authWithUserCode(client);
|
|
86
|
+
if (!success) {
|
|
87
|
+
console.error('\nFailed to authenticate with user code.', i === maxRetries - 1 ? '' : 'Retrying...\n');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (!success) {
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const webLogin = await authWithWeb(client);
|
|
96
|
+
// This does basically nothing, as it isn't show to the user.
|
|
97
|
+
console.log(`\n\nCode Assist login required.\n` +
|
|
98
|
+
`Attempting to open authentication page in your browser.\n` +
|
|
99
|
+
`Otherwise navigate to:\n\n${webLogin.authUrl}\n\n`);
|
|
100
|
+
await open(webLogin.authUrl);
|
|
101
|
+
console.log('Waiting for authentication...');
|
|
102
|
+
await webLogin.loginCompletePromise;
|
|
103
|
+
}
|
|
91
104
|
return client;
|
|
92
105
|
}
|
|
106
|
+
async function authWithUserCode(client) {
|
|
107
|
+
const redirectUri = 'https://sdk.cloud.google.com/authcode_cloudcode.html';
|
|
108
|
+
const codeVerifier = await client.generateCodeVerifierAsync();
|
|
109
|
+
const state = crypto.randomBytes(32).toString('hex');
|
|
110
|
+
const authUrl = client.generateAuthUrl({
|
|
111
|
+
redirect_uri: redirectUri,
|
|
112
|
+
access_type: 'offline',
|
|
113
|
+
scope: OAUTH_SCOPE,
|
|
114
|
+
code_challenge_method: CodeChallengeMethod.S256,
|
|
115
|
+
code_challenge: codeVerifier.codeChallenge,
|
|
116
|
+
state,
|
|
117
|
+
});
|
|
118
|
+
console.log('Please visit the following URL to authorize the application:');
|
|
119
|
+
console.log('');
|
|
120
|
+
console.log(authUrl);
|
|
121
|
+
console.log('');
|
|
122
|
+
const code = await new Promise((resolve) => {
|
|
123
|
+
const rl = readline.createInterface({
|
|
124
|
+
input: process.stdin,
|
|
125
|
+
output: process.stdout,
|
|
126
|
+
});
|
|
127
|
+
rl.question('Enter the authorization code: ', (code) => {
|
|
128
|
+
rl.close();
|
|
129
|
+
resolve(code.trim());
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
if (!code) {
|
|
133
|
+
console.error('Authorization code is required.');
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const { tokens } = await client.getToken({
|
|
138
|
+
code,
|
|
139
|
+
codeVerifier: codeVerifier.codeVerifier,
|
|
140
|
+
redirect_uri: redirectUri,
|
|
141
|
+
});
|
|
142
|
+
client.setCredentials(tokens);
|
|
143
|
+
}
|
|
144
|
+
catch (_error) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
93
149
|
async function authWithWeb(client) {
|
|
94
150
|
const port = await getAvailablePort();
|
|
95
151
|
const redirectUri = `http://localhost:${port}/oauth2callback`;
|
|
@@ -127,10 +183,7 @@ async function authWithWeb(client) {
|
|
|
127
183
|
client.setCredentials(tokens);
|
|
128
184
|
// Retrieve and cache Google Account ID during authentication
|
|
129
185
|
try {
|
|
130
|
-
|
|
131
|
-
if (googleAccountId) {
|
|
132
|
-
await cacheGoogleAccountId(googleAccountId);
|
|
133
|
-
}
|
|
186
|
+
await fetchAndCacheUserInfo(client);
|
|
134
187
|
}
|
|
135
188
|
catch (error) {
|
|
136
189
|
console.error('Failed to retrieve Google Account ID during authentication:', error);
|
|
@@ -206,72 +259,38 @@ async function cacheCredentials(credentials) {
|
|
|
206
259
|
function getCachedCredentialPath() {
|
|
207
260
|
return path.join(os.homedir(), GEMINI_DIR, CREDENTIAL_FILENAME);
|
|
208
261
|
}
|
|
209
|
-
function getGoogleAccountIdCachePath() {
|
|
210
|
-
return path.join(os.homedir(), GEMINI_DIR, GOOGLE_ACCOUNT_ID_FILENAME);
|
|
211
|
-
}
|
|
212
|
-
async function cacheGoogleAccountId(googleAccountId) {
|
|
213
|
-
const filePath = getGoogleAccountIdCachePath();
|
|
214
|
-
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
215
|
-
await fs.writeFile(filePath, googleAccountId, 'utf-8');
|
|
216
|
-
}
|
|
217
|
-
export function getCachedGoogleAccountId() {
|
|
218
|
-
try {
|
|
219
|
-
const filePath = getGoogleAccountIdCachePath();
|
|
220
|
-
if (existsSync(filePath)) {
|
|
221
|
-
return readFileSync(filePath, 'utf-8').trim() || null;
|
|
222
|
-
}
|
|
223
|
-
return null;
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
console.debug('Error reading cached Google Account ID:', error);
|
|
227
|
-
return null;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
262
|
export async function clearCachedCredentialFile() {
|
|
231
263
|
try {
|
|
232
264
|
await fs.rm(getCachedCredentialPath(), { force: true });
|
|
233
265
|
// Clear the Google Account ID cache when credentials are cleared
|
|
234
|
-
await
|
|
266
|
+
await clearCachedGoogleAccount();
|
|
235
267
|
}
|
|
236
268
|
catch (_) {
|
|
237
269
|
/* empty */
|
|
238
270
|
}
|
|
239
271
|
}
|
|
240
|
-
|
|
241
|
-
* Retrieves the authenticated user's Google Account ID from Google's UserInfo API.
|
|
242
|
-
* @param client - The authenticated OAuth2Client
|
|
243
|
-
* @returns The user's Google Account ID or null if not available
|
|
244
|
-
*/
|
|
245
|
-
export async function getRawGoogleAccountId(client) {
|
|
272
|
+
async function fetchAndCacheUserInfo(client) {
|
|
246
273
|
try {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
if (err) {
|
|
251
|
-
return reject(err);
|
|
252
|
-
}
|
|
253
|
-
resolve(tokens ?? null);
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
if (!refreshedTokens?.id_token) {
|
|
257
|
-
console.warn('No id_token obtained after refreshing tokens.');
|
|
258
|
-
return null;
|
|
274
|
+
const { token } = await client.getAccessToken();
|
|
275
|
+
if (!token) {
|
|
276
|
+
return;
|
|
259
277
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
278
|
+
const response = await fetch('https://www.googleapis.com/oauth2/v2/userinfo', {
|
|
279
|
+
headers: {
|
|
280
|
+
Authorization: `Bearer ${token}`,
|
|
281
|
+
},
|
|
264
282
|
});
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
283
|
+
if (!response.ok) {
|
|
284
|
+
console.error('Failed to fetch user info:', response.status, response.statusText);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
const userInfo = await response.json();
|
|
288
|
+
if (userInfo.email) {
|
|
289
|
+
await cacheGoogleAccount(userInfo.email);
|
|
269
290
|
}
|
|
270
|
-
return payload.sub;
|
|
271
291
|
}
|
|
272
292
|
catch (error) {
|
|
273
|
-
console.error('Error retrieving
|
|
274
|
-
return null;
|
|
293
|
+
console.error('Error retrieving user info:', error);
|
|
275
294
|
}
|
|
276
295
|
}
|
|
277
296
|
//# sourceMappingURL=oauth2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"oauth2.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
-
import { getOauthClient
|
|
7
|
+
import { getOauthClient } from './oauth2.js';
|
|
8
|
+
import { getCachedGoogleAccount } from '../utils/user_account.js';
|
|
8
9
|
import { OAuth2Client, Compute } from 'google-auth-library';
|
|
9
10
|
import * as fs from 'fs';
|
|
10
11
|
import * as path from 'path';
|
|
@@ -13,6 +14,7 @@ import open from 'open';
|
|
|
13
14
|
import crypto from 'crypto';
|
|
14
15
|
import * as os from 'os';
|
|
15
16
|
import { AuthType } from '../core/contentGenerator.js';
|
|
17
|
+
import readline from 'node:readline';
|
|
16
18
|
vi.mock('os', async (importOriginal) => {
|
|
17
19
|
const os = await importOriginal();
|
|
18
20
|
return {
|
|
@@ -24,6 +26,10 @@ vi.mock('google-auth-library');
|
|
|
24
26
|
vi.mock('http');
|
|
25
27
|
vi.mock('open');
|
|
26
28
|
vi.mock('crypto');
|
|
29
|
+
vi.mock('node:readline');
|
|
30
|
+
const mockConfig = {
|
|
31
|
+
getNoBrowser: () => false,
|
|
32
|
+
};
|
|
27
33
|
// Mock fetch globally
|
|
28
34
|
global.fetch = vi.fn();
|
|
29
35
|
describe('oauth2', () => {
|
|
@@ -51,29 +57,11 @@ describe('oauth2', () => {
|
|
|
51
57
|
const mockGetAccessToken = vi
|
|
52
58
|
.fn()
|
|
53
59
|
.mockResolvedValue({ token: 'mock-access-token' });
|
|
54
|
-
const mockRefreshAccessToken = vi.fn().mockImplementation((callback) => {
|
|
55
|
-
// Mock the callback-style refreshAccessToken method
|
|
56
|
-
const mockTokensWithIdToken = {
|
|
57
|
-
access_token: 'test-access-token',
|
|
58
|
-
refresh_token: 'test-refresh-token',
|
|
59
|
-
id_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0LWdvb2dsZS1hY2NvdW50LWlkLTEyMyJ9.signature', // Mock JWT with sub: test-google-account-id-123
|
|
60
|
-
};
|
|
61
|
-
callback(null, mockTokensWithIdToken);
|
|
62
|
-
});
|
|
63
|
-
const mockVerifyIdToken = vi.fn().mockResolvedValue({
|
|
64
|
-
getPayload: () => ({
|
|
65
|
-
sub: 'test-google-account-id-123',
|
|
66
|
-
aud: 'test-audience',
|
|
67
|
-
iss: 'https://accounts.google.com',
|
|
68
|
-
}),
|
|
69
|
-
});
|
|
70
60
|
const mockOAuth2Client = {
|
|
71
61
|
generateAuthUrl: mockGenerateAuthUrl,
|
|
72
62
|
getToken: mockGetToken,
|
|
73
63
|
setCredentials: mockSetCredentials,
|
|
74
64
|
getAccessToken: mockGetAccessToken,
|
|
75
|
-
refreshAccessToken: mockRefreshAccessToken,
|
|
76
|
-
verifyIdToken: mockVerifyIdToken,
|
|
77
65
|
credentials: mockTokens,
|
|
78
66
|
on: vi.fn(),
|
|
79
67
|
};
|
|
@@ -83,7 +71,9 @@ describe('oauth2', () => {
|
|
|
83
71
|
// Mock the UserInfo API response
|
|
84
72
|
global.fetch.mockResolvedValue({
|
|
85
73
|
ok: true,
|
|
86
|
-
json: vi
|
|
74
|
+
json: vi
|
|
75
|
+
.fn()
|
|
76
|
+
.mockResolvedValue({ email: 'test-google-account@gmail.com' }),
|
|
87
77
|
});
|
|
88
78
|
let requestCallback;
|
|
89
79
|
let serverListeningCallback;
|
|
@@ -109,7 +99,7 @@ describe('oauth2', () => {
|
|
|
109
99
|
requestCallback = cb;
|
|
110
100
|
return mockHttpServer;
|
|
111
101
|
});
|
|
112
|
-
const clientPromise = getOauthClient(AuthType.LOGIN_WITH_GOOGLE);
|
|
102
|
+
const clientPromise = getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
|
|
113
103
|
// wait for server to start listening.
|
|
114
104
|
await serverListeningPromise;
|
|
115
105
|
const mockReq = {
|
|
@@ -128,13 +118,65 @@ describe('oauth2', () => {
|
|
|
128
118
|
redirect_uri: `http://localhost:${capturedPort}/oauth2callback`,
|
|
129
119
|
});
|
|
130
120
|
expect(mockSetCredentials).toHaveBeenCalledWith(mockTokens);
|
|
131
|
-
// Verify Google Account
|
|
132
|
-
const
|
|
133
|
-
expect(fs.existsSync(
|
|
134
|
-
const
|
|
135
|
-
expect(
|
|
136
|
-
|
|
137
|
-
|
|
121
|
+
// Verify Google Account was cached
|
|
122
|
+
const googleAccountPath = path.join(tempHomeDir, '.gemini', 'google_accounts.json');
|
|
123
|
+
expect(fs.existsSync(googleAccountPath)).toBe(true);
|
|
124
|
+
const cachedGoogleAccount = fs.readFileSync(googleAccountPath, 'utf-8');
|
|
125
|
+
expect(JSON.parse(cachedGoogleAccount)).toEqual({
|
|
126
|
+
active: 'test-google-account@gmail.com',
|
|
127
|
+
old: [],
|
|
128
|
+
});
|
|
129
|
+
// Verify the getCachedGoogleAccount function works
|
|
130
|
+
expect(getCachedGoogleAccount()).toBe('test-google-account@gmail.com');
|
|
131
|
+
});
|
|
132
|
+
it('should perform login with user code', async () => {
|
|
133
|
+
const mockConfigWithNoBrowser = {
|
|
134
|
+
getNoBrowser: () => true,
|
|
135
|
+
};
|
|
136
|
+
const mockCodeVerifier = {
|
|
137
|
+
codeChallenge: 'test-challenge',
|
|
138
|
+
codeVerifier: 'test-verifier',
|
|
139
|
+
};
|
|
140
|
+
const mockAuthUrl = 'https://example.com/auth-user-code';
|
|
141
|
+
const mockCode = 'test-user-code';
|
|
142
|
+
const mockTokens = {
|
|
143
|
+
access_token: 'test-access-token-user-code',
|
|
144
|
+
refresh_token: 'test-refresh-token-user-code',
|
|
145
|
+
};
|
|
146
|
+
const mockGenerateAuthUrl = vi.fn().mockReturnValue(mockAuthUrl);
|
|
147
|
+
const mockGetToken = vi.fn().mockResolvedValue({ tokens: mockTokens });
|
|
148
|
+
const mockSetCredentials = vi.fn();
|
|
149
|
+
const mockGenerateCodeVerifierAsync = vi
|
|
150
|
+
.fn()
|
|
151
|
+
.mockResolvedValue(mockCodeVerifier);
|
|
152
|
+
const mockOAuth2Client = {
|
|
153
|
+
generateAuthUrl: mockGenerateAuthUrl,
|
|
154
|
+
getToken: mockGetToken,
|
|
155
|
+
setCredentials: mockSetCredentials,
|
|
156
|
+
generateCodeVerifierAsync: mockGenerateCodeVerifierAsync,
|
|
157
|
+
on: vi.fn(),
|
|
158
|
+
};
|
|
159
|
+
OAuth2Client.mockImplementation(() => mockOAuth2Client);
|
|
160
|
+
const mockReadline = {
|
|
161
|
+
question: vi.fn((_query, callback) => callback(mockCode)),
|
|
162
|
+
close: vi.fn(),
|
|
163
|
+
};
|
|
164
|
+
readline.createInterface.mockReturnValue(mockReadline);
|
|
165
|
+
const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
166
|
+
const client = await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfigWithNoBrowser);
|
|
167
|
+
expect(client).toBe(mockOAuth2Client);
|
|
168
|
+
// Verify the auth flow
|
|
169
|
+
expect(mockGenerateCodeVerifierAsync).toHaveBeenCalled();
|
|
170
|
+
expect(mockGenerateAuthUrl).toHaveBeenCalled();
|
|
171
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining(mockAuthUrl));
|
|
172
|
+
expect(mockReadline.question).toHaveBeenCalledWith('Enter the authorization code: ', expect.any(Function));
|
|
173
|
+
expect(mockGetToken).toHaveBeenCalledWith({
|
|
174
|
+
code: mockCode,
|
|
175
|
+
codeVerifier: mockCodeVerifier.codeVerifier,
|
|
176
|
+
redirect_uri: 'https://sdk.cloud.google.com/authcode_cloudcode.html',
|
|
177
|
+
});
|
|
178
|
+
expect(mockSetCredentials).toHaveBeenCalledWith(mockTokens);
|
|
179
|
+
consoleLogSpy.mockRestore();
|
|
138
180
|
});
|
|
139
181
|
describe('in Cloud Shell', () => {
|
|
140
182
|
const mockGetAccessToken = vi.fn();
|
|
@@ -162,7 +204,7 @@ describe('oauth2', () => {
|
|
|
162
204
|
};
|
|
163
205
|
// To mock the new OAuth2Client() inside the function
|
|
164
206
|
OAuth2Client.mockImplementation(() => mockClient);
|
|
165
|
-
await getOauthClient(AuthType.LOGIN_WITH_GOOGLE);
|
|
207
|
+
await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
|
|
166
208
|
expect(fs.promises.readFile).toHaveBeenCalledWith('/user/home/.gemini/oauth_creds.json', 'utf-8');
|
|
167
209
|
expect(mockClient.setCredentials).toHaveBeenCalledWith(cachedCreds);
|
|
168
210
|
expect(mockClient.getAccessToken).toHaveBeenCalled();
|
|
@@ -170,7 +212,7 @@ describe('oauth2', () => {
|
|
|
170
212
|
expect(Compute).not.toHaveBeenCalled(); // Should not fetch new client if cache is valid
|
|
171
213
|
});
|
|
172
214
|
it('should use Compute to get a client if no cached credentials exist', async () => {
|
|
173
|
-
await getOauthClient(AuthType.CLOUD_SHELL);
|
|
215
|
+
await getOauthClient(AuthType.CLOUD_SHELL, mockConfig);
|
|
174
216
|
expect(Compute).toHaveBeenCalledWith({});
|
|
175
217
|
expect(mockGetAccessToken).toHaveBeenCalled();
|
|
176
218
|
});
|
|
@@ -178,17 +220,17 @@ describe('oauth2', () => {
|
|
|
178
220
|
const newCredentials = { refresh_token: 'new-adc-token' };
|
|
179
221
|
mockComputeClient.credentials = newCredentials;
|
|
180
222
|
mockGetAccessToken.mockResolvedValue({ token: 'new-adc-token' });
|
|
181
|
-
await getOauthClient(AuthType.CLOUD_SHELL);
|
|
223
|
+
await getOauthClient(AuthType.CLOUD_SHELL, mockConfig);
|
|
182
224
|
expect(fs.promises.writeFile).not.toHaveBeenCalled();
|
|
183
225
|
});
|
|
184
226
|
it('should return the Compute client on successful ADC authentication', async () => {
|
|
185
|
-
const client = await getOauthClient(AuthType.CLOUD_SHELL);
|
|
227
|
+
const client = await getOauthClient(AuthType.CLOUD_SHELL, mockConfig);
|
|
186
228
|
expect(client).toBe(mockComputeClient);
|
|
187
229
|
});
|
|
188
230
|
it('should throw an error if ADC fails', async () => {
|
|
189
231
|
const testError = new Error('ADC Failed');
|
|
190
232
|
mockGetAccessToken.mockRejectedValue(testError);
|
|
191
|
-
await expect(getOauthClient(AuthType.CLOUD_SHELL)).rejects.toThrow('Could not authenticate using Cloud Shell credentials. Please select a different authentication method or ensure you are in a properly configured environment. Error: ADC Failed');
|
|
233
|
+
await expect(getOauthClient(AuthType.CLOUD_SHELL, mockConfig)).rejects.toThrow('Could not authenticate using Cloud Shell credentials. Please select a different authentication method or ensure you are in a properly configured environment. Error: ADC Failed');
|
|
192
234
|
});
|
|
193
235
|
});
|
|
194
236
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2.test.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAQ,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"oauth2.test.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import { OAuth2Client } from 'google-auth-library';
|
|
|
7
7
|
import { CodeAssistGlobalUserSettingResponse, LoadCodeAssistRequest, LoadCodeAssistResponse, LongrunningOperationResponse, OnboardUserRequest, SetCodeAssistGlobalUserSettingRequest } from './types.js';
|
|
8
8
|
import { CountTokensParameters, CountTokensResponse, EmbedContentParameters, EmbedContentResponse, GenerateContentParameters, GenerateContentResponse } from '@google/genai';
|
|
9
9
|
import { ContentGenerator } from '../core/contentGenerator.js';
|
|
10
|
+
import { UserTierId } from './types.js';
|
|
10
11
|
/** HTTP options to be used in each of the requests. */
|
|
11
12
|
export interface HttpOptions {
|
|
12
13
|
/** Additional HTTP headers to be sent with the request. */
|
|
@@ -19,6 +20,7 @@ export declare class CodeAssistServer implements ContentGenerator {
|
|
|
19
20
|
readonly projectId?: string | undefined;
|
|
20
21
|
readonly httpOptions: HttpOptions;
|
|
21
22
|
readonly sessionId?: string | undefined;
|
|
23
|
+
private userTier;
|
|
22
24
|
constructor(client: OAuth2Client, projectId?: string | undefined, httpOptions?: HttpOptions, sessionId?: string | undefined);
|
|
23
25
|
generateContentStream(req: GenerateContentParameters): Promise<AsyncGenerator<GenerateContentResponse>>;
|
|
24
26
|
generateContent(req: GenerateContentParameters): Promise<GenerateContentResponse>;
|
|
@@ -31,5 +33,7 @@ export declare class CodeAssistServer implements ContentGenerator {
|
|
|
31
33
|
requestPost<T>(method: string, req: object, signal?: AbortSignal): Promise<T>;
|
|
32
34
|
requestGet<T>(method: string, signal?: AbortSignal): Promise<T>;
|
|
33
35
|
requestStreamingPost<T>(method: string, req: object, signal?: AbortSignal): Promise<AsyncGenerator<T>>;
|
|
36
|
+
getTier(): Promise<UserTierId | undefined>;
|
|
37
|
+
private detectUserTier;
|
|
34
38
|
getMethodUrl(method: string): string;
|
|
35
39
|
}
|