MCPcopy Create free account
hub / github.com/wevm/viem / getWebSocketRpcClient

Function getWebSocketRpcClient

src/utils/rpc/webSocket.ts:20–113  ·  view source on GitHub ↗
(
  url: string,
  options: GetWebSocketRpcClientOptions | undefined = {},
)

Source from the content-addressed store, hash-verified

18>
19
20export async function getWebSocketRpcClient(
21 url: string,
22 options: GetWebSocketRpcClientOptions | undefined = {},
23): Promise<SocketRpcClient<WebSocket>> {
24 const { keepAlive, reconnect } = options
25
26 return getSocketRpcClient({
27 async getSocket({ onClose, onError, onOpen, onResponse }) {
28 const WebSocket = await import('isows').then((module) => module.WebSocket)
29 const socket = new WebSocket(url)
30
31 function onClose_() {
32 socket.removeEventListener('close', onClose_)
33 socket.removeEventListener('message', onMessage)
34 socket.removeEventListener('error', onError)
35 socket.removeEventListener('open', onOpen)
36 onClose()
37 }
38 function onMessage({ data }: MessageEvent) {
39 // ignore empty messages
40 if (typeof data === 'string' && data.trim().length === 0) return
41
42 try {
43 const _data = JSON.parse(data)
44 onResponse(_data)
45 } catch (error) {
46 onError(error as Error)
47 }
48 }
49
50 // Setup event listeners for RPC & subscription responses.
51 socket.addEventListener('close', onClose_)
52 socket.addEventListener('message', onMessage)
53 socket.addEventListener('error', onError)
54 socket.addEventListener('open', onOpen)
55
56 // Wait for the socket to open.
57 if (socket.readyState === WebSocket.CONNECTING) {
58 await new Promise((resolve, reject) => {
59 if (!socket) return
60 socket.onopen = resolve
61 socket.onerror = reject
62 })
63 }
64
65 const { close: close_ } = socket
66
67 return Object.assign(socket, {
68 close() {
69 close_.bind(socket)()
70 onClose_()
71 },
72 ping() {
73 try {
74 if (
75 socket.readyState === socket.CLOSED ||
76 socket.readyState === socket.CLOSING
77 )

Callers 6

chains.test.tsFile · 0.85
webSocket.test.tsFile · 0.85
getSocketFunction · 0.85
requestFunction · 0.85
getRpcClientFunction · 0.85
subscribeFunction · 0.85

Calls 1

getSocketRpcClientFunction · 0.85

Tested by

no test coverage detected