mirror of
https://github.com/stefanpejcic/openpanel
synced 2025-06-26 18:28:26 +00:00
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import WebSocket from "ws";
|
|
import { SERVER_PORT, WS_PORT } from "./constants";
|
|
import { DevtoolsEvent, send } from "@refinedev/devtools-shared";
|
|
import { bold, cyanBright } from "chalk";
|
|
|
|
export const serveWs = () => {
|
|
const ws = new WebSocket.Server({ port: WS_PORT }).on(
|
|
"error",
|
|
(error: any) => {
|
|
if (error?.code === "EADDRINUSE") {
|
|
console.error(
|
|
`\n${cyanBright.bold("\u2717 ")}${bold(
|
|
"refine devtools",
|
|
)} failed to start. Port ${WS_PORT} is already in use, please make sure no other devtools server is running\n`,
|
|
);
|
|
} else {
|
|
console.error(
|
|
`\n${cyanBright.bold("\u2717 ")}${bold(
|
|
"error from refine devtools",
|
|
)}`,
|
|
error,
|
|
);
|
|
}
|
|
process.exit(1);
|
|
},
|
|
);
|
|
|
|
ws.on("connection", (client) => {
|
|
if (__DEVELOPMENT__) {
|
|
console.log(`WebSocket server started on PORT ${WS_PORT}`);
|
|
}
|
|
// send client the devtools client url
|
|
send(client as any, DevtoolsEvent.DEVTOOLS_HANDSHAKE, {
|
|
url: `http://localhost:${SERVER_PORT}`,
|
|
});
|
|
|
|
client.on("close", () => {
|
|
client.terminate();
|
|
});
|
|
});
|
|
|
|
process.on("SIGTERM", () => {
|
|
ws.close(() => {
|
|
if (__DEVELOPMENT__) {
|
|
console.log("Process terminated");
|
|
}
|
|
});
|
|
});
|
|
|
|
return ws;
|
|
};
|