o
    ùT·j j  ã                   @  sZ  U d dl mZ d dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZ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mZmZmZmZ ddlmZmZm Z  ddl!m"Z"m#Z#m$Z$m%Z% dZ&dZ'dZ(dZ)dZ*dZ+h d£Z,e -d¡Z.e&dddœZ/dd„ e/ 0¡ D ƒZ1eddd�Z2de3d< G dd„ de4ƒZ5ddœdud&d'„Z6dvd*d+„Z7dvd,d-„Z8dwd3d4„Z9G d5d6„ d6ej:ƒZ;G d7d8„ d8ej<ƒZ=dd9d:œdxd=d>„Z>dd9d:œdyd@dA„Z?dzdEdF„Z@d{dJdK„ZAd|dPdQ„ZBd}dUdV„ZCd~dXdY„ZDddZd[„ZEd€d]d^„ZFd�dcdd„ZGd‚dedf„ZHdƒdhdi„ZId„dmdn„ZJG dodp„ dpee ƒZKG dqdr„ dreKƒZLG dsdt„ dteKƒZMdS )…é    )ÚannotationsN)ÚAnyÚNoReturnÚcast)Ú
ContextVar)ÚTypeIsÚoverrideé   )Úis_dict)Útimeout_exceptionsÚnormalize_httpx_urlÚ_loaded_legacy_httpxé   )ÚTOKEN_EXCHANGE_GRANT_TYPEÚWorkloadIdentityÚX509WorkloadIdentityÚ_WorkloadIdentityAuth)ÚMAX_RETRY_DELAYÚINITIAL_RETRY_DELAYÚMAX_RETRY_AFTER_DELAY)Ú
OAuthErrorÚOpenAIErrorÚAPITimeoutErrorÚAPIConnectionErrorzhttps://mtls.api.openai.com/v1z(https://mtls.auth.openai.com/oauth/tokenz'urn:openai:params:oauth:token-type:x509Úopenai_x509_replay_positionÚ!openai_x509_replay_file_positions>   ÚtypeÚservice_account_idÚidentity_provider_idÚrefresh_buffer_secondsz[A-Za-z0-9._~+/-]+=*z!https://mtls-us.api.openai.com/v1z!https://mtls-eu.api.openai.com/v1)ÚglobalÚusÚeuc                 C  s   h | ]}t  |¡j’qS © )Úhttpx2ÚURLÚhost)Ú.0Úurlr#   r#   úT/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/openai/auth/_x509.pyÚ	<setcomp>&   s    r*   Ú$openai_x509_exchange_request_timeout)Údefaultz*ContextVar[dict[str, float | None] | None]Ú_EXCHANGE_REQUEST_TIMEOUTc                   @  s   e Zd Zddd„ZdS )	Ú_TransientTokenExchangeErrorÚerrorr   ÚreturnÚNonec                 C  s
   || _ d S ©N)r/   )Úselfr/   r#   r#   r)   Ú__init__-   s   
z%_TransientTokenExchangeError.__init__N)r/   r   r0   r1   )Ú__name__Ú
__module__Ú__qualname__r4   r#   r#   r#   r)   r.   ,   s    r.   ©Úexpected_originr(   úhttpx2.URL | strr9   úhttpx2.URL | Noner0   r1   c                C  sd   t | ƒ}|jdks|jstdƒ‚|js|jrtdƒ‚|d ur.|j|jf|j|jfkr0tdƒ‚d S d S )NÚhttpsz:X.509 workload identity requires an absolute HTTPS API URLz@X.509 workload identity API URLs cannot contain user credentialszCX.509 workload identity requests must use the configured API origin)r   Úschemer&   r   ÚusernameÚpasswordÚport)r(   r9   Únormalized_urlr#   r#   r)   Úvalidate_x509_api_url1   s   þürB   Úrequestúhttpx2.Requestc                 C  s    t dd„ | jD ƒƒrtdƒ‚d S )Nc                 s  ó$   � | ]}|  ¡  d d¡dv V  qdS )Ú_ú-)úapi-keyú	x-api-keyúproxy-authorizationN©ÚlowerÚreplace©r'   Úheaderr#   r#   r)   Ú	<genexpr>A   s
   € ÿ
