opencode-openai-codex-auth-multi 4.3.0-multiaccount.1 → 4.5.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.
Files changed (87) hide show
  1. package/LICENSE +37 -37
  2. package/README.md +463 -80
  3. package/assets/opencode-logo-ornate-dark.svg +18 -18
  4. package/assets/readme-hero.svg +31 -31
  5. package/config/README.md +98 -98
  6. package/config/minimal-opencode.json +11 -11
  7. package/config/opencode-legacy.json +568 -568
  8. package/config/opencode-modern.json +236 -236
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +391 -135
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/accounts.d.ts +85 -11
  14. package/dist/lib/accounts.d.ts.map +1 -1
  15. package/dist/lib/accounts.js +352 -62
  16. package/dist/lib/accounts.js.map +1 -1
  17. package/dist/lib/auth/auth.d.ts +9 -1
  18. package/dist/lib/auth/auth.d.ts.map +1 -1
  19. package/dist/lib/auth/auth.js +26 -13
  20. package/dist/lib/auth/auth.js.map +1 -1
  21. package/dist/lib/auth/browser.d.ts.map +1 -1
  22. package/dist/lib/auth/browser.js +9 -2
  23. package/dist/lib/auth/browser.js.map +1 -1
  24. package/dist/lib/auth/server.d.ts.map +1 -1
  25. package/dist/lib/auth/server.js +11 -4
  26. package/dist/lib/auth/server.js.map +1 -1
  27. package/dist/lib/auto-update-checker.d.ts +10 -0
  28. package/dist/lib/auto-update-checker.d.ts.map +1 -0
  29. package/dist/lib/auto-update-checker.js +129 -0
  30. package/dist/lib/auto-update-checker.js.map +1 -0
  31. package/dist/lib/cli.d.ts +1 -0
  32. package/dist/lib/cli.d.ts.map +1 -1
  33. package/dist/lib/cli.js +11 -6
  34. package/dist/lib/cli.js.map +1 -1
  35. package/dist/lib/config.d.ts +5 -7
  36. package/dist/lib/config.d.ts.map +1 -1
  37. package/dist/lib/config.js +49 -6
  38. package/dist/lib/config.js.map +1 -1
  39. package/dist/lib/constants.d.ts +7 -0
  40. package/dist/lib/constants.d.ts.map +1 -1
  41. package/dist/lib/constants.js +7 -0
  42. package/dist/lib/constants.js.map +1 -1
  43. package/dist/lib/index.d.ts +13 -0
  44. package/dist/lib/index.d.ts.map +1 -0
  45. package/dist/lib/index.js +13 -0
  46. package/dist/lib/index.js.map +1 -0
  47. package/dist/lib/logger.d.ts +13 -17
  48. package/dist/lib/logger.d.ts.map +1 -1
  49. package/dist/lib/logger.js +89 -24
  50. package/dist/lib/logger.js.map +1 -1
  51. package/dist/lib/oauth-success.html +712 -712
  52. package/dist/lib/prompts/codex-opencode-bridge.js +121 -121
  53. package/dist/lib/prompts/codex.d.ts +5 -0
  54. package/dist/lib/prompts/codex.d.ts.map +1 -1
  55. package/dist/lib/prompts/codex.js +114 -93
  56. package/dist/lib/prompts/codex.js.map +1 -1
  57. package/dist/lib/refresh-queue.d.ts +100 -0
  58. package/dist/lib/refresh-queue.d.ts.map +1 -0
  59. package/dist/lib/refresh-queue.js +196 -0
  60. package/dist/lib/refresh-queue.js.map +1 -0
  61. package/dist/lib/request/fetch-helpers.d.ts +2 -3
  62. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  63. package/dist/lib/request/fetch-helpers.js +26 -29
  64. package/dist/lib/request/fetch-helpers.js.map +1 -1
  65. package/dist/lib/request/rate-limit-backoff.d.ts +17 -0
  66. package/dist/lib/request/rate-limit-backoff.d.ts.map +1 -0
  67. package/dist/lib/request/rate-limit-backoff.js +74 -0
  68. package/dist/lib/request/rate-limit-backoff.js.map +1 -0
  69. package/dist/lib/request/request-transformer.d.ts.map +1 -1
  70. package/dist/lib/request/request-transformer.js +3 -2
  71. package/dist/lib/request/request-transformer.js.map +1 -1
  72. package/dist/lib/request/response-handler.js +1 -1
  73. package/dist/lib/request/response-handler.js.map +1 -1
  74. package/dist/lib/rotation.d.ts +121 -0
  75. package/dist/lib/rotation.d.ts.map +1 -0
  76. package/dist/lib/rotation.js +248 -0
  77. package/dist/lib/rotation.js.map +1 -0
  78. package/dist/lib/storage.d.ts +72 -4
  79. package/dist/lib/storage.d.ts.map +1 -1
  80. package/dist/lib/storage.js +189 -19
  81. package/dist/lib/storage.js.map +1 -1
  82. package/dist/lib/types.d.ts +37 -1
  83. package/dist/lib/types.d.ts.map +1 -1
  84. package/package.json +85 -71
  85. package/scripts/install-opencode-codex-auth.js +191 -191
  86. package/scripts/test-all-models.sh +258 -258
  87. package/scripts/validate-model-map.sh +97 -97
