@slkiser/opencode-quota 4.10.2 → 4.10.3
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/README.md +11 -7
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/{qwen-local-quota.d.ts → alibaba-coding-plan-local-quota.d.ts} +2 -34
- package/dist/lib/alibaba-coding-plan-local-quota.d.ts.map +1 -0
- package/dist/lib/{qwen-local-quota.js → alibaba-coding-plan-local-quota.js} +1 -110
- package/dist/lib/alibaba-coding-plan-local-quota.js.map +1 -0
- package/dist/lib/cli-show.d.ts.map +1 -1
- package/dist/lib/cli-show.js +0 -1
- package/dist/lib/cli-show.js.map +1 -1
- package/dist/lib/command-parsing.d.ts +2 -12
- package/dist/lib/command-parsing.d.ts.map +1 -1
- package/dist/lib/command-parsing.js +2 -20
- package/dist/lib/command-parsing.js.map +1 -1
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +0 -25
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/entries.d.ts +0 -1
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/google-agy.js +1 -1
- package/dist/lib/google-agy.js.map +1 -1
- package/dist/lib/grouped-entry-normalization.d.ts.map +1 -1
- package/dist/lib/grouped-entry-normalization.js +0 -29
- package/dist/lib/grouped-entry-normalization.js.map +1 -1
- package/dist/lib/maintainer-announcements.d.ts.map +1 -1
- package/dist/lib/maintainer-announcements.js +9 -2
- package/dist/lib/maintainer-announcements.js.map +1 -1
- package/dist/lib/ollama-cloud.d.ts +2 -2
- package/dist/lib/ollama-cloud.d.ts.map +1 -1
- package/dist/lib/ollama-cloud.js +8 -3
- package/dist/lib/ollama-cloud.js.map +1 -1
- package/dist/lib/opencode-config-providers.d.ts.map +1 -1
- package/dist/lib/opencode-config-providers.js +0 -2
- package/dist/lib/opencode-config-providers.js.map +1 -1
- package/dist/lib/opencode-zen-config.d.ts +1 -1
- package/dist/lib/opencode-zen-config.d.ts.map +1 -1
- package/dist/lib/opencode-zen-config.js +10 -4
- package/dist/lib/opencode-zen-config.js.map +1 -1
- package/dist/lib/opencode-zen.d.ts +12 -11
- package/dist/lib/opencode-zen.d.ts.map +1 -1
- package/dist/lib/opencode-zen.js +120 -195
- package/dist/lib/opencode-zen.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +0 -1
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/provider-registration.d.ts +2 -27
- package/dist/lib/provider-registration.d.ts.map +1 -1
- package/dist/lib/provider-registration.js +2 -28
- package/dist/lib/provider-registration.js.map +1 -1
- package/dist/lib/quota-dialog-commands.d.ts +0 -3
- package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
- package/dist/lib/quota-dialog-commands.js +1 -25
- package/dist/lib/quota-dialog-commands.js.map +1 -1
- package/dist/lib/quota-providers.d.ts +1 -1
- package/dist/lib/quota-providers.d.ts.map +1 -1
- package/dist/lib/quota-providers.js +7 -14
- package/dist/lib/quota-providers.js.map +1 -1
- package/dist/lib/quota-runtime-context.d.ts.map +1 -1
- package/dist/lib/quota-runtime-context.js +0 -2
- package/dist/lib/quota-runtime-context.js.map +1 -1
- package/dist/lib/quota-state.d.ts.map +1 -1
- package/dist/lib/quota-state.js +1 -2
- package/dist/lib/quota-state.js.map +1 -1
- package/dist/lib/quota-status.d.ts +0 -10
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +11 -64
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/quota-toast-runtime.d.ts.map +1 -1
- package/dist/lib/quota-toast-runtime.js +0 -8
- package/dist/lib/quota-toast-runtime.js.map +1 -1
- package/dist/lib/types.d.ts +3 -67
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +0 -29
- package/dist/lib/types.js.map +1 -1
- package/dist/plugin.d.ts +0 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +2 -23
- package/dist/plugin.js.map +1 -1
- package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
- package/dist/providers/alibaba-coding-plan.js +1 -1
- package/dist/providers/alibaba-coding-plan.js.map +1 -1
- package/dist/providers/cache-policies.d.ts +0 -7
- package/dist/providers/cache-policies.d.ts.map +1 -1
- package/dist/providers/cache-policies.js +0 -6
- package/dist/providers/cache-policies.js.map +1 -1
- package/dist/providers/ollama-cloud.d.ts +1 -1
- package/dist/providers/ollama-cloud.d.ts.map +1 -1
- package/dist/providers/ollama-cloud.js +14 -1
- package/dist/providers/ollama-cloud.js.map +1 -1
- package/dist/providers/opencode-zen.d.ts.map +1 -1
- package/dist/providers/opencode-zen.js +23 -14
- package/dist/providers/opencode-zen.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +0 -4
- package/dist/providers/registry.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +0 -6
- package/dist/tui.tsx +0 -6
- package/package.json +2 -3
- package/dist/lib/google-antigravity-companion.d.ts +0 -8
- package/dist/lib/google-antigravity-companion.d.ts.map +0 -1
- package/dist/lib/google-antigravity-companion.js +0 -61
- package/dist/lib/google-antigravity-companion.js.map +0 -1
- package/dist/lib/google.d.ts +0 -58
- package/dist/lib/google.d.ts.map +0 -1
- package/dist/lib/google.js +0 -566
- package/dist/lib/google.js.map +0 -1
- package/dist/lib/qwen-auth.d.ts +0 -22
- package/dist/lib/qwen-auth.d.ts.map +0 -1
- package/dist/lib/qwen-auth.js +0 -42
- package/dist/lib/qwen-auth.js.map +0 -1
- package/dist/lib/qwen-local-quota.d.ts.map +0 -1
- package/dist/lib/qwen-local-quota.js.map +0 -1
- package/dist/providers/google-antigravity.d.ts +0 -6
- package/dist/providers/google-antigravity.d.ts.map +0 -1
- package/dist/providers/google-antigravity.js +0 -114
- package/dist/providers/google-antigravity.js.map +0 -1
- package/dist/providers/qwen-code.d.ts +0 -3
- package/dist/providers/qwen-code.d.ts.map +0 -1
- package/dist/providers/qwen-code.js +0 -84
- package/dist/providers/qwen-code.js.map +0 -1
package/dist/lib/google.d.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Google Antigravity quota fetcher
|
|
3
|
-
*
|
|
4
|
-
* Uses OpenCode's antigravity-accounts.json at ~/.config/opencode/antigravity-accounts.json.
|
|
5
|
-
* Requires the user to have opencode-antigravity-auth installed and logged in.
|
|
6
|
-
*/
|
|
7
|
-
import { type ResolvedAuthIdentity } from "./resolved-auth-identity.js";
|
|
8
|
-
import type { AntigravityAccount, GoogleModelId, GoogleResult } from "./types.js";
|
|
9
|
-
export interface GoogleAntigravityAuthPresence {
|
|
10
|
-
state: "missing" | "present" | "invalid";
|
|
11
|
-
selectedPath?: string;
|
|
12
|
-
presentPaths: string[];
|
|
13
|
-
candidatePaths: string[];
|
|
14
|
-
accountCount: number;
|
|
15
|
-
validAccountCount: number;
|
|
16
|
-
error?: string;
|
|
17
|
-
}
|
|
18
|
-
export declare function getAntigravityAccountsCandidatePaths(): string[];
|
|
19
|
-
export declare function pickAntigravityAccountsPath(): string;
|
|
20
|
-
/**
|
|
21
|
-
* Read Antigravity accounts from storage
|
|
22
|
-
*/
|
|
23
|
-
export declare function readAntigravityAccounts(): Promise<AntigravityAccount[] | null>;
|
|
24
|
-
export declare function inspectAntigravityAccountsPresence(): Promise<GoogleAntigravityAuthPresence>;
|
|
25
|
-
export declare function hasAntigravityAccountsConfigured(): Promise<boolean>;
|
|
26
|
-
export declare function hasAntigravityQuotaRuntimeAvailable(): Promise<boolean>;
|
|
27
|
-
export declare function resolveGoogleAntigravityAuthIdentity(): Promise<ResolvedAuthIdentity | null>;
|
|
28
|
-
export declare function refreshGoogleTokensForAllAccounts(params?: {
|
|
29
|
-
skewMs?: number;
|
|
30
|
-
force?: boolean;
|
|
31
|
-
}): Promise<null | {
|
|
32
|
-
total: number;
|
|
33
|
-
successCount: number;
|
|
34
|
-
failures: Array<{
|
|
35
|
-
email?: string;
|
|
36
|
-
error: string;
|
|
37
|
-
}>;
|
|
38
|
-
}>;
|
|
39
|
-
/**
|
|
40
|
-
* Query Google Antigravity quota for ALL accounts
|
|
41
|
-
*
|
|
42
|
-
* Reads accounts from ~/.config/opencode/antigravity-accounts.json.
|
|
43
|
-
* Refreshes access tokens and fetches quota for all accounts in parallel.
|
|
44
|
-
*
|
|
45
|
-
* @param modelIds - Model IDs to fetch quota for
|
|
46
|
-
* @returns Quota result with all models and any errors, or null if not configured
|
|
47
|
-
*/
|
|
48
|
-
export declare function queryGoogleQuota(modelIds: GoogleModelId[], options?: {
|
|
49
|
-
requestTimeoutMs?: number;
|
|
50
|
-
}): Promise<GoogleResult>;
|
|
51
|
-
/**
|
|
52
|
-
* Format Google quota for toast display
|
|
53
|
-
*
|
|
54
|
-
* @param result - Google quota result
|
|
55
|
-
* @returns Formatted string like "G3Pro 100% * G3Flash 100% * Claude 0%" or null
|
|
56
|
-
*/
|
|
57
|
-
export declare function formatGoogleQuota(result: GoogleResult): string | null;
|
|
58
|
-
//# sourceMappingURL=google.d.ts.map
|
package/dist/lib/google.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/lib/google.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyBH,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,kBAAkB,EAGlB,aAAa,EAIb,YAAY,EACb,MAAM,YAAY,CAAC;AA6BpB,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAeD,wBAAgB,oCAAoC,IAAI,MAAM,EAAE,CAY/D;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAMpD;AAoCD;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAmBpF;AAED,wBAAsB,kCAAkC,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAgDjG;AAED,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,OAAO,CAAC,CAGzE;AAED,wBAAsB,mCAAmC,IAAI,OAAO,CAAC,OAAO,CAAC,CAW5E;AAED,wBAAsB,oCAAoC,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CA6BjG;AAwGD,wBAAsB,iCAAiC,CAAC,MAAM,CAAC,EAAE;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD,CAAC,CA6CD;AAwOD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,YAAY,CAAC,CAiDvB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAcrE"}
|
package/dist/lib/google.js
DELETED
|
@@ -1,566 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Google Antigravity quota fetcher
|
|
3
|
-
*
|
|
4
|
-
* Uses OpenCode's antigravity-accounts.json at ~/.config/opencode/antigravity-accounts.json.
|
|
5
|
-
* Requires the user to have opencode-antigravity-auth installed and logged in.
|
|
6
|
-
*/
|
|
7
|
-
import { existsSync } from "fs";
|
|
8
|
-
import { readFile } from "fs/promises";
|
|
9
|
-
import { join } from "path";
|
|
10
|
-
import { inspectAntigravityCompanionPresence, resolveAntigravityClientCredentials, } from "./google-antigravity-companion.js";
|
|
11
|
-
import { getOpencodeRuntimeDirCandidates } from "./opencode-runtime-paths.js";
|
|
12
|
-
// NOTE: Google Antigravity auth differs intentionally from Qwen:
|
|
13
|
-
// - Qwen reads OpenCode auth.json key "qwen-code" first, then falls back to
|
|
14
|
-
// legacy key "opencode-qwencode-auth", and uses local quota state.
|
|
15
|
-
// - Google refresh flow requires upstream OAuth client credentials from
|
|
16
|
-
// opencode-antigravity-auth to match that plugin's runtime behavior.
|
|
17
|
-
import { getCachedAccessToken, makeAccountCacheKey, setCachedAccessToken, } from "./google-token-cache.js";
|
|
18
|
-
import { fetchWithTimeout } from "./http.js";
|
|
19
|
-
import { mapWithConcurrency } from "./map-with-concurrency.js";
|
|
20
|
-
import { composeResolvedAuthIdentities, deriveResolvedAuthIdentity, } from "./resolved-auth-identity.js";
|
|
21
|
-
import { GOOGLE_MODEL_KEYS } from "./types.js";
|
|
22
|
-
// =============================================================================
|
|
23
|
-
// Constants
|
|
24
|
-
// =============================================================================
|
|
25
|
-
const GOOGLE_QUOTA_API_URL = "https://cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels";
|
|
26
|
-
const USER_AGENT = "antigravity/1.11.9 darwin/arm64";
|
|
27
|
-
const GOOGLE_TOKEN_REFRESH_URL = "https://oauth2.googleapis.com/token";
|
|
28
|
-
// Network timeouts tuned for reliability.
|
|
29
|
-
const GOOGLE_TOKEN_TIMEOUT_MS = 8000;
|
|
30
|
-
const GOOGLE_QUOTA_TIMEOUT_MS = 6000;
|
|
31
|
-
// Multi-account fetching concurrency (reliability > speed).
|
|
32
|
-
const GOOGLE_ACCOUNTS_CONCURRENCY = 3;
|
|
33
|
-
function getCompanionQuotaError(state) {
|
|
34
|
-
return state === "missing"
|
|
35
|
-
? "Google Antigravity requires the opencode-antigravity-auth plugin"
|
|
36
|
-
: "Installed opencode-antigravity-auth package is incompatible";
|
|
37
|
-
}
|
|
38
|
-
export function getAntigravityAccountsCandidatePaths() {
|
|
39
|
-
// Prefer OpenCode runtime dirs (xdg-basedir semantics), but include both
|
|
40
|
-
// config and data as candidates for compatibility with older variants.
|
|
41
|
-
const { configDirs, dataDirs } = getOpencodeRuntimeDirCandidates();
|
|
42
|
-
const candidates = [
|
|
43
|
-
...configDirs.map((d) => join(d, "antigravity-accounts.json")),
|
|
44
|
-
...dataDirs.map((d) => join(d, "antigravity-accounts.json")),
|
|
45
|
-
];
|
|
46
|
-
// Unique + stable order.
|
|
47
|
-
return Array.from(new Set(candidates));
|
|
48
|
-
}
|
|
49
|
-
export function pickAntigravityAccountsPath() {
|
|
50
|
-
for (const p of getAntigravityAccountsCandidatePaths()) {
|
|
51
|
-
if (existsSync(p))
|
|
52
|
-
return p;
|
|
53
|
-
}
|
|
54
|
-
// Default to the first candidate for error/debug messaging.
|
|
55
|
-
return getAntigravityAccountsCandidatePaths()[0];
|
|
56
|
-
}
|
|
57
|
-
async function readAntigravityAccountsFile(path) {
|
|
58
|
-
try {
|
|
59
|
-
const content = await readFile(path, "utf-8");
|
|
60
|
-
const file = JSON.parse(content);
|
|
61
|
-
if (!Array.isArray(file.accounts)) {
|
|
62
|
-
return {
|
|
63
|
-
state: "invalid",
|
|
64
|
-
path,
|
|
65
|
-
error: "accounts file is missing an accounts array",
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
const validAccounts = file.accounts.filter((account) => typeof account.refreshToken === "string" && account.refreshToken.trim().length > 0);
|
|
69
|
-
return {
|
|
70
|
-
state: "present",
|
|
71
|
-
path,
|
|
72
|
-
file,
|
|
73
|
-
validAccounts,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
78
|
-
return {
|
|
79
|
-
state: "invalid",
|
|
80
|
-
path,
|
|
81
|
-
error: message,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Read Antigravity accounts from storage
|
|
87
|
-
*/
|
|
88
|
-
export async function readAntigravityAccounts() {
|
|
89
|
-
for (const path of getAntigravityAccountsCandidatePaths()) {
|
|
90
|
-
if (!existsSync(path)) {
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
const result = await readAntigravityAccountsFile(path);
|
|
94
|
-
if (result.state === "invalid") {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
if (result.file.accounts.length === 0) {
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
return result.validAccounts.length > 0 ? result.validAccounts : null;
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
export async function inspectAntigravityAccountsPresence() {
|
|
105
|
-
const candidatePaths = getAntigravityAccountsCandidatePaths();
|
|
106
|
-
const presentPaths = candidatePaths.filter((path) => existsSync(path));
|
|
107
|
-
if (presentPaths.length === 0) {
|
|
108
|
-
return {
|
|
109
|
-
state: "missing",
|
|
110
|
-
presentPaths,
|
|
111
|
-
candidatePaths,
|
|
112
|
-
accountCount: 0,
|
|
113
|
-
validAccountCount: 0,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
let firstInvalid = null;
|
|
117
|
-
for (const path of presentPaths) {
|
|
118
|
-
const result = await readAntigravityAccountsFile(path);
|
|
119
|
-
if (result.state === "invalid") {
|
|
120
|
-
if (!firstInvalid) {
|
|
121
|
-
firstInvalid = { path: result.path, error: result.error };
|
|
122
|
-
}
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
if (result.file.accounts.length === 0) {
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
return {
|
|
129
|
-
state: "present",
|
|
130
|
-
selectedPath: result.path,
|
|
131
|
-
presentPaths,
|
|
132
|
-
candidatePaths,
|
|
133
|
-
accountCount: result.file.accounts.length,
|
|
134
|
-
validAccountCount: result.validAccounts.length,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
return {
|
|
138
|
-
state: "invalid",
|
|
139
|
-
selectedPath: firstInvalid?.path,
|
|
140
|
-
presentPaths,
|
|
141
|
-
candidatePaths,
|
|
142
|
-
accountCount: 0,
|
|
143
|
-
validAccountCount: 0,
|
|
144
|
-
error: firstInvalid?.error,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
export async function hasAntigravityAccountsConfigured() {
|
|
148
|
-
const presence = await inspectAntigravityAccountsPresence();
|
|
149
|
-
return presence.state === "present" && presence.validAccountCount > 0;
|
|
150
|
-
}
|
|
151
|
-
export async function hasAntigravityQuotaRuntimeAvailable() {
|
|
152
|
-
const [authPresence, companionPresence] = await Promise.all([
|
|
153
|
-
inspectAntigravityAccountsPresence(),
|
|
154
|
-
inspectAntigravityCompanionPresence(),
|
|
155
|
-
]);
|
|
156
|
-
return (authPresence.state === "present" &&
|
|
157
|
-
authPresence.validAccountCount > 0 &&
|
|
158
|
-
companionPresence.state === "present");
|
|
159
|
-
}
|
|
160
|
-
export async function resolveGoogleAntigravityAuthIdentity() {
|
|
161
|
-
const [accounts, credentials] = await Promise.all([
|
|
162
|
-
readAntigravityAccounts(),
|
|
163
|
-
resolveAntigravityClientCredentials(),
|
|
164
|
-
]);
|
|
165
|
-
if (!accounts || accounts.length === 0 || credentials.state !== "configured")
|
|
166
|
-
return null;
|
|
167
|
-
const accountIdentities = await Promise.all(accounts.map((account) => deriveResolvedAuthIdentity({
|
|
168
|
-
providerId: "google-antigravity",
|
|
169
|
-
principal: { kind: "credential", value: account.refreshToken },
|
|
170
|
-
qualifiers: [getProjectId(account) ?? "missing-project-id"],
|
|
171
|
-
})));
|
|
172
|
-
if (accountIdentities.some((identity) => identity === null))
|
|
173
|
-
return null;
|
|
174
|
-
const companionIdentity = await deriveResolvedAuthIdentity({
|
|
175
|
-
providerId: "google-antigravity:companion",
|
|
176
|
-
principal: { kind: "credential", value: credentials.clientSecret },
|
|
177
|
-
qualifiers: [credentials.clientId],
|
|
178
|
-
});
|
|
179
|
-
if (!companionIdentity)
|
|
180
|
-
return null;
|
|
181
|
-
return composeResolvedAuthIdentities({
|
|
182
|
-
providerId: "google-antigravity",
|
|
183
|
-
identities: [...accountIdentities, companionIdentity],
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Refresh Google access token
|
|
188
|
-
*/
|
|
189
|
-
async function refreshAccessToken(params) {
|
|
190
|
-
try {
|
|
191
|
-
const body = new URLSearchParams({
|
|
192
|
-
client_id: params.clientId,
|
|
193
|
-
client_secret: params.clientSecret,
|
|
194
|
-
refresh_token: params.refreshToken,
|
|
195
|
-
grant_type: "refresh_token",
|
|
196
|
-
});
|
|
197
|
-
return await fetchWithTimeout(GOOGLE_TOKEN_REFRESH_URL, {
|
|
198
|
-
request: {
|
|
199
|
-
method: "POST",
|
|
200
|
-
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
201
|
-
body,
|
|
202
|
-
},
|
|
203
|
-
timeoutMs: params.timeoutMs ?? GOOGLE_TOKEN_TIMEOUT_MS,
|
|
204
|
-
consume: async (response, timeoutSignal) => {
|
|
205
|
-
if (!response.ok) {
|
|
206
|
-
// Try to extract error code from response
|
|
207
|
-
try {
|
|
208
|
-
const errorData = (await response.json());
|
|
209
|
-
if (errorData.error === "invalid_grant") {
|
|
210
|
-
return { error: "Token revoked" };
|
|
211
|
-
}
|
|
212
|
-
return {
|
|
213
|
-
error: errorData.error_description || `HTTP ${response.status}`,
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
catch (error) {
|
|
217
|
-
if (timeoutSignal.aborted)
|
|
218
|
-
throw error;
|
|
219
|
-
return { error: `HTTP ${response.status}` };
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
const data = (await response.json());
|
|
223
|
-
return {
|
|
224
|
-
accessToken: data.access_token,
|
|
225
|
-
expiresIn: data.expires_in,
|
|
226
|
-
};
|
|
227
|
-
},
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
catch (err) {
|
|
231
|
-
if (err instanceof Error && err.message.includes("timeout")) {
|
|
232
|
-
return { error: "Token refresh timeout" };
|
|
233
|
-
}
|
|
234
|
-
return { error: "Token refresh failed" };
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
async function refreshAccessTokenWithCache(params) {
|
|
238
|
-
const skewMs = params.skewMs ?? 2 * 60_000;
|
|
239
|
-
const key = makeAccountCacheKey({
|
|
240
|
-
refreshToken: params.refreshToken,
|
|
241
|
-
projectId: params.projectId,
|
|
242
|
-
});
|
|
243
|
-
if (!params.force) {
|
|
244
|
-
const cached = await getCachedAccessToken({ key, skewMs });
|
|
245
|
-
if (cached)
|
|
246
|
-
return { accessToken: cached.accessToken };
|
|
247
|
-
}
|
|
248
|
-
const refreshed = await refreshAccessToken({
|
|
249
|
-
refreshToken: params.refreshToken,
|
|
250
|
-
clientId: params.credentials.clientId,
|
|
251
|
-
clientSecret: params.credentials.clientSecret,
|
|
252
|
-
timeoutMs: params.timeoutMs,
|
|
253
|
-
});
|
|
254
|
-
if ("error" in refreshed)
|
|
255
|
-
return refreshed;
|
|
256
|
-
await setCachedAccessToken({
|
|
257
|
-
key,
|
|
258
|
-
entry: {
|
|
259
|
-
accessToken: refreshed.accessToken,
|
|
260
|
-
expiresAt: Date.now() + Math.max(1, refreshed.expiresIn) * 1000,
|
|
261
|
-
},
|
|
262
|
-
});
|
|
263
|
-
return { accessToken: refreshed.accessToken };
|
|
264
|
-
}
|
|
265
|
-
export async function refreshGoogleTokensForAllAccounts(params) {
|
|
266
|
-
const accounts = await readAntigravityAccounts();
|
|
267
|
-
if (!accounts || accounts.length === 0)
|
|
268
|
-
return null;
|
|
269
|
-
const valid = accounts.filter((a) => !!a.refreshToken);
|
|
270
|
-
if (valid.length === 0)
|
|
271
|
-
return null;
|
|
272
|
-
const credentials = await resolveAntigravityClientCredentials();
|
|
273
|
-
if (credentials.state !== "configured") {
|
|
274
|
-
const error = getCompanionQuotaError(credentials.state);
|
|
275
|
-
return {
|
|
276
|
-
total: valid.length,
|
|
277
|
-
successCount: 0,
|
|
278
|
-
failures: valid.map((account) => ({
|
|
279
|
-
email: account.email,
|
|
280
|
-
error,
|
|
281
|
-
})),
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
const results = await mapWithConcurrency(valid, GOOGLE_ACCOUNTS_CONCURRENCY, async (account) => {
|
|
285
|
-
const email = account.email;
|
|
286
|
-
const projectId = getProjectId(account);
|
|
287
|
-
if (!projectId)
|
|
288
|
-
return { ok: false, email, error: "No projectId" };
|
|
289
|
-
const token = await refreshAccessTokenWithCache({
|
|
290
|
-
refreshToken: account.refreshToken,
|
|
291
|
-
projectId,
|
|
292
|
-
email,
|
|
293
|
-
skewMs: params?.skewMs,
|
|
294
|
-
force: params?.force,
|
|
295
|
-
credentials,
|
|
296
|
-
});
|
|
297
|
-
if ("error" in token)
|
|
298
|
-
return { ok: false, email, error: token.error };
|
|
299
|
-
return { ok: true, email };
|
|
300
|
-
});
|
|
301
|
-
const failures = results.filter((r) => !r.ok).map((r) => ({ email: r.email, error: r.error }));
|
|
302
|
-
const successCount = results.filter((r) => r.ok).length;
|
|
303
|
-
return {
|
|
304
|
-
total: valid.length,
|
|
305
|
-
successCount,
|
|
306
|
-
failures,
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Fetch quota from Google API
|
|
311
|
-
*/
|
|
312
|
-
async function fetchGoogleQuota(accessToken, projectId, timeoutMs = GOOGLE_QUOTA_TIMEOUT_MS) {
|
|
313
|
-
return await fetchWithTimeout(GOOGLE_QUOTA_API_URL, {
|
|
314
|
-
request: {
|
|
315
|
-
method: "POST",
|
|
316
|
-
headers: {
|
|
317
|
-
"Content-Type": "application/json",
|
|
318
|
-
Authorization: `Bearer ${accessToken}`,
|
|
319
|
-
"User-Agent": USER_AGENT,
|
|
320
|
-
},
|
|
321
|
-
body: JSON.stringify({ project: projectId }),
|
|
322
|
-
},
|
|
323
|
-
timeoutMs,
|
|
324
|
-
consume: async (response) => {
|
|
325
|
-
if (!response.ok) {
|
|
326
|
-
if (response.status === 401 || response.status === 403) {
|
|
327
|
-
throw new Error(`Google API auth error: ${response.status}`);
|
|
328
|
-
}
|
|
329
|
-
throw new Error(`Google API error: ${response.status}`);
|
|
330
|
-
}
|
|
331
|
-
return (await response.json());
|
|
332
|
-
},
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
function getModelKeyAliases(modelConfig) {
|
|
336
|
-
return [
|
|
337
|
-
modelConfig.key,
|
|
338
|
-
...(modelConfig.altKey
|
|
339
|
-
?.split("|")
|
|
340
|
-
.map((key) => key.trim())
|
|
341
|
-
.filter(Boolean) ?? []),
|
|
342
|
-
];
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Map configured models to the companion plugin's persisted rate-limit keys.
|
|
346
|
-
*/
|
|
347
|
-
function getRateLimitResetKeys(modelConfig) {
|
|
348
|
-
if (modelConfig.key.includes("claude"))
|
|
349
|
-
return ["claude"];
|
|
350
|
-
// This provider reports Antigravity quota only; Gemini CLI quota is handled separately.
|
|
351
|
-
return [
|
|
352
|
-
"gemini",
|
|
353
|
-
"gemini-antigravity",
|
|
354
|
-
...getModelKeyAliases(modelConfig).map((key) => `gemini-antigravity:${key}`),
|
|
355
|
-
];
|
|
356
|
-
}
|
|
357
|
-
function getActiveRateLimitResetTime(account, modelConfig) {
|
|
358
|
-
const resetTimes = account.rateLimitResetTimes;
|
|
359
|
-
if (!resetTimes)
|
|
360
|
-
return undefined;
|
|
361
|
-
const now = Date.now();
|
|
362
|
-
let activeResetTime;
|
|
363
|
-
for (const key of getRateLimitResetKeys(modelConfig)) {
|
|
364
|
-
const resetTime = resetTimes[key];
|
|
365
|
-
if (typeof resetTime !== "number" || resetTime <= now)
|
|
366
|
-
continue;
|
|
367
|
-
activeResetTime =
|
|
368
|
-
activeResetTime === undefined ? resetTime : Math.max(activeResetTime, resetTime);
|
|
369
|
-
}
|
|
370
|
-
return activeResetTime;
|
|
371
|
-
}
|
|
372
|
-
/**
|
|
373
|
-
* Extract model quotas from API response
|
|
374
|
-
*/
|
|
375
|
-
function extractModelQuotas(data, modelIds, account) {
|
|
376
|
-
const quotas = [];
|
|
377
|
-
const accountEmail = account.email || "Unknown";
|
|
378
|
-
for (const modelId of modelIds) {
|
|
379
|
-
const modelConfig = GOOGLE_MODEL_KEYS[modelId];
|
|
380
|
-
if (!modelConfig)
|
|
381
|
-
continue;
|
|
382
|
-
let modelInfo = data.models[modelConfig.key];
|
|
383
|
-
// Try alternate keys (pipe-separated) if primary not found
|
|
384
|
-
if (!modelInfo && modelConfig.altKey) {
|
|
385
|
-
const altKeys = modelConfig.altKey.split("|");
|
|
386
|
-
for (const altKey of altKeys) {
|
|
387
|
-
modelInfo = data.models[altKey.trim()];
|
|
388
|
-
if (modelInfo)
|
|
389
|
-
break;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
const activeResetTime = getActiveRateLimitResetTime(account, modelConfig);
|
|
393
|
-
if (modelInfo) {
|
|
394
|
-
let remainingFraction = modelInfo.quotaInfo?.remainingFraction ?? 0;
|
|
395
|
-
let resetTimeIso = modelInfo.quotaInfo?.resetTime;
|
|
396
|
-
if (activeResetTime) {
|
|
397
|
-
remainingFraction = 0;
|
|
398
|
-
resetTimeIso = new Date(activeResetTime).toISOString();
|
|
399
|
-
}
|
|
400
|
-
quotas.push({
|
|
401
|
-
modelId,
|
|
402
|
-
displayName: modelConfig.display,
|
|
403
|
-
percentRemaining: Math.round(remainingFraction * 100),
|
|
404
|
-
resetTimeIso,
|
|
405
|
-
accountEmail,
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
else if (activeResetTime) {
|
|
409
|
-
quotas.push({
|
|
410
|
-
modelId,
|
|
411
|
-
displayName: modelConfig.display,
|
|
412
|
-
percentRemaining: 0,
|
|
413
|
-
resetTimeIso: new Date(activeResetTime).toISOString(),
|
|
414
|
-
accountEmail,
|
|
415
|
-
});
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
return quotas;
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* Fetch quota for a single account
|
|
422
|
-
*/
|
|
423
|
-
function getProjectId(account) {
|
|
424
|
-
return (account.managedProjectId ||
|
|
425
|
-
account.quotaProjectId ||
|
|
426
|
-
account.projectId ||
|
|
427
|
-
account.projectID);
|
|
428
|
-
}
|
|
429
|
-
// NOTE: This plugin treats Google Antigravity as truly multi-account.
|
|
430
|
-
// Each account gets its own access token derived from its refresh token.
|
|
431
|
-
async function fetchAccountQuotaWithAntigravityRefresh(params) {
|
|
432
|
-
const email = params.account.email || "Unknown";
|
|
433
|
-
const projectId = getProjectId(params.account);
|
|
434
|
-
if (!projectId) {
|
|
435
|
-
return { success: false, error: "No projectId", accountEmail: email };
|
|
436
|
-
}
|
|
437
|
-
try {
|
|
438
|
-
const tokenResult = await refreshAccessTokenWithCache({
|
|
439
|
-
refreshToken: params.account.refreshToken,
|
|
440
|
-
projectId,
|
|
441
|
-
email,
|
|
442
|
-
credentials: params.credentials,
|
|
443
|
-
timeoutMs: params.timeoutMs,
|
|
444
|
-
});
|
|
445
|
-
if ("error" in tokenResult)
|
|
446
|
-
return { success: false, error: tokenResult.error, accountEmail: email };
|
|
447
|
-
let data;
|
|
448
|
-
try {
|
|
449
|
-
data = await fetchGoogleQuota(tokenResult.accessToken, projectId, params.timeoutMs);
|
|
450
|
-
}
|
|
451
|
-
catch (err) {
|
|
452
|
-
// One auth retry: refresh token then retry quota call.
|
|
453
|
-
if (err instanceof Error && err.message.includes("auth error")) {
|
|
454
|
-
const retryToken = await refreshAccessToken({
|
|
455
|
-
refreshToken: params.account.refreshToken,
|
|
456
|
-
clientId: params.credentials.clientId,
|
|
457
|
-
clientSecret: params.credentials.clientSecret,
|
|
458
|
-
timeoutMs: params.timeoutMs,
|
|
459
|
-
});
|
|
460
|
-
if ("error" in retryToken) {
|
|
461
|
-
return { success: false, error: retryToken.error, accountEmail: email };
|
|
462
|
-
}
|
|
463
|
-
await setCachedAccessToken({
|
|
464
|
-
key: makeAccountCacheKey({
|
|
465
|
-
refreshToken: params.account.refreshToken,
|
|
466
|
-
projectId,
|
|
467
|
-
}),
|
|
468
|
-
entry: {
|
|
469
|
-
accessToken: retryToken.accessToken,
|
|
470
|
-
expiresAt: Date.now() + Math.max(1, retryToken.expiresIn) * 1000,
|
|
471
|
-
},
|
|
472
|
-
});
|
|
473
|
-
data = await fetchGoogleQuota(retryToken.accessToken, projectId, params.timeoutMs);
|
|
474
|
-
}
|
|
475
|
-
else {
|
|
476
|
-
throw err;
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
const models = extractModelQuotas(data, params.modelIds, params.account);
|
|
480
|
-
return { success: true, models, accountEmail: email };
|
|
481
|
-
}
|
|
482
|
-
catch (err) {
|
|
483
|
-
if (err instanceof Error && err.message.includes("timeout")) {
|
|
484
|
-
return { success: false, error: "API timeout", accountEmail: email };
|
|
485
|
-
}
|
|
486
|
-
return {
|
|
487
|
-
success: false,
|
|
488
|
-
error: err instanceof Error ? err.message : String(err),
|
|
489
|
-
accountEmail: email,
|
|
490
|
-
};
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
// =============================================================================
|
|
494
|
-
// Export
|
|
495
|
-
// =============================================================================
|
|
496
|
-
/**
|
|
497
|
-
* Query Google Antigravity quota for ALL accounts
|
|
498
|
-
*
|
|
499
|
-
* Reads accounts from ~/.config/opencode/antigravity-accounts.json.
|
|
500
|
-
* Refreshes access tokens and fetches quota for all accounts in parallel.
|
|
501
|
-
*
|
|
502
|
-
* @param modelIds - Model IDs to fetch quota for
|
|
503
|
-
* @returns Quota result with all models and any errors, or null if not configured
|
|
504
|
-
*/
|
|
505
|
-
export async function queryGoogleQuota(modelIds, options = {}) {
|
|
506
|
-
const accounts = await readAntigravityAccounts();
|
|
507
|
-
if (!accounts || accounts.length === 0) {
|
|
508
|
-
return null;
|
|
509
|
-
}
|
|
510
|
-
const credentials = await resolveAntigravityClientCredentials();
|
|
511
|
-
if (credentials.state !== "configured") {
|
|
512
|
-
return {
|
|
513
|
-
success: false,
|
|
514
|
-
error: getCompanionQuotaError(credentials.state),
|
|
515
|
-
};
|
|
516
|
-
}
|
|
517
|
-
// Query accounts with bounded concurrency (reliability > speed).
|
|
518
|
-
const results = await mapWithConcurrency(accounts, GOOGLE_ACCOUNTS_CONCURRENCY, async (account) => fetchAccountQuotaWithAntigravityRefresh({
|
|
519
|
-
account,
|
|
520
|
-
modelIds,
|
|
521
|
-
credentials,
|
|
522
|
-
timeoutMs: options.requestTimeoutMs,
|
|
523
|
-
}));
|
|
524
|
-
// Collect all successful models and errors
|
|
525
|
-
const allModels = [];
|
|
526
|
-
const errors = [];
|
|
527
|
-
for (const result of results) {
|
|
528
|
-
if (result.success && result.models && result.models.length > 0) {
|
|
529
|
-
allModels.push(...result.models);
|
|
530
|
-
}
|
|
531
|
-
else if (!result.success && result.error && result.accountEmail) {
|
|
532
|
-
errors.push({ email: result.accountEmail, error: result.error });
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
// Return combined result
|
|
536
|
-
if (allModels.length === 0 && errors.length === 0) {
|
|
537
|
-
return {
|
|
538
|
-
success: false,
|
|
539
|
-
error: "No quota data available",
|
|
540
|
-
};
|
|
541
|
-
}
|
|
542
|
-
return {
|
|
543
|
-
success: true,
|
|
544
|
-
models: allModels,
|
|
545
|
-
errors: errors.length > 0 ? errors : undefined,
|
|
546
|
-
};
|
|
547
|
-
}
|
|
548
|
-
/**
|
|
549
|
-
* Format Google quota for toast display
|
|
550
|
-
*
|
|
551
|
-
* @param result - Google quota result
|
|
552
|
-
* @returns Formatted string like "G3Pro 100% * G3Flash 100% * Claude 0%" or null
|
|
553
|
-
*/
|
|
554
|
-
export function formatGoogleQuota(result) {
|
|
555
|
-
if (!result) {
|
|
556
|
-
return null;
|
|
557
|
-
}
|
|
558
|
-
if (!result.success) {
|
|
559
|
-
return null;
|
|
560
|
-
}
|
|
561
|
-
if (result.models.length === 0) {
|
|
562
|
-
return null;
|
|
563
|
-
}
|
|
564
|
-
return result.models.map((m) => `${m.displayName} ${m.percentRemaining}%`).join(" \u2022 ");
|
|
565
|
-
}
|
|
566
|
-
//# sourceMappingURL=google.js.map
|
package/dist/lib/google.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/lib/google.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAEL,mCAAmC,EACnC,mCAAmC,GACpC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAE9E,iEAAiE;AACjE,4EAA4E;AAC5E,qEAAqE;AACrE,wEAAwE;AACxE,uEAAuE;AAEvE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAE3B,MAAM,6BAA6B,CAAC;AAWrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,oBAAoB,GAAG,qEAAqE,CAAC;AACnG,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAErD,MAAM,wBAAwB,GAAG,qCAAqC,CAAC;AAEvE,0CAA0C;AAC1C,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC,4DAA4D;AAC5D,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,SAAS,sBAAsB,CAAC,KAA4B;IAC1D,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,kEAAkE;QACpE,CAAC,CAAC,6DAA6D,CAAC;AACpE,CAAC;AA6BD,MAAM,UAAU,oCAAoC;IAClD,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,+BAA+B,EAAE,CAAC;IAEnE,MAAM,UAAU,GAAG;QACjB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAC9D,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;KAC7D,CAAC;IAEF,yBAAyB;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,KAAK,MAAM,CAAC,IAAI,oCAAoC,EAAE,EAAE,CAAC;QACvD,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,4DAA4D;IAC5D,OAAO,oCAAoC,EAAE,CAAC,CAAC,CAAE,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,IAAY;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAE5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,IAAI;gBACJ,KAAK,EAAE,4CAA4C;aACpD,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACxC,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CACrF,CAAC;QAEF,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,IAAI;YACJ,IAAI;YACJ,aAAa;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,IAAI;YACJ,KAAK,EAAE,OAAO;SACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,KAAK,MAAM,IAAI,IAAI,oCAAoC,EAAE,EAAE,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QAED,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC;IACtD,MAAM,cAAc,GAAG,oCAAoC,EAAE,CAAC;IAC9D,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,YAAY;YACZ,cAAc;YACd,YAAY,EAAE,CAAC;YACf,iBAAiB,EAAE,CAAC;SACrB,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,GAA2C,IAAI,CAAC;IAEhE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5D,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QAED,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,MAAM,CAAC,IAAI;YACzB,YAAY;YACZ,cAAc;YACd,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YACzC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM;SAC/C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,YAAY,EAAE,IAAI;QAChC,YAAY;QACZ,cAAc;QACd,YAAY,EAAE,CAAC;QACf,iBAAiB,EAAE,CAAC;QACpB,KAAK,EAAE,YAAY,EAAE,KAAK;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC;IACpD,MAAM,QAAQ,GAAG,MAAM,kCAAkC,EAAE,CAAC;IAC5D,OAAO,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC;IACvD,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1D,kCAAkC,EAAE;QACpC,mCAAmC,EAAE;KACtC,CAAC,CAAC;IAEH,OAAO,CACL,YAAY,CAAC,KAAK,KAAK,SAAS;QAChC,YAAY,CAAC,iBAAiB,GAAG,CAAC;QAClC,iBAAiB,CAAC,KAAK,KAAK,SAAS,CACtC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC;IACxD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChD,uBAAuB,EAAE;QACzB,mCAAmC,EAAE;KACtC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAE1F,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CACzC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACvB,0BAA0B,CAAC;QACzB,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,EAAE,IAAI,EAAE,YAAqB,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,EAAE;QACvE,UAAU,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,oBAAoB,CAAC;KAC5D,CAAC,CACH,CACF,CAAC;IACF,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzE,MAAM,iBAAiB,GAAG,MAAM,0BAA0B,CAAC;QACzD,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,YAAY,EAAE;QAClE,UAAU,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;KACnC,CAAC,CAAC;IACH,IAAI,CAAC,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAEpC,OAAO,6BAA6B,CAAC;QACnC,UAAU,EAAE,oBAAoB;QAChC,UAAU,EAAE,CAAC,GAAI,iBAA4C,EAAE,iBAAiB,CAAC;KAClF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,MAKjC;IACC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;YAC/B,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,UAAU,EAAE,eAAe;SAC5B,CAAC,CAAC;QAEH,OAAO,MAAM,gBAAgB,CAAC,wBAAwB,EAAE;YACtD,OAAO,EAAE;gBACP,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;gBAChE,IAAI;aACL;YACD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,uBAAuB;YACtD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE;gBACzC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,0CAA0C;oBAC1C,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGvC,CAAC;wBACF,IAAI,SAAS,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;4BACxC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;wBACpC,CAAC;wBACD,OAAO;4BACL,KAAK,EAAE,SAAS,CAAC,iBAAiB,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE;yBAChE,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,aAAa,CAAC,OAAO;4BAAE,MAAM,KAAK,CAAC;wBACvC,OAAO,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC9C,CAAC;gBACH,CAAC;gBAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGlC,CAAC;gBAEF,OAAO;oBACL,WAAW,EAAE,IAAI,CAAC,YAAY;oBAC9B,SAAS,EAAE,IAAI,CAAC,UAAU;iBAC3B,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;QAC5C,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,MAQ1C;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC;IAC3C,MAAM,GAAG,GAAG,mBAAmB,CAAC;QAC9B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,IAAI,MAAM;YAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;QACrC,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY;QAC7C,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;IACH,IAAI,OAAO,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,oBAAoB,CAAC;QACzB,GAAG;QACH,KAAK,EAAE;YACL,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI;SAChE;KACF,CAAC,CAAC;IAEH,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CAAC,MAGvD;IAKC,MAAM,QAAQ,GAAG,MAAM,uBAAuB,EAAE,CAAC;IACjD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,WAAW,GAAG,MAAM,mCAAmC,EAAE,CAAC;IAChE,IAAI,WAAW,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxD,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK;aACN,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,2BAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC7F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAE5E,MAAM,KAAK,GAAG,MAAM,2BAA2B,CAAC;YAC9C,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,SAAS;YACT,KAAK;YACL,MAAM,EAAE,MAAM,EAAE,MAAM;YACtB,KAAK,EAAE,MAAM,EAAE,KAAK;YACpB,WAAW;SACZ,CAAC,CAAC;QACH,IAAI,OAAO,IAAI,KAAK;YAAE,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/E,OAAO,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/F,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAExD,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,YAAY;QACZ,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC7B,WAAmB,EACnB,SAAiB,EACjB,SAAS,GAAW,uBAAuB;IAE3C,OAAO,MAAM,gBAAgB,CAAC,oBAAoB,EAAE;QAClD,OAAO,EAAE;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,YAAY,EAAE,UAAU;aACzB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;SAC7C;QACD,SAAS;QACT,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBACvD,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;QACxD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAID,SAAS,kBAAkB,CAAC,WAA8B;IACxD,OAAO;QACL,WAAW,CAAC,GAAG;QACf,GAAG,CAAC,WAAW,CAAC,MAAM;YACpB,EAAE,KAAK,CAAC,GAAG,CAAC;aACX,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;aACxB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,WAA8B;IAC3D,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE1D,wFAAwF;IACxF,OAAO;QACL,QAAQ;QACR,oBAAoB;QACpB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,GAAG,EAAE,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,OAA2B,EAC3B,WAA8B;IAE9B,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,eAAmC,CAAC;IAExC,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,WAAW,CAAC,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG;YAAE,SAAS;QAChE,eAAe;YACb,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAAyB,EACzB,QAAyB,EACzB,OAA2B;IAE3B,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;IAEhD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW;YAAE,SAAS;QAE3B,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAE7C,2DAA2D;QAC3D,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACvC,IAAI,SAAS;oBAAE,MAAM;YACvB,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,2BAA2B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE1E,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,iBAAiB,GAAG,SAAS,CAAC,SAAS,EAAE,iBAAiB,IAAI,CAAC,CAAC;YACpE,IAAI,YAAY,GAAuB,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;YAEtE,IAAI,eAAe,EAAE,CAAC;gBACpB,iBAAiB,GAAG,CAAC,CAAC;gBACtB,YAAY,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;YACzD,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO;gBACP,WAAW,EAAE,WAAW,CAAC,OAAO;gBAChC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,GAAG,CAAC;gBACrD,YAAY;gBACZ,YAAY;aACb,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO;gBACP,WAAW,EAAE,WAAW,CAAC,OAAO;gBAChC,gBAAgB,EAAE,CAAC;gBACnB,YAAY,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE;gBACrD,YAAY;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAA2B;IAC/C,OAAO,CACL,OAAO,CAAC,gBAAgB;QACvB,OAAe,CAAC,cAAc;QAC/B,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,SAAS,CAClB,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,yEAAyE;AAEzE,KAAK,UAAU,uCAAuC,CAAC,MAKtD;IAMC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE/C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,2BAA2B,CAAC;YACpD,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;YACzC,SAAS;YACT,KAAK;YACL,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QAEH,IAAI,OAAO,IAAI,WAAW;YACxB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAE3E,IAAI,IAAyB,CAAC;QAC9B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uDAAuD;YACvD,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC;oBAC1C,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;oBACzC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;oBACrC,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY;oBAC7C,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC,CAAC;gBACH,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;oBAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;gBAC1E,CAAC;gBACD,MAAM,oBAAoB,CAAC;oBACzB,GAAG,EAAE,mBAAmB,CAAC;wBACvB,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;wBACzC,SAAS;qBACV,CAAC;oBACF,KAAK,EAAE;wBACL,WAAW,EAAE,UAAU,CAAC,WAAW;wBACnC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI;qBACjE;iBACF,CAAC,CAAC;gBACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACvD,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAyB,EACzB,OAAO,GAAkC,EAAE;IAE3C,MAAM,QAAQ,GAAG,MAAM,uBAAuB,EAAE,CAAC;IACjD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,mCAAmC,EAAE,CAAC;IAChE,IAAI,WAAW,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC;SACjD,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,2BAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAChG,uCAAuC,CAAC;QACtC,OAAO;QACP,QAAQ;QACR,WAAW;QACX,SAAS,EAAE,OAAO,CAAC,gBAAgB;KACpC,CAAC,CACH,CAAC;IAEF,2CAA2C;IAC3C,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,yBAAyB;SACjC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAC1B,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC9F,CAAC"}
|
package/dist/lib/qwen-auth.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { AuthData } from "./types.js";
|
|
2
|
-
export declare const DEFAULT_QWEN_AUTH_CACHE_MAX_AGE_MS = 5000;
|
|
3
|
-
declare const QWEN_AUTH_KEYS: readonly ["qwen-code", "opencode-qwencode-auth"];
|
|
4
|
-
export type QwenOAuthSourceKey = (typeof QWEN_AUTH_KEYS)[number];
|
|
5
|
-
export type ResolvedQwenLocalPlan = {
|
|
6
|
-
state: "none";
|
|
7
|
-
} | {
|
|
8
|
-
state: "qwen_free";
|
|
9
|
-
accessToken: string;
|
|
10
|
-
sourceKey: QwenOAuthSourceKey;
|
|
11
|
-
};
|
|
12
|
-
export declare function hasQwenOAuthAuth(auth: AuthData | null | undefined): boolean;
|
|
13
|
-
export declare function hasQwenOAuthAuthCached(params?: {
|
|
14
|
-
maxAgeMs?: number;
|
|
15
|
-
}): Promise<boolean>;
|
|
16
|
-
export declare function resolveQwenLocalPlan(auth: AuthData | null | undefined): ResolvedQwenLocalPlan;
|
|
17
|
-
export declare function resolveQwenLocalPlanCached(params?: {
|
|
18
|
-
maxAgeMs?: number;
|
|
19
|
-
}): Promise<ResolvedQwenLocalPlan>;
|
|
20
|
-
export declare function isQwenCodeModelId(model?: string): boolean;
|
|
21
|
-
export {};
|
|
22
|
-
//# sourceMappingURL=qwen-auth.d.ts.map
|