import React, { useEffect, useState } from 'react'; import { Box, Link, Text } from '@anthropic/ink'; import { type AwsAuthStatus, AwsAuthStatusManager } from '../utils/awsAuthStatusManager.js'; const URL_RE = /https?:\/\/\S+/; export function AwsAuthStatusBox(): React.ReactNode { const [status, setStatus] = useState(AwsAuthStatusManager.getInstance().getStatus()); useEffect(() => { // Subscribe to status updates const unsubscribe = AwsAuthStatusManager.getInstance().subscribe(setStatus); return unsubscribe; }, []); // Don't show anything if not authenticating and no error if (!status.isAuthenticating && !status.error && status.output.length === 0) { return null; } // Don't show if authentication succeeded (no error and not authenticating) if (!status.isAuthenticating && !status.error) { return null; } return ( Cloud Authentication {status.output.length > 0 && ( {status.output.slice(-5).map((line, index) => { const m = line.match(URL_RE); if (!m) { return ( {line} ); } const url = m[0]; const start = m.index ?? 0; const before = line.slice(0, start); const after = line.slice(start + url.length); return ( {before} {url} {after} ); })} )} {status.error && ( {status.error} )} ); }