@@ -1,6 +1,8 @@
1
1
  import { decodeJWT } from "./auth/auth.js";
2
2
  import { JWT_CLAIM_PATH } from "./constants.js";
3
3
  import { loadAccounts, saveAccounts, } from "./storage.js";
4
+ import { MODEL_FAMILIES } from "./prompts/codex.js";
5
+ import { getHealthTracker, getTokenTracker, selectHybridAccount, } from "./rotation.js";
4
6
  function nowMs() {
5
7
  return Date.now();
6
8
  }
@@ -10,6 +12,17 @@ function clampNonNegativeInt(value, fallback) {
10
12
  }
11
13
  return value < 0 ? 0 : Math.floor(value);
12
14
  }
15
+ function getQuotaKey(family, model) {
16
+ if (model) {
17
+ return `${family}:${model}`;
18
+ }
19
+ return family;
20
+ }
21
+ /**
22
+ * Extracts the ChatGPT account ID from a JWT access token.
23
+ * @param accessToken - JWT access token from OAuth flow
24
+ * @returns Account ID string or undefined if not found
25
+ */
13
26
  export function extractAccountId(accessToken) {
14
27
  if (!accessToken)
15
28
  return undefined;
@@ -17,30 +30,104 @@ export function extractAccountId(accessToken) {
17
30
  const accountId = decoded?.[JWT_CLAIM_PATH]?.chatgpt_account_id;
18
31
  return typeof accountId === "string" && accountId.trim() ? accountId : undefined;
19
32
  }
20
- function isRateLimited(account) {
21
- if (typeof account.rateLimitResetTime !== "number")
22
- return false;
23
- return nowMs() < account.rateLimitResetTime;
33
+ /**
34
+ * Extracts the email address from a JWT access token.
35
+ * Checks multiple claim paths for compatibility.
36
+ * @param accessToken - JWT access token from OAuth flow
37
+ * @returns Email string or undefined if not found
38
+ */
39
+ export function extractAccountEmail(accessToken) {
40
+ if (!accessToken)
41
+ return undefined;
42
+ const decoded = decodeJWT(accessToken);
43
+ const nested = decoded?.[JWT_CLAIM_PATH];
44
+ const candidate = nested?.email ??
45
+ nested?.chatgpt_user_email ??
46
+ decoded?.email ??
47
+ decoded?.preferred_username;
48
+ if (typeof candidate === "string" && candidate.includes("@") && candidate.trim()) {
49
+ return candidate;
50
+ }
51
+ return undefined;
24
52
  }
25
- function clearExpiredRateLimit(account) {
26
- if (typeof account.rateLimitResetTime !== "number")
27
- return;
28
- if (nowMs() >= account.rateLimitResetTime) {
29
- delete account.rateLimitResetTime;
53
+ /**
54
+ * Sanitizes an email address by trimming whitespace and lowercasing.
55
+ * @param email - Email string to sanitize
56
+ * @returns Sanitized email or undefined if invalid
57
+ */
58
+ export function sanitizeEmail(email) {
59
+ if (!email)
60
+ return undefined;
61
+ const trimmed = email.trim();
62
+ if (!trimmed || !trimmed.includes("@"))
63
+ return undefined;
64
+ return trimmed.toLowerCase();
65
+ }
66
+ function clearExpiredRateLimits(account) {
67
+ const now = nowMs();
68
+ const keys = Object.keys(account.rateLimitResetTimes);
69
+ for (const key of keys) {
70
+ const resetTime = account.rateLimitResetTimes[key];
71
+ if (resetTime !== undefined && now >= resetTime) {
72
+ delete account.rateLimitResetTimes[key];
73
+ }
30
74
  }
31
75
  }
76
+ function isRateLimitedForQuotaKey(account, key) {
77
+ const resetTime = account.rateLimitResetTimes[key];
78
+ return resetTime !== undefined && nowMs() < resetTime;
79
+ }
80
+ function isRateLimitedForFamily(account, family, model) {
81
+ clearExpiredRateLimits(account);
82
+ if (model) {
83
+ const modelKey = getQuotaKey(family, model);
84
+ if (isRateLimitedForQuotaKey(account, modelKey)) {
85
+ return true;
86
+ }
87
+ }
88
+ const baseKey = getQuotaKey(family);
89
+ return isRateLimitedForQuotaKey(account, baseKey);
90
+ }
91
+ /**
92
+ * Manages multiple OAuth accounts with automatic rotation on rate limits.
93
+ * Tracks per-family active indices, rate limit reset times, and cooldowns.
94
+ */
32
95
  export class AccountManager {
33
96
  accounts = [];
34
- cursor = 0;
35
- activeIndex = -1;
97
+ // Per-family cursors for true round-robin rotation
98
+ cursorByFamily = {
99
+ "gpt-5.2-codex": 0,
100
+ "codex-max": 0,
101
+ codex: 0,
102
+ "gpt-5.2": 0,
103
+ "gpt-5.1": 0,
104
+ };
105
+ currentAccountIndexByFamily = {
106
+ "gpt-5.2-codex": -1,
107
+ "codex-max": -1,
108
+ codex: -1,
109
+ "gpt-5.2": -1,
110
+ "gpt-5.1": -1,
111
+ };
36
112
  lastToastAccountIndex = -1;
37
113
  lastToastTime = 0;
114
+ saveDebounceTimer = null;
115
+ pendingSave = null;
116
+ /**
117
+ * Loads account manager from disk storage with optional auth fallback.
118
+ * @param authFallback - Current OAuth auth to use if storage is empty
119
+ * @returns New AccountManager instance
120
+ */
38
121
  static async loadFromDisk(authFallback) {
39
122
  const stored = await loadAccounts();
40
123
  return new AccountManager(authFallback, stored);
41
124
  }
125
+ hasRefreshToken(refreshToken) {
126
+ return this.accounts.some((account) => account.refreshToken === refreshToken);
127
+ }
42
128
  constructor(authFallback, stored) {
43
129
  const fallbackAccountId = extractAccountId(authFallback?.access);
130
+ const fallbackAccountEmail = extractAccountEmail(authFallback?.access);
44
131
  if (stored && stored.accounts.length > 0) {
45
132
  const baseNow = nowMs();
46
133
  this.accounts = stored.accounts
@@ -51,19 +138,20 @@ export class AccountManager {
51
138
  const matchesFallback = !!authFallback &&
52
139
  ((fallbackAccountId && account.accountId === fallbackAccountId) ||
53
140
  account.refreshToken === authFallback.refresh);
54
- const refreshToken = matchesFallback
55
- ? authFallback.refresh
56
- : account.refreshToken;
141
+ const refreshToken = matchesFallback && authFallback ? authFallback.refresh : account.refreshToken;
57
142
  return {
58
143
  index,
59
144
  accountId: matchesFallback ? fallbackAccountId ?? account.accountId : account.accountId,
145
+ email: matchesFallback
146
+ ? sanitizeEmail(fallbackAccountEmail) ?? sanitizeEmail(account.email)
147
+ : sanitizeEmail(account.email),
60
148
  refreshToken,
61
- access: matchesFallback ? authFallback.access : undefined,
62
- expires: matchesFallback ? authFallback.expires : undefined,
149
+ access: matchesFallback && authFallback ? authFallback.access : undefined,
150
+ expires: matchesFallback && authFallback ? authFallback.expires : undefined,
63
151
  addedAt: clampNonNegativeInt(account.addedAt, baseNow),
64
152
  lastUsed: clampNonNegativeInt(account.lastUsed, 0),
65
153
  lastSwitchReason: account.lastSwitchReason,
66
- rateLimitResetTime: account.rateLimitResetTime,
154
+ rateLimitResetTimes: account.rateLimitResetTimes ?? {},
67
155
  coolingDownUntil: account.coolingDownUntil,
68
156
  cooldownReason: account.cooldownReason,
69
157
  };
@@ -77,18 +165,24 @@ export class AccountManager {
77
165
  this.accounts.push({
78
166
  index: this.accounts.length,
79
167
  accountId: fallbackAccountId,
168
+ email: sanitizeEmail(fallbackAccountEmail),
80
169
  refreshToken: authFallback.refresh,
81
170
  access: authFallback.access,
82
171
  expires: authFallback.expires,
83
172
  addedAt: now,
84
173
  lastUsed: now,
85
174
  lastSwitchReason: "initial",
175
+ rateLimitResetTimes: {},
86
176
  });
87
177
  }
88
178
  if (this.accounts.length > 0) {
89
- const nextIndex = clampNonNegativeInt(stored.activeIndex, 0);
90
- this.activeIndex = nextIndex % this.accounts.length;
91
- this.cursor = this.activeIndex;
179
+ const defaultIndex = clampNonNegativeInt(stored.activeIndex, 0) % this.accounts.length;
180
+ for (const family of MODEL_FAMILIES) {
181
+ const rawIndex = stored.activeIndexByFamily?.[family];
182
+ const nextIndex = clampNonNegativeInt(rawIndex, defaultIndex) % this.accounts.length;
183
+ this.currentAccountIndexByFamily[family] = nextIndex;
184
+ this.cursorByFamily[family] = nextIndex;
185
+ }
92
186
  }
93
187
  return;
94
188
  }
@@ -98,26 +192,40 @@ export class AccountManager {
98
192
  {
99
193
  index: 0,
100
194
  accountId: fallbackAccountId,
195
+ email: sanitizeEmail(fallbackAccountEmail),
101
196
  refreshToken: authFallback.refresh,
102
197
  access: authFallback.access,
103
198
  expires: authFallback.expires,
104
199
  addedAt: now,
105
200
  lastUsed: 0,
106
201
  lastSwitchReason: "initial",
202
+ rateLimitResetTimes: {},
107
203
  },
108
204
  ];
109
- this.activeIndex = 0;
110
- this.cursor = 0;
205
+ for (const family of MODEL_FAMILIES) {
206
+ this.currentAccountIndexByFamily[family] = 0;
207
+ this.cursorByFamily[family] = 0;
208
+ }
111
209
  }
112
210
  }
113
211
  getAccountCount() {
114
212
  return this.accounts.length;
115
213
  }
116
214
  getActiveIndex() {
117
- return this.activeIndex;
215
+ return this.getActiveIndexForFamily("codex");
216
+ }
217
+ getActiveIndexForFamily(family) {
218
+ const index = this.currentAccountIndexByFamily[family];
219
+ if (index < 0 || index >= this.accounts.length) {
220
+ return this.accounts.length > 0 ? 0 : -1;
221
+ }
222
+ return index;
118
223
  }
119
224
  getAccountsSnapshot() {
120
- return this.accounts.map((account) => ({ ...account }));
225
+ return this.accounts.map((account) => ({
226
+ ...account,
227
+ rateLimitResetTimes: { ...account.rateLimitResetTimes },
228
+ }));
121
229
  }
122
230
  setActiveIndex(index) {
123
231
  if (!Number.isFinite(index))
@@ -127,54 +235,136 @@ export class AccountManager {
127
235
  const account = this.accounts[index];
128
236
  if (!account)
129
237
  return null;
130
- this.activeIndex = index;
238
+ for (const family of MODEL_FAMILIES) {
239
+ this.currentAccountIndexByFamily[family] = index;
240
+ this.cursorByFamily[family] = index;
241
+ }
131
242
  account.lastUsed = nowMs();
132
243
  account.lastSwitchReason = "rotation";
133
244
  return account;
134
245
  }
135
246
  getCurrentAccount() {
136
- if (this.activeIndex < 0 || this.activeIndex >= this.accounts.length) {
247
+ return this.getCurrentAccountForFamily("codex");
248
+ }
249
+ getCurrentAccountForFamily(family) {
250
+ const index = this.currentAccountIndexByFamily[family];
251
+ if (index < 0 || index >= this.accounts.length) {
137
252
  return null;
138
253
  }
139
- return this.accounts[this.activeIndex] ?? null;
254
+ return this.accounts[index] ?? null;
140
255
  }
141
256
  getCurrentOrNext() {
142
- const current = this.getCurrentAccount();
143
- if (current) {
144
- clearExpiredRateLimit(current);
145
- if (!isRateLimited(current) && !this.isAccountCoolingDown(current)) {
146
- current.lastUsed = nowMs();
147
- return current;
257
+ return this.getCurrentOrNextForFamily("codex");
258
+ }
259
+ getCurrentOrNextForFamily(family, model) {
260
+ const count = this.accounts.length;
261
+ if (count === 0)
262
+ return null;
263
+ // True round-robin: always advance cursor and pick next available account
264
+ const cursor = this.cursorByFamily[family];
265
+ for (let i = 0; i < count; i++) {
266
+ const idx = (cursor + i) % count;
267
+ const account = this.accounts[idx];
268
+ if (!account)
269
+ continue;
270
+ clearExpiredRateLimits(account);
271
+ if (isRateLimitedForFamily(account, family, model) || this.isAccountCoolingDown(account)) {
272
+ continue;
148
273
  }
274
+ // Found available account - advance cursor for next request
275
+ this.cursorByFamily[family] = (idx + 1) % count;
276
+ this.currentAccountIndexByFamily[family] = idx;
277
+ account.lastUsed = nowMs();
278
+ return account;
149
279
  }
150
- const next = this.getNextAvailable();
151
- if (next) {
152
- this.activeIndex = next.index;
153
- }
154
- return next;
280
+ // All accounts blocked
281
+ return null;
155
282
  }
156
- getNextAvailable() {
157
- const available = this.accounts.filter((account) => {
158
- clearExpiredRateLimit(account);
159
- return !isRateLimited(account) && !this.isAccountCoolingDown(account);
160
- });
161
- if (available.length === 0) {
283
+ getNextForFamily(family, model) {
284
+ const count = this.accounts.length;
285
+ if (count === 0)
162
286
  return null;
287
+ const cursor = this.cursorByFamily[family];
288
+ for (let i = 0; i < count; i++) {
289
+ const idx = (cursor + i) % count;
290
+ const account = this.accounts[idx];
291
+ if (!account)
292
+ continue;
293
+ clearExpiredRateLimits(account);
294
+ if (isRateLimitedForFamily(account, family, model) || this.isAccountCoolingDown(account)) {
295
+ continue;
296
+ }
297
+ this.cursorByFamily[family] = (idx + 1) % count;
298
+ account.lastUsed = nowMs();
299
+ return account;
163
300
  }
164
- const account = available[this.cursor % available.length];
301
+ return null;
302
+ }
303
+ getCurrentOrNextForFamilyHybrid(family, model) {
304
+ const count = this.accounts.length;
305
+ if (count === 0)
306
+ return null;
307
+ const quotaKey = model ? `${family}:${model}` : family;
308
+ const healthTracker = getHealthTracker();
309
+ const tokenTracker = getTokenTracker();
310
+ const accountsWithMetrics = this.accounts
311
+ .map((account) => {
312
+ if (!account)
313
+ return null;
314
+ clearExpiredRateLimits(account);
315
+ const isAvailable = !isRateLimitedForFamily(account, family, model) && !this.isAccountCoolingDown(account);
316
+ return {
317
+ index: account.index,
318
+ isAvailable,
319
+ lastUsed: account.lastUsed,
320
+ };
321
+ })
322
+ .filter((a) => a !== null);
323
+ const selected = selectHybridAccount(accountsWithMetrics, healthTracker, tokenTracker, quotaKey);
324
+ if (!selected)
325
+ return null;
326
+ const account = this.accounts[selected.index];
165
327
  if (!account)
166
328
  return null;
167
- this.cursor += 1;
329
+ this.currentAccountIndexByFamily[family] = account.index;
330
+ this.cursorByFamily[family] = (account.index + 1) % count;
168
331
  account.lastUsed = nowMs();
169
332
  return account;
170
333
  }
171
- markSwitched(account, reason) {
334
+ recordSuccess(account, family, model) {
335
+ const quotaKey = model ? `${family}:${model}` : family;
336
+ const healthTracker = getHealthTracker();
337
+ healthTracker.recordSuccess(account.index, quotaKey);
338
+ }
339
+ recordRateLimit(account, family, model) {
340
+ const quotaKey = model ? `${family}:${model}` : family;
341
+ const healthTracker = getHealthTracker();
342
+ const tokenTracker = getTokenTracker();
343
+ healthTracker.recordRateLimit(account.index, quotaKey);
344
+ tokenTracker.drain(account.index, quotaKey);
345
+ }
346
+ recordFailure(account, family, model) {
347
+ const quotaKey = model ? `${family}:${model}` : family;
348
+ const healthTracker = getHealthTracker();
349
+ healthTracker.recordFailure(account.index, quotaKey);
350
+ }
351
+ markSwitched(account, reason, family) {
172
352
  account.lastSwitchReason = reason;
173
- this.activeIndex = account.index;
353
+ this.currentAccountIndexByFamily[family] = account.index;
174
354
  }
175
- markRateLimited(account, retryAfterMs) {
355
+ markRateLimited(account, retryAfterMs, family, model) {
356
+ this.markRateLimitedWithReason(account, retryAfterMs, family, "unknown", model);
357
+ }
358
+ markRateLimitedWithReason(account, retryAfterMs, family, reason, model) {
176
359
  const retryMs = Math.max(0, Math.floor(retryAfterMs));
177
- account.rateLimitResetTime = nowMs() + retryMs;
360
+ const resetAt = nowMs() + retryMs;
361
+ const baseKey = getQuotaKey(family);
362
+ account.rateLimitResetTimes[baseKey] = resetAt;
363
+ if (model) {
364
+ const modelKey = getQuotaKey(family, model);
365
+ account.rateLimitResetTimes[modelKey] = resetAt;
366
+ }
367
+ account.lastRateLimitReason = reason;
178
368
  }
179
369
  markAccountCoolingDown(account, cooldownMs, reason) {
180
370
  const ms = Math.max(0, Math.floor(cooldownMs));
@@ -210,6 +400,7 @@ export class AccountManager {
210
400
  account.access = auth.access;
211
401
  account.expires = auth.expires;
212
402
  account.accountId = extractAccountId(auth.access) ?? account.accountId;
403
+ account.email = sanitizeEmail(extractAccountEmail(auth.access)) ?? account.email;
213
404
  }
214
405
  toAuthDetails(account) {
215
406
  return {
@@ -220,17 +411,29 @@ export class AccountManager {
220
411
  };
221
412
  }
222
413
  getMinWaitTime() {
414
+ return this.getMinWaitTimeForFamily("codex");
415
+ }
416
+ getMinWaitTimeForFamily(family, model) {
223
417
  const now = nowMs();
224
418
  const available = this.accounts.filter((account) => {
225
- clearExpiredRateLimit(account);
226
- return !isRateLimited(account) && !this.isAccountCoolingDown(account);
419
+ clearExpiredRateLimits(account);
420
+ return !isRateLimitedForFamily(account, family, model) && !this.isAccountCoolingDown(account);
227
421
  });
228
422
  if (available.length > 0)
229
423
  return 0;
230
424
  const waitTimes = [];
425
+ const baseKey = getQuotaKey(family);
426
+ const modelKey = model ? getQuotaKey(family, model) : null;
231
427
  for (const account of this.accounts) {
232
- if (typeof account.rateLimitResetTime === "number") {
233
- waitTimes.push(Math.max(0, account.rateLimitResetTime - now));
428
+ const baseResetAt = account.rateLimitResetTimes[baseKey];
429
+ if (typeof baseResetAt === "number") {
430
+ waitTimes.push(Math.max(0, baseResetAt - now));
431
+ }
432
+ if (modelKey) {
433
+ const modelResetAt = account.rateLimitResetTimes[modelKey];
434
+ if (typeof modelResetAt === "number") {
435
+ waitTimes.push(Math.max(0, modelResetAt - now));
436
+ }
234
437
  }
235
438
  if (typeof account.coolingDownUntil === "number") {
236
439
  waitTimes.push(Math.max(0, account.coolingDownUntil - now));
@@ -238,30 +441,111 @@ export class AccountManager {
238
441
  }
239
442
  return waitTimes.length > 0 ? Math.min(...waitTimes) : 0;
240
443
  }
444
+ removeAccount(account) {
445
+ const idx = this.accounts.indexOf(account);
446
+ if (idx < 0) {
447
+ return false;
448
+ }
449
+ this.accounts.splice(idx, 1);
450
+ this.accounts.forEach((acc, index) => {
451
+ acc.index = index;
452
+ });
453
+ if (this.accounts.length === 0) {
454
+ for (const family of MODEL_FAMILIES) {
455
+ this.cursorByFamily[family] = 0;
456
+ this.currentAccountIndexByFamily[family] = -1;
457
+ }
458
+ return true;
459
+ }
460
+ const cursor = this.cursorByFamily["codex"];
461
+ if (cursor > idx) {
462
+ for (const family of MODEL_FAMILIES) {
463
+ this.cursorByFamily[family] = Math.max(0, this.cursorByFamily[family] - 1);
464
+ }
465
+ }
466
+ for (const family of MODEL_FAMILIES) {
467
+ this.cursorByFamily[family] = this.cursorByFamily[family] % this.accounts.length;
468
+ }
469
+ for (const family of MODEL_FAMILIES) {
470
+ if (this.currentAccountIndexByFamily[family] > idx) {
471
+ this.currentAccountIndexByFamily[family] -= 1;
472
+ }
473
+ if (this.currentAccountIndexByFamily[family] >= this.accounts.length) {
474
+ this.currentAccountIndexByFamily[family] = -1;
475
+ }
476
+ }
477
+ return true;
478
+ }
241
479
  async saveToDisk() {
480
+ const activeIndexByFamily = {};
481
+ for (const family of MODEL_FAMILIES) {
482
+ const raw = this.currentAccountIndexByFamily[family];
483
+ activeIndexByFamily[family] = clampNonNegativeInt(raw, 0);
484
+ }
485
+ const activeIndex = clampNonNegativeInt(activeIndexByFamily.codex, 0);
242
486
  const storage = {
243
- version: 1,
487
+ version: 3,
244
488
  accounts: this.accounts.map((account) => ({
245
489
  accountId: account.accountId,
490
+ email: account.email,
246
491
  refreshToken: account.refreshToken,
247
492
  addedAt: account.addedAt,
248
493
  lastUsed: account.lastUsed,
249
494
  lastSwitchReason: account.lastSwitchReason,
250
- rateLimitResetTime: account.rateLimitResetTime,
495
+ rateLimitResetTimes: Object.keys(account.rateLimitResetTimes).length > 0 ? account.rateLimitResetTimes : undefined,
251
496
  coolingDownUntil: account.coolingDownUntil,
252
497
  cooldownReason: account.cooldownReason,
253
498
  })),
254
- activeIndex: Math.max(0, this.activeIndex),
499
+ activeIndex,
500
+ activeIndexByFamily,
255
501
  };
256
502
  await saveAccounts(storage);
257
503
  }
504
+ saveToDiskDebounced(delayMs = 500) {
505
+ if (this.saveDebounceTimer) {
506
+ clearTimeout(this.saveDebounceTimer);
507
+ }
508
+ this.saveDebounceTimer = setTimeout(() => {
509
+ this.saveDebounceTimer = null;
510
+ this.pendingSave = this.saveToDisk().finally(() => {
511
+ this.pendingSave = null;
512
+ });
513
+ }, delayMs);
514
+ }
515
+ async flushPendingSave() {
516
+ if (this.saveDebounceTimer) {
517
+ clearTimeout(this.saveDebounceTimer);
518
+ this.saveDebounceTimer = null;
519
+ await this.saveToDisk();
520
+ }
521
+ if (this.pendingSave) {
522
+ await this.pendingSave;
523
+ }
524
+ }
258
525
  }
259
- export function formatAccountLabel(accountId, index) {
260
- if (!accountId)
261
- return `Account ${index + 1}`;
262
- const suffix = accountId.length > 6 ? accountId.slice(-6) : accountId;
263
- return `Account ${index + 1} (${suffix})`;
526
+ /**
527
+ * Formats a human-readable label for an account (e.g., "Account 1 (user@email.com)").
528
+ * @param account - Account with optional email and accountId
529
+ * @param index - Zero-based account index
530
+ * @returns Formatted label string
531
+ */
532
+ export function formatAccountLabel(account, index) {
533
+ const email = account?.email?.trim();
534
+ const accountId = account?.accountId?.trim();
535
+ const idSuffix = accountId ? (accountId.length > 6 ? accountId.slice(-6) : accountId) : null;
536
+ if (email && idSuffix)
537
+ return `Account ${index + 1} (${email}, id:${idSuffix})`;
538
+ if (email)
539
+ return `Account ${index + 1} (${email})`;
540
+ if (idSuffix)
541
+ return `Account ${index + 1} (${idSuffix})`;
542
+ return `Account ${index + 1}`;
264
543
  }
544
+ /**
545
+ * Formats milliseconds as a human-readable wait time (e.g., "2m 30s").
546
+ * @param ms - Duration in milliseconds
547
+ * @returns Formatted string like "2m 30s" or "45s"
548
+ */
265
549
  export function formatWaitTime(ms) {
266
550
  const totalSeconds = Math.max(0, Math.floor(ms / 1000));
267
551
  const minutes = Math.floor(totalSeconds / 60);
@@ -270,6 +554,12 @@ export function formatWaitTime(ms) {
270
554
  return `${minutes}m ${seconds}s`;
271
555
  return `${seconds}s`;
272
556
  }
557
+ /**
558
+ * Formats cooldown status for an account if currently cooling down.
559
+ * @param account - Account with optional cooldown state
560
+ * @param now - Current timestamp (defaults to Date.now())
561
+ * @returns Formatted cooldown string or null if not cooling down
562
+ */
273
563
  export function formatCooldown(account, now = nowMs()) {
274
564
  if (typeof account.coolingDownUntil !== "number")
275
565
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
@@ -35,9 +35,17 @@ export declare function decodeJWT(token: string): JWTPayload | null;
35
35
  * @returns Token result
36
36
  */
37
37
  export declare function refreshAccessToken(refreshToken: string): Promise<TokenResult>;
38
+ export interface AuthorizationFlowOptions {
39
+ /**
40
+ * Force a fresh login screen instead of using cached browser session.
41
+ * Use when adding multiple accounts to ensure different credentials.
42
+ */
43
+ forceNewLogin?: boolean;
44
+ }
38
45
  /**
39
46
  * Create OAuth authorization flow
47
+ * @param options - Optional configuration for the flow
40
48
  * @returns Authorization flow details
41
49
  */
42
- export declare function createAuthorizationFlow(): Promise<AuthorizationFlow>;
50
+ export declare function createAuthorizationFlow(options?: AuthorizationFlowOptions): Promise<AuthorizationFlow>;
43
51
  //# sourceMappingURL=auth.d.ts.map