@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,281 @@
1
+ import type { AccountStorageStore } from './account-storage.ts';
2
+ import type { AccountMetadataV3, AccountSelectionStrategy, AccountStorageV4, CooldownReason, HeaderStyle, AccountModelFamily as ModelFamily, RateLimitStateV3 } from './account-types.ts';
3
+ import type { OAuthAuthDetails, RefreshParts } from './auth-types.ts';
4
+ import { type Fingerprint, type FingerprintVersion } from './fingerprint.ts';
5
+ import type { QuotaGroup, QuotaGroupSummary } from './quota-types.ts';
6
+ export type { AccountSelectionStrategy, CooldownReason, HeaderStyle, ModelFamily, };
7
+ export interface AccountManagerOptions {
8
+ store: AccountStorageStore;
9
+ storagePath?: string;
10
+ now?: () => number;
11
+ random?: () => number;
12
+ pid?: number;
13
+ onDiagnostic?: (message: string, fields?: Record<string, unknown>) => void;
14
+ }
15
+ export type { RateLimitReason } from './rotation.ts';
16
+ export { calculateBackoffMs, computeSoftQuotaCacheTtlMs, parseRateLimitReason, } from './rotation.ts';
17
+ import type { RateLimitReason } from './rotation.ts';
18
+ export type BaseQuotaKey = 'claude' | 'gemini-antigravity' | 'gemini-cli';
19
+ export type QuotaKey = BaseQuotaKey | `${BaseQuotaKey}:${string}`;
20
+ export interface ManagedAccount {
21
+ index: number;
22
+ email?: string;
23
+ label?: string;
24
+ addedAt: number;
25
+ lastUsed: number;
26
+ parts: RefreshParts;
27
+ access?: string;
28
+ expires?: number;
29
+ enabled: boolean;
30
+ rateLimitResetTimes: RateLimitStateV3;
31
+ lastSwitchReason?: 'rate-limit' | 'initial' | 'rotation';
32
+ coolingDownUntil?: number;
33
+ cooldownReason?: CooldownReason;
34
+ touchedForQuota: Record<string, number>;
35
+ consecutiveFailures?: number;
36
+ /** Timestamp of last failure for TTL-based reset of consecutiveFailures */
37
+ lastFailureTime?: number;
38
+ /** Per-account device fingerprint for rate limit mitigation */
39
+ fingerprint?: import('./fingerprint').Fingerprint;
40
+ /** History of previous fingerprints for this account */
41
+ fingerprintHistory?: FingerprintVersion[];
42
+ /** Cached quota data from last checkAccountsQuota() call */
43
+ cachedQuota?: Partial<Record<QuotaGroup, QuotaGroupSummary>>;
44
+ cachedQuotaUpdatedAt?: number;
45
+ verificationRequired?: boolean;
46
+ verificationRequiredAt?: number;
47
+ verificationRequiredReason?: string;
48
+ verificationUrl?: string;
49
+ accountIneligible?: boolean;
50
+ accountIneligibleAt?: number;
51
+ accountIneligibleReason?: string;
52
+ eligibilityStateUpdatedAt?: number;
53
+ /** Daily request counts per model family */
54
+ dailyRequestCounts?: {
55
+ date: string;
56
+ claude: number;
57
+ gemini: number;
58
+ };
59
+ }
60
+ /**
61
+ * Resolve the quota group for soft quota checks.
62
+ *
63
+ * When a model string is available, we can precisely determine the quota group.
64
+ * When model is null/undefined, we fall back based on family:
65
+ * - Claude → "claude" quota group
66
+ * - Gemini → "gemini-pro" (conservative fallback; may misclassify flash models)
67
+ *
68
+ * @param family - The model family ("claude" | "gemini")
69
+ * @param model - Optional model string for precise resolution
70
+ * @returns The QuotaGroup to use for soft quota checks
71
+ */
72
+ export declare function resolveQuotaGroup(family: ModelFamily, model?: string | null): QuotaGroup;
73
+ export interface AccountSessionIdentity {
74
+ id: string;
75
+ parentId?: string | null;
76
+ }
77
+ /**
78
+ * In-memory multi-account manager with sticky account selection.
79
+ *
80
+ * Uses the same account until it hits a rate limit (429), then switches.
81
+ * Rate limits are tracked per-model-family (claude/gemini) so an account
82
+ * rate-limited for Claude can still be used for Gemini.
83
+ *
84
+ * Source of truth for the pool is `antigravity-accounts.json`.
85
+ */
86
+ export declare class AccountManager {
87
+ private accounts;
88
+ private cursorByFamily;
89
+ private currentAccountIndexByFamily;
90
+ private sessionOffsetApplied;
91
+ private lastToastAccountIndex;
92
+ private lastToastTime;
93
+ private savePending;
94
+ private saveTimeout;
95
+ private saveInFlight;
96
+ private disposed;
97
+ private savePromiseResolvers;
98
+ private sessionStartTime;
99
+ private sessionRequestCounts;
100
+ private sessionUsedAccounts;
101
+ private requestSessionStates;
102
+ private readonly store;
103
+ private readonly storagePath;
104
+ private readonly onDiagnostic;
105
+ private readonly now;
106
+ private readonly random;
107
+ private readonly pid;
108
+ constructor(authFallback: OAuthAuthDetails | undefined, stored: AccountStorageV4 | null | undefined, options: AccountManagerOptions);
109
+ getAccountCount(): number;
110
+ getTotalAccountCount(): number;
111
+ getEnabledAccounts(): ManagedAccount[];
112
+ private getEffectiveSoftQuotaThreshold;
113
+ getAccountsSnapshot(): ManagedAccount[];
114
+ private getRequestSessionState;
115
+ private pruneRequestSessionStates;
116
+ private getActiveIndex;
117
+ private setActiveIndex;
118
+ private getCursor;
119
+ private advanceCursor;
120
+ private getUsedAccounts;
121
+ private preferAccountOutsideParent;
122
+ deleteSessionState(sessionId: string): void;
123
+ getCurrentAccountForFamily(family: ModelFamily, identity?: AccountSessionIdentity): ManagedAccount | null;
124
+ markSwitched(account: ManagedAccount, reason: 'rate-limit' | 'initial' | 'rotation', family: ModelFamily, identity?: AccountSessionIdentity): void;
125
+ /**
126
+ * Check if we should show an account switch toast.
127
+ * Debounces repeated toasts for the same account.
128
+ */
129
+ shouldShowAccountToast(accountIndex: number, debounceMs?: number): boolean;
130
+ markToastShown(accountIndex: number): void;
131
+ getCurrentOrNextForFamily(family: ModelFamily, model?: string | null, strategy?: AccountSelectionStrategy, headerStyle?: HeaderStyle, pidOffsetEnabled?: boolean, softQuotaThresholdPercent?: number, softQuotaCacheTtlMs?: number, identity?: AccountSessionIdentity,
132
+ /**
133
+ * Account indexes the caller has ruled out (e.g. the operator
134
+ * killswitch pre-filter). Every selection path — pinned session,
135
+ * round-robin, hybrid, and sticky fallback — skips these indexes
136
+ * so a killed current account falls through to the next eligible
137
+ * account instead of collapsing the request into the rate-limit
138
+ * wait path.
139
+ */
140
+ excludeIndexes?: Set<number>): ManagedAccount | null;
141
+ getNextForFamily(family: ModelFamily, model?: string | null, headerStyle?: HeaderStyle, softQuotaThresholdPercent?: number, softQuotaCacheTtlMs?: number, identity?: AccountSessionIdentity,
142
+ /** Indexes ruled out by the caller (e.g. killswitch pre-filter). */
143
+ excludeIndexes?: Set<number>): ManagedAccount | null;
144
+ markRateLimited(account: ManagedAccount, retryAfterMs: number, family: ModelFamily, headerStyle?: HeaderStyle, model?: string | null): void;
145
+ /**
146
+ * Mark an account as used after a successful API request.
147
+ * This updates the lastUsed timestamp for freshness calculations.
148
+ * Should be called AFTER request completion, not during account selection.
149
+ */
150
+ markAccountUsed(accountIndex: number): void;
151
+ recordSessionUsage(accountIndex: number, identity?: AccountSessionIdentity): void;
152
+ wasUsedInSession(accountIndex: number, identity?: AccountSessionIdentity): boolean;
153
+ shouldProactivelyRotate(family: ModelFamily, model: string | null | undefined, thresholdPercent: number, cacheTtlMs: number, identity?: AccountSessionIdentity): boolean;
154
+ proactivelyRotateForFamily(family: ModelFamily, model: string | null | undefined, headerStyle: HeaderStyle, softQuotaThresholdPercent: number, softQuotaCacheTtlMs: number, identity?: AccountSessionIdentity): ManagedAccount | null;
155
+ markRateLimitedWithReason(account: ManagedAccount, family: ModelFamily, headerStyle: HeaderStyle, model: string | null | undefined, reason: RateLimitReason, retryAfterMs?: number | null, failureTtlMs?: number): number;
156
+ markRequestSuccess(account: ManagedAccount): void;
157
+ clearAllRateLimitsForFamily(family: ModelFamily, model?: string | null): void;
158
+ shouldTryOptimisticReset(family: ModelFamily, model?: string | null): boolean;
159
+ markAccountCoolingDown(account: ManagedAccount, cooldownMs: number, reason: CooldownReason): void;
160
+ isAccountCoolingDown(account: ManagedAccount): boolean;
161
+ clearAccountCooldown(account: ManagedAccount): void;
162
+ getAccountCooldownReason(account: ManagedAccount): CooldownReason | undefined;
163
+ markTouchedForQuota(account: ManagedAccount, quotaKey: string): void;
164
+ isFreshForQuota(account: ManagedAccount, quotaKey: string): boolean;
165
+ getFreshAccountsForQuota(quotaKey: string, family: ModelFamily, model?: string | null): ManagedAccount[];
166
+ isRateLimitedForHeaderStyle(account: ManagedAccount, family: ModelFamily, headerStyle: HeaderStyle, model?: string | null): boolean;
167
+ getAvailableHeaderStyle(account: ManagedAccount, family: ModelFamily, model?: string | null): HeaderStyle | null;
168
+ /**
169
+ * Check if any OTHER account has antigravity quota available for the given family/model.
170
+ *
171
+ * Used to determine whether to switch accounts vs fall back to gemini-cli:
172
+ * - If true: Switch to another account (preserve antigravity priority)
173
+ * - If false: All accounts exhausted antigravity, safe to fall back to gemini-cli
174
+ *
175
+ * @param currentAccountIndex - Index of the current account (will be excluded from check)
176
+ * @param family - Model family ("gemini" or "claude")
177
+ * @param model - Optional model name for model-specific rate limits
178
+ * @returns true if any other enabled, non-cooling-down account has antigravity available
179
+ */
180
+ hasOtherAccountWithAntigravityAvailable(currentAccountIndex: number, family: ModelFamily, model?: string | null): boolean;
181
+ setAccountEnabled(accountIndex: number, enabled: boolean): boolean;
182
+ markAccountVerificationRequired(accountIndex: number, reason?: string, verifyUrl?: string): boolean;
183
+ markAccountIneligible(accountIndex: number, reason?: string): boolean;
184
+ clearAccountAccessBlocks(accountIndex: number, enableAccount?: boolean): boolean;
185
+ removeAccountByIndex(accountIndex: number): boolean;
186
+ removeAccount(account: ManagedAccount): boolean;
187
+ updateFromAuth(account: ManagedAccount, auth: OAuthAuthDetails): void;
188
+ toAuthDetails(account: ManagedAccount): OAuthAuthDetails;
189
+ getMinWaitTimeForFamily(family: ModelFamily, model?: string | null, headerStyle?: HeaderStyle, strict?: boolean): number;
190
+ getAccounts(): ManagedAccount[];
191
+ private buildStorageSnapshot;
192
+ saveToDisk(): Promise<void>;
193
+ /**
194
+ * Persist via full-file replace (no merge). Required after destructive
195
+ * operations (account removal) so a deleted account is not resurrected by
196
+ * mergeAccountStorage re-reading it from disk.
197
+ */
198
+ saveToDiskReplace(): Promise<void>;
199
+ requestSaveToDisk(): void;
200
+ flushSaveToDisk(): Promise<void>;
201
+ dispose(): Promise<void>;
202
+ private executeSave;
203
+ /**
204
+ * Regenerate fingerprint for an account, saving the old one to history.
205
+ * @param accountIndex - Index of the account to regenerate fingerprint for
206
+ * @returns The new fingerprint, or null if account not found
207
+ */
208
+ regenerateAccountFingerprint(accountIndex: number): Fingerprint | null;
209
+ /**
210
+ * Restore a fingerprint from history for an account.
211
+ * @param accountIndex - Index of the account
212
+ * @param historyIndex - Index in the fingerprint history to restore from (0 = most recent)
213
+ * @returns The restored fingerprint, or null if account/history not found
214
+ */
215
+ restoreAccountFingerprint(accountIndex: number, historyIndex: number): Fingerprint | null;
216
+ /**
217
+ * Get fingerprint history for an account.
218
+ * @param accountIndex - Index of the account
219
+ * @returns Array of fingerprint versions, or empty array if not found
220
+ */
221
+ getAccountFingerprintHistory(accountIndex: number): FingerprintVersion[];
222
+ updateQuotaCache(accountIndex: number, quotaGroups: Partial<Record<QuotaGroup, QuotaGroupSummary>>): void;
223
+ /**
224
+ * Record a successful API request for an account.
225
+ * Tracks per model family with daily reset.
226
+ */
227
+ recordRequest(accountIndex: number, family: ModelFamily): void;
228
+ /**
229
+ * Get request counts for an account for today.
230
+ */
231
+ getDailyRequestCounts(accountIndex: number): {
232
+ date: string;
233
+ claude: number;
234
+ gemini: number;
235
+ } | null;
236
+ /**
237
+ * Get total daily request counts across all accounts for a model family.
238
+ */
239
+ getTotalDailyRequests(family: ModelFamily): number;
240
+ /**
241
+ * Get a summary of daily request distribution across accounts.
242
+ * Returns accounts sorted by request count (descending).
243
+ */
244
+ getDailyRequestSummary(family: ModelFamily): Array<{
245
+ index: number;
246
+ email?: string;
247
+ count: number;
248
+ }>;
249
+ /**
250
+ * Record a request for the current session (in-memory only).
251
+ */
252
+ recordSessionRequest(accountIndex: number, family: ModelFamily): void;
253
+ /**
254
+ * Get a summary of the current session's request usage.
255
+ */
256
+ getSessionSummary(): {
257
+ durationMinutes: number;
258
+ totalClaude: number;
259
+ totalGemini: number;
260
+ requestsPerHour: number;
261
+ accountsUsed: number;
262
+ perAccount: Array<{
263
+ index: number;
264
+ email?: string;
265
+ claude: number;
266
+ gemini: number;
267
+ }>;
268
+ };
269
+ isAccountOverSoftQuota(account: ManagedAccount, family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): boolean;
270
+ getAccountsForQuotaCheck(): AccountMetadataV3[];
271
+ getOldestQuotaCacheAge(): number | null;
272
+ areAllAccountsOverSoftQuota(family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): boolean;
273
+ /**
274
+ * Get minimum wait time until any account's soft quota resets.
275
+ * Returns 0 if any account is available (not over threshold).
276
+ * Returns the minimum resetTime across all over-threshold accounts.
277
+ * Returns null if no resetTime data is available.
278
+ */
279
+ getMinWaitTimeForSoftQuota(family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): number | null;
280
+ }
281
+ //# sourceMappingURL=account-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-manager.d.ts","sourceRoot":"","sources":["../src/account-manager.ts"],"names":[],"mappings":"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"}