ÿz0validate_x509_api_credentials.<locals>.<genexpr>zLX.509 workload identity requests cannot include API-key or proxy credentials)ÚanyÚheadersr   ©rC   r#   r#   r)   Úvalidate_x509_api_credentials@   s
   þürT   c              
     sÒ   | j  d¡‰ tˆ ƒdks!t‡ fdd„dD ƒƒs!tdd„ | j D ƒƒr%tdƒ‚zt dˆ d	 › �¡}W n tjyC } ztd
ƒ|‚d }~ww |jsc|j	sc|j
dksc|jsc|jsc|j|jf| jj| jjfkrgtdƒ‚d S )Nr&   r   c                 3  s   � | ]	}|ˆ d  v V  qdS )r   Nr#   )r'   Ú	delimiter©Úhost_headersr#   r)   rP   L   s   € z2validate_x509_request_authority.<locals>.<genexpr>z/?#@\c                 s  s   � | ]}|  d ¡V  qdS )ú:N)Ú
startswithrN   r#   r#   r)   rP   M   s   € zIX.509 workload identity requests require exactly one valid Host authorityzhttps://r   z?X.509 workload identity requests require a valid Host authorityú/zAX.509 workload identity Host authority must match the request URL)rR   Úget_listÚlenrQ   r   r$   r%   Ú
InvalidURLr>   r?   ÚpathÚqueryÚfragmentr&   r@   r(   )rC   Úhost_urlr/   r#   rV   r)   Úvalidate_x509_request_authorityH   s2   ÿþ
€ÿÿþ
ÿþþrb   ú
httpx2.URLÚexpected_authorizationú
str | NoneÚtoken_exchangeÚboolc                C  sà   t | j|d� t| ƒ | j d¡}|d ur|| jjkrtdƒ‚| j d¡}| jjtv rA|d urAt	|t
ƒr=| ¡ |j ¡ krAtdƒ‚|r^t
| jƒtkrNtdƒ‚tdd„ | jD ƒƒr\td	ƒ‚d S t| ƒ | j d
¡|krntdƒ‚d S )Nr8   ÚtargetzAX.509 workload identity request target must match the request URLÚsni_hostnamezEX.509 workload identity TLS hostname must match the configured originzDX.509 token exchange requests must use the pinned authentication URLc                 s  rE   )rF   rG   )ÚauthorizationrJ   ÚcookierI   rH   NrK   rN   r#   r#   r)   rP   w   s   € þÿ
ÿz._validate_transport_request.<locals>.<genexpr>z<X.509 token exchange requests cannot include API credentialsÚAuthorizationzMX.509 workload identity authorization cannot be changed by HTTP request hooks)rB   r(   rb   Ú
extensionsÚgetÚraw_pathr   r&   Ú_OPENAI_MTLS_HOSTSÚ
isinstanceÚstrrL   Ú_X509_TOKEN_EXCHANGE_URLrQ   rR   rT   )rC   r9   rd   rf   rh   ri   r#   r#   r)   Ú_validate_transport_requesta   s*   ýûÿrt   c                   @  ó2   e Zd Zddd„Zeddd„ƒZeddd„ƒZdS )Ú_SyncX509ForwardingTransportÚhttp_clientúhttpx2.Clientr9   rc   rd   re   rf   rg   r0   r1   c                C  ó   || _ || _|| _|| _d S r2   ©Ú_http_clientÚ_expected_originÚ_expected_authorizationÚ_token_exchange©r3   rw   r9   rd   rf   r#   r#   r)   r4   „   ó   
z%_SyncX509ForwardingTransport.__init__rC   rD   úhttpx2.Responsec                 C  s:   t || j| j| jd� | jjrtdƒ‚| j |j¡ 	|¡S ©N)r9   rd   rf   z5Cannot send a request, as the client has been closed.)
rt   r|   r}   r~   r{   Ú	is_closedÚRuntimeErrorÚ_transport_for_urlr(   Úhandle_request©r3   rC   r#   r#   r)   r†   ‘   s   üz+_SyncX509ForwardingTransport.handle_requestc                 C  s   d S r2   r#   ©r3   r#   r#   r)   Úclose�   s   z"_SyncX509ForwardingTransport.closeN)
rw   rx   r9   rc   rd   re   rf   rg   r0   r1   ©rC   rD   r0   r�   ©r0   r1   )r5   r6   r7   r4   r   r†   r‰   r#   r#   r#   r)   rv   ƒ   ó    
rv   c                   @  ru   )Ú_AsyncX509ForwardingTransportrw   úhttpx2.AsyncClientr9   rc   rd   re   rf   rg   r0   r1   c                C  ry   r2   rz   r   r#   r#   r)   r4   ¤   r€   z&_AsyncX509ForwardingTransport.__init__rC   rD   r�   c                 Ã  sB   �t || j| j| jd� | jjrtdƒ‚| j |j¡ 	|¡I d H S r‚   )
rt   r|   r}   r~   r{   rƒ   r„   r…   r(   Úhandle_async_requestr‡   r#   r#   r)   r�   ±   s   €üz2_AsyncX509ForwardingTransport.handle_async_requestc                 Ã  s   �d S r2   r#   rˆ   r#   r#   r)   Úaclose½   s   €z$_AsyncX509ForwardingTransport.acloseN)
rw   rŽ   r9   rc   rd   re   rf   rg   r0   r1   rŠ   r‹   )r5   r6   r7   r4   r   r�   r�   r#   r#   r#   r)   r�   £   rŒ   r�   F)rd   rf   rw   rx   c                C  ól   t | |||d�}tƒ }tj}|d urttt| ƒtjƒs|j}||| j|r&d n| j| j	dd�}|s4| j
|_|S ©N)rw   r9   rd   rf   F)Ú	transportÚtimeoutÚevent_hooksÚdefault_encodingÚ	trust_env)rv   r   r$   ÚClientrq   r   Úobjectr”   r•   Ú_default_encodingÚcookiesÚ_cookies©rw   r9   rd   rf   r“   Úlegacy_httpxÚclient_typeÚscoped_clientr#   r#   r)   Ú_scoped_sync_clientÃ   ó(   üûr¡   rŽ   c                C  r‘   r’   )r�   r   r$   ÚAsyncClientrq   r   r™   r”   r•   rš   r›   rœ   r�   r#   r#   r)   Ú_scoped_async_clientà   r¢   r¤   Úvaluer™   úfloat | Nonec                 C  sP   t | tƒst | ttfƒsd S zt| ƒ} W n
 ty   Y d S w t | ¡r&| S d S r2   )rq   rg   ÚintÚfloatÚOverflowErrorÚmathÚisfinite)r¥   r#   r#   r)   Ú_as_finite_floatý   s   ÿr¬   Úidentityú.WorkloadIdentity | X509WorkloadIdentity | NoneúTypeIs[X509WorkloadIdentity]c                 C  s   | d uo
