opencode-gemini-cli-oauth 1.1.10 → 1.1.12

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.
@@ -3,48 +3,14 @@
3
3
  * Copyright 2025 Yusuf
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
- import type { AccountPoolEntry } from '../types.js';
7
- /**
8
- * Account manager for multi-account rotation and quota management
9
- */
10
- export declare class AccountManager {
11
- private oauthManager;
12
- constructor();
6
+ export declare const accountManager: {
13
7
  /**
14
- * Initialize account pool from Gemini CLI credentials
8
+ * Initialize account pool
15
9
  */
16
10
  initialize(): Promise<void>;
17
11
  /**
18
- * Get current account from pool
19
- */
20
- getCurrentAccount(): Promise<AccountPoolEntry | null>;
21
- /**
22
- * Get access token for current account
12
+ * Get access token
23
13
  */
24
14
  getCurrentAccessToken(): Promise<string>;
25
- /**
26
- * Rotate to next account in pool
27
- */
28
- rotateAccount(): Promise<AccountPoolEntry | null>;
29
- /**
30
- * Mark account as rate limited
31
- */
32
- markAccountRateLimited(email: string, retryAfterSeconds: number): Promise<void>;
33
- /**
34
- * Get next available account (skips rate-limited accounts)
35
- */
36
- getNextAvailableAccount(): Promise<AccountPoolEntry | null>;
37
- /**
38
- * Increment request count for current account
39
- */
40
- incrementRequestCount(): Promise<void>;
41
- /**
42
- * Get account pool statistics
43
- */
44
- getPoolStats(): Promise<{
45
- totalAccounts: number;
46
- availableAccounts: number;
47
- rateLimitedAccounts: number;
48
- }>;
49
- }
15
+ };
50
16
  //# sourceMappingURL=account-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-manager.d.ts","sourceRoot":"","sources":["../../src/auth/account-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAEtE;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAe;;IAMnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCjC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAI3D;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAqC9C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAIvD;;OAEG;IACG,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrF;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAoBjE;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CAcH"}
