
    ChY                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	J
r
Jr  SSKJr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JrJr  SSKJr  SS	KJrJrJ r J!r!J"r"  SS
K#J$r$J%r%  SSK&J'r'  \RP                  " \)5      r* " S S\+5      r, " S S\,5      r- " S S\,5      r. " S S\5      r/ " S S\5      r0\ " S S5      5       r1 " S S\Rd                  5      r3g)z|
OAuth2 Authentication implementation for HTTPX.

Implements authorization code flow with PKCE and automatic token refresh.
    N)AsyncGenerator	AwaitableCallable)	dataclassfield)Protocol)	urlencodeurljoinurlparse)	BaseModelFieldValidationError)MCP_PROTOCOL_VERSION)OAuthClientInformationFullOAuthClientMetadataOAuthMetadata
OAuthTokenProtectedResourceMetadata)check_resource_allowedresource_url_from_server_url)LATEST_PROTOCOL_VERSIONc                       \ rS rSrSrSrg)OAuthFlowError%   z%Base exception for OAuth flow errors. N__name__
__module____qualname____firstlineno____doc____static_attributes__r       I/home/james-whalen/.local/lib/python3.13/site-packages/mcp/client/auth.pyr   r   %   s    /r#   r   c                       \ rS rSrSrSrg)OAuthTokenError)   z"Raised when token operations fail.r   Nr   r   r#   r$   r&   r&   )   s    ,r#   r&   c                       \ rS rSrSrSrg)OAuthRegistrationError-   z&Raised when client registration fails.r   Nr   r   r#   r$   r)   r)   -   s    0r#   r)   c                   b    \ rS rSr% Sr\" SSSS9r\\S'   \" SSSS9r	\\S'   \
SS	 j5       rS
rg)PKCEParameters1   z.PKCE (Proof Key for Code Exchange) parameters..+      )
min_length
max_lengthcode_verifiercode_challengec                    SR                  S [        S5       5       5      n[        R                  " UR	                  5       5      R                  5       n[        R                  " U5      R                  5       R                  S5      nU " XS9$ )zGenerate new PKCE parameters. c              3      #    U  H=  n[         R                  " [        R                  [        R                  -   S -   5      v   M?     g7f)z-._~N)secretschoicestringascii_lettersdigits).0_s     r$   	<genexpr>*PKCEParameters.generate.<locals>.<genexpr>:   s4     rgqbcv/C/Cfmm/SV\/\ ] ]gqs   AAr/   =)r2   r3   )
joinrangehashlibsha256encodedigestbase64urlsafe_b64encodedecoderstrip)clsr2   rF   r3   s       r$   generatePKCEParameters.generate7   sn     rglmpgqrr 4 4 67>>@11&9@@BII#NNNr#   r   N)returnr,   )r   r   r   r    r!   r   r2   str__annotations__r3   classmethodrL   r"   r   r#   r$   r,   r,   1   s?    8srcBM3BsCNCCO Or#   r,   c                   d    \ rS rSrSrS\S-  4S jrS\SS4S jrS\S-  4S jr	S	\SS4S
 jr