|   d¡dkS )Nr   Úx509)rn   ©r­   r#   r#   r)   Úis_x509_workload_identity  s   r²   Úbase_urlúhttpx2.URL | str | NoneÚdata_residencyÚworkload_identityc                 C  s,   |d u st |ƒs
| S |tvrtdƒ‚t| S )NzCX.509 workload identity requires a supported regional mTLS endpoint)r²   Ú_MTLS_REGIONAL_BASE_URLSr   )r³   rµ   r¶   r#   r#   r)   Úx509_data_residency_base_url  s
   r¸   rR   údict[str, str]úX509WorkloadIdentity | Nonec                 C  s   |d u r| S dd„ |   ¡ D ƒS )Nc                 S  s"   i | ]\}}|  ¡ d kr||“qS )rj   )rL   )r'   Únamer¥   r#   r#   r)   Ú
<dictcomp>  s   " z1x509_safe_environment_headers.<locals>.<dictcomp>)Úitems)rR   r¶   r#   r#   r)   Úx509_safe_environment_headers  s   r¾   r   c                   sŠ   dˆ v sdˆ v rt dƒ‚tˆ ƒt rt dƒ‚t‡ fdd„dD ƒƒr%t dƒ‚ttˆ  d	¡ƒ}|d urAt|ƒ}|d u s=|d
k rCt dƒ‚d S d S )NÚproviderÚ	client_idzMX.509 workload identity does not accept a subject-token provider or client IDzPX.509 workload identity accepts only identity IDs and an optional refresh bufferc                 3  s.   � | ]}t ˆ  |¡tƒ pˆ  |¡ V  qd S r2   )rq   rn   rr   )r'   Úfieldr±   r#   r)   rP   (  s
   € ÿ
