84 lines
2.7 KiB
TypeScript
84 lines
2.7 KiB
TypeScript
/**
|
|
* Code Assist (loadCodeAssist) subscription tier extraction.
|
|
* Mirrors Antigravity-Manager src-tauri/src/modules/quota.rs fetch_project_id().
|
|
*/
|
|
|
|
type JsonRecord = Record<string, unknown>;
|
|
|
|
function toRecord(value: unknown): JsonRecord {
|
|
return value && typeof value === "object" && !Array.isArray(value) ? (value as JsonRecord) : {};
|
|
}
|
|
|
|
function pickTierField(tier: unknown, field: "name" | "id"): string | null {
|
|
const record = toRecord(tier);
|
|
const value = record[field];
|
|
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
}
|
|
|
|
function isIneligible(subscription: JsonRecord): boolean {
|
|
const ineligible = subscription.ineligibleTiers;
|
|
return Array.isArray(ineligible) && ineligible.length > 0;
|
|
}
|
|
|
|
function findDefaultAllowedTier(subscription: JsonRecord): JsonRecord | null {
|
|
if (!Array.isArray(subscription.allowedTiers)) return null;
|
|
for (const tierValue of subscription.allowedTiers) {
|
|
const tier = toRecord(tierValue);
|
|
if (tier.isDefault) return tier;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Display subscription tier from loadCodeAssist (paid → current → restricted default).
|
|
*/
|
|
export function extractCodeAssistSubscriptionTier(subscriptionInfo: unknown): string | null {
|
|
const subscription = toRecord(subscriptionInfo);
|
|
if (Object.keys(subscription).length === 0) return null;
|
|
|
|
let tier =
|
|
pickTierField(subscription.paidTier, "name") || pickTierField(subscription.paidTier, "id");
|
|
|
|
if (!tier) {
|
|
if (!isIneligible(subscription)) {
|
|
tier =
|
|
pickTierField(subscription.currentTier, "name") ||
|
|
pickTierField(subscription.currentTier, "id");
|
|
} else {
|
|
const defaultTier = findDefaultAllowedTier(subscription);
|
|
if (defaultTier) {
|
|
const name = pickTierField(defaultTier, "name");
|
|
const id = pickTierField(defaultTier, "id");
|
|
if (name) tier = `${name} (Restricted)`;
|
|
else if (id) tier = `${id} (Restricted)`;
|
|
}
|
|
}
|
|
}
|
|
|
|
return tier;
|
|
}
|
|
|
|
/**
|
|
* Tier ID for onboardUser tier_id (paid → current → restricted default → legacy-tier).
|
|
*/
|
|
export function extractCodeAssistOnboardTierId(subscriptionInfo: unknown): string {
|
|
const subscription = toRecord(subscriptionInfo);
|
|
|
|
const paidId = pickTierField(subscription.paidTier, "id");
|
|
if (paidId) return paidId;
|
|
|
|
if (!isIneligible(subscription)) {
|
|
const currentId = pickTierField(subscription.currentTier, "id");
|
|
if (currentId) return currentId;
|
|
}
|
|
|
|
const defaultTier = findDefaultAllowedTier(subscription);
|
|
const defaultId = defaultTier ? pickTierField(defaultTier, "id") : null;
|
|
if (defaultId) return defaultId;
|
|
|
|
const currentId = pickTierField(subscription.currentTier, "id");
|
|
if (currentId) return currentId;
|
|
|
|
return "legacy-tier";
|
|
}
|