Srg)TokenStorage@   z+Protocol for token storage implementations.rN   Nc                    #    g7f)zGet stored tokens.Nr   selfs    r$   
get_tokensTokenStorage.get_tokensC           tokensc                    #    g7f)zStore tokens.Nr   )rW   r\   s     r$   
set_tokensTokenStorage.set_tokensG   rZ   r[   c                    #    g7f)zGet stored client information.Nr   rV   s    r$   get_client_infoTokenStorage.get_client_infoK   rZ   r[   client_infoc                    #    g7f)zStore client information.Nr   )rW   rc   s     r$   set_client_infoTokenStorage.set_client_infoO   rZ   r[   r   )r   r   r   r    r!   r   rX   r^   r   ra   re   r"   r   r#   r$   rS   rS   @   sP    5*t"3 z d 'AD'H 1K PT r#   rS   c                      \ rS rSr% Sr\\S'   \\S'   \\S'   \	\/\
S   4   \S'   \	/ \
\\\S-  4      4   \S'   S	r\\S
'   Sr\S-  \S'   Sr\S-  \S'   Sr\S-  \S'   Sr\S-  \S'   Sr\S-  \S'   Sr\S-  \S'   Sr\S-  \S'   \" \R6                  S9r\R6                  \S'   Sr\S-  \S'   Sr\S-  \S'   S\S\4S jrS\SS4S jr S\!4S jr"S\!4S jr#S S jr$S\4S jr%S!S\S-  S\!4S jjr&Sr'g)"OAuthContextT   zOAuth flow context.
server_urlclient_metadatastorageNredirect_handlercallback_handler     r@timeoutprotected_resource_metadataoauth_metadataauth_server_urlprotocol_versionrc   current_tokenstoken_expiry_time)default_factorylockdiscovery_base_urldiscovery_pathnamerN   c                 N    [        U5      nUR                   SUR                   3$ )z,Extract base URL by removing path component.://)r   schemenetloc)rW   rj   parseds      r$   get_authorization_base_url'OAuthContext.get_authorization_base_urls   s%    *%--FMM?33r#   tokenc                     UR                   (       a(  [        R                  " 5       UR                   -   U l        gSU l        g)zUpdate token expiry time.N)
expires_intimerv   )rW   r   s     r$   update_token_expiry OAuthContext.update_token_expiryx   s,    %)YY[53C3C%CD"%)D"r#   c                     [        U R                  =(       aW    U R                  R                  =(       a:    U R                  (       + =(       d"    [        R                  " 5       U R                  :*  5      $ )z Check if current token is valid.)boolru   access_tokenrv   r   rV   s    r$   is_token_validOAuthContext.is_token_valid   sU     V##00V+++Ttyy{d>T>T/T
 	
r#   c                     [        U R                  =(       a)    U R                  R                  =(       a    U R                  5      $ )z Check if token can be refreshed.)r   ru   refresh_tokenrc   rV   s    r$   can_refresh_tokenOAuthContext.can_refresh_token   s0    D''bD,?,?,M,MbRVRbRbccr#   c                      SU l         SU l        g)zClear current tokens.Nru   rv   rV   s    r$   clear_tokensOAuthContext.clear_tokens   s    "!%r#   c                     [        U R                  5      nU R                  (       aJ  U R                  R                  (       a/  [	        U R                  R                  5      n[        XS9(       a  UnU$ )zoGet resource URL for RFC 8707.

Uses PRM resource if it's a valid parent, otherwise uses canonical server URL.
)requested_resourceconfigured_resource)r   rj   rq   resourcerO   r   )rW   r   prm_resources      r$   get_resource_urlOAuthContext.get_resource_url   sS    
 0@ ++0P0P0Y0Yt??HHIL%d'r#   c                 8    U R                   b  gU(       d  gUS:  $ )zDetermine if the resource parameter should be included in OAuth requests.

Returns True if:
- Protected resource metadata is available, OR
- MCP-Protocol-Version header is 2025-06-18 or later
TFz
2025-06-18)rq   )rW   rt   s     r$   should_include_resource_param*OAuthContext.should_include_resource_param   s(     ++7    <//r#   r   rN   N)N)(r   r   r   r    r!   rO   rP   r   rS   r   r   tuplerp   floatrq   r   rr   r   rs   rt   rc   r   ru   r   rv   r   anyioLockrx   ry   rz   r   r   r   r   r   r   r   r   r"   r   r#   r$   rh   rh   T   sr   O((uio566r9U3d
?-C#DDEEGU EI!:T!AH+/NMD(/"&OS4Z&#'cDj' 6:K+d29 )-NJ%,&*ut|* UZZ8D%**8 &*d
)%)d
)4S 4S 4
* * *
 
