
    kKj                       d dl mZ d dlZd dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZmZmZmZ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mZ d d
lm Z  d dl!m"Z"m#Z# erd dl$m%Z% g dZ& ejN                  e(      Z) ede      Z* edde      Z+e G d dee*e+f                Z, edd       G d dee*                Z-	 	 	 	 	 	 ddZ.	 	 	 	 	 	 ddZ/ G d d      Z0y)    )annotationsN)	AwaitableCallableSequence)	dataclassfieldreplace)datetimetimezone)TYPE_CHECKINGAnyGenericLiteralProtocolruntime_checkable)TypeVar)PromptPromptResult)ResourceResourceResult)ResourceTemplate)Tool
ToolResult)Context)CallNext
MiddlewareMiddlewareContextT)defaultRT)	covariantr   c                      e Zd ZddZy)r   c                     y N )selfcontexts     u/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/fastmcp/server/middleware/middleware.py__call__zCallNext.__call__*   s    s    N)r'   MiddlewareContext[T]returnzAwaitable[R])__name__
__module____qualname__r)   r%   r*   r(   r   r   (   s    Jr*   r   )kw_onlyfrozenc                  z    e Zd ZU dZded<   dZded<   dZded	<   d
Zded<   dZded<    e	d       Z
ded<   ddZy)r   z8
    Unified context for all middleware operations.
    r   messageNzContext | Nonefastmcp_contextclientzLiteral['client', 'server']sourcerequestz"Literal['request', 'notification']typez
str | Nonemethodc                 H    t        j                  t        j                        S r$   )r
   nowr   utcr%   r*   r(   <lambda>zMiddlewareContext.<lambda>;   s    X\\8Rr*   )default_factoryr
   	timestampc                    t        | fi |S r$   )r	   )r&   kwargss     r(   copyzMiddlewareContext.copy=   s    t&v&&r*   )rA   r   r,   r+   )r-   r.   r/   __doc____annotations__r4   r6   r8   r9   r   r?   rB   r%   r*   r(   r   r   -   sO     J&*O^* +3F'2/8D
,8FJ0RSIxS'r*   r   r   c                     d fd}|S )zCreate a wrapper that applies a single middleware to a context. The
    closure bakes in the middleware and call_next function, so it can be
    passed to other functions that expect a call_next function.c                2   K    |        d {   S 7 wr$   r%   )r'   	call_next
middlewares    r(   wrapperz(make_middleware_wrapper.<locals>.wrapperH   s     3333s   )r'   r+   r,   r    r%   )rH   rG   rI   s   `` r(   make_middleware_wrapperrJ   A   s    4 Nr*   c                     d fd}|S )Nc                4   K    |        d {   S 7 w)NrG   r%   )r'   rG   handlers    r(   rI   z%make_handler_wrapper.<locals>.wrapperR   s     W	::::s   )r'   MiddlewareContext[Any]r,   r   r%   )rN   rG   rI   s   `` r(   make_handler_wrapperrP   N   s    ; Nr*   c                     e Zd ZdZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ		 	 	 	 	 	 ddZ
	 	 	 	 	 	 dd	Z	 	 	 	 	 	 dd
Z	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)r   z9Base class for FastMCP middleware with dispatching hooks.c                h   K   | j                  ||       d{   } ||       d{   S 7 7 w)z0Main entry point that orchestrates the pipeline.rM   N)_dispatch_handler)r&   r'   rG   handler_chains       r(   r)   zMiddleware.__call__[   sC      #44 5 
 
 #7+++	
 ,s   2.2022c                  K   |}|j                   xdk(  r t        | j                  |      }nxdk(  r t        | j                  |      }nxdk(  r t        | j                  |      }nxdk(  r t        | j
                  |      }nqxdk(  r t        | j                  |      }nTxdk(  r t        | j                  |      }n7xdk(  r t        | j                  |      }ndk(  rt        | j                  |      }|j                  xd	k(  r t        | j                  |      }nd
