opencode-gemini-business 2.0.5 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.en.md +278 -0
- package/README.md +159 -272
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +84 -6
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +6 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -25
- package/dist/index.js.map +1 -1
- package/dist/opencode-gemini-business-2.2.0.tgz +0 -0
- package/dist/src/browser-auth.d.ts +35 -0
- package/dist/src/browser-auth.d.ts.map +1 -0
- package/dist/src/browser-auth.js +212 -0
- package/dist/src/browser-auth.js.map +1 -0
- package/dist/src/gemini-business-api.d.ts.map +1 -1
- package/dist/src/gemini-business-api.js +85 -25
- package/dist/src/gemini-business-api.js.map +1 -1
- package/dist/src/types.d.ts +19 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +4 -2
- package/README.ru.md +0 -397
- package/dist/opencode-gemini-business-2.0.5.tgz +0 -0
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { join } from 'path';
|
|
2
5
|
import { AccountManager } from './src/account-manager.js';
|
|
3
6
|
import { GeminiBusinessAPI } from './src/gemini-business-api.js';
|
|
7
|
+
import { BrowserAuth } from './src/browser-auth.js';
|
|
4
8
|
/**
|
|
5
9
|
* CLI entry point - handles account management commands.
|
|
6
10
|
*/
|
|
@@ -34,8 +38,48 @@ export async function cli() {
|
|
|
34
38
|
}
|
|
35
39
|
}
|
|
36
40
|
async function addAccountCommand(manager, args) {
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
const isManual = args.includes('--manual');
|
|
42
|
+
const filteredArgs = args.filter(a => a !== '--manual');
|
|
43
|
+
if (isManual) {
|
|
44
|
+
await addAccountManual(manager, filteredArgs);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
await addAccountBrowser(manager, filteredArgs[0]);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function addAccountBrowser(manager, name) {
|
|
51
|
+
console.log('Add Gemini Business Account (Browser Flow)');
|
|
52
|
+
console.log('--------------------------------------------');
|
|
53
|
+
console.log('A Chrome window will open. Sign in to your Gemini Business account.\n');
|
|
54
|
+
const auth = new BrowserAuth({
|
|
55
|
+
name: name || `account-${Date.now()}`,
|
|
56
|
+
});
|
|
57
|
+
try {
|
|
58
|
+
const credentials = await auth.captureCredentials((message) => {
|
|
59
|
+
console.log(message);
|
|
60
|
+
});
|
|
61
|
+
const account = {
|
|
62
|
+
name: name || `account-${Date.now()}`,
|
|
63
|
+
team_id: credentials.team_id,
|
|
64
|
+
cookies: credentials.cookies,
|
|
65
|
+
csesidx: credentials.csesidx,
|
|
66
|
+
user_agent: credentials.user_agent,
|
|
67
|
+
enabled: true,
|
|
68
|
+
};
|
|
69
|
+
const id = await manager.addAccount(account);
|
|
70
|
+
console.log(`\n✅ Account added successfully! ID: ${id}`);
|
|
71
|
+
console.log(` Name: ${account.name}`);
|
|
72
|
+
console.log(` Team ID: ${account.team_id}`);
|
|
73
|
+
await ensureAuthRecord();
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error(`\n${error instanceof Error ? error.message : error}`);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function addAccountManual(manager, args) {
|
|
81
|
+
console.log('Add Gemini Business Account (Manual)');
|
|
82
|
+
console.log('-------------------------------------');
|
|
39
83
|
const account = {
|
|
40
84
|
name: args[0] || process.env.GEMINI_ACCOUNT_NAME || `account-${Date.now()}`,
|
|
41
85
|
team_id: args[1] || process.env.GEMINI_TEAM_ID || '',
|
|
@@ -53,7 +97,7 @@ async function addAccountCommand(manager, args) {
|
|
|
53
97
|
!account.csesidx) {
|
|
54
98
|
console.error('Error: Missing required fields!');
|
|
55
99
|
console.error('\nUsage:');
|
|
56
|
-
console.error(' opencode-gemini-business add-account <name> <team_id> <secure_c_ses> <host_c_oses> <csesidx> [user_agent]');
|
|
100
|
+
console.error(' opencode-gemini-business add-account --manual <name> <team_id> <secure_c_ses> <host_c_oses> <csesidx> [user_agent]');
|
|
57
101
|
console.error('\nOr set environment variables:');
|
|
58
102
|
console.error(' GEMINI_ACCOUNT_NAME, GEMINI_TEAM_ID, GEMINI_SECURE_C_SES, GEMINI_HOST_C_OSES, GEMINI_CSESIDX, GEMINI_USER_AGENT');
|
|
59
103
|
process.exit(1);
|
|
@@ -62,6 +106,37 @@ async function addAccountCommand(manager, args) {
|
|
|
62
106
|
console.log(`✅ Account added successfully! ID: ${id}`);
|
|
63
107
|
console.log(` Name: ${account.name}`);
|
|
64
108
|
console.log(` Team ID: ${account.team_id}`);
|
|
109
|
+
await ensureAuthRecord();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Ensure auth record exists in ~/.local/share/opencode/auth.json
|
|
113
|
+
* so that OpenCode calls the plugin's loader() without manual `opencode auth login`.
|
|
114
|
+
*/
|
|
115
|
+
async function ensureAuthRecord() {
|
|
116
|
+
const authDir = join(homedir(), '.local', 'share', 'opencode');
|
|
117
|
+
const authPath = join(authDir, 'auth.json');
|
|
118
|
+
let authData = {};
|
|
119
|
+
try {
|
|
120
|
+
const raw = await readFile(authPath, 'utf-8');
|
|
121
|
+
authData = JSON.parse(raw);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// File doesn't exist yet — we'll create it
|
|
125
|
+
}
|
|
126
|
+
if (authData['gemini-business']) {
|
|
127
|
+
return; // Already registered
|
|
128
|
+
}
|
|
129
|
+
authData['gemini-business'] = { type: 'api', key: 'unused' };
|
|
130
|
+
try {
|
|
131
|
+
await mkdir(authDir, { recursive: true });
|
|
132
|
+
await writeFile(authPath, JSON.stringify(authData, null, 2) + '\n', 'utf-8');
|
|
133
|
+
console.log(`\n✅ Auth record created in ${authPath}`);
|
|
134
|
+
console.log(' You can skip "opencode auth login" — the plugin is ready to use!');
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
console.warn(`\n⚠️ Could not auto-create auth record: ${error}`);
|
|
138
|
+
console.warn(' Run "opencode auth login" and select gemini-business manually.');
|
|
139
|
+
}
|
|
65
140
|
}
|
|
66
141
|
async function listAccountsCommand(manager) {
|
|
67
142
|
const accounts = manager.getAccounts();
|
|
@@ -133,8 +208,11 @@ function printHelp() {
|
|
|
133
208
|
console.log('================================\n');
|
|
134
209
|
console.log('Multi-account Gemini Business pool with automatic rotation\n');
|
|
135
210
|
console.log('Commands:');
|
|
136
|
-
console.log(' add-account
|
|
137
|
-
console.log(' Add
|
|
211
|
+
console.log(' add-account [name]');
|
|
212
|
+
console.log(' Add account via browser login (default). Opens Chrome, you sign in,');
|
|
213
|
+
console.log(' credentials are captured automatically. Requires Chrome/Chromium.\n');
|
|
214
|
+
console.log(' add-account --manual <name> <team_id> <secure_c_ses> <host_c_oses> <csesidx> [user_agent]');
|
|
215
|
+
console.log(' Add account manually by providing credentials as arguments.\n');
|
|
138
216
|
console.log(' list-accounts');
|
|
139
217
|
console.log(' List all configured accounts\n');
|
|
140
218
|
console.log(' remove-account <account_id>');
|
|
@@ -143,7 +221,7 @@ function printHelp() {
|
|
|
143
221
|
console.log(' Test account credentials\n');
|
|
144
222
|
console.log(' help');
|
|
145
223
|
console.log(' Show this help message\n');
|
|
146
|
-
console.log('Environment Variables:');
|
|
224
|
+
console.log('Environment Variables (for --manual mode):');
|
|
147
225
|
console.log(' GEMINI_ACCOUNT_NAME - Account name');
|
|
148
226
|
console.log(' GEMINI_TEAM_ID - Team ID');
|
|
149
227
|
console.log(' GEMINI_SECURE_C_SES - __Secure-c_ses cookie');
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,27 +2,20 @@
|
|
|
2
2
|
* OpenCode Gemini Business Plugin
|
|
3
3
|
* Multi-account Gemini Business pool with automatic rotation
|
|
4
4
|
*/
|
|
5
|
-
declare const GeminiBusinessPlugin: (_ctx: any) => {
|
|
5
|
+
export declare const GeminiBusinessPlugin: (_ctx: any) => Promise<{
|
|
6
6
|
auth: {
|
|
7
7
|
provider: string;
|
|
8
8
|
loader(_getAuth: any, _provider: any): Promise<{
|
|
9
|
-
|
|
10
|
-
strategy?: undefined;
|
|
9
|
+
apiKey?: undefined;
|
|
11
10
|
fetch?: undefined;
|
|
12
11
|
} | {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
fetch(_input: any, options: any): Promise<any>;
|
|
12
|
+
apiKey: string;
|
|
13
|
+
fetch(_input: any, init: any): Promise<any>;
|
|
16
14
|
}>;
|
|
17
15
|
methods: {
|
|
18
|
-
type: "
|
|
16
|
+
type: "api";
|
|
19
17
|
label: string;
|
|
20
|
-
authorize: () => Promise<{
|
|
21
|
-
type: "instructions";
|
|
22
|
-
instructions: string;
|
|
23
|
-
}>;
|
|
24
18
|
}[];
|
|
25
19
|
};
|
|
26
|
-
}
|
|
27
|
-
export default GeminiBusinessPlugin;
|
|
20
|
+
}>;
|
|
28
21
|
//# 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":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoCH,eAAO,MAAM,oBAAoB,GAAU,MAAM,GAAG;;;yBAOvB,GAAG,aAAa,GAAG;;;;;0BAwBlB,GAAG,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;;;;;;;EAwE1D,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,8 +4,30 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { AccountManager } from './src/account-manager.js';
|
|
6
6
|
import { GeminiBusinessAPI } from './src/gemini-business-api.js';
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
function isAsyncIterable(value) {
|
|
8
|
+
return (value !== null &&
|
|
9
|
+
typeof value === 'object' &&
|
|
10
|
+
Symbol.asyncIterator in value);
|
|
11
|
+
}
|
|
12
|
+
function toSSEStream(chunks) {
|
|
13
|
+
const encoder = new TextEncoder();
|
|
14
|
+
return new ReadableStream({
|
|
15
|
+
async start(controller) {
|
|
16
|
+
try {
|
|
17
|
+
for await (const chunk of chunks) {
|
|
18
|
+
controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}\n\n`));
|
|
19
|
+
}
|
|
20
|
+
controller.enqueue(encoder.encode('data: [DONE]\n\n'));
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
controller.error(error);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
controller.close();
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export const GeminiBusinessPlugin = async (_ctx) => {
|
|
9
31
|
const accountManager = new AccountManager();
|
|
10
32
|
return {
|
|
11
33
|
auth: {
|
|
@@ -24,9 +46,8 @@ const GeminiBusinessPlugin = (_ctx) => {
|
|
|
24
46
|
console.log(`\n✅ Gemini Business: Loaded ${accounts.length} account(s)\n` +
|
|
25
47
|
` Strategy: ${accountManager.getConfig().rotation_strategy}\n`);
|
|
26
48
|
return {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
async fetch(_input, options) {
|
|
49
|
+
apiKey: '',
|
|
50
|
+
async fetch(_input, init) {
|
|
30
51
|
try {
|
|
31
52
|
const account = accountManager.getNextAccount();
|
|
32
53
|
if (!account) {
|
|
@@ -38,11 +59,24 @@ const GeminiBusinessPlugin = (_ctx) => {
|
|
|
38
59
|
await api.refreshSession();
|
|
39
60
|
await accountManager.updateSession(account.id, account.session_id, 50 * 60 * 1000);
|
|
40
61
|
}
|
|
41
|
-
const requestBody =
|
|
42
|
-
? JSON.parse(
|
|
62
|
+
const requestBody = init?.body
|
|
63
|
+
? JSON.parse(init.body)
|
|
43
64
|
: {};
|
|
44
65
|
const response = await api.chatCompletion(requestBody);
|
|
45
66
|
accountManager.resetAccountErrors(account.id);
|
|
67
|
+
if (requestBody.stream) {
|
|
68
|
+
if (!isAsyncIterable(response)) {
|
|
69
|
+
throw new Error('Provider returned non-stream response for stream request');
|
|
70
|
+
}
|
|
71
|
+
return new Response(toSSEStream(response), {
|
|
72
|
+
status: 200,
|
|
73
|
+
headers: {
|
|
74
|
+
'Content-Type': 'text/event-stream; charset=utf-8',
|
|
75
|
+
'Cache-Control': 'no-cache',
|
|
76
|
+
Connection: 'keep-alive',
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
46
80
|
return new Response(JSON.stringify(response), {
|
|
47
81
|
status: 200,
|
|
48
82
|
headers: {
|
|
@@ -63,27 +97,11 @@ const GeminiBusinessPlugin = (_ctx) => {
|
|
|
63
97
|
},
|
|
64
98
|
methods: [
|
|
65
99
|
{
|
|
66
|
-
type: '
|
|
67
|
-
label: 'Gemini Business
|
|
68
|
-
authorize: async () => ({
|
|
69
|
-
type: 'instructions',
|
|
70
|
-
instructions: '📋 To configure Gemini Business accounts:\n\n' +
|
|
71
|
-
'1. Login to https://business.gemini.google\n' +
|
|
72
|
-
'2. Open DevTools (F12) → Network tab\n' +
|
|
73
|
-
'3. Make any API request (refresh page or send a prompt)\n' +
|
|
74
|
-
'4. Find request headers and copy:\n' +
|
|
75
|
-
' • team_id (from X-Goog-Team-Id header)\n' +
|
|
76
|
-
' • __Secure-c_ses cookie\n' +
|
|
77
|
-
' • __Host-c_oses cookie\n' +
|
|
78
|
-
' • csesidx value\n\n' +
|
|
79
|
-
'5. Run: opencode-gemini-business add-account\n' +
|
|
80
|
-
' Or use environment variables (see docs)\n\n' +
|
|
81
|
-
'For more help: opencode-gemini-business help',
|
|
82
|
-
}),
|
|
100
|
+
type: 'api',
|
|
101
|
+
label: 'Gemini Business (enter any key)',
|
|
83
102
|
},
|
|
84
103
|
],
|
|
85
104
|
},
|
|
86
105
|
};
|
|
87
106
|
};
|
|
88
|
-
export default GeminiBusinessPlugin;
|
|
89
107
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-based credential capture for Gemini Business accounts.
|
|
3
|
+
*
|
|
4
|
+
* Launches system Chrome via puppeteer-core, lets the user authenticate,
|
|
5
|
+
* then extracts cookies and intercepts network requests to capture
|
|
6
|
+
* csesidx and team_id automatically.
|
|
7
|
+
*/
|
|
8
|
+
import { BrowserAuthOptions, CapturedCredentials } from './types.js';
|
|
9
|
+
export declare class BrowserAuth {
|
|
10
|
+
private options;
|
|
11
|
+
constructor(options?: BrowserAuthOptions);
|
|
12
|
+
/**
|
|
13
|
+
* Find system Chrome/Chromium installation.
|
|
14
|
+
* Throws a descriptive error if not found.
|
|
15
|
+
*/
|
|
16
|
+
findChrome(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Launch headful Chrome with a temporary profile and navigate to Gemini Business.
|
|
19
|
+
*/
|
|
20
|
+
private launchBrowser;
|
|
21
|
+
/**
|
|
22
|
+
* Poll cookies until login is detected.
|
|
23
|
+
* Returns captured cookies or null on timeout.
|
|
24
|
+
*/
|
|
25
|
+
private waitForCookies;
|
|
26
|
+
/**
|
|
27
|
+
* Set up request interception to capture csesidx and team_id.
|
|
28
|
+
*/
|
|
29
|
+
private setupRequestInterception;
|
|
30
|
+
/**
|
|
31
|
+
* Main orchestrator: launch browser, wait for login, capture credentials.
|
|
32
|
+
*/
|
|
33
|
+
captureCredentials(onStatus?: (message: string) => void): Promise<CapturedCredentials>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=browser-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-auth.d.ts","sourceRoot":"","sources":["../../src/browser-auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAWrE,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAA+B;gBAElC,OAAO,CAAC,EAAE,kBAAkB;IAIxC;;;OAGG;IACH,UAAU,IAAI,MAAM;IAepB;;OAEG;YACW,aAAa;IAkB3B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAiCtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA2ChC;;OAEG;IACG,kBAAkB,CACtB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,mBAAmB,CAAC;CA8FhC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-based credential capture for Gemini Business accounts.
|
|
3
|
+
*
|
|
4
|
+
* Launches system Chrome via puppeteer-core, lets the user authenticate,
|
|
5
|
+
* then extracts cookies and intercepts network requests to capture
|
|
6
|
+
* csesidx and team_id automatically.
|
|
7
|
+
*/
|
|
8
|
+
import puppeteer from 'puppeteer-core';
|
|
9
|
+
import * as ChromeLauncher from 'chrome-launcher';
|
|
10
|
+
const GEMINI_BUSINESS_URL = 'https://business.gemini.google';
|
|
11
|
+
const DEFAULT_OPTIONS = {
|
|
12
|
+
timeout: 10 * 60 * 1000, // 10 minutes
|
|
13
|
+
reminderDelay: 5 * 60 * 1000, // 5 minutes
|
|
14
|
+
pollInterval: 2000, // 2 seconds
|
|
15
|
+
name: '',
|
|
16
|
+
};
|
|
17
|
+
export class BrowserAuth {
|
|
18
|
+
options;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Find system Chrome/Chromium installation.
|
|
24
|
+
* Throws a descriptive error if not found.
|
|
25
|
+
*/
|
|
26
|
+
findChrome() {
|
|
27
|
+
const installations = ChromeLauncher.Launcher.getInstallations();
|
|
28
|
+
if (installations.length === 0) {
|
|
29
|
+
throw new Error('❌ Google Chrome not found on this system.\n\n' +
|
|
30
|
+
' Install Chrome: https://www.google.com/chrome/\n\n' +
|
|
31
|
+
' Or add an account manually:\n' +
|
|
32
|
+
' opencode-gemini-business add-account --manual <name> <team_id> <secure_c_ses> <host_c_oses> <csesidx> [user_agent]');
|
|
33
|
+
}
|
|
34
|
+
return installations[0];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Launch headful Chrome with a temporary profile and navigate to Gemini Business.
|
|
38
|
+
*/
|
|
39
|
+
async launchBrowser(chromePath) {
|
|
40
|
+
const browser = await puppeteer.launch({
|
|
41
|
+
executablePath: chromePath,
|
|
42
|
+
headless: false,
|
|
43
|
+
args: [
|
|
44
|
+
'--no-first-run',
|
|
45
|
+
'--no-default-browser-check',
|
|
46
|
+
'--disable-extensions',
|
|
47
|
+
],
|
|
48
|
+
});
|
|
49
|
+
const pages = await browser.pages();
|
|
50
|
+
const page = pages[0] || await browser.newPage();
|
|
51
|
+
await page.goto(GEMINI_BUSINESS_URL, { waitUntil: 'networkidle2' });
|
|
52
|
+
return { browser, page };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Poll cookies until login is detected.
|
|
56
|
+
* Returns captured cookies or null on timeout.
|
|
57
|
+
*/
|
|
58
|
+
waitForCookies(page, signal) {
|
|
59
|
+
return new Promise((resolve) => {
|
|
60
|
+
const interval = setInterval(async () => {
|
|
61
|
+
if (signal.aborted) {
|
|
62
|
+
clearInterval(interval);
|
|
63
|
+
resolve(null);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const cookies = await page.cookies(GEMINI_BUSINESS_URL);
|
|
68
|
+
const secureCses = cookies.find((c) => c.name === '__Secure-C_SES');
|
|
69
|
+
const hostCoses = cookies.find((c) => c.name === '__Host-C_OSES');
|
|
70
|
+
if (secureCses && hostCoses) {
|
|
71
|
+
clearInterval(interval);
|
|
72
|
+
resolve({
|
|
73
|
+
secure_c_ses: secureCses.value,
|
|
74
|
+
host_c_oses: hostCoses.value,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Page may have been closed
|
|
80
|
+
clearInterval(interval);
|
|
81
|
+
resolve(null);
|
|
82
|
+
}
|
|
83
|
+
}, this.options.pollInterval);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Set up request interception to capture csesidx and team_id.
|
|
88
|
+
*/
|
|
89
|
+
setupRequestInterception(page) {
|
|
90
|
+
let csesidx = null;
|
|
91
|
+
let team_id = null;
|
|
92
|
+
page.on('request', (request) => {
|
|
93
|
+
const url = request.url();
|
|
94
|
+
// Capture csesidx from getoxsrf request
|
|
95
|
+
if (url.includes('getoxsrf') && !csesidx) {
|
|
96
|
+
try {
|
|
97
|
+
const parsed = new URL(url);
|
|
98
|
+
const value = parsed.searchParams.get('csesidx');
|
|
99
|
+
if (value) {
|
|
100
|
+
csesidx = value;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Ignore URL parse errors
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Capture team_id (configId) from widgetCreateSession request
|
|
108
|
+
if (url.includes('widgetCreateSession') && !team_id) {
|
|
109
|
+
try {
|
|
110
|
+
const postData = request.postData();
|
|
111
|
+
if (postData) {
|
|
112
|
+
const body = JSON.parse(postData);
|
|
113
|
+
if (body.configId) {
|
|
114
|
+
team_id = body.configId;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Ignore JSON parse errors
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
getCaptured: () => ({ csesidx, team_id }),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Main orchestrator: launch browser, wait for login, capture credentials.
|
|
129
|
+
*/
|
|
130
|
+
async captureCredentials(onStatus) {
|
|
131
|
+
const log = onStatus || (() => { });
|
|
132
|
+
// Find Chrome
|
|
133
|
+
const chromePath = this.findChrome();
|
|
134
|
+
log('🚀 Launching Chrome...');
|
|
135
|
+
// Launch browser
|
|
136
|
+
const { browser, page } = await this.launchBrowser(chromePath);
|
|
137
|
+
// Capture User-Agent
|
|
138
|
+
const userAgent = await page.evaluate('navigator.userAgent');
|
|
139
|
+
// Set up request interception
|
|
140
|
+
const { getCaptured } = this.setupRequestInterception(page);
|
|
141
|
+
// Set up abort controller for timeout
|
|
142
|
+
const controller = new AbortController();
|
|
143
|
+
const { signal } = controller;
|
|
144
|
+
// Overall timeout
|
|
145
|
+
const timeoutId = setTimeout(() => {
|
|
146
|
+
controller.abort();
|
|
147
|
+
}, this.options.timeout);
|
|
148
|
+
// Handle browser close
|
|
149
|
+
let browserClosed = false;
|
|
150
|
+
browser.on('disconnected', () => {
|
|
151
|
+
browserClosed = true;
|
|
152
|
+
controller.abort();
|
|
153
|
+
});
|
|
154
|
+
try {
|
|
155
|
+
log('🔑 Waiting for login... Please sign in to Gemini Business in the browser window.');
|
|
156
|
+
// Phase 1: Wait for cookies (login detection)
|
|
157
|
+
const cookies = await this.waitForCookies(page, signal);
|
|
158
|
+
if (!cookies) {
|
|
159
|
+
if (browserClosed) {
|
|
160
|
+
throw new Error('Browser closed before login completed.');
|
|
161
|
+
}
|
|
162
|
+
throw new Error('Timeout — login not detected within the time limit. Try again or use --manual.');
|
|
163
|
+
}
|
|
164
|
+
log('✅ Logged in! Now send any message in the Gemini Business chat...');
|
|
165
|
+
// Phase 2: Wait for network requests (csesidx + team_id)
|
|
166
|
+
const reminderTimeout = setTimeout(() => {
|
|
167
|
+
log('⏳ Still waiting... Please send a message in the Gemini Business chat to complete setup.');
|
|
168
|
+
}, this.options.reminderDelay);
|
|
169
|
+
const networkResult = await new Promise((resolve, reject) => {
|
|
170
|
+
const checkInterval = setInterval(() => {
|
|
171
|
+
if (signal.aborted) {
|
|
172
|
+
clearInterval(checkInterval);
|
|
173
|
+
clearTimeout(reminderTimeout);
|
|
174
|
+
if (browserClosed) {
|
|
175
|
+
reject(new Error('Browser closed before all credentials were captured.'));
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
reject(new Error('Timeout — try again or use --manual.'));
|
|
179
|
+
}
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const captured = getCaptured();
|
|
183
|
+
if (captured.csesidx && captured.team_id) {
|
|
184
|
+
clearInterval(checkInterval);
|
|
185
|
+
clearTimeout(reminderTimeout);
|
|
186
|
+
resolve({ csesidx: captured.csesidx, team_id: captured.team_id });
|
|
187
|
+
}
|
|
188
|
+
}, this.options.pollInterval);
|
|
189
|
+
});
|
|
190
|
+
// Close browser
|
|
191
|
+
clearTimeout(timeoutId);
|
|
192
|
+
await browser.close();
|
|
193
|
+
return {
|
|
194
|
+
cookies,
|
|
195
|
+
csesidx: networkResult.csesidx,
|
|
196
|
+
team_id: networkResult.team_id,
|
|
197
|
+
user_agent: userAgent,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
clearTimeout(timeoutId);
|
|
202
|
+
try {
|
|
203
|
+
await browser.close();
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Browser may already be closed
|
|
207
|
+
}
|
|
208
|
+
throw error;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=browser-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-auth.js","sourceRoot":"","sources":["../../src/browser-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-business-api.d.ts","sourceRoot":"","sources":["../../src/gemini-business-api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAQpB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAwB;gBAE3B,OAAO,EAAE,qBAAqB;IAI1C;;OAEG;IACH,OAAO,CAAC,SAAS;IAqCjB;;;OAGG;YACW,MAAM;IA6CpB;;;OAGG;YACW,aAAa;IAsD3B;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,sBAAsB,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAsC1E;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B;;OAEG;YACY,oBAAoB;
|
|
1
|
+
{"version":3,"file":"gemini-business-api.d.ts","sourceRoot":"","sources":["../../src/gemini-business-api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAQpB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAwB;gBAE3B,OAAO,EAAE,qBAAqB;IAI1C;;OAEG;IACH,OAAO,CAAC,SAAS;IAqCjB;;;OAGG;YACW,MAAM;IA6CpB;;;OAGG;YACW,aAAa;IAsD3B;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,sBAAsB,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAsC1E;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B;;OAEG;YACY,oBAAoB;IAkHnC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBlE;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAY9B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAQtC"}
|