d4 d&
# 0cDj 0TX 0 0r#   rh   c                      \ rS rSrSrSr S$S\S\S\S\	\/\
S   4   S	\	/ \
\\\S-  4      4   S
\4S jjrS\R                  S\S-  4S jrS\R                  S\R"                  4S jrS\R                  SS4S jrS\\   4S jrS\R"                  S-  4S jrS\R                  SS4S jrS\\\4   4S jrS\S\S\R"                  4S jrS\R                  SS4S jrS\R"                  4S jrS\R                  S\4S jrS%S jrS\R"                  SS4S jrS\S\R"                  4S  jr S\R                  SS4S! jr!S\R"                  S\"\R"                  \R                  4   4S" jr#S#r$g)&OAuthClientProvider   zk
OAuth2 authentication for httpx.
Handles OAuth flow with automatic client registration and token storage.
Trj   rk   rl   rm   Nrn   rp   c           	      8    [        UUUUUUS9U l        SU l        g)z!Initialize OAuth2 authentication.)rj   rk   rl   rm   rn   rp   FN)rh   context_initialized)rW   rj   rk   rl   rm   rn   rp   s          r$   __init__OAuthClientProvider.__init__   s,     $!+--
 "r#   init_responserN   c                 
   U(       a  UR                   S:w  a  gUR                  R                  S5      nU(       d  gSn[        R                  " X25      nU(       a)  UR                  S5      =(       d    UR                  S5      $ g)z
Extract protected resource metadata URL from WWW-Authenticate header as per RFC9728.

Returns:
    Resource metadata URL if found in WWW-Authenticate header, None otherwise
  NzWWW-Authenticatez)resource_metadata=(?:"([^"]+)"|([^\s,]+))      )status_codeheadersgetresearchgroup)rW   r   www_auth_headerpatternmatchs        r$   (_extract_resource_metadata_from_www_auth<OAuthClientProvider._extract_resource_metadata_from_www_auth   sj      9 9S @'//334FG ?		'3;;q>3U[[^3r#   c                    #    U R                  U5      nU(       d;  U R                  R                  U R                  R                  5      n[	        US5      n[
        R                  " SU[        [        0S9$ 7f)Nz%/.well-known/oauth-protected-resourceGETr   )	r   r   r   rj   r
   httpxRequestr   r   )rW   r   urlauth_base_urls       r$   _discover_protected_resource0OAuthClientProvider._discover_protected_resource   s]     ;;MJ LLCCDLLD[D[\M-)PQC}}UC2FH_1`aas   A4A6responsec                 B  #    UR                   S:X  ay   UR                  5       I Sh  vN n[        R                  " U5      nX0R                  l        UR                  (       a(  [        UR                  S   5      U R                  l        ggg Ne! [         a     gf = f7f)zHandle discovery response.   Nr   )
r   areadr   model_validate_jsonr   rq   authorization_serversrO   rs   r   rW   r   contentmetadatas       r$   #_handle_protected_resource_response7OAuthClientProvider._handle_protected_resource_response   s     3& ( 004HHQ;C81136x7U7UVW7X3YDLL0 2 '0
 # s9   BB BA"B 
BB 
BBBBc                    / nU R                   R                  =(       d    U R                   R                  n[        U5      nUR                   SUR
                   3nUR                  (       aH  UR                  S:w  a8  SUR                  R                  S5       3nUR                  [        XE5      5        UR                  [        US5      5        UR                  (       aH  UR                  S:w  a8  SUR                  R                  S5       3nUR                  [        XF5      5        UR                  S5       S3nUR                  U5        U$ )zCGenerate ordered list of (url, type) tuples for discovery attempts.r|   /z'/.well-known/oauth-authorization-serverz!/.well-known/openid-configuration)
r   rs   rj   r   r}   r~   pathrJ   appendr
   )rW   urlsrs   r   base_url
oauth_path	oidc_pathoidc_fallbacks           r$   _get_discovery_urls'OAuthClientProvider._get_discovery_urls   s   ,,66Q$,,:Q:Q/*mm_C7 ;;6;;#-B6;;CUCUVYCZB[\JKK56 	GH&OPQ ;;6;;#-;FKK<N<Ns<S;TUIKK45 +11#677XYM"r#   c                   #    U R                   R                  (       a  gU R                   R                  (       aO  U R                   R                  R                  (       a*  [	        U R                   R                  R                  5      nO;U R                   R                  U R                   R                  5      n[        US5      nU R                   R                  R                  SSSS9n[        R                  " SXSS0S	9$ 7f)
z9Build registration request or skip if already registered.Nz	/registerTjson)by_aliasmodeexclude_nonePOSTContent-Typezapplication/json)r   r   )r   rc   rr   registration_endpointrO   r   rj   r
   rk   
model_dumpr   r   )rW   registration_urlr   registration_datas       r$   _register_client$OAuthClientProvider._register_client  s     <<##<<&&4<<+F+F+\+\"4<<#>#>#T#TU LLCCDLLD[D[\M&}kB LL88CCTX^mqCr}}$~WiFj
 	
s   C?Dc                   #    UR                   S;  a=  UR                  5       I Sh  vN   [        SUR                    SUR                   35      e UR                  5       I Sh  vN n[        R
                  " U5      nX0R                  l        U R                  R                  R                  U5      I Sh  vN   g N NZ N	! [         a  n[        SU 35      eSnAff = f7f)zHandle registration response.)r      NzRegistration failed:  zInvalid registration response: )r   r   r)   textr   r   r   rc   rl   re   r   )rW   r   r   rc   es        r$   _handle_registration_response1OAuthClientProvider._handle_registration_response*  s     z1.."""(+@AUAU@VVWX`XeXeWf)ghh	P$NN,,G4HHQK'2LL$,,&&66{CCC # - D 	P(+J1#)NOO	PsX   $C#B=)C#C $B?%AC 7C8C <C#?C C 
