MCPcopy
hub / github.com/upstash/jstack / useWebSocket

Function useWebSocket

packages/jstack/src/client/hooks/use-web-socket.ts:4–52  ·  view source on GitHub ↗
(
  socket: ClientSocket<IncomingEvents & SystemEvents, any>,
  events: Partial<{
    [K in keyof (IncomingEvents & SystemEvents)]: (
      data: (IncomingEvents & SystemEvents)[K]
    ) => void
  }>,
  opts: { enabled?: boolean } = { enabled: true }
)

Source from the content-addressed store, hash-verified

2import { ClientSocket, SystemEvents } from "jstack-shared"
3
4export function useWebSocket<
5 IncomingEvents extends Partial<SystemEvents> & Record<string, unknown>,
6>(
7 socket: ClientSocket<IncomingEvents & SystemEvents, any>,
8 events: Partial<{
9 [K in keyof (IncomingEvents & SystemEvents)]: (
10 data: (IncomingEvents & SystemEvents)[K]
11 ) => void
12 }>,
13 opts: { enabled?: boolean } = { enabled: true }
14) {
15 const eventsRef = useRef(events)
16 eventsRef.current = events
17
18 useEffect(() => {
19 if (opts?.enabled === false) {
20 return
21 }
22
23 const defaultHandlers = {
24 onConnect: () => {},
25 onError: () => {},
26 }
27
28 const mergedEvents = {
29 ...defaultHandlers,
30 ...events,
31 }
32
33 const eventNames = Object.keys(mergedEvents) as Array<
34 keyof IncomingEvents & SystemEvents
35 >
36
37 eventNames.forEach((eventName) => {
38 const handler = mergedEvents[eventName]
39
40 if (handler) {
41 socket.on(eventName, handler)
42 }
43 })
44
45 return () => {
46 eventNames.forEach((eventName) => {
47 const handler = mergedEvents[eventName]
48 socket.off(eventName, handler)
49 })
50 }
51 }, [opts?.enabled])
52}

Callers

nothing calls this directly

Calls 2

onMethod · 0.45
offMethod · 0.45

Tested by

no test coverage detected