§
    ÜŽ’jE!  ã                  óÊ   — U d dl mZ d dlZd dlZd dlZd dlmZ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 dd	lmZ d
gZ ej        e¦  «        Zded<   dZ G d„ d
¦  «        ZdS )é    )ÚannotationsN)ÚCallableÚOptionalé   )ÚAccessTokenÚAccessTokenProvider)ÚWorkloadIdentityError)ÚADVISORY_REFRESH_SECONDSÚMANDATORY_REFRESH_SECONDSé   )ÚAnthropicErrorÚ
TokenCachezlogging.LoggerÚlogé   c                  óN   — e Zd ZdZeeej        dœdd„Zdd„Zdd„Z	dd„Z
dd„ZdS )r   u2  Thread-safe cache wrapping an :class:`AccessTokenProvider` with two-tier
    proactive refresh and single-flight semantics.

    Refresh policy on each :meth:`get_token` call:

    * No cached token â†’ call provider (blocking), cache, return.
    * Cached with ``expires_at=None`` â†’ return cached forever (never refresh).
    * More than ``advisory_refresh_seconds`` remaining â†’ return cached.
    * Between ``mandatory_refresh_seconds`` and ``advisory_refresh_seconds``
      remaining (advisory window) â†’ try provider; on success swap cache; on
      failure log a warning and return the stale cached token. If another
      caller is already refreshing, the advisory caller just returns the
      cached token â€” no second refresh, no waiting.
    * Less than ``mandatory_refresh_seconds`` remaining or already expired
      (mandatory window) â†’ call provider; on failure RAISE. Concurrent
      mandatory callers wait on a shared ``Event`` so exactly one provider
      call is in flight.

    The lock is released before the provider call so a 30-second HTTP POST
    doesn't serialize unrelated callers through a single thread. This matters
    under async: ``asyncify(get_token)`` runs on the thread pool, and holding
    the lock across the network call would pin an async worker for the whole
    exchange.
    )Úadvisory_refresh_secondsÚmandatory_refresh_secondsÚtime_sourceÚproviderr   r   Úintr   r   úCallable[[], float]ÚreturnÚNonec               ó¦   — || _         || _        || _        || _        t	          j        ¦   «         | _        d | _        d | _        d| _	        d| _
        d S )NFg        )Ú	_providerÚ	_advisoryÚ
_mandatoryÚ_time_sourceÚ	threadingÚLockÚ_lockÚ_cachedÚ_refresh_eventÚ_next_forceÚ_last_advisory_failure_time)Úselfr   r   r   r   s        úNC:\Projects\DSCons\.venv\Lib\site-packages\anthropic\lib\credentials\_cache.pyÚ__init__zTokenCache.__init__3   s[   € ð "ˆŒØ1ˆŒØ3ˆŒØ'ˆÔÝ”^Ñ%Ô%ˆŒ
Ø.2ˆŒð :>ˆÔð !ˆÔð 36ˆÔ(Ð(Ð(ó    ÚforceÚboolr   c               óª   — 	 |                       |¬¦  «        S # t          $ r0}dt          |¦  «        vr‚ |                       ¦   «         cY d}~S d}~ww xY w)z@Invoke ``self._provider``, tolerating legacy zero-arg callables.)Úforce_refreshr-   N)r   Ú	TypeErrorÚstr)r&   r*   Úerrs      r'   Ú_invoke_providerzTokenCache._invoke_providerL   so   € ð	$Ø—>’>°�>Ñ6Ô6Ð6øÝð 	$ð 	$ð 	$ð ¥c¨#¡h¤hÐ.Ð.ØØ—>’>Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#øøøøð	$øøøs   ‚ ˜
A¢%AÁAÁAc                ót  — | j         5  | j        }ddd¦  «         n# 1 swxY w Y   	 |                      |¬¦  «        }nS# t          $ rF}|j        dk    r‚ t
                               d¦  «         |                      d¬¦  «        }Y d}~nd}~ww xY w| j         5  d| _        ddd¦  «         n# 1 swxY w Y   |S )zBCall the provider, retrying once on a 401 from the token endpoint.N)r*   i‘  z*Token provider returned 401; retrying onceTF)r!   r$   r1   r	   Ústatus_coder   Údebug)r&   r*   Úresultr0   s       r'   Ú_call_providerzTokenCache._call_providerX   sT  € ð ŒZð 	%ð 	%ØÔ$ˆEð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð	7Ø×*Ò*°Ð*Ñ7Ô7ˆFˆFøÝ$ð 	7ð 	7ð 	7ØŒ #Ò%Ð%ØÝ�IŠIÐBÑCÔCÐCØ×*Ò*°Ð*Ñ6Ô6ˆFˆFˆFˆFˆFˆFøøøøð		7øøøð
 ŒZð 	%ð 	%Ø$ˆDÔð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%àˆs3   ˆœ £ ¨? ¿
