geminimock 0.1.2 → 0.1.3

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.
Files changed (36) hide show
  1. package/README.md +77 -8
  2. package/dist/auth/account-store.d.ts +36 -0
  3. package/dist/auth/account-store.js +366 -0
  4. package/dist/auth/account-store.js.map +1 -0
  5. package/dist/auth/credential-store.d.ts +2 -0
  6. package/dist/auth/credential-store.js +33 -1
  7. package/dist/auth/credential-store.js.map +1 -1
  8. package/dist/auth/oauth-flow.d.ts +0 -2
  9. package/dist/auth/oauth-flow.js +122 -15
  10. package/dist/auth/oauth-flow.js.map +1 -1
  11. package/dist/auth/oauth-service.d.ts +12 -3
  12. package/dist/auth/oauth-service.js +90 -29
  13. package/dist/auth/oauth-service.js.map +1 -1
  14. package/dist/cli.js +336 -14
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/auth-login.d.ts +16 -0
  17. package/dist/commands/auth-login.js +114 -0
  18. package/dist/commands/auth-login.js.map +1 -0
  19. package/dist/commands/auth-logout.d.ts +19 -0
  20. package/dist/commands/auth-logout.js +178 -0
  21. package/dist/commands/auth-logout.js.map +1 -0
  22. package/dist/config/env.d.ts +1 -0
  23. package/dist/config/env.js +3 -1
  24. package/dist/config/env.js.map +1 -1
  25. package/dist/gemini/code-assist-client.d.ts +15 -1
  26. package/dist/gemini/code-assist-client.js +101 -37
  27. package/dist/gemini/code-assist-client.js.map +1 -1
  28. package/dist/gemini/errors.d.ts +8 -0
  29. package/dist/gemini/errors.js +29 -0
  30. package/dist/gemini/errors.js.map +1 -0
  31. package/dist/server/app.js +8 -3
  32. package/dist/server/app.js.map +1 -1
  33. package/dist/server/background-service.d.ts +46 -0
  34. package/dist/server/background-service.js +332 -0
  35. package/dist/server/background-service.js.map +1 -0
  36. package/package.json +6 -1
