opencode-antigravity-auth-remix 1.0.7
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.
- package/LICENSE +21 -0
- package/README.md +723 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/src/antigravity/oauth.d.ts +31 -0
- package/dist/src/antigravity/oauth.d.ts.map +1 -0
- package/dist/src/antigravity/oauth.js +168 -0
- package/dist/src/antigravity/oauth.js.map +1 -0
- package/dist/src/constants.d.ts +107 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +138 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/cache.d.ts +3 -0
- package/dist/src/hooks/auto-update-checker/cache.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/cache.js +71 -0
- package/dist/src/hooks/auto-update-checker/cache.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/checker.d.ts +16 -0
- package/dist/src/hooks/auto-update-checker/checker.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/checker.js +237 -0
- package/dist/src/hooks/auto-update-checker/checker.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/constants.d.ts +9 -0
- package/dist/src/hooks/auto-update-checker/constants.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/constants.js +23 -0
- package/dist/src/hooks/auto-update-checker/constants.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/index.d.ts +34 -0
- package/dist/src/hooks/auto-update-checker/index.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/index.js +125 -0
- package/dist/src/hooks/auto-update-checker/index.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/types.d.ts +25 -0
- package/dist/src/hooks/auto-update-checker/types.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/types.js +1 -0
- package/dist/src/hooks/auto-update-checker/types.js.map +1 -0
- package/dist/src/plugin/accounts.d.ts +58 -0
- package/dist/src/plugin/accounts.d.ts.map +1 -0
- package/dist/src/plugin/accounts.js +350 -0
- package/dist/src/plugin/accounts.js.map +1 -0
- package/dist/src/plugin/auth.d.ts +21 -0
- package/dist/src/plugin/auth.d.ts.map +1 -0
- package/dist/src/plugin/auth.js +46 -0
- package/dist/src/plugin/auth.js.map +1 -0
- package/dist/src/plugin/cache/index.d.ts +5 -0
- package/dist/src/plugin/cache/index.d.ts.map +1 -0
- package/dist/src/plugin/cache/index.js +5 -0
- package/dist/src/plugin/cache/index.js.map +1 -0
- package/dist/src/plugin/cache/signature-cache.d.ts +111 -0
- package/dist/src/plugin/cache/signature-cache.d.ts.map +1 -0
- package/dist/src/plugin/cache/signature-cache.js +373 -0
- package/dist/src/plugin/cache/signature-cache.js.map +1 -0
- package/dist/src/plugin/cache.d.ts +44 -0
- package/dist/src/plugin/cache.d.ts.map +1 -0
- package/dist/src/plugin/cache.js +200 -0
- package/dist/src/plugin/cache.js.map +1 -0
- package/dist/src/plugin/cli.d.ts +19 -0
- package/dist/src/plugin/cli.d.ts.map +1 -0
- package/dist/src/plugin/cli.js +59 -0
- package/dist/src/plugin/cli.js.map +1 -0
- package/dist/src/plugin/config/index.d.ts +16 -0
- package/dist/src/plugin/config/index.d.ts.map +1 -0
- package/dist/src/plugin/config/index.js +16 -0
- package/dist/src/plugin/config/index.js.map +1 -0
- package/dist/src/plugin/config/loader.d.ts +35 -0
- package/dist/src/plugin/config/loader.d.ts.map +1 -0
- package/dist/src/plugin/config/loader.js +178 -0
- package/dist/src/plugin/config/loader.js.map +1 -0
- package/dist/src/plugin/config/schema.d.ts +257 -0
- package/dist/src/plugin/config/schema.d.ts.map +1 -0
- package/dist/src/plugin/config/schema.js +229 -0
- package/dist/src/plugin/config/schema.js.map +1 -0
- package/dist/src/plugin/core/streaming/index.d.ts +3 -0
- package/dist/src/plugin/core/streaming/index.d.ts.map +1 -0
- package/dist/src/plugin/core/streaming/index.js +3 -0
- package/dist/src/plugin/core/streaming/index.js.map +1 -0
- package/dist/src/plugin/core/streaming/transformer.d.ts +9 -0
- package/dist/src/plugin/core/streaming/transformer.d.ts.map +1 -0
- package/dist/src/plugin/core/streaming/transformer.js +134 -0
- package/dist/src/plugin/core/streaming/transformer.js.map +1 -0
- package/dist/src/plugin/core/streaming/types.d.ts +26 -0
- package/dist/src/plugin/core/streaming/types.d.ts.map +1 -0
- package/dist/src/plugin/core/streaming/types.js +1 -0
- package/dist/src/plugin/core/streaming/types.js.map +1 -0
- package/dist/src/plugin/debug.d.ts +68 -0
- package/dist/src/plugin/debug.d.ts.map +1 -0
- package/dist/src/plugin/debug.js +321 -0
- package/dist/src/plugin/debug.js.map +1 -0
- package/dist/src/plugin/errors.d.ts +28 -0
- package/dist/src/plugin/errors.d.ts.map +1 -0
- package/dist/src/plugin/errors.js +42 -0
- package/dist/src/plugin/errors.js.map +1 -0
- package/dist/src/plugin/logger.d.ts +54 -0
- package/dist/src/plugin/logger.d.ts.map +1 -0
- package/dist/src/plugin/logger.js +120 -0
- package/dist/src/plugin/logger.js.map +1 -0
- package/dist/src/plugin/project.d.ts +33 -0
- package/dist/src/plugin/project.d.ts.map +1 -0
- package/dist/src/plugin/project.js +239 -0
- package/dist/src/plugin/project.js.map +1 -0
- package/dist/src/plugin/recovery/constants.d.ts +22 -0
- package/dist/src/plugin/recovery/constants.d.ts.map +1 -0
- package/dist/src/plugin/recovery/constants.js +43 -0
- package/dist/src/plugin/recovery/constants.js.map +1 -0
- package/dist/src/plugin/recovery/index.d.ts +12 -0
- package/dist/src/plugin/recovery/index.d.ts.map +1 -0
- package/dist/src/plugin/recovery/index.js +12 -0
- package/dist/src/plugin/recovery/index.js.map +1 -0
- package/dist/src/plugin/recovery/storage.d.ts +24 -0
- package/dist/src/plugin/recovery/storage.d.ts.map +1 -0
- package/dist/src/plugin/recovery/storage.js +354 -0
- package/dist/src/plugin/recovery/storage.js.map +1 -0
- package/dist/src/plugin/recovery/types.d.ts +116 -0
- package/dist/src/plugin/recovery/types.d.ts.map +1 -0
- package/dist/src/plugin/recovery/types.js +6 -0
- package/dist/src/plugin/recovery/types.js.map +1 -0
- package/dist/src/plugin/recovery.d.ts +61 -0
- package/dist/src/plugin/recovery.d.ts.map +1 -0
- package/dist/src/plugin/recovery.js +376 -0
- package/dist/src/plugin/recovery.js.map +1 -0
- package/dist/src/plugin/refresh-queue.d.ts +101 -0
- package/dist/src/plugin/refresh-queue.d.ts.map +1 -0
- package/dist/src/plugin/refresh-queue.js +244 -0
- package/dist/src/plugin/refresh-queue.js.map +1 -0
- package/dist/src/plugin/request-helpers.d.ts +270 -0
- package/dist/src/plugin/request-helpers.d.ts.map +1 -0
- package/dist/src/plugin/request-helpers.js +2158 -0
- package/dist/src/plugin/request-helpers.js.map +1 -0
- package/dist/src/plugin/request.d.ts +87 -0
- package/dist/src/plugin/request.d.ts.map +1 -0
- package/dist/src/plugin/request.js +1233 -0
- package/dist/src/plugin/request.js.map +1 -0
- package/dist/src/plugin/search.d.ts +19 -0
- package/dist/src/plugin/search.d.ts.map +1 -0
- package/dist/src/plugin/search.js +191 -0
- package/dist/src/plugin/search.js.map +1 -0
- package/dist/src/plugin/server.d.ts +23 -0
- package/dist/src/plugin/server.d.ts.map +1 -0
- package/dist/src/plugin/server.js +222 -0
- package/dist/src/plugin/server.js.map +1 -0
- package/dist/src/plugin/storage.d.ts +77 -0
- package/dist/src/plugin/storage.d.ts.map +1 -0
- package/dist/src/plugin/storage.js +207 -0
- package/dist/src/plugin/storage.js.map +1 -0
- package/dist/src/plugin/stores/signature-store.d.ts +5 -0
- package/dist/src/plugin/stores/signature-store.d.ts.map +1 -0
- package/dist/src/plugin/stores/signature-store.js +25 -0
- package/dist/src/plugin/stores/signature-store.js.map +1 -0
- package/dist/src/plugin/thinking-recovery.d.ts +90 -0
- package/dist/src/plugin/thinking-recovery.d.ts.map +1 -0
- package/dist/src/plugin/thinking-recovery.js +316 -0
- package/dist/src/plugin/thinking-recovery.js.map +1 -0
- package/dist/src/plugin/token.d.ts +19 -0
- package/dist/src/plugin/token.d.ts.map +1 -0
- package/dist/src/plugin/token.js +128 -0
- package/dist/src/plugin/token.js.map +1 -0
- package/dist/src/plugin/transform/claude.d.ts +80 -0
- package/dist/src/plugin/transform/claude.d.ts.map +1 -0
- package/dist/src/plugin/transform/claude.js +265 -0
- package/dist/src/plugin/transform/claude.js.map +1 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.d.ts +35 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.d.ts.map +1 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.js +225 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.js.map +1 -0
- package/dist/src/plugin/transform/gemini.d.ts +63 -0
- package/dist/src/plugin/transform/gemini.d.ts.map +1 -0
- package/dist/src/plugin/transform/gemini.js +142 -0
- package/dist/src/plugin/transform/gemini.js.map +1 -0
- package/dist/src/plugin/transform/index.d.ts +14 -0
- package/dist/src/plugin/transform/index.d.ts.map +1 -0
- package/dist/src/plugin/transform/index.js +14 -0
- package/dist/src/plugin/transform/index.js.map +1 -0
- package/dist/src/plugin/transform/model-resolver.d.ts +78 -0
- package/dist/src/plugin/transform/model-resolver.d.ts.map +1 -0
- package/dist/src/plugin/transform/model-resolver.js +221 -0
- package/dist/src/plugin/transform/model-resolver.js.map +1 -0
- package/dist/src/plugin/transform/types.d.ts +93 -0
- package/dist/src/plugin/transform/types.d.ts.map +1 -0
- package/dist/src/plugin/transform/types.js +1 -0
- package/dist/src/plugin/transform/types.js.map +1 -0
- package/dist/src/plugin/types.d.ts +97 -0
- package/dist/src/plugin/types.d.ts.map +1 -0
- package/dist/src/plugin/types.js +1 -0
- package/dist/src/plugin/types.js.map +1 -0
- package/dist/src/plugin.d.ts +8 -0
- package/dist/src/plugin.d.ts.map +1 -0
- package/dist/src/plugin.js +1845 -0
- package/dist/src/plugin.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { formatRefreshParts, parseRefreshParts } from "./auth";
|
|
2
|
+
import { loadAccounts, saveAccounts } from "./storage";
|
|
3
|
+
function nowMs() {
|
|
4
|
+
return Date.now();
|
|
5
|
+
}
|
|
6
|
+
function clampNonNegativeInt(value, fallback) {
|
|
7
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
8
|
+
return fallback;
|
|
9
|
+
}
|
|
10
|
+
return value < 0 ? 0 : Math.floor(value);
|
|
11
|
+
}
|
|
12
|
+
function getQuotaKey(family, headerStyle, model) {
|
|
13
|
+
if (family === "claude") {
|
|
14
|
+
return "claude";
|
|
15
|
+
}
|
|
16
|
+
const base = headerStyle === "gemini-cli" ? "gemini-cli" : "gemini-antigravity";
|
|
17
|
+
if (model) {
|
|
18
|
+
return `${base}:${model}`;
|
|
19
|
+
}
|
|
20
|
+
return base;
|
|
21
|
+
}
|
|
22
|
+
function isRateLimitedForQuotaKey(account, key) {
|
|
23
|
+
const resetTime = account.rateLimitResetTimes[key];
|
|
24
|
+
return resetTime !== undefined && nowMs() < resetTime;
|
|
25
|
+
}
|
|
26
|
+
function isRateLimitedForFamily(account, family, model) {
|
|
27
|
+
if (family === "claude") {
|
|
28
|
+
return isRateLimitedForQuotaKey(account, "claude");
|
|
29
|
+
}
|
|
30
|
+
const antigravityIsLimited = isRateLimitedForHeaderStyle(account, family, "antigravity", model);
|
|
31
|
+
const cliIsLimited = isRateLimitedForHeaderStyle(account, family, "gemini-cli", model);
|
|
32
|
+
return antigravityIsLimited && cliIsLimited;
|
|
33
|
+
}
|
|
34
|
+
function isRateLimitedForHeaderStyle(account, family, headerStyle, model) {
|
|
35
|
+
clearExpiredRateLimits(account);
|
|
36
|
+
if (family === "claude") {
|
|
37
|
+
return isRateLimitedForQuotaKey(account, "claude");
|
|
38
|
+
}
|
|
39
|
+
// Check model-specific quota first if provided
|
|
40
|
+
if (model) {
|
|
41
|
+
const modelKey = getQuotaKey(family, headerStyle, model);
|
|
42
|
+
if (isRateLimitedForQuotaKey(account, modelKey)) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Then check base family quota
|
|
47
|
+
const baseKey = getQuotaKey(family, headerStyle);
|
|
48
|
+
return isRateLimitedForQuotaKey(account, baseKey);
|
|
49
|
+
}
|
|
50
|
+
function clearExpiredRateLimits(account) {
|
|
51
|
+
const now = nowMs();
|
|
52
|
+
const keys = Object.keys(account.rateLimitResetTimes);
|
|
53
|
+
for (const key of keys) {
|
|
54
|
+
const resetTime = account.rateLimitResetTimes[key];
|
|
55
|
+
if (resetTime !== undefined && now >= resetTime) {
|
|
56
|
+
delete account.rateLimitResetTimes[key];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* In-memory multi-account manager with sticky account selection.
|
|
62
|
+
*
|
|
63
|
+
* Uses the same account until it hits a rate limit (429), then switches.
|
|
64
|
+
* Rate limits are tracked per-model-family (claude/gemini) so an account
|
|
65
|
+
* rate-limited for Claude can still be used for Gemini.
|
|
66
|
+
*
|
|
67
|
+
* Source of truth for the pool is `antigravity-accounts.json`.
|
|
68
|
+
*/
|
|
69
|
+
export class AccountManager {
|
|
70
|
+
accounts = [];
|
|
71
|
+
cursor = 0;
|
|
72
|
+
currentAccountIndexByFamily = {
|
|
73
|
+
claude: -1,
|
|
74
|
+
gemini: -1,
|
|
75
|
+
};
|
|
76
|
+
lastToastAccountIndex = -1;
|
|
77
|
+
lastToastTime = 0;
|
|
78
|
+
static async loadFromDisk(authFallback) {
|
|
79
|
+
const stored = await loadAccounts();
|
|
80
|
+
return new AccountManager(authFallback, stored);
|
|
81
|
+
}
|
|
82
|
+
constructor(authFallback, stored) {
|
|
83
|
+
const authParts = authFallback ? parseRefreshParts(authFallback.refresh) : null;
|
|
84
|
+
if (stored && stored.accounts.length === 0) {
|
|
85
|
+
this.accounts = [];
|
|
86
|
+
this.cursor = 0;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (stored && stored.accounts.length > 0) {
|
|
90
|
+
const baseNow = nowMs();
|
|
91
|
+
this.accounts = stored.accounts
|
|
92
|
+
.map((acc, index) => {
|
|
93
|
+
if (!acc.refreshToken || typeof acc.refreshToken !== "string") {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
const matchesFallback = !!(authFallback &&
|
|
97
|
+
authParts &&
|
|
98
|
+
authParts.refreshToken &&
|
|
99
|
+
acc.refreshToken === authParts.refreshToken);
|
|
100
|
+
return {
|
|
101
|
+
index,
|
|
102
|
+
email: acc.email,
|
|
103
|
+
addedAt: clampNonNegativeInt(acc.addedAt, baseNow),
|
|
104
|
+
lastUsed: clampNonNegativeInt(acc.lastUsed, 0),
|
|
105
|
+
parts: {
|
|
106
|
+
refreshToken: acc.refreshToken,
|
|
107
|
+
projectId: acc.projectId,
|
|
108
|
+
managedProjectId: acc.managedProjectId,
|
|
109
|
+
},
|
|
110
|
+
access: matchesFallback ? authFallback?.access : undefined,
|
|
111
|
+
expires: matchesFallback ? authFallback?.expires : undefined,
|
|
112
|
+
rateLimitResetTimes: acc.rateLimitResetTimes ?? {},
|
|
113
|
+
lastSwitchReason: acc.lastSwitchReason,
|
|
114
|
+
coolingDownUntil: acc.coolingDownUntil,
|
|
115
|
+
cooldownReason: acc.cooldownReason,
|
|
116
|
+
};
|
|
117
|
+
})
|
|
118
|
+
.filter((a) => a !== null);
|
|
119
|
+
this.cursor = clampNonNegativeInt(stored.activeIndex, 0);
|
|
120
|
+
if (this.accounts.length > 0) {
|
|
121
|
+
this.cursor = this.cursor % this.accounts.length;
|
|
122
|
+
const defaultIndex = this.cursor;
|
|
123
|
+
this.currentAccountIndexByFamily.claude = clampNonNegativeInt(stored.activeIndexByFamily?.claude, defaultIndex) % this.accounts.length;
|
|
124
|
+
this.currentAccountIndexByFamily.gemini = clampNonNegativeInt(stored.activeIndexByFamily?.gemini, defaultIndex) % this.accounts.length;
|
|
125
|
+
}
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (authFallback) {
|
|
129
|
+
const parts = parseRefreshParts(authFallback.refresh);
|
|
130
|
+
if (parts.refreshToken) {
|
|
131
|
+
const now = nowMs();
|
|
132
|
+
this.accounts = [
|
|
133
|
+
{
|
|
134
|
+
index: 0,
|
|
135
|
+
email: undefined,
|
|
136
|
+
addedAt: now,
|
|
137
|
+
lastUsed: 0,
|
|
138
|
+
parts,
|
|
139
|
+
access: authFallback.access,
|
|
140
|
+
expires: authFallback.expires,
|
|
141
|
+
rateLimitResetTimes: {},
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
this.cursor = 0;
|
|
145
|
+
this.currentAccountIndexByFamily.claude = 0;
|
|
146
|
+
this.currentAccountIndexByFamily.gemini = 0;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
getAccountCount() {
|
|
151
|
+
return this.accounts.length;
|
|
152
|
+
}
|
|
153
|
+
getAccountsSnapshot() {
|
|
154
|
+
return this.accounts.map((a) => ({ ...a, parts: { ...a.parts }, rateLimitResetTimes: { ...a.rateLimitResetTimes } }));
|
|
155
|
+
}
|
|
156
|
+
getCurrentAccountForFamily(family) {
|
|
157
|
+
const currentIndex = this.currentAccountIndexByFamily[family];
|
|
158
|
+
if (currentIndex >= 0 && currentIndex < this.accounts.length) {
|
|
159
|
+
return this.accounts[currentIndex] ?? null;
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
markSwitched(account, reason, family) {
|
|
164
|
+
account.lastSwitchReason = reason;
|
|
165
|
+
this.currentAccountIndexByFamily[family] = account.index;
|
|
166
|
+
}
|
|
167
|
+
shouldShowAccountToast(accountIndex, debounceMs = 30000) {
|
|
168
|
+
const now = nowMs();
|
|
169
|
+
if (accountIndex === this.lastToastAccountIndex && now - this.lastToastTime < debounceMs) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
markToastShown(accountIndex) {
|
|
175
|
+
this.lastToastAccountIndex = accountIndex;
|
|
176
|
+
this.lastToastTime = nowMs();
|
|
177
|
+
}
|
|
178
|
+
getCurrentOrNextForFamily(family, model) {
|
|
179
|
+
const current = this.getCurrentAccountForFamily(family);
|
|
180
|
+
if (current) {
|
|
181
|
+
clearExpiredRateLimits(current);
|
|
182
|
+
if (!isRateLimitedForFamily(current, family, model) && !this.isAccountCoolingDown(current)) {
|
|
183
|
+
current.lastUsed = nowMs();
|
|
184
|
+
return current;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const next = this.getNextForFamily(family, model);
|
|
188
|
+
if (next) {
|
|
189
|
+
this.currentAccountIndexByFamily[family] = next.index;
|
|
190
|
+
}
|
|
191
|
+
return next;
|
|
192
|
+
}
|
|
193
|
+
getNextForFamily(family, model) {
|
|
194
|
+
const available = this.accounts.filter((a) => {
|
|
195
|
+
clearExpiredRateLimits(a);
|
|
196
|
+
return !isRateLimitedForFamily(a, family, model) && !this.isAccountCoolingDown(a);
|
|
197
|
+
});
|
|
198
|
+
if (available.length === 0) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
const account = available[this.cursor % available.length];
|
|
202
|
+
if (!account) {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
this.cursor++;
|
|
206
|
+
account.lastUsed = nowMs();
|
|
207
|
+
return account;
|
|
208
|
+
}
|
|
209
|
+
markRateLimited(account, retryAfterMs, family, headerStyle = "antigravity", model) {
|
|
210
|
+
const key = getQuotaKey(family, headerStyle, model);
|
|
211
|
+
account.rateLimitResetTimes[key] = nowMs() + retryAfterMs;
|
|
212
|
+
}
|
|
213
|
+
markAccountCoolingDown(account, cooldownMs, reason) {
|
|
214
|
+
account.coolingDownUntil = nowMs() + cooldownMs;
|
|
215
|
+
account.cooldownReason = reason;
|
|
216
|
+
}
|
|
217
|
+
isAccountCoolingDown(account) {
|
|
218
|
+
if (account.coolingDownUntil === undefined) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
if (nowMs() >= account.coolingDownUntil) {
|
|
222
|
+
this.clearAccountCooldown(account);
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
clearAccountCooldown(account) {
|
|
228
|
+
delete account.coolingDownUntil;
|
|
229
|
+
delete account.cooldownReason;
|
|
230
|
+
}
|
|
231
|
+
getAccountCooldownReason(account) {
|
|
232
|
+
return this.isAccountCoolingDown(account) ? account.cooldownReason : undefined;
|
|
233
|
+
}
|
|
234
|
+
isRateLimitedForHeaderStyle(account, family, headerStyle, model) {
|
|
235
|
+
return isRateLimitedForHeaderStyle(account, family, headerStyle, model);
|
|
236
|
+
}
|
|
237
|
+
getAvailableHeaderStyle(account, family, model) {
|
|
238
|
+
clearExpiredRateLimits(account);
|
|
239
|
+
if (family === "claude") {
|
|
240
|
+
return isRateLimitedForHeaderStyle(account, family, "antigravity") ? null : "antigravity";
|
|
241
|
+
}
|
|
242
|
+
if (!isRateLimitedForHeaderStyle(account, family, "antigravity", model)) {
|
|
243
|
+
return "antigravity";
|
|
244
|
+
}
|
|
245
|
+
if (!isRateLimitedForHeaderStyle(account, family, "gemini-cli", model)) {
|
|
246
|
+
return "gemini-cli";
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
removeAccount(account) {
|
|
251
|
+
const idx = this.accounts.indexOf(account);
|
|
252
|
+
if (idx < 0) {
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
this.accounts.splice(idx, 1);
|
|
256
|
+
this.accounts.forEach((acc, index) => {
|
|
257
|
+
acc.index = index;
|
|
258
|
+
});
|
|
259
|
+
if (this.accounts.length === 0) {
|
|
260
|
+
this.cursor = 0;
|
|
261
|
+
this.currentAccountIndexByFamily.claude = -1;
|
|
262
|
+
this.currentAccountIndexByFamily.gemini = -1;
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
if (this.cursor > idx) {
|
|
266
|
+
this.cursor -= 1;
|
|
267
|
+
}
|
|
268
|
+
this.cursor = this.cursor % this.accounts.length;
|
|
269
|
+
for (const family of ["claude", "gemini"]) {
|
|
270
|
+
if (this.currentAccountIndexByFamily[family] > idx) {
|
|
271
|
+
this.currentAccountIndexByFamily[family] -= 1;
|
|
272
|
+
}
|
|
273
|
+
if (this.currentAccountIndexByFamily[family] >= this.accounts.length) {
|
|
274
|
+
this.currentAccountIndexByFamily[family] = -1;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
updateFromAuth(account, auth) {
|
|
280
|
+
const parts = parseRefreshParts(auth.refresh);
|
|
281
|
+
account.parts = parts;
|
|
282
|
+
account.access = auth.access;
|
|
283
|
+
account.expires = auth.expires;
|
|
284
|
+
}
|
|
285
|
+
toAuthDetails(account) {
|
|
286
|
+
return {
|
|
287
|
+
type: "oauth",
|
|
288
|
+
refresh: formatRefreshParts(account.parts),
|
|
289
|
+
access: account.access,
|
|
290
|
+
expires: account.expires,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
getMinWaitTimeForFamily(family, model) {
|
|
294
|
+
const available = this.accounts.filter((a) => {
|
|
295
|
+
clearExpiredRateLimits(a);
|
|
296
|
+
return !isRateLimitedForFamily(a, family, model);
|
|
297
|
+
});
|
|
298
|
+
if (available.length > 0) {
|
|
299
|
+
return 0;
|
|
300
|
+
}
|
|
301
|
+
const waitTimes = [];
|
|
302
|
+
for (const a of this.accounts) {
|
|
303
|
+
if (family === "claude") {
|
|
304
|
+
const t = a.rateLimitResetTimes.claude;
|
|
305
|
+
if (t !== undefined)
|
|
306
|
+
waitTimes.push(Math.max(0, t - nowMs()));
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
// For Gemini, account becomes available when EITHER pool expires for this model/family
|
|
310
|
+
const antigravityKey = getQuotaKey(family, "antigravity", model);
|
|
311
|
+
const cliKey = getQuotaKey(family, "gemini-cli", model);
|
|
312
|
+
const t1 = a.rateLimitResetTimes[antigravityKey];
|
|
313
|
+
const t2 = a.rateLimitResetTimes[cliKey];
|
|
314
|
+
const accountWait = Math.min(t1 !== undefined ? Math.max(0, t1 - nowMs()) : Infinity, t2 !== undefined ? Math.max(0, t2 - nowMs()) : Infinity);
|
|
315
|
+
if (accountWait !== Infinity)
|
|
316
|
+
waitTimes.push(accountWait);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return waitTimes.length > 0 ? Math.min(...waitTimes) : 0;
|
|
320
|
+
}
|
|
321
|
+
getAccounts() {
|
|
322
|
+
return [...this.accounts];
|
|
323
|
+
}
|
|
324
|
+
async saveToDisk() {
|
|
325
|
+
const claudeIndex = Math.max(0, this.currentAccountIndexByFamily.claude);
|
|
326
|
+
const geminiIndex = Math.max(0, this.currentAccountIndexByFamily.gemini);
|
|
327
|
+
const storage = {
|
|
328
|
+
version: 3,
|
|
329
|
+
accounts: this.accounts.map((a) => ({
|
|
330
|
+
email: a.email,
|
|
331
|
+
refreshToken: a.parts.refreshToken,
|
|
332
|
+
projectId: a.parts.projectId,
|
|
333
|
+
managedProjectId: a.parts.managedProjectId,
|
|
334
|
+
addedAt: a.addedAt,
|
|
335
|
+
lastUsed: a.lastUsed,
|
|
336
|
+
lastSwitchReason: a.lastSwitchReason,
|
|
337
|
+
rateLimitResetTimes: Object.keys(a.rateLimitResetTimes).length > 0 ? a.rateLimitResetTimes : undefined,
|
|
338
|
+
coolingDownUntil: a.coolingDownUntil,
|
|
339
|
+
cooldownReason: a.cooldownReason,
|
|
340
|
+
})),
|
|
341
|
+
activeIndex: claudeIndex,
|
|
342
|
+
activeIndexByFamily: {
|
|
343
|
+
claude: claudeIndex,
|
|
344
|
+
gemini: geminiIndex,
|
|
345
|
+
},
|
|
346
|
+
};
|
|
347
|
+
await saveAccounts(storage);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/plugin/accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AuthDetails, OAuthAuthDetails, RefreshParts } from "./types";
|
|
2
|
+
export declare function isOAuthAuth(auth: AuthDetails): auth is OAuthAuthDetails;
|
|
3
|
+
/**
|
|
4
|
+
* Splits a packed refresh string into its constituent refresh token and project IDs.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseRefreshParts(refresh: string): RefreshParts;
|
|
7
|
+
/**
|
|
8
|
+
* Serializes refresh token parts into the stored string format.
|
|
9
|
+
*/
|
|
10
|
+
export declare function formatRefreshParts(parts: RefreshParts): string;
|
|
11
|
+
/**
|
|
12
|
+
* Determines whether an access token is expired or missing, with buffer for clock skew.
|
|
13
|
+
*/
|
|
14
|
+
export declare function accessTokenExpired(auth: OAuthAuthDetails): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Calculates absolute expiry timestamp based on a duration.
|
|
17
|
+
* @param requestTimeMs The local time when the request was initiated
|
|
18
|
+
* @param expiresInSeconds The duration returned by the server
|
|
19
|
+
*/
|
|
20
|
+
export declare function calculateTokenExpiry(requestTimeMs: number, expiresInSeconds: unknown): number;
|
|
21
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/plugin/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI3E,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,gBAAgB,CAEvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAO/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAI9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAKlE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAG,MAAM,CAO7F"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const ACCESS_TOKEN_EXPIRY_BUFFER_MS = 60 * 1000;
|
|
2
|
+
export function isOAuthAuth(auth) {
|
|
3
|
+
return auth.type === "oauth";
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Splits a packed refresh string into its constituent refresh token and project IDs.
|
|
7
|
+
*/
|
|
8
|
+
export function parseRefreshParts(refresh) {
|
|
9
|
+
const [refreshToken = "", projectId = "", managedProjectId = ""] = (refresh ?? "").split("|");
|
|
10
|
+
return {
|
|
11
|
+
refreshToken,
|
|
12
|
+
projectId: projectId || undefined,
|
|
13
|
+
managedProjectId: managedProjectId || undefined,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Serializes refresh token parts into the stored string format.
|
|
18
|
+
*/
|
|
19
|
+
export function formatRefreshParts(parts) {
|
|
20
|
+
const projectSegment = parts.projectId ?? "";
|
|
21
|
+
const base = `${parts.refreshToken}|${projectSegment}`;
|
|
22
|
+
return parts.managedProjectId ? `${base}|${parts.managedProjectId}` : base;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Determines whether an access token is expired or missing, with buffer for clock skew.
|
|
26
|
+
*/
|
|
27
|
+
export function accessTokenExpired(auth) {
|
|
28
|
+
if (!auth.access || typeof auth.expires !== "number") {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return auth.expires <= Date.now() + ACCESS_TOKEN_EXPIRY_BUFFER_MS;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Calculates absolute expiry timestamp based on a duration.
|
|
35
|
+
* @param requestTimeMs The local time when the request was initiated
|
|
36
|
+
* @param expiresInSeconds The duration returned by the server
|
|
37
|
+
*/
|
|
38
|
+
export function calculateTokenExpiry(requestTimeMs, expiresInSeconds) {
|
|
39
|
+
const seconds = typeof expiresInSeconds === "number" ? expiresInSeconds : 3600;
|
|
40
|
+
// Safety check for bad data - if it's not a positive number, treat as immediately expired
|
|
41
|
+
if (isNaN(seconds) || seconds <= 0) {
|
|
42
|
+
return requestTimeMs;
|
|
43
|
+
}
|
|
44
|
+
return requestTimeMs + seconds * 1000;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/plugin/auth.ts"],"names":[],"mappings":"AAEA,MAAM,6BAA6B,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,MAAM,UAAU,WAAW,CAAC,IAAiB;IAC3C,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,CAAC,YAAY,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,gBAAgB,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9F,OAAO;QACL,YAAY;QACZ,SAAS,EAAE,SAAS,IAAI,SAAS;QACjC,gBAAgB,EAAE,gBAAgB,IAAI,SAAS;KAChD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,YAAY,IAAI,cAAc,EAAE,CAAC;IACvD,OAAO,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACvD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,6BAA6B,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,aAAqB,EAAE,gBAAyB;IACnF,MAAM,OAAO,GAAG,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,0FAA0F;IAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugin/cache/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,GACrB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugin/cache/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,GACrB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signature cache for persisting thinking block signatures to disk.
|
|
3
|
+
*
|
|
4
|
+
* Features (based on LLM-API-Key-Proxy's ProviderCache):
|
|
5
|
+
* - Dual-TTL system: short memory TTL, longer disk TTL
|
|
6
|
+
* - Background disk persistence with batched writes
|
|
7
|
+
* - Atomic writes with temp file + move pattern
|
|
8
|
+
* - Automatic cleanup of expired entries
|
|
9
|
+
*
|
|
10
|
+
* Cache key format: `${sessionId}:${modelId}`
|
|
11
|
+
*/
|
|
12
|
+
import type { SignatureCacheConfig } from "../config";
|
|
13
|
+
interface CacheStats {
|
|
14
|
+
memoryHits: number;
|
|
15
|
+
diskHits: number;
|
|
16
|
+
misses: number;
|
|
17
|
+
writes: number;
|
|
18
|
+
memoryEntries: number;
|
|
19
|
+
dirty: boolean;
|
|
20
|
+
diskEnabled: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Full thinking content with signature (for recovery)
|
|
24
|
+
*/
|
|
25
|
+
export interface ThinkingCacheData {
|
|
26
|
+
text: string;
|
|
27
|
+
signature: string;
|
|
28
|
+
toolIds?: string[];
|
|
29
|
+
}
|
|
30
|
+
export declare class SignatureCache {
|
|
31
|
+
private cache;
|
|
32
|
+
private memoryTtlMs;
|
|
33
|
+
private diskTtlMs;
|
|
34
|
+
private writeIntervalMs;
|
|
35
|
+
private cacheFilePath;
|
|
36
|
+
private enabled;
|
|
37
|
+
private dirty;
|
|
38
|
+
private writeTimer;
|
|
39
|
+
private cleanupTimer;
|
|
40
|
+
private stats;
|
|
41
|
+
constructor(config: SignatureCacheConfig);
|
|
42
|
+
/**
|
|
43
|
+
* Generate a cache key from sessionId and modelId.
|
|
44
|
+
*/
|
|
45
|
+
static makeKey(sessionId: string, modelId: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* Store a signature in the cache.
|
|
48
|
+
*/
|
|
49
|
+
store(key: string, signature: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Retrieve a signature from the cache.
|
|
52
|
+
* Returns null if not found or expired.
|
|
53
|
+
*/
|
|
54
|
+
retrieve(key: string): string | null;
|
|
55
|
+
/**
|
|
56
|
+
* Check if a key exists in the cache (without updating stats).
|
|
57
|
+
*/
|
|
58
|
+
has(key: string): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Store full thinking content with signature.
|
|
61
|
+
* This enables recovery even after thinking text is stripped by compaction.
|
|
62
|
+
*
|
|
63
|
+
* Port of LLM-API-Key-Proxy's _cache_thinking()
|
|
64
|
+
*/
|
|
65
|
+
storeThinking(key: string, thinkingText: string, signature: string, toolIds?: string[]): void;
|
|
66
|
+
/**
|
|
67
|
+
* Retrieve full thinking content by key.
|
|
68
|
+
* Returns null if not found or expired.
|
|
69
|
+
*/
|
|
70
|
+
retrieveThinking(key: string): ThinkingCacheData | null;
|
|
71
|
+
/**
|
|
72
|
+
* Check if full thinking content exists for a key.
|
|
73
|
+
*/
|
|
74
|
+
hasThinking(key: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Get cache statistics.
|
|
77
|
+
*/
|
|
78
|
+
getStats(): CacheStats;
|
|
79
|
+
/**
|
|
80
|
+
* Manually trigger a disk save.
|
|
81
|
+
*/
|
|
82
|
+
flush(): Promise<boolean>;
|
|
83
|
+
/**
|
|
84
|
+
* Graceful shutdown: stop timers and flush to disk.
|
|
85
|
+
*/
|
|
86
|
+
shutdown(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Load cache from disk file with TTL validation.
|
|
89
|
+
*/
|
|
90
|
+
private loadFromDisk;
|
|
91
|
+
/**
|
|
92
|
+
* Save cache to disk with atomic write pattern.
|
|
93
|
+
* Merges with existing disk entries that haven't expired.
|
|
94
|
+
*/
|
|
95
|
+
private saveToDisk;
|
|
96
|
+
/**
|
|
97
|
+
* Start background write and cleanup timers.
|
|
98
|
+
*/
|
|
99
|
+
private startBackgroundTasks;
|
|
100
|
+
/**
|
|
101
|
+
* Remove expired entries from memory.
|
|
102
|
+
*/
|
|
103
|
+
private cleanupExpired;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create a signature cache with the given configuration.
|
|
107
|
+
* Returns null if caching is disabled.
|
|
108
|
+
*/
|
|
109
|
+
export declare function createSignatureCache(config: SignatureCacheConfig | undefined): SignatureCache | null;
|
|
110
|
+
export {};
|
|
111
|
+
//# sourceMappingURL=signature-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature-cache.d.ts","sourceRoot":"","sources":["../../../../src/plugin/cache/signature-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AA+BtD,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAuBD,qBAAa,cAAc;IAEzB,OAAO,CAAC,KAAK,CAAsC;IAGnD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAU;IAGzB,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,YAAY,CAA+C;IAGnE,OAAO,CAAC,KAAK,CAKX;gBAEU,MAAM,EAAE,oBAAoB;IAiBxC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAI1D;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAU3C;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkBpC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAczB;;;;;OAKG;IACH,aAAa,CACX,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,IAAI;IAaP;;;OAGG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAoBvD;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAUjC;;OAEG;IACH,QAAQ,IAAI,UAAU;IAStB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAmBhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqCpB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAqFlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,OAAO,CAAC,cAAc;CAcvB;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,GAAG,cAAc,GAAG,IAAI,CAMpG"}
|