@cortexkit/antigravity-auth-core 1.1.0 → 2.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.
Files changed (105) hide show
  1. package/dist/account-manager.d.ts +281 -0
  2. package/dist/account-manager.d.ts.map +1 -0
  3. package/dist/account-manager.js +1378 -0
  4. package/dist/account-manager.js.map +1 -0
  5. package/dist/account-storage.d.ts +162 -0
  6. package/dist/account-storage.d.ts.map +1 -0
  7. package/dist/account-storage.js +635 -0
  8. package/dist/account-storage.js.map +1 -0
  9. package/dist/account-types.d.ts +136 -0
  10. package/dist/account-types.d.ts.map +1 -0
  11. package/dist/account-types.js +9 -0
  12. package/dist/account-types.js.map +1 -0
  13. package/dist/agy-request-metadata.d.ts +12 -5
  14. package/dist/agy-request-metadata.d.ts.map +1 -1
  15. package/dist/agy-request-metadata.js +64 -38
  16. package/dist/agy-request-metadata.js.map +1 -1
  17. package/dist/agy-transport.d.ts +2 -2
  18. package/dist/agy-transport.d.ts.map +1 -1
  19. package/dist/agy-transport.js +87 -74
  20. package/dist/agy-transport.js.map +1 -1
  21. package/dist/antigravity/oauth.d.ts +3 -2
  22. package/dist/antigravity/oauth.d.ts.map +1 -1
  23. package/dist/antigravity/oauth.js +65 -55
  24. package/dist/antigravity/oauth.js.map +1 -1
  25. package/dist/atomic-write.d.ts +23 -0
  26. package/dist/atomic-write.d.ts.map +1 -0
  27. package/dist/atomic-write.js +47 -0
  28. package/dist/atomic-write.js.map +1 -0
  29. package/dist/auth-types.d.ts +2 -2
  30. package/dist/auth-types.d.ts.map +1 -1
  31. package/dist/auth.d.ts +1 -1
  32. package/dist/auth.d.ts.map +1 -1
  33. package/dist/auth.js +9 -6
  34. package/dist/auth.js.map +1 -1
  35. package/dist/constants.d.ts +19 -12
  36. package/dist/constants.d.ts.map +1 -1
  37. package/dist/constants.js +51 -39
  38. package/dist/constants.js.map +1 -1
  39. package/dist/fetch-timeout.d.ts +26 -0
  40. package/dist/fetch-timeout.d.ts.map +1 -0
  41. package/dist/fetch-timeout.js +43 -0
  42. package/dist/fetch-timeout.js.map +1 -0
  43. package/dist/file-lock.d.ts +79 -0
  44. package/dist/file-lock.d.ts.map +1 -0
  45. package/dist/file-lock.js +438 -0
  46. package/dist/file-lock.js.map +1 -0
  47. package/dist/fingerprint.d.ts +9 -3
  48. package/dist/fingerprint.d.ts.map +1 -1
  49. package/dist/fingerprint.js +28 -20
  50. package/dist/fingerprint.js.map +1 -1
  51. package/dist/index.d.ts +23 -13
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +18 -9
  54. package/dist/index.js.map +1 -1
  55. package/dist/logger.d.ts +1 -1
  56. package/dist/logger.d.ts.map +1 -1
  57. package/dist/logger.js +10 -10
  58. package/dist/logger.js.map +1 -1
  59. package/dist/model-registry.d.ts +5 -5
  60. package/dist/model-registry.d.ts.map +1 -1
  61. package/dist/model-registry.js +107 -106
  62. package/dist/model-registry.js.map +1 -1
  63. package/dist/project.d.ts +1 -1
  64. package/dist/project.d.ts.map +1 -1
  65. package/dist/project.js +53 -25
  66. package/dist/project.js.map +1 -1
  67. package/dist/quota-manager.d.ts +140 -0
  68. package/dist/quota-manager.d.ts.map +1 -0
  69. package/dist/quota-manager.js +481 -0
  70. package/dist/quota-manager.js.map +1 -0
  71. package/dist/quota-types.d.ts +49 -0
  72. package/dist/quota-types.d.ts.map +1 -0
  73. package/dist/quota-types.js +10 -0
  74. package/dist/quota-types.js.map +1 -0
  75. package/dist/rotation.d.ts +175 -0
  76. package/dist/rotation.d.ts.map +1 -0
  77. package/dist/rotation.js +391 -0
  78. package/dist/rotation.js.map +1 -0
  79. package/dist/transform/claude.d.ts +1 -1
  80. package/dist/transform/claude.d.ts.map +1 -1
  81. package/dist/transform/claude.js +63 -41
  82. package/dist/transform/claude.js.map +1 -1
  83. package/dist/transform/cross-model-sanitizer.d.ts +1 -1
  84. package/dist/transform/cross-model-sanitizer.d.ts.map +1 -1
  85. package/dist/transform/cross-model-sanitizer.js +19 -16
  86. package/dist/transform/cross-model-sanitizer.js.map +1 -1
  87. package/dist/transform/gemini.d.ts +1 -1
  88. package/dist/transform/gemini.d.ts.map +1 -1
  89. package/dist/transform/gemini.js +111 -85
  90. package/dist/transform/gemini.js.map +1 -1
  91. package/dist/transform/index.d.ts +9 -9
  92. package/dist/transform/index.d.ts.map +1 -1
  93. package/dist/transform/index.js +6 -6
  94. package/dist/transform/index.js.map +1 -1
  95. package/dist/transform/model-resolver.d.ts +5 -5
  96. package/dist/transform/model-resolver.d.ts.map +1 -1
  97. package/dist/transform/model-resolver.js +97 -75
  98. package/dist/transform/model-resolver.js.map +1 -1
  99. package/dist/transform/types.d.ts +5 -5
  100. package/dist/transform/types.d.ts.map +1 -1
  101. package/dist/version.d.ts +1 -1
  102. package/dist/version.d.ts.map +1 -1
  103. package/dist/version.js +14 -16
  104. package/dist/version.js.map +1 -1
  105. package/package.json +16 -10