@@ -0,0 +1,178 @@
1
+ function formatAccountLabel(account) {
2
+ return account.email ? `${account.id} (${account.email})` : account.id;
3
+ }
4
+ function moveIndex(current, delta, total) {
5
+ if (total <= 0) {
6
+ return 0;
7
+ }
8
+ const next = (current + delta) % total;
9
+ return next < 0 ? next + total : next;
10
+ }
11
+ function buildMenuItems(accounts) {
12
+ return [
13
+ ...accounts.map((account) => ({ kind: "account", account })),
14
+ { kind: "all" },
15
+ { kind: "cancel" }
16
+ ];
17
+ }
18
+ function initialMainIndex(accounts, activeId) {
19
+ if (!activeId) {
20
+ return 0;
21
+ }
22
+ const index = accounts.findIndex((account) => account.id === activeId);
23
+ return index < 0 ? 0 : index;
24
+ }
25
+ function renderMainScreen(items, index, activeId) {
26
+ const lines = [
27
+ "+------------------------------------------------------------+",
28
+ "| GeminiMock Logout Selector |",
29
+ "+------------------------------------------------------------+",
30
+ "Use Up/Down to move, Enter to select, Q/Esc to cancel",
31
+ "Legend: [*] active account",
32
+ ""
33
+ ];
34
+ for (let i = 0; i < items.length; i += 1) {
35
+ const item = items[i];
36
+ const marker = i === index ? ">" : " ";
37
+ if (item.kind === "account") {
38
+ const activeMarker = item.account.id === activeId ? "*" : " ";
39
+ const email = item.account.email ?? "(no email)";
40
+ lines.push(`${marker} [${activeMarker}] ${email} ${item.account.id}`);
41
+ continue;
42
+ }
43
+ if (item.kind === "all") {
44
+ lines.push(`${marker} [ ] Logout ALL accounts`);
45
+ continue;
46
+ }
47
+ lines.push(`${marker} [ ] Cancel`);
48
+ }
49
+ lines.push("");
50
+ return lines.join("\n");
51
+ }
52
+ function renderConfirmAllScreen(index) {
53
+ const options = ["No, keep accounts", "Yes, logout ALL accounts"];
54
+ const lines = [
55
+ "+------------------------------------------------------------+",
56
+ "| Confirm Logout ALL Accounts |",
57
+ "+------------------------------------------------------------+",
58
+ "Use Up/Down and Enter to confirm",
59
+ ""
60
+ ];
61
+ for (let i = 0; i < options.length; i += 1) {
62
+ const marker = i === index ? ">" : " ";
63
+ lines.push(`${marker} ${options[i]}`);
64
+ }
65
+ lines.push("");
66
+ return lines.join("\n");
67
+ }
68
+ async function logoutActiveAndDescribe(oauthService, store) {
69
+ const activeBefore = await store.getActiveAccount();
70
+ const removed = await oauthService.logout();
71
+ if (!removed) {
72
+ return ["No active account to logout"];
73
+ }
74
+ const activeAfter = await store.getActiveAccount();
75
+ const lines = [`Logged out account: ${formatAccountLabel(removed)}`];
76
+ if (!activeBefore || activeBefore.id !== removed.id) {
77
+ if (activeAfter) {
78
+ lines.push(`Active account unchanged: ${formatAccountLabel(activeAfter)}`);
79
+ }
80
+ else {
81
+ lines.push("No active account remaining");
82
+ }
83
+ return lines;
84
+ }
85
+ if (!activeAfter) {
86
+ lines.push("No accounts remaining");
87
+ return lines;
88
+ }
89
+ lines.push(`Active account switched to: ${formatAccountLabel(activeAfter)}`);
90
+ return lines;
91
+ }
92
+ async function logoutSpecificAndDescribe(oauthService, store, target) {
93
+ const activeBefore = await store.getActiveAccount();
94
+ if (activeBefore?.id === target.id) {
95
+ return logoutActiveAndDescribe(oauthService, store);
96
+ }
97
+ const removed = await oauthService.removeAccount(target.id);
98
+ if (!removed) {
99
+ return [`Account not found: ${target.id}`];
100
+ }
101
+ const activeAfter = await store.getActiveAccount();
102
+ const lines = [`Logged out account: ${formatAccountLabel(target)}`];
103
+ if (!activeAfter) {
104
+ lines.push("No active account remaining");
105
+ return lines;
106
+ }
107
+ lines.push(`Active account unchanged: ${formatAccountLabel(activeAfter)}`);
108
+ return lines;
109
+ }
110
+ export async function runAuthLogoutFlow(options) {
111
+ const { oauthService, store, io, forceAll = false } = options;
112
+ const accounts = await oauthService.listAccounts();
113
+ if (accounts.length === 0) {
114
+ return ["No accounts registered"];
115
+ }
116
+ if (forceAll) {
117
+ await oauthService.logoutAll();
118
+ return ["All OAuth accounts cleared"];
119
+ }
120
+ if (!io.isTTY) {
121
+ return logoutActiveAndDescribe(oauthService, store);
122
+ }
123
+ const active = await store.getActiveAccount();
124
+ const items = buildMenuItems(accounts);
125
+ let state = {
126
+ kind: "main",
127
+ index: initialMainIndex(accounts, active?.id)
128
+ };
129
+ while (true) {
130
+ io.clear();
131
+ if (state.kind === "main") {
132
+ io.write(`${renderMainScreen(items, state.index, active?.id)}\n`);
133
+ }
134
+ else {
135
+ io.write(`${renderConfirmAllScreen(state.index)}\n`);
136
+ }
137
+ const key = await io.readKey();
138
+ if (state.kind === "main") {
139
+ if (key === "up") {
140
+ state = { kind: "main", index: moveIndex(state.index, -1, items.length) };
141
+ continue;
142
+ }
143
+ if (key === "down") {
144
+ state = { kind: "main", index: moveIndex(state.index, 1, items.length) };
145
+ continue;
146
+ }
147
+ if (key === "cancel") {
148
+ return ["Logout cancelled"];
149
+ }
150
+ const selected = items[state.index];
151
+ if (!selected || selected.kind === "cancel") {
152
+ return ["Logout cancelled"];
153
+ }
154
+ if (selected.kind === "all") {
155
+ state = { kind: "confirmAll", index: 0 };
156
+ continue;
157
+ }
158
+ return logoutSpecificAndDescribe(oauthService, store, selected.account);
159
+ }
160
+ if (key === "up") {
161
+ state = { kind: "confirmAll", index: moveIndex(state.index, -1, 2) };
162
+ continue;
163
+ }
164
+ if (key === "down") {
165
+ state = { kind: "confirmAll", index: moveIndex(state.index, 1, 2) };
166
+ continue;
167
+ }
168
+ if (key === "cancel") {
169
+ return ["Logout cancelled"];
170
+ }
171
+ if (state.index === 1) {
172
+ await oauthService.logoutAll();
173
+ return ["All OAuth accounts cleared"];
174
+ }
175
+ return ["Logout cancelled"];
176
+ }
177
+ }
178
+ //# sourceMappingURL=auth-logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-logout.js","sourceRoot":"","sources":["../../src/commands/auth-logout.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export type AppEnv = {
4
4
  defaultModel: string;
