§
    ÜŽ’j¸)  ã                  ó
  — d dl mZ d dlZd dlZd dlZd dlmZ ddlmZ dZ	dZ
dZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd:d„Zd;d „Z d<d"„Z!d:d#„Z"d=d'„Z#d(d)œd>d,„Z$d?d/„Z%d@d0„Z&d@d1„Z'dAd3„Z(dAd4„Z)dBdCd8„Z*dAd9„Z+dS )Dé    )ÚannotationsN)ÚOptionalé   )ÚAnthropicErrorz+urn:ietf:params:oauth:grant-type:jwt-bearerÚrefresh_tokenz/v1/oauth/tokeng      >@zoauth-2025-04-20zoidc-federation-2026-04-01éx   é   Údefaultzhttps://api.anthropic.comÚANTHROPIC_API_KEYÚANTHROPIC_AUTH_TOKENÚANTHROPIC_CONFIG_DIRÚANTHROPIC_PROFILEÚANTHROPIC_IDENTITY_TOKENÚANTHROPIC_IDENTITY_TOKEN_FILEÚANTHROPIC_FEDERATION_RULE_IDÚANTHROPIC_ORGANIZATION_IDÚANTHROPIC_SERVICE_ACCOUNT_IDÚANTHROPIC_WORKSPACE_IDÚANTHROPIC_SCOPEÚANTHROPIC_BASE_URLÚreturnÚstrc                 ó   — ddl m}  d| › �S )zÌ``User-Agent`` value sent on token-endpoint POSTs.

    Computed lazily so this module doesn't need to import ``_version`` at
    module load time (the credentials package is otherwise import-light).
    r   ©Ú__version__zanthropic-python/)Ú_versionr   r   s    úRC:\Projects\DSCons\.venv\Lib\site-packages\anthropic\lib\credentials\_constants.pyÚ_user_agentr   8   s$   € ð (Ð'Ð'Ð'Ð'Ð'à,˜{Ð,Ð,Ð,ó    úpathlib.Pathc                 óš  — t           j                             t          ¦  «        } | rt	          j        | ¦  «        S t          j        dk    r^t           j                             d¦  «        }|rt	          j        |¦  «        n#t          j                             ¦   «         dz  dz  }|dz  S t          j                             ¦   «         dz  dz  S )uY  Resolve the config directory.

    ``ANTHROPIC_CONFIG_DIR`` env var â†’ platform default.

    Platform defaults:
      * Linux & macOS: ``~/.config/anthropic/`` â€” XDG-style on both platforms
        for consistency across SDKs (macOS does **not** use
        ``~/Library/Application Support/``).
      * Windows: ``%APPDATA%\Anthropic\``
    Úwin32ÚAPPDATAÚAppDataÚRoamingÚ	Anthropicz.configÚ	anthropic)	ÚosÚenvironÚgetÚENV_CONFIG_DIRÚpathlibÚPathÚsysÚplatformÚhome)ÚenvÚappdataÚbases      r   Ú_config_dirr4   C   sª   € õ Œ*�.Š.�Ñ
(Ô
(€CØ
ð !ÝŒ|˜CÑ Ô Ð Ý
„|�wÒÐÝ”*—.’. Ñ+Ô+ˆØ(/Ð`�wŒ|˜GÑ$Ô$Ð$µW´\×5FÒ5FÑ5HÔ5HÈ9Ñ5TÐW`Ñ5`ˆØ�kÑ!Ð!ÝŒ<×ÒÑÔ Ñ*¨[Ñ8Ð8r   úOptional[str]c                 óž   — 	 t          ¦   «         dz                       d¬¦  «                             ¦   «         } n# t          $ r Y dS w xY w| pdS )zxReturn the stripped contents of ``<config_dir>/active_config``, or ``None``
    if the pointer file is missing or empty.Úactive_configzutf-8)ÚencodingN)r4   Ú	read_textÚstripÚOSError)Únames    r   Ú_read_active_config_pointerr=   X   s`   € ðÝ‘” Ñ/×:Ò:ÀGÐ:ÑLÔL×RÒRÑTÔTˆˆøÝð ð ð Øˆtˆtðøøøàˆ<�4Ðs   ‚7: º
AÁAc                 óÒ   — t           j                             t          ¦  «        } | rt	          | t          ¬¦  «         | S t          ¦   «         }|€t          S t	          |d¬¦  «         |S )uò   Resolve the active profile name.

    ``ANTHROPIC_PROFILE`` env var â†’ ``<config_dir>/active_config`` pointer file
    â†’ ``"default"`` literal. The resolved name is validated against path-
    traversal patterns before being returned.
    ©ÚsourceNzactive_config pointer file)r(   r)   r*   ÚENV_PROFILEÚ_validate_profile_namer=   ÚDEFAULT_PROFILE)r1   r<   s     r   Ú_active_profilerD   b   sf   € õ Œ*�.Š.�Ñ
