Spaces:
Build error
Build error
File size: 1,685 Bytes
cce8120 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #!/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."
|