k(  rt        | j                  |      }t        | j                  |      }|S w)z/Builds a chain of handlers for a given message.
initializez
tools/callzresources/readzprompts/getz
tools/listzresources/listzresources/templates/listzprompts/listr7   notification)r9   rP   on_initializeon_call_toolon_read_resourceon_get_prompton_list_toolson_list_resourceson_list_resource_templateson_list_promptsr8   
on_requeston_notification
on_message)r&   r'   rG   rN   s       r(   rS   zMiddleware._dispatch_handlerg   s     nn.t/A/A7K.t/@/@'J!.t/D/DgN.t/A/A7K.t/A/A7K!.t/E/EwO+.33  .t/C/CWMll.tH.t/C/CWM&t@s   EEc                .   K    ||       d {   S 7 wr$   r%   r&   r'   rG   s      r(   rb   zMiddleware.on_message        
 w''''   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   r`   zMiddleware.on_request   re   rf   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   ra   zMiddleware.on_notification   re   rf   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   rX   zMiddleware.on_initialize   re   rf   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   rY   zMiddleware.on_call_tool   re   rf   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   rZ   zMiddleware.on_read_resource   re   rf   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   r[   zMiddleware.on_get_prompt   re   rf   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   r\   zMiddleware.on_list_tools   re   rf   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   r]   zMiddleware.on_list_resources   re   rf   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   r^   z%Middleware.on_list_resource_templates   s      w''''rf   c                .   K    ||       d {   S 7 wr$   r%   rd   s      r(   r_   zMiddleware.on_list_prompts   re   rf   N)r'   r+   rG   zCallNext[T, Any]r,   r   )r'   rO   rG   CallNext[Any, Any]r,   rq   )r'   rO   rG   rq   r,   r   )r'   z'MiddlewareContext[mt.Request[Any, Any]]rG   z#CallNext[mt.Request[Any, Any], Any]r,   r   )r'   z,MiddlewareContext[mt.Notification[Any, Any]]rG   z(CallNext[mt.Notification[Any, Any], Any]r,   r   )r'   z'MiddlewareContext[mt.InitializeRequest]rG   z:CallNext[mt.InitializeRequest, mt.InitializeResult | None]r,   zmt.InitializeResult | None)r'   z+MiddlewareContext[mt.CallToolRequestParams]rG   z.CallNext[mt.CallToolRequestParams, ToolResult]r,   r   )r'   z/MiddlewareContext[mt.ReadResourceRequestParams]rG   z6CallNext[mt.ReadResourceRequestParams, ResourceResult]r,   r   )r'   z,MiddlewareContext[mt.GetPromptRequestParams]rG   z1CallNext[mt.GetPromptRequestParams, PromptResult]r,   r   )r'   z&MiddlewareContext[mt.ListToolsRequest]rG   z-CallNext[mt.ListToolsRequest, Sequence[Tool]]r,   zSequence[Tool])r'   z*MiddlewareContext[mt.ListResourcesRequest]rG   z5CallNext[mt.ListResourcesRequest, Sequence[Resource]]r,   zSequence[Resource])r'   z2MiddlewareContext[mt.ListResourceTemplatesRequest]rG   zECallNext[mt.ListResourceTemplatesRequest, Sequence[ResourceTemplate]]r,   zSequence[ResourceTemplate])r'   z(MiddlewareContext[mt.ListPromptsRequest]rG   z1CallNext[mt.ListPromptsRequest, Sequence[Prompt]]r,   zSequence[Prompt])r-   r.   r/   rC   r)   rS   rb   r`   ra   rX   rY   rZ   r[   r\   r]   r^   r_   r%   r*   r(   r   r   X   s   C
,%
, $
, 
	
,#-#:L#	#J('( &( 
	((8( 7( 
	((=( <( 
	((8( N( 
$	((<( B( 
	((@( J( 
	((=( E( 
	((7( A( 
	((;( I( 
	((C(
( 
$((9( E( 
	(r*   )rH   r   rG   CallNext[T, R]r,   rr   )rN   zCallable[..., Awaitable[Any]]rG   rq   r,   rq   )1
__future__r   loggingcollections.abcr   r   r   dataclassesr   r   r	   r
   r   typingr   r   r   r   r   r   	mcp.typestypesmttyping_extensionsr   fastmcp.prompts.baser   r   fastmcp.resources.baser   r   fastmcp.resources.templater   fastmcp.tools.baser   r   fastmcp.server.contextr   __all__	getLoggerr-   loggerr   r    r   r   rJ   rP   r   r%   r*   r(   <module>r      s	   "  9 9 1 1 '   % 5 ; 7 /. 
		8	$ CC4- Kx1~ K K 4%'
 ' &'&

'5

*! A( A(r*   