mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-18 22:35:51 +00:00
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import * as React from 'react'
|
|
import { getOauthProfileFromApiKey } from 'src/services/oauth/getOauthProfile.js'
|
|
import { isClaudeAISubscriber } from 'src/utils/auth.js'
|
|
import { Text } from '@anthropic/ink'
|
|
import { logEvent } from '../../services/analytics/index.js'
|
|
import { getGlobalConfig, saveGlobalConfig } from '../../utils/config.js'
|
|
import { useStartupNotification } from './useStartupNotification.js'
|
|
|
|
const MAX_SHOW_COUNT = 3
|
|
|
|
/**
|
|
* Hook to check if the user has a subscription on Console but isn't logged into it.
|
|
*/
|
|
export function useCanSwitchToExistingSubscription(): void {
|
|
useStartupNotification(async () => {
|
|
if ((getGlobalConfig().subscriptionNoticeCount ?? 0) >= MAX_SHOW_COUNT) {
|
|
return null
|
|
}
|
|
const subscriptionType = await getExistingClaudeSubscription()
|
|
if (subscriptionType === null) return null
|
|
|
|
saveGlobalConfig(current => ({
|
|
...current,
|
|
subscriptionNoticeCount: (current.subscriptionNoticeCount ?? 0) + 1,
|
|
}))
|
|
logEvent('tengu_switch_to_subscription_notice_shown', {})
|
|
|
|
return {
|
|
key: 'switch-to-subscription',
|
|
jsx: (
|
|
<Text color="suggestion">
|
|
Use your existing Claude {subscriptionType} plan with Claude Code
|
|
<Text color="text" dimColor>
|
|
{' '}
|
|
· /login to activate
|
|
</Text>
|
|
</Text>
|
|
),
|
|
priority: 'low',
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Checks if the user has a subscription but is not currently logged into it.
|
|
* This helps inform users they should run /login to access their subscription.
|
|
*/
|
|
async function getExistingClaudeSubscription(): Promise<'Max' | 'Pro' | null> {
|
|
// If already using subscription auth, there is nothing to switch to
|
|
if (isClaudeAISubscriber()) {
|
|
return null
|
|
}
|
|
const profile = await getOauthProfileFromApiKey()
|
|
if (!profile) {
|
|
return null
|
|
}
|
|
|
|
if (profile.account.has_claude_max) {
|
|
return 'Max'
|
|
}
|
|
|
|
if (profile.account.has_claude_pro) {
|
|
return 'Pro'
|
|
}
|
|
|
|
return null
|
|
}
|