
    AHj                         d dl 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
mZ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  e j0                  e      Z ed
      e	 ddede
dededz  fd              Zy)    N)asynccontextmanager)MemoryObjectReceiveStreamMemoryObjectSendStream)ValidationError)ReceiveScopeSend)	WebSocket)
deprecated)TransportSecurityMiddlewareTransportSecuritySettings)SessionMessagezThe WebSocket server transport is deprecated and will be removed in mcp 2.0. WebSocket was never part of the MCP specification; use the streamable HTTP transport instead.scopereceivesendsecurity_settingsc                X  K   t        | ||      t        |      }|j                  d       d{   }|#j                          d{    t	        d      j                  d       d{    t        j                  d      \  }t        j                  d      \  }fd}fd	}	t        j                         4 d{   }
|
j                  |       |
j                  |	       ||f ddd      d{    y7 7 7 7 D7 # 1 d{  7  sw Y   yxY ww)
a=  
    WebSocket server transport for MCP. This is an ASGI application, suitable to be
    used with a framework like Starlette and a server like Hypercorn.

    Set `security_settings` to enable Host/Origin header validation before the
    handshake is accepted (same settings type as the SSE and Streamable HTTP
    transports). When validation fails this raises `ValueError` after rejecting
    the handshake.

    Deprecated: this transport will be removed in mcp 2.0. WebSocket was never
    part of the MCP specification; use the streamable HTTP transport instead.
    F)is_postNzRequest validation failedmcp)subprotocolr   c                     K   	 4 d {    j                         2 3 d {   } 	 t        j                  j                  |       }t        |      }j                  |       d {    N7 b7 K# t        $ r$}j                  |       d {  7   Y d }~zd }~ww xY w7 96 d d d       d {  7   y # 1 d {  7  sw Y   y xY w# t        j                  $ r j                          d {  7   Y y w xY wwN)
	iter_texttypesJSONRPCMessagemodel_validate_jsonr   r   r   anyioClosedResourceErrorclose)msgclient_messageexcsession_messageread_stream_writer	websockets       L/root/tools/cai/cai_env/lib/python3.12/site-packages/mcp/server/websocket.py	ws_readerz#websocket_server.<locals>.ws_reader>   s     	$) 	C 	C!*!4!4!6 C C#!).)=)=)Q)QRU)V
 '5^&DO,11/BBB	CC + !055c::: !
 C "7	C 	C 	C 	C 	C (( 	$//###	$s   C>C A.C B7B$A0B$B7A2	B7(B")B7.C 0B$2	B;BB
BB7BB7$B7%C 0B31C 6C>7C	=C >C	C C>	C &C;2C53C;8C>:C;;C>c                  h  K   	 4 d {    2 3 d {   } | j                   j                  dd      }j                  |       d {    @7 F7 =7 	6 d d d       d {  7   y # 1 d {  7  sw Y   y xY w# t        j                  $ r j                          d {  7   Y y w xY ww)NT)by_aliasexclude_none)messagemodel_dump_json	send_textr   r   r   )r#   objr%   write_stream_readers     r&   	ws_writerz#websocket_server.<locals>.ws_writerM   s     	$* 3 3-@ 3 3/)11AA4^bAcC#--c222332 .A3 3 3 3 3 (( 	$//###	$s   B2B  AB  A+AAA2A+AA+B  AA+A+B  $A'%B  *B2+A=1A42A=9B  <B2=B   &B/&B)'B/,B2.B//B2)
r
   r   validate_requestr   
ValueErroracceptr   create_memory_object_streamcreate_task_group
start_soon)r   r   r   r   securityerror_responseread_streamwrite_streamr'   r0   tgr$   r%   r/   s              @@@r&   websocket_serverr<      s'    0 %$/I*+<=H#44Y4NNN!oo455


u

--- ',&G&G&J#(-(I(I!(L%L%$$ &&( * *B
i 
i L))* * *S O 	  .F* * * * *s|   /D*DD*D$D*3D4AD*DD**D:D*DD*D*D*D*D*D'DD'#D*r   )logging
contextlibr   r   anyio.streams.memoryr   r   pydantic_corer   starlette.typesr   r   r	   starlette.websocketsr
   typing_extensionsr   	mcp.typesr   mcp.server.transport_securityr   r   mcp.shared.messager   	getLogger__name__loggerr<        r&   <module>rL      s     *  R ) 0 0 * (  ` -			8	$ I 
 ;?	B*B*B* B* 147	B* 	
B*rK   