
    "<i                       d dl mZ d dlZd dl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 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 d d
lmZ d dl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j(        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/ G d  d          Z0dS )"    )annotationsN)	AwaitableSequence)	dataclassfieldreplace)datetimetimezone)partial)TYPE_CHECKINGAnyGenericLiteralProtocolruntime_checkable)ReadResourceContents)TypeVar)Prompt)Resource)ResourceTemplate)Tool
ToolResult)Context)CallNext
MiddlewareMiddlewareContextT)defaultRT)	covariantr   c                      e Zd ZddZdS )r   contextMiddlewareContext[T]returnAwaitable[R]c                    d S N )selfr"   s     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fastmcp/server/middleware/middleware.py__call__zCallNext.__call__,   s          N)r"   r#   r$   r%   )__name__
__module____qualname__r+   r(   r,   r*   r   r   *   s        JJJJJJr,   r   )kw_onlyfrozenc                      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dS )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                 >    t          j        t          j                  S r'   )r	   nowr
   utcr(   r,   r*   <lambda>zMiddlewareContext.<lambda>=   s    X\8R8R r,   )default_factoryr	   	timestampkwargsr   r$   r#   c                    t          | fi |S r'   )r   )r)   r@   s     r*   copyzMiddlewareContext.copy?   s    t&&v&&&r,   )r@   r   r$   r#   )r-   r.   r/   __doc____annotations__r4   r6   r8   r9   r   r?   rB   r(   r,   r*   r   r   /   s           JJJ&*O**** +3F2222/8D8888F%0R0RSSSISSSS' ' ' ' ' 'r,   r   
