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.
- package/LICENSE +21 -0
- package/README.md +256 -0
- package/dist/auth/account-manager.d.ts +50 -0
- package/dist/auth/account-manager.d.ts.map +1 -0
- package/dist/auth/account-manager.js +142 -0
- package/dist/auth/account-manager.js.map +1 -0
- package/dist/auth/oauth.d.ts +40 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +126 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/request-interceptor.d.ts +18 -0
- package/dist/auth/request-interceptor.d.ts.map +1 -0
- package/dist/auth/request-interceptor.js +94 -0
- package/dist/auth/request-interceptor.js.map +1 -0
- package/dist/constants.d.ts +55 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +61 -0
- package/dist/constants.js.map +1 -0
- package/dist/index-minimal.d.ts +2 -0
- package/dist/index-minimal.d.ts.map +1 -0
- package/dist/index-minimal.js +2 -0
- package/dist/index-minimal.js.map +1 -0
- package/dist/index-simple.d.ts +5 -0
- package/dist/index-simple.d.ts.map +1 -0
- package/dist/index-simple.js +5 -0
- package/dist/index-simple.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-minimal.d.ts +21 -0
- package/dist/plugin-minimal.d.ts.map +1 -0
- package/dist/plugin-minimal.js +27 -0
- package/dist/plugin-minimal.js.map +1 -0
- package/dist/plugin-simple.d.ts +28 -0
- package/dist/plugin-simple.d.ts.map +1 -0
- package/dist/plugin-simple.js +117 -0
- package/dist/plugin-simple.js.map +1 -0
- package/dist/plugin.d.ts +46 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +66 -0
- package/dist/plugin.js.map +1 -0
- package/dist/storage/storage.d.ts +56 -0
- package/dist/storage/storage.d.ts.map +1 -0
- package/dist/storage/storage.js +138 -0
- package/dist/storage/storage.js.map +1 -0
- package/dist/types.d.ts +73 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- 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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,GACX,MAAM,iBAAiB,CAAC;AAQzB;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,iBAAiB;QAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,oBAAoB;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqB,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,WAA6B;QAC9D,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;YAC3C,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAiB;QAC7C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAC9B,KAAa,EACb,OAAkC;QAElC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAE3E,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG;gBAC5B,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC9B,GAAG,OAAO;aACX,CAAC;YACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAuB;QACtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;QAEjF,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAa;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,iBAAiB;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,mBAAmB;QAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnE,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|