%Ô
%€CØ
ð Ý˜s­;Ð7Ñ7Ô7Ð7Øˆ
Ý&Ñ(Ô(€DØ€|ÝÐÝ˜4Ð(DÐEÑEÔEÐEØ€Kr   ÚurlÚfieldÚNonec               óÖ   — |                       ¦   «                              d¦  «        }|                     d¦  «        rdS |                     d¦  «        rdS t          |› d| ›d�¦  «        ‚)a;  Reject non-``https://`` token-endpoint URLs.

    Localhost is allowed for testing so ``base_url="http://localhost:8080"``
    works against a local ``oauth_server`` instance; everything else must be
    TLS-encrypted because the body of these POSTs carries the assertion JWT
    or a long-lived refresh token.
    ú/zhttps://N)zhttp://localhostzhttp://127.0.0.1zhttp://[::1]z must use https (got z^); the token-exchange endpoint carries secret material and cannot be used over cleartext HTTP.)ÚlowerÚrstripÚ
startswithr   )rE   rF   Úlowereds      r   Ú_require_httpsrN   t   s‹   € ð �iŠi‰kŒk× Ò  Ñ%Ô%€GØ×Ò˜*Ñ%Ô%ð ØˆØ×ÒÐRÑSÔSð ØˆÝ
Øð 	Kð 	K sð 	Kð 	Kð 	Kñô ð r   zprofile namer?   Úprofiler@   c          	     ón  — | st          |› d�¦  «        ‚| |                      ¦   «         k    rt          |› d| ›d�¦  «        ‚|                      d¦  «        rt          |› d| ›d�¦  «        ‚ddt          j        fD ] }|r|| v rt          |› d| ›d|›d�¦  «        ‚Œ!d	| v rt          |› d| ›d
�¦  «        ‚dS )aÝ  Reject profile names that could escape the config directory.

    Profile names come from user-controlled sources (``ANTHROPIC_PROFILE``,
    the ``active_config`` pointer file, ``CredentialsFile(profile=...)``) and
    are interpolated into filesystem paths. A value like ``"../../etc/shadow"``
    would otherwise let a read of ``configs/<profile>.json`` escape the config
    root entirely. Pass ``source=`` so the error message names where the bad
    value came from.
    z must not be empty.ú z$ has leading or trailing whitespace.ú.z must not start with a dot.rI   ú\um    must not contain path separators â€” profiles are filenames under the config directory. Pick a name without ú z must not contain null bytes.N)r   r:   rL   r(   Úsep)rO   r@   rU   s      r   rB   rB   ‡   s,  € ð ð =Ý Ð;Ð;Ð;Ñ<Ô<Ð<Ø�'—-’-‘/”/Ò!Ð!Ý ÐXÐX¨ÐXÐXÐXÑYÔYÐYØ×Ò˜#ÑÔð QÝ ÐOÐO¨ÐOÐOÐOÑPÔPÐPØ�T�2œ6Ð"ð ð ˆØð 	�3˜'�>�>Ý Øð cð c˜Gð cð cØZ]ðcð cð cñô ð øð �ÐÐÝ ÐQÐQ¨ÐQÐQÐQÑRÔRÐRð Ðr   r3   Ú	candidatec                óÞ   — |                       d¬¦  «        }|                      d¬¦  «        }	 |                     |¦  «         n)# t          $ r}t          d|› d|› d�¦  «        |‚d}~ww xY w|S )u®  Assert ``candidate`` resolves to a descendant of ``base``, return it verbatim.

    The containment check uses ``resolve(strict=False)`` on both sides so
    symlinks and ``..`` segments are normalized for the purposes of escape
    detection. The returned path is the *original* (unresolved) candidate â€”
    callers that care about symlink following must handle it themselves
    (e.g. ``os.stat(follow_symlinks=False)``).
    F)ÚstrictzResolved path z escapes config directory rR   N)ÚresolveÚrelative_toÚ
