File size: 2,753 Bytes
cd8bd0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
 * 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";
}