ÿz%_validate_identity.<locals>.<genexpr>)r   r   zJX.509 workload identity requires identity-provider and service-account IDsr   r   zFX.509 workload identity requires a finite, non-negative refresh buffer)r   ÚsetÚ_ALLOWED_IDENTITY_FIELDSrQ   r   r™   rn   r¬   )r­   Úrefresh_bufferÚrefresh_buffer_valuer#   r±   r)   Ú_validate_identity!  s   þýrÆ   c                 C  s   t t| d | d dœS )Nr   r   )Ú
grant_typeÚsubject_token_typer   r   )r   Ú_X509_SUBJECT_TOKEN_TYPEr±   r#   r#   r)   Ú_exchange_payload8  s
   ürÊ   ú"httpx2.Client | httpx2.AsyncClientc                C  s„   t j}tƒ }|d ur"ttt|ƒt jt jfƒs"ttt j tt	|ƒjƒ}t
 ¡ }dd„ |p1t  d¡ ¡  ¡ D ƒ}|dtt| ƒd|id�S )Nc                 S  s(   i | ]\}}||d urt |dƒnd“qS )Nç      $@)Úmin)r'   Úphaser¥   r#   r#   r)   r¼   L  s    ÿÿz+_token_exchange_request.<locals>.<dictcomp>rÌ   ÚPOSTr”   )Újsonrm   )r$   ÚRequestr   rq   r   r™   r˜   r£   r   r   r-   rn   ÚTimeoutÚas_dictr½   rs   rÊ   )r­   rw   Úrequest_typerž   Úconfigured_timeoutr”   r#   r#   r)   Ú_token_exchange_requestA  s    þürÖ   Úresponseúhttpx2.Response | NoneÚattemptr§   c                 C  sz  | d ur²| j  d¡}| jdv s|dkrd S |dkr%| jdvr%| jdk r%d S | j  d¡}| j  d¡}|d ur^zt|ƒd	 }W n	 tyF   Y nw t |¡rXd
|  krWtkrX|S  |tkr^d S |d ur²zt|ƒ}W n2 tyš   ztj	 
|¡}|d ur†ttj	 |¡t ¡  ƒnd}W n tttfy—   d}Y nw Y nw t |¡r¬d
|  kr«tkr¬|S  |tkr²d S tttd|  tƒƒS )Núx-should-retry©i�  i‘  i“  ÚfalseÚtrue©i˜  i™  i­  éô  zretry-after-mszretry-afteriè  r   éÿÿÿÿr	   )rR   rn   Ústatus_coder¨   Ú
ValueErrorrª   r«   r   ÚemailÚutilsÚparsedate_tzÚ	mktime_tzÚtimer©   ÚOSErrorrÍ   r   r   )r×   rÙ   Úshould_retryÚretry_after_msÚretry_afterÚmillisecond_delayÚdelayÚparsedr#   r#   r)   Ú_retry_delayX  sJ   ÿÿ(ÿ€üÿrï   c              
   C  sŠ  t t| dd ƒtƒrdS | j}t|dd ƒ}t |tƒr…g }ttt |ƒD ][}t|dd ƒ}|d u s5t |ttfƒr6q"t|dd ƒ}t|dd ƒ}t|dd ƒ}zt|ƒrX|ƒ rXt|ƒrXt|ƒs\W  dS |ƒ }	W n t	t
fym   Y  dS w t |	tƒsv dS | ||	f¡ q"|| jt< dS t|d	|ƒ}
t|
dd ƒ}t|
dd ƒ}t|
dd ƒ}zt|ƒr­|ƒ r­t|ƒr­t|ƒs°W dS |ƒ | jt< W dS  t	t
fyÄ   Y dS w )
NÚ_contentTÚfieldsÚfileÚseekableÚseekÚtellFÚ_stream)rq   ÚgetattrÚbytesÚstreamÚlistr   r™   rr   Úcallablerè   râ   r§   Úappendrm   Ú _REPLAY_FILE_POSITIONS_EXTENSIONÚ_REPLAY_POSITION_EXTENSION)rC   rù   rñ   Úfile_positionsrÁ   rò   ró   rô   rõ   ÚpositionÚsourcer#   r#   r)   Ú_is_replayable_request~  sJ   

ÿ

