import { useEffect, useMemo, useState } from 'react' import Link from 'next/link' import { Card } from '@/libs/frontend-ui-primitives' import { explorerFeaturePages } from '@/data/explorerOperations' import { configApi, type CapabilitiesResponse, type NetworksConfigResponse, type TokenListResponse } from '@/services/api/config' import { tokensApi } from '@/services/api/tokens' import { getMissionControlRelays, missionControlApi, type MissionControlBridgeStatusResponse } from '@/services/api/missionControl' import { routesApi, type RouteMatrixResponse } from '@/services/api/routes' import { useUiMode } from '@/components/common/UiModeContext' import { summarizeChainActivity } from '@/utils/activityContext' import PageIntro from '@/components/common/PageIntro' import ExplorerFreshnessDisclosure from '@/components/common/ExplorerFreshnessDisclosure' import CompactMetricBar from '@/components/common/CompactMetricBar' import DisclosureSection from '@/components/common/DisclosureSection' import OperationsSurfaceNav from '@/components/explorer/OperationsSurfaceNav' import OperationsActionGrid from '@/components/explorer/OperationsActionGrid' import BridgeLaneHealthPanel from '@/components/explorer/BridgeLaneHealthPanel' import { resolveEffectiveFreshness } from '@/utils/explorerFreshness' import SubsystemPosturePanel from '@/components/common/SubsystemPosturePanel' import ClientRelativeTime from '@/components/common/ClientRelativeTime' import { statsApi, type ExplorerStats } from '@/services/api/stats' function ActionLink({ href, label, external, }: { href: string label: string external?: boolean }) { const className = 'inline-flex items-center text-sm font-semibold text-primary-600 hover:underline' const text = `${label} ->` if (external) { return ( {text} ) } return ( {text} ) } interface OperationsHubPageProps { initialBridgeStatus?: MissionControlBridgeStatusResponse | null initialRouteMatrix?: RouteMatrixResponse | null initialNetworksConfig?: NetworksConfigResponse | null initialTokenList?: TokenListResponse | null initialCapabilities?: CapabilitiesResponse | null initialStats?: ExplorerStats | null } export default function OperationsHubPage({ initialBridgeStatus = null, initialRouteMatrix = null, initialNetworksConfig = null, initialTokenList = null, initialCapabilities = null, initialStats = null, }: OperationsHubPageProps) { const { mode } = useUiMode() const [bridgeStatus, setBridgeStatus] = useState(initialBridgeStatus) const [routeMatrix, setRouteMatrix] = useState(initialRouteMatrix) const [networksConfig, setNetworksConfig] = useState(initialNetworksConfig) const [tokenList, setTokenList] = useState(initialTokenList) const [capabilities, setCapabilities] = useState(initialCapabilities) const [stats, setStats] = useState(initialStats) const [loadingError, setLoadingError] = useState(null) const page = explorerFeaturePages.operations useEffect(() => { let cancelled = false const load = async () => { const [bridgeResult, routesResult, networksResult, tokenListResult, capabilitiesResult, statsResult] = await Promise.allSettled([ missionControlApi.getBridgeStatus(), routesApi.getRouteMatrix(), configApi.getNetworks(), tokensApi.listForSurface('extended', 138).then(({ ok, data }) => ({ tokens: ok ? data : [] })), configApi.getCapabilities(), statsApi.get(), ]) if (cancelled) return if (bridgeResult.status === 'fulfilled') setBridgeStatus(bridgeResult.value) if (routesResult.status === 'fulfilled') setRouteMatrix(routesResult.value) if (networksResult.status === 'fulfilled') setNetworksConfig(networksResult.value) if (tokenListResult.status === 'fulfilled') setTokenList(tokenListResult.value) if (capabilitiesResult.status === 'fulfilled') setCapabilities(capabilitiesResult.value) if (statsResult.status === 'fulfilled') setStats(statsResult.value) const failedCount = [ bridgeResult, routesResult, networksResult, tokenListResult, capabilitiesResult, statsResult, ].filter((result) => result.status === 'rejected').length if (failedCount === 6) { setLoadingError('Public explorer operations data is temporarily unavailable.') } } load().catch((error) => { if (!cancelled) { setLoadingError( error instanceof Error ? error.message : 'Public explorer operations data is temporarily unavailable.' ) } }) return () => { cancelled = true } }, []) const relayCount = useMemo(() => { const relays = getMissionControlRelays(bridgeStatus) return relays ? Object.keys(relays).length : 0 }, [bridgeStatus]) const totalQueue = useMemo(() => { const relays = getMissionControlRelays(bridgeStatus) if (!relays) return 0 return Object.values(relays).reduce((sum, relay) => { const queueSize = relay.url_probe?.body?.queue?.size ?? relay.file_snapshot?.queue?.size ?? 0 return sum + queueSize }, 0) }, [bridgeStatus]) const tokenChainCoverage = useMemo(() => { return new Set((tokenList?.tokens || []).map((token) => token.chainId).filter(Boolean)).size }, [tokenList]) const topSymbols = useMemo(() => { return Array.from( new Set((tokenList?.tokens || []).map((token) => token.symbol).filter(Boolean) as string[]) ).slice(0, 8) }, [tokenList]) const laneSummary = useMemo(() => { const lanes = bridgeStatus?.data?.bridge_lanes?.lanes || [] if (lanes.length === 0) return null const funded = lanes.filter((lane) => String(lane.status || '').toLowerCase() === 'funded').length const unfunded = lanes.filter((lane) => String(lane.status || '').toLowerCase() === 'unfunded').length const proofRecorded = lanes.filter( (lane) => String(lane.proof_status || '').toLowerCase() === 'proof-recorded' ).length return { total: lanes.length, funded, unfunded, proofRecorded, updatedAt: bridgeStatus?.data?.bridge_lanes?.updated_at, } }, [bridgeStatus]) const activityContext = useMemo( () => summarizeChainActivity({ blocks: [], transactions: [], latestBlockNumber: bridgeStatus?.data?.chains?.['138']?.block_number ? Number(bridgeStatus.data.chains['138'].block_number) : null, latestBlockTimestamp: null, freshness: resolveEffectiveFreshness(stats, bridgeStatus), diagnostics: stats?.diagnostics ?? bridgeStatus?.data?.diagnostics ?? null, }), [bridgeStatus, stats], ) return (
{page.note ? (

{page.note}

) : null} {loadingError ? (

{loadingError}

) : null}
Bridge checked
{mode === 'guided' ? 'Public mission-control snapshot freshness.' : 'Mission-control freshness.'}
Route matrix updated
{mode === 'guided' ? 'Token-aggregation route inventory timestamp.' : 'Route inventory timestamp.'}
Default chain
{networksConfig?.defaultChainId ?? 'Unknown'}
{mode === 'guided' ? 'Wallet onboarding points at Chain 138 by default.' : 'Default wallet chain.'}
Wallet support
{capabilities?.walletSupport?.walletAddEthereumChain && capabilities?.walletSupport?.walletWatchAsset ? 'Ready' : 'Partial'}
{mode === 'guided' ? '`wallet_addEthereumChain` and `wallet_watchAsset` compatibility.' : 'Wallet RPC support.'}
{laneSummary ? (
Config-ready lanes
{laneSummary.funded}/{laneSummary.total} funded ยท {laneSummary.proofRecorded}/{laneSummary.total} proof-recorded
{mode === 'guided' ? 'Remote CCIP bridge LINK balances and operator proof hashes. Full lane table below.' : 'Lane funding and proof posture from bridge status API.'} {' '} Open bridge monitoring
) : null}
Featured symbols
{topSymbols.map((symbol) => ( {symbol} ))}
Tracing posture
Supported: {(capabilities?.tracing?.supportedMethods || []).join(', ') || 'None'}
Unsupported: {(capabilities?.tracing?.unsupportedMethods || []).join(', ') || 'None'}
) }