ValueErrorr   )r3   rV   Úbase_resolvedÚcandidate_resolvedÚerrs        r   Ú_resolve_underr_   ¡   s›   € ð —L’L¨�LÑ.Ô.€MØ"×*Ò*°%Ð*Ñ8Ô8ÐðwØ×&Ò& }Ñ5Ô5Ð5Ð5øÝð wð wð wÝÐlÐ.@ÐlÐlÐ\iÐlÐlÐlÑmÔmÐsvÐvøøøøðwøøøàÐs   ®A Á
A*ÁA%Á%A*c                ón   — t          | ¦  «         t          ¦   «         }t          ||dz  | › d�z  ¦  «        S )zCPath to ``<config_dir>/configs/<profile>.json`` (non-secret, 0644).Úconfigsú.json©rB   r4   r_   ©rO   r3   s     r   Ú_config_file_pathre   ³   s<   € å˜7Ñ#Ô#Ð#Ý‰=Œ=€DÝ˜$  yÑ 0°gÐ3DÐ3DÐ3DÑ DÑEÔEÐEr   c                ón   — t          | ¦  «         t          ¦   «         }t          ||dz  | › d�z  ¦  «        S )zCPath to ``<config_dir>/credentials/<profile>.json`` (secret, 0600).Úcredentialsrb   rc   rd   s     r   Ú_credentials_file_pathrh   º   s<   € å˜7Ñ#Ô#Ð#Ý‰=Œ=€DÝ˜$  }Ñ 4¸'Ð7HÐ7HÐ7HÑ HÑIÔIÐIr   Úboolc                 óŽ   — 	 t          t          ¦   «         ¦  «                             ¦   «         S # t          t          f$ r Y dS w xY w)a   Tighter auto-discover check for the tier-1 credential chain.

    Returns ``True`` only if the *active* profile's config file exists. The
    previous version returned ``True`` for any ``.json`` under ``configs/``,
    which meant a stray ``configs/work.json`` on disk was enough to steer
    ``default_credentials()`` into reading ``configs/default.json`` and
    failing because ``default.json`` wasn't there.
    F)re   rD   Úis_filer;   r   © r   r   Ú_has_active_profile_configrm   Á   sN   € ðÝ ¥Ñ!2Ô!2Ñ3Ô3×;Ò;Ñ=Ô=Ð=øÝ•^Ð$ð ð ð Øˆuˆuðøøøs   ‚,/ ¯AÁAc                 ó"   — t          ¦   «         duS )u‘  True if the user wrote a non-empty ``active_config`` pointer file.

    This is an explicit opt-in signal equivalent to setting ``ANTHROPIC_PROFILE``:
    the user has told us which profile to load. If the target config file is
    missing or malformed, the chain should surface that error rather than
    silently falling through â€” matching how ``ANTHROPIC_PROFILE=missing``
    behaves today.
    N)r=   rl   r   r   Ú_has_explicit_active_configro   Ð   s   € õ 'Ñ(Ô(°Ð4Ð4r   Úpathústr | os.PathLike[str] | Noneúpathlib.Path | Nonec                ó¦   — | �t          j        | ¦  «        S t          j                             t
          ¦  «        }|rt          j        |¦  «        S dS )u<   ctor arg â†’ ``ANTHROPIC_IDENTITY_TOKEN_FILE`` â†’ ``None``.N)r,   r-   r(   r)   r*   ÚENV_IDENTITY_TOKEN_FILE)rp   r1   s     r   Úresolve_identity_token_pathru   Ü   sI   € àÐÝŒ|˜DÑ!Ô!Ð!Ý
