@eddyskywalker/dsh-chatgpt-subscription 0.2.10 → 0.2.11
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/CHANGELOG.md +24 -24
- package/LICENSE +21 -21
- package/README.md +169 -169
- package/bin/antigravity-login.mjs +15 -4
- package/cordis.patch.yml +6 -6
- package/lib/client.js +42 -8
- package/lib/client.js.map +1 -1
- package/lib/index.js +194 -88
- package/lib/types/client/antigravity/AntigravityComposerQuota.d.ts.map +1 -1
- package/lib/types/client/antigravity/AntigravitySection.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +1 -1
- package/lib/types/host/antigravity/client.d.ts +23 -1
- package/lib/types/host/antigravity/client.d.ts.map +1 -1
- package/lib/types/host/antigravity/oauth.d.ts +9 -3
- package/lib/types/host/antigravity/oauth.d.ts.map +1 -1
- package/lib/types/host/antigravity/routes.d.ts.map +1 -1
- package/lib/types/host/antigravity/types.d.ts +6 -0
- package/lib/types/host/antigravity/types.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +134 -134
package/lib/index.js
CHANGED
|
@@ -3568,9 +3568,11 @@ const PROVIDER_ID = "antigravity";
|
|
|
3568
3568
|
const STREAM_IDLE_TIMEOUT_MS = 3e5;
|
|
3569
3569
|
const STREAM_IDLE_TIMEOUT_CODE = "LLM_STREAM_IDLE_TIMEOUT";
|
|
3570
3570
|
const DISCOVERY_TIMEOUT_MS = 8e3;
|
|
3571
|
-
const PROJECT_CACHE_TTL_MS = 1800 * 1e3;
|
|
3572
3571
|
const OAUTH_CALLBACK_TIMEOUT_MS = 300 * 1e3;
|
|
3573
3572
|
const ENDPOINT_FALLBACKS = ["https://daily-cloudcode-pa.googleapis.com", "https://cloudcode-pa.googleapis.com"];
|
|
3573
|
+
const FREE_TIER_ID = "free-tier";
|
|
3574
|
+
const ONBOARD_TIMEOUT_MS = 3e4;
|
|
3575
|
+
const ONBOARD_POLL_INTERVAL_MS = 1e3;
|
|
3574
3576
|
const REDIRECT_PATH = "/oauth-callback";
|
|
3575
3577
|
const AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
3576
3578
|
const TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
@@ -4202,13 +4204,13 @@ var FileModelSettingsStore = class {
|
|
|
4202
4204
|
return next;
|
|
4203
4205
|
}
|
|
4204
4206
|
};
|
|
4205
|
-
//#endregion
|
|
4206
|
-
//#region src/host/antigravity/client.ts
|
|
4207
|
-
const projectCache = /* @__PURE__ */ new Map();
|
|
4208
4207
|
let cachedQuota;
|
|
4208
|
+
let quotaFetchInFlight = null;
|
|
4209
4209
|
const PLATFORM = process.platform === "darwin" ? "MACOS" : process.platform === "win32" ? "WINDOWS" : "LINUX";
|
|
4210
4210
|
function defaultUserAgent() {
|
|
4211
|
-
|
|
4211
|
+
const version = process.env.DSH_ANTIGRAVITY_VERSION || "2.8.0";
|
|
4212
|
+
const cl = process.env.DSH_ANTIGRAVITY_CL || "963137146";
|
|
4213
|
+
return `antigravity/hub/${version} (aidev_client; os_type=${process.env.DSH_ANTIGRAVITY_OS || "darwin"}; arch=${process.env.DSH_ANTIGRAVITY_ARCH || "arm64"}; cl=${cl})`;
|
|
4212
4214
|
}
|
|
4213
4215
|
function antigravityHeaders(token) {
|
|
4214
4216
|
return {
|
|
@@ -4254,50 +4256,97 @@ function extractProjectId(data) {
|
|
|
4254
4256
|
}
|
|
4255
4257
|
}
|
|
4256
4258
|
}
|
|
4257
|
-
async function
|
|
4259
|
+
async function loadCodeAssistDetail(token, fetchFn = fetch, signal) {
|
|
4260
|
+
const metadata = {
|
|
4261
|
+
ideType: "ANTIGRAVITY",
|
|
4262
|
+
platform: "PLATFORM_UNSPECIFIED",
|
|
4263
|
+
pluginType: "GEMINI"
|
|
4264
|
+
};
|
|
4258
4265
|
for (const endpoint of endpointCandidates()) try {
|
|
4259
|
-
const response = await fetchFn(`${endpoint}/v1internal:
|
|
4266
|
+
const response = await fetchFn(`${endpoint}/v1internal:loadCodeAssist`, {
|
|
4260
4267
|
method: "POST",
|
|
4261
|
-
headers:
|
|
4262
|
-
body: JSON.stringify({}),
|
|
4263
|
-
signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)
|
|
4268
|
+
headers: jsonHeaders(token),
|
|
4269
|
+
body: JSON.stringify({ metadata }),
|
|
4270
|
+
signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)]) : AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)
|
|
4264
4271
|
});
|
|
4265
4272
|
if (!response.ok) continue;
|
|
4266
|
-
|
|
4273
|
+
const data = await response.json();
|
|
4274
|
+
const projectId = extractProjectId(data);
|
|
4275
|
+
const allowedTiers = Array.isArray(data.allowedTiers) ? data.allowedTiers : [];
|
|
4276
|
+
const ineligibleTiers = Array.isArray(data.ineligibleTiers) ? data.ineligibleTiers : [];
|
|
4277
|
+
return {
|
|
4278
|
+
currentTier: data.currentTier || null,
|
|
4279
|
+
paidTier: data.paidTier || null,
|
|
4280
|
+
allowedTiers,
|
|
4281
|
+
ineligibleTiers,
|
|
4282
|
+
projectId,
|
|
4283
|
+
raw: data
|
|
4284
|
+
};
|
|
4267
4285
|
} catch {}
|
|
4268
4286
|
}
|
|
4269
|
-
async function
|
|
4270
|
-
const
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
ideType: "ANTIGRAVITY"
|
|
4274
|
-
|
|
4275
|
-
pluginType: "GEMINI"
|
|
4276
|
-
} });
|
|
4287
|
+
async function onboardUser(token, fetchFn = fetch, signal) {
|
|
4288
|
+
const deadline = Date.now() + ONBOARD_TIMEOUT_MS;
|
|
4289
|
+
const body = JSON.stringify({
|
|
4290
|
+
tierId: FREE_TIER_ID,
|
|
4291
|
+
metadata: { ideType: "ANTIGRAVITY" }
|
|
4292
|
+
});
|
|
4277
4293
|
for (const endpoint of endpointCandidates()) try {
|
|
4278
|
-
const
|
|
4294
|
+
const remainingTime = Math.max(1e3, deadline - Date.now());
|
|
4295
|
+
const timeoutSignal = AbortSignal.timeout(remainingTime);
|
|
4296
|
+
const callSignal = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
|
|
4297
|
+
const response = await fetchFn(`${endpoint}/v1internal:onboardUser`, {
|
|
4279
4298
|
method: "POST",
|
|
4280
|
-
headers:
|
|
4299
|
+
headers: jsonHeaders(token),
|
|
4281
4300
|
body,
|
|
4282
|
-
signal:
|
|
4301
|
+
signal: callSignal
|
|
4283
4302
|
});
|
|
4284
|
-
if (!response.ok)
|
|
4285
|
-
|
|
4286
|
-
|
|
4287
|
-
projectCache.set(token, {
|
|
4288
|
-
projectId: project,
|
|
4289
|
-
expiresAt: Date.now() + PROJECT_CACHE_TTL_MS
|
|
4290
|
-
});
|
|
4291
|
-
return project;
|
|
4303
|
+
if (!response.ok) {
|
|
4304
|
+
const errorText = await response.text().catch(() => "");
|
|
4305
|
+
throw new Error(`onboardUser failed: ${response.status} ${response.statusText}: ${errorText}`);
|
|
4292
4306
|
}
|
|
4293
|
-
|
|
4294
|
-
|
|
4295
|
-
|
|
4296
|
-
|
|
4297
|
-
|
|
4307
|
+
let operation = await response.json();
|
|
4308
|
+
while (true) {
|
|
4309
|
+
if (operation.done === true) {
|
|
4310
|
+
if (operation.error) {
|
|
4311
|
+
const msg = operation.error.message || `Error code ${operation.error.code}`;
|
|
4312
|
+
throw new Error(`OnboardUser operation failed: ${msg}`);
|
|
4313
|
+
}
|
|
4314
|
+
return;
|
|
4315
|
+
}
|
|
4316
|
+
const waitMs = Math.min(ONBOARD_POLL_INTERVAL_MS, Math.max(100, deadline - Date.now()));
|
|
4317
|
+
if (Date.now() >= deadline) throw new Error(`onboardUser timed out after ${ONBOARD_TIMEOUT_MS}ms`);
|
|
4318
|
+
await new Promise((r) => setTimeout(r, waitMs));
|
|
4319
|
+
if (signal?.aborted) throw new Error("OAuth login cancelled");
|
|
4320
|
+
const operationName = operation.name || "";
|
|
4321
|
+
if (!operationName) throw new Error("onboardUser returned an operation without a name");
|
|
4322
|
+
const pollTime = Math.max(1e3, deadline - Date.now());
|
|
4323
|
+
const pollTimeoutSignal = AbortSignal.timeout(pollTime);
|
|
4324
|
+
const pollSignal = signal ? AbortSignal.any([signal, pollTimeoutSignal]) : pollTimeoutSignal;
|
|
4325
|
+
const pollResp = await fetchFn(`${endpoint}/v1internal/${operationName}`, {
|
|
4326
|
+
method: "GET",
|
|
4327
|
+
headers: jsonHeaders(token),
|
|
4328
|
+
signal: pollSignal
|
|
4298
4329
|
});
|
|
4299
|
-
|
|
4330
|
+
if (!pollResp.ok) {
|
|
4331
|
+
const pollErr = await pollResp.text().catch(() => "");
|
|
4332
|
+
throw new Error(`onboardUser operation poll failed: ${pollResp.status}: ${pollErr}`);
|
|
4333
|
+
}
|
|
4334
|
+
operation = await pollResp.json();
|
|
4300
4335
|
}
|
|
4336
|
+
} catch (err) {
|
|
4337
|
+
if (Date.now() >= deadline || signal?.aborted) throw err;
|
|
4338
|
+
}
|
|
4339
|
+
}
|
|
4340
|
+
async function listCloudAICompanionProjects(token, fetchFn = fetch) {
|
|
4341
|
+
for (const endpoint of endpointCandidates()) try {
|
|
4342
|
+
const response = await fetchFn(`${endpoint}/v1internal:listCloudAICompanionProjects`, {
|
|
4343
|
+
method: "POST",
|
|
4344
|
+
headers: antigravityHeaders(token),
|
|
4345
|
+
body: JSON.stringify({}),
|
|
4346
|
+
signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)
|
|
4347
|
+
});
|
|
4348
|
+
if (!response.ok) continue;
|
|
4349
|
+
return extractProjectId(await response.json());
|
|
4301
4350
|
} catch {}
|
|
4302
4351
|
}
|
|
4303
4352
|
async function postJson(path, token, body, fetchFn = fetch) {
|
|
@@ -4365,50 +4414,63 @@ function parseCatalogModels(data) {
|
|
|
4365
4414
|
}
|
|
4366
4415
|
return list;
|
|
4367
4416
|
}
|
|
4368
|
-
async function fetchAccountQuota(store = new FileCredentialStore(), modelSettings, fetchFn = fetch) {
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4417
|
+
async function fetchAccountQuota(store = new FileCredentialStore(), modelSettings, fetchFn = fetch, force = false) {
|
|
4418
|
+
if (!force && cachedQuota && Date.now() - (cachedQuota.fetchedAt || 0) < 12e4) return cachedQuota;
|
|
4419
|
+
if (quotaFetchInFlight) return quotaFetchInFlight;
|
|
4420
|
+
quotaFetchInFlight = (async () => {
|
|
4421
|
+
try {
|
|
4422
|
+
const { token, projectId: credentialProjectId } = await ensureApiKey(store, fetchFn);
|
|
4423
|
+
const [assistResult, summaryResult] = await Promise.all([postJson("/v1internal:loadCodeAssist", token, { metadata: {
|
|
4424
|
+
ideType: "ANTIGRAVITY",
|
|
4425
|
+
platform: "PLATFORM_UNSPECIFIED",
|
|
4426
|
+
pluginType: "GEMINI"
|
|
4427
|
+
} }, fetchFn).catch(() => null), postJson("/v1internal:retrieveUserQuotaSummary", token, {}, fetchFn).catch(() => null)]);
|
|
4428
|
+
const discoveredProject = assistResult ? extractProjectId(assistResult.data) : void 0;
|
|
4429
|
+
const projectId = credentialProjectId || discoveredProject || "antigravity-default";
|
|
4430
|
+
const modelsData = (await postJson("/v1internal:fetchAvailableModels", token, { project: projectId }, fetchFn).catch(() => null))?.data;
|
|
4431
|
+
const { groups, description } = summaryResult ? parseQuotaSummary(summaryResult.data) : { groups: [] };
|
|
4432
|
+
const catalogModels = modelsData ? parseCatalogModels(modelsData) : [];
|
|
4433
|
+
const assistData = assistResult?.data || {};
|
|
4434
|
+
const currentTier = assistData.currentTier;
|
|
4435
|
+
const paidTier = assistData.paidTier;
|
|
4436
|
+
const planLabel = paidTier?.name || currentTier?.name || void 0;
|
|
4437
|
+
cachedQuota = {
|
|
4438
|
+
projectId,
|
|
4439
|
+
endpoint: summaryResult?.endpoint || ENDPOINT_FALLBACKS[0],
|
|
4440
|
+
planLabel,
|
|
4441
|
+
productTier: currentTier,
|
|
4442
|
+
paidTier,
|
|
4443
|
+
groups,
|
|
4444
|
+
groupDescription: description,
|
|
4445
|
+
models: catalogModels.map((m) => ({
|
|
4446
|
+
modelId: m.id,
|
|
4447
|
+
displayName: m.name,
|
|
4448
|
+
description: m.description
|
|
4449
|
+
})),
|
|
4450
|
+
catalogModels,
|
|
4451
|
+
fetchedAt: Date.now()
|
|
4452
|
+
};
|
|
4453
|
+
if (modelSettings && catalogModels.length > 0) {
|
|
4454
|
+
const current = await modelSettings.read();
|
|
4455
|
+
const isFirstTime = current.catalogModels.length === 0 && current.enabledModelIds.length === 0;
|
|
4456
|
+
const catalogIds = new Set(catalogModels.map((m) => m.id));
|
|
4457
|
+
const mergedEnabled = isFirstTime ? catalogModels.map((m) => m.id) : current.enabledModelIds.filter((id) => catalogIds.has(id));
|
|
4458
|
+
await modelSettings.setCatalogModels(catalogModels, { enabledModelIds: mergedEnabled });
|
|
4459
|
+
}
|
|
4460
|
+
return cachedQuota;
|
|
4461
|
+
} finally {
|
|
4462
|
+
quotaFetchInFlight = null;
|
|
4463
|
+
}
|
|
4464
|
+
})();
|
|
4465
|
+
return quotaFetchInFlight;
|
|
4408
4466
|
}
|
|
4409
4467
|
function getCachedQuota() {
|
|
4410
4468
|
return cachedQuota;
|
|
4411
4469
|
}
|
|
4470
|
+
function clearCachedQuota() {
|
|
4471
|
+
cachedQuota = void 0;
|
|
4472
|
+
quotaFetchInFlight = null;
|
|
4473
|
+
}
|
|
4412
4474
|
//#endregion
|
|
4413
4475
|
//#region src/host/antigravity/oauth.ts
|
|
4414
4476
|
let webLoginFlow = { status: "idle" };
|
|
@@ -4553,7 +4615,36 @@ function startCallbackServer(expectedState) {
|
|
|
4553
4615
|
});
|
|
4554
4616
|
});
|
|
4555
4617
|
}
|
|
4556
|
-
|
|
4618
|
+
function extractGoogleValidationUrl(text) {
|
|
4619
|
+
const match = /https:\/\/[^\s"'><]+/i.exec(text);
|
|
4620
|
+
return match ? match[0] : void 0;
|
|
4621
|
+
}
|
|
4622
|
+
function assertFreeTierEligible(payload) {
|
|
4623
|
+
if (payload.allowedTiers?.some((tier) => tier.id === "free-tier") === true) return;
|
|
4624
|
+
const ineligibility = payload.ineligibleTiers?.find((c) => c.tierId === FREE_TIER_ID);
|
|
4625
|
+
if (!ineligibility?.reasonMessage) return;
|
|
4626
|
+
const validation = ineligibility.validationUrl ? `\nValidation URL: ${ineligibility.validationUrl}` : "";
|
|
4627
|
+
const err = /* @__PURE__ */ new Error(`${ineligibility.reasonMessage}${validation}`);
|
|
4628
|
+
if (ineligibility.validationUrl) err.validationUrl = ineligibility.validationUrl;
|
|
4629
|
+
throw err;
|
|
4630
|
+
}
|
|
4631
|
+
async function discoverAntigravityProject(token, fetchFn = fetch, signal, onProgress) {
|
|
4632
|
+
onProgress?.("正在检查 Cloud Code Assist 账号状态...");
|
|
4633
|
+
const initial = await loadCodeAssistDetail(token, fetchFn, signal);
|
|
4634
|
+
if (!initial) throw new Error("无法连接到 Cloud Code Assist 服务,请检查网络连接");
|
|
4635
|
+
assertFreeTierEligible(initial);
|
|
4636
|
+
if (initial.allowedTiers?.some((tier) => tier.id === "free-tier") === true && !initial.currentTier) {
|
|
4637
|
+
onProgress?.("正在为新账号开通 Antigravity 免费额度...");
|
|
4638
|
+
await onboardUser(token, fetchFn, signal);
|
|
4639
|
+
onProgress?.("正在获取专属项目 (Project ID)...");
|
|
4640
|
+
const refreshed = await loadCodeAssistDetail(token, fetchFn, signal);
|
|
4641
|
+
if (refreshed?.projectId) return refreshed.projectId;
|
|
4642
|
+
} else if (initial.projectId) return initial.projectId;
|
|
4643
|
+
const fallback = await listCloudAICompanionProjects(token, fetchFn);
|
|
4644
|
+
if (fallback) return fallback;
|
|
4645
|
+
return initial.projectId;
|
|
4646
|
+
}
|
|
4647
|
+
async function exchangeOAuthCode(code, verifier, callbackUrl, fetchFn = fetch, signal, onProgress) {
|
|
4557
4648
|
const tokenResponse = await fetchFn(TOKEN_URL, {
|
|
4558
4649
|
method: "POST",
|
|
4559
4650
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
@@ -4564,7 +4655,8 @@ async function exchangeOAuthCode(code, verifier, callbackUrl, fetchFn = fetch) {
|
|
|
4564
4655
|
grant_type: "authorization_code",
|
|
4565
4656
|
redirect_uri: callbackUrl,
|
|
4566
4657
|
code_verifier: verifier
|
|
4567
|
-
}).toString()
|
|
4658
|
+
}).toString(),
|
|
4659
|
+
signal
|
|
4568
4660
|
});
|
|
4569
4661
|
if (!tokenResponse.ok) throw new Error(`Token exchange failed: ${sanitizeOAuthProviderError(await tokenResponse.text())}`);
|
|
4570
4662
|
const tokenData = await tokenResponse.json();
|
|
@@ -4572,7 +4664,7 @@ async function exchangeOAuthCode(code, verifier, callbackUrl, fetchFn = fetch) {
|
|
|
4572
4664
|
const accessToken = typeof tokenData.access_token === "string" ? tokenData.access_token : "";
|
|
4573
4665
|
const expiresIn = typeof tokenData.expires_in === "number" ? tokenData.expires_in : 3600;
|
|
4574
4666
|
if (!refreshToken) throw new Error("No refresh token received. Re-run login and allow offline access.");
|
|
4575
|
-
const [email, discoveredProject] = await Promise.all([getUserEmail(accessToken, fetchFn),
|
|
4667
|
+
const [email, discoveredProject] = await Promise.all([getUserEmail(accessToken, fetchFn), discoverAntigravityProject(accessToken, fetchFn, signal, onProgress)]);
|
|
4576
4668
|
return {
|
|
4577
4669
|
refresh: refreshToken,
|
|
4578
4670
|
refresh_token: refreshToken,
|
|
@@ -4584,7 +4676,7 @@ async function exchangeOAuthCode(code, verifier, callbackUrl, fetchFn = fetch) {
|
|
|
4584
4676
|
email
|
|
4585
4677
|
};
|
|
4586
4678
|
}
|
|
4587
|
-
async function beginWebLogin(store, fetchFn = fetch) {
|
|
4679
|
+
async function beginWebLogin(store, fetchFn = fetch, signal) {
|
|
4588
4680
|
if (webLoginFlow.status === "pending") return { ...webLoginFlow };
|
|
4589
4681
|
const { verifier, challenge } = generatePKCE();
|
|
4590
4682
|
const state = base64Url(randomBytes(32));
|
|
@@ -4604,20 +4696,28 @@ async function beginWebLogin(store, fetchFn = fetch) {
|
|
|
4604
4696
|
prompt: "consent"
|
|
4605
4697
|
}).toString()}`,
|
|
4606
4698
|
startedAt: Date.now(),
|
|
4607
|
-
|
|
4699
|
+
progress: "等待浏览器授权...",
|
|
4700
|
+
error: void 0,
|
|
4701
|
+
validationUrl: void 0
|
|
4608
4702
|
};
|
|
4609
4703
|
(async () => {
|
|
4610
4704
|
try {
|
|
4611
4705
|
const { code, state: returnedState } = await waitForCode();
|
|
4612
4706
|
if (returnedState !== state) throw new Error("OAuth state mismatch");
|
|
4613
|
-
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn)
|
|
4707
|
+
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn, signal, (stage) => {
|
|
4708
|
+
webLoginFlow.progress = stage;
|
|
4709
|
+
});
|
|
4614
4710
|
await store.write(credentials);
|
|
4615
4711
|
webLoginFlow.status = "complete";
|
|
4616
4712
|
webLoginFlow.email = credentials.email;
|
|
4617
4713
|
webLoginFlow.completedAt = Date.now();
|
|
4714
|
+
webLoginFlow.progress = "授权成功";
|
|
4618
4715
|
} catch (error) {
|
|
4619
4716
|
webLoginFlow.status = "error";
|
|
4620
|
-
|
|
4717
|
+
const errText = error instanceof Error ? error.message : String(error);
|
|
4718
|
+
webLoginFlow.error = errText;
|
|
4719
|
+
const validationUrl = error?.validationUrl || extractGoogleValidationUrl(errText);
|
|
4720
|
+
if (validationUrl) webLoginFlow.validationUrl = validationUrl;
|
|
4621
4721
|
webLoginFlow.completedAt = Date.now();
|
|
4622
4722
|
} finally {
|
|
4623
4723
|
server.close();
|
|
@@ -4653,7 +4753,8 @@ async function refreshAntigravityToken(credentials, fetchFn = fetch) {
|
|
|
4653
4753
|
access: accessToken,
|
|
4654
4754
|
access_token: accessToken,
|
|
4655
4755
|
expires: Date.now() + expiresIn * 1e3 - 300 * 1e3,
|
|
4656
|
-
expires_at: Date.now() + expiresIn * 1e3 - 300 * 1e3
|
|
4756
|
+
expires_at: Date.now() + expiresIn * 1e3 - 300 * 1e3,
|
|
4757
|
+
projectId: credentials.projectId
|
|
4657
4758
|
};
|
|
4658
4759
|
}
|
|
4659
4760
|
async function ensureApiKey(store, fetchFn = fetch) {
|
|
@@ -4669,7 +4770,7 @@ async function ensureApiKey(store, fetchFn = fetch) {
|
|
|
4669
4770
|
projectId: credentials.projectId
|
|
4670
4771
|
};
|
|
4671
4772
|
}
|
|
4672
|
-
async function loginAndSave(store, signal, onUrl, fetchFn = fetch) {
|
|
4773
|
+
async function loginAndSave(store, signal, onUrl, fetchFn = fetch, onProgress) {
|
|
4673
4774
|
const { verifier, challenge } = generatePKCE();
|
|
4674
4775
|
const state = base64Url(randomBytes(32));
|
|
4675
4776
|
const { server, waitForCode } = await startCallbackServer(state);
|
|
@@ -4691,7 +4792,7 @@ async function loginAndSave(store, signal, onUrl, fetchFn = fetch) {
|
|
|
4691
4792
|
if (signal?.aborted) throw new Error("OAuth login aborted");
|
|
4692
4793
|
const { code, state: returnedState } = await waitForCode();
|
|
4693
4794
|
if (returnedState !== state) throw new Error("OAuth state mismatch");
|
|
4694
|
-
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn);
|
|
4795
|
+
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn, signal, onProgress);
|
|
4695
4796
|
await store.write(credentials);
|
|
4696
4797
|
return credentials;
|
|
4697
4798
|
} finally {
|
|
@@ -5482,6 +5583,10 @@ function registerAntigravityRoutes(ctx, store, modelSettings, preferences, fetch
|
|
|
5482
5583
|
try {
|
|
5483
5584
|
if (path === "status" || path === "") {
|
|
5484
5585
|
if (request.method !== "GET") return sendMethodNotAllowed(response);
|
|
5586
|
+
const credentials = await store.read();
|
|
5587
|
+
const authenticated = !!(credentials?.access || credentials?.access_token);
|
|
5588
|
+
const cached = getCachedQuota();
|
|
5589
|
+
if (authenticated && (!cached || Date.now() - (cached.fetchedAt || 0) > 12e4)) await fetchAccountQuota(store, modelSettings, fetchFn).catch(() => void 0);
|
|
5485
5590
|
return sendJson(response, 200, {
|
|
5486
5591
|
ok: true,
|
|
5487
5592
|
value: await getAntigravityWebStatus(store, modelSettings, preferences)
|
|
@@ -5503,7 +5608,7 @@ function registerAntigravityRoutes(ctx, store, modelSettings, preferences, fetch
|
|
|
5503
5608
|
}
|
|
5504
5609
|
if (path === "quota") {
|
|
5505
5610
|
if (request.method !== "GET" && request.method !== "POST") return sendMethodNotAllowed(response);
|
|
5506
|
-
const quota = await fetchAccountQuota(store, modelSettings, fetchFn);
|
|
5611
|
+
const quota = await fetchAccountQuota(store, modelSettings, fetchFn, true);
|
|
5507
5612
|
return sendJson(response, 200, {
|
|
5508
5613
|
ok: true,
|
|
5509
5614
|
value: {
|
|
@@ -5541,6 +5646,7 @@ function registerAntigravityRoutes(ctx, store, modelSettings, preferences, fetch
|
|
|
5541
5646
|
if (path === "logout") {
|
|
5542
5647
|
if (request.method !== "POST") return sendMethodNotAllowed(response);
|
|
5543
5648
|
await store.delete();
|
|
5649
|
+
clearCachedQuota();
|
|
5544
5650
|
return sendJson(response, 200, {
|
|
5545
5651
|
ok: true,
|
|
5546
5652
|
value: await getAntigravityWebStatus(store, modelSettings)
|
|
@@ -5628,4 +5734,4 @@ function localWebServerBaseUrl(host, port) {
|
|
|
5628
5734
|
return `http://${host === "0.0.0.0" ? "127.0.0.1" : host}:${port}`;
|
|
5629
5735
|
}
|
|
5630
5736
|
//#endregion
|
|
5631
|
-
export { AntigravityAdapter, CodexChatGptAdapter, FileCredentialStore, FileModelSettingsStore, LinuxFileTokenStore, MacKeychainTokenStore, OAuthService, ProxyManager, ResponsesClient, UsageService, WindowsDpapiTokenStore, apply, beginWebLogin, createCodexFetchProvider, createCodexImageTool, createCodexSearchProvider, createPlatformTokenStore, credentialPath, detectSystemProxy, fetchAccountQuota, getCachedQuota, inject, loginAndSave, mapCodexUsage, modelSettingsPath, parseCodexUsage, parseResponsesStream, refreshAntigravityToken };
|
|
5737
|
+
export { AntigravityAdapter, CodexChatGptAdapter, FileCredentialStore, FileModelSettingsStore, LinuxFileTokenStore, MacKeychainTokenStore, OAuthService, ProxyManager, ResponsesClient, UsageService, WindowsDpapiTokenStore, apply, beginWebLogin, clearCachedQuota, createCodexFetchProvider, createCodexImageTool, createCodexSearchProvider, createPlatformTokenStore, credentialPath, detectSystemProxy, fetchAccountQuota, getCachedQuota, inject, loginAndSave, mapCodexUsage, modelSettingsPath, parseCodexUsage, parseResponsesStream, refreshAntigravityToken };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AntigravityComposerQuota.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/AntigravityComposerQuota.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAA;AAC5F,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAmB7C,KAAK,KAAK,GAAG,YAAY,CAAC,0BAA0B,CAAC,GACnD,WAAW,CAAC,OAAO,cAAc,CAAC,GAAG;IACnC,SAAS,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,IAAI,CAAA;CAC/B,CAAA;AAqCH,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"AntigravityComposerQuota.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/AntigravityComposerQuota.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAA;AAC5F,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAmB7C,KAAK,KAAK,GAAG,YAAY,CAAC,0BAA0B,CAAC,GACnD,WAAW,CAAC,OAAO,cAAc,CAAC,GAAG;IACnC,SAAS,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,IAAI,CAAA;CAC/B,CAAA;AAqCH,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAyF3G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AntigravitySection.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/AntigravitySection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAM/D,UAAU,KAAK;IACb,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;CAChC;AAiBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAuBD,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"AntigravitySection.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/AntigravitySection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAM/D,UAAU,KAAK;IACb,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;CAChC;AAiBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAuBD,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,CAmdnG"}
|
|
@@ -264,6 +264,6 @@ export declare const dictionaries: {
|
|
|
264
264
|
readonly retry: "重试";
|
|
265
265
|
readonly unknown: "未知";
|
|
266
266
|
};
|
|
267
|
-
en: Record<"
|
|
267
|
+
en: Record<"quota" | "account" | "storage" | "stale" | "pending" | "tokens" | "title" | "intro" | "signedOut" | "signedIn" | "plan" | "accountId" | "expires" | "storageWindows" | "storageMacKeychain" | "storageLinuxFile" | "storageMemory" | "storageUnavailable" | "securityWindows" | "securityMacKeychain" | "securityLinuxFile" | "securityMemory" | "securityUnavailable" | "signIn" | "signInAgain" | "cancel" | "signOut" | "refreshToken" | "popupBlocked" | "continueLogin" | "loading" | "connection" | "provider" | "connectionState" | "connected" | "untested" | "testConnection" | "testing" | "latency" | "models" | "modelsHint" | "proxySettings" | "proxyMode" | "proxyModeHint" | "proxyModeAuto" | "proxyModeCustom" | "proxyModeDirect" | "customProxyUrl" | "customProxyUrlHint" | "customProxyUrlPlaceholder" | "saveProxyUrl" | "proxyDetected" | "proxyDetectedEffective" | "proxyNoneDetected" | "proxyDirectHint" | "enhancements" | "fastMode" | "fastModeHint" | "outputVerbosity" | "outputVerbosityHint" | "verbosityLow" | "verbosityMedium" | "verbosityHigh" | "reasoningSummary" | "reasoningSummaryHint" | "summaryAuto" | "summaryConcise" | "summaryDetailed" | "summaryNone" | "searchProvider" | "searchProviderHint" | "searchProviderDsh" | "searchProviderCodex" | "providerDefault" | "subagentEnhancements" | "subagentContextWindow" | "subagentContextWindowHint" | "subagentMaxDepth" | "subagentMaxDepthHint" | "subagentDisabled" | "levels" | "contextWindows" | "contextWindowsHint" | "contextWindow" | "contextWindowInvalid" | "saveContextWindow" | "save" | "quickQuota" | "quickQuotaHint" | "quotaIntro" | "refreshQuota" | "refreshing" | "noQuota" | "quotaSignedOut" | "updated" | "primary" | "secondary" | "limitWindow" | "used" | "remaining" | "available" | "unavailable" | "unlimited" | "credits" | "monthlySpend" | "resetCredits" | "resetCreditExpires" | "useResetCredit" | "usingResetCredit" | "useResetCreditConfirm" | "resetCreditUsed" | "spendControlReached" | "limit" | "exhausted" | "resets" | "quickQuotaLabel" | "quickQuotaLoading" | "imageToolRunning" | "imageToolDone" | "imageToolFailed" | "image" | "openImage" | "openNamedImage" | "imageLoading" | "imageLoadFailed" | "imagePreviewClose" | "imagePreviewOpenOriginal" | "retry" | "unknown", string>;
|
|
268
268
|
};
|
|
269
269
|
//# sourceMappingURL=locales.d.ts.map
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
import { FileCredentialStore, FileModelSettingsStore, type AntigravityCatalogModel } from './token-store.ts';
|
|
2
2
|
import type { AntigravityAccountQuota, AntigravityQuotaGroup } from '../../shared/antigravity-contracts.ts';
|
|
3
|
+
export declare const ANTIGRAVITY_QUOTA_CACHE_TTL_MS: number;
|
|
3
4
|
export declare function defaultUserAgent(): string;
|
|
4
5
|
export declare function antigravityHeaders(token: string): Record<string, string>;
|
|
5
6
|
export declare function jsonHeaders(token: string): Record<string, string>;
|
|
6
7
|
export declare function endpointCandidates(): string[];
|
|
8
|
+
export interface AntigravityTierInfo {
|
|
9
|
+
id?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AntigravityIneligibleTier {
|
|
14
|
+
tierId?: string;
|
|
15
|
+
reasonMessage?: string;
|
|
16
|
+
validationUrl?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface LoadCodeAssistDetailResult {
|
|
19
|
+
currentTier?: AntigravityTierInfo | null;
|
|
20
|
+
paidTier?: AntigravityTierInfo | null;
|
|
21
|
+
allowedTiers?: AntigravityTierInfo[];
|
|
22
|
+
ineligibleTiers?: AntigravityIneligibleTier[];
|
|
23
|
+
projectId?: string;
|
|
24
|
+
raw?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export declare function loadCodeAssistDetail(token: string, fetchFn?: typeof fetch, signal?: AbortSignal): Promise<LoadCodeAssistDetailResult | undefined>;
|
|
27
|
+
export declare function onboardUser(token: string, fetchFn?: typeof fetch, signal?: AbortSignal): Promise<void>;
|
|
7
28
|
export declare function listCloudAICompanionProjects(token: string, fetchFn?: typeof fetch): Promise<string | undefined>;
|
|
8
29
|
export declare function loadCodeAssist(token: string, fetchFn?: typeof fetch): Promise<string | undefined>;
|
|
9
30
|
export declare function postJson(path: string, token: string, body: Record<string, unknown>, fetchFn?: typeof fetch): Promise<{
|
|
@@ -16,6 +37,7 @@ export declare function parseQuotaSummary(data: unknown): {
|
|
|
16
37
|
description?: string;
|
|
17
38
|
};
|
|
18
39
|
export declare function parseCatalogModels(data: unknown): AntigravityCatalogModel[];
|
|
19
|
-
export declare function fetchAccountQuota(store?: FileCredentialStore, modelSettings?: FileModelSettingsStore, fetchFn?: typeof fetch): Promise<AntigravityAccountQuota>;
|
|
40
|
+
export declare function fetchAccountQuota(store?: FileCredentialStore, modelSettings?: FileModelSettingsStore, fetchFn?: typeof fetch, force?: boolean): Promise<AntigravityAccountQuota>;
|
|
20
41
|
export declare function getCachedQuota(): AntigravityAccountQuota | undefined;
|
|
42
|
+
export declare function clearCachedQuota(): void;
|
|
21
43
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Server } from 'node:http';
|
|
2
2
|
import { FileCredentialStore, type AntigravityCredentials } from './token-store.ts';
|
|
3
|
+
import { type LoadCodeAssistDetailResult } from './client.ts';
|
|
3
4
|
export interface WebLoginFlowState {
|
|
4
5
|
status: 'idle' | 'pending' | 'complete' | 'error';
|
|
5
6
|
authUrl?: string;
|
|
@@ -7,6 +8,8 @@ export interface WebLoginFlowState {
|
|
|
7
8
|
completedAt?: number;
|
|
8
9
|
email?: string;
|
|
9
10
|
error?: string;
|
|
11
|
+
validationUrl?: string;
|
|
12
|
+
progress?: string;
|
|
10
13
|
}
|
|
11
14
|
export declare function callbackPort(): number;
|
|
12
15
|
export declare function resolveCallbackHost(raw?: string | undefined): string;
|
|
@@ -26,13 +29,16 @@ export declare function startCallbackServer(expectedState: string): Promise<{
|
|
|
26
29
|
state: string;
|
|
27
30
|
}>;
|
|
28
31
|
}>;
|
|
29
|
-
export declare function
|
|
30
|
-
export declare function
|
|
32
|
+
export declare function extractGoogleValidationUrl(text: string): string | undefined;
|
|
33
|
+
export declare function assertFreeTierEligible(payload: LoadCodeAssistDetailResult): void;
|
|
34
|
+
export declare function discoverAntigravityProject(token: string, fetchFn?: typeof fetch, signal?: AbortSignal, onProgress?: (stage: string) => void): Promise<string | undefined>;
|
|
35
|
+
export declare function exchangeOAuthCode(code: string, verifier: string, callbackUrl: string, fetchFn?: typeof fetch, signal?: AbortSignal, onProgress?: (stage: string) => void): Promise<AntigravityCredentials>;
|
|
36
|
+
export declare function beginWebLogin(store: FileCredentialStore, fetchFn?: typeof fetch, signal?: AbortSignal): Promise<WebLoginFlowState>;
|
|
31
37
|
export declare function getWebLoginStatus(): WebLoginFlowState;
|
|
32
38
|
export declare function refreshAntigravityToken(credentials: AntigravityCredentials, fetchFn?: typeof fetch): Promise<AntigravityCredentials>;
|
|
33
39
|
export declare function ensureApiKey(store: FileCredentialStore, fetchFn?: typeof fetch): Promise<{
|
|
34
40
|
token: string;
|
|
35
41
|
projectId?: string;
|
|
36
42
|
}>;
|
|
37
|
-
export declare function loginAndSave(store: FileCredentialStore, signal?: AbortSignal, onUrl?: (url: string) => void, fetchFn?: typeof fetch): Promise<AntigravityCredentials>;
|
|
43
|
+
export declare function loginAndSave(store: FileCredentialStore, signal?: AbortSignal, onUrl?: (url: string) => void, fetchFn?: typeof fetch, onProgress?: (stage: string) => void): Promise<AntigravityCredentials>;
|
|
38
44
|
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAI/G,OAAO,KAAK,EAA0B,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AA+BzG,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,0BAA0B,EACxC,OAAO,GAAE,OAAO,KAAa,GAC5B,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAI/G,OAAO,KAAK,EAA0B,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AA+BzG,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,0BAA0B,EACxC,OAAO,GAAE,OAAO,KAAa,GAC5B,MAAM,IAAI,CAuFZ"}
|
|
@@ -8,7 +8,13 @@ export declare const MODEL_CACHE_TTL_MS: number;
|
|
|
8
8
|
export declare const OAUTH_CALLBACK_TIMEOUT_MS: number;
|
|
9
9
|
export declare const DEFAULT_ENDPOINT = "https://cloudcode-pa.googleapis.com";
|
|
10
10
|
export declare const DAILY_ENDPOINT = "https://daily-cloudcode-pa.googleapis.com";
|
|
11
|
+
export declare const SANDBOX_ENDPOINT = "https://daily-cloudcode-pa.sandbox.googleapis.com";
|
|
11
12
|
export declare const ENDPOINT_FALLBACKS: string[];
|
|
13
|
+
export declare const FREE_TIER_ID = "free-tier";
|
|
14
|
+
export declare const ONBOARD_TIMEOUT_MS = 30000;
|
|
15
|
+
export declare const ONBOARD_POLL_INTERVAL_MS = 1000;
|
|
16
|
+
export declare const DEFAULT_ANTIGRAVITY_VERSION = "2.8.0";
|
|
17
|
+
export declare const DEFAULT_ANTIGRAVITY_CL = "963137146";
|
|
12
18
|
export declare const REDIRECT_PATH = "/oauth-callback";
|
|
13
19
|
export declare const AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
14
20
|
export declare const TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,gBAAgB,CAAA;AAC1C,eAAO,MAAM,WAAW,gBAAgB,CAAA;AAExC,eAAO,MAAM,sBAAsB,SAAU,CAAA;AAC7C,eAAO,MAAM,wBAAwB,4BAA4B,CAAA;AACjE,eAAO,MAAM,oBAAoB,OAAQ,CAAA;AACzC,eAAO,MAAM,oBAAoB,QAAiB,CAAA;AAClD,eAAO,MAAM,kBAAkB,QAAiB,CAAA;AAChD,eAAO,MAAM,yBAAyB,QAAgB,CAAA;AAEtD,eAAO,MAAM,gBAAgB,wCAAwC,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,gBAAgB,CAAA;AAC1C,eAAO,MAAM,WAAW,gBAAgB,CAAA;AAExC,eAAO,MAAM,sBAAsB,SAAU,CAAA;AAC7C,eAAO,MAAM,wBAAwB,4BAA4B,CAAA;AACjE,eAAO,MAAM,oBAAoB,OAAQ,CAAA;AACzC,eAAO,MAAM,oBAAoB,QAAiB,CAAA;AAClD,eAAO,MAAM,kBAAkB,QAAiB,CAAA;AAChD,eAAO,MAAM,yBAAyB,QAAgB,CAAA;AAEtD,eAAO,MAAM,gBAAgB,wCAAwC,CAAA;AAErE,eAAO,MAAM,cAAc,8CAA8C,CAAA;AACzE,eAAO,MAAM,gBAAgB,sDAAsD,CAAA;AACnF,eAAO,MAAM,kBAAkB,UAG9B,CAAA;AAED,eAAO,MAAM,YAAY,cAAc,CAAA;AACvC,eAAO,MAAM,kBAAkB,QAAS,CAAA;AACxC,eAAO,MAAM,wBAAwB,OAAQ,CAAA;AAE7C,eAAO,MAAM,2BAA2B,UAAU,CAAA;AAClD,eAAO,MAAM,sBAAsB,cAAc,CAAA;AAGjD,eAAO,MAAM,aAAa,oBAAoB,CAAA;AAC9C,eAAO,MAAM,QAAQ,iDAAiD,CAAA;AACtE,eAAO,MAAM,SAAS,wCAAwC,CAAA;AAC9D,eAAO,MAAM,MAAM,UAOlB,CAAA;AAED,eAAO,MAAM,iBAAiB,QAIZ,CAAA;AAElB,eAAO,MAAM,qBAAqB,QAGhB,CAAA;AAElB,eAAO,MAAM,8BAA8B,QAE2D,CAAA;AAEtG,eAAO,MAAM,mCAAmC,+KAC8H,CAAA;AAE9K,eAAO,MAAM,WAAW;;;CAGd,CAAA;AAEV,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAA;AAEV,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC9B;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAwI3D,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyB5D,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAA;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,eAAO,MAAM,MAAM,EAAE,mBAAmB,EA6FvC,CAAA"}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -17,5 +17,5 @@ export type { TokenStore, StoredOAuthCredentials } from './host/token-store.ts';
|
|
|
17
17
|
export { AntigravityAdapter } from './host/antigravity/adapter.ts';
|
|
18
18
|
export { FileCredentialStore, FileModelSettingsStore, credentialPath, modelSettingsPath, } from './host/antigravity/token-store.ts';
|
|
19
19
|
export { loginAndSave, beginWebLogin, refreshAntigravityToken } from './host/antigravity/oauth.ts';
|
|
20
|
-
export { fetchAccountQuota, getCachedQuota } from './host/antigravity/client.ts';
|
|
20
|
+
export { clearCachedQuota, fetchAccountQuota, getCachedQuota } from './host/antigravity/client.ts';
|
|
21
21
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AA+BlD,eAAO,MAAM,MAAM,UAAqE,CAAA;AAExF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAuExC;AAED,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAClF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,GAClB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAClG,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AA+BlD,eAAO,MAAM,MAAM,UAAqE,CAAA;AAExF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAuExC;AAED,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAClF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,GAClB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA"}
|