1
+ {"version":3,"file":"account-manager.d.ts","sourceRoot":"","sources":["../../src/auth/account-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,eAAO,MAAM,cAAc;IACzB;;OAEG;kBACiB,OAAO,CAAC,IAAI,CAAC;IAwBjC;;OAEG;6BAC4B,OAAO,CAAC,MAAM,CAAC;CA+B/C,CAAC"}
@@ -4,38 +4,25 @@
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
6
  import { StorageManager } from '../storage/storage.js';
7
- import { OAuthManager } from './oauth.js';
8
- /**
9
- * Account manager for multi-account rotation and quota management
10
- */
11
- export class AccountManager {
12
- oauthManager;
13
- constructor() {
14
- this.oauthManager = new OAuthManager();
15
- }
7
+ import { oauth } from './oauth.js';
8
+ export const accountManager = {
16
9
  /**
17
- * Initialize account pool from Gemini CLI credentials
10
+ * Initialize account pool
18
11
  */
19
12
  async initialize() {
20
13
  const credentials = await StorageManager.readOAuthCredentials();
21
- if (!credentials) {
22
- console.warn('⚠️ No OAuth credentials found. Run: gemini auth login');
14
+ if (!credentials)
23
15
  return;
24
- }
25
- // Get user info
26
- const userInfo = await this.oauthManager.getUserInfo();
27
- // Check if account already exists in pool
16
+ const userInfo = await oauth.getUserInfo();
28
17
  const pool = await StorageManager.readAccountPool();
29
18
  const existingAccount = pool.accounts.find((acc) => acc.email === userInfo.email);
30
19
  if (existingAccount) {
31
- // Update existing account
32
20
  await StorageManager.updateAccountInPool(userInfo.email, {
33
21
  credentials,
34
22
  lastUsed: Date.now(),
35
23
  });
36
24
  }
37
25
  else {
38
- // Add new account
39
26
  const newEntry = {
40
27
  email: userInfo.email,
41
28
  credentials,
@@ -44,30 +31,21 @@ export class AccountManager {
44
31
  };
45
32
  await StorageManager.upsertAccountInPool(newEntry);
46
33
  }
47
- }
48
- /**
49
- * Get current account from pool
50
- */
51
- async getCurrentAccount() {
52
- return await StorageManager.getCurrentAccount();
53
- }
34
+ },
54
35
  /**
55
- * Get access token for current account
36
+ * Get access token
56
37
  */
57
38
  async getCurrentAccessToken() {
58
- const account = await this.getCurrentAccount();
39
+ const account = await StorageManager.getCurrentAccount();
59
40
  if (!account) {
60
- // Fallback to default OAuth credentials
61
- return await this.oauthManager.getAccessToken();
41
+ return await oauth.getAccessToken();
62
42
  }
63
- // Check if token needs refresh
64
43
  const now = Date.now();
65
44
  const expiryTime = account.credentials.expiry_date || 0;
66
- const needsRefresh = expiryTime - now < 5 * 60 * 1000; // 5 minutes buffer
45
+ const needsRefresh = expiryTime - now < 5 * 60 * 1000;
67
46
  if (needsRefresh) {
68
- const refreshResult = await this.oauthManager.refreshAccessToken(account.credentials.refresh_token);
47
+ const refreshResult = await oauth.refreshAccessToken(account.credentials.refresh_token);
69
48
  if (refreshResult.success && refreshResult.accessToken) {
70
- // Update account credentials in pool
71
49
  const updatedCredentials = {
72
50
  ...account.credentials,
73
51
  access_token: refreshResult.accessToken,
@@ -81,62 +59,5 @@ export class AccountManager {
81
59
  }
82
60
  return account.credentials.access_token;
83
61
  }
84
- /**
85
- * Rotate to next account in pool
86
- */
87
- async rotateAccount() {
88
- return await StorageManager.rotateToNextAccount();
89
- }
90
- /**
91
- * Mark account as rate limited
92
- */
93
- async markAccountRateLimited(email, retryAfterSeconds) {
94
- const rateLimitUntil = Date.now() + retryAfterSeconds * 1000;
95
- await StorageManager.updateAccountInPool(email, { rateLimitUntil });
96
- }
97
- /**
98
- * Get next available account (skips rate-limited accounts)
99
- */
100
- async getNextAvailableAccount() {
101
- const pool = await StorageManager.readAccountPool();
102
- const now = Date.now();
103
- // Find first account that is not rate limited
104
- for (let i = 0; i < pool.accounts.length; i++) {
105
- const account = pool.accounts[(pool.currentIndex + i) % pool.accounts.length];
106
- if (!account.rateLimitUntil || account.rateLimitUntil < now) {
107
- // Update current index
108
- pool.currentIndex = (pool.currentIndex + i) % pool.accounts.length;
109
- await StorageManager.writeAccountPool(pool);
110
- return account;
111
- }
112
- }
113
- // All accounts are rate limited
114
- return null;
115
- }
116
- /**
117
- * Increment request count for current account
118
- */
119
- async incrementRequestCount() {
120
- const account = await this.getCurrentAccount();
121
- if (account) {
122
- await StorageManager.updateAccountInPool(account.email, {
123
- requestCount: account.requestCount + 1,
124
- lastUsed: Date.now(),
125
- });
126
- }
127
- }
128
- /**
129
- * Get account pool statistics
130
- */
131
- async getPoolStats() {
132
- const pool = await StorageManager.readAccountPool();
133
- const now = Date.now();
134
- const rateLimitedCount = pool.accounts.filter((acc) => acc.rateLimitUntil && acc.rateLimitUntil > now).length;
135
- return {
136
- totalAccounts: pool.accounts.length,
137
- availableAccounts: pool.accounts.length - rateLimitedCount,
138
- rateLimitedAccounts: rateLimitedCount,
139
- };
140
- }
141
- }
62
+ };
142
63
  //# sourceMappingURL=account-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-manager.js","sourceRoot":"","sources":["../../src/auth/account-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account-manager.js","sourceRoot":"","sources":["../../src/auth/account-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,cAAc,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,cAAc,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,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB;QACzB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,iBAAiB,EAAE,CAAC;QAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,MAAM,KAAK,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,KAAK,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,cAAc,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"}
@@ -3,38 +3,25 @@
3
3
  * Copyright 2025 Yusuf
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
- import { OAuth2Client } from 'google-auth-library';
7
6
  import type { TokenRefreshResult } from '../types.js';
8
- /**
9
- * OAuth authentication manager
10
- */
11
- export declare class OAuthManager {
12
- private client;
13
- constructor();
7
+ export declare const oauth: {
14
8
  /**
15
9
  * Get access token from stored credentials
16
- * Automatically refreshes if expired or near expiry
17
10
  */
18
11
  getAccessToken(): Promise<string>;
19
12
  /**
20
- * Refresh access token using refresh token
13
+ * Refresh access token
21
14
  */
22
15
  refreshAccessToken(refreshToken: string, retryCount?: number): Promise<TokenRefreshResult>;
23
16
  /**
24
- * Verify if credentials are valid
17
+ * Verify credentials
25
18
  */
26
19
  verifyCredentials(): Promise<boolean>;
27
20
  /**
28
- * Get user info from token
21
+ * Get user info
29
22
  */
30
23
  getUserInfo(): Promise<{
31
24
  email: string;
32
- name?: string;
33
- picture?: string;
34
25
  }>;
35
- /**
36
- * Create OAuth2Client with credentials
37
- */
38
- createAuthenticatedClient(): Promise<OAuth2Client>;
39
- }
26
+ };
40
27
  //# sourceMappingURL=oauth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASnD,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExE;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;;IAS7B;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IA6BvC;;OAEG;IACG,kBAAkB,CACtB,YAAY,EAAE,MAAM,EACpB,UAAU,SAAI,GACb,OAAO,CAAC,kBAAkB,CAAC;IA0C9B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAU3C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAWhF;;OAEG;IACG,yBAAyB,IAAI,OAAO,CAAC,YAAY,CAAC;CAqBzD"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAOxE,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"}
@@ -6,50 +6,41 @@
6
6
  import { OAuth2Client } from 'google-auth-library';
7
7
  import { OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, TOKEN_EXPIRY_BUFFER_MS, MAX_REFRESH_RETRIES, } from '../constants.js';
8
8
  import { StorageManager } from '../storage/storage.js';
9
- /**
10
- * OAuth authentication manager
11
- */
12
- export class OAuthManager {
13
- client;
14
- constructor() {
15
- this.client = new OAuth2Client({
16
- clientId: OAUTH_CLIENT_ID,
17
- clientSecret: OAUTH_CLIENT_SECRET,
18
- });
19
- }
9
+ const client = new OAuth2Client({
10
+ clientId: OAUTH_CLIENT_ID,
11
+ clientSecret: OAUTH_CLIENT_SECRET,
12
+ });
13
+ export const oauth = {
20
14
  /**
21
15
  * Get access token from stored credentials
22
- * Automatically refreshes if expired or near expiry
23
16
  */
24
17
  async getAccessToken() {
25
18
  const credentials = await StorageManager.readOAuthCredentials();
26
19
  if (!credentials) {
27
20
  throw new Error('No OAuth credentials found. Please authenticate using Gemini CLI: gemini auth login');
28
21
  }
29
- // Check if token needs refresh
30
22
  const now = Date.now();
31
23
  const expiryTime = credentials.expiry_date || 0;
32
24
  const needsRefresh = expiryTime - now < TOKEN_EXPIRY_BUFFER_MS;
33
25
  if (needsRefresh) {
34
26
  const refreshResult = await this.refreshAccessToken(credentials.refresh_token);
35
27
  if (!refreshResult.success) {
36
- throw new Error(`Failed to refresh access token: ${refreshResult.error}. Please re-authenticate using: gemini auth login`);
28
+ throw new Error(`Failed to refresh access token: ${refreshResult.error}. Please re-authenticate`);
37
29
  }
38
30
  return refreshResult.accessToken;
39
31
  }
40
32
  return credentials.access_token;
41
- }
33
+ },
42
34
  /**
43
- * Refresh access token using refresh token
35
+ * Refresh access token
44
36
  */
45
37
  async refreshAccessToken(refreshToken, retryCount = 0) {
46
38
  try {
47
- this.client.setCredentials({ refresh_token: refreshToken });
48
- const { credentials } = await this.client.refreshAccessToken();
39
+ client.setCredentials({ refresh_token: refreshToken });
40
+ const { credentials } = await client.refreshAccessToken();
49
41
  if (!credentials.access_token) {
50
42
  throw new Error('No access token returned from refresh');
51
43
  }
52
- // Update stored credentials
53
44
  const existingCreds = await StorageManager.readOAuthCredentials();
54
45
  const updatedCreds = {
55
46
  ...existingCreds,
@@ -66,61 +57,33 @@ export class OAuthManager {
66
57
  }
67
58
  catch (error) {
68
59
  const errorMessage = error instanceof Error ? error.message : String(error);
69
- // Retry on transient errors
70
60
  if (retryCount < MAX_REFRESH_RETRIES) {
71
61
  await new Promise((resolve) => setTimeout(resolve, 1000 * (retryCount + 1)));
72
62
  return this.refreshAccessToken(refreshToken, retryCount + 1);
73
63
  }
74
- return {
75
- success: false,
76
- error: errorMessage,
77
- };
64
+ return { success: false, error: errorMessage };
78
65
  }
79
- }
66
+ },
80
67
  /**
81
- * Verify if credentials are valid
68
+ * Verify credentials
82
69
  */
83
70
  async verifyCredentials() {
84
71
  try {
85
72
  const token = await this.getAccessToken();
86
- const tokenInfo = await this.client.getTokenInfo(token);
73
+ const tokenInfo = await client.getTokenInfo(token);
87
74
  return !!tokenInfo.email;
88
75
  }
89
76
  catch (error) {
90
77
  return false;
91
78
  }
92
- }
79
+ },
93
80
  /**
94
- * Get user info from token
81
+ * Get user info
95
82
  */
96
83
  async getUserInfo() {
97
84
  const token = await this.getAccessToken();
98
- const tokenInfo = await this.client.getTokenInfo(token);
99
- return {
100
- email: tokenInfo.email || 'unknown',
101
- name: undefined,
102
- picture: undefined,
103
- };
104
- }
105
- /**
106
- * Create OAuth2Client with credentials
107
- */
108
- async createAuthenticatedClient() {
109
- const credentials = await StorageManager.readOAuthCredentials();
110
- if (!credentials) {
111
- throw new Error('No OAuth credentials found');
112
- }
113
- const client = new OAuth2Client({
114
- clientId: OAUTH_CLIENT_ID,
115
- clientSecret: OAUTH_CLIENT_SECRET,
116
- });
117
- client.setCredentials({
118
- access_token: credentials.access_token,
119
- refresh_token: credentials.refresh_token,
120
- expiry_date: credentials.expiry_date,
121
- token_type: credentials.token_type,
122
- });
123
- return client;
85
+ const tokenInfo = await client.getTokenInfo(token);
86
+ return { email: tokenInfo.email || 'unknown' };
124
87
  }
125
- }
88
+ };
126
89
  //# sourceMappingURL=oauth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,eAAe,EACf,mBAAmB,EAEnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,CAAe;IAE7B;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC;YAC7B,QAAQ,EAAE,eAAe;YACzB,YAAY,EAAE,mBAAmB;SAClC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAEhE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,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,sBAAsB,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,mDAAmD,CAC1G,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,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;YAE5D,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAE/D,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YAED,4BAA4B;YAC5B,MAAM,aAAa,GAAG,MAAM,cAAc,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,cAAc,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;YAE5E,4BAA4B;YAC5B,IAAI,UAAU,GAAG,mBAAmB,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;YAED,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,YAAY;aACpB,CAAC;QACJ,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,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACxD,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,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAExD,OAAO;YACL,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS;YACnC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,yBAAyB;QAC7B,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAEhE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;YAC9B,QAAQ,EAAE,eAAe;YACzB,YAAY,EAAE,mBAAmB;SAClC,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC;YACpB,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,aAAa,EAAE,WAAW,CAAC,aAAa;YACxC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,UAAU,EAAE,WAAW,CAAC,UAAU;SACnC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -10,7 +10,7 @@
10
10
  */
11
11
  export { default as GeminiCLIOAuthPlugin, metadata } from './plugin.js';
12
12
  export type { OAuthCredentials, GoogleAccount, AccountPoolEntry, AccountPool, PluginConfig, } from './types.js';
13
- export { OAuthManager } from './auth/oauth.js';
14
- export { AccountManager } from './auth/account-manager.js';
13
+ export { oauth } from './auth/oauth.js';
14
+ export { accountManager } from './auth/account-manager.js';
15
15
  export { StorageManager } from './storage/storage.js';
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AAGH,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGxE,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AAGH,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGxE,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@
11
11
  // Named export for OpenCode (following Antigravity pattern)
12
12
  export { default as GeminiCLIOAuthPlugin, metadata } from './plugin.js';
13
13
  // Export utilities for advanced usage
14
- export { OAuthManager } from './auth/oauth.js';
15
- export { AccountManager } from './auth/account-manager.js';
14
+ export { oauth } from './auth/oauth.js';
15
+ export { accountManager } from './auth/account-manager.js';
16
16
  export { StorageManager } from './storage/storage.js';
17
17
  //# 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;AAEH;;;;GAIG;AAEH,4DAA4D;AAC5D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAWxE,sCAAsC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AAEH,4DAA4D;AAC5D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAWxE,sCAAsC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -55,7 +55,7 @@ function createAuthFetch() {
55
55
  // Get OAuth token
56
56
  const token = await getAccessToken();
57
57
  // Inject Authorization header
58
- const headers = new Headers(init?.headers);
58
+ const headers = new Headers(init === null || init === void 0 ? void 0 : init.headers);
59
59
  headers.set('Authorization', `Bearer ${token}`);
60
60
  // Remove API key from URL if present
61
61
  const urlObj = new URL(url);
@@ -97,7 +97,7 @@ export const GeminiCLIOAuthPlugin = async ({ client, directory }) => {
97
97
  // Get OAuth token
98
98
  const token = await getAccessToken();
99
99
  // Inject Authorization header
100
- const headers = new Headers(init?.headers);
100
+ const headers = new Headers(init === null || init === void 0 ? void 0 : init.headers);
101
101
  headers.set('Authorization', `Bearer ${token}`);
102
102
  // Remove API key from URL if present
103
103
  const urlObj = new URL(url);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-simple.js","sourceRoot":"","sources":["../src/plugin-simple.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,eAAe,GAAG,0EAA0E,CAAC;AACnG,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAClE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,0BAA0B,CAAC,CAAC;AAE7E;;GAEG;AACH,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAErC,+BAA+B;QAC/B,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,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,eAAe;QAEtE,IAAI,YAAY,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;YAC9C,gBAAgB;YAChB,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;YACtE,MAAM,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC;YAEpE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAErE,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBAC3B,4BAA4B;gBAC5B,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;gBAClD,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;gBAC5E,MAAM,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAEpF,OAAO,SAAS,CAAC,YAAY,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC,YAAY,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACvF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,OAAO,KAAK,WAAW,KAAwB,EAAE,IAAkB;QACjE,MAAM,GAAG,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;QAE9F,qCAAqC;QACrC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,kBAAkB;QAClB,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;QAErC,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,qCAAqC;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAElC,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAO,EAAE,EAAE;IACvE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAErD,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACL,IAAI,EAAE;YACJ,QAAQ,EAAE,kBAAkB;YAC5B,MAAM,EAAE,KAAK,EAAE,OAAY,EAAE,QAAgB,EAAE,EAAE;gBAC/C,kCAAkC;gBAClC,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;oBACpC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;gBAEpE,qEAAqE;gBACrE,OAAO;oBACL,MAAM,EAAE,EAAE;oBACV,KAAK,CAAC,KAAK,CAAC,KAAwB,EAAE,IAAkB;wBACtD,MAAM,GAAG,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;wBAE9F,uCAAuC;wBACvC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;4BACvD,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBAC5B,CAAC;wBAED,kBAAkB;wBAClB,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;wBAErC,8BAA8B;wBAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;wBAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;wBAEhD,qCAAqC;wBACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC5B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAElC,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;oBACxD,CAAC;iBACF,CAAC;YACJ,CAAC;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,kBAAkB;IAC3B,WAAW,EAAE,oCAAoC;CAClD,CAAC"}
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
@@ -18,7 +18,7 @@ export default function GeminiCLIOAuthPlugin({ client, directory }: PluginContex
18
18
  fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
19
19
  }>;
20
20
  /**
21
- * Auth methods for 'opencode auth login' menu
21
+ * Auth methods
22
22
  */
23
23
  methods: {
24
24
  label: string;
@@ -1 +1 @@
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,wBAA8B,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,aAAa;;;QAOjF;;WAEG;0BACqB,GAAG,YAAY,MAAM;;yBAKtB,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;;QAgChF;;WAEG;;;;;;;;;;;;;;;;;;;;GA8BR;AAED,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,wBAA8B,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,aAAa;;;QAOjF;;WAEG;0BACqB,GAAG,YAAY,MAAM;;yBAKtB,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;;QAgChF;;WAEG;;;;;;;;;;;;;;;;;;;;GA6BR;AAED,eAAO,MAAM,QAAQ;;;;;;;;CAQpB,CAAC"}
package/dist/plugin.js CHANGED
@@ -3,14 +3,14 @@
3
3
  * Copyright 2025 Yusuf
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
- import { OAuthManager } from './auth/oauth.js';
7
- // Instantiate manager once
8
- const oauthManager = new OAuthManager();
6
+ import { oauth } from './auth/oauth.js';
7
+ // No instantiation needed
8
+ // const oauthManager = new OAuthManager();
9
9
  /**
10
10
  * OpenCode Plugin for Gemini CLI OAuth Authentication
11
11
  */
12
12
  export default async function GeminiCLIOAuthPlugin({ client, directory }) {
13
- console.log('🚀 Loading Gemini CLI OAuth plugin (v1.1.10)...');
13
+ console.log('🚀 Loading Gemini CLI OAuth plugin (v1.1.11)...');
14
14
  return {
15
15
  auth: {
16
16
  provider: 'gemini-cli-oauth',
@@ -20,7 +20,7 @@ export default async function GeminiCLIOAuthPlugin({ client, directory }) {
20
20
  loader: async (getAuth, provider) => {
21
21
  return {
22
22
  apiKey: 'gemini-cli-oauth-placeholder',
23
- // Inline fetch definition (Antigravity pattern)
23
+ // Inline fetch definition
24
24
  async fetch(input, init) {
25
25
  const urlStr = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
26
26
  // Only intercept Gemini API requests
@@ -28,12 +28,12 @@ export default async function GeminiCLIOAuthPlugin({ client, directory }) {
28
28
  return fetch(input, init);
29
29
  }
30
30
  try {
31
- // Get OAuth token
32
- const token = await oauthManager.getAccessToken();
31
+ // Get OAuth token using functional module
32
+ const token = await oauth.getAccessToken();
33
33
  // Inject Authorization header
34
- const headers = new Headers(init?.headers);
34
+ const headers = new Headers(init === null || init === void 0 ? void 0 : init.headers);
35
35
  headers.set('Authorization', `Bearer ${token}`);
36
- // Remove API key from URL if present (OAuth doesn't need it)
36
+ // Remove API key from URL if present
37
37
  const urlObj = new URL(urlStr);
38
38
  urlObj.searchParams.delete('key');
39
39
  return fetch(urlObj.toString(), {
@@ -49,7 +49,7 @@ export default async function GeminiCLIOAuthPlugin({ client, directory }) {
49
49
  };
50
50
  },
51
51
  /**
52
- * Auth methods for 'opencode auth login' menu
52
+ * Auth methods
53
53
  */
54
54
  methods: [
55
55
  {
@@ -58,20 +58,19 @@ export default async function GeminiCLIOAuthPlugin({ client, directory }) {
58
58
  authorize: async () => {
59
59
  return {
60
60
  url: "",
61
- instructions: "Please run 'opencode-gemini-setup' in your terminal to manage accounts and authenticate.",
61
+ instructions: "Please run 'opencode-gemini-setup' in your terminal.",
62
62
  method: "auto",
63
63
  callback: async () => {
64
- // Check if credentials exist
65
64
  try {
66
- const valid = await oauthManager.verifyCredentials();
65
+ const valid = await oauth.verifyCredentials();
67
66
  if (valid) {
68
- return { type: "success", email: (await oauthManager.getUserInfo()).email };
67
+ return { type: "success", email: (await oauth.getUserInfo()).email };
69
68
  }
70
69
  }
71
- catch { }
70
+ catch (_a) { }
72
71
  return {
73
72
  type: "failed",
74
- error: "Authentication failed or not setup. Run 'opencode-gemini-setup' first."
73
+ error: "Authentication failed. Run 'opencode-gemini-setup'."
75
74
  };
76
75
  }
77
76
  };
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -7,50 +7,50 @@ import type { OAuthCredentials, GoogleAccount, AccountPool, AccountPoolEntry } f
7
7
  /**
8
8
  * Storage manager for OAuth credentials and account pool
9
9
  */
10
- export declare class StorageManager {
10
+ export declare const StorageManager: {
11
11
  /**
12
12
  * Ensure storage directories exist
13
13
  */
14
- static ensureDirectories(): Promise<void>;
14
+ ensureDirectories(): Promise<void>;
15
15
  /**
16
16
  * Read OAuth credentials from Gemini CLI storage
17
17
  */
18
- static readOAuthCredentials(): Promise<OAuthCredentials | null>;
18
+ readOAuthCredentials(): Promise<OAuthCredentials | null>;
19
19
  /**
20
20
  * Write OAuth credentials to Gemini CLI storage
21
21
  */
22
- static writeOAuthCredentials(credentials: OAuthCredentials): Promise<void>;
22
+ writeOAuthCredentials(credentials: OAuthCredentials): Promise<void>;
23
23
  /**
24
24
  * Read Google accounts list from Gemini CLI
25
25
  */
26
- static readGoogleAccounts(): Promise<GoogleAccount[]>;
26
+ readGoogleAccounts(): Promise<GoogleAccount[]>;
27
27
  /**
28
28
  * Read account pool
29
29
  */
30
- static readAccountPool(): Promise<AccountPool>;
30
+ readAccountPool(): Promise<AccountPool>;
31
31
  /**
32
32
  * Write account pool
33
33
  */
34
- static writeAccountPool(pool: AccountPool): Promise<void>;
34
+ writeAccountPool(pool: AccountPool): Promise<void>;
35
35
  /**
36
36
  * Update account in pool
37
37
  */
38
- static updateAccountInPool(email: string, updates: Partial<AccountPoolEntry>): Promise<void>;
38
+ updateAccountInPool(email: string, updates: Partial<AccountPoolEntry>): Promise<void>;
39
39
  /**
40
40
  * Add or update account in pool
41
41
  */
42
- static upsertAccountInPool(entry: AccountPoolEntry): Promise<void>;
42
+ upsertAccountInPool(entry: AccountPoolEntry): Promise<void>;
43
43
  /**
44
44
  * Remove account from pool
45
45
  */
46
- static removeAccountFromPool(email: string): Promise<void>;
46
+ removeAccountFromPool(email: string): Promise<void>;
47
47
  /**
48
48
  * Get current active account from pool
49
49
  */
50
- static getCurrentAccount(): Promise<AccountPoolEntry | null>;
50
+ getCurrentAccount(): Promise<AccountPoolEntry | null>;
51
51
  /**
52
52
  * Rotate to next account in pool
53
53
  */
54
- static rotateToNextAccount(): Promise<AccountPoolEntry | null>;
55
- }
54
+ rotateToNextAccount(): Promise<AccountPoolEntry | null>;
55
+ };
56
56
  //# sourceMappingURL=storage.d.ts.map
@@ -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,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"}
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,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"}
@@ -8,18 +8,18 @@ import { OAUTH_CREDS_PATH, GOOGLE_ACCOUNTS_PATH, ACCOUNT_POOL_PATH, PLUGIN_STORA
8
8
  /**
9
9
  * Storage manager for OAuth credentials and account pool
10
10
  */
11
- export class StorageManager {
11
+ export const StorageManager = {
12
12
  /**
13
13
  * Ensure storage directories exist
14
14
  */
15
- static async ensureDirectories() {
15
+ async ensureDirectories() {
16
16
  await fs.mkdir(GEMINI_DIR, { recursive: true });
17
17
  await fs.mkdir(PLUGIN_STORAGE_DIR, { recursive: true });
18
- }
18
+ },
19
19
  /**
20
20
  * Read OAuth credentials from Gemini CLI storage
21
21
  */
22
- static async readOAuthCredentials() {
22
+ async readOAuthCredentials() {
23
23
  try {
24
24
  const data = await fs.readFile(OAUTH_CREDS_PATH, 'utf-8');
25
25
  return JSON.parse(data);
@@ -30,18 +30,18 @@ export class StorageManager {
30
30
  }
31
31
  throw error;
32
32
  }
33
- }
33
+ },
34
34
  /**
35
35
  * Write OAuth credentials to Gemini CLI storage
36
36
  */
37
- static async writeOAuthCredentials(credentials) {
38
- await this.ensureDirectories();
37
+ async writeOAuthCredentials(credentials) {
38
+ await StorageManager.ensureDirectories();
39
39
  await fs.writeFile(OAUTH_CREDS_PATH, JSON.stringify(credentials, null, 2), 'utf-8');
40
- }
40
+ },
41
41
  /**
42
42
  * Read Google accounts list from Gemini CLI
43
43
  */
44
- static async readGoogleAccounts() {
44
+ async readGoogleAccounts() {
45
45
  try {
46
46
  const data = await fs.readFile(GOOGLE_ACCOUNTS_PATH, 'utf-8');
47
47
  const parsed = JSON.parse(data);
@@ -53,11 +53,11 @@ export class StorageManager {
53
53
  }
54
54
  throw error;
55
55
  }
56
- }
56
+ },
57
57
  /**
58
58
  * Read account pool
59
59
  */
60
- static async readAccountPool() {
60
+ async readAccountPool() {
61
61
  try {
62
62
  const data = await fs.readFile(ACCOUNT_POOL_PATH, 'utf-8');
63
63
  return JSON.parse(data);
@@ -68,33 +68,33 @@ export class StorageManager {
68
68
  }
69
69
  throw error;
70
70
  }
71
- }
71
+ },
72
72
  /**
73
73
  * Write account pool
74
74
  */
75
- static async writeAccountPool(pool) {
76
- await this.ensureDirectories();
75
+ async writeAccountPool(pool) {
76
+ await StorageManager.ensureDirectories();
77
77
  await fs.writeFile(ACCOUNT_POOL_PATH, JSON.stringify(pool, null, 2), 'utf-8');
78
- }
78
+ },
79
79
  /**
80
80
  * Update account in pool
81
81
  */
82
- static async updateAccountInPool(email, updates) {
83
- const pool = await this.readAccountPool();
82
+ async updateAccountInPool(email, updates) {
83
+ const pool = await StorageManager.readAccountPool();
84
84
  const accountIndex = pool.accounts.findIndex((acc) => acc.email === email);
85
85
  if (accountIndex >= 0) {
86
86
  pool.accounts[accountIndex] = {
87
87
  ...pool.accounts[accountIndex],
88
88
  ...updates,
89
89
  };
90
- await this.writeAccountPool(pool);
90
+ await StorageManager.writeAccountPool(pool);
91
91
  }
92
- }
92
+ },
93
93
  /**
94
94
  * Add or update account in pool
95
95
  */
96
- static async upsertAccountInPool(entry) {
97
- const pool = await this.readAccountPool();
96
+ async upsertAccountInPool(entry) {
97
+ const pool = await StorageManager.readAccountPool();
98
98
  const accountIndex = pool.accounts.findIndex((acc) => acc.email === entry.email);
99
99
  if (accountIndex >= 0) {
100
100
  pool.accounts[accountIndex] = entry;
@@ -102,37 +102,37 @@ export class StorageManager {
102
102
  else {
103
103
  pool.accounts.push(entry);
104
104
  }
105
- await this.writeAccountPool(pool);
106
- }
105
+ await StorageManager.writeAccountPool(pool);
106
+ },
107
107
  /**
108
108
  * Remove account from pool
109
109
  */
110
- static async removeAccountFromPool(email) {
111
- const pool = await this.readAccountPool();
110
+ async removeAccountFromPool(email) {
111
+ const pool = await StorageManager.readAccountPool();
112
112
  pool.accounts = pool.accounts.filter((acc) => acc.email !== email);
113
- await this.writeAccountPool(pool);
114
- }
113
+ await StorageManager.writeAccountPool(pool);
114
+ },
115
115
  /**
116
116
  * Get current active account from pool
117
117
  */
118
- static async getCurrentAccount() {
119
- const pool = await this.readAccountPool();
118
+ async getCurrentAccount() {
119
+ const pool = await StorageManager.readAccountPool();
120
120
  if (pool.accounts.length === 0) {
121
121
  return null;
122
122
  }
123
123
  return pool.accounts[pool.currentIndex] || pool.accounts[0];
124
- }
124
+ },
125
125
  /**
126
126
  * Rotate to next account in pool
127
127
  */
128
- static async rotateToNextAccount() {
129
- const pool = await this.readAccountPool();
128
+ async rotateToNextAccount() {
129
+ const pool = await StorageManager.readAccountPool();
130
130
  if (pool.accounts.length === 0) {
131
131
  return null;
132
132
  }
133
133
  pool.currentIndex = (pool.currentIndex + 1) % pool.accounts.length;
134
- await this.writeAccountPool(pool);
134
+ await StorageManager.writeAccountPool(pool);
135
135
  return pool.accounts[pool.currentIndex];
136
136
  }
137
- }
137
+ };
138
138
  //# sourceMappingURL=storage.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-gemini-cli-oauth",
3
- "version": "1.1.10",
3
+ "version": "1.1.12",
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.js",
@@ -1,18 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Yusuf
4
- * SPDX-License-Identifier: MIT
5
- */
6
- import { AccountManager } from '../auth/account-manager.js';
7
- /**
8
- * Create authenticated fetch function with OAuth token injection
9
- */
10
- export declare function createAuthenticatedFetch(accountManager: AccountManager): typeof fetch;
11
- /**
12
- * Create request interceptor for OpenCode plugin
13
- */
14
- export declare function createRequestInterceptor(): Promise<{
15
- fetch: typeof fetch;
16
- accountManager: AccountManager;
17
- }>;
18
- //# sourceMappingURL=request-interceptor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-interceptor.d.ts","sourceRoot":"","sources":["../../src/auth/request-interceptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AA0B5D;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,KAAK,CA6DrF;AAED;;GAEG;AACH,wBAAsB,wBAAwB;;;GAkB7C"}
@@ -1,94 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Yusuf
4
- * SPDX-License-Identifier: MIT
5
- */
6
- import { RATE_LIMIT_RETRY_DELAY_MS } from '../constants.js';
7
- /**
8
- * Check if request is for Gemini API
9
- */
10
- function isGeminiAPIRequest(input) {
11
- const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
12
- return url.includes('generativelanguage.googleapis.com');
13
- }
14
- /**
15
- * Parse retry-after header from rate limit response
16
- */
17
- function parseRetryAfter(response) {
18
- const retryAfter = response.headers.get('retry-after');
19
- if (retryAfter) {
20
- const seconds = parseInt(retryAfter, 10);
21
- if (!isNaN(seconds)) {
22
- return seconds;
23
- }
24
- }
25
- // Default to 60 seconds if not specified
26
- return 60;
27
- }
28
- /**
29
- * Create authenticated fetch function with OAuth token injection
30
- */
31
- export function createAuthenticatedFetch(accountManager) {
32
- return async function authenticatedFetch(input, init) {
33
- // Pass through non-Gemini API requests
34
- if (!isGeminiAPIRequest(input)) {
35
- return fetch(input, init);
36
- }
37
- // Get current access token
38
- const accessToken = await accountManager.getCurrentAccessToken();
39
- // Inject Authorization header
40
- const headers = new Headers(init?.headers);
41
- headers.set('Authorization', `Bearer ${accessToken}`);
42
- // Remove API key from URL if present (OAuth doesn't need it)
43
- const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
44
- const urlObj = new URL(url);
45
- urlObj.searchParams.delete('key');
46
- // Make request
47
- const response = await fetch(urlObj.toString(), {
48
- ...init,
49
- headers,
50
- });
51
- // Handle rate limiting (429)
52
- if (response.status === 429) {
53
- const currentAccount = await accountManager.getCurrentAccount();
54
- if (currentAccount) {
55
- const retryAfterSeconds = parseRetryAfter(response);
56
- console.warn(`⚠️ Rate limit hit for ${currentAccount.email}. Retry after ${retryAfterSeconds}s`);
57
- // Mark account as rate limited
58
- await accountManager.markAccountRateLimited(currentAccount.email, retryAfterSeconds);
59
- // Try to get next available account
60
- const nextAccount = await accountManager.getNextAvailableAccount();
61
- if (nextAccount) {
62
- console.log(`🔄 Switching to account: ${nextAccount.email}`);
63
- // Retry request with new account
64
- await new Promise((resolve) => setTimeout(resolve, RATE_LIMIT_RETRY_DELAY_MS));
65
- return authenticatedFetch(input, init);
66
- }
67
- else {
68
- console.error('❌ All accounts are rate limited. Please wait or add more accounts.');
69
- }
70
- }
71
- }
72
- // Increment request count
73
- await accountManager.incrementRequestCount();
74
- return response;
75
- };
76
- }
77
- /**
78
- * Create request interceptor for OpenCode plugin
79
- */
80
- export async function createRequestInterceptor() {
81
- // Lazy load to avoid constructor issues
82
- const { AccountManager: AM } = await import('./account-manager.js');
83
- const accountManager = new AM();
84
- // Initialize account pool from Gemini CLI credentials
85
- await accountManager.initialize();
86
- // Get pool stats
87
- const stats = await accountManager.getPoolStats();
88
- console.log(`🔐 Gemini CLI OAuth: ${stats.availableAccounts}/${stats.totalAccounts} accounts available`);
89
- return {
90
- fetch: createAuthenticatedFetch(accountManager),
91
- accountManager,
92
- };
93
- }
94
- //# sourceMappingURL=request-interceptor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-interceptor.js","sourceRoot":"","sources":["../../src/auth/request-interceptor.ts"],"names":[],"mappings":"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"}