Œ*�.Š.Õ0Ñ
1Ô
1€CØ
ð !ÝŒ|˜CÑ Ô Ð Øˆ4r   c                 óÞ  — t           j                             t          ¦  «        s$t           j                             t          ¦  «        rdS t          ¦   «         rdS t           j                             t          ¦  «        rnt           j                             t          ¦  «        rJt           j                             t          ¦  «        s$t           j                             t          ¦  «        rdS dS )uÒ  True if the environment / filesystem contains signals that would
    normally drive the tier-1 (profile) or tier-2 (env federation) paths of
    :func:`default_credentials`.

    Used by the shadow-warning detection in the client constructor: if a
    static ``ANTHROPIC_API_KEY`` / ``ANTHROPIC_AUTH_TOKEN`` is set alongside
    any of these signals, the auto-discovery would have yielded a credential
    but got silently shadowed â€” and the user should know.
    TF)
r(   r)   r*   rA   r+   ro   ÚENV_FEDERATION_RULE_IDÚENV_ORGANIZATION_IDrt   ÚENV_IDENTITY_TOKENrl   r   r   Ú"_has_auto_discoverable_credentialsrz   æ   s«   € õ 
„z‡~‚~•kÑ"Ô"ð ¥b¤j§n¢nµ^Ñ&DÔ&Dð ØˆtÝ"Ñ$Ô$ð ØˆtÝ	„z‡~‚~Õ,Ñ-Ô-ð µ"´*·.².ÕATÑ2UÔ2Uð ÝŒ:�>Š>Õ1Ñ2Ô2ð 	µb´j·n²nÕEWÑ6XÔ6Xð 	Ø�4Øˆ5r   )r   r   )r   r    )r   r5   )rE   r   rF   r   r   rG   )rO   r   r@   r   r   rG   )r3   r    rV   r    r   r    )rO   r   r   r    )r   ri   )N)rp   rq   r   rr   ),Ú
__future__r   r(   r.   r,   Útypingr   Ú_exceptionsr   ÚGRANT_TYPE_JWT_BEARERÚGRANT_TYPE_REFRESH_TOKENÚTOKEN_ENDPOINTÚTOKEN_EXCHANGE_TIMEOUTÚOAUTH_API_BETA_HEADERÚFEDERATION_BETA_HEADERÚADVISORY_REFRESH_SECONDSÚMANDATORY_REFRESH_SECONDSrC   ÚDEFAULT_BASE_URLÚENV_API_KEYÚENV_AUTH_TOKENr+   rA   ry   rt   rw   rx   ÚENV_SERVICE_ACCOUNT_IDÚENV_WORKSPACE_IDÚ	ENV_SCOPEÚENV_BASE_URLr   r4   r=   rD   rN   rB   r_   re   rh   rm   ro   ru   rz   rl   r   r   ú<module>r�      s  ðØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð à )Ð )Ð )Ð )Ð )Ð )àEÐ Ø*Ð Ø"€ð Ð ð
 +Ð ð 6Ð ð Ð ØÐ à€Ø.Ð ð "€Ø'€ð (€Ø!€ð 0Ð Ø9Ð Ø7Ð Ø1Ð Ø7Ð Ø+Ð Ø€	Ø#€ð-ð -ð -ð -ð9ð 9ð 9ð 9ð*ð ð ð ðð ð ð ð$ð ð ð ð& ;Ið Sð Sð Sð Sð Sð Sð4ð ð ð ð$Fð Fð Fð FðJð Jð Jð Jðð ð ð ð	5ð 	5ð 	5ð 	5ðð ð ð ð ðð ð ð ð ð r   