@cortexkit/antigravity-auth-core 1.1.0 → 2.0.1

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 +325 -0
  2. package/dist/account-manager.d.ts.map +1 -0
  3. package/dist/account-manager.js +1480 -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 +155 -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 +12 -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 +119 -107
  62. package/dist/model-registry.js.map +1 -1
  63. package/dist/project.d.ts +4 -1
  64. package/dist/project.d.ts.map +1 -1
  65. package/dist/project.js +84 -31
  66. package/dist/project.js.map +1 -1
  67. package/dist/quota-manager.d.ts +203 -0
  68. package/dist/quota-manager.d.ts.map +1 -0
  69. package/dist/quota-manager.js +718 -0
  70. package/dist/quota-manager.js.map +1 -0
  71. package/dist/quota-types.d.ts +68 -0
  72. package/dist/quota-types.d.ts.map +1 -0
  73. package/dist/quota-types.js +50 -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,325 @@
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, type 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
+ /** Authoritative project ID from the persisted account record. Survives
28
+ * bare-refresh-token rotations where `parts.projectId` may be lost. */
29
+ projectId?: string;
30
+ /** Authoritative managed project ID from the persisted account record.
31
+ * Survives bare-refresh-token rotations where `parts.managedProjectId`
32
+ * may be lost. */
33
+ managedProjectId?: string;
34
+ access?: string;
35
+ expires?: number;
36
+ enabled: boolean;
37
+ rateLimitResetTimes: RateLimitStateV3;
38
+ lastSwitchReason?: 'rate-limit' | 'initial' | 'rotation';
39
+ coolingDownUntil?: number;
40
+ cooldownReason?: CooldownReason;
41
+ touchedForQuota: Record<string, number>;
42
+ consecutiveFailures?: number;
43
+ /** Timestamp of last failure for TTL-based reset of consecutiveFailures */
44
+ lastFailureTime?: number;
45
+ /** Per-account device fingerprint for rate limit mitigation */
46
+ fingerprint?: import('./fingerprint').Fingerprint;
47
+ /** History of previous fingerprints for this account */
48
+ fingerprintHistory?: FingerprintVersion[];
49
+ /** Cached quota data from last checkAccountsQuota() call */
50
+ cachedQuota?: Partial<Record<QuotaGroup, QuotaGroupSummary>>;
51
+ /** Opaque identity of the refresh token that produced `cachedQuota`. */
52
+ cachedQuotaAccountId?: string;
53
+ cachedQuotaUpdatedAt?: number;
54
+ /**
55
+ * Captured plan tier ID from the most recent `loadCodeAssist` response.
56
+ * Raw upstream string (e.g. `"free-tier"`) — never normalised.
57
+ */
58
+ capturedTierId?: string;
59
+ /** Raw paid-tier ID from the most recent `loadCodeAssist` response. */
60
+ capturedPaidTierId?: string;
61
+ /** Epoch ms when `capturedTierId` was last recorded. */
62
+ capturedTierAt?: number;
63
+ /** Schema version of the most recent tier capture, even when paid tier is absent. */
64
+ capturedTierSchemaVersion?: number;
65
+ verificationRequired?: boolean;
66
+ verificationRequiredAt?: number;
67
+ verificationRequiredReason?: string;
68
+ verificationUrl?: string;
69
+ accountIneligible?: boolean;
70
+ accountIneligibleAt?: number;
71
+ accountIneligibleReason?: string;
72
+ eligibilityStateUpdatedAt?: number;
73
+ /** Daily request counts per model family */
74
+ dailyRequestCounts?: {
75
+ date: string;
76
+ claude: number;
77
+ gemini: number;
78
+ };
79
+ }
80
+ /**
81
+ * Resolve the quota group for soft quota checks.
82
+ *
83
+ * When a model string is available we use the model-registry lookup first,
84
+ * then fall back to substring matching. When model is null/undefined we
85
+ * fall back based on family:
86
+ * - Claude → "non-gemini" quota group
87
+ * - Gemini → "gemini" quota group
88
+ *
89
+ * @param family - The model family ("claude" | "gemini")
90
+ * @param model - Optional model string for precise resolution
91
+ * @returns The QuotaGroup to use for soft quota checks
92
+ */
93
+ export declare function resolveQuotaGroup(family: ModelFamily, model?: string | null): QuotaGroup;
94
+ export interface AccountSessionIdentity {
95
+ id: string;
96
+ parentId?: string | null;
97
+ }
98
+ /**
99
+ * In-memory multi-account manager with sticky account selection.
100
+ *
101
+ * Uses the same account until it hits a rate limit (429), then switches.
102
+ * Rate limits are tracked per-model-family (claude/gemini) so an account
103
+ * rate-limited for Claude can still be used for Gemini.
104
+ *
105
+ * Source of truth for the pool is `antigravity-accounts.json`.
106
+ */
107
+ export declare class AccountManager {
108
+ private accounts;
109
+ private cursorByFamily;
110
+ private currentAccountIndexByFamily;
111
+ private sessionOffsetApplied;
112
+ private lastToastAccountIndex;
113
+ private lastToastTime;
114
+ private savePending;
115
+ private saveTimeout;
116
+ private saveInFlight;
117
+ private disposed;
118
+ private savePromiseResolvers;
119
+ private sessionStartTime;
120
+ private sessionRequestCounts;
121
+ private sessionUsedAccounts;
122
+ private requestSessionStates;
123
+ private readonly store;
124
+ private readonly storagePath;
125
+ private readonly onDiagnostic;
126
+ private readonly now;
127
+ private readonly random;
128
+ private readonly pid;
129
+ constructor(authFallback: OAuthAuthDetails | undefined, stored: AccountStorageV4 | null | undefined, options: AccountManagerOptions);
130
+ getAccountCount(): number;
131
+ getTotalAccountCount(): number;
132
+ getEnabledAccounts(): ManagedAccount[];
133
+ private getEffectiveSoftQuotaThreshold;
134
+ getAccountsSnapshot(): ManagedAccount[];
135
+ private getRequestSessionState;
136
+ private pruneRequestSessionStates;
137
+ private getActiveIndex;
138
+ private setActiveIndex;
139
+ private getCursor;
140
+ private advanceCursor;
141
+ private getUsedAccounts;
142
+ private preferAccountOutsideParent;
143
+ deleteSessionState(sessionId: string): void;
144
+ getCurrentAccountForFamily(family: ModelFamily, identity?: AccountSessionIdentity): ManagedAccount | null;
145
+ /**
146
+ * Numeric active indexes for each model family. Exposed so callers
147
+ * that persist `activeIndexByFamily` (e.g. command-data's remove
148
+ * path) can capture the live cursor per family without going
149
+ * through the account-lookup layer.
150
+ */
151
+ getActiveIndexByFamily(identity?: AccountSessionIdentity): Record<ModelFamily, number>;
152
+ markSwitched(account: ManagedAccount, reason: 'rate-limit' | 'initial' | 'rotation', family: ModelFamily, identity?: AccountSessionIdentity): void;
153
+ /**
154
+ * Check if we should show an account switch toast.
155
+ * Debounces repeated toasts for the same account.
156
+ */
157
+ shouldShowAccountToast(accountIndex: number, debounceMs?: number): boolean;
158
+ markToastShown(accountIndex: number): void;
159
+ getCurrentOrNextForFamily(family: ModelFamily, model?: string | null, strategy?: AccountSelectionStrategy, headerStyle?: HeaderStyle, pidOffsetEnabled?: boolean, softQuotaThresholdPercent?: number, softQuotaCacheTtlMs?: number, identity?: AccountSessionIdentity,
160
+ /**
161
+ * Account indexes the caller has ruled out (e.g. the operator
162
+ * killswitch pre-filter). Every selection path — pinned session,
163
+ * round-robin, hybrid, and sticky fallback — skips these indexes
164
+ * so a killed current account falls through to the next eligible
165
+ * account instead of collapsing the request into the rate-limit
166
+ * wait path.
167
+ */
168
+ excludeIndexes?: Set<number>): ManagedAccount | null;
169
+ getNextForFamily(family: ModelFamily, model?: string | null, headerStyle?: HeaderStyle, softQuotaThresholdPercent?: number, softQuotaCacheTtlMs?: number, identity?: AccountSessionIdentity,
170
+ /** Indexes ruled out by the caller (e.g. killswitch pre-filter). */
171
+ excludeIndexes?: Set<number>): ManagedAccount | null;
172
+ markRateLimited(account: ManagedAccount, retryAfterMs: number, family: ModelFamily, headerStyle?: HeaderStyle, model?: string | null): void;
173
+ /**
174
+ * Mark an account as used after a successful API request.
175
+ * This updates the lastUsed timestamp for freshness calculations.
176
+ * Should be called AFTER request completion, not during account selection.
177
+ */
178
+ markAccountUsed(accountIndex: number): void;
179
+ recordSessionUsage(accountIndex: number, identity?: AccountSessionIdentity): void;
180
+ wasUsedInSession(accountIndex: number, identity?: AccountSessionIdentity): boolean;
181
+ shouldProactivelyRotate(family: ModelFamily, model: string | null | undefined, thresholdPercent: number, cacheTtlMs: number, identity?: AccountSessionIdentity): boolean;
182
+ proactivelyRotateForFamily(family: ModelFamily, model: string | null | undefined, headerStyle: HeaderStyle, softQuotaThresholdPercent: number, softQuotaCacheTtlMs: number, identity?: AccountSessionIdentity): ManagedAccount | null;
183
+ markRateLimitedWithReason(account: ManagedAccount, family: ModelFamily, headerStyle: HeaderStyle, model: string | null | undefined, reason: RateLimitReason, retryAfterMs?: number | null, failureTtlMs?: number): number;
184
+ markRequestSuccess(account: ManagedAccount): void;
185
+ clearAllRateLimitsForFamily(family: ModelFamily, model?: string | null): void;
186
+ shouldTryOptimisticReset(family: ModelFamily, model?: string | null): boolean;
187
+ markAccountCoolingDown(account: ManagedAccount, cooldownMs: number, reason: CooldownReason): void;
188
+ isAccountCoolingDown(account: ManagedAccount): boolean;
189
+ clearAccountCooldown(account: ManagedAccount): void;
190
+ getAccountCooldownReason(account: ManagedAccount): CooldownReason | undefined;
191
+ markTouchedForQuota(account: ManagedAccount, quotaKey: string): void;
192
+ isFreshForQuota(account: ManagedAccount, quotaKey: string): boolean;
193
+ getFreshAccountsForQuota(quotaKey: string, family: ModelFamily, model?: string | null): ManagedAccount[];
194
+ isRateLimitedForHeaderStyle(account: ManagedAccount, family: ModelFamily, headerStyle: HeaderStyle, model?: string | null): boolean;
195
+ getAvailableHeaderStyle(account: ManagedAccount, family: ModelFamily, model?: string | null): HeaderStyle | null;
196
+ /**
197
+ * Check if any OTHER account has antigravity quota available for the given family/model.
198
+ *
199
+ * Used to determine whether to switch accounts vs fall back to gemini-cli:
200
+ * - If true: Switch to another account (preserve antigravity priority)
201
+ * - If false: All accounts exhausted antigravity, safe to fall back to gemini-cli
202
+ *
203
+ * @param currentAccountIndex - Index of the current account (will be excluded from check)
204
+ * @param family - Model family ("gemini" or "claude")
205
+ * @param model - Optional model name for model-specific rate limits
206
+ * @returns true if any other enabled, non-cooling-down account has antigravity available
207
+ */
208
+ hasOtherAccountWithAntigravityAvailable(currentAccountIndex: number, family: ModelFamily, model?: string | null): boolean;
209
+ setAccountEnabled(accountIndex: number, enabled: boolean): boolean;
210
+ markAccountVerificationRequired(accountIndex: number, reason?: string, verifyUrl?: string): boolean;
211
+ markAccountIneligible(accountIndex: number, reason?: string): boolean;
212
+ clearAccountAccessBlocks(accountIndex: number, enableAccount?: boolean): boolean;
213
+ removeAccountByIndex(accountIndex: number): boolean;
214
+ removeAccount(account: ManagedAccount): boolean;
215
+ updateFromAuth(account: ManagedAccount, auth: OAuthAuthDetails): void;
216
+ toAuthDetails(account: ManagedAccount): OAuthAuthDetails;
217
+ getMinWaitTimeForFamily(family: ModelFamily, model?: string | null, headerStyle?: HeaderStyle, strict?: boolean): number;
218
+ getAccounts(): ManagedAccount[];
219
+ private buildStorageSnapshot;
220
+ saveToDisk(): Promise<void>;
221
+ /**
222
+ * Persist via full-file replace (no merge). Required after destructive
223
+ * operations (account removal) so a deleted account is not resurrected by
224
+ * mergeAccountStorage re-reading it from disk.
225
+ */
226
+ saveToDiskReplace(): Promise<void>;
227
+ requestSaveToDisk(): void;
228
+ flushSaveToDisk(): Promise<void>;
229
+ dispose(): Promise<void>;
230
+ private executeSave;
231
+ /**
232
+ * Regenerate fingerprint for an account, saving the old one to history.
233
+ * @param accountIndex - Index of the account to regenerate fingerprint for
234
+ * @returns The new fingerprint, or null if account not found
235
+ */
236
+ regenerateAccountFingerprint(accountIndex: number): Fingerprint | null;
237
+ /**
238
+ * Restore a fingerprint from history for an account.
239
+ * @param accountIndex - Index of the account
240
+ * @param historyIndex - Index in the fingerprint history to restore from (0 = most recent)
241
+ * @returns The restored fingerprint, or null if account/history not found
242
+ */
243
+ restoreAccountFingerprint(accountIndex: number, historyIndex: number): Fingerprint | null;
244
+ /**
245
+ * Get fingerprint history for an account.
246
+ * @param accountIndex - Index of the account
247
+ * @returns Array of fingerprint versions, or empty array if not found
248
+ */
249
+ getAccountFingerprintHistory(accountIndex: number): FingerprintVersion[];
250
+ updateQuotaCache(accountIndex: number, quotaGroups: Partial<Record<QuotaGroup, QuotaGroupSummary>>, expectedRefreshToken?: string): void;
251
+ /**
252
+ * Apply a subset of fields from a quota-fetch `updatedAccount` result onto
253
+ * the live in-memory record for the given index. Only patches fields that
254
+ * are present and non-empty in `patch` to avoid overwriting valid state
255
+ * with stale or missing values.
256
+ *
257
+ * Identity guard: if `expectedRefreshToken` is provided and the account at
258
+ * `accountIndex` no longer carries that token (concurrent reorder/replace),
259
+ * the patch is silently dropped.
260
+ *
261
+ * `managedProjectId` is intentionally absent from the patch type: the only
262
+ * caller (`BackgroundQuotaRefresh`) routes through `PollerAccountView` which
263
+ * exposes only `capturedTierId`/`capturedTierAt`; project-context updates
264
+ * happen via `ensureProjectContext`, not through this method.
265
+ */
266
+ applyUpdatedAccount(accountIndex: number, patch: Partial<Pick<AccountMetadataV3, 'capturedTierId' | 'capturedPaidTierId' | 'capturedTierAt' | 'capturedTierSchemaVersion'>>, expectedRefreshToken?: string): void;
267
+ /**
268
+ * Record a successful API request for an account.
269
+ * Tracks per model family with daily reset.
270
+ */
271
+ recordRequest(accountIndex: number, family: ModelFamily): void;
272
+ /**
273
+ * Get request counts for an account for today.
274
+ */
275
+ getDailyRequestCounts(accountIndex: number): {
276
+ date: string;
277
+ claude: number;
278
+ gemini: number;
279
+ } | null;
280
+ /**
281
+ * Get total daily request counts across all accounts for a model family.
282
+ */
283
+ getTotalDailyRequests(family: ModelFamily): number;
284
+ /**
285
+ * Get a summary of daily request distribution across accounts.
286
+ * Returns accounts sorted by request count (descending).
287
+ */
288
+ getDailyRequestSummary(family: ModelFamily): Array<{
289
+ index: number;
290
+ email?: string;
291
+ count: number;
292
+ }>;
293
+ /**
294
+ * Record a request for the current session (in-memory only).
295
+ */
296
+ recordSessionRequest(accountIndex: number, family: ModelFamily): void;
297
+ /**
298
+ * Get a summary of the current session's request usage.
299
+ */
300
+ getSessionSummary(): {
301
+ durationMinutes: number;
302
+ totalClaude: number;
303
+ totalGemini: number;
304
+ requestsPerHour: number;
305
+ accountsUsed: number;
306
+ perAccount: Array<{
307
+ index: number;
308
+ email?: string;
309
+ claude: number;
310
+ gemini: number;
311
+ }>;
312
+ };
313
+ isAccountOverSoftQuota(account: ManagedAccount, family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): boolean;
314
+ getAccountsForQuotaCheck(): AccountMetadataV3[];
315
+ getOldestQuotaCacheAge(): number | null;
316
+ areAllAccountsOverSoftQuota(family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): boolean;
317
+ /**
318
+ * Get minimum wait time until any account's soft quota resets.
319
+ * Returns 0 if any account is available (not over threshold).
320
+ * Returns the minimum resetTime across all over-threshold accounts.
321
+ * Returns null if no resetTime data is available.
322
+ */
323
+ getMinWaitTimeForSoftQuota(family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): number | null;
324
+ }
325
+ //# 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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"}