BÁ	<B
Â
BÂB-Â-B1Â4B1r/   c                óê  — 	 d}d}| j         5  | j        }|�Â|j        €|j        cddd¦  «         S |j        |                      ¦   «         z
  }|| j        k    r|j        cddd¦  «         S || j        k    rc| j        �|j        cddd¦  «         S |                      ¦   «         | j        z
  t          k     r|j        cddd¦  «         S |}t          |¦  «        }| j        �| j        }nt          j        ¦   «         | _        d}ddd¦  «         n# 1 swxY w Y   |�|                     ¦   «          �Œ0	 |                      ¦   «         }nÛ# t          $ rÎ}| j         5  | j        }d| _        ddd¦  «         n# 1 swxY w Y   |€J ‚|                     ¦   «          |��t#          |t$          t&          j        f¦  «        r`t*                               d||¦  «         | j         5  |                      ¦   «         | _        ddd¦  «         n# 1 swxY w Y   |j        cY d}~S ‚ d}~ww xY w| j         5  || _        | j        }d| _        ddd¦  «         n# 1 swxY w Y   |€J ‚|                     ¦   «          |j        S )z5Return a valid bearer token, refreshing if necessary.TNr   zGAdvisory token refresh failed (%ds remaining); serving cached token: %s)r!   r"   Ú
expires_atÚtokenr   r   r   r#   r%   Ú ADVISORY_REFRESH_BACKOFF_SECONDSr   r   ÚEventÚwaitr6   ÚBaseExceptionÚsetÚ
isinstancer   ÚhttpxÚ	HTTPErrorr   Úwarning)	r&   Úadvisory_fallbackÚremaining_secondsÚcachedÚ	remainingÚwaiter_eventÚfreshr0   Úreleaseds	            r'   Ú	get_tokenzTokenCache.get_tokeni   s0  € ðD	Ø7;ÐØ !ÐØ”ð (ð (Øœ�ØÐ%ØÔ(Ð0Ø%œ|ð	(ð (ð (ð (ñ (ô (ð (ð (ð
 !'Ô 1°D×4EÒ4EÑ4GÔ4GÑ G�IØ  4¤>Ò1Ð1Ø%œ|ð(ð (ð (ð (ñ (ô (ð (ð (ð ! 4¤?Ò2Ð2ð  Ô.Ð:Ø#)¤<ð(ð (ð (ð (ñ (ô (ð (ð (ð   ×,Ò,Ñ.Ô.°Ô1QÑQÕTtÒtÐtØ#)¤<ð#(ð (ð (ð (ñ (ô (ð (ð (ð$ -3Ð)Ý,/°	©N¬NÐ)àÔ&Ð2à>BÔ>Q�L�Lõ +4¬/Ñ*;Ô*;�DÔ'Ø#'�Lð7(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð: Ð'Ø×!Ò!Ñ#Ô#Ð#ñ ðØ×+Ò+Ñ-Ô-��øÝ ð ð ð Ø”Zð /ð /Ø#Ô2�HØ*.�DÔ'ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð  Ð+Ð+Ð+Ø—’‘”�Ø$Ð0µZÀÅnÕV[ÔVeÐEfÑ5gÔ5gÐ0Ý—K’KØaØ)Øñô ð ð
 œð Oð OØ;?×;LÒ;LÑ;NÔ;N˜Ô8ðOð Oð Oñ Oô Oð Oð Oð Oð Oð Oð Oøøøð Oð Oð Oð Oà,Ô2Ð2Ð2Ð2Ð2Ð2Ð2Øøøøøðøøøð" ”ð +ð +Ø$�”ØÔ.�Ø&*�Ô#ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð Ð'Ð'Ð'Ø�LŠL‰NŒNˆNØ”;Ðs§   �D±-DÁ+DÂ+DÃ:DÄDÄDÄ2E Å
HÅHÅE3Å'HÅ3E7	Å7HÅ:E7	Å;A!HÇHÇ6HÈH	ÈHÈ	H	È
	HÈHÈHÈHÈ)IÉIÉIc                ób   — | j         5  d| _        d| _        ddd¦  «         dS # 1 swxY w Y   dS )zôClear the cached token so the next :meth:`get_token` re-invokes the provider.

        Also sets a one-shot ``force_refresh`` flag so on-disk providers skip
        their freshness short-circuit instead of re-serving the revoked token.
        NT)r!   r"   r$   )r&   s    r'   Ú
invalidatezTokenCache.invalidate±   s   € ð ŒZð 	$ð 	$ØˆDŒLØ#ˆDÔð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð 	$ð 	$s   ˆ$¤(«(N)
r   r   r   r   r   r   r   r   r   r   )r*   r+   r   r   )r   r   )r   r/   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   Útimer(   r1   r6   rJ   rL   © r)   r'   r   r      sŸ   € € € € € ðð ð: )AØ)BØ+/¬9ð6ð 6ð 6ð 6ð 6ð 6ð2
$ð 
$ð 
$ð 
$ðð ð ð ð"Fð Fð Fð FðP$ð $ð $ð $ð $ð $r)   )Ú
__future__r   rQ   Úloggingr   Útypingr   r   r@   Ú_typesr   r   Ú	_workloadr	   Ú
_constantsr
   r   Ú_exceptionsr   Ú__all__Ú	getLoggerrM   r   Ú__annotations__r:   r   rR   r)   r'   ú<module>r]      s  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à €€€à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ )Ð )Ð )Ð )Ð )Ð )àˆ.€à'�gÔ'¨Ñ1Ô1€Ð 1Ð 1Ð 1Ñ 1ð
 $%Ð  ð`$ð `$ð `$ð `$ð `$ñ `$ô `$ð `$ð `$ð `$r)   