/ utils / model / check1mAccess.ts
check1mAccess.ts
 1  import type { OverageDisabledReason } from 'src/services/claudeAiLimits.js'
 2  import { isClaudeAISubscriber } from '../auth.js'
 3  import { getGlobalConfig } from '../config.js'
 4  import { is1mContextDisabled } from '../context.js'
 5  
 6  /**
 7   * Check if extra usage is enabled based on the cached disabled reason.
 8   * Extra usage is considered enabled if there's no disabled reason,
 9   * or if the disabled reason indicates it's provisioned but temporarily unavailable.
10   */
11  function isExtraUsageEnabled(): boolean {
12    const reason = getGlobalConfig().cachedExtraUsageDisabledReason
13    // undefined = no cache yet, treat as not enabled (conservative)
14    if (reason === undefined) {
15      return false
16    }
17    // null = no disabled reason from API, extra usage is enabled
18    if (reason === null) {
19      return true
20    }
21    // Check which disabled reasons still mean "provisioned"
22    switch (reason as OverageDisabledReason) {
23      // Provisioned but credits depleted — still counts as enabled
24      case 'out_of_credits':
25        return true
26      // Not provisioned or actively disabled
27      case 'overage_not_provisioned':
28      case 'org_level_disabled':
29      case 'org_level_disabled_until':
30      case 'seat_tier_level_disabled':
31      case 'member_level_disabled':
32      case 'seat_tier_zero_credit_limit':
33      case 'group_zero_credit_limit':
34      case 'member_zero_credit_limit':
35      case 'org_service_level_disabled':
36      case 'org_service_zero_credit_limit':
37      case 'no_limits_configured':
38      case 'unknown':
39        return false
40      default:
41        return false
42    }
43  }
44  
45  // @[MODEL LAUNCH]: Add check if the new model supports 1M context
46  export function checkOpus1mAccess(): boolean {
47    if (is1mContextDisabled()) {
48      return false
49    }
50  
51    if (isClaudeAISubscriber()) {
52      // Subscribers have access if extra usage is enabled for their account
53      return isExtraUsageEnabled()
54    }
55  
56    // Non-subscribers (API/PAYG) have access
57    return true
58  }
59  
60  export function checkSonnet1mAccess(): boolean {
61    if (is1mContextDisabled()) {
62      return false
63    }
64  
65    if (isClaudeAISubscriber()) {
66      // Subscribers have access if extra usage is enabled for their account
67      return isExtraUsageEnabled()
68    }
69  
70    // Non-subscribers (API/PAYG) have access
71    return true
72  }