opencode-gemini-cli-oauth 1.1.22 → 1.2.3

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.
Files changed (53) hide show
  1. package/dist/constants.d.ts +9 -20
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +19 -36
  4. package/dist/constants.js.map +1 -1
  5. package/dist/index.d.ts +4 -10
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +4 -14
  8. package/dist/index.js.map +1 -1
  9. package/dist/oauth.d.ts +27 -0
  10. package/dist/oauth.d.ts.map +1 -0
  11. package/dist/oauth.js +170 -0
  12. package/dist/oauth.js.map +1 -0
  13. package/dist/plugin.d.ts +11 -28
  14. package/dist/plugin.d.ts.map +1 -1
  15. package/dist/plugin.js +111 -115
  16. package/dist/plugin.js.map +1 -1
  17. package/dist/types.d.ts +5 -44
  18. package/dist/types.d.ts.map +1 -1
  19. package/dist/types.js +1 -2
  20. package/dist/types.js.map +1 -1
  21. package/package.json +24 -21
  22. package/dist/auth/account-manager.d.ts +0 -16
  23. package/dist/auth/account-manager.d.ts.map +0 -1
  24. package/dist/auth/account-manager.js +0 -66
  25. package/dist/auth/account-manager.js.map +0 -1
  26. package/dist/auth/oauth.d.ts +0 -27
  27. package/dist/auth/oauth.d.ts.map +0 -1
  28. package/dist/auth/oauth.js +0 -92
  29. package/dist/auth/oauth.js.map +0 -1
  30. package/dist/cli/setup.d.ts +0 -3
  31. package/dist/cli/setup.d.ts.map +0 -1
  32. package/dist/cli/setup.js +0 -272
  33. package/dist/cli/setup.js.map +0 -1
  34. package/dist/index-minimal.d.ts +0 -2
  35. package/dist/index-minimal.d.ts.map +0 -1
  36. package/dist/index-minimal.js +0 -7
  37. package/dist/index-minimal.js.map +0 -1
  38. package/dist/index-simple.d.ts +0 -5
  39. package/dist/index-simple.d.ts.map +0 -1
  40. package/dist/index-simple.js +0 -10
  41. package/dist/index-simple.js.map +0 -1
  42. package/dist/plugin-minimal.d.ts +0 -21
  43. package/dist/plugin-minimal.d.ts.map +0 -1
  44. package/dist/plugin-minimal.js +0 -31
  45. package/dist/plugin-minimal.js.map +0 -1
  46. package/dist/plugin-simple.d.ts +0 -28
  47. package/dist/plugin-simple.d.ts.map +0 -1
  48. package/dist/plugin-simple.js +0 -124
  49. package/dist/plugin-simple.js.map +0 -1
  50. package/dist/storage/storage.d.ts +0 -56
  51. package/dist/storage/storage.d.ts.map +0 -1
  52. package/dist/storage/storage.js +0 -144
  53. package/dist/storage/storage.js.map +0 -1
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":""}
package/dist/cli/setup.js DELETED
@@ -1,272 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- var __importDefault = (this && this.__importDefault) || function (mod) {
37
- return (mod && mod.__esModule) ? mod : { "default": mod };
38
- };
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- const promises_1 = __importDefault(require("fs/promises"));
41
- const path_1 = __importDefault(require("path"));
42
- const os_1 = __importDefault(require("os"));
43
- const http_1 = __importDefault(require("http"));
44
- const url_1 = __importDefault(require("url"));
45
- const google_auth_library_1 = require("google-auth-library");
46
- const constants_1 = require("../constants");
47
- // Setup paths
48
- const OPENCODE_CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.config', 'opencode');
49
- const OPENCODE_CONFIG_PATH = path_1.default.join(OPENCODE_CONFIG_DIR, 'opencode.json');
50
- const MODELS_CONFIG = {
51
- "gemini-cli-oauth": {
52
- "name": "Gemini CLI",
53
- "npm": "opencode-gemini-cli-oauth",
54
- "api": "google",
55
- "models": {
56
- "gemini-2.0-flash-exp": {
57
- "name": "Gemini 2.0 Flash (Google Account)",
58
- "limit": { "context": 1048576, "output": 8192 },
59
- "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }
60
- },
61
- "gemini-1.5-pro-latest": {
62
- "name": "Gemini 1.5 Pro (Google Account)",
63
- "limit": { "context": 2097152, "output": 8192 },
64
- "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }
65
- },
66
- "gemini-1.5-flash-latest": {
67
- "name": "Gemini 1.5 Flash (Google Account)",
68
- "limit": { "context": 1048576, "output": 8192 },
69
- "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }
70
- },
71
- "gemini-exp-1206": {
72
- "name": "Gemini Experimental 1206 (Google Account)",
73
- "limit": { "context": 2097152, "output": 8192 },
74
- "modalities": { "input": ["text", "image"], "output": ["text"] }
75
- },
76
- "gemini-2.0-pro-exp-02-05": {
77
- "name": "Gemini 2.0 Pro Experimental (Google Account)",
78
- "limit": { "context": 2097152, "output": 8192 },
79
- "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }
80
- }
81
- }
82
- }
83
- };
84
- // Helper for user input
85
- const readline_1 = __importDefault(require("readline"));
86
- const rl = readline_1.default.createInterface({
87
- input: process.stdin,
88
- output: process.stdout
89
- });
90
- const question = (query) => {
91
- return new Promise((resolve) => rl.question(query, resolve));
92
- };
93
- async function saveAccount(tokens, client) {
94
- // Get user info to identify account
95
- client.setCredentials(tokens);
96
- const userInfo = await client.getTokenInfo(tokens.access_token);
97
- const email = userInfo.email || 'unknown';
98
- console.log(`\n📧 Identified account: ${email}`);
99
- // 1. Update/Create google_accounts.json (Multi-account storage)
100
- let accounts = [];
101
- try {
102
- const data = await promises_1.default.readFile(constants_1.GOOGLE_ACCOUNTS_PATH, 'utf-8');
103
- const parsed = JSON.parse(data);
104
- if (Array.isArray(parsed)) {
105
- accounts = parsed;
106
- }
107
- else {
108
- console.log('⚠️ Warning: google_accounts.json format invalid (not an array). Resetting.');
109
- accounts = [];
110
- }
111
- }
112
- catch (e) {
113
- // File doesn't exist yet or is corrupted
114
- accounts = [];
115
- }
116
- // Remove existing entry for this email if any
117
- accounts = accounts.filter(acc => acc.email !== email);
118
- // Add new entry
119
- accounts.push({
120
- email,
121
- tokens,
122
- last_active: Date.now()
123
- });
124
- await promises_1.default.writeFile(constants_1.GOOGLE_ACCOUNTS_PATH, JSON.stringify(accounts, null, 2));
125
- console.log(`✅ Saved to account pool (${accounts.length} accounts total)`);
126
- // 2. Update oauth_creds.json (Current active account)
127
- // This ensures compatibility with Gemini CLI single-account mode
128
- await promises_1.default.writeFile(constants_1.OAUTH_CREDS_PATH, JSON.stringify(tokens, null, 2));
129
- console.log('✅ Set as active account');
130
- }
131
- async function listAccounts() {
132
- try {
133
- const data = await promises_1.default.readFile(constants_1.GOOGLE_ACCOUNTS_PATH, 'utf-8');
134
- const accounts = JSON.parse(data);
135
- console.log('\n👥 Registered Accounts:');
136
- accounts.forEach((acc, idx) => {
137
- console.log(` ${idx + 1}. ${acc.email}`);
138
- });
139
- console.log('');
140
- }
141
- catch (e) {
142
- console.log('\n👥 No accounts registered yet.\n');
143
- }
144
- }
145
- async function performLoopbackLogin() {
146
- console.log('\n🔐 Initiating Native Google Login (Loopback Flow)...');
147
- return new Promise((resolve, reject) => {
148
- let client;
149
- const server = http_1.default.createServer(async (req, res) => {
150
- try {
151
- if (!req.url)
152
- return;
153
- const query = url_1.default.parse(req.url, true).query;
154
- if (query.code) {
155
- const code = query.code;
156
- res.writeHead(200, { 'Content-Type': 'text/html' });
157
- res.end(`
158
- <html>
159
- <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
160
- <h1 style="color: #4CAF50;">Authentication Successful!</h1>
161
- <p>You can close this window and return to the terminal.</p>
162
- </body>
163
- </html>
164
- `);
165
- server.close();
166
- console.log('✅ Authorization code received!');
167
- console.log('🔄 Exchanging code for token...');
168
- try {
169
- const { tokens } = await client.getToken(code);
170
- await saveAccount(tokens, client);
171
- resolve();
172
- }
173
- catch (err) {
174
- reject(err);
175
- }
176
- }
177
- }
178
- catch (err) {
179
- console.error('Server error:', err);
180
- }
181
- });
182
- server.listen(0, async () => {
183
- const address = server.address();
184
- if (!address || typeof address === 'string') {
185
- reject(new Error('Failed to get server port'));
186
- return;
187
- }
188
- const port = address.port;
189
- const redirectUri = `http://localhost:${port}`;
190
- console.log(`🚀 Local server listening on port ${port}`);
191
- client = new google_auth_library_1.OAuth2Client({
192
- clientId: constants_1.OAUTH_CLIENT_ID,
193
- clientSecret: constants_1.OAUTH_CLIENT_SECRET,
194
- redirectUri: redirectUri
195
- });
196
- const authorizeUrl = client.generateAuthUrl({
197
- access_type: 'offline',
198
- scope: constants_1.OAUTH_SCOPES,
199
- prompt: 'consent'
200
- });
201
- console.log('\n👉 Opening browser to authorize...');
202
- console.log(` URL: ${authorizeUrl}`);
203
- const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
204
- const start = (process.platform == 'darwin' ? 'open' : process.platform == 'win32' ? 'start' : 'xdg-open');
205
- exec(`${start} "${authorizeUrl}"`);
206
- });
207
- });
208
- }
209
- async function updateOpencodeConfig() {
210
- try {
211
- await promises_1.default.mkdir(OPENCODE_CONFIG_DIR, { recursive: true });
212
- let config = {};
213
- try {
214
- const content = await promises_1.default.readFile(OPENCODE_CONFIG_PATH, 'utf-8');
215
- config = JSON.parse(content);
216
- }
217
- catch (e) {
218
- console.log('Creating new OpenCode configuration file...');
219
- }
220
- if (!config.provider)
221
- config.provider = {};
222
- console.log('\n📦 Configuring models in opencode.json...');
223
- config.provider['gemini-cli-oauth'] = MODELS_CONFIG['gemini-cli-oauth'];
224
- if (!config.plugin)
225
- config.plugin = [];
226
- if (!config.plugin.includes('opencode-gemini-cli-oauth')) {
227
- config.plugin.push('opencode-gemini-cli-oauth');
228
- }
229
- await promises_1.default.writeFile(OPENCODE_CONFIG_PATH, JSON.stringify(config, null, 2));
230
- console.log('✅ Configuration updated successfully!');
231
- }
232
- catch (error) {
233
- console.error('❌ Failed to update configuration:', error);
234
- }
235
- }
236
- async function main() {
237
- await promises_1.default.mkdir(constants_1.GEMINI_DIR, { recursive: true });
238
- console.log('🚀 OpenCode Gemini CLI OAuth Manager');
239
- console.log('====================================');
240
- await listAccounts();
241
- const action = await question('Choose action:\n1. Add/Login new account\n2. Update OpenCode config only\n3. Exit\n> ');
242
- if (action === '1') {
243
- await performLoopbackLogin();
244
- // Ask if want to add another
245
- while (true) {
246
- const addMore = await question('\nDo you want to add another account? (y/N) ');
247
- if (addMore.toLowerCase() === 'y') {
248
- await performLoopbackLogin();
249
- }
250
- else {
251
- break;
252
- }
253
- }
254
- }
255
- else if (action === '3') {
256
- process.exit(0);
257
- }
258
- // Always offer to update config at the end
259
- const updateConfig = await question('\nUpdate OpenCode configuration? (Y/n) ');
260
- if (updateConfig.toLowerCase() !== 'n') {
261
- await updateOpencodeConfig();
262
- }
263
- console.log('\n✨ Done!');
264
- rl.close();
265
- process.exit(0);
266
- }
267
- main().catch((error) => {
268
- console.error('\n❌ Operation failed:', error.message);
269
- rl.close();
270
- process.exit(1);
271
- });
272
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export { GeminiCLIOAuthPlugin, metadata } from './plugin-minimal.js';
2
- //# sourceMappingURL=index-minimal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-minimal.d.ts","sourceRoot":"","sources":["../src/index-minimal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.metadata = exports.GeminiCLIOAuthPlugin = void 0;
4
- var plugin_minimal_js_1 = require("./plugin-minimal.js");
5
- Object.defineProperty(exports, "GeminiCLIOAuthPlugin", { enumerable: true, get: function () { return plugin_minimal_js_1.GeminiCLIOAuthPlugin; } });
6
- Object.defineProperty(exports, "metadata", { enumerable: true, get: function () { return plugin_minimal_js_1.metadata; } });
7
- //# sourceMappingURL=index-minimal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-minimal.js","sourceRoot":"","sources":["../src/index-minimal.ts"],"names":[],"mappings":";;;AAAA,yDAAqE;AAA5D,yHAAA,oBAAoB,OAAA;AAAE,6GAAA,QAAQ,OAAA"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Simplified entry point (no classes)
3
- */
4
- export { GeminiCLIOAuthPlugin, metadata } from './plugin-simple.js';
5
- //# sourceMappingURL=index-simple.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-simple.d.ts","sourceRoot":"","sources":["../src/index-simple.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.metadata = exports.GeminiCLIOAuthPlugin = void 0;
4
- /**
5
- * Simplified entry point (no classes)
6
- */
7
- var plugin_simple_js_1 = require("./plugin-simple.js");
8
- Object.defineProperty(exports, "GeminiCLIOAuthPlugin", { enumerable: true, get: function () { return plugin_simple_js_1.GeminiCLIOAuthPlugin; } });
9
- Object.defineProperty(exports, "metadata", { enumerable: true, get: function () { return plugin_simple_js_1.metadata; } });
10
- //# sourceMappingURL=index-simple.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-simple.js","sourceRoot":"","sources":["../src/index-simple.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,uDAAoE;AAA3D,wHAAA,oBAAoB,OAAA;AAAE,4GAAA,QAAQ,OAAA"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Minimal test - just to see if plugin structure is correct
3
- */
4
- export declare const GeminiCLIOAuthPlugin: ({ client, directory }: any) => Promise<{
5
- auth: {
6
- provider: string;
7
- loader: (getAuth: any, provider: string) => Promise<{
8
- apiKey?: undefined;
9
- fetch?: undefined;
10
- } | {
11
- apiKey: string;
12
- fetch: typeof fetch;
13
- }>;
14
- };
15
- }>;
16
- export declare const metadata: {
17
- name: string;
18
- version: string;
19
- description: string;
20
- };
21
- //# sourceMappingURL=plugin-minimal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-minimal.d.ts","sourceRoot":"","sources":["../src/plugin-minimal.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,oBAAoB,GAAU,uBAAuB,GAAG;;;0BAMvC,GAAG,YAAY,MAAM;;;;;;;;EAclD,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;CAIpB,CAAC"}
@@ -1,31 +0,0 @@
1
- "use strict";
2
- /**
3
- * Minimal test - just to see if plugin structure is correct
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.metadata = exports.GeminiCLIOAuthPlugin = void 0;
7
- const GeminiCLIOAuthPlugin = async ({ client, directory }) => {
8
- console.log('🚀 Minimal Gemini CLI OAuth plugin loading...');
9
- return {
10
- auth: {
11
- provider: 'gemini-cli-oauth',
12
- loader: async (getAuth, provider) => {
13
- if (provider !== 'gemini-cli-oauth') {
14
- return {};
15
- }
16
- console.log(`🔐 Provider: ${provider}`);
17
- return {
18
- apiKey: '',
19
- fetch: fetch, // Just use native fetch for now to test structure
20
- };
21
- },
22
- },
23
- };
24
- };
25
- exports.GeminiCLIOAuthPlugin = GeminiCLIOAuthPlugin;
26
- exports.metadata = {
27
- name: 'opencode-gemini-cli-oauth',
28
- version: '1.0.2-minimal',
29
- description: 'Minimal test',
30
- };
31
- //# sourceMappingURL=plugin-minimal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-minimal.js","sourceRoot":"","sources":["../src/plugin-minimal.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEI,MAAM,oBAAoB,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAO,EAAE,EAAE;IACvE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,OAAO;QACL,IAAI,EAAE;YACJ,QAAQ,EAAE,kBAAkB;YAC5B,MAAM,EAAE,KAAK,EAAE,OAAY,EAAE,QAAgB,EAAE,EAAE;gBAC/C,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;oBACpC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;gBAExC,OAAO;oBACL,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,KAAK,EAAE,kDAAkD;iBACjE,CAAC;YACJ,CAAC;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,oBAAoB,wBAoB/B;AAEW,QAAA,QAAQ,GAAG;IACtB,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,eAAe;IACxB,WAAW,EAAE,cAAc;CAC5B,CAAC"}
@@ -1,28 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Yusuf
4
- * SPDX-License-Identifier: MIT
5
- *
6
- * Simplified OpenCode Plugin for Gemini CLI OAuth (No Classes)
7
- */
8
- /**
9
- * OpenCode plugin export (following Antigravity pattern)
10
- */
11
- export declare const GeminiCLIOAuthPlugin: ({ client, directory }: any) => Promise<{
12
- auth: {
13
- provider: string;
14
- loader: (getAuth: any, provider: string) => Promise<{
15
- apiKey?: undefined;
16
- fetch?: undefined;
17
- } | {
18
- apiKey: string;
19
- fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
20
- }>;
21
- };
22
- }>;
23
- export declare const metadata: {
24
- name: string;
25
- version: string;
26
- description: string;
27
- };
28
- //# sourceMappingURL=plugin-simple.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-simple.d.ts","sourceRoot":"","sources":["../src/plugin-simple.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4EH;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAU,uBAAuB,GAAG;;;0BAcvC,GAAG,YAAY,MAAM;;;;;yBAWtB,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;;;EAyBrF,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;CAIpB,CAAC"}
@@ -1,124 +0,0 @@
1
- "use strict";
2
- /**
3
- * @license
4
- * Copyright 2025 Yusuf
5
- * SPDX-License-Identifier: MIT
6
- *
7
- * Simplified OpenCode Plugin for Gemini CLI OAuth (No Classes)
8
- */
9
- var __importDefault = (this && this.__importDefault) || function (mod) {
10
- return (mod && mod.__esModule) ? mod : { "default": mod };
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.metadata = exports.GeminiCLIOAuthPlugin = void 0;
14
- const promises_1 = __importDefault(require("node:fs/promises"));
15
- const node_path_1 = __importDefault(require("node:path"));
16
- const node_os_1 = __importDefault(require("node:os"));
17
- const google_auth_library_1 = require("google-auth-library");
18
- const OAUTH_CLIENT_ID = '681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';
19
- const OAUTH_CLIENT_SECRET = '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';
20
- const OAUTH_CREDS_PATH = node_path_1.default.join(node_os_1.default.homedir(), '.gemini/oauth_creds.json');
21
- /**
22
- * Get OAuth access token from Gemini CLI credentials
23
- */
24
- async function getAccessToken() {
25
- try {
26
- const data = await promises_1.default.readFile(OAUTH_CREDS_PATH, 'utf-8');
27
- const credentials = JSON.parse(data);
28
- // Check if token needs refresh
29
- const now = Date.now();
30
- const expiryTime = credentials.expiry_date || 0;
31
- const needsRefresh = expiryTime - now < 5 * 60 * 1000; // 5 min buffer
32
- if (needsRefresh && credentials.refresh_token) {
33
- // Refresh token
34
- const client = new google_auth_library_1.OAuth2Client(OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET);
35
- client.setCredentials({ refresh_token: credentials.refresh_token });
36
- const { credentials: refreshed } = await client.refreshAccessToken();
37
- if (refreshed.access_token) {
38
- // Update stored credentials
39
- credentials.access_token = refreshed.access_token;
40
- credentials.expiry_date = refreshed.expiry_date || Date.now() + 3600 * 1000;
41
- await promises_1.default.writeFile(OAUTH_CREDS_PATH, JSON.stringify(credentials, null, 2), 'utf-8');
42
- return refreshed.access_token;
43
- }
44
- }
45
- return credentials.access_token;
46
- }
47
- catch (error) {
48
- throw new Error(`Failed to get OAuth token: ${error instanceof Error ? error.message : String(error)}`);
49
- }
50
- }
51
- /**
52
- * Create authenticated fetch with OAuth token injection
53
- */
54
- function createAuthFetch() {
55
- return async function (input, init) {
56
- const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
57
- // Only intercept Gemini API requests
58
- if (!url.includes('generativelanguage.googleapis.com')) {
59
- return fetch(input, init);
60
- }
61
- // Get OAuth token
62
- const token = await getAccessToken();
63
- // Inject Authorization header
64
- const headers = new Headers(init === null || init === void 0 ? void 0 : init.headers);
65
- headers.set('Authorization', `Bearer ${token}`);
66
- // Remove API key from URL if present
67
- const urlObj = new URL(url);
68
- urlObj.searchParams.delete('key');
69
- return fetch(urlObj.toString(), { ...init, headers });
70
- };
71
- }
72
- /**
73
- * OpenCode plugin export (following Antigravity pattern)
74
- */
75
- const GeminiCLIOAuthPlugin = async ({ client, directory }) => {
76
- console.log('🚀 Loading Gemini CLI OAuth plugin...');
77
- // Verify credentials exist
78
- try {
79
- await promises_1.default.access(OAUTH_CREDS_PATH);
80
- console.log('✅ OAuth credentials found');
81
- }
82
- catch (error) {
83
- console.warn('⚠️ No OAuth credentials. Run: gemini auth login');
84
- }
85
- return {
86
- auth: {
87
- provider: 'gemini-cli-oauth',
88
- loader: async (getAuth, provider) => {
89
- // Only intercept for our provider
90
- if (provider !== 'gemini-cli-oauth') {
91
- return {};
92
- }
93
- console.log(`🔐 Gemini CLI OAuth: Active for provider ${provider}`);
94
- // Return object with apiKey and fetch function (Antigravity pattern)
95
- return {
96
- apiKey: '',
97
- async fetch(input, init) {
98
- const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
99
- // Pass through non-Gemini API requests
100
- if (!url.includes('generativelanguage.googleapis.com')) {
101
- return fetch(input, init);
102
- }
103
- // Get OAuth token
104
- const token = await getAccessToken();
105
- // Inject Authorization header
106
- const headers = new Headers(init === null || init === void 0 ? void 0 : init.headers);
107
- headers.set('Authorization', `Bearer ${token}`);
108
- // Remove API key from URL if present
109
- const urlObj = new URL(url);
110
- urlObj.searchParams.delete('key');
111
- return fetch(urlObj.toString(), { ...init, headers });
112
- },
113
- };
114
- },
115
- },
116
- };
117
- };
118
- exports.GeminiCLIOAuthPlugin = GeminiCLIOAuthPlugin;
119
- exports.metadata = {
120
- name: 'opencode-gemini-cli-oauth',
121
- version: '1.0.1-simplified',
122
- description: 'Simplified Gemini CLI OAuth plugin',
123
- };
124
- //# sourceMappingURL=plugin-simple.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-simple.js","sourceRoot":"","sources":["../src/plugin-simple.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Yusuf
4
- * SPDX-License-Identifier: MIT
5
- */
6
- import type { OAuthCredentials, GoogleAccount, AccountPool, AccountPoolEntry } from '../types';
7
- /**
8
- * Storage manager for OAuth credentials and account pool
9
- */
10
- export declare const StorageManager: {
11
- /**
12
- * Ensure storage directories exist
13
- */
14
- ensureDirectories(): Promise<void>;
15
- /**
16
- * Read OAuth credentials from Gemini CLI storage
17
- */
18
- readOAuthCredentials(): Promise<OAuthCredentials | null>;
19
- /**
20
- * Write OAuth credentials to Gemini CLI storage
21
- */
22
- writeOAuthCredentials(credentials: OAuthCredentials): Promise<void>;
23
- /**
24
- * Read Google accounts list from Gemini CLI
25
- */
26
- readGoogleAccounts(): Promise<GoogleAccount[]>;
27
- /**
28
- * Read account pool
29
- */
30
- readAccountPool(): Promise<AccountPool>;
31
- /**
32
- * Write account pool
33
- */
34
- writeAccountPool(pool: AccountPool): Promise<void>;
35
- /**
36
- * Update account in pool
37
- */
38
- updateAccountInPool(email: string, updates: Partial<AccountPoolEntry>): Promise<void>;
39
- /**
40
- * Add or update account in pool
41
- */
42
- upsertAccountInPool(entry: AccountPoolEntry): Promise<void>;
43
- /**
44
- * Remove account from pool
45
- */
46
- removeAccountFromPool(email: string): Promise<void>;
47
- /**
48
- * Get current active account from pool
49
- */
50
- getCurrentAccount(): Promise<AccountPoolEntry | null>;
51
- /**
52
- * Rotate to next account in pool
53
- */
54
- rotateToNextAccount(): Promise<AccountPoolEntry | null>;
55
- };
56
- //# sourceMappingURL=storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;yBACwB,OAAO,CAAC,IAAI,CAAC;IAKxC;;OAEG;4BAC2B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAY9D;;OAEG;uCACsC,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzE;;OAEG;0BACyB,OAAO,CAAC,aAAa,EAAE,CAAC;IAapD;;OAEG;uBACsB,OAAO,CAAC,WAAW,CAAC;IAY7C;;OAEG;2BAC0B,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD;;OAEG;+BAEM,MAAM,WACJ,OAAO,CAAC,gBAAgB,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAahB;;OAEG;+BAC8B,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE;;OAEG;iCACgC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD;;OAEG;yBACwB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAQ3D;;OAEG;2BAC0B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAW9D,CAAC"}