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.
- package/dist/constants.d.ts +9 -20
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +19 -36
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +4 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -14
- package/dist/index.js.map +1 -1
- package/dist/oauth.d.ts +27 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +170 -0
- package/dist/oauth.js.map +1 -0
- package/dist/plugin.d.ts +11 -28
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +111 -115
- package/dist/plugin.js.map +1 -1
- package/dist/types.d.ts +5 -44
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/dist/types.js.map +1 -1
- package/package.json +24 -21
- package/dist/auth/account-manager.d.ts +0 -16
- package/dist/auth/account-manager.d.ts.map +0 -1
- package/dist/auth/account-manager.js +0 -66
- package/dist/auth/account-manager.js.map +0 -1
- package/dist/auth/oauth.d.ts +0 -27
- package/dist/auth/oauth.d.ts.map +0 -1
- package/dist/auth/oauth.js +0 -92
- package/dist/auth/oauth.js.map +0 -1
- package/dist/cli/setup.d.ts +0 -3
- package/dist/cli/setup.d.ts.map +0 -1
- package/dist/cli/setup.js +0 -272
- package/dist/cli/setup.js.map +0 -1
- package/dist/index-minimal.d.ts +0 -2
- package/dist/index-minimal.d.ts.map +0 -1
- package/dist/index-minimal.js +0 -7
- package/dist/index-minimal.js.map +0 -1
- package/dist/index-simple.d.ts +0 -5
- package/dist/index-simple.d.ts.map +0 -1
- package/dist/index-simple.js +0 -10
- package/dist/index-simple.js.map +0 -1
- package/dist/plugin-minimal.d.ts +0 -21
- package/dist/plugin-minimal.d.ts.map +0 -1
- package/dist/plugin-minimal.js +0 -31
- package/dist/plugin-minimal.js.map +0 -1
- package/dist/plugin-simple.d.ts +0 -28
- package/dist/plugin-simple.d.ts.map +0 -1
- package/dist/plugin-simple.js +0 -124
- package/dist/plugin-simple.js.map +0 -1
- package/dist/storage/storage.d.ts +0 -56
- package/dist/storage/storage.d.ts.map +0 -1
- package/dist/storage/storage.js +0 -144
- package/dist/storage/storage.js.map +0 -1
package/dist/cli/setup.d.ts
DELETED
package/dist/cli/setup.d.ts.map
DELETED
|
@@ -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
|
package/dist/cli/setup.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/index-minimal.d.ts
DELETED
|
@@ -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"}
|
package/dist/index-minimal.js
DELETED
|
@@ -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"}
|
package/dist/index-simple.d.ts
DELETED
|
@@ -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"}
|
package/dist/index-simple.js
DELETED
|
@@ -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
|
package/dist/index-simple.js.map
DELETED
|
@@ -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"}
|
package/dist/plugin-minimal.d.ts
DELETED
|
@@ -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"}
|
package/dist/plugin-minimal.js
DELETED
|
@@ -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"}
|
package/dist/plugin-simple.d.ts
DELETED
|
@@ -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"}
|
package/dist/plugin-simple.js
DELETED
|
@@ -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"}
|