opencode-gemini-cli-oauth 1.0.0

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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +256 -0
  3. package/dist/auth/account-manager.d.ts +50 -0
  4. package/dist/auth/account-manager.d.ts.map +1 -0
  5. package/dist/auth/account-manager.js +142 -0
  6. package/dist/auth/account-manager.js.map +1 -0
  7. package/dist/auth/oauth.d.ts +40 -0
  8. package/dist/auth/oauth.d.ts.map +1 -0
  9. package/dist/auth/oauth.js +126 -0
  10. package/dist/auth/oauth.js.map +1 -0
  11. package/dist/auth/request-interceptor.d.ts +18 -0
  12. package/dist/auth/request-interceptor.d.ts.map +1 -0
  13. package/dist/auth/request-interceptor.js +94 -0
  14. package/dist/auth/request-interceptor.js.map +1 -0
  15. package/dist/constants.d.ts +55 -0
  16. package/dist/constants.d.ts.map +1 -0
  17. package/dist/constants.js +61 -0
  18. package/dist/constants.js.map +1 -0
  19. package/dist/index-minimal.d.ts +2 -0
  20. package/dist/index-minimal.d.ts.map +1 -0
  21. package/dist/index-minimal.js +2 -0
  22. package/dist/index-minimal.js.map +1 -0
  23. package/dist/index-simple.d.ts +5 -0
  24. package/dist/index-simple.d.ts.map +1 -0
  25. package/dist/index-simple.js +5 -0
  26. package/dist/index-simple.js.map +1 -0
  27. package/dist/index.d.ts +16 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +17 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/plugin-minimal.d.ts +21 -0
  32. package/dist/plugin-minimal.d.ts.map +1 -0
  33. package/dist/plugin-minimal.js +27 -0
  34. package/dist/plugin-minimal.js.map +1 -0
  35. package/dist/plugin-simple.d.ts +28 -0
  36. package/dist/plugin-simple.d.ts.map +1 -0
  37. package/dist/plugin-simple.js +117 -0
  38. package/dist/plugin-simple.js.map +1 -0
  39. package/dist/plugin.d.ts +46 -0
  40. package/dist/plugin.d.ts.map +1 -0
  41. package/dist/plugin.js +66 -0
  42. package/dist/plugin.js.map +1 -0
  43. package/dist/storage/storage.d.ts +56 -0
  44. package/dist/storage/storage.d.ts.map +1 -0
  45. package/dist/storage/storage.js +138 -0
  46. package/dist/storage/storage.js.map +1 -0
  47. package/dist/types.d.ts +73 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +7 -0
  50. package/dist/types.js.map +1 -0
  51. package/package.json +42 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Yusuf
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import type { OAuthCredentials, GoogleAccount, AccountPool, AccountPoolEntry } from '../types.js';
7
+ /**
8
+ * Storage manager for OAuth credentials and account pool
9
+ */
10
+ export declare class StorageManager {
11
+ /**
12
+ * Ensure storage directories exist
13
+ */
14
+ static ensureDirectories(): Promise<void>;
15
+ /**
16
+ * Read OAuth credentials from Gemini CLI storage
17
+ */
18
+ static readOAuthCredentials(): Promise<OAuthCredentials | null>;
19
+ /**
20
+ * Write OAuth credentials to Gemini CLI storage
21
+ */
22
+ static writeOAuthCredentials(credentials: OAuthCredentials): Promise<void>;
23
+ /**
24
+ * Read Google accounts list from Gemini CLI
25
+ */
26
+ static readGoogleAccounts(): Promise<GoogleAccount[]>;
27
+ /**
28
+ * Read account pool
29
+ */
30
+ static readAccountPool(): Promise<AccountPool>;
31
+ /**
32
+ * Write account pool
33
+ */
34
+ static writeAccountPool(pool: AccountPool): Promise<void>;
35
+ /**
36
+ * Update account in pool
37
+ */
38
+ static updateAccountInPool(email: string, updates: Partial<AccountPoolEntry>): Promise<void>;
39
+ /**
40
+ * Add or update account in pool
41
+ */
42
+ static upsertAccountInPool(entry: AccountPoolEntry): Promise<void>;
43
+ /**
44
+ * Remove account from pool
45
+ */
46
+ static removeAccountFromPool(email: string): Promise<void>;
47
+ /**
48
+ * Get current active account from pool
49
+ */
50
+ static getCurrentAccount(): Promise<AccountPoolEntry | null>;
51
+ /**
52
+ * Rotate to next account in pool
53
+ */
54
+ static rotateToNextAccount(): Promise<AccountPoolEntry | null>;
55
+ }
56
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
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,aAAa,CAAC;AAErB;;GAEG;AACH,qBAAa,cAAc;IACzB;;OAEG;WACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/C;;OAEG;WACU,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAYrE;;OAEG;WACU,qBAAqB,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhF;;OAEG;WACU,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAa3D;;OAEG;WACU,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;IAYpD;;OAEG;WACU,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D;;OAEG;WACU,mBAAmB,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAahB;;OAEG;WACU,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxE;;OAEG;WACU,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE;;OAEG;WACU,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAQlE;;OAEG;WACU,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAWrE"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Yusuf
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import fs from 'node:fs/promises';
7
+ import { OAUTH_CREDS_PATH, GOOGLE_ACCOUNTS_PATH, ACCOUNT_POOL_PATH, PLUGIN_STORAGE_DIR, GEMINI_DIR, } from '../constants.js';
8
+ /**
9
+ * Storage manager for OAuth credentials and account pool
10
+ */
11
+ export class StorageManager {
12
+ /**
13
+ * Ensure storage directories exist
14
+ */
15
+ static async ensureDirectories() {
16
+ await fs.mkdir(GEMINI_DIR, { recursive: true });
17
+ await fs.mkdir(PLUGIN_STORAGE_DIR, { recursive: true });
18
+ }
19
+ /**
20
+ * Read OAuth credentials from Gemini CLI storage
21
+ */
22
+ static async readOAuthCredentials() {
23
+ try {
24
+ const data = await fs.readFile(OAUTH_CREDS_PATH, 'utf-8');
25
+ return JSON.parse(data);
26
+ }
27
+ catch (error) {
28
+ if (error.code === 'ENOENT') {
29
+ return null;
30
+ }
31
+ throw error;
32
+ }
33
+ }
34
+ /**
35
+ * Write OAuth credentials to Gemini CLI storage
36
+ */
37
+ static async writeOAuthCredentials(credentials) {
38
+ await this.ensureDirectories();
39
+ await fs.writeFile(OAUTH_CREDS_PATH, JSON.stringify(credentials, null, 2), 'utf-8');
40
+ }
41
+ /**
42
+ * Read Google accounts list from Gemini CLI
43
+ */
44
+ static async readGoogleAccounts() {
45
+ try {
46
+ const data = await fs.readFile(GOOGLE_ACCOUNTS_PATH, 'utf-8');
47
+ const parsed = JSON.parse(data);
48
+ return parsed.accounts || [];
49
+ }
50
+ catch (error) {
51
+ if (error.code === 'ENOENT') {
52
+ return [];
53
+ }
54
+ throw error;
55
+ }
56
+ }
57
+ /**
58
+ * Read account pool
59
+ */
60
+ static async readAccountPool() {
61
+ try {
62
+ const data = await fs.readFile(ACCOUNT_POOL_PATH, 'utf-8');
63
+ return JSON.parse(data);
64
+ }
65
+ catch (error) {
66
+ if (error.code === 'ENOENT') {
67
+ return { accounts: [], currentIndex: 0 };
68
+ }
69
+ throw error;
70
+ }
71
+ }
72
+ /**
73
+ * Write account pool
74
+ */
75
+ static async writeAccountPool(pool) {
76
+ await this.ensureDirectories();
77
+ await fs.writeFile(ACCOUNT_POOL_PATH, JSON.stringify(pool, null, 2), 'utf-8');
78
+ }
79
+ /**
80
+ * Update account in pool
81
+ */
82
+ static async updateAccountInPool(email, updates) {
83
+ const pool = await this.readAccountPool();
84
+ const accountIndex = pool.accounts.findIndex((acc) => acc.email === email);
85
+ if (accountIndex >= 0) {
86
+ pool.accounts[accountIndex] = {
87
+ ...pool.accounts[accountIndex],
88
+ ...updates,
89
+ };
90
+ await this.writeAccountPool(pool);
91
+ }
92
+ }
93
+ /**
94
+ * Add or update account in pool
95
+ */
96
+ static async upsertAccountInPool(entry) {
97
+ const pool = await this.readAccountPool();
98
+ const accountIndex = pool.accounts.findIndex((acc) => acc.email === entry.email);
99
+ if (accountIndex >= 0) {
100
+ pool.accounts[accountIndex] = entry;
101
+ }
102
+ else {
103
+ pool.accounts.push(entry);
104
+ }
105
+ await this.writeAccountPool(pool);
106
+ }
107
+ /**
108
+ * Remove account from pool
109
+ */
110
+ static async removeAccountFromPool(email) {
111
+ const pool = await this.readAccountPool();
112
+ pool.accounts = pool.accounts.filter((acc) => acc.email !== email);
113
+ await this.writeAccountPool(pool);
114
+ }
115
+ /**
116
+ * Get current active account from pool
117
+ */
118
+ static async getCurrentAccount() {
119
+ const pool = await this.readAccountPool();
120
+ if (pool.accounts.length === 0) {
121
+ return null;
122
+ }
123
+ return pool.accounts[pool.currentIndex] || pool.accounts[0];
124
+ }
125
+ /**
126
+ * Rotate to next account in pool
127
+ */
128
+ static async rotateToNextAccount() {
129
+ const pool = await this.readAccountPool();
130
+ if (pool.accounts.length === 0) {
131
+ return null;
132
+ }
133
+ pool.currentIndex = (pool.currentIndex + 1) % pool.accounts.length;
134
+ await this.writeAccountPool(pool);
135
+ return pool.accounts[pool.currentIndex];
136
+ }
137
+ }
138
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Yusuf
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * OAuth credentials format (compatible with Gemini CLI)
8
+ */
9
+ export interface OAuthCredentials {
10
+ access_token: string;
11
+ refresh_token: string;
12
+ scope: string;
13
+ token_type: string;
14
+ expiry_date: number;
15
+ id_token?: string;
16
+ }
17
+ /**
18
+ * Google account information
19
+ */
20
+ export interface GoogleAccount {
21
+ email: string;
22
+ name?: string;
23
+ picture?: string;
24
+ }
25
+ /**
26
+ * Account pool entry
27
+ */
28
+ export interface AccountPoolEntry {
29
+ email: string;
30
+ credentials: OAuthCredentials;
31
+ lastUsed: number;
32
+ requestCount: number;
33
+ rateLimitUntil?: number;
34
+ }
35
+ /**
36
+ * Account pool storage
37
+ */
38
+ export interface AccountPool {
39
+ accounts: AccountPoolEntry[];
40
+ currentIndex: number;
41
+ }
42
+ /**
43
+ * Plugin configuration
44
+ */
45
+ export interface PluginConfig {
46
+ enableMultiAccount: boolean;
47
+ autoRotateOnRateLimit: boolean;
48
+ debugMode: boolean;
49
+ }
50
+ /**
51
+ * Token refresh result
52
+ */
53
+ export interface TokenRefreshResult {
54
+ success: boolean;
55
+ accessToken?: string;
56
+ expiryDate?: number;
57
+ error?: string;
58
+ }
59
+ /**
60
+ * OpenCode plugin context (from opencode-ai types)
61
+ */
62
+ export interface PluginContext {
63
+ client: any;
64
+ directory: string;
65
+ }
66
+ /**
67
+ * OpenCode auth loader function signature
68
+ */
69
+ export type AuthLoader = (getAuth: () => Promise<any>, provider: string) => Promise<{
70
+ apiKey: string;
71
+ fetch: typeof fetch;
72
+ }>;
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,OAAO,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAC3B,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,KAAK,CAAC;CACrB,CAAC,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Yusuf
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "opencode-gemini-cli-oauth",
3
+ "version": "1.0.0",
4
+ "description": "OpenCode plugin for Gemini CLI OAuth authentication - use Google account quota without API keys",
5
+ "type": "module",
6
+ "main": "dist/index-minimal.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "dev": "tsc --watch",
11
+ "clean": "rm -rf dist",
12
+ "prepublishOnly": "npm run clean && npm run build"
13
+ },
14
+ "keywords": [
15
+ "opencode",
16
+ "gemini",
17
+ "oauth",
18
+ "google",
19
+ "ai",
20
+ "plugin"
21
+ ],
22
+ "files": [
23
+ "dist",
24
+ "LICENSE",
25
+ "README.md"
26
+ ],
27
+ "author": "Yusuf",
28
+ "license": "MIT",
29
+ "peerDependencies": {
30
+ "opencode-ai": "^1.0.0"
31
+ },
32
+ "dependencies": {
33
+ "google-auth-library": "^9.15.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^22.10.5",
37
+ "typescript": "^5.7.2"
38
+ },
39
+ "engines": {
40
+ "node": ">=18.0.0"
41
+ }
42
+ }