opencode-gemini-cli-oauth 1.1.5 → 1.1.7

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 CHANGED
@@ -2,38 +2,24 @@
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, AuthLoader } from './types.js';
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 plugin export
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 - returns fetch function with OAuth token injection
18
+ * Auth loader - trying to return fetch function directly
30
19
  */
31
- loader: AuthLoader;
20
+ loader: (getAuth: any, provider: string) => Promise<typeof authenticatedFetch>;
32
21
  };
33
22
  }>;
34
- /**
35
- * Plugin metadata
36
- */
37
23
  export declare const metadata: {
38
24
  name: string;
39
25
  version: string;
@@ -43,4 +29,5 @@ export declare const metadata: {
43
29
  opencode: string;
44
30
  };
45
31
  };
32
+ export {};
46
33
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D;;GAEG;AACH,wBAA8B,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,aAAa;;QAUjF;;WAEG;;QAGH;;WAEG;gBAiBG,UAAU;;GAGrB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;CAQpB,CAAC"}
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;;GAMlD;AAED,eAAO,MAAM,QAAQ;;;;;;;;CAQpB,CAAC"}
package/dist/plugin.js CHANGED
@@ -2,61 +2,73 @@
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 { createRequestInterceptor } from './auth/request-interceptor.js';
6
+ import { OAuthManager } from './auth/oauth.js';
7
+ // Instantiate manager once
8
+ const oauthManager = new OAuthManager();
19
9
  /**
20
- * OpenCode plugin export
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
- // Create request interceptor with OAuth token injection
25
- const interceptor = await createRequestInterceptor();
26
- console.log('✅ Gemini CLI OAuth plugin loaded successfully');
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 - returns fetch function with OAuth token injection
60
+ * Auth loader - trying to return fetch function directly
35
61
  */
36
- loader: (async (getAuth, provider) => {
37
- // Only intercept requests for "gemini-cli-oauth" provider
38
- if (provider !== 'gemini-cli-oauth') {
39
- return {
40
- apiKey: '',
41
- fetch: fetch,
42
- };
43
- }
44
- return {
45
- // Dummy API key (OAuth doesn't need it)
46
- apiKey: 'gemini-cli-oauth',
47
- // Custom fetch with OAuth token injection
48
- fetch: interceptor.fetch,
49
- };
50
- }),
62
+ loader: async (getAuth, provider) => {
63
+ // Return fetch function directly
64
+ return authenticatedFetch;
65
+ }
51
66
  },
52
67
  };
53
68
  }
54
- /**
55
- * Plugin metadata
56
- */
57
69
  export const metadata = {
58
70
  name: 'opencode-gemini-cli-oauth',
59
- version: '1.0.0',
71
+ version: '1.1.6',
60
72
  description: 'Use Gemini CLI OAuth credentials in OpenCode',
61
73
  author: 'Yusuf',
62
74
  compatibleWith: {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAiB;IACrF,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAErD,wDAAwD;IACxD,MAAM,WAAW,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,OAAO;QACL,IAAI,EAAE;YACJ;;eAEG;YACH,QAAQ,EAAE,kBAAkB;YAE5B;;eAEG;YACH,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;gBACnC,0DAA0D;gBAC1D,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;oBACpC,OAAO;wBACL,MAAM,EAAE,EAAE;wBACV,KAAK,EAAE,KAAK;qBACb,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,wCAAwC;oBACxC,MAAM,EAAE,kBAAkB;oBAE1B,0CAA0C;oBAC1C,KAAK,EAAE,WAAW,CAAC,KAAK;iBACzB,CAAC;YACJ,CAAC,CAAe;SACjB;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,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"}
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,iCAAiC;gBACjC,OAAO,kBAAkB,CAAC;YAC5B,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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-gemini-cli-oauth",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "OpenCode plugin for Gemini CLI OAuth authentication - use Google account quota without API keys",
5
5
  "type": "module",
6
6
  "main": "dist/index-minimal.js",