import React, { useEffect, useState } from 'react' import { Box, Link, Text } from '../ink.js' 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} )} ) }