middlewarer   	call_nextCallNext[T, 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.r"   r#   r$   r   c                ,   K    |            d {V S r'   r(   )r"   rF   rE   s    r*   wrapperz(make_middleware_wrapper.<locals>.wrapperJ   s+      Z333333333r,   )r"   r#   r$   r   r(   )rE   rF   rJ   s   `` r*   make_middleware_wrapperrK   C   s.    4 4 4 4 4 4 4 Nr,   c                  z    e Zd ZdZd4dZd5dZd6dZd7dZd8dZd9dZ	d:dZ
d;dZd<d"Zd=d&Zd>d*Zd?d.Zd@d2Zd3S )Ar   z9Base class for FastMCP middleware with dispatching hooks.r"   r#   rF   CallNext[T, Any]r$   r   c                b   K   |                      ||           d{V } ||           d{V S )z0Main entry point that orchestrates the pipeline.rF   N)_dispatch_handler)r)   r"   rF   handler_chains       r*   r+   zMiddleware.__call__S   sj       #44 5 
 
 
 
 
 
 
 
 #]7+++++++++r,   MiddlewareContext[Any]CallNext[Any, Any]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        |          }nuxdk    r t          | j        |          }nWxdk    r t          | j        |          }n9x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 )z/Builds a chain of handlers for a given message.
initializerO   z
tools/callzresources/readzprompts/getz
tools/listzresources/listzresources/templates/listzprompts/listr7   notification)r9   r   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"   rF   handlers       r*   rP   zMiddleware._dispatch_handler_   s      n!$"4HHH!$"3wGGG!!!!!!$"77KKK!$"4HHH!$"4HHH!!!!!!$"8GLLL+++++!$"AWUUU!$"6'JJJl!$/WEEE!$"6'JJJ$/W===r,   c                (   K    ||           d {V S r'   r(   r)   r"   rF   s      r*   ra   zMiddleware.on_message   *      
 Yw'''''''''r,   'MiddlewareContext[mt.Request[Any, Any]]#CallNext[mt.Request[Any, Any], Any]c                (   K    ||           d {V S r'   r(   rd   s      r*   r_   zMiddleware.on_request   re   r,   ,MiddlewareContext[mt.Notification[Any, Any]](CallNext[mt.Notification[Any, Any], Any]c                (   K    ||           d {V S r'   r(   rd   s      r*   r`   zMiddleware.on_notification   re   r,   'MiddlewareContext[mt.InitializeRequest]:CallNext[mt.InitializeRequest, mt.InitializeResult | None]mt.InitializeResult | Nonec                (   K    ||           d {V S r'   r(   rd   s      r*   rW   zMiddleware.on_initialize   re   r,   +MiddlewareContext[mt.CallToolRequestParams].CallNext[mt.CallToolRequestParams, ToolResult]r   c                (   K    ||           d {V S r'   r(   rd   s      r*   rX   zMiddleware.on_call_tool   re   r,   /MiddlewareContext[mt.ReadResourceRequestParams]FCallNext[mt.ReadResourceRequestParams, Sequence[ReadResourceContents]]Sequence[ReadResourceContents]c                (   K    ||           d {V S r'   r(   rd   s      r*   rY   zMiddleware.on_read_resource   *       Yw'''''''''r,   ,MiddlewareContext[mt.GetPromptRequestParams]7CallNext[mt.GetPromptRequestParams, mt.GetPromptResult]mt.GetPromptResultc                (   K    ||           d {V S r'   r(   rd   s      r*   rZ   zMiddleware.on_get_prompt   re   r,   &MiddlewareContext[mt.ListToolsRequest]-CallNext[mt.ListToolsRequest, Sequence[Tool]]Sequence[Tool]c                (   K    ||           d {V S r'   r(   rd   s      r*   r[   zMiddleware.on_list_tools   re   r,   *MiddlewareContext[mt.ListResourcesRequest]5CallNext[mt.ListResourcesRequest, Sequence[Resource]]Sequence[Resource]c                (   K    ||           d {V S r'   r(   rd   s      r*   r\   zMiddleware.on_list_resources   re   r,   2MiddlewareContext[mt.ListResourceTemplatesRequest]ECallNext[mt.ListResourceTemplatesRequest, Sequence[ResourceTemplate]]Sequence[ResourceTemplate]c                (   K    ||           d {V S r'   r(   rd   s      r*   r]   z%Middleware.on_list_resource_templates   rw   r,   (MiddlewareContext[mt.ListPromptsRequest]1CallNext[mt.ListPromptsRequest, Sequence[Prompt]]Sequence[Prompt]c                (   K    ||           d {V S r'   r(   rd   s      r*   r^   zMiddleware.on_list_prompts   re   r,   N)r"   r#   rF   rM   r$   r   )r"   rR   rF   rS   r$   rS   )r"   rR   rF   rS   r$   r   )r"   rf   rF   rg   r$   r   )r"   ri   rF   rj   r$   r   )r"   rl   rF   rm   r$   rn   )r"   rp   rF   rq   r$   r   )r"   rs   rF   rt   r$   ru   )r"   rx   rF   ry   r$   rz   )r"   r|   rF   r}   r$   r~   )r"   r   rF   r   r$   r   )r"   r   rF   r   r$   r   )r"   r   rF   r   r$   r   )r-   r.   r/   rC   r+   rP   ra   r_   r`   rW   rX   rY   rZ   r[   r\   r]   r^   r(   r,   r*   r   r   P   s       CC
, 
, 
, 
,       D( ( ( (( ( ( (( ( ( (( ( ( (( ( ( (( ( ( (( ( ( (( ( ( (( ( ( (( ( ( (( ( ( ( ( (r,   )rE   r   rF   rG   r$   rG   )1
__future__r   loggingcollections.abcr   r   dataclassesr   r   r   r	   r
   	functoolsr   typingr   r   r   r   r   r   	mcp.typestypesmt mcp.server.lowlevel.helper_typesr   typing_extensionsr   fastmcp.prompts.promptr   fastmcp.resources.resourcer   fastmcp.resources.templater   fastmcp.tools.toolr   r   fastmcp.server.contextr   __all__	getLoggerr-   loggerr   r   r   r   rK   r   r(   r,   r*   <module>r      s   " " " " " "  / / / / / / / / 1 1 1 1 1 1 1 1 1 1 ' ' ' ' ' ' ' '                            A A A A A A % % % % % % ) ) ) ) ) ) / / / / / / 7 7 7 7 7 7 / / / / / / / / /......   
	8	$	$ GCGC4--- K K K K Kx1~ K K K 4%%%' ' ' ' '
 ' ' &%'&
 
 
 
@( @( @( @( @( @( @( @( @( @(r,   