5
5
  codeAssistEndpoint: string;
6
6
  codeAssistApiVersion: string;
7
+ accountsPath: string;
7
8
  oauthPath: string;
8
9
  oauthFallbackPath: string;
9
10
  projectId?: string;
@@ -3,10 +3,11 @@ import { join } from "node:path";
3
3
  import { z } from "zod";
4
4
  const schema = z.object({
5
5
  GEMINI_CLI_API_HOST: z.string().default("127.0.0.1"),
6
- GEMINI_CLI_API_PORT: z.coerce.number().int().min(1).max(65535).default(8080),
6
+ GEMINI_CLI_API_PORT: z.coerce.number().int().min(1).max(65535).default(43173),
7
7
  GEMINI_CLI_MODEL: z.string().default("gemini-2.5-pro"),
8
8
  CODE_ASSIST_ENDPOINT: z.string().url().default("https://cloudcode-pa.googleapis.com"),
9
9
  CODE_ASSIST_API_VERSION: z.string().default("v1internal"),
10
+ GEMINI_CLI_API_ACCOUNTS_PATH: z.string().default(join(homedir(), ".geminimock", "accounts.json")),
10
11
  GEMINI_CLI_API_OAUTH_PATH: z.string().default(join(homedir(), ".geminimock", "oauth_creds.json")),
11
12
  GEMINI_CLI_OAUTH_FALLBACK_PATH: z.string().default(join(homedir(), ".gemini", "oauth_creds.json")),
12
13
  GOOGLE_CLOUD_PROJECT: z.string().optional(),
@@ -20,6 +21,7 @@ export function loadEnv(source = process.env) {
20
21
  defaultModel: parsed.GEMINI_CLI_MODEL,
21
22
  codeAssistEndpoint: parsed.CODE_ASSIST_ENDPOINT,
22
23
  codeAssistApiVersion: parsed.CODE_ASSIST_API_VERSION,
24
+ accountsPath: parsed.GEMINI_CLI_API_ACCOUNTS_PATH,
23
25
  oauthPath: parsed.GEMINI_CLI_API_OAUTH_PATH,
24
26
  oauthFallbackPath: parsed.GEMINI_CLI_OAUTH_FALLBACK_PATH,
25
27
  projectId: parsed.GOOGLE_CLOUD_PROJECT ?? parsed.GOOGLE_CLOUD_PROJECT_ID
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IACpD,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5E,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACtD,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC;IACrF,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IACzD,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;IACjG,8BAA8B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAClG,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC;AAaH,MAAM,UAAU,OAAO,CAAC,SAAiE,OAAO,CAAC,GAAG;IAClG,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,mBAAmB;QAChC,IAAI,EAAE,MAAM,CAAC,mBAAmB;QAChC,YAAY,EAAE,MAAM,CAAC,gBAAgB;QACrC,kBAAkB,EAAE,MAAM,CAAC,oBAAoB;QAC/C,oBAAoB,EAAE,MAAM,CAAC,uBAAuB;QACpD,SAAS,EAAE,MAAM,CAAC,yBAAyB;QAC3C,iBAAiB,EAAE,MAAM,CAAC,8BAA8B;QACxD,SAAS,EAAE,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,uBAAuB;KACzE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IACpD,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7E,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACtD,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC;IACrF,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IACzD,4BAA4B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IACjG,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;IACjG,8BAA8B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAClG,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC;AAcH,MAAM,UAAU,OAAO,CAAC,SAAiE,OAAO,CAAC,GAAG;IAClG,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,mBAAmB;QAChC,IAAI,EAAE,MAAM,CAAC,mBAAmB;QAChC,YAAY,EAAE,MAAM,CAAC,gBAAgB;QACrC,kBAAkB,EAAE,MAAM,CAAC,oBAAoB;QAC/C,oBAAoB,EAAE,MAAM,CAAC,uBAAuB;QACpD,YAAY,EAAE,MAAM,CAAC,4BAA4B;QACjD,SAAS,EAAE,MAAM,CAAC,yBAAyB;QAC3C,iBAAiB,EAAE,MAAM,CAAC,8BAA8B;QACxD,SAAS,EAAE,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,uBAAuB;KACzE,CAAC;AACJ,CAAC"}
@@ -1,10 +1,24 @@
1
1
  import type { AppEnv } from "../config/env.js";
2
2
  import type { CAGenerateContentRequest, CaGenerateContentResponse, LoadCodeAssistResponse, LongRunningOperationResponse, OnboardUserRequest, RetrieveUserQuotaResponse } from "./types.js";
3
+ import { CodeAssistApiError } from "./errors.js";
3
4
  export declare class CodeAssistClient {
4
5
  private readonly env;
5
6
  private readonly getAccessToken;
7
+ private readonly hooks;
6
8
  private projectCache?;
7
- constructor(env: AppEnv, getAccessToken: () => Promise<string>);
9
+ private projectCacheAccountKey?;
10
+ constructor(env: AppEnv, getAccessToken: () => Promise<string>, hooks?: {
11
+ onApiError?: (error: CodeAssistApiError) => Promise<boolean>;
12
+ onApiSuccess?: () => Promise<void>;
13
+ maxAttempts?: () => number | Promise<number>;
14
+ getAccountCacheKey?: () => string | undefined | Promise<string | undefined>;
15
+ });
16
+ private resolveAccountCacheKey;
17
+ private refreshCacheContext;
18
+ private invalidateProjectCache;
19
+ private resolveAttempts;
20
+ private withJsonRetry;
21
+ private withStreamRetry;
8
22
  private buildUrl;
9
23
  private postJson;
10
24
  loadCodeAssist(projectId?: string): Promise<LoadCodeAssistResponse>;
@@ -1,3 +1,4 @@
1
+ import { CodeAssistApiError, parseRetryAfterMs } from "./errors.js";
1
2
  function platformToCode() {
2
3
  const p = process.platform;
3
4
  const a = process.arch;
@@ -50,10 +51,76 @@ async function* parseSseStream(stream) {
50
51
  export class CodeAssistClient {
51
52
  env;
52
53
  getAccessToken;
54
+ hooks;
53
55
  projectCache;
54
- constructor(env, getAccessToken) {
56
+ projectCacheAccountKey;
57
+ constructor(env, getAccessToken, hooks = {}) {
55
58
  this.env = env;
56
59
  this.getAccessToken = getAccessToken;
60
+ this.hooks = hooks;
61
+ }
62
+ async resolveAccountCacheKey() {
63
+ const key = this.hooks.getAccountCacheKey ? await this.hooks.getAccountCacheKey() : undefined;
64
+ return key ?? undefined;
65
+ }
66
+ async refreshCacheContext() {
67
+ const accountKey = await this.resolveAccountCacheKey();
68
+ if (accountKey !== this.projectCacheAccountKey) {
69
+ this.projectCache = undefined;
70
+ this.projectCacheAccountKey = accountKey;
71
+ }
72
+ }
73
+ async invalidateProjectCache() {
74
+ this.projectCache = undefined;
75
+ this.projectCacheAccountKey = await this.resolveAccountCacheKey();
76
+ }
77
+ async resolveAttempts() {
78
+ const candidate = this.hooks.maxAttempts ? await this.hooks.maxAttempts() : 1;
79
+ if (!Number.isFinite(candidate) || candidate < 1) {
80
+ return 1;
81
+ }
82
+ return Math.floor(candidate);
83
+ }
84
+ async withJsonRetry(method, execute, onRetry) {
85
+ const attempts = await this.resolveAttempts();
86
+ for (let attempt = 1; attempt <= attempts; attempt += 1) {
87
+ const token = await this.getAccessToken();
88
+ const response = await execute(token);
89
+ if (response.ok) {
90
+ const payload = (await response.json());
91
+ await this.hooks.onApiSuccess?.();
92
+ return payload;
93
+ }
94
+ const body = await response.text();
95
+ const error = new CodeAssistApiError(method, response.status, body, parseRetryAfterMs(response.headers.get("retry-after")));
96
+ const canRetry = attempt < attempts && await this.hooks.onApiError?.(error);
97
+ if (!canRetry) {
98
+ throw error;
99
+ }
100
+ await this.invalidateProjectCache();
101
+ await onRetry?.();
102
+ }
103
+ throw new Error(`Code Assist ${method} failed`);
104
+ }
105
+ async withStreamRetry(method, execute, onRetry) {
106
+ const attempts = await this.resolveAttempts();
107
+ for (let attempt = 1; attempt <= attempts; attempt += 1) {
108
+ const token = await this.getAccessToken();
109
+ const response = await execute(token);
110
+ if (response.ok) {
111
+ await this.hooks.onApiSuccess?.();
112
+ return response;
113
+ }
114
+ const body = await response.text();
115
+ const error = new CodeAssistApiError(method, response.status, body, parseRetryAfterMs(response.headers.get("retry-after")));
116
+ const canRetry = attempt < attempts && await this.hooks.onApiError?.(error);
117
+ if (!canRetry) {
118
+ throw error;
119
+ }
120
+ await this.invalidateProjectCache();
121
+ await onRetry?.();
122
+ }
123
+ throw new Error(`Code Assist ${method} failed`);
57
124
  }
58
125
  buildUrl(method, query) {
59
126
  const base = `${this.env.codeAssistEndpoint}/${this.env.codeAssistApiVersion}:${method}`;
@@ -63,20 +130,21 @@ export class CodeAssistClient {
63
130
  return `${base}?${query.toString()}`;
64
131
  }
65
132
  async postJson(method, body, query) {
66
- const token = await this.getAccessToken();
67
- const response = await fetch(this.buildUrl(method, query), {
68
- method: "POST",
69
- headers: {
70
- "Content-Type": "application/json",
71
- Authorization: `Bearer ${token}`
72
- },
73
- body: JSON.stringify(body)
133
+ return this.withJsonRetry(method, async (token) => {
134
+ return fetch(this.buildUrl(method, query), {
135
+ method: "POST",
136
+ headers: {
137
+ "Content-Type": "application/json",
138
+ Authorization: `Bearer ${token}`
139
+ },
140
+ body: JSON.stringify(body)
141
+ });
142
+ }, async () => {
143
+ if (method === "generateContent") {
144
+ const payload = body;
145
+ payload.project = await this.resolveProjectId();
146
+ }
74
147
  });
75
- if (!response.ok) {
76
- const text = await response.text();
77
- throw new Error(`Code Assist ${method} failed (${response.status}): ${text}`);
78
- }
79
- return (await response.json());
80
148
  }
81
149
  async loadCodeAssist(projectId) {
82
150
  const request = {
@@ -92,20 +160,17 @@ export class CodeAssistClient {
92
160
  return this.postJson("retrieveUserQuota", { project: projectId });
93
161
  }
94
162
  async getOperation(name) {
95
- const token = await this.getAccessToken();
96
- const response = await fetch(`${this.env.codeAssistEndpoint}/${this.env.codeAssistApiVersion}/${name}`, {
97
- method: "GET",
98
- headers: {
99
- Authorization: `Bearer ${token}`
100
- }
163
+ return this.withJsonRetry("operation", async (token) => {
164
+ return fetch(`${this.env.codeAssistEndpoint}/${this.env.codeAssistApiVersion}/${name}`, {
165
+ method: "GET",
166
+ headers: {
167
+ Authorization: `Bearer ${token}`
168
+ }
169
+ });
101
170
  });
102
- if (!response.ok) {
103
- const text = await response.text();
104
- throw new Error(`Code Assist operation failed (${response.status}): ${text}`);
105
- }
106
- return (await response.json());
107
171
  }
108
172
  async resolveProjectId() {
173
+ await this.refreshCacheContext();
109
174
  if (this.projectCache) {
110
175
  return this.projectCache;
111
176
  }
@@ -153,20 +218,19 @@ export class CodeAssistClient {
153
218
  return this.postJson("generateContent", request);
154
219
  }
155
220
  async *streamGenerateContent(request) {
156
- const token = await this.getAccessToken();
157
221
  const query = new URLSearchParams({ alt: "sse" });
158
- const response = await fetch(this.buildUrl("streamGenerateContent", query), {
159
- method: "POST",
160
- headers: {
161
- "Content-Type": "application/json",
162
- Authorization: `Bearer ${token}`
163
- },
164
- body: JSON.stringify(request)
222
+ const response = await this.withStreamRetry("streamGenerateContent", async (token) => {
223
+ return fetch(this.buildUrl("streamGenerateContent", query), {
224
+ method: "POST",
225
+ headers: {
226
+ "Content-Type": "application/json",
227
+ Authorization: `Bearer ${token}`
228
+ },
229
+ body: JSON.stringify(request)
230
+ });
231
+ }, async () => {
232
+ request.project = await this.resolveProjectId();
165
233
  });
166
- if (!response.ok) {
167
- const text = await response.text();
168
- throw new Error(`Code Assist streamGenerateContent failed (${response.status}): ${text}`);
169
- }
170
234
  if (!response.body) {
171
235
  throw new Error("Empty stream body");
172
236
  }
@@ -1 +1 @@
1
- {"version":3,"file":"code-assist-client.js","sourceRoot":"","sources":["../../src/gemini/code-assist-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code-assist-client.js","sourceRoot":"","sources":["../../src/gemini/code-assist-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare class CodeAssistApiError extends Error {
2
+ readonly method: string;
3
+ readonly status: number;
4
+ readonly body: string;
5
+ readonly retryAfterMs?: number | undefined;
6
+ constructor(method: string, status: number, body: string, retryAfterMs?: number | undefined);
7
+ }
8
+ export declare function parseRetryAfterMs(retryAfter: string | null): number | undefined;
@@ -0,0 +1,29 @@
1
+ export class CodeAssistApiError extends Error {
2
+ method;
3
+ status;
4
+ body;
5
+ retryAfterMs;
6
+ constructor(method, status, body, retryAfterMs) {
7
+ super(`Code Assist ${method} failed (${status}): ${body}`);
8
+ this.method = method;
9
+ this.status = status;
10
+ this.body = body;
11
+ this.retryAfterMs = retryAfterMs;
12
+ }
13
+ }
14
+ export function parseRetryAfterMs(retryAfter) {
15
+ if (!retryAfter) {
16
+ return undefined;
17
+ }
18
+ const asSeconds = Number.parseInt(retryAfter, 10);
19
+ if (Number.isFinite(asSeconds) && asSeconds >= 0) {
20
+ return asSeconds * 1000;
21
+ }
22
+ const asDate = Date.parse(retryAfter);
23
+ if (!Number.isFinite(asDate)) {
24
+ return undefined;
25
+ }
26
+ const delta = asDate - Date.now();
27
+ return delta > 0 ? delta : undefined;
28
+ }
29
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/gemini/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEzB;IACA;IACA;IACA;IAJlB,YACkB,MAAc,EACd,MAAc,EACd,IAAY,EACZ,YAAqB;QAErC,KAAK,CAAC,eAAe,MAAM,YAAY,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QAL3C,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAQ;QACZ,iBAAY,GAAZ,YAAY,CAAS;IAGvC,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAyB;IACzD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAClC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import Fastify from "fastify";
2
2
  import cors from "@fastify/cors";
3
3
  import { ZodError } from "zod";
4
- import { createCredentialStore } from "../auth/credential-store.js";
4
+ import { createAccountStore } from "../auth/account-store.js";
5
5
  import { OAuthService } from "../auth/oauth-service.js";
6
6
  import { loadEnv } from "../config/env.js";
7
7
  import { CodeAssistClient } from "../gemini/code-assist-client.js";
@@ -10,9 +10,14 @@ import { OpenAIChatService } from "../openai/chat-service.js";
10
10
  import { toOpenAIModelList } from "../openai/models-response.js";
11
11
  import { openAIChatCompletionRequestSchema } from "../openai/types.js";
12
12
  export async function createDefaultDependencies(env = loadEnv()) {
13
- const store = createCredentialStore(env.oauthPath, env.oauthFallbackPath);
13
+ const store = createAccountStore(env.accountsPath, env.oauthPath, env.oauthFallbackPath);
14
14
  const oauthService = new OAuthService(store);
15
- const codeAssistClient = new CodeAssistClient(env, () => oauthService.getAccessToken());
15
+ const codeAssistClient = new CodeAssistClient(env, () => oauthService.getAccessToken(), {
16
+ onApiError: (error) => oauthService.handleCodeAssistError(error),
17
+ onApiSuccess: () => oauthService.handleCodeAssistSuccess(),
18
+ maxAttempts: () => oauthService.getApiAttemptLimit(),
19
+ getAccountCacheKey: () => oauthService.getActiveAccountId()
20
+ });
16
21
  const modelCatalogService = new ModelCatalogService(codeAssistClient);
17
22
  const chatService = new OpenAIChatService(env.defaultModel, codeAssistClient, modelCatalogService);
18
23
  return { env, oauthService, chatService, modelCatalogService };
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAe,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iCAAiC,EAAuE,MAAM,oBAAoB,CAAC;AAc5I,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAAG,GAAG,OAAO,EAAE;IAC7D,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC;IACxF,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IACnG,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAkC,EAAE;IAClE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,IAAI,GAAoB;QAC5B,GAAG;QACH,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;QACzD,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;QACtD,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,IAAI,QAAQ,CAAC,mBAAmB;KAC/E,CAAC;IAEF,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACvC,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE/C,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC;YAC3D,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACxD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,iCAAiC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChB,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,EAAE,CAAC;gBAC3D,CAAC;gBACD,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;oBACvB,cAAc,EAAE,mBAAmB;oBACnC,eAAe,EAAE,UAAU;oBAC3B,UAAU,EAAE,YAAY;iBACzB,CAAC,CAAC;gBAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxD,CAAC;gBACD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACpC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChB,OAAO;oBACL,KAAK,EAAE;wBACL,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;qBAC/D;iBACF,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;YACzC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type AppEnv } from "../config/env.js";
2
+ type FileOps = {
3
+ mkdir(path: string): Promise<void>;
4
+ readFile(path: string): Promise<string>;
5
+ writeFile(path: string, data: string): Promise<void>;
6
+ rm(path: string): Promise<void>;
7
+ };
8
+ type BackgroundServiceDeps = {
9
+ fileOps?: FileOps;
10
+ loadEnv?: () => AppEnv;
11
+ execPath?: string;
12
+ entryPath?: string;
13
+ stateDir?: string;
14
+ env?: NodeJS.ProcessEnv;
15
+ spawnProcess?: (command: string, args: string[], logPath: string, env: NodeJS.ProcessEnv) => number;
16
+ isProcessAlive?: (pid: number) => boolean;
17
+ killProcess?: (pid: number, signal?: NodeJS.Signals) => void;
18
+ fetchFn?: typeof fetch;
19
+ wait?: (ms: number) => Promise<void>;
20
+ resolveAvailablePort?: (host: string, preferredPort: number) => Promise<number>;
21
+ };
22
+ export type BackgroundStartResult = {
23
+ alreadyRunning: boolean;
24
+ pid?: number;
25
+ port: number;
26
+ url: string;
27
+ logPath: string;
28
+ };
29
+ export type BackgroundStatusResult = {
30
+ running: boolean;
31
+ pid?: number;
32
+ port: number;
33
+ url: string;
34
+ logPath: string;
35
+ };
36
+ export type BackgroundStopResult = {
37
+ stopped: boolean;
38
+ pid?: number;
39
+ unmanagedRunning?: boolean;
40
+ };
41
+ export declare function createBackgroundServiceManager(deps?: BackgroundServiceDeps): {
42
+ start: () => Promise<BackgroundStartResult>;
43
+ stop: () => Promise<BackgroundStopResult>;
44
+ status: () => Promise<BackgroundStatusResult>;
45
+ };
46
+ export {};