þÿr  útuple[type[Exception], ...]c                  C  s8   t ƒ } | d u rtjfS ttt t| dtjƒƒ}tj|fS )NÚTransportError)r   r$   r  r   r   Ú	Exceptionr÷   )rž   Úlegacy_transport_errorr#   r#   r)   Ú_transport_errors¦  s
   
r  r/   r  r   c                C  s$   t | tƒ ƒrt|d�| ‚t|d�| ‚)NrS   )rq   r   r   r   )r/   rC   r#   r#   r)   Ú_raise_transport_error®  s   r  c                      s€   e Zd Zd!‡ fdd„Zed"‡ fdd„ƒZed#dd„ƒZed$dd„ƒZed%dd„ƒZd&dd„Z	ed'‡ fdd„ƒZ
d"dd „Z‡  ZS )(Ú_X509WorkloadIdentityAuthr¶   r   Úmax_retriesr§   r0   r1   c                  s4   t |ƒ tƒ j|td� tt|dƒtƒ| _d| _d S )N)r¶   Útoken_exchange_urlr   F)	rÆ   Úsuperr4   rs   rÍ   ÚmaxÚ_MAX_EXCHANGE_RETRIESÚ_max_exchange_retriesÚ_follow_redirects)r3   r¶   r
  ©Ú	__class__r#   r)   r4   µ  s   
z"_X509WorkloadIdentityAuth.__init__r×   r�   údict[str, Any]c                   sÒ   |j dvr6tƒ  |¡}| ¡ }| d¡}d|v r't|tƒr#| ¡ dkr'tdƒ‚t	 
|d ¡d u r4tdƒ‚|S z|jr>| ¡ nd }W n tyL   d }Y nw t|ƒrV| d¡nd }t|tƒrad|ind }t||d�‚)	NrÛ   Ú
token_typeÚbearerz<X.509 token exchange response must use the Bearer token typeÚaccess_tokenzIX.509 token exchange response did not include a valid Bearer access_tokenr/   )r×   Úbody)rá   r  Ú_handle_token_responserÐ   rn   rq   rr   rL   r   Ú_BEARER_ACCESS_TOKENÚ	fullmatchÚcontentrâ   r
   r   )r3   r×   Ú
token_dataÚresponse_bodyr  Úoauth_errorÚ	safe_bodyr  r#   r)   r  »  s"   