@@ -0,0 +1,481 @@
1
+ /**
2
+ * Harness-agnostic attributed quota manager.
3
+ *
4
+ * Owns the per-account quota cache, in-flight de-duplication, and exponential
5
+ * backoff that backgrounds proactive quota refreshes. The manager has no host
6
+ * dependencies — harnesses supply a `fetchAccountQuota` callback that returns
7
+ * the already-attributed `AccountQuotaResult` (with `index`, `email`,
8
+ * `updatedAccount`, etc.) so core stays harness-agnostic.
9
+ *
10
+ * Manual quota dialogs must force a refresh even when background refresh is
11
+ * backed off; proactive refreshes must dedupe by stable account identity and
12
+ * respect backoff. Account identity is supplied via `keyOf` so reorders/
13
+ * removals of the underlying array do not invalidate cache entries.
14
+ */
15
+ import { createHash } from 'node:crypto';
16
+ import { fetchWithActiveTimeout } from "./fetch-timeout.js";
17
+ import { buildAntigravityHarnessUserAgent } from "./fingerprint.js";
18
+ import { createLogger } from "./logger.js";
19
+ import { getQuotaGroupForModel } from "./model-registry.js";
20
+ import { getModelFamily } from "./transform/model-resolver.js";
21
+ const log = createLogger('quota-manager');
22
+ export const QUOTA_MANAGER_DEFAULT_BASE_BACKOFF_MS = 30_000;
23
+ export const QUOTA_MANAGER_DEFAULT_MAX_BACKOFF_MS = 10 * 60 * 1000;
24
+ export const QUOTA_MANAGER_DEFAULT_TIMEOUT_MS = 10_000;
25
+ /**
26
+ * Default keyOf — prefers email, falls back to refresh-token hash so the
27
+ * same identity is keyed even when emails are missing.
28
+ */
29
+ export function defaultKeyOf(account) {
30
+ if (account.email)
31
+ return `e:${account.email.toLowerCase()}`;
32
+ const token = account.refreshToken || '';
33
+ return `t:${createHash('sha256').update(token).digest('hex').slice(0, 16)}`;
34
+ }
35
+ export function createQuotaManager(options) {
36
+ const now = options.now ?? (() => Date.now());
37
+ const baseBackoffMs = options.baseBackoffMs ?? QUOTA_MANAGER_DEFAULT_BASE_BACKOFF_MS;
38
+ const maxBackoffMs = options.maxBackoffMs ?? QUOTA_MANAGER_DEFAULT_MAX_BACKOFF_MS;
39
+ const fetchTimeoutMs = options.fetchTimeoutMs ?? QUOTA_MANAGER_DEFAULT_TIMEOUT_MS;
40
+ const state = new Map();
41
+ let disposed = false;
42
+ const keyOf = (account) => options.keyOf(account);
43
+ const recordSuccess = (key) => {
44
+ const entry = state.get(key);
45
+ if (!entry)
46
+ return;
47
+ entry.consecutiveFailures = 0;
48
+ entry.backoffUntil = 0;
49
+ };
50
+ const recordFailure = (key) => {
51
+ const current = now();
52
+ const entry = state.get(key) ?? {
53
+ consecutiveFailures: 0,
54
+ backoffUntil: 0,
55
+ };
56
+ const failures = entry.consecutiveFailures + 1;
57
+ const backoffMs = Math.min(maxBackoffMs, baseBackoffMs * 2 ** (failures - 1));
58
+ entry.consecutiveFailures = failures;
59
+ entry.backoffUntil = current + backoffMs;
60
+ state.set(key, entry);
61
+ return { backoffMs, backoffUntil: entry.backoffUntil };
62
+ };
63
+ const cacheResult = (key, result) => {
64
+ const entry = state.get(key) ?? {
65
+ consecutiveFailures: 0,
66
+ backoffUntil: 0,
67
+ };
68
+ entry.cached = result;
69
+ state.set(key, entry);
70
+ };
71
+ const buildDisabledResult = (account, index) => ({
72
+ index,
73
+ email: account.email,
74
+ status: 'disabled',
75
+ disabled: true,
76
+ quota: undefined,
77
+ geminiCliQuota: undefined,
78
+ updatedAccount: undefined,
79
+ });
80
+ const buildSkippedResult = (account, index, backoffUntil) => {
81
+ const cached = state.get(keyOf(account))?.cached;
82
+ if (cached) {
83
+ return { ...cached, index };
84
+ }
85
+ return {
86
+ index,
87
+ email: account.email,
88
+ status: 'error',
89
+ error: `quota refresh skipped (backoff until ${new Date(backoffUntil).toISOString()})`,
90
+ };
91
+ };
92
+ const refreshAccount = async (account, refreshOptions) => {
93
+ if (disposed) {
94
+ return {
95
+ index: refreshOptions.index,
96
+ email: account.email,
97
+ status: 'error',
98
+ error: 'quota manager disposed',
99
+ };
100
+ }
101
+ const { index, force = false } = refreshOptions;
102
+ const key = keyOf(account);
103
+ if (account.enabled === false) {
104
+ const result = buildDisabledResult(account, index);
105
+ cacheResult(key, result);
106
+ return result;
107
+ }
108
+ const current = now();
109
+ const entry = state.get(key);
110
+ if (!force && entry && entry.backoffUntil > current) {
111
+ return buildSkippedResult(account, index, entry.backoffUntil);
112
+ }
113
+ const inflight = entry?.inflight;
114
+ if (inflight) {
115
+ // Reuse the cached result of the in-flight fetch, but preserve this
116
+ // caller's requested index for attribution.
117
+ const cached = await inflight;
118
+ return { ...cached, index };
119
+ }
120
+ const controller = new AbortController();
121
+ const stored = state.get(key) ?? {
122
+ consecutiveFailures: 0,
123
+ backoffUntil: 0,
124
+ };
125
+ stored.controller = controller;
126
+ state.set(key, stored);
127
+ const promise = (async () => {
128
+ try {
129
+ const signal = AbortSignal.timeout(fetchTimeoutMs);
130
+ const composite = controller.signal.aborted
131
+ ? controller.signal
132
+ : AbortSignal.any([controller.signal, signal]);
133
+ const result = await options.fetchAccountQuota(account, composite);
134
+ if (controller.signal.aborted) {
135
+ throw new Error('quota manager disposed mid-fetch');
136
+ }
137
+ const attributed = { ...result, index };
138
+ cacheResult(key, attributed);
139
+ // Adapter contract: `fetchAccountQuota` resolves with an
140
+ // attributed result. Failures should arrive as `{ status: 'error' }`
141
+ // rather than throwing — treat them like thrown failures so backoff
142
+ // actually protects the account from re-hammering. `disabled` and
143
+ // `ok` both count as success (no fetch happened, or it succeeded).
144
+ if (result.status === 'error') {
145
+ const { backoffMs } = recordFailure(key);
146
+ log.debug('quota-refresh-failed', {
147
+ key: hashKey(key),
148
+ backoffMs,
149
+ error: result.error ?? 'attributed error result',
150
+ });
151
+ return attributed;
152
+ }
153
+ recordSuccess(key);
154
+ return attributed;
155
+ }
156
+ catch (error) {
157
+ const message = error instanceof Error ? error.message : String(error);
158
+ if (disposed || controller.signal.aborted) {
159
+ const failureResult = {
160
+ index,
161
+ email: account.email,
162
+ status: 'error',
163
+ error: message,
164
+ };
165
+ cacheResult(key, failureResult);
166
+ return failureResult;
167
+ }
168
+ const { backoffMs } = recordFailure(key);
169
+ log.debug('quota-refresh-failed', {
170
+ key: hashKey(key),
171
+ backoffMs,
172
+ error: message,
173
+ });
174
+ const failureResult = {
175
+ index,
176
+ email: account.email,
177
+ status: 'error',
178
+ error: message,
179
+ };
180
+ cacheResult(key, failureResult);
181
+ return failureResult;
182
+ }
183
+ finally {
184
+ const finished = state.get(key);
185
+ if (finished) {
186
+ finished.inflight = undefined;
187
+ finished.controller = undefined;
188
+ state.set(key, finished);
189
+ }
190
+ }
191
+ })();
192
+ stored.inflight = promise;
193
+ state.set(key, stored);
194
+ return promise;
195
+ };
196
+ const refreshAccounts = async (accounts, refreshOptions) => {
197
+ const results = [];
198
+ for (const account of accounts) {
199
+ const index = refreshOptions.indexFor(account);
200
+ const result = await refreshAccount(account, {
201
+ index,
202
+ force: refreshOptions.force,
203
+ });
204
+ results.push(result);
205
+ }
206
+ return results;
207
+ };
208
+ const getCached = (account) => {
209
+ const entry = state.get(keyOf(account));
210
+ return entry?.cached;
211
+ };
212
+ const getBackoffUntil = (account) => {
213
+ return state.get(keyOf(account))?.backoffUntil ?? 0;
214
+ };
215
+ const hashedLogLabel = (prefix, account) => {
216
+ const identity = typeof account === 'string' ? account : keyOf(account);
217
+ return `${prefix} ${hashKey(identity)}`;
218
+ };
219
+ const dispose = async () => {
220
+ if (disposed)
221
+ return;
222
+ disposed = true;
223
+ // Snapshot the in-flight refreshes before aborting — the refresh
224
+ // `finally` clears `entry.inflight` as each promise settles, so we
225
+ // must capture the promises first.
226
+ const pending = Array.from(state.values(), (entry) => entry.inflight).filter((promise) => promise != null);
227
+ // Abort so a genuinely-stuck fetch unwinds promptly (the refresh
228
+ // catches the abort and resolves with an error result rather than
229
+ // hanging dispose), then AWAIT the settled promises. Awaiting after
230
+ // the abort still fences the producer: the opencode quota wrapper's
231
+ // fire-and-forget sidebar write runs in the continuation after the
232
+ // core refresh resolves, so by the time dispose() resolves that
233
+ // write has already been enqueued onto the sidebar chain and the
234
+ // subsequent lifecycle drain will flush it.
235
+ for (const [, entry] of state) {
236
+ entry.controller?.abort();
237
+ }
238
+ if (pending.length > 0) {
239
+ // Each refresh swallows its own errors and resolves; awaiting is a
240
+ // fence, never a rejection surface.
241
+ await Promise.allSettled(pending);
242
+ }
243
+ for (const [, entry] of state) {
244
+ entry.inflight = undefined;
245
+ }
246
+ };
247
+ return {
248
+ refreshAccount,
249
+ refreshAccounts,
250
+ getCached,
251
+ getBackoffUntil,
252
+ hashedLogLabel,
253
+ dispose,
254
+ classifyQuotaGroup,
255
+ aggregateQuota,
256
+ aggregateGeminiCliQuota,
257
+ };
258
+ }
259
+ function hashKey(key) {
260
+ return createHash('sha256').update(key).digest('hex').slice(0, 8);
261
+ }
262
+ // ============================================================================
263
+ // Pure helpers — also exported for adapter use.
264
+ // ============================================================================
265
+ /**
266
+ * Classify a model into its quota group.
267
+ */
268
+ export function classifyQuotaGroup(modelName, displayName) {
269
+ const registryGroup = getQuotaGroupForModel(modelName);
270
+ if (registryGroup) {
271
+ return registryGroup;
272
+ }
273
+ const combined = `${modelName} ${displayName ?? ''}`.toLowerCase();
274
+ if (combined.includes('claude')) {
275
+ return 'claude';
276
+ }
277
+ const isGemini3 = combined.includes('gemini-3') || combined.includes('gemini 3');
278
+ if (!isGemini3) {
279
+ return null;
280
+ }
281
+ const family = getModelFamily(modelName);
282
+ return family === 'gemini-flash' ? 'gemini-flash' : 'gemini-pro';
283
+ }
284
+ function normalizeRemainingFraction(value) {
285
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
286
+ return 0;
287
+ }
288
+ if (value < 0)
289
+ return 0;
290
+ if (value > 1)
291
+ return 1;
292
+ return value;
293
+ }
294
+ function parseResetTime(resetTime) {
295
+ if (!resetTime)
296
+ return null;
297
+ const timestamp = Date.parse(resetTime);
298
+ if (!Number.isFinite(timestamp)) {
299
+ return null;
300
+ }
301
+ return timestamp;
302
+ }
303
+ /**
304
+ * Aggregate per-model quota entries into group summaries + per-model list.
305
+ *
306
+ * Pure helper — exposed for harness adapters that want to reuse the same
307
+ * aggregation logic without re-implementing it.
308
+ */
309
+ export function aggregateQuota(models) {
310
+ const groups = {};
311
+ const perModel = [];
312
+ if (!models) {
313
+ return { groups, perModel, modelCount: 0 };
314
+ }
315
+ let totalCount = 0;
316
+ for (const [modelName, entry] of Object.entries(models)) {
317
+ const group = classifyQuotaGroup(modelName, entry.displayName ?? entry.modelName);
318
+ const quotaInfo = entry.quotaInfo;
319
+ const remainingFraction = quotaInfo
320
+ ? normalizeRemainingFraction(quotaInfo.remainingFraction)
321
+ : undefined;
322
+ const resetTime = quotaInfo?.resetTime;
323
+ const resetTimestamp = parseResetTime(resetTime);
324
+ totalCount += 1;
325
+ perModel.push({
326
+ modelId: modelName,
327
+ displayName: entry.displayName ?? entry.modelName,
328
+ group,
329
+ remainingFraction: remainingFraction ?? 0,
330
+ resetTime,
331
+ });
332
+ if (!group) {
333
+ continue;
334
+ }
335
+ const existing = groups[group];
336
+ const nextCount = (existing?.modelCount ?? 0) + 1;
337
+ const nextRemaining = remainingFraction === undefined
338
+ ? existing?.remainingFraction
339
+ : existing?.remainingFraction === undefined
340
+ ? remainingFraction
341
+ : Math.min(existing.remainingFraction, remainingFraction);
342
+ let nextResetTime = existing?.resetTime;
343
+ if (resetTimestamp !== null) {
344
+ if (!existing?.resetTime) {
345
+ nextResetTime = resetTime;
346
+ }
347
+ else {
348
+ const existingTimestamp = parseResetTime(existing.resetTime);
349
+ if (existingTimestamp === null || resetTimestamp < existingTimestamp) {
350
+ nextResetTime = resetTime;
351
+ }
352
+ }
353
+ }
354
+ groups[group] = {
355
+ remainingFraction: nextRemaining,
356
+ resetTime: nextResetTime,
357
+ modelCount: nextCount,
358
+ };
359
+ }
360
+ perModel.sort((a, b) => a.modelId.localeCompare(b.modelId));
361
+ return { groups, perModel, modelCount: totalCount };
362
+ }
363
+ /**
364
+ * Aggregate Gemini CLI quota buckets into a summary.
365
+ */
366
+ export function aggregateGeminiCliQuota(response) {
367
+ const models = [];
368
+ if (!response.buckets || response.buckets.length === 0) {
369
+ return { models };
370
+ }
371
+ for (const bucket of response.buckets) {
372
+ if (!bucket.modelId) {
373
+ continue;
374
+ }
375
+ const modelId = bucket.modelId;
376
+ const isRelevantModel = modelId.startsWith('gemini-3-') ||
377
+ modelId.startsWith('gemini-3.') ||
378
+ modelId.startsWith('gemini-2.5-');
379
+ if (!isRelevantModel) {
380
+ continue;
381
+ }
382
+ models.push({
383
+ modelId: bucket.modelId,
384
+ remainingFraction: normalizeRemainingFraction(bucket.remainingFraction),
385
+ resetTime: bucket.resetTime,
386
+ });
387
+ }
388
+ models.sort((a, b) => a.modelId.localeCompare(b.modelId));
389
+ return { models };
390
+ }
391
+ export async function fetchAvailableModels(options) {
392
+ const timeoutMs = options.timeoutMs ?? QUOTA_MANAGER_DEFAULT_TIMEOUT_MS;
393
+ const userAgent = options.userAgent ?? buildAntigravityHarnessUserAgent();
394
+ const errors = [];
395
+ const transport = options.fetchVia ?? defaultTransport;
396
+ for (const endpoint of options.endpoints) {
397
+ const body = options.projectId ? { project: options.projectId } : {};
398
+ try {
399
+ const response = await transport(`${endpoint}/v1internal:fetchAvailableModels`, {
400
+ method: 'POST',
401
+ headers: {
402
+ 'User-Agent': userAgent,
403
+ Authorization: `Bearer ${options.accessToken}`,
404
+ 'Content-Type': 'application/json',
405
+ 'Accept-Encoding': 'gzip',
406
+ },
407
+ body: JSON.stringify(body),
408
+ }, { timeoutMs });
409
+ if (response.ok) {
410
+ return (await response.json());
411
+ }
412
+ const status = response.status;
413
+ if (status === 403 && options.projectId) {
414
+ try {
415
+ const retryResponse = await transport(`${endpoint}/v1internal:fetchAvailableModels`, {
416
+ method: 'POST',
417
+ headers: {
418
+ 'User-Agent': userAgent,
419
+ Authorization: `Bearer ${options.accessToken}`,
420
+ 'Content-Type': 'application/json',
421
+ 'Accept-Encoding': 'gzip',
422
+ },
423
+ body: JSON.stringify({}),
424
+ }, { timeoutMs });
425
+ if (retryResponse.ok) {
426
+ return (await retryResponse.json());
427
+ }
428
+ }
429
+ catch {
430
+ // Fall through to next endpoint
431
+ }
432
+ }
433
+ if (status === 429 || status >= 500) {
434
+ const message = await response.text().catch(() => '');
435
+ const snippet = message.trim().slice(0, 200);
436
+ errors.push(`fetchAvailableModels ${status} at ${endpoint}${snippet ? `: ${snippet}` : ''}`);
437
+ continue;
438
+ }
439
+ const message = await response.text().catch(() => '');
440
+ const snippet = message.trim().slice(0, 200);
441
+ errors.push(`fetchAvailableModels ${status} at ${endpoint}${snippet ? `: ${snippet}` : ''}`);
442
+ break;
443
+ }
444
+ catch (error) {
445
+ errors.push(`fetchAvailableModels network error at ${endpoint}: ${error instanceof Error ? error.message : String(error)}`);
446
+ }
447
+ }
448
+ throw new Error(errors.join('; ') || 'fetchAvailableModels failed');
449
+ }
450
+ export async function fetchGeminiCliQuota(options) {
451
+ const timeoutMs = options.timeoutMs ?? QUOTA_MANAGER_DEFAULT_TIMEOUT_MS;
452
+ const userAgent = options.userAgent ?? buildAntigravityHarnessUserAgent();
453
+ for (const endpoint of options.endpoints) {
454
+ const body = options.projectId ? { project: options.projectId } : {};
455
+ try {
456
+ const response = await defaultTransport(`${endpoint}/v1internal:retrieveUserQuota`, {
457
+ method: 'POST',
458
+ headers: {
459
+ Authorization: `Bearer ${options.accessToken}`,
460
+ 'Content-Type': 'application/json',
461
+ 'User-Agent': userAgent,
462
+ },
463
+ body: JSON.stringify(body),
464
+ }, { timeoutMs });
465
+ if (response.ok) {
466
+ return (await response.json());
467
+ }
468
+ const status = response.status;
469
+ if (status === 429 || status >= 500) {
470
+ continue;
471
+ }
472
+ return { buckets: [] };
473
+ }
474
+ catch { }
475
+ }
476
+ return { buckets: [] };
477
+ }
478
+ async function defaultTransport(url, init, options) {
479
+ return fetchWithActiveTimeout(url, init, { timeoutMs: options.timeoutMs });
480
+ }
481
+ //# sourceMappingURL=quota-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-manager.js","sourceRoot":"","sources":["../src/quota-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Harness-agnostic quota types.
3
+ *
4
+ * Quota group / per-model / CLI summary shapes shared between the core
5
+ * quota helpers and any harness that wants to display quota status. Kept
6
+ * separate from `account-types.ts` so quota evolution does not force a
7
+ * migration on the persisted account pool.
8
+ */
9
+ import type { AccountMetadataV3 } from './account-types.ts';
10
+ export type QuotaGroup = 'claude' | 'gemini-pro' | 'gemini-flash' | 'gpt-oss';
11
+ export interface QuotaGroupSummary {
12
+ remainingFraction?: number;
13
+ resetTime?: string;
14
+ modelCount: number;
15
+ }
16
+ export interface PerModelQuotaEntry {
17
+ modelId: string;
18
+ displayName?: string;
19
+ group: QuotaGroup | null;
20
+ remainingFraction: number;
21
+ resetTime?: string;
22
+ }
23
+ export interface QuotaSummary {
24
+ groups: Partial<Record<QuotaGroup, QuotaGroupSummary>>;
25
+ perModel?: PerModelQuotaEntry[];
26
+ modelCount: number;
27
+ error?: string;
28
+ }
29
+ export interface GeminiCliQuotaModel {
30
+ modelId: string;
31
+ remainingFraction: number;
32
+ resetTime?: string;
33
+ }
34
+ export interface GeminiCliQuotaSummary {
35
+ models: GeminiCliQuotaModel[];
36
+ error?: string;
37
+ }
38
+ export type AccountQuotaStatus = 'ok' | 'disabled' | 'error';
39
+ export interface AccountQuotaResult {
40
+ index: number;
41
+ email?: string;
42
+ status: AccountQuotaStatus;
43
+ error?: string;
44
+ disabled?: boolean;
45
+ quota?: QuotaSummary;
46
+ geminiCliQuota?: GeminiCliQuotaSummary;
47
+ updatedAccount?: AccountMetadataV3;
48
+ }
49
+ //# sourceMappingURL=quota-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-types.d.ts","sourceRoot":"","sources":["../src/quota-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAE3D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAA;AAE7E,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAA;IACtD,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,mBAAmB,EAAE,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,UAAU,GAAG,OAAO,CAAA;AAE5D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,kBAAkB,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC,cAAc,CAAC,EAAE,iBAAiB,CAAA;CACnC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Harness-agnostic quota types.
3
+ *
4
+ * Quota group / per-model / CLI summary shapes shared between the core
5
+ * quota helpers and any harness that wants to display quota status. Kept
6
+ * separate from `account-types.ts` so quota evolution does not force a
7
+ * migration on the persisted account pool.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=quota-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-types.js","sourceRoot":"","sources":["../src/quota-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}