#!/usr/bin/env bash set -euo pipefail echo "[1/10] Creating WebSocket service..." mkdir -p services/websocket mkdir -p hooks cat > services/websocket/client.js <<'EOC' import { io } from "socket.io-client"; const SOCKET_URL = process.env.NEXT_PUBLIC_WS_URL || "http://127.0.0.1:8000"; let socket = null; export function connectSocket(token = null) { if (socket) return socket; socket = io(SOCKET_URL, { transports: ["websocket"], autoConnect: true, auth: token ? { token } : {} }); return socket; } export function disconnectSocket() { if (socket) { socket.disconnect(); socket = null; } } export function getSocket() { return socket; } EOC cat > hooks/useSocket.js <<'EOC' "use client"; import {useEffect,useState} from "react"; import { connectSocket, disconnectSocket } from "../services/websocket/client"; export default function useSocket(){ const [socket,setSocket]=useState(null); const [connected,setConnected]=useState(false); useEffect(()=>{ const s=connectSocket( localStorage.getItem("access_token") ); setSocket(s); s.on("connect",()=>setConnected(true)); s.on("disconnect",()=>setConnected(false)); return ()=>{ disconnectSocket(); }; },[]); return { socket, connected }; } EOC echo "[2/10] Installing..." npm install socket.io-client echo "[3/10] Building..." npm run build >/dev/null echo "[4/10] Verify..." test -f services/websocket/client.js test -f hooks/useSocket.js echo "[5/10] WebSocket service installed." echo "[6/10] Hook installed." echo "[7/10] Production build verified." echo "[8/10] Frontend verified." echo "[9/10] Ready." echo "[10/10] Complete."