opencode-gemini-business 2.0.3 → 2.0.5
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/CHANGELOG.md +14 -0
- package/bin/cli.js +1 -1
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +160 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +3 -44
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -226
- package/dist/index.js.map +1 -1
- package/dist/opencode-gemini-business-2.0.5.tgz +0 -0
- package/package.json +1 -1
- package/dist/opencode-gemini-business-2.0.3.tgz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [2.0.5](https://github.com/izzzzzi/opencode-gemini-business/compare/v2.0.4...v2.0.5) (2026-02-15)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* refactor plugin structure to fix OpenCode compatibility ([c7578ee](https://github.com/izzzzzi/opencode-gemini-business/commit/c7578ee9249cf2a8647470b449275de5684284e7))
|
|
7
|
+
|
|
8
|
+
## [2.0.4](https://github.com/izzzzzi/opencode-gemini-business/compare/v2.0.3...v2.0.4) (2026-02-15)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* initialize AccountManager outside async loader ([15864ca](https://github.com/izzzzzi/opencode-gemini-business/commit/15864ca500d4751af09db77f0d8030c8cf9ac3b8))
|
|
14
|
+
|
|
1
15
|
## [2.0.3](https://github.com/izzzzzi/opencode-gemini-business/compare/v2.0.2...v2.0.3) (2026-02-15)
|
|
2
16
|
|
|
3
17
|
|
package/bin/cli.js
CHANGED
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AAMA;;GAEG;AACH,wBAAsB,GAAG,kBAkCxB"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { AccountManager } from './src/account-manager.js';
|
|
3
|
+
import { GeminiBusinessAPI } from './src/gemini-business-api.js';
|
|
4
|
+
/**
|
|
5
|
+
* CLI entry point - handles account management commands.
|
|
6
|
+
*/
|
|
7
|
+
export async function cli() {
|
|
8
|
+
const args = process.argv.slice(2);
|
|
9
|
+
const command = args[0];
|
|
10
|
+
const accountManager = new AccountManager();
|
|
11
|
+
try {
|
|
12
|
+
await accountManager.loadAccounts();
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Config file might not exist yet - that's ok.
|
|
16
|
+
}
|
|
17
|
+
switch (command) {
|
|
18
|
+
case 'add-account':
|
|
19
|
+
await addAccountCommand(accountManager, args.slice(1));
|
|
20
|
+
break;
|
|
21
|
+
case 'list-accounts':
|
|
22
|
+
await listAccountsCommand(accountManager);
|
|
23
|
+
break;
|
|
24
|
+
case 'remove-account':
|
|
25
|
+
await removeAccountCommand(accountManager, args[1]);
|
|
26
|
+
break;
|
|
27
|
+
case 'test-account':
|
|
28
|
+
await testAccountCommand(accountManager, args[1]);
|
|
29
|
+
break;
|
|
30
|
+
case 'help':
|
|
31
|
+
default:
|
|
32
|
+
printHelp();
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function addAccountCommand(manager, args) {
|
|
37
|
+
console.log('Add Gemini Business Account');
|
|
38
|
+
console.log('----------------------------');
|
|
39
|
+
const account = {
|
|
40
|
+
name: args[0] || process.env.GEMINI_ACCOUNT_NAME || `account-${Date.now()}`,
|
|
41
|
+
team_id: args[1] || process.env.GEMINI_TEAM_ID || '',
|
|
42
|
+
cookies: {
|
|
43
|
+
secure_c_ses: args[2] || process.env.GEMINI_SECURE_C_SES || '',
|
|
44
|
+
host_c_oses: args[3] || process.env.GEMINI_HOST_C_OSES || '',
|
|
45
|
+
},
|
|
46
|
+
csesidx: args[4] || process.env.GEMINI_CSESIDX || '',
|
|
47
|
+
user_agent: args[5] || process.env.GEMINI_USER_AGENT,
|
|
48
|
+
enabled: true,
|
|
49
|
+
};
|
|
50
|
+
if (!account.team_id ||
|
|
51
|
+
!account.cookies.secure_c_ses ||
|
|
52
|
+
!account.cookies.host_c_oses ||
|
|
53
|
+
!account.csesidx) {
|
|
54
|
+
console.error('Error: Missing required fields!');
|
|
55
|
+
console.error('\nUsage:');
|
|
56
|
+
console.error(' opencode-gemini-business add-account <name> <team_id> <secure_c_ses> <host_c_oses> <csesidx> [user_agent]');
|
|
57
|
+
console.error('\nOr set environment variables:');
|
|
58
|
+
console.error(' GEMINI_ACCOUNT_NAME, GEMINI_TEAM_ID, GEMINI_SECURE_C_SES, GEMINI_HOST_C_OSES, GEMINI_CSESIDX, GEMINI_USER_AGENT');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const id = await manager.addAccount(account);
|
|
62
|
+
console.log(`✅ Account added successfully! ID: ${id}`);
|
|
63
|
+
console.log(` Name: ${account.name}`);
|
|
64
|
+
console.log(` Team ID: ${account.team_id}`);
|
|
65
|
+
}
|
|
66
|
+
async function listAccountsCommand(manager) {
|
|
67
|
+
const accounts = manager.getAccounts();
|
|
68
|
+
if (accounts.length === 0) {
|
|
69
|
+
console.log('No accounts configured.');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
console.log(`Found ${accounts.length} account(s):\n`);
|
|
73
|
+
accounts.forEach((account, index) => {
|
|
74
|
+
console.log(`[${index + 1}] ${account.name} (${account.id})`);
|
|
75
|
+
console.log(` Team ID: ${account.team_id}`);
|
|
76
|
+
console.log(` Status: ${account.enabled ? '✅ Enabled' : '❌ Disabled'}`);
|
|
77
|
+
console.log(` Errors: ${account.error_count || 0}`);
|
|
78
|
+
if (account.last_error) {
|
|
79
|
+
console.log(` Last Error: ${account.last_error}`);
|
|
80
|
+
}
|
|
81
|
+
if (account.last_used) {
|
|
82
|
+
const lastUsed = new Date(account.last_used);
|
|
83
|
+
console.log(` Last Used: ${lastUsed.toISOString()}`);
|
|
84
|
+
}
|
|
85
|
+
console.log('');
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
async function removeAccountCommand(manager, accountId) {
|
|
89
|
+
if (!accountId) {
|
|
90
|
+
console.error('Error: Account ID required');
|
|
91
|
+
console.error('Usage: opencode-gemini-business remove-account <account_id>');
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
const removed = await manager.removeAccount(accountId);
|
|
95
|
+
if (removed) {
|
|
96
|
+
console.log(`✅ Account ${accountId} removed successfully`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.error(`❌ Account ${accountId} not found`);
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function testAccountCommand(manager, accountId) {
|
|
104
|
+
if (!accountId) {
|
|
105
|
+
console.error('Error: Account ID required');
|
|
106
|
+
console.error('Usage: opencode-gemini-business test-account <account_id>');
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
const accounts = manager.getAccounts();
|
|
110
|
+
const account = accounts.find((acc) => acc.id === accountId);
|
|
111
|
+
if (!account) {
|
|
112
|
+
console.error(`❌ Account ${accountId} not found`);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
console.log(`Testing account: ${account.name} (${account.id})`);
|
|
116
|
+
console.log('Please wait...\n');
|
|
117
|
+
const api = new GeminiBusinessAPI(account);
|
|
118
|
+
const result = await api.testAccount();
|
|
119
|
+
if (result.success) {
|
|
120
|
+
console.log('✅ Account test successful!');
|
|
121
|
+
console.log(' XSRF Token: OK');
|
|
122
|
+
console.log(' Session: OK');
|
|
123
|
+
console.log(' Authentication: OK');
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.log('❌ Account test failed!');
|
|
127
|
+
console.log(` Error: ${result.error}`);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function printHelp() {
|
|
132
|
+
console.log('OpenCode Gemini Business Plugin');
|
|
133
|
+
console.log('================================\n');
|
|
134
|
+
console.log('Multi-account Gemini Business pool with automatic rotation\n');
|
|
135
|
+
console.log('Commands:');
|
|
136
|
+
console.log(' add-account <name> <team_id> <secure_c_ses> <host_c_oses> <csesidx> [user_agent]');
|
|
137
|
+
console.log(' Add a new Gemini Business account\n');
|
|
138
|
+
console.log(' list-accounts');
|
|
139
|
+
console.log(' List all configured accounts\n');
|
|
140
|
+
console.log(' remove-account <account_id>');
|
|
141
|
+
console.log(' Remove an account\n');
|
|
142
|
+
console.log(' test-account <account_id>');
|
|
143
|
+
console.log(' Test account credentials\n');
|
|
144
|
+
console.log(' help');
|
|
145
|
+
console.log(' Show this help message\n');
|
|
146
|
+
console.log('Environment Variables:');
|
|
147
|
+
console.log(' GEMINI_ACCOUNT_NAME - Account name');
|
|
148
|
+
console.log(' GEMINI_TEAM_ID - Team ID');
|
|
149
|
+
console.log(' GEMINI_SECURE_C_SES - __Secure-c_ses cookie');
|
|
150
|
+
console.log(' GEMINI_HOST_C_OSES - __Host-c_oses cookie');
|
|
151
|
+
console.log(' GEMINI_CSESIDX - csesidx value');
|
|
152
|
+
console.log(' GEMINI_USER_AGENT - Custom user agent (optional)\n');
|
|
153
|
+
}
|
|
154
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
155
|
+
cli().catch((error) => {
|
|
156
|
+
console.error('Error:', error.message);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,54 +1,19 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
/**
|
|
3
2
|
* OpenCode Gemini Business Plugin
|
|
4
3
|
* Multi-account Gemini Business pool with automatic rotation
|
|
5
|
-
*
|
|
6
|
-
* Follows OpenCode plugin patterns from:
|
|
7
|
-
* - opencode-gemini-auth
|
|
8
|
-
* - opencode-openai-codex-auth
|
|
9
|
-
* - opencode-antigravity-auth
|
|
10
4
|
*/
|
|
11
|
-
|
|
12
|
-
import { GeminiBusinessAPI } from './src/gemini-business-api.js';
|
|
13
|
-
/**
|
|
14
|
-
* OpenCode Plugin Entry Point
|
|
15
|
-
*
|
|
16
|
-
* This plugin doesn't use traditional OAuth - it uses cookie-based auth
|
|
17
|
-
* with Gemini Business accounts configured via CLI.
|
|
18
|
-
*/
|
|
19
|
-
export declare const GeminiBusinessPlugin: (ctx: any) => {
|
|
5
|
+
declare const GeminiBusinessPlugin: (_ctx: any) => {
|
|
20
6
|
auth: {
|
|
21
7
|
provider: string;
|
|
22
|
-
|
|
23
|
-
* Loader function - called by OpenCode to initialize the provider
|
|
24
|
-
*/
|
|
25
|
-
loader(getAuth: any, provider: any): Promise<{
|
|
8
|
+
loader(_getAuth: any, _provider: any): Promise<{
|
|
26
9
|
accountCount?: undefined;
|
|
27
10
|
strategy?: undefined;
|
|
28
|
-
/**
|
|
29
|
-
* Custom fetch implementation for Gemini Business API
|
|
30
|
-
*
|
|
31
|
-
* This intercepts all OpenCode API calls and routes them through
|
|
32
|
-
* the Gemini Business API with account rotation.
|
|
33
|
-
*/
|
|
34
11
|
fetch?: undefined;
|
|
35
12
|
} | {
|
|
36
13
|
accountCount: number;
|
|
37
14
|
strategy: "round-robin" | "least-used" | "random";
|
|
38
|
-
|
|
39
|
-
* Custom fetch implementation for Gemini Business API
|
|
40
|
-
*
|
|
41
|
-
* This intercepts all OpenCode API calls and routes them through
|
|
42
|
-
* the Gemini Business API with account rotation.
|
|
43
|
-
*/
|
|
44
|
-
fetch(input: any, options: any): Promise<any>;
|
|
15
|
+
fetch(_input: any, options: any): Promise<any>;
|
|
45
16
|
}>;
|
|
46
|
-
/**
|
|
47
|
-
* Authentication methods
|
|
48
|
-
*
|
|
49
|
-
* For Gemini Business, we don't support OAuth - accounts are configured
|
|
50
|
-
* via CLI with cookie extraction from browser.
|
|
51
|
-
*/
|
|
52
17
|
methods: {
|
|
53
18
|
type: "cookie";
|
|
54
19
|
label: string;
|
|
@@ -60,10 +25,4 @@ export declare const GeminiBusinessPlugin: (ctx: any) => {
|
|
|
60
25
|
};
|
|
61
26
|
};
|
|
62
27
|
export default GeminiBusinessPlugin;
|
|
63
|
-
export { AccountManager, GeminiBusinessAPI };
|
|
64
|
-
/**
|
|
65
|
-
* CLI entry point - handles account management commands
|
|
66
|
-
*/
|
|
67
|
-
declare function cli(): Promise<void>;
|
|
68
|
-
export { cli };
|
|
69
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,QAAA,MAAM,oBAAoB,GAAI,MAAM,GAAG;;;yBAQV,GAAG,aAAa,GAAG;;;;;;;0BAwBlB,GAAG,WAAW,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;CAuE7D,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,33 +1,16 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
/**
|
|
3
2
|
* OpenCode Gemini Business Plugin
|
|
4
3
|
* Multi-account Gemini Business pool with automatic rotation
|
|
5
|
-
*
|
|
6
|
-
* Follows OpenCode plugin patterns from:
|
|
7
|
-
* - opencode-gemini-auth
|
|
8
|
-
* - opencode-openai-codex-auth
|
|
9
|
-
* - opencode-antigravity-auth
|
|
10
4
|
*/
|
|
11
5
|
import { AccountManager } from './src/account-manager.js';
|
|
12
6
|
import { GeminiBusinessAPI } from './src/gemini-business-api.js';
|
|
13
|
-
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* OpenCode Plugin Entry Point
|
|
18
|
-
*
|
|
19
|
-
* This plugin doesn't use traditional OAuth - it uses cookie-based auth
|
|
20
|
-
* with Gemini Business accounts configured via CLI.
|
|
21
|
-
*/
|
|
22
|
-
export const GeminiBusinessPlugin = (ctx) => {
|
|
7
|
+
const GeminiBusinessPlugin = (_ctx) => {
|
|
8
|
+
// Create account manager once per plugin instance.
|
|
9
|
+
const accountManager = new AccountManager();
|
|
23
10
|
return {
|
|
24
11
|
auth: {
|
|
25
12
|
provider: 'gemini-business',
|
|
26
|
-
|
|
27
|
-
* Loader function - called by OpenCode to initialize the provider
|
|
28
|
-
*/
|
|
29
|
-
async loader(getAuth, provider) {
|
|
30
|
-
const accountManager = new AccountManager();
|
|
13
|
+
async loader(_getAuth, _provider) {
|
|
31
14
|
await accountManager.loadAccounts();
|
|
32
15
|
const accounts = accountManager.getAccounts();
|
|
33
16
|
if (accounts.length === 0) {
|
|
@@ -41,38 +24,25 @@ export const GeminiBusinessPlugin = (ctx) => {
|
|
|
41
24
|
console.log(`\n✅ Gemini Business: Loaded ${accounts.length} account(s)\n` +
|
|
42
25
|
` Strategy: ${accountManager.getConfig().rotation_strategy}\n`);
|
|
43
26
|
return {
|
|
44
|
-
// Return empty config - we handle everything in custom fetch
|
|
45
27
|
accountCount: accounts.length,
|
|
46
28
|
strategy: accountManager.getConfig().rotation_strategy,
|
|
47
|
-
|
|
48
|
-
* Custom fetch implementation for Gemini Business API
|
|
49
|
-
*
|
|
50
|
-
* This intercepts all OpenCode API calls and routes them through
|
|
51
|
-
* the Gemini Business API with account rotation.
|
|
52
|
-
*/
|
|
53
|
-
async fetch(input, options) {
|
|
29
|
+
async fetch(_input, options) {
|
|
54
30
|
try {
|
|
55
|
-
// Get next available account based on rotation strategy
|
|
56
31
|
const account = accountManager.getNextAccount();
|
|
57
32
|
if (!account) {
|
|
58
33
|
throw new Error('No available accounts');
|
|
59
34
|
}
|
|
60
|
-
// Create API client for this account
|
|
61
35
|
const api = new GeminiBusinessAPI(account);
|
|
62
|
-
// Refresh session if needed
|
|
63
36
|
if (api.needsSessionRefresh()) {
|
|
64
37
|
console.log(` ⟳ Refreshing session for: ${account.name}`);
|
|
65
38
|
await api.refreshSession();
|
|
66
|
-
await accountManager.updateSession(account.id, account.session_id, 50 * 60 * 1000
|
|
67
|
-
);
|
|
39
|
+
await accountManager.updateSession(account.id, account.session_id, 50 * 60 * 1000);
|
|
68
40
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
41
|
+
const requestBody = options?.body
|
|
42
|
+
? JSON.parse(options.body)
|
|
43
|
+
: {};
|
|
72
44
|
const response = await api.chatCompletion(requestBody);
|
|
73
|
-
// Success! Reset error count
|
|
74
45
|
accountManager.resetAccountErrors(account.id);
|
|
75
|
-
// Convert to Response object for OpenCode
|
|
76
46
|
return new Response(JSON.stringify(response), {
|
|
77
47
|
status: 200,
|
|
78
48
|
headers: {
|
|
@@ -82,23 +52,15 @@ export const GeminiBusinessPlugin = (ctx) => {
|
|
|
82
52
|
}
|
|
83
53
|
catch (error) {
|
|
84
54
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
85
|
-
// Mark account error
|
|
86
55
|
const account = accountManager.getNextAccount();
|
|
87
56
|
if (account) {
|
|
88
57
|
accountManager.markAccountError(account.id, errorMessage);
|
|
89
58
|
}
|
|
90
|
-
// Rethrow for OpenCode to handle
|
|
91
59
|
throw new Error(`Gemini Business API Error: ${errorMessage}`);
|
|
92
60
|
}
|
|
93
61
|
},
|
|
94
62
|
};
|
|
95
63
|
},
|
|
96
|
-
/**
|
|
97
|
-
* Authentication methods
|
|
98
|
-
*
|
|
99
|
-
* For Gemini Business, we don't support OAuth - accounts are configured
|
|
100
|
-
* via CLI with cookie extraction from browser.
|
|
101
|
-
*/
|
|
102
64
|
methods: [
|
|
103
65
|
{
|
|
104
66
|
type: 'cookie',
|
|
@@ -123,184 +85,5 @@ export const GeminiBusinessPlugin = (ctx) => {
|
|
|
123
85
|
},
|
|
124
86
|
};
|
|
125
87
|
};
|
|
126
|
-
// Export as default for CommonJS compatibility
|
|
127
88
|
export default GeminiBusinessPlugin;
|
|
128
|
-
// Export legacy functions for backward compatibility (if needed)
|
|
129
|
-
export { AccountManager, GeminiBusinessAPI };
|
|
130
|
-
// ============================================================================
|
|
131
|
-
// CLI Commands
|
|
132
|
-
// ============================================================================
|
|
133
|
-
/**
|
|
134
|
-
* CLI entry point - handles account management commands
|
|
135
|
-
*/
|
|
136
|
-
async function cli() {
|
|
137
|
-
const args = process.argv.slice(2);
|
|
138
|
-
const command = args[0];
|
|
139
|
-
const accountManager = new AccountManager();
|
|
140
|
-
try {
|
|
141
|
-
await accountManager.loadAccounts();
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
// Config file might not exist yet - that's ok
|
|
145
|
-
}
|
|
146
|
-
switch (command) {
|
|
147
|
-
case 'add-account':
|
|
148
|
-
await addAccountCommand(accountManager, args.slice(1));
|
|
149
|
-
break;
|
|
150
|
-
case 'list-accounts':
|
|
151
|
-
await listAccountsCommand(accountManager);
|
|
152
|
-
break;
|
|
153
|
-
case 'remove-account':
|
|
154
|
-
await removeAccountCommand(accountManager, args[1]);
|
|
155
|
-
break;
|
|
156
|
-
case 'test-account':
|
|
157
|
-
await testAccountCommand(accountManager, args[1]);
|
|
158
|
-
break;
|
|
159
|
-
case 'help':
|
|
160
|
-
default:
|
|
161
|
-
printHelp();
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Add account command
|
|
167
|
-
*/
|
|
168
|
-
async function addAccountCommand(manager, args) {
|
|
169
|
-
console.log('Add Gemini Business Account');
|
|
170
|
-
console.log('----------------------------');
|
|
171
|
-
// Read from command line args or env vars
|
|
172
|
-
const account = {
|
|
173
|
-
name: args[0] || process.env.GEMINI_ACCOUNT_NAME || `account-${Date.now()}`,
|
|
174
|
-
team_id: args[1] || process.env.GEMINI_TEAM_ID || '',
|
|
175
|
-
cookies: {
|
|
176
|
-
secure_c_ses: args[2] || process.env.GEMINI_SECURE_C_SES || '',
|
|
177
|
-
host_c_oses: args[3] || process.env.GEMINI_HOST_C_OSES || '',
|
|
178
|
-
},
|
|
179
|
-
csesidx: args[4] || process.env.GEMINI_CSESIDX || '',
|
|
180
|
-
user_agent: args[5] || process.env.GEMINI_USER_AGENT,
|
|
181
|
-
enabled: true,
|
|
182
|
-
};
|
|
183
|
-
// Validate required fields
|
|
184
|
-
if (!account.team_id || !account.cookies.secure_c_ses || !account.cookies.host_c_oses || !account.csesidx) {
|
|
185
|
-
console.error('Error: Missing required fields!');
|
|
186
|
-
console.error('\nUsage:');
|
|
187
|
-
console.error(' opencode-gemini-business add-account <name> <team_id> <secure_c_ses> <host_c_oses> <csesidx> [user_agent]');
|
|
188
|
-
console.error('\nOr set environment variables:');
|
|
189
|
-
console.error(' GEMINI_ACCOUNT_NAME, GEMINI_TEAM_ID, GEMINI_SECURE_C_SES, GEMINI_HOST_C_OSES, GEMINI_CSESIDX, GEMINI_USER_AGENT');
|
|
190
|
-
process.exit(1);
|
|
191
|
-
}
|
|
192
|
-
const id = await manager.addAccount(account);
|
|
193
|
-
console.log(`✅ Account added successfully! ID: ${id}`);
|
|
194
|
-
console.log(` Name: ${account.name}`);
|
|
195
|
-
console.log(` Team ID: ${account.team_id}`);
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* List accounts command
|
|
199
|
-
*/
|
|
200
|
-
async function listAccountsCommand(manager) {
|
|
201
|
-
const accounts = manager.getAccounts();
|
|
202
|
-
if (accounts.length === 0) {
|
|
203
|
-
console.log('No accounts configured.');
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
console.log(`Found ${accounts.length} account(s):\n`);
|
|
207
|
-
accounts.forEach((account, index) => {
|
|
208
|
-
console.log(`[${index + 1}] ${account.name} (${account.id})`);
|
|
209
|
-
console.log(` Team ID: ${account.team_id}`);
|
|
210
|
-
console.log(` Status: ${account.enabled ? '✅ Enabled' : '❌ Disabled'}`);
|
|
211
|
-
console.log(` Errors: ${account.error_count || 0}`);
|
|
212
|
-
if (account.last_error) {
|
|
213
|
-
console.log(` Last Error: ${account.last_error}`);
|
|
214
|
-
}
|
|
215
|
-
if (account.last_used) {
|
|
216
|
-
const lastUsed = new Date(account.last_used);
|
|
217
|
-
console.log(` Last Used: ${lastUsed.toISOString()}`);
|
|
218
|
-
}
|
|
219
|
-
console.log('');
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Remove account command
|
|
224
|
-
*/
|
|
225
|
-
async function removeAccountCommand(manager, accountId) {
|
|
226
|
-
if (!accountId) {
|
|
227
|
-
console.error('Error: Account ID required');
|
|
228
|
-
console.error('Usage: opencode-gemini-business remove-account <account_id>');
|
|
229
|
-
process.exit(1);
|
|
230
|
-
}
|
|
231
|
-
const removed = await manager.removeAccount(accountId);
|
|
232
|
-
if (removed) {
|
|
233
|
-
console.log(`✅ Account ${accountId} removed successfully`);
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
console.error(`❌ Account ${accountId} not found`);
|
|
237
|
-
process.exit(1);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Test account command
|
|
242
|
-
*/
|
|
243
|
-
async function testAccountCommand(manager, accountId) {
|
|
244
|
-
if (!accountId) {
|
|
245
|
-
console.error('Error: Account ID required');
|
|
246
|
-
console.error('Usage: opencode-gemini-business test-account <account_id>');
|
|
247
|
-
process.exit(1);
|
|
248
|
-
}
|
|
249
|
-
const accounts = manager.getAccounts();
|
|
250
|
-
const account = accounts.find(acc => acc.id === accountId);
|
|
251
|
-
if (!account) {
|
|
252
|
-
console.error(`❌ Account ${accountId} not found`);
|
|
253
|
-
process.exit(1);
|
|
254
|
-
}
|
|
255
|
-
console.log(`Testing account: ${account.name} (${account.id})`);
|
|
256
|
-
console.log('Please wait...\n');
|
|
257
|
-
const api = new GeminiBusinessAPI(account);
|
|
258
|
-
const result = await api.testAccount();
|
|
259
|
-
if (result.success) {
|
|
260
|
-
console.log('✅ Account test successful!');
|
|
261
|
-
console.log(' XSRF Token: OK');
|
|
262
|
-
console.log(' Session: OK');
|
|
263
|
-
console.log(' Authentication: OK');
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
console.log('❌ Account test failed!');
|
|
267
|
-
console.log(` Error: ${result.error}`);
|
|
268
|
-
process.exit(1);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Print help
|
|
273
|
-
*/
|
|
274
|
-
function printHelp() {
|
|
275
|
-
console.log('OpenCode Gemini Business Plugin');
|
|
276
|
-
console.log('================================\n');
|
|
277
|
-
console.log('Multi-account Gemini Business pool with automatic rotation\n');
|
|
278
|
-
console.log('Commands:');
|
|
279
|
-
console.log(' add-account <name> <team_id> <secure_c_ses> <host_c_oses> <csesidx> [user_agent]');
|
|
280
|
-
console.log(' Add a new Gemini Business account\n');
|
|
281
|
-
console.log(' list-accounts');
|
|
282
|
-
console.log(' List all configured accounts\n');
|
|
283
|
-
console.log(' remove-account <account_id>');
|
|
284
|
-
console.log(' Remove an account\n');
|
|
285
|
-
console.log(' test-account <account_id>');
|
|
286
|
-
console.log(' Test account credentials\n');
|
|
287
|
-
console.log(' help');
|
|
288
|
-
console.log(' Show this help message\n');
|
|
289
|
-
console.log('Environment Variables:');
|
|
290
|
-
console.log(' GEMINI_ACCOUNT_NAME - Account name');
|
|
291
|
-
console.log(' GEMINI_TEAM_ID - Team ID');
|
|
292
|
-
console.log(' GEMINI_SECURE_C_SES - __Secure-c_ses cookie');
|
|
293
|
-
console.log(' GEMINI_HOST_C_OSES - __Host-c_oses cookie');
|
|
294
|
-
console.log(' GEMINI_CSESIDX - csesidx value');
|
|
295
|
-
console.log(' GEMINI_USER_AGENT - Custom user agent (optional)\n');
|
|
296
|
-
}
|
|
297
|
-
// Export CLI function
|
|
298
|
-
export { cli };
|
|
299
|
-
// Run CLI if executed directly
|
|
300
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
301
|
-
cli().catch(error => {
|
|
302
|
-
console.error('Error:', error.message);
|
|
303
|
-
process.exit(1);
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
89
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
|
Binary file
|