
    {hY                     (   d dl Z d dlmZ d dlmZ d dlmZmZ d dlZd dl	Z	d dl
mZ d dlmZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ  e j0                  e      Zd
edefdZedddedfd
edeeef   dz  dededede	j>                  dz  fd       Z y)    N)asynccontextmanager)Any)urljoinurlparse)
TaskStatus)MemoryObjectReceiveStreamMemoryObjectSendStream)aconnect_sse)McpHttpClientFactorycreate_mcp_http_client)SessionMessageurlreturnc                 @    t        | t        |       j                        S )N)r   r   path)r   s    O/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/mcp/client/sse.pyremove_request_paramsr      s    3**++       i,  headerstimeoutsse_read_timeouthttpx_client_factoryauthc           	        K   t        j                  d      \  }t        j                  d      \  t        j                         4 d{   }	 t        j	                  dt                        |||t        j                  ||            4 d{   t        d       4 d{   j                  j                          t        j	                  d       t         j                  fdt        t           f fd	}d
t        ffd}	|j                  |       d{   }
t        j	                  d|
        |j                  |	|
       	 |f |j                   j#                          ddd      d{    ddd      d{    j%                          d{    j%                          d{    ddd      d{    y7 7 F7 37 # |j                   j#                          w xY w7 # 1 d{  7  sw Y   xY w7 # 1 d{  7  sw Y   xY w7 7 o# j%                          d{  7   j%                          d{  7   w xY w7 # 1 d{  7  sw Y   yxY ww)a  
    Client transport for SSE.

    `sse_read_timeout` determines how long (in seconds) the client will wait for a new
    event before disconnecting. All other HTTP operations are controlled by `timeout`.

    Args:
        url: The SSE endpoint URL.
        headers: Optional headers to include in requests.
        timeout: HTTP timeout for regular operations.
        sse_read_timeout: Timeout for SSE read operations.
        auth: Optional HTTPX authentication handler.
    r   NzConnecting to SSE endpoint: )read)r   r   r   GETzSSE connection establishedtask_statusc                   K   	 	j                         2 3 d {   }t        j                  d|j                          |j                  xdk(  r t	        |j
                        }t        j                  d|        t              }t        |      }|j                  |j                  k7  s|j                  |j                  k7  r%d| }t        j                  |       t        |      | j                  |       dk(  rh	 t        j                  j                  |j
                        }t        j                  d|        t%        |      }
j#                  |       d {    U	 t        j'                  d|j                          z7 v# t        $ r:}t        j!                  d       
j#                  |       d {  7   Y d }~d }~ww xY w7 t6 nE# t        $ r9}t        j!                  d	       
j#                  |       d {  7   Y d }~nd }~ww xY w
j)                          d {  7   y # 
j)                          d {  7   w xY ww)
NzReceived SSE event: endpointzReceived endpoint URL: z2Endpoint origin does not match connection origin: messagezReceived server message: zError parsing server messagezUnknown SSE event: zError in sse_reader)	aiter_sseloggerdebugeventr   datar   netlocschemeerror
ValueErrorstartedtypesJSONRPCMessagemodel_validate_json	Exception	exceptionsendr   warningaclose)r   sseendpoint_url
url_parsedendpoint_parsed	error_msgr!   excsession_messageevent_sourceread_stream_writerr   s            r   
sse_readerzsse_client.<locals>.sse_readerD   s    )>-9-C-C-E #Z #Zc &/CCII;-O P&)ii)37>sCHH7M(.7N|n5](^5=c]
:B<:P,6,=,=AWAW,W/9/@/@ODZDZ/Z 3eeqdr0s -6 -3LL,C2<Y2G,G(3(;(;L(I)2)56;6J6J6^6^037.G -3LL;TU\T]9^,_ ;I:Q.@.E.Eo.V(V(V)*(.9LSYYK7X(YG#Z6 09 )5,2,<,<=[,\2D2I2I#2N,N,N,4)5 )WC .FH  ) ?",,-BC"4"9"9#">>>? #5";";"==="4";";"===s   IG GFGC%G AFG #G$+G G	G)GGG
G GG G H; 	H%)HHHH; HH; !I4H75I;IIIIr5   c           
      T  K   	 4 d {    2 3 d {   }t         j                  d|        j                  | |j                  j	                  ddd             d {   }|j                          t         j                  d|j                          7 7 7 ;6 d d d       d {  7   n# 1 d {  7  sw Y   nxY wn$# t        $ r t         j                  d       Y nw xY wj                          d {  7   y # j                          d {  7   w xY ww)NzSending client message: Tjson)by_aliasmodeexclude_none)r?   z"Client message sent successfully: zError in post_writer)
r#   r$   postr!   
model_dumpraise_for_statusstatus_coder/   r0   r3   )r5   r:   responseclientwrite_streamwrite_stream_readers      r   post_writerzsse_client.<locals>.post_writerr   s*    8': n n=P !n !n/$*LL3KOK\1]$^5;[[(4-<-D-D-O-O59179= .P .* 6A 6& 0&H %-$=$=$?$*LL3UV^VjVjUk1l$mn!n0& >Qn n n n n  ) E",,-CDE #/"5"5"777,"5"5"777s   D(C BC B6B#BB#AB6%B!&7B6C B#!B6#B6$C /B20C 6C<B?=CC D
 C-*D
 ,C--D
 0D(DD(
D%D!D%%D(z(Starting post writer with endpoint URL: )anyiocreate_memory_object_streamcreate_task_groupr#   r$   r   httpxTimeoutr
   rG   rE   TASK_STATUS_IGNOREDr   strstart
start_sooncancel_scopecancelr3   )r   r   r   r   r   r   read_streamtgr=   rK   r5   rH   r;   r<   rI   rJ   s   `          @@@@@r   
sse_clientrY      sV    8 ',&G&G&J#(-(I(I!(L%L%&&( Z( Z(BY	(LL78Mc8R7STU+dEMM'P`4a T1 T1' Q1 Q1 " ))::<LL!=> 8=7P7P,>%/_,>\8 8( *,*)=#=LLL#KL>!Z[MM+|<1)<77..0cQ1 Q1T1 T1l %++---%%'''uZ( Z( Z(T1Q1T $> ..0cQ1 Q1 Q1 Q1T1 T1 T1 T1l .' %++---%%'''uZ( Z( Z( Z(sX  A	J	GJ	I4AH;G"H; H"2G%
3H"6A7H-G(
..HG*$H>H"	H	
H"H;H H;I41H72I4	H9
I4J	I2J	"H;%H"(H*H	H	H"HHHH" H;"H4	(H+)H4	0H;7I49I4;I/I
I/(I+
)I//I42J	4J:I=;JJ	)!logging
contextlibr   typingr   urllib.parser   r   rL   rO   	anyio.abcr   anyio.streams.memoryr   r	   	httpx_sser
   	mcp.typesr,   mcp.shared._httpx_utilsr   r   mcp.shared.messager   	getLogger__name__r#   rR   r   dictfloatAuthrY    r   r   <module>rj      s     *  *     R "  P -			8	$,s ,s ,  &*$1G"x(	x(#s(^d"x( x( 	x(
 /x( **t
x( x(r   