
    {h              	           d dl Z d dlZd dlmZ d dlmZ d dlZd dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ  ej*                  e      Zed	ed
eeeeez     e	e   f   df   fd       Zy)    N)AsyncGenerator)asynccontextmanager)MemoryObjectReceiveStreamMemoryObjectSendStream)ValidationError)connect)Subprotocol)SessionMessageurlreturnc                .  K   t        j                  d      \  }t        j                  d      \  }t        | t        d      g      4 d{   fd}fd}t        j                         4 d{   }|j                  |       |j                  |       ||f |j                  j                          ddd      d{    ddd      d{    y7 7 j7 # 1 d{  7  sw Y   )xY w7  # 1 d{  7  sw Y   yxY ww)a  
    WebSocket client transport for MCP, symmetrical to the server version.

    Connects to 'url' using the 'mcp' subprotocol, then yields:
        (read_stream, write_stream)

    - read_stream: As you read from this stream, you'll receive either valid
      JSONRPCMessage objects or Exception objects (when validation fails).
    - write_stream: Write JSONRPCMessage objects to this stream to send them
      over the WebSocket to the server.
    r   mcp)subprotocolsNc                  ~  K   4 d{    2 3 d{   } 	 t         j                  j                  |       }t        |      }j	                  |       d{    N7 T7 K7 	# t
        $ r$}j	                  |       d{  7   Y d}~|d}~ww xY w6 ddd      d{  7   y# 1 d{  7  sw Y   yxY ww)z
            Reads text messages from the WebSocket, parses them as JSON-RPC messages,
            and sends them into read_stream_writer.
            N)typesJSONRPCMessagemodel_validate_jsonr
   sendr   )raw_textmessagesession_messageexcread_stream_writerwss       U/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/mcp/client/websocket.py	ws_readerz#websocket_client.<locals>.ws_reader3   s     
 * ; ;&( ; ;(;"'"6"6"J"J8"T*8*A055oFFF;; G* ;055c:::; '); ; ; ; ;s   B=AB=B(BA!BB(>A%A#A%B(B=!B#A%%	B.BB
BB(BB(B=!B$"B=(B:.B1/B:6B=c                  *  K   4 d{    2 3 d{   } | j                   j                  ddd      }j                  t        j                  |             d{    T7 Z7 Q7 	6 ddd      d{  7   y# 1 d{  7  sw Y   yxY ww)zt
            Reads JSON-RPC messages from write_stream_reader and
            sends them to the server.
            NTjson)by_aliasmodeexclude_none)r   
model_dumpr   r   dumps)r   msg_dictwrite_stream_readerr   s     r   	ws_writerz#websocket_client.<locals>.ws_writerB   s     
 + 8 8-@ 8 8/.66AA4V\koApH''$**X"6777	88 8 .A8 8 8 8 8sw   BA%BA>A+A'A+AA>A) A>%B'A+)A>+A>,B7A:8B>BBBB)anyiocreate_memory_object_stream
ws_connectr	   create_task_group
start_sooncancel_scopecancel)	r   read_streamwrite_streamr   r&   tgr   r%   r   s	         @@@r   websocket_clientr1      s     6 ',&G&G&J#(-(I(I!(L%L% #[-?,@A %% %%R	;		8 **, 		% 		%MM)$MM)$ -- OO""$		% 		%9%% %% %%8		% 		% 		% 		% 		%9%% %% %% %%s   ADC#D%D :C%;D >AC)D C'D DC>D%D 'D )C;	/C20C;	7D >D DD	DD)r   loggingcollections.abcr   
contextlibr   r'   anyio.streams.memoryr   r   pydanticr   websockets.asyncio.clientr   r)   websockets.typingr	   	mcp.typesr   mcp.shared.messager
   	getLogger__name__loggerstrtuple	Exceptionr1        r   <module>rC      s      * *  R $ ; )  -			8	$ C%	C%	
#NY$>
?AWXfAg
gh
C% C%rB   