
    i#                        d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
 ddl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 ddlmZ ddlmZ ddlmZmZ ddlmZ ddlm Z   G d de      Z!y)z6Server-Sent Events (SSE) transport for FastMCP Client.    )annotationsN)AsyncIterator)AnyLiteralcast)ClientSession)
sse_client)McpHttpClientFactory)AnyUrl)Unpack)
BearerAuth)OAuth)ClientTransportSessionKwargs)get_http_headers)normalize_timeout_to_timedeltac                  r    e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 ddZd	dZej                  	 	 	 	 d
d       ZddZ	y)SSETransportzOTransport implementation that connects to an MCP server via Server-Sent Events.Nc                   t        |t              rt        |      }t        |t              r|j                  d      st	        d      || _        |xs i | _        || _        | j                  |       t        |      | _
        y )Nhttpz$Invalid HTTP/S URL provided for SSE.)
isinstancer   str
startswith
ValueErrorurlheadershttpx_client_factory	_set_authr   sse_read_timeout)selfr   r   authr   r   s         m/Users/bowang/.openclaw/workspace/ChatDev/.venv/lib/python3.12/site-packages/fastmcp/client/transports/sse.py__init__zSSETransport.__init__   sn     c6"c(C#s#3>>&+ACDD
 }"$8!t >?O P    c                "   |dk(  r)t        | j                  | j                        }|| _        y t        |t               r%|j	                  | j                         |}|| _        y t        |t
              rt        |      }|| _        y |}|| _        y )Noauth)r   )r   r   r   r   _bindr   r   r!   )r    r!   resolveds      r"   r   zSSETransport._set_auth2   s    7?TXXD<U<UVH (0	 e$JJtxx H
 (0		 c"!$'H (0	 H'/	r$   c                 K   i }t        dh      | j                  z  |d<   | j                  | j                  j                         |d<   |j	                  d      <t        t        j                  |j	                  d            }|j                         |d<   | j                  | j                  |d<   t        | j                  fd| j                  i|4 d {   }|\  }}t        ||fi |4 d {   }| d d d       d {    d d d       d {    y 7 E7 ,7 # 1 d {  7  sw Y   )xY w7  # 1 d {  7  sw Y   y xY ww)	Nauthorization)includer   r   read_timeout_secondstimeoutr   r!   )r   r   r   total_secondsgetr   datetime	timedeltar   r	   r   r!   r   )r    session_kwargsclient_kwargsr,   	transportread_streamwrite_streamsessions           r"   connect_sessionzSSETransport.connect_session?   sI     )+ o%67$,,F 	i    ,040E0E0S0S0UM,-45A#'""N$6$67M$N$  (<'I'I'KM)$$$0484M4MM01dhhHTYYH-HHI(1%K$\-;   IHH     IHHHs   CEDED<4D!5D<8D%>D<	D#
D<ED:E!D<#D<%D7	+D.,D7	3D<:E<EEE
Ec                "    d| j                    dS )Nz<SSETransport(url='z')>)r   )r    s    r"   __repr__zSSETransport.__repr__`   s    $TXXJc22r$   )NNNN)
r   zstr | AnyUrlr   zdict[str, str] | Noner!   *httpx.Auth | Literal['oauth'] | str | Noner   z'datetime.timedelta | float | int | Noner   zMcpHttpClientFactory | None)r!   r;   )r2   zUnpack[SessionKwargs]returnzAsyncIterator[ClientSession])r<   r   )
__name__
__module____qualname____doc__r#   r   
contextlibasynccontextmanagerr8   r:    r$   r"   r   r      s    Y
 *.;?DH<@QQ 'Q 9	Q
 BQ :Q.0 ## 5	% $@3r$   r   )"r@   
__future__r   rA   r0   collections.abcr   typingr   r   r   httpxmcpr   mcp.client.sser	   mcp.shared._httpx_utilsr
   pydanticr   typing_extensionsr   fastmcp.client.auth.bearerr   fastmcp.client.auth.oauthr   fastmcp.client.transports.baser   r   fastmcp.server.dependenciesr   fastmcp.utilities.timeoutr   r   rC   r$   r"   <module>rR      sI    < "   ) % %   % 8  $ 1 + I 8 DI3? I3r$   