ÿz0_X509WorkloadIdentityAuth._handle_token_responseÚ
expires_inr™   r¨   c                 C  s$   t |ƒ}|d u s|dkrtdƒ‚|S )Nr   zKX.509 token exchange response did not include a positive, finite expires_in)r¬   r   )r3   r   Úexpires_in_valuer#   r#   r)   Ú_validate_expires_inÐ  s   z._X509WorkloadIdentityAuth._validate_expires_inrC   rD   rg   c                 C  s   t |ƒS r2   )r  r‡   r#   r#   r)   Ú_can_retry_request×  s   z,_X509WorkloadIdentityAuth._can_retry_requestc                 C  s¤   |j  t¡}t|tƒr+tttttf  |ƒD ]\}}t	|dd ƒ}t
|ƒr(||ƒ qd S |j  t¡}t|tƒs8d S t	|jd|jƒ}t	|dd ƒ}t
|ƒrP||ƒ d S d S )Nrô   rö   )rm   rn   rý   rq   rú   r   Útupler™   r§   r÷   rû   rþ   rù   )r3   rC   rÿ   rò   Úfile_positionrô   r   r  r#   r#   r)   Ú_prepare_retry_requestÛ  s    
€
ÿz0_X509WorkloadIdentityAuth._prepare_retry_requestre   c                 C  sX   | j � |  ¡ r	 W d   ƒ d S t ¡ t | _| jW  d   ƒ S 1 s%w   Y  d S r2   )Ú_lockÚ_token_unusablerç   Ú	monotonicr   Ú"_cached_token_refresh_at_monotonicÚ_cached_tokenrˆ   r#   r#   r)   Ú%_usable_token_after_transient_failureí  s   þ$üz?_X509WorkloadIdentityAuth._usable_token_after_transient_failurec              	     s8   zt ƒ  ¡  W d S  ttfy   |  ¡ d u r‚ Y d S w r2   )r  Ú_perform_refreshr   r.   r,  rˆ   r  r#   r)   r-  ô  s   ÿÿz*_X509WorkloadIdentityAuth._perform_refreshc              
   C  s`   z|   |¡W S  ty/ } z|jdv s%|jdks%|jdvr*|j d¡dkr*t|ƒ|‚‚ d }~ww )NrÞ   rß   rÛ   rÚ   rÝ   )r  r   rá   rR   rn   r.   )r3   r×   r/   r#   r#   r)   Ú_handle_exchange_responseü  s   


€ùz3_X509WorkloadIdentityAuth._handle_exchange_response)r¶   r   r
  r§   r0   r1   )r×   r�   r0   r  )r   r™   r0   r¨   ©rC   rD   r0   rg   ©rC   rD   r0   r1   )r0   re   r‹   )r5   r6   r7   r4   r   r  r"  r#  r&  r,  r-  r.  Ú__classcell__r#   r#   r  r)   r	  ´  s    
r	  c                      sJ   e Zd ZU ded< d‡ fd
d„Zd dd„Zd!dd„Zed"dd„ƒZ‡  Z	S )#ÚSyncX509WorkloadIdentityAuthrx   r{   r¶   r   rw   r
  r§   r0   r1   c                  s   t ƒ j||d� || _d S ©N)r¶   r
  )r  r4   r{   ©r3   r¶   rw   r
  r  r#   r)   r4     s   
z%SyncX509WorkloadIdentityAuth.__init__rC   rD   r9   rc   rd   re   rù   rg   Úkwargsr   r�   c                K  sV   t | j||d��}| dd ¡ |j|fd|i|¤ŽW  d   ƒ S 1 s$w   Y  d S ©N)r9   rd   Úauthrù   )r¡   r{   Ú
setdefaultÚsend©r3   rC   r9   rd   rù   r5  r    r#   r#   r)   Úsend_api_request  s   	ÿ$üz-SyncX509WorkloadIdentityAuth.send_api_requestrr   c              
   C  s”   t  |j d¡¡}z:z|  ¡ W W t  |¡ S  ttfyC } z |  ¡ }|d u r1t	|tƒr0|j
d ‚‚ |W  Y d }~W t  |¡ S d }~ww t  |¡ w ©Nr”   )r-   rÂ   rm   rn   Ú	get_tokenÚresetr   r.   r,  rq   r/   ©r3   rC   Útimeout_tokenr/   Útokenr#   r#   r)   Úget_token_for_request!  s    
	ø
€øz2SyncX509WorkloadIdentityAuth.get_token_for_requestr  c                 C  sú   t | jd ƒD ]q}t| j| jd�}z%t| jt t¡dd��}|j	|d dd�}W d   ƒ n1 s0w   Y  W n# t
ƒ yY } z|| jkrJt||d� td |ƒ}W Y d }~nd }~ww t||ƒ}|| jksh|d u ro|  |¡  S |d urxt |¡ qtdƒ‚©	Nr   )rw   T)r9   rf   F)r7  Úfollow_redirectsrS   z6X.509 token exchange retry loop exhausted unexpectedly)Úranger  rÖ   r¶   r{   r¡   r$   r%   rs   r9  r  r  rï   r.  rç   ÚsleepÚAssertionError©r3   rÙ   Úexchange_requestr    r×   r/   rí   r#   r#   r)   Ú_fetch_token_from_exchange0  s:   ýýû€

€ý

€z7SyncX509WorkloadIdentityAuth._fetch_token_from_exchange)r¶   r   rw   rx   r
  r§   r0   r1   ©rC   rD   r9   rc   rd   re   rù   rg   r5  r   r0   r�   ©rC   rD   r0   rr   ©r0   r  )
r5   r6   r7   Ú__annotations__r4   r;  rB  r   rJ  r1  r#   r#   r  r)   r2  	  s   
 

r2  c                      sT   e Zd ZU ded< d!‡ fd
d„Zd"dd„Zd#dd„Zed$dd„ƒZd%dd „Z	‡  Z
S )&ÚAsyncX509WorkloadIdentityAuthrŽ   r{   r¶   r   rw   r
  r§   r0   r1   c                  s$   t ƒ j||d� || _t ¡ | _d S r3  )r  r4   r{   ÚanyioÚLockÚ_async_lockr4  r  r#   r)   r4   Q  s   z&AsyncX509WorkloadIdentityAuth.__init__rC   rD   r9   rc   rd   re   rù   rg   r5  r   r�   c             	   Ë  sr   �t | j||d�4 I d H š}| dd ¡ |j|fd|i|¤ŽI d H W  d   ƒI d H  S 1 I d H s2w   Y  d S r6  )r¤   r{   r8  r9  r:  r#   r#   r)   r;  X  s   €	ÿ0üz.AsyncX509WorkloadIdentityAuth.send_api_requestrr   c              
   Ã  sœ   �t  |j d¡¡}z=z|  ¡ I d H W W t  |¡ S  ttfyG } z |  ¡ }|d u r5t	|tƒr4|j
d ‚‚ |W  Y d }~W t  |¡ S d }~ww t  |¡ w r<  )r-   rÂ   rm   rn   Úget_token_asyncr>  r   r.   r,  rq   r/   r?  r#   r#   r)   rB  g  s"   €	ø
€øz3AsyncX509WorkloadIdentityAuth.get_token_for_requestc              
   Ã  sJ  �| j 4 I d H š� | j�' |  ¡ s,|  ¡ s,tt| jƒW  d   ƒ W  d   ƒI d H  S W d   ƒ n1 s6w   Y  z	|  ¡ I d H }W n  tt	fyd   |  
¡ }|d u rV‚ | Y W  d   ƒI d H  S w |  |¡ | j� tt| jƒW  d   ƒ W  d   ƒI d H  S 1 sˆw   Y  W d   ƒI d H  d S 1 I d H sžw   Y  d S r2   )rR  r'  r(  Ú_needs_refreshr   rr   r+  Ú _fetch_token_from_exchange_asyncr   r.   r,  Ú_store_token)r3   r  rA  r#   r#   r)   rS  v  s2   €
þÿ€õ

ÿó.óz-AsyncX509WorkloadIdentityAuth.get_token_asyncr  c                 Ã  s  �t | jd ƒD ]�}t| j| jd�}z2t| jt t¡dd�4 I d H š}|j	|d dd�I d H }W d   ƒI d H  n1 I d H s>w   Y  W n# t
ƒ yg } z|| jkrXt||d� td |ƒ}W Y d }~nd }~ww t||ƒ}|| jksv|d u r}|  |¡  S |d ur‰t |¡I d H  qtdƒ‚rC  )rE  r  rÖ   r¶   r{   r¤   r$   r%   rs   r9  r  r  rï   r.  rP  rF  rG  rH  r#   r#   r)   rU  ˆ  s<   €ýý(û€

€ý
€z>AsyncX509WorkloadIdentityAuth._fetch_token_from_exchange_async)r¶   r   rw   rŽ   r
  r§   r0   r1   rK  rL  )r0   rr   rM  )r5   r6   r7   rN  r4   r;  rB  r   rS  rU  r1  r#   r#   r  r)   rO  N  s   
 

rO  )r(   r:   r9   r;   r0   r1   r0  )
rC   rD   r9   rc   rd   re   rf   rg   r0   r1   )
rw   rx   r9   rc   rd   re   rf   rg   r0   rx   )
rw   rŽ   r9   rc   rd   re   rf   rg   r0   rŽ   )r¥   r™   r0   r¦   )r­   r®   r0   r¯   )r³   r´   rµ   re   r¶   r®   r0   r´   )rR   r¹   r¶   rº   r0   r¹   )r­   r   r0   r1   )r­   r   r0   r¹   )r­   r   rw   rË   r0   rD   )r×   rØ   rÙ   r§   r0   r¦   r/  )r0   r  )r/   r  rC   rD   r0   r   )NÚ
__future__r   Úrerª   rç   Úemail.utilsrã   Útypingr   r   r   Úcontextvarsr   Útyping_extensionsr   r   rP  r$   Ú_utilsr
   Ú_httpx2r   r   r   Ú	_workloadr   r   r   r   Ú
_constantsr   r   r   Ú_exceptionsr   r   r   r   ÚMTLS_API_BASE_URLrs   rÉ   r  rþ   rý   rÃ   Úcompiler  r·   Úvaluesrp   r-   rN  r  r.   rB   rT   rb   rt   ÚBaseTransportrv   ÚAsyncBaseTransportr�   r¡   r¤   r¬   r²   r¸   r¾   rÆ   rÊ   rÖ   rï   r  r  r  r	  r2  rO  r#   r#   r#   r)   Ú<module>   st    
ýÿ


" $û!û







	

&
(
UE