opencode-gemini-business 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-manager.js","sourceRoot":"","sources":["../../src/account-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Gemini Business API Client - handles direct API communication with Gemini Business
3
+ *
4
+ * Uses correct endpoints:
5
+ * - https://business.gemini.google/auth/getoxsrf (XSRF token)
6
+ * - https://biz-discoveryengine.googleapis.com/v1alpha/locations/global/widgetCreateSession (session)
7
+ * - https://biz-discoveryengine.googleapis.com/v1alpha/locations/global/widgetStreamAssist (chat)
8
+ */
9
+ import { GeminiBusinessAccount, ChatCompletionRequest, ChatCompletionResponse } from './types.js';
10
+ export declare class GeminiBusinessAPI {
11
+ private account;
12
+ constructor(account: GeminiBusinessAccount);
13
+ /**
14
+ * Get XSRF token from business.gemini.google
15
+ * Tokens are cached for 55 minutes
16
+ */
17
+ private getXSRFToken;
18
+ /**
19
+ * Create session with widgetCreateSession
20
+ * Sessions are cached for 50 minutes
21
+ */
22
+ private createSession;
23
+ /**
24
+ * Send chat completion request to widgetStreamAssist
25
+ */
26
+ chatCompletion(request: ChatCompletionRequest): Promise<ChatCompletionResponse | AsyncIterable<ChatCompletionResponse>>;
27
+ /**
28
+ * Build cookie header string
29
+ */
30
+ private buildCookieHeader;
31
+ /**
32
+ * Get user agent string
33
+ */
34
+ private getUserAgent;
35
+ /**
36
+ * Convert OpenAI format to Gemini Business format
37
+ */
38
+ private convertToGeminiFormat;
39
+ /**
40
+ * Build prompt string from OpenAI messages array
41
+ */
42
+ private buildPromptFromMessages;
43
+ /**
44
+ * Convert Gemini Business format to OpenAI format
45
+ */
46
+ private convertToOpenAIFormat;
47
+ /**
48
+ * Handle streaming SSE response
49
+ */
50
+ private handleStreamResponse;
51
+ /**
52
+ * Test account credentials and connectivity
53
+ */
54
+ testAccount(): Promise<{
55
+ success: boolean;
56
+ error?: string;
57
+ }>;
58
+ /**
59
+ * Check if session needs refresh
60
+ */
61
+ needsSessionRefresh(): boolean;
62
+ /**
63
+ * Force refresh session
64
+ */
65
+ refreshSession(): Promise<void>;
66
+ }
67
+ //# sourceMappingURL=gemini-business-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-business-api.d.ts","sourceRoot":"","sources":["../../src/gemini-business-api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAQpB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAwB;gBAE3B,OAAO,EAAE,qBAAqB;IAI1C;;;OAGG;YACW,YAAY;IAoC1B;;;OAGG;YACW,aAAa;IA2C3B;;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;IAkB7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;OAEG;YACY,oBAAoB;IAsDnC;;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"}
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Gemini Business API Client - handles direct API communication with Gemini Business
3
+ *
4
+ * Uses correct endpoints:
5
+ * - https://business.gemini.google/auth/getoxsrf (XSRF token)
6
+ * - https://biz-discoveryengine.googleapis.com/v1alpha/locations/global/widgetCreateSession (session)
7
+ * - https://biz-discoveryengine.googleapis.com/v1alpha/locations/global/widgetStreamAssist (chat)
8
+ */
9
+ import fetch from 'node-fetch';
10
+ // Gemini Business API Endpoints
11
+ const BASE_URL = 'https://biz-discoveryengine.googleapis.com/v1alpha/locations/global';
12
+ const CREATE_SESSION_URL = `${BASE_URL}/widgetCreateSession`;
13
+ const STREAM_ASSIST_URL = `${BASE_URL}/widgetStreamAssist`;
14
+ const GETOXSRF_URL = 'https://business.gemini.google/auth/getoxsrf';
15
+ export class GeminiBusinessAPI {
16
+ account;
17
+ constructor(account) {
18
+ this.account = account;
19
+ }
20
+ /**
21
+ * Get XSRF token from business.gemini.google
22
+ * Tokens are cached for 55 minutes
23
+ */
24
+ async getXSRFToken() {
25
+ // Check if cached token is still valid
26
+ if (this.account.xsrf_token && this.account.xsrf_expires) {
27
+ if (Date.now() < this.account.xsrf_expires) {
28
+ return this.account.xsrf_token;
29
+ }
30
+ }
31
+ try {
32
+ const response = await fetch(GETOXSRF_URL, {
33
+ method: 'POST',
34
+ headers: {
35
+ 'Cookie': this.buildCookieHeader(),
36
+ 'User-Agent': this.getUserAgent(),
37
+ 'Content-Type': 'application/json',
38
+ },
39
+ body: JSON.stringify({}),
40
+ });
41
+ if (!response.ok) {
42
+ const errorText = await response.text();
43
+ throw new Error(`Failed to get XSRF token: ${response.status} ${response.statusText}\n${errorText}`);
44
+ }
45
+ const data = await response.json();
46
+ // Cache token for 55 minutes
47
+ this.account.xsrf_token = data.token;
48
+ this.account.xsrf_expires = Date.now() + (55 * 60 * 1000);
49
+ return data.token;
50
+ }
51
+ catch (error) {
52
+ throw new Error(`XSRF token retrieval failed: ${error}`);
53
+ }
54
+ }
55
+ /**
56
+ * Create session with widgetCreateSession
57
+ * Sessions are cached for 50 minutes
58
+ */
59
+ async createSession() {
60
+ // Check if cached session is still valid
61
+ if (this.account.session_id && this.account.session_expires) {
62
+ if (Date.now() < this.account.session_expires) {
63
+ return this.account.session_id;
64
+ }
65
+ }
66
+ try {
67
+ const xsrfToken = await this.getXSRFToken();
68
+ const response = await fetch(CREATE_SESSION_URL, {
69
+ method: 'POST',
70
+ headers: {
71
+ 'Content-Type': 'application/json',
72
+ 'Cookie': this.buildCookieHeader(),
73
+ 'X-Goog-Team-Id': this.account.team_id,
74
+ 'X-XSRF-Token': xsrfToken,
75
+ 'User-Agent': this.getUserAgent(),
76
+ },
77
+ body: JSON.stringify({
78
+ team_id: this.account.team_id,
79
+ csesidx: this.account.csesidx,
80
+ }),
81
+ });
82
+ if (!response.ok) {
83
+ const errorText = await response.text();
84
+ throw new Error(`Failed to create session: ${response.status} ${response.statusText}\n${errorText}`);
85
+ }
86
+ const data = await response.json();
87
+ // Cache session for 50 minutes
88
+ this.account.session_id = data.session_id;
89
+ this.account.session_expires = Date.now() + (50 * 60 * 1000);
90
+ return data.session_id;
91
+ }
92
+ catch (error) {
93
+ throw new Error(`Session creation failed: ${error}`);
94
+ }
95
+ }
96
+ /**
97
+ * Send chat completion request to widgetStreamAssist
98
+ */
99
+ async chatCompletion(request) {
100
+ try {
101
+ const sessionId = await this.createSession();
102
+ const xsrfToken = await this.getXSRFToken();
103
+ // Convert OpenAI format to Gemini Business format
104
+ const geminiRequest = this.convertToGeminiFormat(request, sessionId);
105
+ const response = await fetch(STREAM_ASSIST_URL, {
106
+ method: 'POST',
107
+ headers: {
108
+ 'Content-Type': 'application/json',
109
+ 'Cookie': this.buildCookieHeader(),
110
+ 'X-Goog-Team-Id': this.account.team_id,
111
+ 'X-XSRF-Token': xsrfToken,
112
+ 'User-Agent': this.getUserAgent(),
113
+ },
114
+ body: JSON.stringify(geminiRequest),
115
+ });
116
+ if (!response.ok) {
117
+ const errorText = await response.text();
118
+ throw new Error(`Chat completion failed: ${response.status} ${response.statusText}\n${errorText}`);
119
+ }
120
+ // Handle streaming response
121
+ if (request.stream) {
122
+ return this.handleStreamResponse(response, request.model);
123
+ }
124
+ // Handle non-streaming response
125
+ const data = await response.json();
126
+ return this.convertToOpenAIFormat(data, request.model);
127
+ }
128
+ catch (error) {
129
+ throw new Error(`Chat completion request failed: ${error}`);
130
+ }
131
+ }
132
+ /**
133
+ * Build cookie header string
134
+ */
135
+ buildCookieHeader() {
136
+ return `__Secure-c_ses=${this.account.cookies.secure_c_ses}; __Host-c_oses=${this.account.cookies.host_c_oses}`;
137
+ }
138
+ /**
139
+ * Get user agent string
140
+ */
141
+ getUserAgent() {
142
+ return (this.account.user_agent ||
143
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
144
+ }
145
+ /**
146
+ * Convert OpenAI format to Gemini Business format
147
+ */
148
+ convertToGeminiFormat(request, sessionId) {
149
+ // Build prompt from messages
150
+ const prompt = this.buildPromptFromMessages(request.messages);
151
+ return {
152
+ session_id: sessionId,
153
+ prompt,
154
+ model: request.model || 'gemini-2.5-pro',
155
+ stream: request.stream || false,
156
+ temperature: request.temperature,
157
+ max_tokens: request.max_tokens,
158
+ top_p: request.top_p,
159
+ };
160
+ }
161
+ /**
162
+ * Build prompt string from OpenAI messages array
163
+ */
164
+ buildPromptFromMessages(messages) {
165
+ return messages
166
+ .map((msg) => {
167
+ const role = msg.role === 'assistant' ? 'Assistant' : msg.role === 'system' ? 'System' : 'User';
168
+ if (typeof msg.content === 'string') {
169
+ return `${role}: ${msg.content}`;
170
+ }
171
+ else {
172
+ // Handle multimodal content (text + images)
173
+ const textParts = msg.content
174
+ .filter((part) => part.type === 'text' && part.text)
175
+ .map((part) => part.text)
176
+ .join(' ');
177
+ return `${role}: ${textParts}`;
178
+ }
179
+ })
180
+ .join('\n\n');
181
+ }
182
+ /**
183
+ * Convert Gemini Business format to OpenAI format
184
+ */
185
+ convertToOpenAIFormat(data, model) {
186
+ const content = data.text || data.content || '';
187
+ const finishReason = data.finish_reason || 'stop';
188
+ return {
189
+ id: `chatcmpl-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
190
+ object: 'chat.completion',
191
+ created: Math.floor(Date.now() / 1000),
192
+ model,
193
+ choices: [
194
+ {
195
+ index: 0,
196
+ message: {
197
+ role: 'assistant',
198
+ content,
199
+ },
200
+ finish_reason: finishReason,
201
+ },
202
+ ],
203
+ usage: {
204
+ prompt_tokens: 0, // Gemini Business doesn't provide token counts
205
+ completion_tokens: 0,
206
+ total_tokens: 0,
207
+ },
208
+ };
209
+ }
210
+ /**
211
+ * Handle streaming SSE response
212
+ */
213
+ async *handleStreamResponse(response, model) {
214
+ const reader = response.body;
215
+ let buffer = '';
216
+ try {
217
+ for await (const chunk of reader) {
218
+ buffer += chunk.toString();
219
+ const lines = buffer.split('\n');
220
+ buffer = lines.pop() || '';
221
+ for (const line of lines) {
222
+ const trimmed = line.trim();
223
+ // Skip empty lines and [DONE] marker
224
+ if (!trimmed || trimmed === 'data: [DONE]')
225
+ continue;
226
+ // Parse SSE data
227
+ if (trimmed.startsWith('data: ')) {
228
+ try {
229
+ const jsonStr = trimmed.slice(6);
230
+ const data = JSON.parse(jsonStr);
231
+ // Convert to OpenAI streaming format
232
+ yield {
233
+ id: `chatcmpl-${Date.now()}`,
234
+ object: 'chat.completion.chunk',
235
+ created: Math.floor(Date.now() / 1000),
236
+ model,
237
+ choices: [
238
+ {
239
+ index: 0,
240
+ delta: {
241
+ role: 'assistant',
242
+ content: data.text || data.content || '',
243
+ },
244
+ finish_reason: data.finish_reason || null,
245
+ },
246
+ ],
247
+ };
248
+ }
249
+ catch (error) {
250
+ console.error('Failed to parse SSE data:', error);
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
256
+ catch (error) {
257
+ console.error('Stream reading error:', error);
258
+ throw error;
259
+ }
260
+ }
261
+ /**
262
+ * Test account credentials and connectivity
263
+ */
264
+ async testAccount() {
265
+ try {
266
+ // Test 1: Get XSRF token
267
+ await this.getXSRFToken();
268
+ // Test 2: Create session
269
+ await this.createSession();
270
+ return { success: true };
271
+ }
272
+ catch (error) {
273
+ return {
274
+ success: false,
275
+ error: error instanceof Error ? error.message : String(error),
276
+ };
277
+ }
278
+ }
279
+ /**
280
+ * Check if session needs refresh
281
+ */
282
+ needsSessionRefresh() {
283
+ if (!this.account.session_id || !this.account.session_expires) {
284
+ return true;
285
+ }
286
+ const now = Date.now();
287
+ const expiresIn = this.account.session_expires - now;
288
+ // Refresh if less than 5 minutes remaining
289
+ return expiresIn < (5 * 60 * 1000);
290
+ }
291
+ /**
292
+ * Force refresh session
293
+ */
294
+ async refreshSession() {
295
+ // Clear cached session
296
+ this.account.session_id = undefined;
297
+ this.account.session_expires = undefined;
298
+ // Create new session
299
+ await this.createSession();
300
+ }
301
+ }
302
+ //# sourceMappingURL=gemini-business-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-business-api.js","sourceRoot":"","sources":["../../src/gemini-business-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Types for Gemini Business Pool
3
+ */
4
+ export interface GeminiBusinessAccount {
5
+ id: string;
6
+ name: string;
7
+ team_id: string;
8
+ cookies: {
9
+ secure_c_ses: string;
10
+ host_c_oses: string;
11
+ };
12
+ csesidx: string;
13
+ user_agent?: string;
14
+ xsrf_token?: string;
15
+ xsrf_expires?: number;
16
+ session_id?: string;
17
+ session_expires?: number;
18
+ enabled: boolean;
19
+ last_used?: number;
20
+ error_count?: number;
21
+ last_error?: string;
22
+ }
23
+ export interface PoolConfig {
24
+ accounts: GeminiBusinessAccount[];
25
+ rotation_strategy: 'round-robin' | 'least-used' | 'random';
26
+ max_retries: number;
27
+ retry_delay: number;
28
+ session_refresh_threshold: number;
29
+ error_threshold: number;
30
+ }
31
+ export interface GeminiBusinessSession {
32
+ session_id: string;
33
+ expires_at: number;
34
+ }
35
+ export interface XSRFTokenResponse {
36
+ token: string;
37
+ expires: number;
38
+ }
39
+ export interface WidgetCreateSessionRequest {
40
+ team_id: string;
41
+ csesidx: string;
42
+ }
43
+ export interface WidgetStreamAssistRequest {
44
+ session_id: string;
45
+ prompt: string;
46
+ model: string;
47
+ stream: boolean;
48
+ temperature?: number;
49
+ max_tokens?: number;
50
+ }
51
+ export interface WidgetStreamAssistResponse {
52
+ text?: string;
53
+ content?: string;
54
+ model: string;
55
+ finish_reason?: string;
56
+ }
57
+ export interface ChatMessage {
58
+ role: 'system' | 'user' | 'assistant';
59
+ content: string | Array<{
60
+ type: 'text' | 'image_url';
61
+ text?: string;
62
+ image_url?: {
63
+ url: string;
64
+ };
65
+ }>;
66
+ }
67
+ export interface ChatCompletionRequest {
68
+ model: string;
69
+ messages: ChatMessage[];
70
+ stream?: boolean;
71
+ temperature?: number;
72
+ max_tokens?: number;
73
+ top_p?: number;
74
+ }
75
+ export interface ChatCompletionResponse {
76
+ id: string;
77
+ object: 'chat.completion' | 'chat.completion.chunk';
78
+ created: number;
79
+ model: string;
80
+ choices: Array<{
81
+ index: number;
82
+ message?: {
83
+ role: string;
84
+ content: string;
85
+ };
86
+ delta?: {
87
+ role?: string;
88
+ content?: string;
89
+ };
90
+ finish_reason: string | null;
91
+ }>;
92
+ usage?: {
93
+ prompt_tokens: number;
94
+ completion_tokens: number;
95
+ total_tokens: number;
96
+ };
97
+ }
98
+ export interface ModelInfo {
99
+ id: string;
100
+ object: 'model';
101
+ created: number;
102
+ owned_by: string;
103
+ }
104
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Types for Gemini Business Pool
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "opencode-gemini-business",
3
+ "version": "1.0.0",
4
+ "description": "OpenCode plugin for multi-account Gemini Business pool with automatic rotation",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "opencode-gemini-business": "./bin/cli.js"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "build:watch": "tsc --watch",
14
+ "test": "vitest run",
15
+ "test:watch": "vitest",
16
+ "test:coverage": "vitest run --coverage",
17
+ "lint": "tsc --noEmit",
18
+ "prepublishOnly": "npm run build",
19
+ "semantic-release": "semantic-release"
20
+ },
21
+ "keywords": [
22
+ "opencode",
23
+ "gemini",
24
+ "business",
25
+ "multi-account",
26
+ "pool",
27
+ "ai",
28
+ "google",
29
+ "gemini-api",
30
+ "rotation",
31
+ "failover",
32
+ "plugin"
33
+ ],
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/izzzzzi/opencode-gemini-business.git"
37
+ },
38
+ "bugs": {
39
+ "url": "https://github.com/izzzzzi/opencode-gemini-business/issues"
40
+ },
41
+ "homepage": "https://github.com/izzzzzi/opencode-gemini-business#readme",
42
+ "author": "",
43
+ "license": "MIT",
44
+ "dependencies": {
45
+ "@ai-sdk/google": "^1.0.0",
46
+ "node-fetch": "^3.3.2"
47
+ },
48
+ "devDependencies": {
49
+ "@semantic-release/changelog": "^6.0.3",
50
+ "@semantic-release/git": "^10.0.1",
51
+ "@types/node": "^20.0.0",
52
+ "semantic-release": "^23.0.0",
53
+ "typescript": "^5.3.0",
54
+ "vitest": "^1.0.0"
55
+ },
56
+ "engines": {
57
+ "node": ">=18.0.0"
58
+ },
59
+ "files": [
60
+ "dist/",
61
+ "bin/",
62
+ "README.md",
63
+ "LICENSE",
64
+ "CHANGELOG.md"
65
+ ]
66
+ }