C CC  C#c                 .  #    U R                   R                  (       aO  U R                   R                  R                  (       a*  [        U R                   R                  R                  5      nO;U R                   R	                  U R                   R
                  5      n[        US5      nU R                   R                  (       d  [        S5      e[        R                  5       n[        R                  " S5      nSU R                   R                  R                  [        U R                   R                  R                  S   5      UUR                   SS.nU R                   R#                  U R                   R$                  5      (       a  U R                   R'                  5       US'   U R                   R                  R(                  (       a#  U R                   R                  R(                  US	'   U S
[+        U5       3nU R                   R-                  U5      I Sh  vN   U R                   R/                  5       I Sh  vN u  pxUb  [        R0                  " X5      (       d  [        SU SU 35      eU(       d  [        S5      eXsR2                  4$  Nv NV7f)z5Perform the authorization redirect and get auth code.z
/authorizez*No client info available for authorization    coder   S256)response_type	client_idredirect_uristater3   code_challenge_methodr   scope?NzState parameter mismatch: z != zNo authorization code received)r   rr   authorization_endpointrO   r   rj   r
   rc   r   r,   rL   r7   token_urlsafer   rk   redirect_urisr3   r   rt   r   r   r	   rm   rn   compare_digestr2   )	rW   auth_endpointr   pkce_paramsr   auth_paramsauthorization_url	auth_codereturned_states	            r$   _perform_authorization*OAuthClientProvider._perform_authorization8  s    <<&&4<<+F+F+]+] ; ; R RSM LLCCDLLD[D[\M#M<@M||'' !MNN %--/%%b) $11;; < < J J1 MN)88%+
 <<55dll6S6STT&*ll&C&C&EK
#<<''--#'<<#?#?#E#EK ,oQy/E.FGll++,=>>> +/,,*G*G*I$I!	!)?)?)V)V #=n=MTRWQX!YZZ !ABB 3333 	? %Js%   HJJ!J<J=AJJr  r2   c                   #    U R                   R                  (       d  [        S5      eU R                   R                  (       aO  U R                   R                  R                  (       a*  [        U R                   R                  R                  5      nO;U R                   R                  U R                   R                  5      n[        US5      nSU[        U R                   R                  R                  S   5      U R                   R                  R                  US.nU R                   R                  U R                   R                  5      (       a  U R                   R                  5       US'   U R                   R                  R                  (       a#  U R                   R                  R                  US'   [         R"                  " SX5S	S
0S9$ 7f)zBuild token exchange request.zMissing client info/tokenauthorization_coder   )
grant_typer   r   r   r2   r   client_secretr   r   !application/x-www-form-urlencodeddatar   )r   rc   r   rr   token_endpointrO   r   rj   r
   rk   r   r   r   rt   r   r
  r   r   )rW   r  r2   	token_urlr   
token_datas         r$   _exchange_token#OAuthClientProvider._exchange_tokenf  sF    ||'' !677<<&&4<<+F+F+U+UDLL77FFGI LLCCDLLD[D[\Mx8I / < < J J1 MN11;;*

 <<55dll6S6STT%)\\%B%B%DJz"<<##11*.,,*B*B*P*PJ'}}IIl8m
 	
