start working on the frontend side

This commit is contained in:
Warp Agent
2025-12-24 19:53:45 +00:00
parent 3aa0169af0
commit c962a223c6
84 changed files with 14761 additions and 58 deletions

View File

@@ -0,0 +1,74 @@
import { useEffect, useRef, useState } from 'react'
import { useAuthStore } from '@/store/auth'
export interface WebSocketEvent {
type: 'alert' | 'task' | 'metric' | 'event'
data: any
timestamp: string
}
export function useWebSocket(url: string) {
const [isConnected, setIsConnected] = useState(false)
const [lastMessage, setLastMessage] = useState<WebSocketEvent | null>(null)
const wsRef = useRef<WebSocket | null>(null)
const reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout>>()
const { token } = useAuthStore()
useEffect(() => {
if (!token) return
const connect = () => {
try {
// Convert HTTP URL to WebSocket URL
const wsUrl = url.replace('http://', 'ws://').replace('https://', 'wss://')
const ws = new WebSocket(`${wsUrl}?token=${token}`)
ws.onopen = () => {
setIsConnected(true)
console.log('WebSocket connected')
}
ws.onmessage = (event) => {
try {
const data = JSON.parse(event.data)
setLastMessage(data)
} catch (error) {
console.error('Failed to parse WebSocket message:', error)
}
}
ws.onerror = (error) => {
console.error('WebSocket error:', error)
}
ws.onclose = () => {
setIsConnected(false)
console.log('WebSocket disconnected')
// Reconnect after 3 seconds
reconnectTimeoutRef.current = setTimeout(() => {
connect()
}, 3000)
}
wsRef.current = ws
} catch (error) {
console.error('Failed to create WebSocket:', error)
}
}
connect()
return () => {
if (reconnectTimeoutRef.current) {
clearTimeout(reconnectTimeoutRef.current)
}
if (wsRef.current) {
wsRef.current.close()
}
}
}, [url, token])
return { isConnected, lastMessage }
}