opencode-gemini-cli-oauth 1.1.21 → 1.1.22
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/auth/account-manager.js +15 -12
- package/dist/auth/account-manager.js.map +1 -1
- package/dist/auth/oauth.d.ts +1 -1
- package/dist/auth/oauth.d.ts.map +1 -1
- package/dist/auth/oauth.js +15 -12
- package/dist/auth/oauth.js.map +1 -1
- package/dist/cli/setup.js +64 -26
- package/dist/cli/setup.js.map +1 -1
- package/dist/constants.js +20 -14
- package/dist/constants.js.map +1 -1
- package/dist/index-minimal.js +6 -1
- package/dist/index-minimal.js.map +1 -1
- package/dist/index-simple.js +6 -1
- package/dist/index-simple.js.map +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/plugin-minimal.js +6 -2
- package/dist/plugin-minimal.js.map +1 -1
- package/dist/plugin-simple.js +18 -11
- package/dist/plugin-simple.js.map +1 -1
- package/dist/plugin.d.ts +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +61 -17
- package/dist/plugin.js.map +1 -1
- package/dist/storage/storage.d.ts +1 -1
- package/dist/storage/storage.d.ts.map +1 -1
- package/dist/storage/storage.js +27 -21
- package/dist/storage/storage.js.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -2
|
@@ -1,23 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @license
|
|
3
4
|
* Copyright 2025 Yusuf
|
|
4
5
|
* SPDX-License-Identifier: MIT
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.accountManager = void 0;
|
|
9
|
+
const storage_1 = require("../storage/storage");
|
|
10
|
+
const oauth_1 = require("./oauth");
|
|
11
|
+
exports.accountManager = {
|
|
9
12
|
/**
|
|
10
13
|
* Initialize account pool
|
|
11
14
|
*/
|
|
12
15
|
async initialize() {
|
|
13
|
-
const credentials = await StorageManager.readOAuthCredentials();
|
|
16
|
+
const credentials = await storage_1.StorageManager.readOAuthCredentials();
|
|
14
17
|
if (!credentials)
|
|
15
18
|
return;
|
|
16
|
-
const userInfo = await oauth.getUserInfo();
|
|
17
|
-
const pool = await StorageManager.readAccountPool();
|
|
19
|
+
const userInfo = await oauth_1.oauth.getUserInfo();
|
|
20
|
+
const pool = await storage_1.StorageManager.readAccountPool();
|
|
18
21
|
const existingAccount = pool.accounts.find((acc) => acc.email === userInfo.email);
|
|
19
22
|
if (existingAccount) {
|
|
20
|
-
await StorageManager.updateAccountInPool(userInfo.email, {
|
|
23
|
+
await storage_1.StorageManager.updateAccountInPool(userInfo.email, {
|
|
21
24
|
credentials,
|
|
22
25
|
lastUsed: Date.now(),
|
|
23
26
|
});
|
|
@@ -29,29 +32,29 @@ export const accountManager = {
|
|
|
29
32
|
lastUsed: Date.now(),
|
|
30
33
|
requestCount: 0,
|
|
31
34
|
};
|
|
32
|
-
await StorageManager.upsertAccountInPool(newEntry);
|
|
35
|
+
await storage_1.StorageManager.upsertAccountInPool(newEntry);
|
|
33
36
|
}
|
|
34
37
|
},
|
|
35
38
|
/**
|
|
36
39
|
* Get access token
|
|
37
40
|
*/
|
|
38
41
|
async getCurrentAccessToken() {
|
|
39
|
-
const account = await StorageManager.getCurrentAccount();
|
|
42
|
+
const account = await storage_1.StorageManager.getCurrentAccount();
|
|
40
43
|
if (!account) {
|
|
41
|
-
return await oauth.getAccessToken();
|
|
44
|
+
return await oauth_1.oauth.getAccessToken();
|
|
42
45
|
}
|
|
43
46
|
const now = Date.now();
|
|
44
47
|
const expiryTime = account.credentials.expiry_date || 0;
|
|
45
48
|
const needsRefresh = expiryTime - now < 5 * 60 * 1000;
|
|
46
49
|
if (needsRefresh) {
|
|
47
|
-
const refreshResult = await oauth.refreshAccessToken(account.credentials.refresh_token);
|
|
50
|
+
const refreshResult = await oauth_1.oauth.refreshAccessToken(account.credentials.refresh_token);
|
|
48
51
|
if (refreshResult.success && refreshResult.accessToken) {
|
|
49
52
|
const updatedCredentials = {
|
|
50
53
|
...account.credentials,
|
|
51
54
|
access_token: refreshResult.accessToken,
|
|
52
55
|
expiry_date: refreshResult.expiryDate || Date.now() + 3600 * 1000,
|
|
53
56
|
};
|
|
54
|
-
await StorageManager.updateAccountInPool(account.email, {
|
|
57
|
+
await storage_1.StorageManager.updateAccountInPool(account.email, {
|
|
55
58
|
credentials: updatedCredentials,
|
|
56
59
|
});
|
|
57
60
|
return refreshResult.accessToken;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-manager.js","sourceRoot":"","sources":["../../src/auth/account-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG
|
|
1
|
+
{"version":3,"file":"account-manager.js","sourceRoot":"","sources":["../../src/auth/account-manager.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,gDAAoD;AACpD,mCAAgC;AAGnB,QAAA,cAAc,GAAG;IAC5B;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,WAAW,GAAG,MAAM,wBAAc,CAAC,oBAAoB,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,MAAM,QAAQ,GAAG,MAAM,aAAK,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,wBAAc,CAAC,eAAe,EAAE,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;QAElF,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,wBAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACvD,WAAW;gBACX,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;aACrB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAqB;gBACjC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,WAAW;gBACX,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;gBACpB,YAAY,EAAE,CAAC;aAChB,CAAC;YACF,MAAM,wBAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB;QACzB,MAAM,OAAO,GAAG,MAAM,wBAAc,CAAC,iBAAiB,EAAE,CAAC;QAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,MAAM,aAAK,CAAC,cAAc,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,UAAU,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAEtD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,aAAa,GAAG,MAAM,aAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAExF,IAAI,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;gBACvD,MAAM,kBAAkB,GAAqB;oBAC3C,GAAG,OAAO,CAAC,WAAW;oBACtB,YAAY,EAAE,aAAa,CAAC,WAAW;oBACvC,WAAW,EAAE,aAAa,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;iBAClE,CAAC;gBAEF,MAAM,wBAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE;oBACtD,WAAW,EAAE,kBAAkB;iBAChC,CAAC,CAAC;gBAEH,OAAO,aAAa,CAAC,WAAW,CAAC;YACnC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC;IAC1C,CAAC;CACF,CAAC"}
|
package/dist/auth/oauth.d.ts
CHANGED
package/dist/auth/oauth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAOrE,eAAO,MAAM,KAAK;IAChB;;OAEG;sBACqB,OAAO,CAAC,MAAM,CAAC;IA4BvC;;OAEG;qCAEa,MAAM,wBAEnB,OAAO,CAAC,kBAAkB,CAAC;IAkC9B;;OAEG;yBACwB,OAAO,CAAC,OAAO,CAAC;IAU3C;;OAEG;mBACkB,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAKhD,CAAC"}
|
package/dist/auth/oauth.js
CHANGED
|
@@ -1,27 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @license
|
|
3
4
|
* Copyright 2025 Yusuf
|
|
4
5
|
* SPDX-License-Identifier: MIT
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.oauth = void 0;
|
|
9
|
+
const google_auth_library_1 = require("google-auth-library");
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const storage_1 = require("../storage/storage");
|
|
12
|
+
const client = new google_auth_library_1.OAuth2Client({
|
|
13
|
+
clientId: constants_1.OAUTH_CLIENT_ID,
|
|
14
|
+
clientSecret: constants_1.OAUTH_CLIENT_SECRET,
|
|
12
15
|
});
|
|
13
|
-
|
|
16
|
+
exports.oauth = {
|
|
14
17
|
/**
|
|
15
18
|
* Get access token from stored credentials
|
|
16
19
|
*/
|
|
17
20
|
async getAccessToken() {
|
|
18
|
-
const credentials = await StorageManager.readOAuthCredentials();
|
|
21
|
+
const credentials = await storage_1.StorageManager.readOAuthCredentials();
|
|
19
22
|
if (!credentials) {
|
|
20
23
|
throw new Error('No OAuth credentials found. Please authenticate using Gemini CLI: gemini auth login');
|
|
21
24
|
}
|
|
22
25
|
const now = Date.now();
|
|
23
26
|
const expiryTime = credentials.expiry_date || 0;
|
|
24
|
-
const needsRefresh = expiryTime - now < TOKEN_EXPIRY_BUFFER_MS;
|
|
27
|
+
const needsRefresh = expiryTime - now < constants_1.TOKEN_EXPIRY_BUFFER_MS;
|
|
25
28
|
if (needsRefresh) {
|
|
26
29
|
const refreshResult = await this.refreshAccessToken(credentials.refresh_token);
|
|
27
30
|
if (!refreshResult.success) {
|
|
@@ -41,14 +44,14 @@ export const oauth = {
|
|
|
41
44
|
if (!credentials.access_token) {
|
|
42
45
|
throw new Error('No access token returned from refresh');
|
|
43
46
|
}
|
|
44
|
-
const existingCreds = await StorageManager.readOAuthCredentials();
|
|
47
|
+
const existingCreds = await storage_1.StorageManager.readOAuthCredentials();
|
|
45
48
|
const updatedCreds = {
|
|
46
49
|
...existingCreds,
|
|
47
50
|
access_token: credentials.access_token,
|
|
48
51
|
expiry_date: credentials.expiry_date || Date.now() + 3600 * 1000,
|
|
49
52
|
token_type: credentials.token_type || 'Bearer',
|
|
50
53
|
};
|
|
51
|
-
await StorageManager.writeOAuthCredentials(updatedCreds);
|
|
54
|
+
await storage_1.StorageManager.writeOAuthCredentials(updatedCreds);
|
|
52
55
|
return {
|
|
53
56
|
success: true,
|
|
54
57
|
accessToken: credentials.access_token,
|
|
@@ -57,7 +60,7 @@ export const oauth = {
|
|
|
57
60
|
}
|
|
58
61
|
catch (error) {
|
|
59
62
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
60
|
-
if (retryCount < MAX_REFRESH_RETRIES) {
|
|
63
|
+
if (retryCount < constants_1.MAX_REFRESH_RETRIES) {
|
|
61
64
|
await new Promise((resolve) => setTimeout(resolve, 1000 * (retryCount + 1)));
|
|
62
65
|
return this.refreshAccessToken(refreshToken, retryCount + 1);
|
|
63
66
|
}
|
package/dist/auth/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA;;;;GAIG
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6DAAmD;AACnD,4CAKsB;AACtB,gDAAoD;AAGpD,MAAM,MAAM,GAAG,IAAI,kCAAY,CAAC;IAC9B,QAAQ,EAAE,2BAAe;IACzB,YAAY,EAAE,+BAAmB;CAClC,CAAC,CAAC;AAEU,QAAA,KAAK,GAAG;IACnB;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,WAAW,GAAG,MAAM,wBAAc,CAAC,oBAAoB,EAAE,CAAC;QAEhE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,IAAI,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,UAAU,GAAG,GAAG,GAAG,kCAAsB,CAAC;QAE/D,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAE/E,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,mCAAmC,aAAa,CAAC,KAAK,0BAA0B,CACjF,CAAC;YACJ,CAAC;YAED,OAAO,aAAa,CAAC,WAAY,CAAC;QACpC,CAAC;QAED,OAAO,WAAW,CAAC,YAAY,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,YAAoB,EACpB,UAAU,GAAG,CAAC;QAEd,IAAI,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;YACvD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAE1D,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,wBAAc,CAAC,oBAAoB,EAAE,CAAC;YAClE,MAAM,YAAY,GAAqB;gBACrC,GAAG,aAAc;gBACjB,YAAY,EAAE,WAAW,CAAC,YAAY;gBACtC,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;gBAChE,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,QAAQ;aAC/C,CAAC;YAEF,MAAM,wBAAc,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAEzD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,UAAU,EAAE,WAAW,CAAC,WAAW,IAAI,SAAS;aACjD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,IAAI,UAAU,GAAG,+BAAmB,EAAE,CAAC;gBACrC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7E,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;IACjD,CAAC;CACF,CAAC"}
|
package/dist/cli/setup.js
CHANGED
|
@@ -1,14 +1,52 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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");
|
|
9
47
|
// Setup paths
|
|
10
|
-
const OPENCODE_CONFIG_DIR =
|
|
11
|
-
const OPENCODE_CONFIG_PATH =
|
|
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');
|
|
12
50
|
const MODELS_CONFIG = {
|
|
13
51
|
"gemini-cli-oauth": {
|
|
14
52
|
"name": "Gemini CLI",
|
|
@@ -44,8 +82,8 @@ const MODELS_CONFIG = {
|
|
|
44
82
|
}
|
|
45
83
|
};
|
|
46
84
|
// Helper for user input
|
|
47
|
-
|
|
48
|
-
const rl =
|
|
85
|
+
const readline_1 = __importDefault(require("readline"));
|
|
86
|
+
const rl = readline_1.default.createInterface({
|
|
49
87
|
input: process.stdin,
|
|
50
88
|
output: process.stdout
|
|
51
89
|
});
|
|
@@ -61,7 +99,7 @@ async function saveAccount(tokens, client) {
|
|
|
61
99
|
// 1. Update/Create google_accounts.json (Multi-account storage)
|
|
62
100
|
let accounts = [];
|
|
63
101
|
try {
|
|
64
|
-
const data = await
|
|
102
|
+
const data = await promises_1.default.readFile(constants_1.GOOGLE_ACCOUNTS_PATH, 'utf-8');
|
|
65
103
|
const parsed = JSON.parse(data);
|
|
66
104
|
if (Array.isArray(parsed)) {
|
|
67
105
|
accounts = parsed;
|
|
@@ -83,16 +121,16 @@ async function saveAccount(tokens, client) {
|
|
|
83
121
|
tokens,
|
|
84
122
|
last_active: Date.now()
|
|
85
123
|
});
|
|
86
|
-
await
|
|
124
|
+
await promises_1.default.writeFile(constants_1.GOOGLE_ACCOUNTS_PATH, JSON.stringify(accounts, null, 2));
|
|
87
125
|
console.log(`✅ Saved to account pool (${accounts.length} accounts total)`);
|
|
88
126
|
// 2. Update oauth_creds.json (Current active account)
|
|
89
127
|
// This ensures compatibility with Gemini CLI single-account mode
|
|
90
|
-
await
|
|
128
|
+
await promises_1.default.writeFile(constants_1.OAUTH_CREDS_PATH, JSON.stringify(tokens, null, 2));
|
|
91
129
|
console.log('✅ Set as active account');
|
|
92
130
|
}
|
|
93
131
|
async function listAccounts() {
|
|
94
132
|
try {
|
|
95
|
-
const data = await
|
|
133
|
+
const data = await promises_1.default.readFile(constants_1.GOOGLE_ACCOUNTS_PATH, 'utf-8');
|
|
96
134
|
const accounts = JSON.parse(data);
|
|
97
135
|
console.log('\n👥 Registered Accounts:');
|
|
98
136
|
accounts.forEach((acc, idx) => {
|
|
@@ -108,11 +146,11 @@ async function performLoopbackLogin() {
|
|
|
108
146
|
console.log('\n🔐 Initiating Native Google Login (Loopback Flow)...');
|
|
109
147
|
return new Promise((resolve, reject) => {
|
|
110
148
|
let client;
|
|
111
|
-
const server =
|
|
149
|
+
const server = http_1.default.createServer(async (req, res) => {
|
|
112
150
|
try {
|
|
113
151
|
if (!req.url)
|
|
114
152
|
return;
|
|
115
|
-
const query =
|
|
153
|
+
const query = url_1.default.parse(req.url, true).query;
|
|
116
154
|
if (query.code) {
|
|
117
155
|
const code = query.code;
|
|
118
156
|
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
@@ -150,19 +188,19 @@ async function performLoopbackLogin() {
|
|
|
150
188
|
const port = address.port;
|
|
151
189
|
const redirectUri = `http://localhost:${port}`;
|
|
152
190
|
console.log(`🚀 Local server listening on port ${port}`);
|
|
153
|
-
client = new OAuth2Client({
|
|
154
|
-
clientId: OAUTH_CLIENT_ID,
|
|
155
|
-
clientSecret: OAUTH_CLIENT_SECRET,
|
|
191
|
+
client = new google_auth_library_1.OAuth2Client({
|
|
192
|
+
clientId: constants_1.OAUTH_CLIENT_ID,
|
|
193
|
+
clientSecret: constants_1.OAUTH_CLIENT_SECRET,
|
|
156
194
|
redirectUri: redirectUri
|
|
157
195
|
});
|
|
158
196
|
const authorizeUrl = client.generateAuthUrl({
|
|
159
197
|
access_type: 'offline',
|
|
160
|
-
scope: OAUTH_SCOPES,
|
|
198
|
+
scope: constants_1.OAUTH_SCOPES,
|
|
161
199
|
prompt: 'consent'
|
|
162
200
|
});
|
|
163
201
|
console.log('\n👉 Opening browser to authorize...');
|
|
164
202
|
console.log(` URL: ${authorizeUrl}`);
|
|
165
|
-
const { exec } = await
|
|
203
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
166
204
|
const start = (process.platform == 'darwin' ? 'open' : process.platform == 'win32' ? 'start' : 'xdg-open');
|
|
167
205
|
exec(`${start} "${authorizeUrl}"`);
|
|
168
206
|
});
|
|
@@ -170,10 +208,10 @@ async function performLoopbackLogin() {
|
|
|
170
208
|
}
|
|
171
209
|
async function updateOpencodeConfig() {
|
|
172
210
|
try {
|
|
173
|
-
await
|
|
211
|
+
await promises_1.default.mkdir(OPENCODE_CONFIG_DIR, { recursive: true });
|
|
174
212
|
let config = {};
|
|
175
213
|
try {
|
|
176
|
-
const content = await
|
|
214
|
+
const content = await promises_1.default.readFile(OPENCODE_CONFIG_PATH, 'utf-8');
|
|
177
215
|
config = JSON.parse(content);
|
|
178
216
|
}
|
|
179
217
|
catch (e) {
|
|
@@ -188,7 +226,7 @@ async function updateOpencodeConfig() {
|
|
|
188
226
|
if (!config.plugin.includes('opencode-gemini-cli-oauth')) {
|
|
189
227
|
config.plugin.push('opencode-gemini-cli-oauth');
|
|
190
228
|
}
|
|
191
|
-
await
|
|
229
|
+
await promises_1.default.writeFile(OPENCODE_CONFIG_PATH, JSON.stringify(config, null, 2));
|
|
192
230
|
console.log('✅ Configuration updated successfully!');
|
|
193
231
|
}
|
|
194
232
|
catch (error) {
|
|
@@ -196,7 +234,7 @@ async function updateOpencodeConfig() {
|
|
|
196
234
|
}
|
|
197
235
|
}
|
|
198
236
|
async function main() {
|
|
199
|
-
await
|
|
237
|
+
await promises_1.default.mkdir(constants_1.GEMINI_DIR, { recursive: true });
|
|
200
238
|
console.log('🚀 OpenCode Gemini CLI OAuth Manager');
|
|
201
239
|
console.log('====================================');
|
|
202
240
|
await listAccounts();
|
package/dist/cli/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @license
|
|
3
4
|
* Copyright 2025 Yusuf
|
|
4
5
|
* SPDX-License-Identifier: MIT
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.MAX_REFRESH_RETRIES = exports.RATE_LIMIT_RETRY_DELAY_MS = exports.TOKEN_EXPIRY_BUFFER_MS = exports.GEMINI_API_BASE = exports.ACCOUNT_POOL_PATH = exports.PLUGIN_STORAGE_DIR = exports.GOOGLE_ACCOUNTS_PATH = exports.OAUTH_CREDS_PATH = exports.GEMINI_DIR = exports.OAUTH_SCOPES = exports.OAUTH_CLIENT_SECRET = exports.OAUTH_CLIENT_ID = void 0;
|
|
12
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
13
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
14
|
/**
|
|
9
15
|
* OAuth2 Client credentials from Gemini CLI
|
|
10
16
|
* Source: @google/gemini-cli-core/dist/src/code_assist/oauth2.js
|
|
@@ -12,12 +18,12 @@ import path from 'node:path';
|
|
|
12
18
|
* These credentials are safe to embed as this is an "installed application"
|
|
13
19
|
* per Google OAuth2 guidelines: https://developers.google.com/identity/protocols/oauth2#installed
|
|
14
20
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
21
|
+
exports.OAUTH_CLIENT_ID = '681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';
|
|
22
|
+
exports.OAUTH_CLIENT_SECRET = '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';
|
|
17
23
|
/**
|
|
18
24
|
* OAuth scopes required for Gemini API access
|
|
19
25
|
*/
|
|
20
|
-
|
|
26
|
+
exports.OAUTH_SCOPES = [
|
|
21
27
|
'https://www.googleapis.com/auth/cloud-platform',
|
|
22
28
|
'https://www.googleapis.com/auth/userinfo.email',
|
|
23
29
|
'https://www.googleapis.com/auth/userinfo.profile',
|
|
@@ -25,37 +31,37 @@ export const OAUTH_SCOPES = [
|
|
|
25
31
|
/**
|
|
26
32
|
* Gemini CLI storage directory
|
|
27
33
|
*/
|
|
28
|
-
|
|
34
|
+
exports.GEMINI_DIR = node_path_1.default.join(node_os_1.default.homedir(), '.gemini');
|
|
29
35
|
/**
|
|
30
36
|
* OAuth credentials file path (compatible with Gemini CLI)
|
|
31
37
|
*/
|
|
32
|
-
|
|
38
|
+
exports.OAUTH_CREDS_PATH = node_path_1.default.join(exports.GEMINI_DIR, 'oauth_creds.json');
|
|
33
39
|
/**
|
|
34
40
|
* Google accounts file path (for multi-account support)
|
|
35
41
|
*/
|
|
36
|
-
|
|
42
|
+
exports.GOOGLE_ACCOUNTS_PATH = node_path_1.default.join(exports.GEMINI_DIR, 'google_accounts.json');
|
|
37
43
|
/**
|
|
38
44
|
* Plugin storage directory
|
|
39
45
|
*/
|
|
40
|
-
|
|
46
|
+
exports.PLUGIN_STORAGE_DIR = node_path_1.default.join(exports.GEMINI_DIR, 'opencode-plugin');
|
|
41
47
|
/**
|
|
42
48
|
* Account pool storage file
|
|
43
49
|
*/
|
|
44
|
-
|
|
50
|
+
exports.ACCOUNT_POOL_PATH = node_path_1.default.join(exports.PLUGIN_STORAGE_DIR, 'account_pool.json');
|
|
45
51
|
/**
|
|
46
52
|
* Generative Language API endpoint
|
|
47
53
|
*/
|
|
48
|
-
|
|
54
|
+
exports.GEMINI_API_BASE = 'https://generativelanguage.googleapis.com';
|
|
49
55
|
/**
|
|
50
56
|
* Token expiry buffer (refresh 5 minutes before expiry)
|
|
51
57
|
*/
|
|
52
|
-
|
|
58
|
+
exports.TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1000;
|
|
53
59
|
/**
|
|
54
60
|
* Rate limit retry delay (milliseconds)
|
|
55
61
|
*/
|
|
56
|
-
|
|
62
|
+
exports.RATE_LIMIT_RETRY_DELAY_MS = 2000;
|
|
57
63
|
/**
|
|
58
64
|
* Maximum retry attempts for token refresh
|
|
59
65
|
*/
|
|
60
|
-
|
|
66
|
+
exports.MAX_REFRESH_RETRIES = 3;
|
|
61
67
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,sDAAyB;AACzB,0DAA6B;AAE7B;;;;;;GAMG;AACU,QAAA,eAAe,GAAG,0EAA0E,CAAC;AAC7F,QAAA,mBAAmB,GAAG,qCAAqC,CAAC;AAEzE;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,gDAAgD;IAChD,gDAAgD;IAChD,kDAAkD;CACnD,CAAC;AAEF;;GAEG;AACU,QAAA,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAE7D;;GAEG;AACU,QAAA,gBAAgB,GAAG,mBAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,kBAAkB,CAAC,CAAC;AAE1E;;GAEG;AACU,QAAA,oBAAoB,GAAG,mBAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,sBAAsB,CAAC,CAAC;AAElF;;GAEG;AACU,QAAA,kBAAkB,GAAG,mBAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,iBAAiB,CAAC,CAAC;AAE3E;;GAEG;AACU,QAAA,iBAAiB,GAAG,mBAAI,CAAC,IAAI,CAAC,0BAAkB,EAAE,mBAAmB,CAAC,CAAC;AAEpF;;GAEG;AACU,QAAA,eAAe,GAAG,2CAA2C,CAAC;AAE3E;;GAEG;AACU,QAAA,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpD;;GAEG;AACU,QAAA,yBAAyB,GAAG,IAAI,CAAC;AAE9C;;GAEG;AACU,QAAA,mBAAmB,GAAG,CAAC,CAAC"}
|
package/dist/index-minimal.js
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
|
|
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; } });
|
|
2
7
|
//# sourceMappingURL=index-minimal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-minimal.js","sourceRoot":"","sources":["../src/index-minimal.ts"],"names":[],"mappings":"AAAA,
|
|
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.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.metadata = exports.GeminiCLIOAuthPlugin = void 0;
|
|
1
4
|
/**
|
|
2
5
|
* Simplified entry point (no classes)
|
|
3
6
|
*/
|
|
4
|
-
|
|
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; } });
|
|
5
10
|
//# sourceMappingURL=index-simple.js.map
|
package/dist/index-simple.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-simple.js","sourceRoot":"","sources":["../src/index-simple.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,
|
|
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/index.d.ts
CHANGED
|
@@ -13,8 +13,6 @@
|
|
|
13
13
|
* Copyright 2025 Yusuf
|
|
14
14
|
* SPDX-License-Identifier: MIT
|
|
15
15
|
*/
|
|
16
|
-
import loadPlugin from './plugin
|
|
17
|
-
export
|
|
18
|
-
export declare const load: typeof loadPlugin;
|
|
19
|
-
export declare const geminiCliOAuth: typeof loadPlugin;
|
|
16
|
+
import loadPlugin from './plugin';
|
|
17
|
+
export = loadPlugin;
|
|
20
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AAEH;;;;GAIG;AAEH,OAAO,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AAEH;;;;GAIG;AAEH,OAAO,UAAU,MAAM,UAAU,CAAC;AAGlC,SAAS,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @license
|
|
3
4
|
* Copyright 2025 Yusuf
|
|
4
5
|
* SPDX-License-Identifier: MIT
|
|
5
6
|
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
6
10
|
/**
|
|
7
11
|
* OpenCode Gemini CLI OAuth Plugin
|
|
8
12
|
*
|
|
@@ -13,10 +17,6 @@
|
|
|
13
17
|
* Copyright 2025 Yusuf
|
|
14
18
|
* SPDX-License-Identifier: MIT
|
|
15
19
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export default loadPlugin;
|
|
19
|
-
// Named exports for compatibility
|
|
20
|
-
export const load = loadPlugin;
|
|
21
|
-
export const geminiCliOAuth = loadPlugin;
|
|
20
|
+
const plugin_1 = __importDefault(require("./plugin"));
|
|
21
|
+
module.exports = plugin_1.default;
|
|
22
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;AAEH;;;;GAIG;AAEH;;;;GAIG;AAEH,sDAAkC;AAGlC,iBAAS,gBAAU,CAAC"}
|
package/dist/plugin-minimal.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Minimal test - just to see if plugin structure is correct
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.metadata = exports.GeminiCLIOAuthPlugin = void 0;
|
|
7
|
+
const GeminiCLIOAuthPlugin = async ({ client, directory }) => {
|
|
5
8
|
console.log('🚀 Minimal Gemini CLI OAuth plugin loading...');
|
|
6
9
|
return {
|
|
7
10
|
auth: {
|
|
@@ -19,7 +22,8 @@ export const GeminiCLIOAuthPlugin = async ({ client, directory }) => {
|
|
|
19
22
|
},
|
|
20
23
|
};
|
|
21
24
|
};
|
|
22
|
-
|
|
25
|
+
exports.GeminiCLIOAuthPlugin = GeminiCLIOAuthPlugin;
|
|
26
|
+
exports.metadata = {
|
|
23
27
|
name: 'opencode-gemini-cli-oauth',
|
|
24
28
|
version: '1.0.2-minimal',
|
|
25
29
|
description: 'Minimal test',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-minimal.js","sourceRoot":"","sources":["../src/plugin-minimal.ts"],"names":[],"mappings":"AAAA;;GAEG
|
|
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.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @license
|
|
3
4
|
* Copyright 2025 Yusuf
|
|
@@ -5,19 +6,24 @@
|
|
|
5
6
|
*
|
|
6
7
|
* Simplified OpenCode Plugin for Gemini CLI OAuth (No Classes)
|
|
7
8
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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");
|
|
12
18
|
const OAUTH_CLIENT_ID = '681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';
|
|
13
19
|
const OAUTH_CLIENT_SECRET = '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';
|
|
14
|
-
const OAUTH_CREDS_PATH =
|
|
20
|
+
const OAUTH_CREDS_PATH = node_path_1.default.join(node_os_1.default.homedir(), '.gemini/oauth_creds.json');
|
|
15
21
|
/**
|
|
16
22
|
* Get OAuth access token from Gemini CLI credentials
|
|
17
23
|
*/
|
|
18
24
|
async function getAccessToken() {
|
|
19
25
|
try {
|
|
20
|
-
const data = await
|
|
26
|
+
const data = await promises_1.default.readFile(OAUTH_CREDS_PATH, 'utf-8');
|
|
21
27
|
const credentials = JSON.parse(data);
|
|
22
28
|
// Check if token needs refresh
|
|
23
29
|
const now = Date.now();
|
|
@@ -25,14 +31,14 @@ async function getAccessToken() {
|
|
|
25
31
|
const needsRefresh = expiryTime - now < 5 * 60 * 1000; // 5 min buffer
|
|
26
32
|
if (needsRefresh && credentials.refresh_token) {
|
|
27
33
|
// Refresh token
|
|
28
|
-
const client = new OAuth2Client(OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET);
|
|
34
|
+
const client = new google_auth_library_1.OAuth2Client(OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET);
|
|
29
35
|
client.setCredentials({ refresh_token: credentials.refresh_token });
|
|
30
36
|
const { credentials: refreshed } = await client.refreshAccessToken();
|
|
31
37
|
if (refreshed.access_token) {
|
|
32
38
|
// Update stored credentials
|
|
33
39
|
credentials.access_token = refreshed.access_token;
|
|
34
40
|
credentials.expiry_date = refreshed.expiry_date || Date.now() + 3600 * 1000;
|
|
35
|
-
await
|
|
41
|
+
await promises_1.default.writeFile(OAUTH_CREDS_PATH, JSON.stringify(credentials, null, 2), 'utf-8');
|
|
36
42
|
return refreshed.access_token;
|
|
37
43
|
}
|
|
38
44
|
}
|
|
@@ -66,11 +72,11 @@ function createAuthFetch() {
|
|
|
66
72
|
/**
|
|
67
73
|
* OpenCode plugin export (following Antigravity pattern)
|
|
68
74
|
*/
|
|
69
|
-
|
|
75
|
+
const GeminiCLIOAuthPlugin = async ({ client, directory }) => {
|
|
70
76
|
console.log('🚀 Loading Gemini CLI OAuth plugin...');
|
|
71
77
|
// Verify credentials exist
|
|
72
78
|
try {
|
|
73
|
-
await
|
|
79
|
+
await promises_1.default.access(OAUTH_CREDS_PATH);
|
|
74
80
|
console.log('✅ OAuth credentials found');
|
|
75
81
|
}
|
|
76
82
|
catch (error) {
|
|
@@ -109,7 +115,8 @@ export const GeminiCLIOAuthPlugin = async ({ client, directory }) => {
|
|
|
109
115
|
},
|
|
110
116
|
};
|
|
111
117
|
};
|
|
112
|
-
|
|
118
|
+
exports.GeminiCLIOAuthPlugin = GeminiCLIOAuthPlugin;
|
|
119
|
+
exports.metadata = {
|
|
113
120
|
name: 'opencode-gemini-cli-oauth',
|
|
114
121
|
version: '1.0.1-simplified',
|
|
115
122
|
description: 'Simplified Gemini CLI OAuth plugin',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-simple.js","sourceRoot":"","sources":["../src/plugin-simple.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG
|
|
1
|
+
{"version":3,"file":"plugin-simple.js","sourceRoot":"","sources":["../src/plugin-simple.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAe7C,wBAA8B,UAAU,CAAC,OAAO,EAAE,aAAa;;;0BAiDjC,GAAG,YAAY,MAAM;;2BAvCV,WAAW,GAAG,GAAG,SAAS,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;GAuEjG"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,11 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @license
|
|
3
4
|
* Copyright 2025 Yusuf
|
|
4
5
|
* SPDX-License-Identifier: MIT
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.default = loadPlugin;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const oauth_1 = require("./auth/oauth"); // Remove .js
|
|
44
|
+
const LOG_FILE = '/tmp/gemini_plugin_debug.log';
|
|
45
|
+
function log(message) {
|
|
46
|
+
const timestamp = new Date().toISOString();
|
|
47
|
+
const logMessage = `[${timestamp}] ${message}\n`;
|
|
48
|
+
try {
|
|
49
|
+
fs.appendFileSync(LOG_FILE, logMessage);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
// Fallback to console if fs fails
|
|
53
|
+
console.log(message);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function loadPlugin(context) {
|
|
57
|
+
log('🚀 [GeminiPlugin v1.1.22] CJS Loader Started...');
|
|
58
|
+
console.log('🚀 [GeminiPlugin v1.1.22] Console Log Test');
|
|
9
59
|
// 1. Capture original fetcher
|
|
10
60
|
const nextFetch = (context.client && context.client.fetch)
|
|
11
61
|
? context.client.fetch.bind(context.client)
|
|
@@ -13,18 +63,14 @@ export default async function loadPlugin(context) {
|
|
|
13
63
|
// 2. Define the interceptor
|
|
14
64
|
const interceptedFetch = async (input, init) => {
|
|
15
65
|
const urlStr = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
|
|
16
|
-
|
|
66
|
+
log(`📡 Intercepting: ${urlStr}`);
|
|
17
67
|
try {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
console.log('🔑 [GeminiPlugin] Token retrieved successfully');
|
|
21
|
-
// 4. Clone init
|
|
68
|
+
const token = await oauth_1.oauth.getAccessToken();
|
|
69
|
+
log('🔑 Token OK');
|
|
22
70
|
const newInit = { ...init };
|
|
23
71
|
const headers = new Headers(newInit.headers);
|
|
24
|
-
// 5. Inject Header
|
|
25
72
|
headers.set('Authorization', `Bearer ${token}`);
|
|
26
73
|
newInit.headers = headers;
|
|
27
|
-
// Remove API key query param
|
|
28
74
|
let targetInput = input;
|
|
29
75
|
if (typeof input === 'string' && input.includes('key=')) {
|
|
30
76
|
const urlObj = new URL(input);
|
|
@@ -36,13 +82,12 @@ export default async function loadPlugin(context) {
|
|
|
36
82
|
urlObj.searchParams.delete('key');
|
|
37
83
|
targetInput = urlObj;
|
|
38
84
|
}
|
|
39
|
-
console.log(`📤 [GeminiPlugin] Forwarding request with Auth header`);
|
|
40
85
|
const response = await nextFetch(targetInput, newInit);
|
|
41
|
-
|
|
86
|
+
log(`✅ Response: ${response.status}`);
|
|
42
87
|
return response;
|
|
43
88
|
}
|
|
44
89
|
catch (error) {
|
|
45
|
-
|
|
90
|
+
log(`❌ Error: ${error}`);
|
|
46
91
|
return nextFetch(input, init);
|
|
47
92
|
}
|
|
48
93
|
};
|
|
@@ -50,8 +95,7 @@ export default async function loadPlugin(context) {
|
|
|
50
95
|
auth: {
|
|
51
96
|
provider: 'gemini-cli-oauth',
|
|
52
97
|
loader: async (getAuth, provider) => {
|
|
53
|
-
|
|
54
|
-
// Return minimal structure required
|
|
98
|
+
log(`🔌 Initializing auth strategy for ${provider}`);
|
|
55
99
|
return {
|
|
56
100
|
apiKey: 'AIzaSyDummyTokenForGeminiCliOAuthBypassValidation',
|
|
57
101
|
fetch: interceptedFetch
|
|
@@ -68,9 +112,9 @@ export default async function loadPlugin(context) {
|
|
|
68
112
|
method: "auto",
|
|
69
113
|
callback: async () => {
|
|
70
114
|
try {
|
|
71
|
-
const valid = await oauth.verifyCredentials();
|
|
115
|
+
const valid = await oauth_1.oauth.verifyCredentials();
|
|
72
116
|
if (valid) {
|
|
73
|
-
return { type: "success", email: (await oauth.getUserInfo()).email };
|
|
117
|
+
return { type: "success", email: (await oauth_1.oauth.getUserInfo()).email };
|
|
74
118
|
}
|
|
75
119
|
}
|
|
76
120
|
catch (_a) { }
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Yusuf
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
|
-
import type { OAuthCredentials, GoogleAccount, AccountPool, AccountPoolEntry } from '../types
|
|
6
|
+
import type { OAuthCredentials, GoogleAccount, AccountPool, AccountPoolEntry } from '../types';
|
|
7
7
|
/**
|
|
8
8
|
* Storage manager for OAuth credentials and account pool
|
|
9
9
|
*/
|
|
@@ -1 +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,
|
|
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"}
|
package/dist/storage/storage.js
CHANGED
|
@@ -1,27 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @license
|
|
3
4
|
* Copyright 2025 Yusuf
|
|
4
5
|
* SPDX-License-Identifier: MIT
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.StorageManager = void 0;
|
|
12
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
13
|
+
const constants_1 = require("../constants");
|
|
8
14
|
/**
|
|
9
15
|
* Storage manager for OAuth credentials and account pool
|
|
10
16
|
*/
|
|
11
|
-
|
|
17
|
+
exports.StorageManager = {
|
|
12
18
|
/**
|
|
13
19
|
* Ensure storage directories exist
|
|
14
20
|
*/
|
|
15
21
|
async ensureDirectories() {
|
|
16
|
-
await
|
|
17
|
-
await
|
|
22
|
+
await promises_1.default.mkdir(constants_1.GEMINI_DIR, { recursive: true });
|
|
23
|
+
await promises_1.default.mkdir(constants_1.PLUGIN_STORAGE_DIR, { recursive: true });
|
|
18
24
|
},
|
|
19
25
|
/**
|
|
20
26
|
* Read OAuth credentials from Gemini CLI storage
|
|
21
27
|
*/
|
|
22
28
|
async readOAuthCredentials() {
|
|
23
29
|
try {
|
|
24
|
-
const data = await
|
|
30
|
+
const data = await promises_1.default.readFile(constants_1.OAUTH_CREDS_PATH, 'utf-8');
|
|
25
31
|
return JSON.parse(data);
|
|
26
32
|
}
|
|
27
33
|
catch (error) {
|
|
@@ -35,15 +41,15 @@ export const StorageManager = {
|
|
|
35
41
|
* Write OAuth credentials to Gemini CLI storage
|
|
36
42
|
*/
|
|
37
43
|
async writeOAuthCredentials(credentials) {
|
|
38
|
-
await StorageManager.ensureDirectories();
|
|
39
|
-
await
|
|
44
|
+
await exports.StorageManager.ensureDirectories();
|
|
45
|
+
await promises_1.default.writeFile(constants_1.OAUTH_CREDS_PATH, JSON.stringify(credentials, null, 2), 'utf-8');
|
|
40
46
|
},
|
|
41
47
|
/**
|
|
42
48
|
* Read Google accounts list from Gemini CLI
|
|
43
49
|
*/
|
|
44
50
|
async readGoogleAccounts() {
|
|
45
51
|
try {
|
|
46
|
-
const data = await
|
|
52
|
+
const data = await promises_1.default.readFile(constants_1.GOOGLE_ACCOUNTS_PATH, 'utf-8');
|
|
47
53
|
const parsed = JSON.parse(data);
|
|
48
54
|
return parsed.accounts || [];
|
|
49
55
|
}
|
|
@@ -59,7 +65,7 @@ export const StorageManager = {
|
|
|
59
65
|
*/
|
|
60
66
|
async readAccountPool() {
|
|
61
67
|
try {
|
|
62
|
-
const data = await
|
|
68
|
+
const data = await promises_1.default.readFile(constants_1.ACCOUNT_POOL_PATH, 'utf-8');
|
|
63
69
|
return JSON.parse(data);
|
|
64
70
|
}
|
|
65
71
|
catch (error) {
|
|
@@ -73,28 +79,28 @@ export const StorageManager = {
|
|
|
73
79
|
* Write account pool
|
|
74
80
|
*/
|
|
75
81
|
async writeAccountPool(pool) {
|
|
76
|
-
await StorageManager.ensureDirectories();
|
|
77
|
-
await
|
|
82
|
+
await exports.StorageManager.ensureDirectories();
|
|
83
|
+
await promises_1.default.writeFile(constants_1.ACCOUNT_POOL_PATH, JSON.stringify(pool, null, 2), 'utf-8');
|
|
78
84
|
},
|
|
79
85
|
/**
|
|
80
86
|
* Update account in pool
|
|
81
87
|
*/
|
|
82
88
|
async updateAccountInPool(email, updates) {
|
|
83
|
-
const pool = await StorageManager.readAccountPool();
|
|
89
|
+
const pool = await exports.StorageManager.readAccountPool();
|
|
84
90
|
const accountIndex = pool.accounts.findIndex((acc) => acc.email === email);
|
|
85
91
|
if (accountIndex >= 0) {
|
|
86
92
|
pool.accounts[accountIndex] = {
|
|
87
93
|
...pool.accounts[accountIndex],
|
|
88
94
|
...updates,
|
|
89
95
|
};
|
|
90
|
-
await StorageManager.writeAccountPool(pool);
|
|
96
|
+
await exports.StorageManager.writeAccountPool(pool);
|
|
91
97
|
}
|
|
92
98
|
},
|
|
93
99
|
/**
|
|
94
100
|
* Add or update account in pool
|
|
95
101
|
*/
|
|
96
102
|
async upsertAccountInPool(entry) {
|
|
97
|
-
const pool = await StorageManager.readAccountPool();
|
|
103
|
+
const pool = await exports.StorageManager.readAccountPool();
|
|
98
104
|
const accountIndex = pool.accounts.findIndex((acc) => acc.email === entry.email);
|
|
99
105
|
if (accountIndex >= 0) {
|
|
100
106
|
pool.accounts[accountIndex] = entry;
|
|
@@ -102,21 +108,21 @@ export const StorageManager = {
|
|
|
102
108
|
else {
|
|
103
109
|
pool.accounts.push(entry);
|
|
104
110
|
}
|
|
105
|
-
await StorageManager.writeAccountPool(pool);
|
|
111
|
+
await exports.StorageManager.writeAccountPool(pool);
|
|
106
112
|
},
|
|
107
113
|
/**
|
|
108
114
|
* Remove account from pool
|
|
109
115
|
*/
|
|
110
116
|
async removeAccountFromPool(email) {
|
|
111
|
-
const pool = await StorageManager.readAccountPool();
|
|
117
|
+
const pool = await exports.StorageManager.readAccountPool();
|
|
112
118
|
pool.accounts = pool.accounts.filter((acc) => acc.email !== email);
|
|
113
|
-
await StorageManager.writeAccountPool(pool);
|
|
119
|
+
await exports.StorageManager.writeAccountPool(pool);
|
|
114
120
|
},
|
|
115
121
|
/**
|
|
116
122
|
* Get current active account from pool
|
|
117
123
|
*/
|
|
118
124
|
async getCurrentAccount() {
|
|
119
|
-
const pool = await StorageManager.readAccountPool();
|
|
125
|
+
const pool = await exports.StorageManager.readAccountPool();
|
|
120
126
|
if (pool.accounts.length === 0) {
|
|
121
127
|
return null;
|
|
122
128
|
}
|
|
@@ -126,12 +132,12 @@ export const StorageManager = {
|
|
|
126
132
|
* Rotate to next account in pool
|
|
127
133
|
*/
|
|
128
134
|
async rotateToNextAccount() {
|
|
129
|
-
const pool = await StorageManager.readAccountPool();
|
|
135
|
+
const pool = await exports.StorageManager.readAccountPool();
|
|
130
136
|
if (pool.accounts.length === 0) {
|
|
131
137
|
return null;
|
|
132
138
|
}
|
|
133
139
|
pool.currentIndex = (pool.currentIndex + 1) % pool.accounts.length;
|
|
134
|
-
await StorageManager.writeAccountPool(pool);
|
|
140
|
+
await exports.StorageManager.writeAccountPool(pool);
|
|
135
141
|
return pool.accounts[pool.currentIndex];
|
|
136
142
|
}
|
|
137
143
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-gemini-cli-oauth",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.22",
|
|
4
4
|
"description": "OpenCode plugin for Gemini CLI OAuth authentication - use Google account quota without API keys",
|
|
5
|
-
"type": "module",
|
|
6
5
|
"main": "dist/index.js",
|
|
7
6
|
"types": "dist/index.d.ts",
|
|
8
7
|
"scripts": {
|