ó
    °"³jÙ  ã                  óÂ   • S SK Jr  S SKrS SKJr  SSKJrJr  SSKJ	r	  SSK
JrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJrJrJr  S	S
KJrJr  S/rSS jr SS.SS jjr!g)é    )ÚannotationsN)ÚOptionalé   )ÚCredentialResultÚIdentityTokenProvider)ÚWorkloadIdentityCredentials)Ú	ENV_SCOPEÚENV_API_KEYÚENV_PROFILEÚENV_AUTH_TOKENÚENV_CONFIG_DIRÚENV_WORKSPACE_IDÚENV_IDENTITY_TOKENÚENV_ORGANIZATION_IDÚENV_FEDERATION_RULE_IDÚENV_SERVICE_ACCOUNT_IDÚ_has_active_profile_configÚ_has_explicit_active_configÚresolve_identity_token_path)ÚStaticTokenÚCredentialsFileÚIdentityTokenFileé   )ÚAnthropicErrorÚCredentialsErrorÚdefault_credentialsc           
     óX  • [         R                  R                  [        5      n[         R                  R                  [        5      n[
        [         R                  ;   n[        5       nU(       a  U(       d  gU(       d  Uc  gUb  [        U5      nOSS jnUn[        UUU[         R                  R                  [        5      [         R                  R                  [        5      =(       d    S[         R                  R                  [        5      S9nUR                  U 5        [        US9$ )z�Build a `CredentialResult` for the env-var federation path
(step 4 in the precedence spec). Returns `None` if the required trio
isn't fully set.Nc                 óv   • [         R                  R                  [        5      n U c  [	        [         S35      eU $ )Nzz is not set; the workload-identity chain selected this provider at construction time but the env var is no longer present.)ÚosÚenvironÚgetr   r   )Úvalues    Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/anthropic/lib/credentials/_chain.pyÚ_read_env_tokenÚ1_build_federation_result.<locals>._read_env_token1   s>   € Ü—J‘J—N‘NÔ#5Ó6ˆEØ‰}Ü&Ü)Ð*ð +,ð -óð ð
 ˆLó    )Úidentity_token_providerÚfederation_rule_idÚorganization_idÚservice_account_idÚworkspace_idÚscope©Úprovider)ÚreturnÚstr)r   r    r!   r   r   r   r   r   r   r   r   r	   Úbind_base_urlr   )Úbase_urlr(   r)   Úhas_literal_tokenÚidentity_token_pathÚidentity_providerr$   r.   s           r#   Ú_build_federation_resultr6      sß   € ô Ÿ™Ÿ™Ô(>Ó?ÐÜ—j‘j—n‘nÔ%8Ó9€OÜ*¬b¯j©jÑ8ÐÜ5Ó7Ðæ¦_ØÞÐ!4Ñ!<Øð Ñ&Ü-Ð.AÓBÑô	ð ,Ðä*Ø 1Ø-Ø'ÜŸ:™:Ÿ>™>Ô*@ÓAô —Z‘Z—^‘^Ô$4Ó5×=¸Ü�j‰j�n‰nœYÓ'ñ
€Hð ×Ñ˜8Ô$Ü XÑ.Ð.r&   zhttps://api.anthropic.com©r2   c                ó  • [         R                  R                  [        5      (       a  g[         R                  R                  [        5      nU(       a  [        [        U5      S9$ [        [         R                  R                  [        5      =(       d#    [         R                  R                  [        5      5      n[        5       nU(       d  U(       a@  [        5       nUR                  U 5        UR                  5       n[        UUUR                  S9$ [        U S9nUb  U$ [!        5       (       aA  [        5       nUR                  U 5         UR                  5       n[        UUUR                  S9$ g! ["         a     gf = f)u9  Resolve a `CredentialResult` from the environment per the
credential-resolution spec. First match wins.

Implements steps 2-5 of the spec precedence chain (step 1 is handled at
the client constructor level, above this function):

Step 2a: `ANTHROPIC_API_KEY` â†’ return `None` so the client uses its
         existing `X-Api-Key` header path. (API keys are not Bearer
         tokens, so they can't flow through this chain.)
Step 2b: `ANTHROPIC_AUTH_TOKEN` â†’ `StaticToken` (Bearer).
Step 3:  `ANTHROPIC_PROFILE` / `ANTHROPIC_CONFIG_DIR` set, or the
         `active_config` pointer file exists â†’ load that profile.
         This is *explicit profile selection*; failures propagate.
Step 4:  `ANTHROPIC_FEDERATION_RULE_ID` + `ANTHROPIC_ORGANIZATION_ID`
         + `ANTHROPIC_IDENTITY_TOKEN[_FILE]` â†’ direct jwt-bearer
         exchange via `WorkloadIdentityCredentials`. Critically,
         step 4 sits **between** explicit profile (step 3) and
         fallback profile (step 5): a machine with WIF env vars wired
         up must use WIF even if a leftover `default` profile exists
         on disk, but a user who explicitly `ANTHROPIC_PROFILE=dev`
         still gets their profile.
Step 5:  Fallback active profile from disk (`configs/default.json`
         or whatever `active_config` points at). Errors at this step
         are swallowed and the chain falls through â€” a corrupt
         unselected profile shouldn't break an otherwise-explicit
         api_key= path.

Returns `None` when nothing matches â€” the client will fall back to
its normal "no auth configured" error.
Nr-   )r.   Úextra_headersr2   r7   )r   r    r!   r
   r   r   r   Úboolr   r   r   r   r1   r9   Úresolved_base_urlr6   r   r   )r2   Ú
auth_tokenÚenv_explicitÚpointer_explicitÚ
creds_filer9   Úfederation_results          r#   r   r   L   s@  € ô@ 
‡z�z‡~�~”k×"Ñ"Øô —‘—‘¤Ó/€JÞÜ¬°ZÓ)@ÑAÐAô
 œŸ
™
Ÿ™¤{Ó3×U´r·z±z·~±~ÄnÓ7UÓV€LÜ2Ó4ÐÞÖ'Ü$Ó&ˆ
Ø× Ñ  Ô*Ø"×0Ñ0Ó2ˆÜØØ'Ø×1Ñ1ñ
ð 	
ô 1¸(ÑCÐØÑ$Ø Ð ô "×#Ñ#Ü$Ó&ˆ
Ø× Ñ  Ô*ð	Ø&×4Ñ4Ó6ˆMô  ØØ'Ø×1Ñ1ñ
ð 	
ð øô ó 	Ùð	ús   ÅE3 Å3
F Å?F )r2   r0   r/   zOptional[CredentialResult])"Ú
__future__r   r   Útypingr   Ú_typesr   r   Ú	_workloadr   Ú
_constantsr	   r
   r   r   r   r   r   r   r   r   r   r   r   Ú
_providersr   r   r   Ú_exceptionsr   r   Ú__all__r6   r   © r&   r#   Ú<module>rJ      sT   ðÝ "ã 	Ý ç ;Ý 2÷÷ ÷ õ ÷ HÑ Gß ;à Ð
!€ô,/ð^ ,G÷ Oð Or&   