Files
stack/apps/web/src/lib/socket.ts
jason.woltje e3f64c79d9
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
chore: move gateway default port from 4000 to 14242 (#375)
2026-04-04 20:17:40 +00:00

33 lines
832 B
TypeScript

import { io, type Socket } from 'socket.io-client';
const GATEWAY_URL = process.env['NEXT_PUBLIC_GATEWAY_URL'] ?? 'http://localhost:14242';
let socket: Socket | null = null;
export function getSocket(): Socket {
if (!socket) {
socket = io(`${GATEWAY_URL}/chat`, {
withCredentials: true,
autoConnect: false,
transports: ['websocket', 'polling'],
});
// Reset singleton reference when socket is fully closed so the next
// getSocket() call creates a fresh instance instead of returning a
// closed/dead socket.
socket.on('disconnect', () => {
socket = null;
});
}
return socket;
}
/** Tear down the singleton socket and reset the reference. */
export function destroySocket(): void {
if (socket) {
socket.offAny();
socket.disconnect();
socket = null;
}
}