| | export interface ConnectionStatus { |
| | connected: boolean; |
| | latency: number; |
| | lastChecked: string; |
| | } |
| |
|
| | export const checkConnection = async (): Promise<ConnectionStatus> => { |
| | try { |
| | |
| | const online = navigator.onLine; |
| |
|
| | if (!online) { |
| | return { |
| | connected: false, |
| | latency: 0, |
| | lastChecked: new Date().toISOString(), |
| | }; |
| | } |
| |
|
| | |
| | const endpoints = [ |
| | '/api/health', |
| | '/', |
| | '/favicon.ico', |
| | ]; |
| |
|
| | let latency = 0; |
| | let connected = false; |
| |
|
| | for (const endpoint of endpoints) { |
| | try { |
| | const start = performance.now(); |
| | const response = await fetch(endpoint, { |
| | method: 'HEAD', |
| | cache: 'no-cache', |
| | }); |
| | const end = performance.now(); |
| |
|
| | if (response.ok) { |
| | latency = Math.round(end - start); |
| | connected = true; |
| | break; |
| | } |
| | } catch (endpointError) { |
| | console.debug(`Failed to connect to ${endpoint}:`, endpointError); |
| | continue; |
| | } |
| | } |
| |
|
| | return { |
| | connected, |
| | latency, |
| | lastChecked: new Date().toISOString(), |
| | }; |
| | } catch (error) { |
| | console.error('Connection check failed:', error); |
| | return { |
| | connected: false, |
| | latency: 0, |
| | lastChecked: new Date().toISOString(), |
| | }; |
| | } |
| | }; |
| |
|