opencode-gemini-cli-oauth 1.1.5 → 1.1.6
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/plugin.d.ts +12 -22
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +54 -39
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
package/dist/plugin.d.ts
CHANGED
|
@@ -2,38 +2,27 @@
|
|
|
2
2
|
* @license
|
|
3
3
|
* Copyright 2025 Yusuf
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
|
-
*
|
|
6
|
-
* OpenCode Plugin for Gemini CLI OAuth Authentication
|
|
7
|
-
*
|
|
8
|
-
* This plugin enables OpenCode to use Google account OAuth credentials
|
|
9
|
-
* from Gemini CLI, allowing access to Gemini models without API keys.
|
|
10
|
-
*
|
|
11
|
-
* Features:
|
|
12
|
-
* - Reuses Gemini CLI OAuth credentials (~/.gemini/oauth_creds.json)
|
|
13
|
-
* - Multi-account support with automatic rotation
|
|
14
|
-
* - Automatic token refresh
|
|
15
|
-
* - Rate limit handling with account switching
|
|
16
|
-
* - Compatible with existing Antigravity plugin
|
|
17
5
|
*/
|
|
18
|
-
import type { PluginContext
|
|
6
|
+
import type { PluginContext } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Custom fetch implementation with OAuth token injection
|
|
9
|
+
*/
|
|
10
|
+
declare function authenticatedFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
|
|
19
11
|
/**
|
|
20
|
-
* OpenCode
|
|
12
|
+
* OpenCode Plugin for Gemini CLI OAuth Authentication
|
|
21
13
|
*/
|
|
22
14
|
export default function GeminiCLIOAuthPlugin({ client, directory }: PluginContext): Promise<{
|
|
23
15
|
auth: {
|
|
24
|
-
/**
|
|
25
|
-
* Auth provider for "gemini-cli-oauth" provider
|
|
26
|
-
*/
|
|
27
16
|
provider: string;
|
|
28
17
|
/**
|
|
29
|
-
* Auth loader -
|
|
18
|
+
* Auth loader - must return an object with `apiKey` and `fetch` function
|
|
30
19
|
*/
|
|
31
|
-
loader:
|
|
20
|
+
loader: (getAuth: any, provider: string) => Promise<{
|
|
21
|
+
apiKey: string;
|
|
22
|
+
fetch: typeof authenticatedFetch;
|
|
23
|
+
}>;
|
|
32
24
|
};
|
|
33
25
|
}>;
|
|
34
|
-
/**
|
|
35
|
-
* Plugin metadata
|
|
36
|
-
*/
|
|
37
26
|
export declare const metadata: {
|
|
38
27
|
name: string;
|
|
39
28
|
version: string;
|
|
@@ -43,4 +32,5 @@ export declare const metadata: {
|
|
|
43
32
|
opencode: string;
|
|
44
33
|
};
|
|
45
34
|
};
|
|
35
|
+
export {};
|
|
46
36
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AAK5D;;GAEG;AACH,iBAAe,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6BjG;AAED;;GAEG;AACH,wBAA8B,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,aAAa;;;QAmBjF;;WAEG;0BACqB,GAAG,YAAY,MAAM;;;;;GASlD;AAED,eAAO,MAAM,QAAQ;;;;;;;;CAQpB,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -2,61 +2,76 @@
|
|
|
2
2
|
* @license
|
|
3
3
|
* Copyright 2025 Yusuf
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
|
-
*
|
|
6
|
-
* OpenCode Plugin for Gemini CLI OAuth Authentication
|
|
7
|
-
*
|
|
8
|
-
* This plugin enables OpenCode to use Google account OAuth credentials
|
|
9
|
-
* from Gemini CLI, allowing access to Gemini models without API keys.
|
|
10
|
-
*
|
|
11
|
-
* Features:
|
|
12
|
-
* - Reuses Gemini CLI OAuth credentials (~/.gemini/oauth_creds.json)
|
|
13
|
-
* - Multi-account support with automatic rotation
|
|
14
|
-
* - Automatic token refresh
|
|
15
|
-
* - Rate limit handling with account switching
|
|
16
|
-
* - Compatible with existing Antigravity plugin
|
|
17
5
|
*/
|
|
18
|
-
import {
|
|
6
|
+
import { OAuthManager } from './auth/oauth.js';
|
|
7
|
+
// Instantiate manager once
|
|
8
|
+
const oauthManager = new OAuthManager();
|
|
19
9
|
/**
|
|
20
|
-
*
|
|
10
|
+
* Custom fetch implementation with OAuth token injection
|
|
11
|
+
*/
|
|
12
|
+
async function authenticatedFetch(input, init) {
|
|
13
|
+
const urlStr = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
|
|
14
|
+
// Only intercept Gemini API requests
|
|
15
|
+
if (!urlStr.includes('generativelanguage.googleapis.com')) {
|
|
16
|
+
return fetch(input, init);
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
// Get OAuth token
|
|
20
|
+
const token = await oauthManager.getAccessToken();
|
|
21
|
+
// Inject Authorization header
|
|
22
|
+
const headers = new Headers(init?.headers);
|
|
23
|
+
headers.set('Authorization', `Bearer ${token}`);
|
|
24
|
+
// Remove API key from URL if present (OAuth doesn't need it)
|
|
25
|
+
const urlObj = new URL(urlStr);
|
|
26
|
+
urlObj.searchParams.delete('key');
|
|
27
|
+
return fetch(urlObj.toString(), {
|
|
28
|
+
...init,
|
|
29
|
+
headers
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error('❌ [Gemini OAuth] Token error:', error);
|
|
34
|
+
// Fallback to original request (might fail with 403, but better than crashing)
|
|
35
|
+
return fetch(input, init);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* OpenCode Plugin for Gemini CLI OAuth Authentication
|
|
21
40
|
*/
|
|
22
41
|
export default async function GeminiCLIOAuthPlugin({ client, directory }) {
|
|
23
|
-
console.log('🚀 Loading Gemini CLI OAuth plugin...');
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
console.log('🚀 Loading Gemini CLI OAuth plugin (v1.1.6)...');
|
|
43
|
+
// Verify credentials on load (optional, just for logging)
|
|
44
|
+
try {
|
|
45
|
+
const valid = await oauthManager.verifyCredentials();
|
|
46
|
+
if (valid) {
|
|
47
|
+
console.log('✅ Gemini CLI OAuth credentials verified');
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.warn('⚠️ Gemini CLI OAuth credentials missing or invalid. Run: opencode-gemini-setup');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
// Ignore init errors
|
|
55
|
+
}
|
|
27
56
|
return {
|
|
28
57
|
auth: {
|
|
29
|
-
/**
|
|
30
|
-
* Auth provider for "gemini-cli-oauth" provider
|
|
31
|
-
*/
|
|
32
58
|
provider: 'gemini-cli-oauth',
|
|
33
59
|
/**
|
|
34
|
-
* Auth loader -
|
|
60
|
+
* Auth loader - must return an object with `apiKey` and `fetch` function
|
|
35
61
|
*/
|
|
36
|
-
loader:
|
|
37
|
-
//
|
|
38
|
-
if (provider !== 'gemini-cli-oauth') {
|
|
39
|
-
return {
|
|
40
|
-
apiKey: '',
|
|
41
|
-
fetch: fetch,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
62
|
+
loader: async (getAuth, provider) => {
|
|
63
|
+
// Return explicit object structure
|
|
44
64
|
return {
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
// Custom fetch with OAuth token injection
|
|
48
|
-
fetch: interceptor.fetch,
|
|
65
|
+
apiKey: 'gemini-cli-oauth-placeholder', // Must not be empty string for some checks
|
|
66
|
+
fetch: authenticatedFetch
|
|
49
67
|
};
|
|
50
|
-
}
|
|
68
|
+
}
|
|
51
69
|
},
|
|
52
70
|
};
|
|
53
71
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Plugin metadata
|
|
56
|
-
*/
|
|
57
72
|
export const metadata = {
|
|
58
73
|
name: 'opencode-gemini-cli-oauth',
|
|
59
|
-
version: '1.
|
|
74
|
+
version: '1.1.6',
|
|
60
75
|
description: 'Use Gemini CLI OAuth credentials in OpenCode',
|
|
61
76
|
author: 'Yusuf',
|
|
62
77
|
compatibleWith: {
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,2BAA2B;AAC3B,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAExC;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,KAAwB,EAAE,IAAkB;IAC5E,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAEjG,qCAAqC;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;QAElD,8BAA8B;QAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;QAEhD,6DAA6D;QAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAElC,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE;YAC9B,GAAG,IAAI;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,+EAA+E;QAC/E,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAiB;IACrF,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAE9D,0DAA0D;IAC1D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACrD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,qBAAqB;IACvB,CAAC;IAED,OAAO;QACL,IAAI,EAAE;YACJ,QAAQ,EAAE,kBAAkB;YAE5B;;eAEG;YACH,MAAM,EAAE,KAAK,EAAE,OAAY,EAAE,QAAgB,EAAE,EAAE;gBAC/C,mCAAmC;gBACnC,OAAO;oBACL,MAAM,EAAE,8BAA8B,EAAE,2CAA2C;oBACnF,KAAK,EAAE,kBAAkB;iBAC1B,CAAC;YACJ,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,8CAA8C;IAC3D,MAAM,EAAE,OAAO;IACf,cAAc,EAAE;QACd,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAC"}
|
package/package.json
CHANGED