
    ViA                      z   S SK r S SKJr  S SKJr  S SKJr  S SKJrJ	r	J
r
  S SKrS SKrS SKJr  S SKJrJr  S SKJr  S S	KJr  S SKJr  S S
KJrJr  S SKJr  \ R:                  " \5      rS\ S\ 4S jr!S\ S\ S-  4S jr"\SSS\SS4S\ S\#\ \4   S-  S\$S\$S\S\RJ                  S-  S\\ /S4   S-  4S jj5       r&g)    N)Callable)asynccontextmanager)Any)parse_qsurljoinurlparse)
TaskStatus)MemoryObjectReceiveStreamMemoryObjectSendStream)aconnect_sse)SSEError)McpHttpClientFactorycreate_mcp_http_client)SessionMessageurlreturnc                 @    [        U [        U 5      R                  5      $ )N)r   r   path)r   s    a/home/james-whalen/.local/share/pipx/venvs/semgrep/lib/python3.13/site-packages/mcp/client/sse.pyremove_request_paramsr      s    3**++    endpoint_urlc                     [        [        U 5      R                  5      nUR                  SS /5      S   =(       d    UR                  SS /5      S   $ )N	sessionIdr   
session_id)r   r   queryget)r   query_paramss     r   !_extract_session_id_from_endpointr      sM    H\2889LK$03`|7G7GW[V\7]^_7``r      i,  headerstimeoutsse_read_timeouthttpx_client_factoryauthon_session_createdc           
     8  ^ ^^^^^^#    [         R                  " S5      u  mn[         R                  " S5      u  mm[         R                  " 5        ISh  vN n [        R	                  S[        T 5       35        U" X[        R                  " X#S9S9 ISh  vN m[        TST 5       ISh  vN mTR                  R                  5         [        R	                  S5        [         R                  4S[        [           4UUUU 4S	 jjjn	S
[        4UUU4S jjn
UR                  U	5      I Sh  vN n[        R	                  SU 35        UR                  X5         UT47v   UR                   R#                  5         SSS5      ISh  vN   SSS5      ISh  vN   TR%                  5       I Sh  vN   TR%                  5       I Sh  vN   SSS5      ISh  vN   g GN GNK GN8 N! UR                   R#                  5         f = f N! , ISh  vN  (       d  f       N= f N! , ISh  vN  (       d  f       N= f N Ny! TR%                  5       I Sh  vN    TR%                  5       I Sh  vN    f = f N! , ISh  vN  (       d  f       g= f7f)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.
    on_session_created: Optional callback invoked with the session ID when received.
r   NzConnecting to SSE endpoint: )read)r!   r%   r"   GETzSSE connection establishedtask_statusc                 ~  >#     TR                  5         S h  vN n[        R                  SUR                   35        UR                  =S:X  a    [	        TUR
                  5      n[        R                  SU 35        [        T5      n[        U5      nUR                  UR                  :w  d  UR                  UR                  :w  a%  SU 3n[        R                  U5        [        U5      eT(       a  [        U5      nU(       a  T" U5        U R                  U5        GM  S:X  a}  UR
                  (       d  GM(   [        R                  R                  UR
                  5      n[        R                  SU 35        ['        U5      n	TR%                  U	5      I S h  vN   GM   [        R)                  SUR                   35        GM   GN! [          a;  n[        R#                  S5        TR%                  U5      I S h  vN     S nAGM  S nAff = f Nx
 Oj! [*         a  n
[        R#                  S	5        U
eS n
A
f[          a9  n[        R#                  S
5        TR%                  U5      I S h  vN     S nAOS nAff = fTR-                  5       I S h  vN    g ! TR-                  5       I S h  vN    f = f7f)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Encountered SSE exceptionzError in sse_reader)	aiter_sseloggerdebugeventr   datar   netlocschemeerror
ValueErrorr   startedtypesJSONRPCMessagemodel_validate_json	Exception	exceptionsendr   warningr   aclose)r*   sser   
url_parsedendpoint_parsed	error_msgr   r-   excsession_messagesse_excevent_sourcer&   read_stream_writerr   s              r   
sse_readersse_client.<locals>.sse_readerM   s>    4>-9-C-C-E +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+=9Z[g9hJ/90B:0N(3(;(;L(I)2/2xx,4)56;6J6J6^6^037.G -3LL;TU\T]9^,_ ;I:Q.@.E.Eo.V(V(V)*(.9LSYYK7X(YW+ZF 09 )5,2,<,<=[,\2D2I2I#2N,N,N,4)5 )WS .FX  ( *",,-HI")M( ?",,-BC"4"9"9#">>>? #5";";"==="4";";"===s   J=H HGHD H >AG?H H-H H
H)HHHH HH H J 
J%H<<J	)I=2I53I=8J =JJ J=JJ=J:3J64J::J=r   c                 T  >#     T IS h  vN   T  S h  vN n[         R                  SU 35        TR                  U UR                  R	                  SSSS9S9I S h  vN nUR                  5         [         R                  SUR                   35        M   N N N<
 S S S 5      IS h  vN    O?! , IS h  vN  (       d  f       O(= f! [         a    [         R                  S5         Of = fTR                  5       I S h  vN    g ! TR                  5       I S h  vN    f = f7f)NzSending client message: Tjson)by_aliasmodeexclude_none)rL   z"Client message sent successfully: zError in post_writer)
r/   r0   postr-   
model_dumpraise_for_statusstatus_coder;   r<   r?   )r   rE   responseclientwrite_streamwrite_stream_readers      r   post_writersse_client.<locals>.post_writer   s    8':':=P !n/$*LL3KOK\1]$^5;[[(4-<-D-D-O-O59179= .P .* 6A 6& 0&H %-$=$=$?$*LL3UV^VjVjUk1l$m (;!n0& >Q (;':':':':':  ) E",,-CDE #/"5"5"777,"5"5"777s   D(C BC B1BBBAB1B 8B1C BB1B1C *B-+C 0D
 1C7B:8CC D
 C 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/   r0   r   httpxTimeoutr   rT   rR   TASK_STATUS_IGNOREDr	   strstart
start_sooncancel_scopecancelr?   )r   r!   r"   r#   r$   r%   r&   read_streamtgrI   rX   r   rU   rG   rH   rV   rW   s   `     `     @@@@@r   
sse_clientrg      s    < ',&G&G&J#(-(I(I!(L%L%&&((Bd	(LL78Mc8R7STU+EMM'4a '  " ))::<LL!=> 8=7P7P7>%/_7> 7>r8 8 8( *,*)=#=LLL#KL>!Z[MM+<1)<77..0y  B %++---%%'''K )((j $> ..0y      B .' %++---%%'''K )(((sW  AJG!JJ >IG$IH)/G'
0H)3A=H0G*
1-HG,&H H)HH)IH'I J 3I4J IJ JI>J$I'H)*H,H	HH)H$HH$ H)'I)I 	/H20I 	<IJ J I;I
I;4I7
5I;;J >J JJ	JJ)'loggingcollections.abcr   
contextlibr   typingr   urllib.parser   r   r   rZ   r]   	anyio.abcr	   anyio.streams.memoryr
   r   	httpx_sser   httpx_sse._exceptionsr   	mcp.typesr8   mcp.shared._httpx_utilsr   r   mcp.shared.messager   	getLogger__name__r/   r`   r   r   dictfloatAuthrg    r   r   <module>rz      s    $ *  4 4     R " *  P -			8	$,s ,s ,aC aC$J a
  &*$1G"7;E(	E(#s(^d"E( E( 	E(
 /E( **t
E( !#-4E( E(r   