import type { OverageDisabledReason } from 'src/services/claudeAiLimits.js' import { isClaudeAISubscriber } from '../auth.js' import { getGlobalConfig } from '../config.js' import { is1mContextDisabled } from '../context.js' /** * Check if extra usage is enabled based on the cached disabled reason. * Extra usage is considered enabled if there's no disabled reason, * or if the disabled reason indicates it's provisioned but temporarily unavailable. */ function isExtraUsageEnabled(): boolean { const reason = getGlobalConfig().cachedExtraUsageDisabledReason // undefined = no cache yet, treat as not enabled (conservative) if (reason === undefined) { return false } // null = no disabled reason from API, extra usage is enabled if (reason === null) { return true } // Check which disabled reasons still mean "provisioned" switch (reason as OverageDisabledReason) { // Provisioned but credits depleted — still counts as enabled case 'out_of_credits': return true // Not provisioned or actively disabled case 'overage_not_provisioned': case 'org_level_disabled': case 'org_level_disabled_until': case 'seat_tier_level_disabled': case 'member_level_disabled': case 'seat_tier_zero_credit_limit': case 'group_zero_credit_limit': case 'member_zero_credit_limit': case 'org_service_level_disabled': case 'org_service_zero_credit_limit': case 'no_limits_configured': case 'unknown': return false default: return false } } // @[MODEL LAUNCH]: Add check if the new model supports 1M context export function checkOpus1mAccess(): boolean { if (is1mContextDisabled()) { return false } if (isClaudeAISubscriber()) { // Subscribers have access if extra usage is enabled for their account return isExtraUsageEnabled() } // Non-subscribers (API/PAYG) have access return true } export function checkSonnet1mAccess(): boolean { if (is1mContextDisabled()) { return false } if (isClaudeAISubscriber()) { // Subscribers have access if extra usage is enabled for their account return isExtraUsageEnabled() } // Non-subscribers (API/PAYG) have access return true }