s   GGc                   #    UR                   S:w  a  [        SUR                    35      e UR                  5       I Sh  vN n[        R                  " U5      nUR
                  (       a  U R                  R                  R
                  (       as  [        U R                  R                  R
                  R                  5       5      n[        UR
                  R                  5       5      nXT-
  nU(       a  [        SU 35      eX0R                  l
        U R                  R                  U5        U R                  R                  R                  U5      I Sh  vN   g GN N! [         a  n[        SU 35      eSnAff = f7f)zHandle token exchange response.r   zToken exchange failed: Nz$Server granted unauthorized scopes: zInvalid token response: )r   r&   r   r   r   r   r   rk   setsplitru   r   rl   r^   r   )rW   r   r   token_responserequested_scopesreturned_scopesunauthorized_scopesr   s           r$   _handle_token_response*OAuthClientProvider._handle_token_response  s6    3&!$;H<P<P;Q"RSS	B$NN,,G';;GDN ##(D(D(J(J#&t||'C'C'I'I'O'O'Q#R "%n&:&:&@&@&B"C&5&H#&),PQdPe*fgg*8LL'LL,,^<,,&&11.AAA - B 	B!$<QC"@AA	BsL   )FE! E DE! EE! FE! E! !
E>+E99E>>Fc                   #    U R                   R                  (       a%  U R                   R                  R                  (       d  [        S5      eU R                   R                  (       d  [        S5      eU R                   R
                  (       aO  U R                   R
                  R                  (       a*  [        U R                   R
                  R                  5      nO;U R                   R                  U R                   R                  5      n[        US5      nSU R                   R                  R                  U R                   R                  R                  S.nU R                   R                  U R                   R                  5      (       a  U R                   R                  5       US'   U R                   R                  R                  (       a#  U R                   R                  R                  US'   [         R"                  " SXS	S
0S9$ 7f)zBuild token refresh request.zNo refresh token availablezNo client info availabler  r   )r	  r   r   r   r
  r   r   r  r  )r   ru   r   r&   rc   rr   r  rO   r   rj   r
   r   r   rt   r   r
  r   r   )rW   r  r   refresh_datas       r$   _refresh_token"OAuthClientProvider._refresh_token  sa    ||**$,,2M2M2[2[!">??||''!"<==<<&&4<<+F+F+U+UDLL77FFGI LLCCDLLD[D[\Mx8I *!\\88FF11;;
 <<55dll6S6STT'+||'D'D'FL$<<##11,0LL,D,D,R,RL)}}I>Kn:o
 	
s   H
Hc                 :  #    UR                   S:w  a=  [        R                  SUR                    35        U R                  R	                  5         g UR                  5       I Sh  vN n[        R                  " U5      nX0R                  l        U R                  R                  U5        U R                  R                  R                  U5      I Sh  vN   g Ns N! [         a2    [        R                  S5        U R                  R	                  5          gf = f7f)z:Handle token refresh response. Returns True if successful.r   zToken refresh failed: FNTzInvalid refresh response)r   loggerwarningr   r   r   r   r   ru   r   rl   r^   r   	exception)rW   r   r   r  s       r$   _handle_refresh_response,OAuthClientProvider._handle_refresh_response  s     3&NN3H4H4H3IJKLL%%'	$NN,,G';;GDN*8LL'LL,,^<,,&&11.AAA -
 B  	78LL%%'	sO   ADC $C%A-C CC DC C 9DDDDc                   #    U R                   R                  R                  5       I Sh  vN U R                   l        U R                   R                  R	                  5       I Sh  vN U R                   l        SU l        g NV N7f)z#Load stored tokens and client info.NT)r   rl   rX   ru   ra   rc   r   rV   s    r$   _initializeOAuthClientProvider._initialize  sZ     ,0LL,@,@,K,K,M&M#)-)=)=)M)M)O#O   'N#Os!   (BB:B%B&BBrequestc                     U R                   R                  (       aW  U R                   R                  R                  (       a1  SU R                   R                  R                   3UR                  S'   ggg)z<Add authorization header to request if we have valid tokens.zBearer AuthorizationN)r   ru   r   r   )rW   r)  s     r$   _add_auth_header$OAuthClientProvider._add_auth_header  sP    <<&&4<<+F+F+S+S189T9T9a9a8b/cGOOO, ,T&r#   r   c                 B    [         R                  " SU[        [        0S9$ )Nr   r   )r   r   r   r   )rW   r   s     r$   _create_oauth_metadata_request2OAuthClientProvider._create_oauth_metadata_request  s    }}UC2FH_1`aar#   c                 T  #    UR                  5       I S h  vN n[        R                  " U5      nX0R                  l        U R                  R
                  R                  cC  UR                  b5  SR                  UR                  5      U R                  R
                  l        g g g  N7f)Nr   )	r   r   r   r   rr   rk   r   scopes_supportedrA   r   s       r$   _handle_oauth_metadata_response3OAuthClientProvider._handle_oauth_metadata_response  s~      (( 44W=&.#<<''--5(:S:S:_14(:S:S1TDLL((. ;`5	 )s   B(B&BB(c                6  #    U R                   R                   ISh  vN   U R                  (       d  U R                  5       I Sh  vN   UR                  R                  [        5      U R                   l        U R                   R                  5       (       da  U R                   R                  5       (       aB  U R                  5       I Sh  vN nU7v nU R                  U5      I Sh  vN (       d  SU l        U R                   R                  5       (       a  U R                  U5        U7v nUR                  S:X  GaY   U R                  U5      I Sh  vN nU7v nU R                  U5      I Sh  vN   U R!                  5       nU Hg  nU R#                  U5      n	U	7v n
U
R                  S:X  a   U R%                  U
5      I Sh  vN     O&U
R                  S:  d  U
R                  S:  d  Mg    O   U R)                  5       I Sh  vN nU(       a  U7v nU R+                  U5      I Sh  vN   U R-                  5       I Sh  vN u  pU R/                  X5      I Sh  vN nU7v nU R1                  U5      I Sh  vN   U R                  U5        U7v   SSS5      ISh  vN   g GN GNf GN GN GNa GNF N! [&         a     GMB  f = f N N N Nu NY! [2         a    [4        R7                  S5        e f = f NY! , ISh  vN  (       d  f       g= f7f)zHTTPX auth flow integration.NFr   r   i  i  zOAuth flow error)r   rx   r   r'  r   r   r   rt   r   r   r  r$  r,  r   r   r   r   r/  r3  r   r   r   r  r  r  	Exceptionr!  r#  )rW   r)  refresh_requestrefresh_responser   discovery_requestdiscovery_responsediscovery_urlsr   oauth_metadata_requestoauth_metadata_responseregistration_requestregistration_responser  r2   token_requestr  s                    r$   async_auth_flow#OAuthClientProvider.async_auth_flow  s    <<$$$$$&&((( -4OO,?,?@T,UDLL)<<..00T\\5S5S5U5U(,(;(;(="=)8#8 !::;KLLL(-D%||**,,%%g.$}H##s*% /3.O.OPX.Y(Y%/@)@&BBCUVVV &*%=%=%?N-151T1TUX1Y.8N2N/2>>#E)&*&J&JKb&c c c % 5@@3FJaJmJmqtJt!  . 261F1F1H+H(+6J0J-"@@AVWWW 6:5P5P5R/R,I +/*>*>y*X$XM+8%8N55nEEE %%g.A %$$( #> M )ZV !d#2 ) () ,I X 0S %YE  $$%78u %$$$sH  LJ)L%K?J,BK?
J/K?(J2)AK? KJ5K2J83?K3J=J;J= K0KK$K,K-KKKK K=K>KK?L#K=$L,K?/K?2K?5K8K;J==
KKKKKKKK!K::K?=L?LLLL)r   r   )ro   r   )%r   r   r   r    r!   requires_response_bodyrO   r   rS   r   r   r   r   r   r   Responser   r   r   r   listr   r   r   r  r  r  r  r   r$  r'  r,  r/  r3  r   rA  r"   r   r#   r$   r   r      s   
 " "" -" 	"
 #C5)D/#9:" #2ysC$J1G'H#HI" "(enn Y\_cYc 0	b 	bSXS`S` 	b
%.. 
UY 
T#Y 6
(< 
"PENN Pt P,4eCHo ,4\
s 
3 
5== 
<BU^^ B B.
emm 
>u~~ $ *!d d$ d
b# b%-- bUenn UQU UBU]] B~emm]b]k]kNk?l Br#   r   )4r!   rG   rC   loggingr   r7   r9   r   collections.abcr   r   r   dataclassesr   r   typingr   urllib.parser	   r
   r   r   r   pydanticr   r   r   mcp.client.streamable_httpr   mcp.shared.authr   r   r   r   r   mcp.shared.auth_utilsr   r   	mcp.typesr   	getLoggerr   r!  r6  r   r&   r)   r,   rS   rh   Authr   r   r#   r$   <module>rR     s       	    ? ? (  5 5   6 6 ;  W -			8	$0Y 0-n -1^ 1OY O8 ( [0 [0 [0|t%** tr#   